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
52struct 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
62struct brcmf_proto;
63struct brcmf_fws_info;
64struct brcmf_mp_device;
65
66
67
68
69
70
71
72
73
74struct 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
95struct 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
142struct brcmf_cfg80211_vif;
143struct brcmf_fws_mac_descriptor;
144
145
146
147
148
149
150
151
152
153
154
155enum 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
179struct 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
198int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp);
199
200
201char *brcmf_ifname(struct brcmf_if *ifp);
202struct brcmf_if *brcmf_get_ifp(struct brcmf_pub *drvr, int ifidx);
203void brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable);
204int brcmf_net_attach(struct brcmf_if *ifp, bool locked);
205struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
206 bool is_p2pdev, const char *name, u8 *mac_addr);
207void brcmf_remove_interface(struct brcmf_if *ifp, bool locked);
208void brcmf_txflowblock_if(struct brcmf_if *ifp,
209 enum brcmf_netif_stop_reason reason, bool state);
210void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
211void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb, bool inirq);
212void brcmf_netif_mon_rx(struct brcmf_if *ifp, struct sk_buff *skb);
213void brcmf_net_detach(struct net_device *ndev, bool locked);
214int brcmf_net_mon_attach(struct brcmf_if *ifp);
215void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
216int __init brcmf_core_init(void);
217void __exit brcmf_core_exit(void);
218
219#endif
220