aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFranky Lin <frankyl@broadcom.com>2013-09-25 07:05:43 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-10-03 16:24:25 -0400
commit5491c11c67f2c83c95fa9a26172bc1994580aed7 (patch)
treee314ad23e961ca7e2e4cb495c161af2ada5b51be
parent7434785652457482a4b22c280a83776c3873940d (diff)
brcmfmac: reserve memory for bus layer in sk_buff::cb
Bus layer need to share sk_buff::cb with firmware signal feature. Reserve necessary memory so they won't overwrite each other. Reviewed-by: Arend Van Spriel <arend@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Franky Lin <frankyl@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c15
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c2
2 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
index 1aa75d5951b8..f9ba4d0970d1 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
@@ -1786,10 +1786,15 @@ brcmf_sdbrcm_wait_event_wakeup(struct brcmf_sdio *bus)
1786 return; 1786 return;
1787} 1787}
1788 1788
1789/**
1790 * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for
1791 * bus layer usage.
1792 */
1789/* flag marking a dummy skb added for DMA alignment requirement */ 1793/* flag marking a dummy skb added for DMA alignment requirement */
1790#define DUMMY_SKB_FLAG 0x10000 1794#define ALIGN_SKB_FLAG 0x8000
1791/* bit mask of data length chopped from the previous packet */ 1795/* bit mask of data length chopped from the previous packet */
1792#define DUMMY_SKB_CHOP_LEN_MASK 0xffff 1796#define ALIGN_SKB_CHOP_LEN_MASK 0x7fff
1797
1793/** 1798/**
1794 * brcmf_sdio_txpkt_prep - packet preparation for transmit 1799 * brcmf_sdio_txpkt_prep - packet preparation for transmit
1795 * @bus: brcmf_sdio structure pointer 1800 * @bus: brcmf_sdio structure pointer
@@ -1854,7 +1859,7 @@ brcmf_sdio_txpkt_prep(struct brcmf_sdio *bus, struct sk_buff_head *pktq,
1854 memcpy(pkt_new->data, 1859 memcpy(pkt_new->data,
1855 pkt_next->data + pkt_next->len - tail_chop, 1860 pkt_next->data + pkt_next->len - tail_chop,
1856 tail_chop); 1861 tail_chop);
1857 *(u32 *)(pkt_new->cb) = DUMMY_SKB_FLAG + tail_chop; 1862 *(u32 *)(pkt_new->cb) = ALIGN_SKB_FLAG + tail_chop;
1858 skb_trim(pkt_next, pkt_next->len - tail_chop); 1863 skb_trim(pkt_next, pkt_next->len - tail_chop);
1859 __skb_queue_after(pktq, pkt_next, pkt_new); 1864 __skb_queue_after(pktq, pkt_next, pkt_new);
1860 } else { 1865 } else {
@@ -1908,8 +1913,8 @@ brcmf_sdio_txpkt_postp(struct brcmf_sdio *bus, struct sk_buff_head *pktq)
1908 1913
1909 skb_queue_walk_safe(pktq, pkt_next, tmp) { 1914 skb_queue_walk_safe(pktq, pkt_next, tmp) {
1910 dummy_flags = *(u32 *)(pkt_next->cb); 1915 dummy_flags = *(u32 *)(pkt_next->cb);
1911 if (dummy_flags & DUMMY_SKB_FLAG) { 1916 if (dummy_flags & ALIGN_SKB_FLAG) {
1912 chop_len = dummy_flags & DUMMY_SKB_CHOP_LEN_MASK; 1917 chop_len = dummy_flags & ALIGN_SKB_CHOP_LEN_MASK;
1913 if (chop_len) { 1918 if (chop_len) {
1914 pkt_prev = pkt_next->prev; 1919 pkt_prev = pkt_next->prev;
1915 memcpy(pkt_prev->data + pkt_prev->len, 1920 memcpy(pkt_prev->data + pkt_prev->len,
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
index 82f9140f3d35..d0cd0bf95c5a 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
@@ -168,6 +168,7 @@ enum brcmf_fws_skb_state {
168/** 168/**
169 * struct brcmf_skbuff_cb - control buffer associated with skbuff. 169 * struct brcmf_skbuff_cb - control buffer associated with skbuff.
170 * 170 *
171 * @bus_flags: 2 bytes reserved for bus specific parameters
171 * @if_flags: holds interface index and packet related flags. 172 * @if_flags: holds interface index and packet related flags.
172 * @htod: host to device packet identifier (used in PKTTAG tlv). 173 * @htod: host to device packet identifier (used in PKTTAG tlv).
173 * @state: transmit state of the packet. 174 * @state: transmit state of the packet.
@@ -177,6 +178,7 @@ enum brcmf_fws_skb_state {
177 * provides 48 bytes of storage so this structure should not exceed that. 178 * provides 48 bytes of storage so this structure should not exceed that.
178 */ 179 */
179struct brcmf_skbuff_cb { 180struct brcmf_skbuff_cb {
181 u16 bus_flags;
180 u16 if_flags; 182 u16 if_flags;
181 u32 htod; 183 u32 htod;
182 enum brcmf_fws_skb_state state; 184 enum brcmf_fws_skb_state state;