Merge branch 'staging-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[pandora-kernel.git] / drivers / staging / brcm80211 / util / bcmutils.c
index 9789ea4..fd30cc6 100644 (file)
 #include <linux/string.h>
 #include <bcmdefs.h>
 #include <stdarg.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/netdevice.h>
 #include <osl.h>
-#include <linuxver.h>
 #include <bcmutils.h>
 #include <siutils.h>
 #include <bcmnvram.h>
 #include <proto/802.1d.h>
 #include <proto/802.11.h>
 
-
 /* copy a buffer into a pkt buffer chain */
-uint pktfrombuf(osl_t *osh, void *p, uint offset, int len, unsigned char *buf)
+uint pktfrombuf(struct osl_info *osh, struct sk_buff *p, uint offset, int len,
+               unsigned char *buf)
 {
        uint n, ret = 0;
 
        /* skip 'offset' bytes */
-       for (; p && offset; p = PKTNEXT(p)) {
-               if (offset < (uint) PKTLEN(p))
+       for (; p && offset; p = p->next) {
+               if (offset < (uint) (p->len))
                        break;
-               offset -= PKTLEN(p);
+               offset -= p->len;
        }
 
        if (!p)
                return 0;
 
        /* copy the data */
-       for (; p && len; p = PKTNEXT(p)) {
-               n = min((uint) PKTLEN(p) - offset, (uint) len);
-               bcopy(buf, PKTDATA(p) + offset, n);
+       for (; p && len; p = p->next) {
+               n = min((uint) (p->len) - offset, (uint) len);
+               bcopy(buf, p->data + offset, n);
                buf += n;
                len -= n;
                ret += n;
@@ -59,13 +61,13 @@ uint pktfrombuf(osl_t *osh, void *p, uint offset, int len, unsigned char *buf)
        return ret;
 }
 /* return total length of buffer chain */
-uint BCMFASTPATH pkttotlen(osl_t *osh, void *p)
+uint BCMFASTPATH pkttotlen(struct osl_info *osh, struct sk_buff *p)
 {
        uint total;
 
        total = 0;
-       for (; p; p = PKTNEXT(p))
-               total += PKTLEN(p);
+       for (; p; p = p->next)
+               total += p->len;
        return total;
 }
 
@@ -73,12 +75,13 @@ uint BCMFASTPATH pkttotlen(osl_t *osh, void *p)
  * osl multiple-precedence packet queue
  * hi_prec is always >= the number of the highest non-empty precedence
  */
-void *BCMFASTPATH pktq_penq(struct pktq *pq, int prec, void *p)
+struct sk_buff *BCMFASTPATH pktq_penq(struct pktq *pq, int prec,
+                                     struct sk_buff *p)
 {
        struct pktq_prec *q;
 
        ASSERT(prec >= 0 && prec < pq->num_prec);
-       ASSERT(PKTLINK(p) == NULL);     /* queueing chains not allowed */
+       ASSERT(p->prev == NULL);        /* queueing chains not allowed */
 
        ASSERT(!pktq_full(pq));
        ASSERT(!pktq_pfull(pq, prec));
@@ -86,7 +89,7 @@ void *BCMFASTPATH pktq_penq(struct pktq *pq, int prec, void *p)
        q = &pq->q[prec];
 
        if (q->head)
-               PKTSETLINK(q->tail, p);
+               q->tail->prev = p;
        else
                q->head = p;
 
@@ -101,12 +104,13 @@ void *BCMFASTPATH pktq_penq(struct pktq *pq, int prec, void *p)
        return p;
 }
 
-void *BCMFASTPATH pktq_penq_head(struct pktq *pq, int prec, void *p)
+struct sk_buff *BCMFASTPATH pktq_penq_head(struct pktq *pq, int prec,
+                                          struct sk_buff *p)
 {
        struct pktq_prec *q;
 
        ASSERT(prec >= 0 && prec < pq->num_prec);
-       ASSERT(PKTLINK(p) == NULL);     /* queueing chains not allowed */
+       ASSERT(p->prev == NULL);        /* queueing chains not allowed */
 
        ASSERT(!pktq_full(pq));
        ASSERT(!pktq_pfull(pq, prec));
@@ -116,7 +120,7 @@ void *BCMFASTPATH pktq_penq_head(struct pktq *pq, int prec, void *p)
        if (q->head == NULL)
                q->tail = p;
 
-       PKTSETLINK(p, q->head);
+       p->prev = q->head;
        q->head = p;
        q->len++;
 
@@ -128,10 +132,10 @@ void *BCMFASTPATH pktq_penq_head(struct pktq *pq, int prec, void *p)
        return p;
 }
 
-void *BCMFASTPATH pktq_pdeq(struct pktq *pq, int prec)
+struct sk_buff *BCMFASTPATH pktq_pdeq(struct pktq *pq, int prec)
 {
        struct pktq_prec *q;
-       void *p;
+       struct sk_buff *p;
 
        ASSERT(prec >= 0 && prec < pq->num_prec);
 
@@ -141,7 +145,7 @@ void *BCMFASTPATH pktq_pdeq(struct pktq *pq, int prec)
        if (p == NULL)
                return NULL;
 
-       q->head = PKTLINK(p);
+       q->head = p->prev;
        if (q->head == NULL)
                q->tail = NULL;
 
@@ -149,15 +153,15 @@ void *BCMFASTPATH pktq_pdeq(struct pktq *pq, int prec)
 
        pq->len--;
 
-       PKTSETLINK(p, NULL);
+       p->prev = NULL;
 
        return p;
 }
 
-void *BCMFASTPATH pktq_pdeq_tail(struct pktq *pq, int prec)
+struct sk_buff *BCMFASTPATH pktq_pdeq_tail(struct pktq *pq, int prec)
 {
        struct pktq_prec *q;
-       void *p, *prev;
+       struct sk_buff *p, *prev;
 
        ASSERT(prec >= 0 && prec < pq->num_prec);
 
@@ -167,11 +171,11 @@ void *BCMFASTPATH pktq_pdeq_tail(struct pktq *pq, int prec)
        if (p == NULL)
                return NULL;
 
-       for (prev = NULL; p != q->tail; p = PKTLINK(p))
+       for (prev = NULL; p != q->tail; p = p->prev)
                prev = p;
 
        if (prev)
-               PKTSETLINK(prev, NULL);
+               prev->prev = NULL;
        else
                q->head = NULL;
 
@@ -184,17 +188,17 @@ void *BCMFASTPATH pktq_pdeq_tail(struct pktq *pq, int prec)
 }
 
 #ifdef BRCM_FULLMAC
-void pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir)
+void pktq_pflush(struct osl_info *osh, struct pktq *pq, int prec, bool dir)
 {
        struct pktq_prec *q;
-       void *p;
+       struct sk_buff *p;
 
        q = &pq->q[prec];
        p = q->head;
        while (p) {
-               q->head = PKTLINK(p);
-               PKTSETLINK(p, NULL);
-               PKTFREE(osh, p, dir);
+               q->head = p->prev;
+               p->prev = NULL;
+               pkt_buf_free_skb(osh, p, dir);
                q->len--;
                pq->len--;
                p = q->head;
@@ -203,7 +207,7 @@ void pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir)
        q->tail = NULL;
 }
 
-void pktq_flush(osl_t *osh, struct pktq *pq, bool dir)
+void pktq_flush(struct osl_info *osh, struct pktq *pq, bool dir)
 {
        int prec;
        for (prec = 0; prec < pq->num_prec; prec++)
@@ -212,11 +216,11 @@ void pktq_flush(osl_t *osh, struct pktq *pq, bool dir)
 }
 #else /* !BRCM_FULLMAC */
 void
-pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir, ifpkt_cb_t fn,
-           int arg)
+pktq_pflush(struct osl_info *osh, struct pktq *pq, int prec, bool dir,
+           ifpkt_cb_t fn, int arg)
 {
        struct pktq_prec *q;
-       void *p, *prev = NULL;
+       struct sk_buff *p, *prev = NULL;
 
        q = &pq->q[prec];
        p = q->head;
@@ -224,17 +228,17 @@ pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir, ifpkt_cb_t fn,
                if (fn == NULL || (*fn) (p, arg)) {
                        bool head = (p == q->head);
                        if (head)
-                               q->head = PKTLINK(p);
+                               q->head = p->prev;
                        else
-                               PKTSETLINK(prev, PKTLINK(p));
-                       PKTSETLINK(p, NULL);
-                       PKTFREE(osh, p, dir);
+                               prev->prev = p->prev;
+                       p->prev = NULL;
+                       pkt_buf_free_skb(osh, p, dir);
                        q->len--;
                        pq->len--;
-                       p = (head ? q->head : PKTLINK(prev));
+                       p = (head ? q->head : prev->prev);
                } else {
                        prev = p;
-                       p = PKTLINK(p);
+                       p = p->prev;
                }
        }
 
@@ -244,7 +248,8 @@ pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir, ifpkt_cb_t fn,
        }
 }
 
-void pktq_flush(osl_t *osh, struct pktq *pq, bool dir, ifpkt_cb_t fn, int arg)
+void pktq_flush(struct osl_info *osh, struct pktq *pq, bool dir,
+               ifpkt_cb_t fn, int arg)
 {
        int prec;
        for (prec = 0; prec < pq->num_prec; prec++)
@@ -261,7 +266,7 @@ void pktq_init(struct pktq *pq, int num_prec, int max_len)
        ASSERT(num_prec > 0 && num_prec <= PKTQ_MAX_PREC);
 
        /* pq is variable size; only zero out what's requested */
-       bzero(pq,
+       memset(pq, 0,
              offsetof(struct pktq, q) + (sizeof(struct pktq_prec) * num_prec));
 
        pq->num_prec = (u16) num_prec;
@@ -272,7 +277,7 @@ void pktq_init(struct pktq *pq, int num_prec, int max_len)
                pq->q[prec].max = pq->max;
 }
 
-void *pktq_peek_tail(struct pktq *pq, int *prec_out)
+struct sk_buff *pktq_peek_tail(struct pktq *pq, int *prec_out)
 {
        int prec;
 
@@ -303,10 +308,11 @@ int pktq_mlen(struct pktq *pq, uint prec_bmp)
        return len;
 }
 /* Priority dequeue from a specific set of precedences */
-void *BCMFASTPATH pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out)
+struct sk_buff *BCMFASTPATH pktq_mdeq(struct pktq *pq, uint prec_bmp,
+                                     int *prec_out)
 {
        struct pktq_prec *q;
-       void *p;
+       struct sk_buff *p;
        int prec;
 
        if (pq->len == 0)
@@ -325,7 +331,7 @@ void *BCMFASTPATH pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out)
        if (p == NULL)
                return NULL;
 
-       q->head = PKTLINK(p);
+       q->head = p->prev;
        if (q->head == NULL)
                q->tail = NULL;
 
@@ -336,7 +342,7 @@ void *BCMFASTPATH pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out)
 
        pq->len--;
 
-       PKTSETLINK(p, NULL);
+       p->prev = NULL;
 
        return p;
 }
@@ -373,7 +379,7 @@ char *getvar(char *vars, const char *name)
 
        /* first look in vars[] */
        for (s = vars; s && *s;) {
-               if ((bcmp(s, name, len) == 0) && (s[len] == '='))
+               if ((memcmp(s, name, len) == 0) && (s[len] == '='))
                        return &s[len + 1];
 
                while (*s++)
@@ -404,15 +410,15 @@ int getintvar(char *vars, const char *name)
 
 #if defined(BCMDBG)
 /* pretty hex print a pkt buffer chain */
-void prpkt(const char *msg, osl_t *osh, void *p0)
+void prpkt(const char *msg, struct osl_info *osh, struct sk_buff *p0)
 {
-       void *p;
+       struct sk_buff *p;
 
        if (msg && (msg[0] != '\0'))
                printf("%s:\n", msg);
 
-       for (p = p0; p; p = PKTNEXT(p))
-               prhex(NULL, PKTDATA(p), PKTLEN(p));
+       for (p = p0; p; p = p->next)
+               prhex(NULL, p->data, p->len);
 }
 #endif                         /* defined(BCMDBG) */