From 371d72a1776bae3289cc984e656ef91172f2e925 Mon Sep 17 00:00:00 2001 From: Brett Rudley Date: Fri, 25 Feb 2011 16:39:11 +0100 Subject: [PATCH] staging: brcm80211: relocate skb_get/free routines Getting rid of os abstraction layer (ie. osl) is ongoing. Some routines which are still required have been moved to bcmutils module. Reviewed-by: Roland Vossen Reviewed-by: Brett Rudley Signed-off-by: Arend van Spriel Signed-off-by: Greg Kroah-Hartman --- drivers/staging/brcm80211/include/bcmutils.h | 5 +++ drivers/staging/brcm80211/include/osl.h | 3 -- drivers/staging/brcm80211/util/bcmutils.c | 46 ++++++++++++++++++++ drivers/staging/brcm80211/util/linux_osl.c | 45 ------------------- 4 files changed, 51 insertions(+), 48 deletions(-) diff --git a/drivers/staging/brcm80211/include/bcmutils.h b/drivers/staging/brcm80211/include/bcmutils.h index b8c800abd30..a3d3f66b363 100644 --- a/drivers/staging/brcm80211/include/bcmutils.h +++ b/drivers/staging/brcm80211/include/bcmutils.h @@ -94,6 +94,11 @@ extern struct sk_buff *pktq_penq_head(struct pktq *pq, int prec, extern struct sk_buff *pktq_pdeq(struct pktq *pq, int prec); extern struct sk_buff *pktq_pdeq_tail(struct pktq *pq, int prec); +/* packet primitives */ +extern struct sk_buff *pkt_buf_get_skb(struct osl_info *osh, uint len); +extern void pkt_buf_free_skb(struct osl_info *osh, + struct sk_buff *skb, bool send); + /* Empty the queue at particular precedence level */ #ifdef BRCM_FULLMAC extern void pktq_pflush(struct osl_info *osh, struct pktq *pq, int prec, diff --git a/drivers/staging/brcm80211/include/osl.h b/drivers/staging/brcm80211/include/osl.h index c3800d01c48..f118b30552e 100644 --- a/drivers/staging/brcm80211/include/osl.h +++ b/drivers/staging/brcm80211/include/osl.h @@ -176,8 +176,5 @@ extern uint osl_pci_slot(struct osl_info *osh); } while (0) #endif /* IL_BIGENDIAN */ -/* packet primitives */ -extern struct sk_buff *pkt_buf_get_skb(struct osl_info *osh, uint len); -extern void pkt_buf_free_skb(struct osl_info *osh, struct sk_buff *skb, bool send); #endif /* _osl_h_ */ diff --git a/drivers/staging/brcm80211/util/bcmutils.c b/drivers/staging/brcm80211/util/bcmutils.c index 674caf6243d..696220edb0b 100644 --- a/drivers/staging/brcm80211/util/bcmutils.c +++ b/drivers/staging/brcm80211/util/bcmutils.c @@ -30,6 +30,52 @@ #include #include +struct sk_buff *BCMFASTPATH pkt_buf_get_skb(struct osl_info *osh, uint len) +{ + struct sk_buff *skb; + + skb = dev_alloc_skb(len); + if (skb) { + skb_put(skb, len); + skb->priority = 0; + + osh->pktalloced++; + } + + return skb; +} + +/* Free the driver packet. Free the tag if present */ +void BCMFASTPATH pkt_buf_free_skb(struct osl_info *osh, + struct sk_buff *skb, bool send) +{ + struct sk_buff *nskb; + int nest = 0; + + ASSERT(skb); + + /* perversion: we use skb->next to chain multi-skb packets */ + while (skb) { + nskb = skb->next; + skb->next = NULL; + + if (skb->destructor) + /* cannot kfree_skb() on hard IRQ (net/core/skbuff.c) if + * destructor exists + */ + dev_kfree_skb_any(skb); + else + /* can free immediately (even in_irq()) if destructor + * does not exist + */ + dev_kfree_skb(skb); + + osh->pktalloced--; + nest++; + skb = nskb; + } +} + /* copy a buffer into a pkt buffer chain */ uint pktfrombuf(struct osl_info *osh, struct sk_buff *p, uint offset, int len, unsigned char *buf) diff --git a/drivers/staging/brcm80211/util/linux_osl.c b/drivers/staging/brcm80211/util/linux_osl.c index bcbce6e2401..99e449603a9 100644 --- a/drivers/staging/brcm80211/util/linux_osl.c +++ b/drivers/staging/brcm80211/util/linux_osl.c @@ -78,51 +78,6 @@ void osl_detach(struct osl_info *osh) kfree(osh); } -struct sk_buff *BCMFASTPATH pkt_buf_get_skb(struct osl_info *osh, uint len) -{ - struct sk_buff *skb; - - skb = dev_alloc_skb(len); - if (skb) { - skb_put(skb, len); - skb->priority = 0; - - osh->pktalloced++; - } - - return skb; -} - -/* Free the driver packet. Free the tag if present */ -void BCMFASTPATH pkt_buf_free_skb(struct osl_info *osh, struct sk_buff *skb, bool send) -{ - struct sk_buff *nskb; - int nest = 0; - - ASSERT(skb); - - /* perversion: we use skb->next to chain multi-skb packets */ - while (skb) { - nskb = skb->next; - skb->next = NULL; - - if (skb->destructor) - /* cannot kfree_skb() on hard IRQ (net/core/skbuff.c) if - * destructor exists - */ - dev_kfree_skb_any(skb); - else - /* can free immediately (even in_irq()) if destructor - * does not exist - */ - dev_kfree_skb(skb); - - osh->pktalloced--; - nest++; - skb = nskb; - } -} - /* return bus # for the pci device pointed by osh->pdev */ uint osl_pci_bus(struct osl_info *osh) { -- 2.39.5