The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/lib/crc8.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2011 Broadcom Corporation
    3  *
    4  * Permission to use, copy, modify, and/or distribute this software for any
    5  * purpose with or without fee is hereby granted, provided that the above
    6  * copyright notice and this permission notice appear in all copies.
    7  *
    8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
   11  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
   13  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
   14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   15  */
   16 
   17 #define pr_fmt(fmt)             KBUILD_MODNAME ": " fmt
   18 
   19 #include <linux/module.h>
   20 #include <linux/crc8.h>
   21 #include <linux/printk.h>
   22 
   23 /*
   24  * crc8_populate_msb - fill crc table for given polynomial in reverse bit order.
   25  *
   26  * table:       table to be filled.
   27  * polynomial:  polynomial for which table is to be filled.
   28  */
   29 void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)
   30 {
   31         int i, j;
   32         const u8 msbit = 0x80;
   33         u8 t = msbit;
   34 
   35         table[0] = 0;
   36 
   37         for (i = 1; i < CRC8_TABLE_SIZE; i *= 2) {
   38                 t = (t << 1) ^ (t & msbit ? polynomial : 0);
   39                 for (j = 0; j < i; j++)
   40                         table[i+j] = table[j] ^ t;
   41         }
   42 }
   43 EXPORT_SYMBOL(crc8_populate_msb);
   44 
   45 /*
   46  * crc8_populate_lsb - fill crc table for given polynomial in regular bit order.
   47  *
   48  * table:       table to be filled.
   49  * polynomial:  polynomial for which table is to be filled.
   50  */
   51 void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)
   52 {
   53         int i, j;
   54         u8 t = 1;
   55 
   56         table[0] = 0;
   57 
   58         for (i = (CRC8_TABLE_SIZE >> 1); i; i >>= 1) {
   59                 t = (t >> 1) ^ (t & 1 ? polynomial : 0);
   60                 for (j = 0; j < CRC8_TABLE_SIZE; j += 2*i)
   61                         table[i+j] = table[j] ^ t;
   62         }
   63 }
   64 EXPORT_SYMBOL(crc8_populate_lsb);
   65 
   66 /*
   67  * crc8 - calculate a crc8 over the given input data.
   68  *
   69  * table: crc table used for calculation.
   70  * pdata: pointer to data buffer.
   71  * nbytes: number of bytes in data buffer.
   72  * crc: previous returned crc8 value.
   73  */
   74 u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc)
   75 {
   76         /* loop over the buffer data */
   77         while (nbytes-- > 0)
   78                 crc = table[(crc ^ *pdata++) & 0xff];
   79 
   80         return crc;
   81 }
   82 EXPORT_SYMBOL(crc8);
   83 
   84 MODULE_DESCRIPTION("CRC8 (by Williams, Ross N.) function");
   85 MODULE_AUTHOR("Broadcom Corporation");
   86 MODULE_LICENSE("Dual BSD/GPL");

Cache object: 94928bd4f7d787c5846d6a6ac1bf3f96


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.