diff options
author | Henry Ptasinski <henryp@broadcom.com> | 2011-05-10 22:25:29 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-11 13:58:20 -0700 |
commit | b33f0e282f5e728456412ef63d36521538932fc5 (patch) | |
tree | 0040fa118a9ae7f7e20303324c1f1882c9b43d7d /drivers/staging/brcm80211/util | |
parent | 4e458c1d3206ef633c39a7ac29d5b61a540ddb57 (diff) | |
download | op-kernel-dev-b33f0e282f5e728456412ef63d36521538932fc5.zip op-kernel-dev-b33f0e282f5e728456412ef63d36521538932fc5.tar.gz |
staging: brcm80211: move utility functions into new module
Move utility functions shared by the brcmsmac and brcmfmac drivers into a new
module, brcmutil.ko. This eliminates the need to compile and link the shared
functions into both drivers. Prefix all exported symbols with "bcm_".
Cc: devel@linuxdriverproject.org
Reviewed-by: Roland Vossen <rvossen@broadcom.com>
Reviewed-by: Brett Rudley <brudley@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/brcm80211/util')
-rw-r--r-- | drivers/staging/brcm80211/util/Makefile | 29 | ||||
-rw-r--r-- | drivers/staging/brcm80211/util/bcmutils.c | 81 | ||||
-rw-r--r-- | drivers/staging/brcm80211/util/bcmwifi.c | 10 |
3 files changed, 97 insertions, 23 deletions
diff --git a/drivers/staging/brcm80211/util/Makefile b/drivers/staging/brcm80211/util/Makefile new file mode 100644 index 0000000..f9b36ca --- /dev/null +++ b/drivers/staging/brcm80211/util/Makefile @@ -0,0 +1,29 @@ +# +# Makefile fragment for Broadcom 802.11n Networking Device Driver Utilities +# +# 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. + +ccflags-y := \ + -Idrivers/staging/brcm80211/util \ + -Idrivers/staging/brcm80211/include + +BRCMUTIL_OFILES := \ + bcmutils.o \ + bcmwifi.o + +MODULEPFX := brcmutil + +obj-$(CONFIG_BRCMUTIL) += $(MODULEPFX).o +$(MODULEPFX)-objs = $(BRCMUTIL_OFILES) diff --git a/drivers/staging/brcm80211/util/bcmutils.c b/drivers/staging/brcm80211/util/bcmutils.c index 0c21e43..607d331 100644 --- a/drivers/staging/brcm80211/util/bcmutils.c +++ b/drivers/staging/brcm80211/util/bcmutils.c @@ -28,7 +28,12 @@ #include <bcmdevs.h> #include <proto/802.11.h> -struct sk_buff *BCMFASTPATH pkt_buf_get_skb(uint len) +MODULE_AUTHOR("Broadcom Corporation"); +MODULE_DESCRIPTION("Broadcom 802.11n wireless LAN driver utilities."); +MODULE_SUPPORTED_DEVICE("Broadcom 802.11n WLAN cards"); +MODULE_LICENSE("Dual BSD/GPL"); + +struct sk_buff *BCMFASTPATH bcm_pkt_buf_get_skb(uint len) { struct sk_buff *skb; @@ -40,9 +45,10 @@ struct sk_buff *BCMFASTPATH pkt_buf_get_skb(uint len) return skb; } +EXPORT_SYMBOL(bcm_pkt_buf_get_skb); /* Free the driver packet. Free the tag if present */ -void BCMFASTPATH pkt_buf_free_skb(struct sk_buff *skb) +void BCMFASTPATH bcm_pkt_buf_free_skb(struct sk_buff *skb) { struct sk_buff *nskb; int nest = 0; @@ -67,9 +73,11 @@ void BCMFASTPATH pkt_buf_free_skb(struct sk_buff *skb) skb = nskb; } } +EXPORT_SYMBOL(bcm_pkt_buf_free_skb); + /* copy a buffer into a pkt buffer chain */ -uint pktfrombuf(struct sk_buff *p, uint offset, int len, +uint bcm_pktfrombuf(struct sk_buff *p, uint offset, int len, unsigned char *buf) { uint n, ret = 0; @@ -96,8 +104,10 @@ uint pktfrombuf(struct sk_buff *p, uint offset, int len, return ret; } +EXPORT_SYMBOL(bcm_pktfrombuf); + /* return total length of buffer chain */ -uint BCMFASTPATH pkttotlen(struct sk_buff *p) +uint BCMFASTPATH bcm_pkttotlen(struct sk_buff *p) { uint total; @@ -106,12 +116,13 @@ uint BCMFASTPATH pkttotlen(struct sk_buff *p) total += p->len; return total; } +EXPORT_SYMBOL(bcm_pkttotlen); /* * osl multiple-precedence packet queue * hi_prec is always >= the number of the highest non-empty precedence */ -struct sk_buff *BCMFASTPATH pktq_penq(struct pktq *pq, int prec, +struct sk_buff *BCMFASTPATH bcm_pktq_penq(struct pktq *pq, int prec, struct sk_buff *p) { struct pktq_prec *q; @@ -136,8 +147,9 @@ struct sk_buff *BCMFASTPATH pktq_penq(struct pktq *pq, int prec, return p; } +EXPORT_SYMBOL(bcm_pktq_penq); -struct sk_buff *BCMFASTPATH pktq_penq_head(struct pktq *pq, int prec, +struct sk_buff *BCMFASTPATH bcm_pktq_penq_head(struct pktq *pq, int prec, struct sk_buff *p) { struct pktq_prec *q; @@ -161,8 +173,9 @@ struct sk_buff *BCMFASTPATH pktq_penq_head(struct pktq *pq, int prec, return p; } +EXPORT_SYMBOL(bcm_pktq_penq_head); -struct sk_buff *BCMFASTPATH pktq_pdeq(struct pktq *pq, int prec) +struct sk_buff *BCMFASTPATH bcm_pktq_pdeq(struct pktq *pq, int prec) { struct pktq_prec *q; struct sk_buff *p; @@ -185,8 +198,9 @@ struct sk_buff *BCMFASTPATH pktq_pdeq(struct pktq *pq, int prec) return p; } +EXPORT_SYMBOL(bcm_pktq_pdeq); -struct sk_buff *BCMFASTPATH pktq_pdeq_tail(struct pktq *pq, int prec) +struct sk_buff *BCMFASTPATH bcm_pktq_pdeq_tail(struct pktq *pq, int prec) { struct pktq_prec *q; struct sk_buff *p, *prev; @@ -212,9 +226,10 @@ struct sk_buff *BCMFASTPATH pktq_pdeq_tail(struct pktq *pq, int prec) return p; } +EXPORT_SYMBOL(bcm_pktq_pdeq_tail); void -pktq_pflush(struct pktq *pq, int prec, bool dir, +bcm_pktq_pflush(struct pktq *pq, int prec, bool dir, ifpkt_cb_t fn, int arg) { struct pktq_prec *q; @@ -230,7 +245,7 @@ pktq_pflush(struct pktq *pq, int prec, bool dir, else prev->prev = p->prev; p->prev = NULL; - pkt_buf_free_skb(p); + bcm_pkt_buf_free_skb(p); q->len--; pq->len--; p = (head ? q->head : prev->prev); @@ -244,16 +259,18 @@ pktq_pflush(struct pktq *pq, int prec, bool dir, q->tail = NULL; } } +EXPORT_SYMBOL(bcm_pktq_pflush); -void pktq_flush(struct pktq *pq, bool dir, +void bcm_pktq_flush(struct pktq *pq, bool dir, ifpkt_cb_t fn, int arg) { int prec; for (prec = 0; prec < pq->num_prec; prec++) - pktq_pflush(pq, prec, dir, fn, arg); + bcm_pktq_pflush(pq, prec, dir, fn, arg); } +EXPORT_SYMBOL(bcm_pktq_flush); -void pktq_init(struct pktq *pq, int num_prec, int max_len) +void bcm_pktq_init(struct pktq *pq, int num_prec, int max_len) { int prec; @@ -268,8 +285,9 @@ void pktq_init(struct pktq *pq, int num_prec, int max_len) for (prec = 0; prec < num_prec; prec++) pq->q[prec].max = pq->max; } +EXPORT_SYMBOL(bcm_pktq_init); -struct sk_buff *pktq_peek_tail(struct pktq *pq, int *prec_out) +struct sk_buff *bcm_pktq_peek_tail(struct pktq *pq, int *prec_out) { int prec; @@ -285,9 +303,10 @@ struct sk_buff *pktq_peek_tail(struct pktq *pq, int *prec_out) return pq->q[prec].tail; } +EXPORT_SYMBOL(bcm_pktq_peek_tail); /* Return sum of lengths of a specific set of precedences */ -int pktq_mlen(struct pktq *pq, uint prec_bmp) +int bcm_pktq_mlen(struct pktq *pq, uint prec_bmp) { int prec, len; @@ -299,8 +318,10 @@ int pktq_mlen(struct pktq *pq, uint prec_bmp) return len; } +EXPORT_SYMBOL(bcm_pktq_mlen); + /* Priority dequeue from a specific set of precedences */ -struct sk_buff *BCMFASTPATH pktq_mdeq(struct pktq *pq, uint prec_bmp, +struct sk_buff *BCMFASTPATH bcm_pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out) { struct pktq_prec *q; @@ -338,6 +359,7 @@ struct sk_buff *BCMFASTPATH pktq_mdeq(struct pktq *pq, uint prec_bmp, return p; } +EXPORT_SYMBOL(bcm_pktq_mdeq); /* parse a xx:xx:xx:xx:xx:xx format ethernet address */ int bcm_ether_atoe(char *p, u8 *ea) @@ -352,10 +374,11 @@ int bcm_ether_atoe(char *p, u8 *ea) return i == 6; } +EXPORT_SYMBOL(bcm_ether_atoe); #if defined(BCMDBG) /* pretty hex print a pkt buffer chain */ -void prpkt(const char *msg, struct sk_buff *p0) +void bcm_prpkt(const char *msg, struct sk_buff *p0) { struct sk_buff *p; @@ -363,8 +386,9 @@ void prpkt(const char *msg, struct sk_buff *p0) printk(KERN_DEBUG "%s:\n", msg); for (p = p0; p; p = p->next) - prhex(NULL, p->data, p->len); + bcm_prhex(NULL, p->data, p->len); } +EXPORT_SYMBOL(bcm_prpkt); #endif /* defined(BCMDBG) */ /* iovar table lookup */ @@ -388,6 +412,7 @@ const bcm_iovar_t *bcm_iovar_lookup(const bcm_iovar_t *table, const char *name) return NULL; /* var name not found */ } +EXPORT_SYMBOL(bcm_iovar_lookup); int bcm_iovar_lencheck(const bcm_iovar_t *vi, void *arg, int len, bool set) { @@ -432,6 +457,7 @@ int bcm_iovar_lencheck(const bcm_iovar_t *vi, void *arg, int len, bool set) return bcmerror; } +EXPORT_SYMBOL(bcm_iovar_lencheck); /******************************************************************************* * crc8 @@ -490,7 +516,7 @@ static const u8 crc8_table[256] = { 0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F }; -u8 hndcrc8(u8 *pdata, /* pointer to array of data to process */ +u8 bcm_crc8(u8 *pdata, /* pointer to array of data to process */ uint nbytes, /* number of input data bytes to process */ u8 crc /* either CRC8_INIT_VALUE or previous return value */ ) { @@ -500,6 +526,7 @@ u8 hndcrc8(u8 *pdata, /* pointer to array of data to process */ return crc; } +EXPORT_SYMBOL(bcm_crc8); /* * Traverse a string of 1-byte tag/1-byte length/variable-length value @@ -528,6 +555,7 @@ bcm_tlv_t *bcm_parse_tlvs(void *buf, int buflen, uint key) return NULL; } +EXPORT_SYMBOL(bcm_parse_tlvs); #if defined(BCMDBG) @@ -583,6 +611,7 @@ bcm_format_flags(const bcm_bit_desc_t *bd, u32 flags, char *buf, int len) return (int)(p - buf); } +EXPORT_SYMBOL(bcm_format_flags); /* print bytes formatted as hex to a string. return the resulting string length */ int bcm_format_hex(char *str, const void *bytes, int len) @@ -597,10 +626,11 @@ int bcm_format_hex(char *str, const void *bytes, int len) } return (int)(p - str); } +EXPORT_SYMBOL(bcm_format_hex); #endif /* defined(BCMDBG) */ /* pretty hex print a contiguous buffer */ -void prhex(const char *msg, unsigned char *buf, uint nbytes) +void bcm_prhex(const char *msg, unsigned char *buf, uint nbytes) { char line[128], *p; int len = sizeof(line); @@ -634,6 +664,7 @@ void prhex(const char *msg, unsigned char *buf, uint nbytes) if (p != line) printk(KERN_DEBUG "%s\n", line); } +EXPORT_SYMBOL(bcm_prhex); char *bcm_chipname(uint chipid, char *buf, uint len) { @@ -643,6 +674,7 @@ char *bcm_chipname(uint chipid, char *buf, uint len) snprintf(buf, len, fmt, chipid); return buf; } +EXPORT_SYMBOL(bcm_chipname); uint bcm_mkiovar(char *name, char *data, uint datalen, char *buf, uint buflen) { @@ -661,6 +693,7 @@ uint bcm_mkiovar(char *name, char *data, uint datalen, char *buf, uint buflen) return len; } +EXPORT_SYMBOL(bcm_mkiovar); /* Quarter dBm units to mW * Table starts at QDBM_OFFSET, so the first entry is mW for qdBm=153 @@ -715,6 +748,8 @@ u16 bcm_qdbm_to_mw(u8 qdbm) */ return (nqdBm_to_mW_map[idx] + factor / 2) / factor; } +EXPORT_SYMBOL(bcm_qdbm_to_mw); + u8 bcm_mw_to_qdbm(u16 mw) { u8 qdbm; @@ -745,6 +780,8 @@ u8 bcm_mw_to_qdbm(u16 mw) return qdbm; } +EXPORT_SYMBOL(bcm_mw_to_qdbm); + uint bcm_bitcount(u8 *bitmap, uint length) { uint bitcount = 0, i; @@ -758,12 +795,15 @@ uint bcm_bitcount(u8 *bitmap, uint length) } return bitcount; } +EXPORT_SYMBOL(bcm_bitcount); + /* Initialization of bcmstrbuf structure */ void bcm_binit(struct bcmstrbuf *b, char *buf, uint size) { b->origsize = b->size = size; b->origbuf = b->buf = buf; } +EXPORT_SYMBOL(bcm_binit); /* Buffer sprintf wrapper to guard against buffer overflow */ int bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...) @@ -789,3 +829,4 @@ int bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...) return r; } +EXPORT_SYMBOL(bcm_bprintf); diff --git a/drivers/staging/brcm80211/util/bcmwifi.c b/drivers/staging/brcm80211/util/bcmwifi.c index b03cb4a..955a3ab 100644 --- a/drivers/staging/brcm80211/util/bcmwifi.c +++ b/drivers/staging/brcm80211/util/bcmwifi.c @@ -15,6 +15,7 @@ */ #include <linux/ctype.h> #include <linux/kernel.h> +#include <linux/module.h> #include <bcmdefs.h> #include <bcmutils.h> #include <bcmwifi.h> @@ -25,7 +26,7 @@ * combination could be legal given any set of circumstances. * RETURNS: true is the chanspec is malformed, false if it looks good. */ -bool wf_chspec_malformed(chanspec_t chanspec) +bool bcm_chspec_malformed(chanspec_t chanspec) { /* must be 2G or 5G band */ if (!CHSPEC_IS5G(chanspec) && !CHSPEC_IS2G(chanspec)) @@ -45,13 +46,14 @@ bool wf_chspec_malformed(chanspec_t chanspec) return false; } +EXPORT_SYMBOL(bcm_chspec_malformed); /* * This function returns the channel number that control traffic is being sent on, for legacy * channels this is just the channel number, for 40MHZ channels it is the upper or lowre 20MHZ * sideband depending on the chanspec selected */ -u8 wf_chspec_ctlchan(chanspec_t chspec) +u8 bcm_chspec_ctlchan(chanspec_t chspec) { u8 ctl_chan; @@ -74,6 +76,7 @@ u8 wf_chspec_ctlchan(chanspec_t chspec) return ctl_chan; } +EXPORT_SYMBOL(bcm_chspec_ctlchan); /* * Return the channel number for a given frequency and base frequency. @@ -94,7 +97,7 @@ u8 wf_chspec_ctlchan(chanspec_t chspec) * * Reference 802.11 REVma, section 17.3.8.3, and 802.11B section 18.4.6.2 */ -int wf_mhz2channel(uint freq, uint start_factor) +int bcm_mhz2channel(uint freq, uint start_factor) { int ch = -1; uint base; @@ -130,4 +133,5 @@ int wf_mhz2channel(uint freq, uint start_factor) return ch; } +EXPORT_SYMBOL(bcm_mhz2channel); |