diff options
Diffstat (limited to 'drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c')
| -rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c index aef2d4092872..d3780eae7f19 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | |||
| @@ -134,12 +134,20 @@ struct msgbuf_completion_hdr { | |||
| 134 | __le16 flow_ring_id; | 134 | __le16 flow_ring_id; |
| 135 | }; | 135 | }; |
| 136 | 136 | ||
| 137 | /* Data struct for the MSGBUF_TYPE_GEN_STATUS */ | ||
| 138 | struct msgbuf_gen_status { | ||
| 139 | struct msgbuf_common_hdr msg; | ||
| 140 | struct msgbuf_completion_hdr compl_hdr; | ||
| 141 | __le16 write_idx; | ||
| 142 | __le32 rsvd0[3]; | ||
| 143 | }; | ||
| 144 | |||
| 137 | /* Data struct for the MSGBUF_TYPE_RING_STATUS */ | 145 | /* Data struct for the MSGBUF_TYPE_RING_STATUS */ |
| 138 | struct msgbuf_ring_status { | 146 | struct msgbuf_ring_status { |
| 139 | struct msgbuf_common_hdr msg; | 147 | struct msgbuf_common_hdr msg; |
| 140 | struct msgbuf_completion_hdr compl_hdr; | 148 | struct msgbuf_completion_hdr compl_hdr; |
| 141 | __le16 write_idx; | 149 | __le16 write_idx; |
| 142 | __le32 rsvd0[5]; | 150 | __le16 rsvd0[5]; |
| 143 | }; | 151 | }; |
| 144 | 152 | ||
| 145 | struct msgbuf_rx_event { | 153 | struct msgbuf_rx_event { |
| @@ -1194,6 +1202,18 @@ brcmf_msgbuf_process_rx_complete(struct brcmf_msgbuf *msgbuf, void *buf) | |||
| 1194 | brcmf_netif_rx(ifp, skb); | 1202 | brcmf_netif_rx(ifp, skb); |
| 1195 | } | 1203 | } |
| 1196 | 1204 | ||
| 1205 | static void brcmf_msgbuf_process_gen_status(struct brcmf_msgbuf *msgbuf, | ||
| 1206 | void *buf) | ||
| 1207 | { | ||
| 1208 | struct msgbuf_gen_status *gen_status = buf; | ||
| 1209 | struct brcmf_pub *drvr = msgbuf->drvr; | ||
| 1210 | int err; | ||
| 1211 | |||
| 1212 | err = le16_to_cpu(gen_status->compl_hdr.status); | ||
| 1213 | if (err) | ||
| 1214 | bphy_err(drvr, "Firmware reported general error: %d\n", err); | ||
| 1215 | } | ||
| 1216 | |||
| 1197 | static void brcmf_msgbuf_process_ring_status(struct brcmf_msgbuf *msgbuf, | 1217 | static void brcmf_msgbuf_process_ring_status(struct brcmf_msgbuf *msgbuf, |
| 1198 | void *buf) | 1218 | void *buf) |
| 1199 | { | 1219 | { |
| @@ -1273,6 +1293,10 @@ static void brcmf_msgbuf_process_msgtype(struct brcmf_msgbuf *msgbuf, void *buf) | |||
| 1273 | 1293 | ||
| 1274 | msg = (struct msgbuf_common_hdr *)buf; | 1294 | msg = (struct msgbuf_common_hdr *)buf; |
| 1275 | switch (msg->msgtype) { | 1295 | switch (msg->msgtype) { |
| 1296 | case MSGBUF_TYPE_GEN_STATUS: | ||
| 1297 | brcmf_dbg(MSGBUF, "MSGBUF_TYPE_GEN_STATUS\n"); | ||
| 1298 | brcmf_msgbuf_process_gen_status(msgbuf, buf); | ||
| 1299 | break; | ||
| 1276 | case MSGBUF_TYPE_RING_STATUS: | 1300 | case MSGBUF_TYPE_RING_STATUS: |
| 1277 | brcmf_dbg(MSGBUF, "MSGBUF_TYPE_RING_STATUS\n"); | 1301 | brcmf_dbg(MSGBUF, "MSGBUF_TYPE_RING_STATUS\n"); |
| 1278 | brcmf_msgbuf_process_ring_status(msgbuf, buf); | 1302 | brcmf_msgbuf_process_ring_status(msgbuf, buf); |
