Annotation of qemu/roms/ipxe/src/crypto/crc32.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Little-endian CRC32 implementation.
                      3:  *
                      4:  * Copyright (c) 2009 Joshua Oreman <[email protected]>.
                      5:  *
                      6:  * This program is free software; you can redistribute it and/or
                      7:  * modify it under the terms of the GNU General Public License as
                      8:  * published by the Free Software Foundation; either version 2 of the
                      9:  * License, or any later version.
                     10:  *
                     11:  * This program is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License
                     17:  * along with this program; if not, write to the Free Software
                     18:  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     19:  */
                     20: 
                     21: FILE_LICENCE ( GPL2_OR_LATER );
                     22: 
                     23: #include <ipxe/crc32.h>
                     24: 
                     25: #define CRCPOLY                0xedb88320
                     26: 
                     27: /**
                     28:  * Calculate 32-bit little-endian CRC checksum
                     29:  *
                     30:  * @v seed     Initial value
                     31:  * @v data     Data to checksum
                     32:  * @v len      Length of data
                     33:  *
                     34:  * Usually @a seed is initially zero or all one bits, depending on the
                     35:  * protocol. To continue a CRC checksum over multiple calls, pass the
                     36:  * return value from one call as the @a seed parameter to the next.
                     37:  */
                     38: u32 crc32_le ( u32 seed, const void *data, size_t len )
                     39: {
                     40:        u32 crc = seed;
                     41:        const u8 *src = data;
                     42:        u32 mult;
                     43:        int i;
                     44: 
                     45:        while ( len-- ) {
                     46:                crc ^= *src++;
                     47:                for ( i = 0; i < 8; i++ ) {
                     48:                        mult = ( crc & 1 ) ? CRCPOLY : 0;
                     49:                        crc = ( crc >> 1 ) ^ mult;
                     50:                }
                     51:        }
                     52: 
                     53:        return crc;
                     54: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.