1
2
3
4
5
6
7
8
9
10 #ifndef BRCMFMAC_CORE_H
11 #define BRCMFMAC_CORE_H
12
13 #include <net/cfg80211.h>
14 #include "fweh.h"
15
16 #define TOE_TX_CSUM_OL 0x00000001
17 #define TOE_RX_CSUM_OL 0x00000002
18
19
20 #define BRCMF_MAX_IFS 16
21
22
23
24 #define BRCMF_DCMD_SMLEN 256
25 #define BRCMF_DCMD_MEDLEN 1536
26 #define BRCMF_DCMD_MAXLEN 8192
27
28
29
30
31 #define BRCMF_TX_IOCTL_MAX_MSG_SIZE (ETH_FRAME_LEN+ETH_FCS_LEN)
32
33 #define BRCMF_AMPDU_RX_REORDER_MAXFLOWS 256
34
35
36
37
38 #define BRCMF_DRIVER_FIRMWARE_VERSION_LEN 32
39
40 #define NDOL_MAX_ENTRIES 8
41
42
43
44
45
46
47
48
49
50
51
52 struct brcmf_ampdu_rx_reorder {
53 struct sk_buff **pktslots;
54 u8 flow_id;
55 u8 cur_idx;
56 u8 exp_idx;
57 u8 max_idx;
58 u8 pend_pkts;
59 };
60
61
62 struct brcmf_proto;
63 struct brcmf_fws_info;
64 struct brcmf_mp_device;
65
66
67
68
69
70
71
72
73
74 struct brcmf_rev_info {
75 int result;
76 u32 vendorid;
77 u32 deviceid;
78 u32 radiorev;
79 u32 corerev;
80 u32 boardid;
81 u32 boardvendor;
82 u32 boardrev;
83 u32 driverrev;
84 u32 ucoderev;
85 u32 bus;
86 char chipname[12];
87 u32 phytype;
88 u32 phyrev;
89 u32 anarev;
90 u32 chippkg;
91 u32 nvramrev;
92 };
93
94
95 struct brcmf_pub {
96
97 struct brcmf_bus *bus_if;
98 struct brcmf_proto *proto;
99 struct wiphy *wiphy;
100 struct cfg80211_ops *ops;
101 struct brcmf_cfg80211_info *config;
102
103
104 uint hdrlen;
105
106
107 char fwver[BRCMF_DRIVER_FIRMWARE_VERSION_LEN];
108 u8 mac[ETH_ALEN];
109
110 struct mac_address addresses[BRCMF_MAX_IFS];
111
112 struct brcmf_if *iflist[BRCMF_MAX_IFS];
113 s32 if2bss[BRCMF_MAX_IFS];
114 struct brcmf_if *mon_if;
115
116 struct mutex proto_block;
117 unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
118
119 struct brcmf_fweh_info fweh;
120
121 struct brcmf_ampdu_rx_reorder
122 *reorder_flows[BRCMF_AMPDU_RX_REORDER_MAXFLOWS];
123
124 u32 feat_flags;
125 u32 chip_quirks;
126
127 struct brcmf_rev_info revinfo;
128 #ifdef DEBUG
129 struct dentry *dbgfs_dir;
130 #endif
131
132 struct notifier_block inetaddr_notifier;
133 struct notifier_block inet6addr_notifier;
134 struct brcmf_mp_device *settings;
135
136 struct work_struct bus_reset;
137
138 u8 clmver[BRCMF_DCMD_SMLEN];
139 };
140
141
142 struct brcmf_cfg80211_vif;
143 struct brcmf_fws_mac_descriptor;
144
145
146
147
148
149
150
151
152
153
154
155 enum brcmf_netif_stop_reason {
156 BRCMF_NETIF_STOP_REASON_FWS_FC = BIT(0),
157 BRCMF_NETIF_STOP_REASON_FLOW = BIT(1),
158 BRCMF_NETIF_STOP_REASON_DISCONNECTED = BIT(2)
159 };
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179 struct brcmf_if {
180 struct brcmf_pub *drvr;
181 struct brcmf_cfg80211_vif *vif;
182 struct net_device *ndev;
183 struct work_struct multicast_work;
184 struct work_struct ndoffload_work;
185 struct brcmf_fws_mac_descriptor *fws_desc;
186 int ifidx;
187 s32 bsscfgidx;
188 u8 mac_addr[ETH_ALEN];
189 u8 netif_stop;
190 spinlock_t netif_stop_lock;
191 atomic_t pend_8021x_cnt;
192 wait_queue_head_t pend_8021x_wait;
193 struct in6_addr ipv6_addr_tbl[NDOL_MAX_ENTRIES];
194 u8 ipv6addr_idx;
195 bool fwil_fwerr;
196 };
197
198 int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp);
199
200
201 char *brcmf_ifname(struct brcmf_if *ifp);
202 struct brcmf_if *brcmf_get_ifp(struct brcmf_pub *drvr, int ifidx);
203 void brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable);
204 int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked);
205 struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
206 bool is_p2pdev, const char *name, u8 *mac_addr);
207 void brcmf_remove_interface(struct brcmf_if *ifp, bool rtnl_locked);
208 void brcmf_txflowblock_if(struct brcmf_if *ifp,
209 enum brcmf_netif_stop_reason reason, bool state);
210 void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
211 void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
212 void brcmf_netif_mon_rx(struct brcmf_if *ifp, struct sk_buff *skb);
213 void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
214 int __init brcmf_core_init(void);
215 void __exit brcmf_core_exit(void);
216
217 #endif