Back to home page

Quest Cross Reference

 
 

    


Warning, cross-references for /kernel/util/bitrev.c need to be fixed.

0001 /*                    The Quest Operating System
0002  *  Copyright (C) 2005-2010  Richard West, Boston University
0003  *
0004  *  This program is free software: you can redistribute it and/or modify
0005  *  it under the terms of the GNU General Public License as published by
0006  *  the Free Software Foundation, either version 3 of the License, or
0007  *  (at your option) any later version.
0008  *
0009  *  This program is distributed in the hope that it will be useful,
0010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0012  *  GNU General Public License for more details.
0013  *
0014  *  You should have received a copy of the GNU General Public License
0015  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
0016  */
0017 
0018 /* Adopted from Linux */
0019 
0020 #include <types.h>
0021 #include <util/bitrev.h>
0022 
0023 /***********************************************************
0024  * MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>"); *
0025  * MODULE_DESCRIPTION("Bit ordering reversal functions");  *
0026  * MODULE_LICENSE("GPL");                                  *
0027  ***********************************************************/
0028 
0029 const u8 byte_rev_table[256] = {
0030   0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
0031   0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
0032   0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
0033   0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
0034   0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
0035   0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
0036   0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
0037   0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
0038   0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
0039   0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
0040   0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
0041   0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
0042   0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
0043   0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
0044   0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
0045   0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
0046   0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
0047   0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
0048   0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
0049   0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
0050   0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
0051   0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
0052   0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
0053   0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
0054   0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
0055   0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
0056   0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
0057   0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
0058   0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
0059   0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
0060   0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
0061   0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
0062 };
0063 
0064 u16 bitrev16(u16 x)
0065 {
0066   return (bitrev8(x & 0xff) << 8) | bitrev8(x >> 8);
0067 }
0068 
0069 /**
0070  * bitrev32 - reverse the order of bits in a u32 value
0071  * @x: value to be bit-reversed
0072  */
0073 u32 bitrev32(u32 x)
0074 {
0075   return (bitrev16(x & 0xffff) << 16) | bitrev16(x >> 16);
0076 }
0077 
0078 
0079 /*
0080  * Local Variables:
0081  * indent-tabs-mode: nil
0082  * mode: C
0083  * c-file-style: "gnu"
0084  * c-basic-offset: 2
0085  * End:
0086  */
0087 
0088 /* vi: set et sw=2 sts=2: */