1 #ifndef CDU_DEF_H 2 #define CDU_DEF_H 3 4 #define CDU_REGION_NUMBER_XCM_AG 2 5 #define CDU_REGION_NUMBER_UCM_AG 4 6 7 8 /* String-to-compress [31:8] = CID (all 24 bits) 9 * String-to-compress [7:4] = Region 10 * String-to-compress [3:0] = Type 11 */ 12 #define CDU_VALID_DATA(_cid, _region, _type) (((_cid) << 8) | (((_region)&0xf)<<4) | (((_type)&0xf))) 13 #define CDU_CRC8(_cid, _region, _type) (calc_crc8(CDU_VALID_DATA(_cid, _region, _type), 0xff)) 14 #define CDU_RSRVD_VALUE_TYPE_A(_cid, _region, _type) (0x80 | ((CDU_CRC8(_cid, _region, _type)) & 0x7f)) 15 #define CDU_RSRVD_VALUE_TYPE_B(_crc, _type) (0x80 | ((_type)&0xf << 3) | ((CDU_CRC8(_cid, _region, _type)) & 0x7)) 16 #define CDU_RSRVD_INVALIDATE_CONTEXT_VALUE(_val) ((_val) & ~0x80) 17 18 /****************************************************************************** 19 * Description: 20 * Calculates crc 8 on a word value: polynomial 0-1-2-8 21 * Code was translated from Verilog. 22 * Return: 23 *****************************************************************************/ 24 static u8 calc_crc8(u32 data, u8 crc) 25 { 26 u8 D[32]; 27 u8 NewCRC[8]; 28 u8 C[8]; 29 u8 crc_res; 30 u8 i; 31 32 /* split the data into 31 bits */ 33 for (i = 0; i < 32; i++) { 34 D[i] = (u8)(data & 1); 35 data = data >> 1; 36 } 37 38 /* split the crc into 8 bits */ 39 for (i = 0; i < 8; i++ ) { 40 C[i] = crc & 1; 41 crc = crc >> 1; 42 } 43 44 NewCRC[0] = D[31] ^ D[30] ^ D[28] ^ D[23] ^ D[21] ^ D[19] ^ D[18] ^ 45 D[16] ^ D[14] ^ D[12] ^ D[8] ^ D[7] ^ D[6] ^ D[0] ^ C[4] ^ 46 C[6] ^ C[7]; 47 NewCRC[1] = D[30] ^ D[29] ^ D[28] ^ D[24] ^ D[23] ^ D[22] ^ D[21] ^ 48 D[20] ^ D[18] ^ D[17] ^ D[16] ^ D[15] ^ D[14] ^ D[13] ^ 49 D[12] ^ D[9] ^ D[6] ^ D[1] ^ D[0] ^ C[0] ^ C[4] ^ C[5] ^ C[6]; 50 NewCRC[2] = D[29] ^ D[28] ^ D[25] ^ D[24] ^ D[22] ^ D[17] ^ D[15] ^ 51 D[13] ^ D[12] ^ D[10] ^ D[8] ^ D[6] ^ D[2] ^ D[1] ^ D[0] ^ 52 C[0] ^ C[1] ^ C[4] ^ C[5]; 53 NewCRC[3] = D[30] ^ D[29] ^ D[26] ^ D[25] ^ D[23] ^ D[18] ^ D[16] ^ 54 D[14] ^ D[13] ^ D[11] ^ D[9] ^ D[7] ^ D[3] ^ D[2] ^ D[1] ^ 55 C[1] ^ C[2] ^ C[5] ^ C[6]; 56 NewCRC[4] = D[31] ^ D[30] ^ D[27] ^ D[26] ^ D[24] ^ D[19] ^ D[17] ^ 57 D[15] ^ D[14] ^ D[12] ^ D[10] ^ D[8] ^ D[4] ^ D[3] ^ D[2] ^ 58 C[0] ^ C[2] ^ C[3] ^ C[6] ^ C[7]; 59 NewCRC[5] = D[31] ^ D[28] ^ D[27] ^ D[25] ^ D[20] ^ D[18] ^ D[16] ^ 60 D[15] ^ D[13] ^ D[11] ^ D[9] ^ D[5] ^ D[4] ^ D[3] ^ C[1] ^ 61 C[3] ^ C[4] ^ C[7]; 62 NewCRC[6] = D[29] ^ D[28] ^ D[26] ^ D[21] ^ D[19] ^ D[17] ^ D[16] ^ 63 D[14] ^ D[12] ^ D[10] ^ D[6] ^ D[5] ^ D[4] ^ C[2] ^ C[4] ^ C[5]; 64 NewCRC[7] = D[30] ^ D[29] ^ D[27] ^ D[22] ^ D[20] ^ D[18] ^ D[17] ^ 65 D[15] ^ D[13] ^ D[11] ^ D[7] ^ D[6] ^ D[5] ^ C[3] ^ C[5] ^ C[6]; 66 67 crc_res = 0; 68 for (i = 0; i < 8; i++) { 69 crc_res |= (NewCRC[i] << i); 70 } 71 72 return crc_res; 73 } 74 75 #endif //CDU_DEF_H 76 77