|
@@ -554,6 +554,19 @@ struct brcmf_if_event {
|
|
|
struct brcmf_cfg80211_vif;
|
|
|
struct brcmf_fws_mac_descriptor;
|
|
|
|
|
|
+/**
|
|
|
+ * enum brcmf_netif_stop_reason - reason for stopping netif queue.
|
|
|
+ *
|
|
|
+ * @BRCMF_NETIF_STOP_REASON_FWS_FC:
|
|
|
+ * netif stopped due to firmware signalling flow control.
|
|
|
+ * @BRCMF_NETIF_STOP_REASON_BLOCK_BUS:
|
|
|
+ * netif stopped due to bus blocking.
|
|
|
+ */
|
|
|
+enum brcmf_netif_stop_reason {
|
|
|
+ BRCMF_NETIF_STOP_REASON_FWS_FC = 1,
|
|
|
+ BRCMF_NETIF_STOP_REASON_BLOCK_BUS = 2
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* struct brcmf_if - interface control information.
|
|
|
*
|
|
@@ -567,6 +580,7 @@ struct brcmf_fws_mac_descriptor;
|
|
|
* @ifidx: interface index in device firmware.
|
|
|
* @bssidx: index of bss associated with this interface.
|
|
|
* @mac_addr: assigned mac address.
|
|
|
+ * @netif_stop: bitmap indicates reason why netif queues are stopped.
|
|
|
* @pend_8021x_cnt: tracks outstanding number of 802.1x frames.
|
|
|
* @pend_8021x_wait: used for signalling change in count.
|
|
|
*/
|
|
@@ -581,6 +595,7 @@ struct brcmf_if {
|
|
|
int ifidx;
|
|
|
s32 bssidx;
|
|
|
u8 mac_addr[ETH_ALEN];
|
|
|
+ u8 netif_stop;
|
|
|
atomic_t pend_8021x_cnt;
|
|
|
wait_queue_head_t pend_8021x_wait;
|
|
|
};
|
|
@@ -605,6 +620,8 @@ extern int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked);
|
|
|
extern struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bssidx,
|
|
|
s32 ifidx, char *name, u8 *mac_addr);
|
|
|
extern void brcmf_del_if(struct brcmf_pub *drvr, s32 bssidx);
|
|
|
+void brcmf_txflowblock_if(struct brcmf_if *ifp,
|
|
|
+ enum brcmf_netif_stop_reason reason, bool state);
|
|
|
extern u32 brcmf_get_chip_info(struct brcmf_if *ifp);
|
|
|
|
|
|
#endif /* _BRCMF_H_ */
|