This source file includes following definitions.
- opal_bcopy_csum
- opal_bcopy_uicsum
- opal_csum
- opal_csum16
- opal_uicsum
- opal_bcopy_uicrc
- opal_uicrc
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 #ifndef _OPAL_CRC_H_
  23 #define _OPAL_CRC_H_
  24 
  25 #include "opal_config.h"
  26 
  27 #include <stddef.h>
  28 
  29 BEGIN_C_DECLS
  30 
  31 #define CRC_POLYNOMIAL ((unsigned int)0x04c11db7)
  32 #define CRC_INITIAL_REGISTER ((unsigned int)0xffffffff)
  33 
  34 
  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
  41 
  42 
  43 OPAL_DECLSPEC unsigned long
  44 opal_bcopy_csum_partial(
  45     const void *  source,
  46     void *  destination,
  47     size_t copylen,
  48     size_t csumlen,
  49     unsigned long*  lastPartialLong,
  50     size_t*  lastPartialLength
  51     );
  52 
  53 static inline unsigned long
  54 opal_bcopy_csum (
  55     const void *  source,
  56     void *  destination,
  57     size_t copylen,
  58     size_t csumlen
  59     )
  60 {
  61     unsigned long plong = 0;
  62     size_t plength = 0;
  63     return opal_bcopy_csum_partial(source, destination, copylen, csumlen, &plong, &plength);
  64 }
  65 
  66 OPAL_DECLSPEC unsigned int
  67 opal_bcopy_uicsum_partial (
  68     const void *  source,
  69     void *  destination,
  70     size_t copylen,
  71     size_t csumlen,
  72     unsigned int*  lastPartialInt,
  73     size_t*  lastPartialLength
  74     );
  75 
  76 static inline unsigned int
  77 opal_bcopy_uicsum (
  78     const void *  source,
  79     void *  destination,
  80     size_t copylen,
  81     size_t csumlen
  82     )
  83 {
  84     unsigned int pint = 0;
  85     size_t plength = 0;
  86     return opal_bcopy_uicsum_partial(source, destination, copylen, csumlen, &pint, &plength);
  87 }
  88 
  89 OPAL_DECLSPEC unsigned long
  90 opal_csum_partial (
  91     const void *  source,
  92     size_t csumlen,
  93     unsigned long*  lastPartialLong,
  94     size_t*  lastPartialLength
  95     );
  96 
  97 
  98 static inline unsigned long
  99 opal_csum(const void *  source, size_t csumlen)
 100 {
 101     unsigned long lastPartialLong = 0;
 102     size_t lastPartialLength = 0;
 103     return opal_csum_partial(source, csumlen, &lastPartialLong, &lastPartialLength);
 104 }
 105 
 106 
 107 
 108 static inline uint16_t
 109 opal_csum16 (const void *  source, size_t csumlen)
 110 {
 111     uint16_t *src = (uint16_t *) source;
 112     register uint32_t csum = 0;
 113 
 114     while (csumlen > 1) {
 115             csum += *src++;
 116         csumlen -= 2;
 117     }
 118     
 119     if(csumlen > 0)
 120         csum += *((unsigned char*)src);
 121     
 122     while(csum >> 16) {
 123         csum = (csum & 0xFFFF) + (csum >> 16);
 124     }
 125     return csum;
 126 }
 127 
 128 OPAL_DECLSPEC unsigned int
 129 opal_uicsum_partial (
 130     const void *  source,
 131     size_t csumlen,
 132     unsigned int *  lastPartialInt,
 133     size_t*  lastPartialLength
 134     );
 135 
 136 static inline unsigned int
 137 opal_uicsum(const void *  source, size_t csumlen)
 138 {
 139     unsigned int lastPartialInt = 0;
 140     size_t lastPartialLength = 0;
 141     return opal_uicsum_partial(source, csumlen, &lastPartialInt, &lastPartialLength);
 142 }
 143 
 144 
 145 
 146 
 147 
 148 void opal_initialize_crc_table(void);
 149 
 150 OPAL_DECLSPEC unsigned int
 151 opal_bcopy_uicrc_partial(
 152     const void *  source,
 153     void *  destination,
 154     size_t copylen,
 155     size_t crclen,
 156     unsigned int partial_crc);
 157 
 158 static inline unsigned int
 159 opal_bcopy_uicrc(
 160     const void *  source,
 161     void *  destination,
 162     size_t copylen,
 163     size_t crclen)
 164 {
 165     return opal_bcopy_uicrc_partial(source, destination, copylen, crclen, CRC_INITIAL_REGISTER);
 166 }
 167 
 168 OPAL_DECLSPEC unsigned int
 169 opal_uicrc_partial(
 170     const void *  source,
 171     size_t crclen,
 172     unsigned int partial_crc);
 173 
 174 
 175 static inline unsigned int
 176 opal_uicrc(const void *  source, size_t crclen)
 177 {
 178     return opal_uicrc_partial(source, crclen, CRC_INITIAL_REGISTER);
 179 }
 180 
 181 END_C_DECLS
 182 
 183 #endif
 184