| 1 | /*************************************************************** |
|---|
| 2 | ** |
|---|
| 3 | ** Broadcom Corp. Confidential |
|---|
| 4 | ** Copyright 2003-2012 Broadcom Corp. All Rights Reserved. |
|---|
| 5 | ** |
|---|
| 6 | ** THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED |
|---|
| 7 | ** SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM. |
|---|
| 8 | ** YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT |
|---|
| 9 | ** SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. |
|---|
| 10 | ** |
|---|
| 11 | ** File: si_nim_mmt.c |
|---|
| 12 | ** Description: function that parses the MMT table of the NIM |
|---|
| 13 | ** table section. |
|---|
| 14 | ** |
|---|
| 15 | ** Created: 03/08/2001 |
|---|
| 16 | ** 02/01/2012 modified for A56 support |
|---|
| 17 | ** |
|---|
| 18 | ** REVISION: |
|---|
| 19 | ** |
|---|
| 20 | ** $Log: $ |
|---|
| 21 | ** |
|---|
| 22 | ** |
|---|
| 23 | ****************************************************************/ |
|---|
| 24 | |
|---|
| 25 | #include "si.h" |
|---|
| 26 | #include "si_os.h" |
|---|
| 27 | #include "si_dbg.h" |
|---|
| 28 | #include "si_util.h" |
|---|
| 29 | #include "si_nim_mmt.h" |
|---|
| 30 | |
|---|
| 31 | NIM_MMT_RECORD NIM_MMT_Table[NIM_MMT_MAX_TABLE_SIZE]; |
|---|
| 32 | unsigned long Total_NIM_MMT_entries = 0; |
|---|
| 33 | static SI_NIM_MMT_Callback_t *s_SI_MMT_Callback = NULL; |
|---|
| 34 | |
|---|
| 35 | void SI_NIM_MMT_Init (SI_NIM_MMT_Callback_t *p_cb) |
|---|
| 36 | { |
|---|
| 37 | SI_memset(NIM_MMT_Table, 0, sizeof(NIM_MMT_Table)); |
|---|
| 38 | Total_NIM_MMT_entries =0; |
|---|
| 39 | s_SI_MMT_Callback = p_cb; |
|---|
| 40 | } |
|---|
| 41 | |
|---|
| 42 | /*********************************************************************/ |
|---|
| 43 | /* Function : SI_NIM_MMT_parse */ |
|---|
| 44 | /* Description : Function to parse the MMT table and populate the */ |
|---|
| 45 | /* carrier freq table. */ |
|---|
| 46 | /* Input : mmt_record, point to the current ith MMT table */ |
|---|
| 47 | /* defined in NIM table section. There may be up to */ |
|---|
| 48 | /* number_of_record MMT table defined in NIM table */ |
|---|
| 49 | /* section. See table 5.1 of ANSI/A56 */ |
|---|
| 50 | /* idx, point to the location where this MMT will be */ |
|---|
| 51 | /* located in the overall MMT table. */ |
|---|
| 52 | /* Output : none */ |
|---|
| 53 | /*********************************************************************/ |
|---|
| 54 | void SI_NIM_MMT_parse (unsigned char * mmt_record, unsigned char idx) |
|---|
| 55 | { |
|---|
| 56 | int tmp; |
|---|
| 57 | |
|---|
| 58 | SI_DBG_PRINT(E_SI_DBG_MSG,("NIM MMT Table received.\n")); |
|---|
| 59 | |
|---|
| 60 | tmp = SI_Construct_Data(mmt_record, |
|---|
| 61 | NIM_MMT_TRANSMISSION_SYSTEM_BYTE_INDX, |
|---|
| 62 | NIM_MMT_TRANSMISSION_SYSTEM_BYTE_NUM, |
|---|
| 63 | NIM_MMT_TRANSMISSION_SYSTEM_SHIFT, |
|---|
| 64 | NIM_MMT_TRANSMISSION_SYSTEM_MASK); |
|---|
| 65 | |
|---|
| 66 | /* little bit validation check */ |
|---|
| 67 | if ((tmp < TS_ITU_T_ANNEX_A) || (tmp > TS_ITU_T_ANNEX_D)) { |
|---|
| 68 | SI_DBG_PRINT(E_SI_DBG_WRN,("Invalid transmission system\n")); |
|---|
| 69 | return; |
|---|
| 70 | } |
|---|
| 71 | NIM_MMT_Table[idx].transmission_system = (unsigned char)tmp; |
|---|
| 72 | |
|---|
| 73 | NIM_MMT_Table[idx].inner_coding_mode = SI_Construct_Data(mmt_record, |
|---|
| 74 | NIM_MMT_INNER_CODING_MODE_BYTE_INDX, |
|---|
| 75 | NIM_MMT_INNER_CODING_MODE_BYTE_NUM, |
|---|
| 76 | NIM_MMT_INNER_CODING_MODE_SHIFT, |
|---|
| 77 | NIM_MMT_INNER_CODING_MODE_MASK); |
|---|
| 78 | |
|---|
| 79 | NIM_MMT_Table[idx].split_bitstream_mode = SI_Construct_Data(mmt_record, |
|---|
| 80 | NIM_MMT_SPLIT_BITSTREAM_MODE_BYTE_INDX, |
|---|
| 81 | NIM_MMT_SPLIT_BITSTREAM_MODE_BYTE_NUM, |
|---|
| 82 | NIM_MMT_SPLIT_BITSTREAM_MODE_SHIFT, |
|---|
| 83 | NIM_MMT_SPLIT_BITSTREAM_MODE_MASK); |
|---|
| 84 | |
|---|
| 85 | tmp = SI_Construct_Data(mmt_record, |
|---|
| 86 | NIM_MMT_MODULATION_FORMAT_BYTE_INDX, |
|---|
| 87 | NIM_MMT_MODULATION_FORMAT_BYTE_NUM, |
|---|
| 88 | NIM_MMT_MODULATION_FORMAT_SHIFT, |
|---|
| 89 | NIM_MMT_MODULATION_FORMAT_MASK); |
|---|
| 90 | if ((tmp != MOD_QPSK) && (tmp != MOD_QAM64) && (tmp != MOD_QAM256)) { |
|---|
| 91 | SI_DBG_PRINT(E_SI_DBG_WRN,("Unsupported modulation format\n")); |
|---|
| 92 | return; |
|---|
| 93 | } |
|---|
| 94 | |
|---|
| 95 | NIM_MMT_Table[idx].modulation_format = (unsigned char)tmp; |
|---|
| 96 | |
|---|
| 97 | NIM_MMT_Table[idx].symbol_rate = SI_Construct_Data(mmt_record, |
|---|
| 98 | NIM_MMT_SYMBOL_RATE_BYTE_INDX, |
|---|
| 99 | NIM_MMT_SYMBOL_RATE_BYTE_NUM, |
|---|
| 100 | NIM_MMT_SYMBOL_RATE_SHIFT, |
|---|
| 101 | NIM_MMT_SYMBOL_RATE_MASK); |
|---|
| 102 | |
|---|
| 103 | NIM_MMT_Table[idx].idx = idx; |
|---|
| 104 | Total_NIM_MMT_entries++; |
|---|
| 105 | if (s_SI_MMT_Callback) |
|---|
| 106 | { |
|---|
| 107 | s_SI_MMT_Callback->cb(&NIM_MMT_Table[idx],s_SI_MMT_Callback->data); |
|---|
| 108 | } |
|---|
| 109 | SI_DBG_PRINT(E_SI_DBG_MSG,("NIM MMT Entry: index %x, xmit sys %x, inner code %x, mod %x, symb rate %x symb/s\n", idx,NIM_MMT_Table[idx].transmission_system,NIM_MMT_Table[idx].inner_coding_mode,NIM_MMT_Table[idx].modulation_format,NIM_MMT_Table[idx].symbol_rate)); |
|---|
| 110 | } |
|---|