25 #include "opal_config.h"
31 #define CRC_POLYNOMIAL ((unsigned int)0x04c11db7)
32 #define CRC_INITIAL_REGISTER ((unsigned int)0xffffffff)
35 #define OPAL_CSUM( SRC, LEN ) opal_uicsum( SRC, LEN )
36 #define OPAL_CSUM_PARTIAL( SRC, LEN, UI1, UI2 ) \
37 opal_uicsum_partial( SRC, LEN, UI1, UI2 )
38 #define OPAL_CSUM_BCOPY_PARTIAL( SRC, DST, LEN1, LEN2, UI1, UI2 ) \
39 opal_bcopy_uicsum_partial( SRC, DST, LEN1, LEN2, UI1, UI2 )
40 #define OPAL_CSUM_ZERO 0
43 OPAL_DECLSPEC
unsigned long
44 opal_bcopy_csum_partial(
49 unsigned long* lastPartialLong,
50 size_t* lastPartialLength
53 static inline unsigned long
61 unsigned long plong = 0;
63 return opal_bcopy_csum_partial(source, destination, copylen, csumlen, &plong, &plength);
66 OPAL_DECLSPEC
unsigned int
67 opal_bcopy_uicsum_partial (
72 unsigned int* lastPartialInt,
73 size_t* lastPartialLength
76 static inline unsigned int
84 unsigned int pint = 0;
86 return opal_bcopy_uicsum_partial(source, destination, copylen, csumlen, &pint, &plength);
89 OPAL_DECLSPEC
unsigned long
93 unsigned long* lastPartialLong,
94 size_t* lastPartialLength
98 static inline unsigned long
99 opal_csum(
const void * source,
size_t csumlen)
101 unsigned long lastPartialLong = 0;
102 size_t lastPartialLength = 0;
103 return opal_csum_partial(source, csumlen, &lastPartialLong, &lastPartialLength);
108 static inline uint16_t
109 opal_csum16 (
const void * source,
size_t csumlen)
111 uint16_t *src = (uint16_t *) source;
112 register uint32_t csum = 0;
114 while (csumlen > 1) {
120 csum += *((
unsigned char*)src);
123 csum = (csum & 0xFFFF) + (csum >> 16);
128 OPAL_DECLSPEC
unsigned int
129 opal_uicsum_partial (
132 unsigned int * lastPartialInt,
133 size_t* lastPartialLength
136 static inline unsigned int
137 opal_uicsum(
const void * source,
size_t csumlen)
139 unsigned int lastPartialInt = 0;
140 size_t lastPartialLength = 0;
141 return opal_uicsum_partial(source, csumlen, &lastPartialInt, &lastPartialLength);
148 void opal_initialize_crc_table(
void);
150 OPAL_DECLSPEC
unsigned int
151 opal_bcopy_uicrc_partial(
156 unsigned int partial_crc);
158 static inline unsigned int
165 return opal_bcopy_uicrc_partial(source, destination, copylen, crclen, CRC_INITIAL_REGISTER);
168 OPAL_DECLSPEC
unsigned int
172 unsigned int partial_crc);
175 static inline unsigned int
176 opal_uicrc(
const void * source,
size_t crclen)
178 return opal_uicrc_partial(source, crclen, CRC_INITIAL_REGISTER);