diff options
author | Arend van Spriel <arend@broadcom.com> | 2013-04-05 04:57:41 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-04-08 15:28:41 -0400 |
commit | 5f38b6836083b96613ebe8a0a43cde3400dd4a1b (patch) | |
tree | 0bda3438824c5b403171d3bed127799d2a7568a4 /drivers/net/wireless | |
parent | 33753d47d390624f09ee57dbb2bc611b15a10e8f (diff) |
brcmfmac: handle firmware signals requesting for packets
The firmware can request the host driver for packets, by sending
either the MAC_REQUEST_CREDIT or the MAC_REQUEST_PACKET primitive.
This patch adds handling of these primitives.
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c | 29 |
2 files changed, 29 insertions, 2 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h index e1058892dccc..d259ae5d2237 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | |||
@@ -146,6 +146,8 @@ struct brcmf_fws_stats { | |||
146 | u32 mac_update_failed; | 146 | u32 mac_update_failed; |
147 | u32 mac_ps_update_failed; | 147 | u32 mac_ps_update_failed; |
148 | u32 if_update_failed; | 148 | u32 if_update_failed; |
149 | u32 packet_request_failed; | ||
150 | u32 credit_request_failed; | ||
149 | u32 rollback_success; | 151 | u32 rollback_success; |
150 | u32 rollback_failed; | 152 | u32 rollback_failed; |
151 | u32 delayq_full_error; | 153 | u32 delayq_full_error; |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c index 57cbfb661d58..619fff34c218 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c | |||
@@ -959,6 +959,29 @@ fail: | |||
959 | return ret; | 959 | return ret; |
960 | } | 960 | } |
961 | 961 | ||
962 | static int brcmf_fws_request_indicate(struct brcmf_fws_info *fws, u8 type, | ||
963 | u8 *data) | ||
964 | { | ||
965 | struct brcmf_fws_mac_descriptor *entry; | ||
966 | |||
967 | entry = &fws->desc.nodes[data[1] & 0x1F]; | ||
968 | if (!entry->occupied) { | ||
969 | if (type == BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT) | ||
970 | fws->stats.credit_request_failed++; | ||
971 | else | ||
972 | fws->stats.packet_request_failed++; | ||
973 | return -ESRCH; | ||
974 | } | ||
975 | |||
976 | if (type == BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT) | ||
977 | entry->requested_credit = data[0]; | ||
978 | else | ||
979 | entry->requested_packet = data[0]; | ||
980 | |||
981 | entry->ac_bitmap = data[2]; | ||
982 | return 0; | ||
983 | } | ||
984 | |||
962 | static void brcmf_fws_return_credits(struct brcmf_fws_info *fws, | 985 | static void brcmf_fws_return_credits(struct brcmf_fws_info *fws, |
963 | u8 fifo, u8 credits) | 986 | u8 fifo, u8 credits) |
964 | { | 987 | { |
@@ -1366,8 +1389,6 @@ int brcmf_fws_hdrpull(struct brcmf_pub *drvr, int ifidx, s16 signal_len, | |||
1366 | break; | 1389 | break; |
1367 | 1390 | ||
1368 | switch (type) { | 1391 | switch (type) { |
1369 | case BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT: | ||
1370 | case BRCMF_FWS_TYPE_MAC_REQUEST_PACKET: | ||
1371 | case BRCMF_FWS_TYPE_HOST_REORDER_RXPKTS: | 1392 | case BRCMF_FWS_TYPE_HOST_REORDER_RXPKTS: |
1372 | case BRCMF_FWS_TYPE_COMP_TXSTATUS: | 1393 | case BRCMF_FWS_TYPE_COMP_TXSTATUS: |
1373 | break; | 1394 | break; |
@@ -1383,6 +1404,10 @@ int brcmf_fws_hdrpull(struct brcmf_pub *drvr, int ifidx, s16 signal_len, | |||
1383 | case BRCMF_FWS_TYPE_INTERFACE_CLOSE: | 1404 | case BRCMF_FWS_TYPE_INTERFACE_CLOSE: |
1384 | brcmf_fws_interface_state_indicate(fws, type, data); | 1405 | brcmf_fws_interface_state_indicate(fws, type, data); |
1385 | break; | 1406 | break; |
1407 | case BRCMF_FWS_TYPE_MAC_REQUEST_CREDIT: | ||
1408 | case BRCMF_FWS_TYPE_MAC_REQUEST_PACKET: | ||
1409 | brcmf_fws_request_indicate(fws, type, data); | ||
1410 | break; | ||
1386 | case BRCMF_FWS_TYPE_TXSTATUS: | 1411 | case BRCMF_FWS_TYPE_TXSTATUS: |
1387 | brcmf_fws_txstatus_indicate(fws, data); | 1412 | brcmf_fws_txstatus_indicate(fws, data); |
1388 | break; | 1413 | break; |