Commit 20e5ca16 authored by Arend van Spriel's avatar Arend van Spriel Committed by John W. Linville

brcm80211: util: move brcmu_pktfrombuf() function to brcmfmac

The function brcmu_pktfrombuf was only used in the brcmfmac source
and has been moved there. It has been refactored to match its use.
Reported-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Reviewed-by: default avatarRoland Vossen <rvossen@broadcom.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: default avatarFranky (Zhenhui) Lin <frankyl@broadcom.com>
Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 1433c59b
...@@ -1222,6 +1222,28 @@ static void brcmf_sdbrcm_rxfail(struct brcmf_bus *bus, bool abort, bool rtx) ...@@ -1222,6 +1222,28 @@ static void brcmf_sdbrcm_rxfail(struct brcmf_bus *bus, bool abort, bool rtx)
bus->drvr->busstate = BRCMF_BUS_DOWN; bus->drvr->busstate = BRCMF_BUS_DOWN;
} }
/* copy a buffer into a pkt buffer chain */
static uint brcmf_sdbrcm_glom_from_buf(struct brcmf_bus *bus, uint len)
{
uint n, ret = 0;
struct sk_buff *p;
u8 *buf;
p = bus->glom;
buf = bus->dataptr;
/* copy the data */
for (; p && len; p = p->next) {
n = min_t(uint, p->len, len);
memcpy(p->data, buf, n);
buf += n;
len -= n;
ret += n;
}
return ret;
}
static u8 brcmf_sdbrcm_rxglom(struct brcmf_bus *bus, u8 rxseq) static u8 brcmf_sdbrcm_rxglom(struct brcmf_bus *bus, u8 rxseq)
{ {
u16 dlen, totlen; u16 dlen, totlen;
...@@ -1354,8 +1376,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_bus *bus, u8 rxseq) ...@@ -1354,8 +1376,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_bus *bus, u8 rxseq)
SDIO_FUNC_2, SDIO_FUNC_2,
F2SYNC, bus->dataptr, dlen, F2SYNC, bus->dataptr, dlen,
NULL); NULL);
sublen = (u16) brcmu_pktfrombuf(pfirst, 0, dlen, sublen = (u16) brcmf_sdbrcm_glom_from_buf(bus, dlen);
bus->dataptr);
if (sublen != dlen) { if (sublen != dlen) {
brcmf_dbg(ERROR, "FAILED TO COPY, dlen %d sublen %d\n", brcmf_dbg(ERROR, "FAILED TO COPY, dlen %d sublen %d\n",
dlen, sublen); dlen, sublen);
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/module.h> #include <linux/module.h>
#include <brcmu_utils.h> #include <brcmu_utils.h>
MODULE_AUTHOR("Broadcom Corporation"); MODULE_AUTHOR("Broadcom Corporation");
...@@ -66,36 +67,6 @@ void brcmu_pkt_buf_free_skb(struct sk_buff *skb) ...@@ -66,36 +67,6 @@ void brcmu_pkt_buf_free_skb(struct sk_buff *skb)
EXPORT_SYMBOL(brcmu_pkt_buf_free_skb); EXPORT_SYMBOL(brcmu_pkt_buf_free_skb);
/* copy a buffer into a pkt buffer chain */
uint brcmu_pktfrombuf(struct sk_buff *p, uint offset, int len,
unsigned char *buf)
{
uint n, ret = 0;
/* skip 'offset' bytes */
for (; p && offset; p = p->next) {
if (offset < (uint) (p->len))
break;
offset -= p->len;
}
if (!p)
return 0;
/* copy the data */
for (; p && len; p = p->next) {
n = min((uint) (p->len) - offset, (uint) len);
memcpy(p->data + offset, buf, n);
buf += n;
len -= n;
ret += n;
offset = 0;
}
return ret;
}
EXPORT_SYMBOL(brcmu_pktfrombuf);
/* return total length of buffer chain */ /* return total length of buffer chain */
uint brcmu_pkttotlen(struct sk_buff *p) uint brcmu_pkttotlen(struct sk_buff *p)
{ {
......
...@@ -173,8 +173,6 @@ extern void brcmu_pktq_flush(struct pktq *pq, bool dir, ...@@ -173,8 +173,6 @@ extern void brcmu_pktq_flush(struct pktq *pq, bool dir,
/* externs */ /* externs */
/* packet */ /* packet */
extern uint brcmu_pktfrombuf(struct sk_buff *p,
uint offset, int len, unsigned char *buf);
extern uint brcmu_pkttotlen(struct sk_buff *p); extern uint brcmu_pkttotlen(struct sk_buff *p);
/* ip address */ /* ip address */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment