* [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations @ 2022-04-07 22:02 Pedro Falcato 2022-04-25 17:13 ` Pedro Falcato [not found] ` <16E9330567E0FB44.27774@groups.io> 0 siblings, 2 replies; 6+ messages in thread From: Pedro Falcato @ 2022-04-07 22:02 UTC (permalink / raw) To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3871 Add the CRC16-ANSI and CRC32C implementations previously found at Features/Ext4Pkg/Ext4Dxe/Crc{16,32c}.c to BaseLib. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang.liu@intel.com> Signed-off-by: Pedro Falcato <pedro.falcato@gmail.com> --- MdePkg/Include/Library/BaseLib.h | 35 +++++++- MdePkg/Library/BaseLib/CheckSum.c | 144 ++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+), 1 deletion(-) diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h index 6aa0d972186e..f365de9f74a0 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -4503,6 +4503,40 @@ CalculateCrc32 ( IN UINTN Length ); +/** + Calculates the CRC16-ANSI checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC16-ANSI checksum. +**/ +UINT16 +EFIAPI +CalculateCrc16Ansi ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 InitialValue + ); + +/** + Calculates the CRC32c checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC32c checksum. +**/ +UINT32 +EFIAPI +CalculateCrc32c ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 InitialValue + ); + // // Base Library CPU Functions // @@ -4512,7 +4546,6 @@ CalculateCrc32 ( @param Context1 Context1 parameter passed into SwitchStack(). @param Context2 Context2 parameter passed into SwitchStack(). - **/ typedef VOID diff --git a/MdePkg/Library/BaseLib/CheckSum.c b/MdePkg/Library/BaseLib/CheckSum.c index 28dee5ac6a15..b6a076573191 100644 --- a/MdePkg/Library/BaseLib/CheckSum.c +++ b/MdePkg/Library/BaseLib/CheckSum.c @@ -3,6 +3,7 @@ algorithm. Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2022, Pedro Falcato. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -618,3 +619,146 @@ CalculateCrc32 ( return Crc ^ 0xffffffff; } + +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT16 mCrc16LookupTable[256] = +{ + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 +}; + +/** + Calculates the CRC16-ANSI checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC16-ANSI checksum. +**/ +UINT16 +EFIAPI +CalculateCrc16Ansi ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 InitialValue + ) +{ + CONST UINT8 *Buf; + UINT16 Crc; + + Buf = Buffer; + + Crc = ~InitialValue; + + while (Length-- != 0) { + Crc = mCrc16LookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); + } + + return ~Crc; +} + +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT32 mCrc32cLookupTable[256] = { + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, + 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, + 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, + 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, + 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, + 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, + 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, + 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, + 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, + 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, + 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, + 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, + 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, + 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, + 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, + 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, + 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, + 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, + 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, + 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, + 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, + 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, + 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, + 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, + 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, + 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, + 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, + 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, + 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, + 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, + 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, + 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, + 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, + 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, + 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, + 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, + 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, + 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, + 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, + 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, + 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, + 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 +}; + +/** + Calculates the CRC32c checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC32c checksum. +**/ +UINT32 +EFIAPI +CalculateCrc32c ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 InitialValue + ) +{ + CONST UINT8 *Buf; + UINT32 Crc; + + Buf = Buffer; + Crc = ~InitialValue; + + while (Length-- != 0) { + Crc = mCrc32cLookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); + } + + return ~Crc; +} -- 2.35.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations 2022-04-07 22:02 [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations Pedro Falcato @ 2022-04-25 17:13 ` Pedro Falcato [not found] ` <16E9330567E0FB44.27774@groups.io> 1 sibling, 0 replies; 6+ messages in thread From: Pedro Falcato @ 2022-04-25 17:13 UTC (permalink / raw) To: edk2-devel-groups-io; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu [-- Attachment #1: Type: text/plain, Size: 9806 bytes --] Ping. If someone could take a look, it would be much appreciated. On Thu, Apr 7, 2022 at 11:02 PM Pedro Falcato <pedro.falcato@gmail.com> wrote: > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3871 > > Add the CRC16-ANSI and CRC32C implementations previously found at > Features/Ext4Pkg/Ext4Dxe/Crc{16,32c}.c to BaseLib. > > Cc: Michael D Kinney <michael.d.kinney@intel.com> > Cc: Liming Gao <gaoliming@byosoft.com.cn> > Cc: Zhiguang Liu <zhiguang.liu@intel.com> > > Signed-off-by: Pedro Falcato <pedro.falcato@gmail.com> > --- > MdePkg/Include/Library/BaseLib.h | 35 +++++++- > MdePkg/Library/BaseLib/CheckSum.c | 144 ++++++++++++++++++++++++++++++ > 2 files changed, 178 insertions(+), 1 deletion(-) > > diff --git a/MdePkg/Include/Library/BaseLib.h > b/MdePkg/Include/Library/BaseLib.h > index 6aa0d972186e..f365de9f74a0 100644 > --- a/MdePkg/Include/Library/BaseLib.h > +++ b/MdePkg/Include/Library/BaseLib.h > @@ -4503,6 +4503,40 @@ CalculateCrc32 ( > IN UINTN Length > ); > > +/** > + Calculates the CRC16-ANSI checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC16-ANSI checksum. > +**/ > +UINT16 > +EFIAPI > +CalculateCrc16Ansi ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT16 InitialValue > + ); > + > +/** > + Calculates the CRC32c checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC32c checksum. > +**/ > +UINT32 > +EFIAPI > +CalculateCrc32c ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT32 InitialValue > + ); > + > // > // Base Library CPU Functions > // > @@ -4512,7 +4546,6 @@ CalculateCrc32 ( > > @param Context1 Context1 parameter passed into SwitchStack(). > @param Context2 Context2 parameter passed into SwitchStack(). > - > **/ > typedef > VOID > diff --git a/MdePkg/Library/BaseLib/CheckSum.c > b/MdePkg/Library/BaseLib/CheckSum.c > index 28dee5ac6a15..b6a076573191 100644 > --- a/MdePkg/Library/BaseLib/CheckSum.c > +++ b/MdePkg/Library/BaseLib/CheckSum.c > @@ -3,6 +3,7 @@ > algorithm. > > Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2022, Pedro Falcato. All rights reserved.<BR> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > @@ -618,3 +619,146 @@ CalculateCrc32 ( > > return Crc ^ 0xffffffff; > } > + > +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT16 mCrc16LookupTable[256] > = > +{ > + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, > + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, > + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, > + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, > + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, > + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, > + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, > + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, > + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, > + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, > + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, > + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, > + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, > + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, > + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, > + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, > + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, > + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, > + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, > + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, > + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, > + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, > + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, > + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, > + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, > + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, > + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, > + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, > + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, > + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, > + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, > + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 > +}; > + > +/** > + Calculates the CRC16-ANSI checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC16-ANSI checksum. > +**/ > +UINT16 > +EFIAPI > +CalculateCrc16Ansi ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT16 InitialValue > + ) > +{ > + CONST UINT8 *Buf; > + UINT16 Crc; > + > + Buf = Buffer; > + > + Crc = ~InitialValue; > + > + while (Length-- != 0) { > + Crc = mCrc16LookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); > + } > + > + return ~Crc; > +} > + > +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT32 > mCrc32cLookupTable[256] = { > + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, > + 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, > + 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, > + 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, > + 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, > + 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, > + 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, > + 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, > + 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, > + 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, > + 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, > + 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, > + 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, > + 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, > + 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, > + 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, > + 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, > + 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, > + 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, > + 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, > + 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, > + 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, > + 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, > + 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, > + 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, > + 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, > + 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, > + 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, > + 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, > + 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, > + 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, > + 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, > + 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, > + 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, > + 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, > + 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, > + 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, > + 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, > + 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, > + 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, > + 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, > + 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, > + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 > +}; > + > +/** > + Calculates the CRC32c checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC32c checksum. > +**/ > +UINT32 > +EFIAPI > +CalculateCrc32c ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT32 InitialValue > + ) > +{ > + CONST UINT8 *Buf; > + UINT32 Crc; > + > + Buf = Buffer; > + Crc = ~InitialValue; > + > + while (Length-- != 0) { > + Crc = mCrc32cLookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); > + } > + > + return ~Crc; > +} > -- > 2.35.1 > > -- Pedro Falcato [-- Attachment #2: Type: text/html, Size: 11584 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <16E9330567E0FB44.27774@groups.io>]
* Re: [edk2-devel] [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations [not found] ` <16E9330567E0FB44.27774@groups.io> @ 2022-05-11 17:43 ` Pedro Falcato [not found] ` <16EE1DEED159D5A9.620@groups.io> 1 sibling, 0 replies; 6+ messages in thread From: Pedro Falcato @ 2022-05-11 17:43 UTC (permalink / raw) To: edk2-devel-groups-io, Pedro Falcato Cc: Michael D Kinney, Liming Gao, Zhiguang Liu [-- Attachment #1: Type: text/plain, Size: 10215 bytes --] Ping. Could someone review it? On Mon, Apr 25, 2022 at 6:13 PM Pedro Falcato via groups.io <pedro.falcato= gmail.com@groups.io> wrote: > Ping. If someone could take a look, it would be much appreciated. > > On Thu, Apr 7, 2022 at 11:02 PM Pedro Falcato <pedro.falcato@gmail.com> > wrote: > >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3871 >> >> Add the CRC16-ANSI and CRC32C implementations previously found at >> Features/Ext4Pkg/Ext4Dxe/Crc{16,32c}.c to BaseLib. >> >> Cc: Michael D Kinney <michael.d.kinney@intel.com> >> Cc: Liming Gao <gaoliming@byosoft.com.cn> >> Cc: Zhiguang Liu <zhiguang.liu@intel.com> >> >> Signed-off-by: Pedro Falcato <pedro.falcato@gmail.com> >> --- >> MdePkg/Include/Library/BaseLib.h | 35 +++++++- >> MdePkg/Library/BaseLib/CheckSum.c | 144 ++++++++++++++++++++++++++++++ >> 2 files changed, 178 insertions(+), 1 deletion(-) >> >> diff --git a/MdePkg/Include/Library/BaseLib.h >> b/MdePkg/Include/Library/BaseLib.h >> index 6aa0d972186e..f365de9f74a0 100644 >> --- a/MdePkg/Include/Library/BaseLib.h >> +++ b/MdePkg/Include/Library/BaseLib.h >> @@ -4503,6 +4503,40 @@ CalculateCrc32 ( >> IN UINTN Length >> ); >> >> +/** >> + Calculates the CRC16-ANSI checksum of the given buffer. >> + >> + @param[in] Buffer Pointer to the buffer. >> + @param[in] Length Length of the buffer, in bytes. >> + @param[in] InitialValue Initial value of the CRC. >> + >> + @return The CRC16-ANSI checksum. >> +**/ >> +UINT16 >> +EFIAPI >> +CalculateCrc16Ansi ( >> + IN CONST VOID *Buffer, >> + IN UINTN Length, >> + IN UINT16 InitialValue >> + ); >> + >> +/** >> + Calculates the CRC32c checksum of the given buffer. >> + >> + @param[in] Buffer Pointer to the buffer. >> + @param[in] Length Length of the buffer, in bytes. >> + @param[in] InitialValue Initial value of the CRC. >> + >> + @return The CRC32c checksum. >> +**/ >> +UINT32 >> +EFIAPI >> +CalculateCrc32c ( >> + IN CONST VOID *Buffer, >> + IN UINTN Length, >> + IN UINT32 InitialValue >> + ); >> + >> // >> // Base Library CPU Functions >> // >> @@ -4512,7 +4546,6 @@ CalculateCrc32 ( >> >> @param Context1 Context1 parameter passed into SwitchStack(). >> @param Context2 Context2 parameter passed into SwitchStack(). >> - >> **/ >> typedef >> VOID >> diff --git a/MdePkg/Library/BaseLib/CheckSum.c >> b/MdePkg/Library/BaseLib/CheckSum.c >> index 28dee5ac6a15..b6a076573191 100644 >> --- a/MdePkg/Library/BaseLib/CheckSum.c >> +++ b/MdePkg/Library/BaseLib/CheckSum.c >> @@ -3,6 +3,7 @@ >> algorithm. >> >> Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> >> + Copyright (c) 2022, Pedro Falcato. All rights reserved.<BR> >> SPDX-License-Identifier: BSD-2-Clause-Patent >> >> **/ >> @@ -618,3 +619,146 @@ CalculateCrc32 ( >> >> return Crc ^ 0xffffffff; >> } >> + >> +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT16 >> mCrc16LookupTable[256] = >> +{ >> + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, >> + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, >> + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, >> + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, >> + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, >> + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, >> + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, >> + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, >> + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, >> + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, >> + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, >> + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, >> + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, >> + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, >> + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, >> + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, >> + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, >> + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, >> + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, >> + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, >> + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, >> + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, >> + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, >> + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, >> + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, >> + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, >> + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, >> + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, >> + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, >> + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, >> + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, >> + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 >> +}; >> + >> +/** >> + Calculates the CRC16-ANSI checksum of the given buffer. >> + >> + @param[in] Buffer Pointer to the buffer. >> + @param[in] Length Length of the buffer, in bytes. >> + @param[in] InitialValue Initial value of the CRC. >> + >> + @return The CRC16-ANSI checksum. >> +**/ >> +UINT16 >> +EFIAPI >> +CalculateCrc16Ansi ( >> + IN CONST VOID *Buffer, >> + IN UINTN Length, >> + IN UINT16 InitialValue >> + ) >> +{ >> + CONST UINT8 *Buf; >> + UINT16 Crc; >> + >> + Buf = Buffer; >> + >> + Crc = ~InitialValue; >> + >> + while (Length-- != 0) { >> + Crc = mCrc16LookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); >> + } >> + >> + return ~Crc; >> +} >> + >> +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT32 >> mCrc32cLookupTable[256] = { >> + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, >> + 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, >> + 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, >> + 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, >> + 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, >> + 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, >> + 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, >> + 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, >> + 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, >> + 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, >> + 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, >> + 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, >> + 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, >> + 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, >> + 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, >> + 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, >> + 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, >> + 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, >> + 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, >> + 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, >> + 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, >> + 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, >> + 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, >> + 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, >> + 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, >> + 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, >> + 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, >> + 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, >> + 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, >> + 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, >> + 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, >> + 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, >> + 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, >> + 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, >> + 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, >> + 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, >> + 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, >> + 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, >> + 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, >> + 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, >> + 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, >> + 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, >> + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 >> +}; >> + >> +/** >> + Calculates the CRC32c checksum of the given buffer. >> + >> + @param[in] Buffer Pointer to the buffer. >> + @param[in] Length Length of the buffer, in bytes. >> + @param[in] InitialValue Initial value of the CRC. >> + >> + @return The CRC32c checksum. >> +**/ >> +UINT32 >> +EFIAPI >> +CalculateCrc32c ( >> + IN CONST VOID *Buffer, >> + IN UINTN Length, >> + IN UINT32 InitialValue >> + ) >> +{ >> + CONST UINT8 *Buf; >> + UINT32 Crc; >> + >> + Buf = Buffer; >> + Crc = ~InitialValue; >> + >> + while (Length-- != 0) { >> + Crc = mCrc32cLookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); >> + } >> + >> + return ~Crc; >> +} >> -- >> 2.35.1 >> >> > > -- > Pedro Falcato > > > -- Pedro Falcato [-- Attachment #2: Type: text/html, Size: 12156 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <16EE1DEED159D5A9.620@groups.io>]
* Re: [edk2-devel] [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations [not found] ` <16EE1DEED159D5A9.620@groups.io> @ 2022-05-31 21:33 ` Pedro Falcato 2022-06-02 2:29 ` 回复: " gaoliming 0 siblings, 1 reply; 6+ messages in thread From: Pedro Falcato @ 2022-05-31 21:33 UTC (permalink / raw) To: edk2-devel-groups-io, Pedro Falcato Cc: Michael D Kinney, Liming Gao, Zhiguang Liu [-- Attachment #1: Type: text/plain, Size: 10835 bytes --] Ping. Please review it now that the freeze is over. Thanks, Pedro On Wed, May 11, 2022 at 6:44 PM Pedro Falcato via groups.io <pedro.falcato= gmail.com@groups.io> wrote: > Ping. Could someone review it? > > On Mon, Apr 25, 2022 at 6:13 PM Pedro Falcato via groups.io > <pedro.falcato=gmail.com@groups.io> wrote: > >> Ping. If someone could take a look, it would be much appreciated. >> >> On Thu, Apr 7, 2022 at 11:02 PM Pedro Falcato <pedro.falcato@gmail.com> >> wrote: >> >>> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3871 >>> >>> Add the CRC16-ANSI and CRC32C implementations previously found at >>> Features/Ext4Pkg/Ext4Dxe/Crc{16,32c}.c to BaseLib. >>> >>> Cc: Michael D Kinney <michael.d.kinney@intel.com> >>> Cc: Liming Gao <gaoliming@byosoft.com.cn> >>> Cc: Zhiguang Liu <zhiguang.liu@intel.com> >>> >>> Signed-off-by: Pedro Falcato <pedro.falcato@gmail.com> >>> --- >>> MdePkg/Include/Library/BaseLib.h | 35 +++++++- >>> MdePkg/Library/BaseLib/CheckSum.c | 144 ++++++++++++++++++++++++++++++ >>> 2 files changed, 178 insertions(+), 1 deletion(-) >>> >>> diff --git a/MdePkg/Include/Library/BaseLib.h >>> b/MdePkg/Include/Library/BaseLib.h >>> index 6aa0d972186e..f365de9f74a0 100644 >>> --- a/MdePkg/Include/Library/BaseLib.h >>> +++ b/MdePkg/Include/Library/BaseLib.h >>> @@ -4503,6 +4503,40 @@ CalculateCrc32 ( >>> IN UINTN Length >>> ); >>> >>> +/** >>> + Calculates the CRC16-ANSI checksum of the given buffer. >>> + >>> + @param[in] Buffer Pointer to the buffer. >>> + @param[in] Length Length of the buffer, in bytes. >>> + @param[in] InitialValue Initial value of the CRC. >>> + >>> + @return The CRC16-ANSI checksum. >>> +**/ >>> +UINT16 >>> +EFIAPI >>> +CalculateCrc16Ansi ( >>> + IN CONST VOID *Buffer, >>> + IN UINTN Length, >>> + IN UINT16 InitialValue >>> + ); >>> + >>> +/** >>> + Calculates the CRC32c checksum of the given buffer. >>> + >>> + @param[in] Buffer Pointer to the buffer. >>> + @param[in] Length Length of the buffer, in bytes. >>> + @param[in] InitialValue Initial value of the CRC. >>> + >>> + @return The CRC32c checksum. >>> +**/ >>> +UINT32 >>> +EFIAPI >>> +CalculateCrc32c ( >>> + IN CONST VOID *Buffer, >>> + IN UINTN Length, >>> + IN UINT32 InitialValue >>> + ); >>> + >>> // >>> // Base Library CPU Functions >>> // >>> @@ -4512,7 +4546,6 @@ CalculateCrc32 ( >>> >>> @param Context1 Context1 parameter passed into SwitchStack(). >>> @param Context2 Context2 parameter passed into SwitchStack(). >>> - >>> **/ >>> typedef >>> VOID >>> diff --git a/MdePkg/Library/BaseLib/CheckSum.c >>> b/MdePkg/Library/BaseLib/CheckSum.c >>> index 28dee5ac6a15..b6a076573191 100644 >>> --- a/MdePkg/Library/BaseLib/CheckSum.c >>> +++ b/MdePkg/Library/BaseLib/CheckSum.c >>> @@ -3,6 +3,7 @@ >>> algorithm. >>> >>> Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> >>> + Copyright (c) 2022, Pedro Falcato. All rights reserved.<BR> >>> SPDX-License-Identifier: BSD-2-Clause-Patent >>> >>> **/ >>> @@ -618,3 +619,146 @@ CalculateCrc32 ( >>> >>> return Crc ^ 0xffffffff; >>> } >>> + >>> +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT16 >>> mCrc16LookupTable[256] = >>> +{ >>> + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, >>> + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, >>> + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, >>> + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, >>> + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, >>> + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, >>> + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, >>> + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, >>> + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, >>> + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, >>> + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, >>> + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, >>> + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, >>> + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, >>> + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, >>> + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, >>> + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, >>> + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, >>> + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, >>> + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, >>> + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, >>> + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, >>> + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, >>> + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, >>> + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, >>> + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, >>> + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, >>> + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, >>> + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, >>> + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, >>> + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, >>> + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 >>> +}; >>> + >>> +/** >>> + Calculates the CRC16-ANSI checksum of the given buffer. >>> + >>> + @param[in] Buffer Pointer to the buffer. >>> + @param[in] Length Length of the buffer, in bytes. >>> + @param[in] InitialValue Initial value of the CRC. >>> + >>> + @return The CRC16-ANSI checksum. >>> +**/ >>> +UINT16 >>> +EFIAPI >>> +CalculateCrc16Ansi ( >>> + IN CONST VOID *Buffer, >>> + IN UINTN Length, >>> + IN UINT16 InitialValue >>> + ) >>> +{ >>> + CONST UINT8 *Buf; >>> + UINT16 Crc; >>> + >>> + Buf = Buffer; >>> + >>> + Crc = ~InitialValue; >>> + >>> + while (Length-- != 0) { >>> + Crc = mCrc16LookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); >>> + } >>> + >>> + return ~Crc; >>> +} >>> + >>> +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT32 >>> mCrc32cLookupTable[256] = { >>> + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, >>> 0x35f1141c, >>> + 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, >>> 0x9989ab3b, >>> + 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, >>> 0xe235446c, >>> + 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, >>> 0xc494a384, >>> + 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, >>> 0xaf768bbc, >>> + 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, >>> 0x33ed7d2a, >>> + 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, >>> 0x580f5512, >>> + 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, >>> 0x7eaeb2fa, >>> + 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, >>> 0x05125dad, >>> + 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, >>> 0xa96ae28a, >>> + 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, >>> 0xb3109ebf, >>> + 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, >>> 0x95b17957, >>> + 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, >>> 0xfe53516f, >>> + 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, >>> 0x42752927, >>> + 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, >>> 0x2997011f, >>> + 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, >>> 0x0f36e6f7, >>> + 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, >>> 0x5437877e, >>> + 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, >>> 0xf84f3859, >>> + 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, >>> 0x83f3d70e, >>> + 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, >>> 0xa55230e6, >>> + 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, >>> 0xceb018de, >>> + 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, >>> 0x91a6c88c, >>> + 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, >>> 0xfa44e0b4, >>> + 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, >>> 0xdce5075c, >>> + 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, >>> 0xa759e80b, >>> + 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, >>> 0x0b21572c, >>> + 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, >>> 0x502036a5, >>> + 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, >>> 0x7681d14d, >>> + 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, >>> 0x1d63f975, >>> + 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, >>> 0xa145813d, >>> + 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, >>> 0xcaa7a905, >>> + 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, >>> 0xec064eed, >>> + 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, >>> 0xf67c32d8, >>> + 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, >>> 0x5a048dff, >>> + 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, >>> 0x21b862a8, >>> + 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, >>> 0x07198540, >>> + 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, >>> 0x6cfbad78, >>> + 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, >>> 0xf0605bee, >>> + 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, >>> 0x9b8273d6, >>> + 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, >>> 0xbd23943e, >>> + 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, >>> 0xc69f7b69, >>> + 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, >>> 0x6ae7c44e, >>> + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 >>> +}; >>> + >>> +/** >>> + Calculates the CRC32c checksum of the given buffer. >>> + >>> + @param[in] Buffer Pointer to the buffer. >>> + @param[in] Length Length of the buffer, in bytes. >>> + @param[in] InitialValue Initial value of the CRC. >>> + >>> + @return The CRC32c checksum. >>> +**/ >>> +UINT32 >>> +EFIAPI >>> +CalculateCrc32c ( >>> + IN CONST VOID *Buffer, >>> + IN UINTN Length, >>> + IN UINT32 InitialValue >>> + ) >>> +{ >>> + CONST UINT8 *Buf; >>> + UINT32 Crc; >>> + >>> + Buf = Buffer; >>> + Crc = ~InitialValue; >>> + >>> + while (Length-- != 0) { >>> + Crc = mCrc32cLookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); >>> + } >>> + >>> + return ~Crc; >>> +} >>> -- >>> 2.35.1 >>> >>> >> >> -- >> Pedro Falcato >> >> > > -- > Pedro Falcato > > > -- Pedro Falcato [-- Attachment #2: Type: text/html, Size: 12825 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* 回复: [edk2-devel] [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations 2022-05-31 21:33 ` Pedro Falcato @ 2022-06-02 2:29 ` gaoliming 2022-06-02 14:19 ` Pedro Falcato 0 siblings, 1 reply; 6+ messages in thread From: gaoliming @ 2022-06-02 2:29 UTC (permalink / raw) To: devel, pedro.falcato; +Cc: 'Michael D Kinney', 'Zhiguang Liu' [-- Attachment #1: Type: text/plain, Size: 10922 bytes --] Pedro: Sorry for the late response. I am OK to add two new CRC APIs in BaseLib. For Crc32c, what difference is from current Crc32? Can it reuse current mCrcTable value? Thanks Liming 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Pedro Falcato 发送时间: 2022年6月1日 5:34 收件人: edk2-devel-groups-io <devel@edk2.groups.io>; Pedro Falcato <pedro.falcato@gmail.com> 抄送: Michael D Kinney <michael.d.kinney@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Zhiguang Liu <zhiguang.liu@intel.com> 主题: Re: [edk2-devel] [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations Ping. Please review it now that the freeze is over. Thanks, Pedro On Wed, May 11, 2022 at 6:44 PM Pedro Falcato via groups.io <http://groups.io> <pedro.falcato=gmail.com@groups.io <mailto:gmail.com@groups.io> > wrote: Ping. Could someone review it? On Mon, Apr 25, 2022 at 6:13 PM Pedro Falcato via groups.io <http://groups.io> <pedro.falcato=gmail.com@groups.io <mailto:gmail.com@groups.io> > wrote: Ping. If someone could take a look, it would be much appreciated. On Thu, Apr 7, 2022 at 11:02 PM Pedro Falcato <pedro.falcato@gmail.com <mailto:pedro.falcato@gmail.com> > wrote: BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3871 Add the CRC16-ANSI and CRC32C implementations previously found at Features/Ext4Pkg/Ext4Dxe/Crc{16,32c}.c to BaseLib. Cc: Michael D Kinney <michael.d.kinney@intel.com <mailto:michael.d.kinney@intel.com> > Cc: Liming Gao <gaoliming@byosoft.com.cn <mailto:gaoliming@byosoft.com.cn> > Cc: Zhiguang Liu <zhiguang.liu@intel.com <mailto:zhiguang.liu@intel.com> > Signed-off-by: Pedro Falcato <pedro.falcato@gmail.com <mailto:pedro.falcato@gmail.com> > --- MdePkg/Include/Library/BaseLib.h | 35 +++++++- MdePkg/Library/BaseLib/CheckSum.c | 144 ++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+), 1 deletion(-) diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h index 6aa0d972186e..f365de9f74a0 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -4503,6 +4503,40 @@ CalculateCrc32 ( IN UINTN Length ); +/** + Calculates the CRC16-ANSI checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC16-ANSI checksum. +**/ +UINT16 +EFIAPI +CalculateCrc16Ansi ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 InitialValue + ); + +/** + Calculates the CRC32c checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC32c checksum. +**/ +UINT32 +EFIAPI +CalculateCrc32c ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 InitialValue + ); + // // Base Library CPU Functions // @@ -4512,7 +4546,6 @@ CalculateCrc32 ( @param Context1 Context1 parameter passed into SwitchStack(). @param Context2 Context2 parameter passed into SwitchStack(). - **/ typedef VOID diff --git a/MdePkg/Library/BaseLib/CheckSum.c b/MdePkg/Library/BaseLib/CheckSum.c index 28dee5ac6a15..b6a076573191 100644 --- a/MdePkg/Library/BaseLib/CheckSum.c +++ b/MdePkg/Library/BaseLib/CheckSum.c @@ -3,6 +3,7 @@ algorithm. Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2022, Pedro Falcato. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -618,3 +619,146 @@ CalculateCrc32 ( return Crc ^ 0xffffffff; } + +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT16 mCrc16LookupTable[256] = +{ + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 +}; + +/** + Calculates the CRC16-ANSI checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC16-ANSI checksum. +**/ +UINT16 +EFIAPI +CalculateCrc16Ansi ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 InitialValue + ) +{ + CONST UINT8 *Buf; + UINT16 Crc; + + Buf = Buffer; + + Crc = ~InitialValue; + + while (Length-- != 0) { + Crc = mCrc16LookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); + } + + return ~Crc; +} + +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT32 mCrc32cLookupTable[256] = { + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, + 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, + 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, + 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, + 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, + 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, + 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, + 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, + 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, + 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, + 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, + 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, + 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, + 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, + 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, + 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, + 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, + 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, + 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, + 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, + 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, + 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, + 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, + 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, + 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, + 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, + 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, + 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, + 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, + 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, + 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, + 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, + 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, + 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, + 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, + 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, + 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, + 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, + 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, + 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, + 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, + 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 +}; + +/** + Calculates the CRC32c checksum of the given buffer. + + @param[in] Buffer Pointer to the buffer. + @param[in] Length Length of the buffer, in bytes. + @param[in] InitialValue Initial value of the CRC. + + @return The CRC32c checksum. +**/ +UINT32 +EFIAPI +CalculateCrc32c ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 InitialValue + ) +{ + CONST UINT8 *Buf; + UINT32 Crc; + + Buf = Buffer; + Crc = ~InitialValue; + + while (Length-- != 0) { + Crc = mCrc32cLookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); + } + + return ~Crc; +} -- 2.35.1 -- Pedro Falcato -- Pedro Falcato -- Pedro Falcato [-- Attachment #2: Type: text/html, Size: 18637 bytes --] ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations 2022-06-02 2:29 ` 回复: " gaoliming @ 2022-06-02 14:19 ` Pedro Falcato 0 siblings, 0 replies; 6+ messages in thread From: Pedro Falcato @ 2022-06-02 14:19 UTC (permalink / raw) To: edk2-devel-groups-io, Liming Gao; +Cc: Michael D Kinney, Zhiguang Liu [-- Attachment #1: Type: text/plain, Size: 11919 bytes --] Hi Liming, No problem. CRC32c is a CRC32 variant with a different polynomial, so unfortunately we can't reuse the current mCrcTable. Note that technically we could further optimize the CRC32c code to detect and use the current Intel and ARM CRC32c extensions' instructions, but I didn't bother as it is rather non-trivial and may have dubious value in firmware, where CRC32 calculation should not be a bottleneck; regardless of this, we still need the lookup table implementation as a fallback as these instructions are optional in both architectures. All the best, Pedro On Thu, Jun 2, 2022 at 3:29 AM gaoliming <gaoliming@byosoft.com.cn> wrote: > Pedro: > > Sorry for the late response. I am OK to add two new CRC APIs in BaseLib. > > > > For Crc32c, what difference is from current Crc32? Can it reuse current > mCrcTable value? > > > > Thanks > > Liming > > *发件人:* devel@edk2.groups.io <devel@edk2.groups.io> *代表 *Pedro Falcato > *发送时间:* 2022年6月1日 5:34 > *收件人:* edk2-devel-groups-io <devel@edk2.groups.io>; Pedro Falcato < > pedro.falcato@gmail.com> > *抄送:* Michael D Kinney <michael.d.kinney@intel.com>; Liming Gao < > gaoliming@byosoft.com.cn>; Zhiguang Liu <zhiguang.liu@intel.com> > *主题:* Re: [edk2-devel] [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and > CRC32c implementations > > > > Ping. Please review it now that the freeze is over. > > > > Thanks, > > Pedro > > > > On Wed, May 11, 2022 at 6:44 PM Pedro Falcato via groups.io > <pedro.falcato=gmail.com@groups.io> wrote: > > Ping. Could someone review it? > > > > On Mon, Apr 25, 2022 at 6:13 PM Pedro Falcato via groups.io > <pedro.falcato=gmail.com@groups.io> wrote: > > Ping. If someone could take a look, it would be much appreciated. > > > > On Thu, Apr 7, 2022 at 11:02 PM Pedro Falcato <pedro.falcato@gmail.com> > wrote: > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3871 > > Add the CRC16-ANSI and CRC32C implementations previously found at > Features/Ext4Pkg/Ext4Dxe/Crc{16,32c}.c to BaseLib. > > Cc: Michael D Kinney <michael.d.kinney@intel.com> > Cc: Liming Gao <gaoliming@byosoft.com.cn> > Cc: Zhiguang Liu <zhiguang.liu@intel.com> > > Signed-off-by: Pedro Falcato <pedro.falcato@gmail.com> > --- > MdePkg/Include/Library/BaseLib.h | 35 +++++++- > MdePkg/Library/BaseLib/CheckSum.c | 144 ++++++++++++++++++++++++++++++ > 2 files changed, 178 insertions(+), 1 deletion(-) > > diff --git a/MdePkg/Include/Library/BaseLib.h > b/MdePkg/Include/Library/BaseLib.h > index 6aa0d972186e..f365de9f74a0 100644 > --- a/MdePkg/Include/Library/BaseLib.h > +++ b/MdePkg/Include/Library/BaseLib.h > @@ -4503,6 +4503,40 @@ CalculateCrc32 ( > IN UINTN Length > ); > > +/** > + Calculates the CRC16-ANSI checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC16-ANSI checksum. > +**/ > +UINT16 > +EFIAPI > +CalculateCrc16Ansi ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT16 InitialValue > + ); > + > +/** > + Calculates the CRC32c checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC32c checksum. > +**/ > +UINT32 > +EFIAPI > +CalculateCrc32c ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT32 InitialValue > + ); > + > // > // Base Library CPU Functions > // > @@ -4512,7 +4546,6 @@ CalculateCrc32 ( > > @param Context1 Context1 parameter passed into SwitchStack(). > @param Context2 Context2 parameter passed into SwitchStack(). > - > **/ > typedef > VOID > diff --git a/MdePkg/Library/BaseLib/CheckSum.c > b/MdePkg/Library/BaseLib/CheckSum.c > index 28dee5ac6a15..b6a076573191 100644 > --- a/MdePkg/Library/BaseLib/CheckSum.c > +++ b/MdePkg/Library/BaseLib/CheckSum.c > @@ -3,6 +3,7 @@ > algorithm. > > Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2022, Pedro Falcato. All rights reserved.<BR> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > @@ -618,3 +619,146 @@ CalculateCrc32 ( > > return Crc ^ 0xffffffff; > } > + > +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT16 mCrc16LookupTable[256] > = > +{ > + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, > + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, > + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, > + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, > + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, > + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, > + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, > + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, > + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, > + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, > + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, > + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, > + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, > + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, > + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, > + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, > + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, > + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, > + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, > + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, > + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, > + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, > + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, > + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, > + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, > + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, > + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, > + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, > + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, > + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, > + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, > + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 > +}; > + > +/** > + Calculates the CRC16-ANSI checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC16-ANSI checksum. > +**/ > +UINT16 > +EFIAPI > +CalculateCrc16Ansi ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT16 InitialValue > + ) > +{ > + CONST UINT8 *Buf; > + UINT16 Crc; > + > + Buf = Buffer; > + > + Crc = ~InitialValue; > + > + while (Length-- != 0) { > + Crc = mCrc16LookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); > + } > + > + return ~Crc; > +} > + > +GLOBAL_REMOVE_IF_UNREFERENCED STATIC CONST UINT32 > mCrc32cLookupTable[256] = { > + 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, 0xc79a971f, 0x35f1141c, > + 0x26a1e7e8, 0xd4ca64eb, 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, > + 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, 0x105ec76f, 0xe235446c, > + 0xf165b798, 0x030e349b, 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, > + 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, 0x5d1d08bf, 0xaf768bbc, > + 0xbc267848, 0x4e4dfb4b, 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, > + 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, 0xaa64d611, 0x580f5512, > + 0x4b5fa6e6, 0xb93425e5, 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, > + 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, 0xf779deae, 0x05125dad, > + 0x1642ae59, 0xe4292d5a, 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, > + 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, 0x417b1dbc, 0xb3109ebf, > + 0xa0406d4b, 0x522bee48, 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, > + 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, 0x0c38d26c, 0xfe53516f, > + 0xed03a29b, 0x1f682198, 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, > + 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, 0xdbfc821c, 0x2997011f, > + 0x3ac7f2eb, 0xc8ac71e8, 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, > + 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, 0xa65c047d, 0x5437877e, > + 0x4767748a, 0xb50cf789, 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, > + 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, 0x7198540d, 0x83f3d70e, > + 0x90a324fa, 0x62c8a7f9, 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, > + 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, 0x3cdb9bdd, 0xceb018de, > + 0xdde0eb2a, 0x2f8b6829, 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, > + 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, 0x082f63b7, 0xfa44e0b4, > + 0xe9141340, 0x1b7f9043, 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, > + 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, 0x55326b08, 0xa759e80b, > + 0xb4091bff, 0x466298fc, 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, > + 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, 0xa24bb5a6, 0x502036a5, > + 0x4370c551, 0xb11b4652, 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, > + 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, 0xef087a76, 0x1d63f975, > + 0x0e330a81, 0xfc588982, 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, > + 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, 0x38cc2a06, 0xcaa7a905, > + 0xd9f75af1, 0x2b9cd9f2, 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, > + 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, 0x0417b1db, 0xf67c32d8, > + 0xe52cc12c, 0x1747422f, 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, > + 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, 0xd3d3e1ab, 0x21b862a8, > + 0x32e8915c, 0xc083125f, 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, > + 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, 0x9e902e7b, 0x6cfbad78, > + 0x7fab5e8c, 0x8dc0dd8f, 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, > + 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, 0x69e9f0d5, 0x9b8273d6, > + 0x88d28022, 0x7ab90321, 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, > + 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, 0x34f4f86a, 0xc69f7b69, > + 0xd5cf889d, 0x27a40b9e, 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, > + 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 > +}; > + > +/** > + Calculates the CRC32c checksum of the given buffer. > + > + @param[in] Buffer Pointer to the buffer. > + @param[in] Length Length of the buffer, in bytes. > + @param[in] InitialValue Initial value of the CRC. > + > + @return The CRC32c checksum. > +**/ > +UINT32 > +EFIAPI > +CalculateCrc32c ( > + IN CONST VOID *Buffer, > + IN UINTN Length, > + IN UINT32 InitialValue > + ) > +{ > + CONST UINT8 *Buf; > + UINT32 Crc; > + > + Buf = Buffer; > + Crc = ~InitialValue; > + > + while (Length-- != 0) { > + Crc = mCrc32cLookupTable[(Crc & 0xFF) ^ *(Buf++)] ^ (Crc >> 8); > + } > + > + return ~Crc; > +} > -- > 2.35.1 > > > > -- > > Pedro Falcato > > > > -- > > Pedro Falcato > > > > -- > > Pedro Falcato > > > > -- Pedro Falcato [-- Attachment #2: Type: text/html, Size: 17908 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-06-02 14:19 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-04-07 22:02 [PATCH 1/1] MdePkg/BaseLib: Add CRC16-ANSI and CRC32c implementations Pedro Falcato 2022-04-25 17:13 ` Pedro Falcato [not found] ` <16E9330567E0FB44.27774@groups.io> 2022-05-11 17:43 ` [edk2-devel] " Pedro Falcato [not found] ` <16EE1DEED159D5A9.620@groups.io> 2022-05-31 21:33 ` Pedro Falcato 2022-06-02 2:29 ` 回复: " gaoliming 2022-06-02 14:19 ` Pedro Falcato
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox