Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
This commit is contained in:
+14
@@ -79,6 +79,13 @@ config LIBCRC32C
|
||||
require M here. See Castagnoli93.
|
||||
Module will be libcrc32c.
|
||||
|
||||
config CRC8
|
||||
tristate "CRC8 function"
|
||||
help
|
||||
This option provides CRC8 function. Drivers may select this
|
||||
when they need to do cyclic redundancy check according CRC8
|
||||
algorithm. Module will be called crc8.
|
||||
|
||||
config AUDIT_GENERIC
|
||||
bool
|
||||
depends on AUDIT && !AUDIT_ARCH
|
||||
@@ -262,4 +269,11 @@ config AVERAGE
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config CORDIC
|
||||
tristate "Cordic function"
|
||||
help
|
||||
The option provides arithmetic function using cordic algorithm
|
||||
so its calculations are in fixed point. Modules can select this
|
||||
when they require this function. Module will be called cordic.
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -61,6 +61,7 @@ obj-$(CONFIG_CRC_ITU_T) += crc-itu-t.o
|
||||
obj-$(CONFIG_CRC32) += crc32.o
|
||||
obj-$(CONFIG_CRC7) += crc7.o
|
||||
obj-$(CONFIG_LIBCRC32C) += libcrc32c.o
|
||||
obj-$(CONFIG_CRC8) += crc8.o
|
||||
obj-$(CONFIG_GENERIC_ALLOCATOR) += genalloc.o
|
||||
|
||||
obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate/
|
||||
@@ -112,6 +113,8 @@ obj-$(CONFIG_AVERAGE) += average.o
|
||||
|
||||
obj-$(CONFIG_CPU_RMAP) += cpu_rmap.o
|
||||
|
||||
obj-$(CONFIG_CORDIC) += cordic.o
|
||||
|
||||
hostprogs-y := gen_crc32table
|
||||
clean-files := crc32table.h
|
||||
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Broadcom Corporation
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/cordic.h>
|
||||
|
||||
#define CORDIC_ANGLE_GEN 39797
|
||||
#define CORDIC_PRECISION_SHIFT 16
|
||||
#define CORDIC_NUM_ITER (CORDIC_PRECISION_SHIFT + 2)
|
||||
|
||||
#define FIXED(X) ((s32)((X) << CORDIC_PRECISION_SHIFT))
|
||||
#define FLOAT(X) (((X) >= 0) \
|
||||
? ((((X) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1) \
|
||||
: -((((-(X)) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1))
|
||||
|
||||
static const s32 arctan_table[] = {
|
||||
2949120,
|
||||
1740967,
|
||||
919879,
|
||||
466945,
|
||||
234379,
|
||||
117304,
|
||||
58666,
|
||||
29335,
|
||||
14668,
|
||||
7334,
|
||||
3667,
|
||||
1833,
|
||||
917,
|
||||
458,
|
||||
229,
|
||||
115,
|
||||
57,
|
||||
29
|
||||
};
|
||||
|
||||
/*
|
||||
* cordic_calc_iq() - calculates the i/q coordinate for given angle
|
||||
*
|
||||
* theta: angle in degrees for which i/q coordinate is to be calculated
|
||||
* coord: function output parameter holding the i/q coordinate
|
||||
*/
|
||||
struct cordic_iq cordic_calc_iq(s32 theta)
|
||||
{
|
||||
struct cordic_iq coord;
|
||||
s32 angle, valtmp;
|
||||
unsigned iter;
|
||||
int signx = 1;
|
||||
int signtheta;
|
||||
|
||||
coord.i = CORDIC_ANGLE_GEN;
|
||||
coord.q = 0;
|
||||
angle = 0;
|
||||
|
||||
theta = FIXED(theta);
|
||||
signtheta = (theta < 0) ? -1 : 1;
|
||||
theta = ((theta + FIXED(180) * signtheta) % FIXED(360)) -
|
||||
FIXED(180) * signtheta;
|
||||
|
||||
if (FLOAT(theta) > 90) {
|
||||
theta -= FIXED(180);
|
||||
signx = -1;
|
||||
} else if (FLOAT(theta) < -90) {
|
||||
theta += FIXED(180);
|
||||
signx = -1;
|
||||
}
|
||||
|
||||
for (iter = 0; iter < CORDIC_NUM_ITER; iter++) {
|
||||
if (theta > angle) {
|
||||
valtmp = coord.i - (coord.q >> iter);
|
||||
coord.q += (coord.i >> iter);
|
||||
angle += arctan_table[iter];
|
||||
} else {
|
||||
valtmp = coord.i + (coord.q >> iter);
|
||||
coord.q -= (coord.i >> iter);
|
||||
angle -= arctan_table[iter];
|
||||
}
|
||||
coord.i = valtmp;
|
||||
}
|
||||
|
||||
coord.i *= signx;
|
||||
coord.q *= signx;
|
||||
return coord;
|
||||
}
|
||||
EXPORT_SYMBOL(cordic_calc_iq);
|
||||
|
||||
MODULE_DESCRIPTION("Cordic functions");
|
||||
MODULE_AUTHOR("Broadcom Corporation");
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Broadcom Corporation
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/crc8.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
/*
|
||||
* crc8_populate_msb - fill crc table for given polynomial in reverse bit order.
|
||||
*
|
||||
* table: table to be filled.
|
||||
* polynomial: polynomial for which table is to be filled.
|
||||
*/
|
||||
void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)
|
||||
{
|
||||
int i, j;
|
||||
const u8 msbit = 0x80;
|
||||
u8 t = msbit;
|
||||
|
||||
table[0] = 0;
|
||||
|
||||
for (i = 1; i < CRC8_TABLE_SIZE; i *= 2) {
|
||||
t = (t << 1) ^ (t & msbit ? polynomial : 0);
|
||||
for (j = 0; j < i; j++)
|
||||
table[i+j] = table[j] ^ t;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(crc8_populate_msb);
|
||||
|
||||
/*
|
||||
* crc8_populate_lsb - fill crc table for given polynomial in regular bit order.
|
||||
*
|
||||
* table: table to be filled.
|
||||
* polynomial: polynomial for which table is to be filled.
|
||||
*/
|
||||
void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)
|
||||
{
|
||||
int i, j;
|
||||
u8 t = 1;
|
||||
|
||||
table[0] = 0;
|
||||
|
||||
for (i = (CRC8_TABLE_SIZE >> 1); i; i >>= 1) {
|
||||
t = (t >> 1) ^ (t & 1 ? polynomial : 0);
|
||||
for (j = 0; j < CRC8_TABLE_SIZE; j += 2*i)
|
||||
table[i+j] = table[j] ^ t;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(crc8_populate_lsb);
|
||||
|
||||
/*
|
||||
* crc8 - calculate a crc8 over the given input data.
|
||||
*
|
||||
* table: crc table used for calculation.
|
||||
* pdata: pointer to data buffer.
|
||||
* nbytes: number of bytes in data buffer.
|
||||
* crc: previous returned crc8 value.
|
||||
*/
|
||||
u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc)
|
||||
{
|
||||
/* loop over the buffer data */
|
||||
while (nbytes-- > 0)
|
||||
crc = table[(crc ^ *pdata++) & 0xff];
|
||||
|
||||
return crc;
|
||||
}
|
||||
EXPORT_SYMBOL(crc8);
|
||||
|
||||
MODULE_DESCRIPTION("CRC8 (by Williams, Ross N.) function");
|
||||
MODULE_AUTHOR("Broadcom Corporation");
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
Reference in New Issue
Block a user