aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c26
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 */
138struct 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 */
138struct msgbuf_ring_status { 146struct 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
145struct msgbuf_rx_event { 153struct 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
1205static 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
1197static void brcmf_msgbuf_process_ring_status(struct brcmf_msgbuf *msgbuf, 1217static 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);