1STRUCT IEEE80211_OPS(9) The basic mac80211 driver inte STRUCT IEEE80211_OPS(9)
2
3
4
6 struct_ieee80211_ops - callbacks from mac80211 to the driver
7
9 struct ieee80211_ops {
10 void (* tx) (struct ieee80211_hw *hw,struct ieee80211_tx_control *control,struct sk_buff *skb);
11 int (* start) (struct ieee80211_hw *hw);
12 void (* stop) (struct ieee80211_hw *hw);
13 #ifdef CONFIG_PM
14 int (* suspend) (struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan);
15 int (* resume) (struct ieee80211_hw *hw);
16 void (* set_wakeup) (struct ieee80211_hw *hw, bool enabled);
17 #endif
18 int (* add_interface) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
19 int (* change_interface) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,enum nl80211_iftype new_type, bool p2p);
20 void (* remove_interface) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
21 int (* config) (struct ieee80211_hw *hw, u32 changed);
22 void (* bss_info_changed) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_bss_conf *info,u32 changed);
23 int (* start_ap) (struct ieee80211_hw *hw, struct ieee80211_vif *vif);
24 void (* stop_ap) (struct ieee80211_hw *hw, struct ieee80211_vif *vif);
25 #if 0
26 u64 (* prepare_multicast) (struct ieee80211_hw *hw,int mc_count,struct dev_addr_list *mc_list);
27 #else
28 u64 (* prepare_multicast) (struct ieee80211_hw *hw,int mc_count,struct dev_addr_list *mc_list);
29 #endif
30 void (* configure_filter) (struct ieee80211_hw *hw,unsigned int changed_flags,unsigned int *total_flags,u64 multicast);
31 int (* set_tim) (struct ieee80211_hw *hw, struct ieee80211_sta *sta,bool set);
32 int (* set_key) (struct ieee80211_hw *hw, enum set_key_cmd cmd,struct ieee80211_vif *vif, struct ieee80211_sta *sta,struct ieee80211_key_conf *key);
33 void (* update_tkip_key) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_key_conf *conf,struct ieee80211_sta *sta,u32 iv32, u16 *phase1key);
34 void (* set_rekey_data) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct cfg80211_gtk_rekey_data *data);
35 void (* set_default_unicast_key) (struct ieee80211_hw *hw,struct ieee80211_vif *vif, int idx);
36 int (* hw_scan) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,struct ieee80211_scan_request *req);
37 void (* cancel_hw_scan) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
38 int (* sched_scan_start) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct cfg80211_sched_scan_request *req,struct ieee80211_scan_ies *ies);
39 int (* sched_scan_stop) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
40 void (* sw_scan_start) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,const u8 *mac_addr);
41 void (* sw_scan_complete) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
42 int (* get_stats) (struct ieee80211_hw *hw,struct ieee80211_low_level_stats *stats);
43 void (* get_key_seq) (struct ieee80211_hw *hw,struct ieee80211_key_conf *key,struct ieee80211_key_seq *seq);
44 int (* set_frag_threshold) (struct ieee80211_hw *hw, u32 value);
45 int (* set_rts_threshold) (struct ieee80211_hw *hw, u32 value);
46 int (* sta_add) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,struct ieee80211_sta *sta);
47 int (* sta_remove) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,struct ieee80211_sta *sta);
48 #ifdef CONFIG_MAC80211_DEBUGFS
49 void (* sta_add_debugfs) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta,struct dentry *dir);
50 void (* sta_remove_debugfs) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta,struct dentry *dir);
51 #endif
52 void (* sta_notify) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,enum sta_notify_cmd, struct ieee80211_sta *sta);
53 int (* sta_state) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,struct ieee80211_sta *sta,enum ieee80211_sta_state old_state,enum ieee80211_sta_state new_state);
54 void (* sta_pre_rcu_remove) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta);
55 void (* sta_rc_update) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta,u32 changed);
56 void (* sta_rate_tbl_update) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta);
57 void (* sta_statistics) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta,struct station_info *sinfo);
58 int (* conf_tx) (struct ieee80211_hw *hw,struct ieee80211_vif *vif, u16 ac,const struct ieee80211_tx_queue_params *params);
59 u64 (* get_tsf) (struct ieee80211_hw *hw, struct ieee80211_vif *vif);
60 void (* set_tsf) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,u64 tsf);
61 void (* reset_tsf) (struct ieee80211_hw *hw, struct ieee80211_vif *vif);
62 int (* tx_last_beacon) (struct ieee80211_hw *hw);
63 int (* ampdu_action) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,enum ieee80211_ampdu_mlme_action action,struct ieee80211_sta *sta, u16 tid, u16 *ssn,u8 buf_size);
64 int (* get_survey) (struct ieee80211_hw *hw, int idx,struct survey_info *survey);
65 void (* rfkill_poll) (struct ieee80211_hw *hw);
66 void (* set_coverage_class) (struct ieee80211_hw *hw, s16 coverage_class);
67 #ifdef CONFIG_NL80211_TESTMODE
68 int (* testmode_cmd) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,void *data, int len);
69 int (* testmode_dump) (struct ieee80211_hw *hw, struct sk_buff *skb,struct netlink_callback *cb,void *data, int len);
70 #endif
71 void (* flush) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,u32 queues, bool drop);
72 void (* channel_switch) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_channel_switch *ch_switch);
73 int (* set_antenna) (struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant);
74 int (* get_antenna) (struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant);
75 int (* remain_on_channel) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_channel *chan,int duration,enum ieee80211_roc_type type);
76 int (* cancel_remain_on_channel) (struct ieee80211_hw *hw);
77 int (* set_ringparam) (struct ieee80211_hw *hw, u32 tx, u32 rx);
78 void (* get_ringparam) (struct ieee80211_hw *hw,u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
79 bool (* tx_frames_pending) (struct ieee80211_hw *hw);
80 int (* set_bitrate_mask) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,const struct cfg80211_bitrate_mask *mask);
81 void (* event_callback) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,const struct ieee80211_event *event);
82 void (* allow_buffered_frames) (struct ieee80211_hw *hw,struct ieee80211_sta *sta,u16 tids, int num_frames,enum ieee80211_frame_release_type reason,bool more_data);
83 void (* release_buffered_frames) (struct ieee80211_hw *hw,struct ieee80211_sta *sta,u16 tids, int num_frames,enum ieee80211_frame_release_type reason,bool more_data);
84 int (* get_et_sset_count) (struct ieee80211_hw *hw,struct ieee80211_vif *vif, int sset);
85 void (* get_et_stats) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ethtool_stats *stats, u64 *data);
86 void (* get_et_strings) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,u32 sset, u8 *data);
87 void (* mgd_prepare_tx) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
88 void (* mgd_protect_tdls_discover) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
89 int (* add_chanctx) (struct ieee80211_hw *hw,struct ieee80211_chanctx_conf *ctx);
90 void (* remove_chanctx) (struct ieee80211_hw *hw,struct ieee80211_chanctx_conf *ctx);
91 void (* change_chanctx) (struct ieee80211_hw *hw,struct ieee80211_chanctx_conf *ctx,u32 changed);
92 int (* assign_vif_chanctx) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_chanctx_conf *ctx);
93 void (* unassign_vif_chanctx) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_chanctx_conf *ctx);
94 int (* switch_vif_chanctx) (struct ieee80211_hw *hw,struct ieee80211_vif_chanctx_switch *vifs,int n_vifs,enum ieee80211_chanctx_switch_mode mode);
95 void (* reconfig_complete) (struct ieee80211_hw *hw,enum ieee80211_reconfig_type reconfig_type);
96 #if IS_ENABLED(CONFIG_IPV6)
97 void (* ipv6_addr_change) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct inet6_dev *idev);
98 #endif
99 void (* channel_switch_beacon) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct cfg80211_chan_def *chandef);
100 int (* pre_channel_switch) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_channel_switch *ch_switch);
101 int (* post_channel_switch) (struct ieee80211_hw *hw,struct ieee80211_vif *vif);
102 int (* join_ibss) (struct ieee80211_hw *hw, struct ieee80211_vif *vif);
103 void (* leave_ibss) (struct ieee80211_hw *hw, struct ieee80211_vif *vif);
104 u32 (* get_expected_throughput) (struct ieee80211_sta *sta);
105 int (* get_txpower) (struct ieee80211_hw *hw, struct ieee80211_vif *vif,int *dbm);
106 int (* tdls_channel_switch) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta, u8 oper_class,struct cfg80211_chan_def *chandef,struct sk_buff *tmpl_skb, u32 ch_sw_tm_ie);
107 void (* tdls_cancel_channel_switch) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_sta *sta);
108 void (* tdls_recv_channel_switch) (struct ieee80211_hw *hw,struct ieee80211_vif *vif,struct ieee80211_tdls_ch_sw_params *params);
109 void (* wake_tx_queue) (struct ieee80211_hw *hw,struct ieee80211_txq *txq);
110 };
111
113 tx
114 Handler that 802.11 module calls for each transmitted frame. skb
115 contains the buffer starting from the IEEE 802.11 header. The
116 low-level driver should send the frame out based on configuration
117 in the TX control data. This handler should, preferably, never fail
118 and stop queues appropriately. Must be atomic.
119
120 start
121 Called before the first netdevice attached to the hardware is
122 enabled. This should turn on the hardware and must turn on frame
123 reception (for possibly enabled monitor interfaces.) Returns
124 negative error codes, these may be seen in userspace, or zero. When
125 the device is started it should not have a MAC address to avoid
126 acknowledging frames before a non-monitor device is added. Must be
127 implemented and can sleep.
128
129 stop
130 Called after last netdevice attached to the hardware is disabled.
131 This should turn off the hardware (at least it must turn off frame
132 reception.) May be called right after add_interface if that rejects
133 an interface. If you added any work onto the mac80211 workqueue you
134 should ensure to cancel it on this callback. Must be implemented
135 and can sleep.
136
137 suspend
138 Suspend the device; mac80211 itself will quiesce before and stop
139 transmitting and doing any other configuration, and then ask the
140 device to suspend. This is only invoked when WoWLAN is configured,
141 otherwise the device is deconfigured completely and reconfigured at
142 resume time. The driver may also impose special conditions under
143 which it wants to use the “normal” suspend (deconfigure), say if it
144 only supports WoWLAN when the device is associated. In this case,
145 it must return 1 from this function.
146
147 resume
148 If WoWLAN was configured, this indicates that mac80211 is now
149 resuming its operation, after this the device must be fully
150 functional again. If this returns an error, the only way out is to
151 also unregister the device. If it returns 1, then mac80211 will
152 also go through the regular complete restart on resume.
153
154 set_wakeup
155 Enable or disable wakeup when WoWLAN configuration is modified. The
156 reason is that device_set_wakeup_enable is supposed to be called
157 when the configuration changes, not only in suspend.
158
159 add_interface
160 Called when a netdevice attached to the hardware is enabled.
161 Because it is not called for monitor mode devices, start and stop
162 must be implemented. The driver should perform any initialization
163 it needs before the device can be enabled. The initial
164 configuration for the interface is given in the conf parameter. The
165 callback may refuse to add an interface by returning a negative
166 error code (which will be seen in userspace.) Must be implemented
167 and can sleep.
168
169 change_interface
170 Called when a netdevice changes type. This callback is optional,
171 but only if it is supported can interface types be switched while
172 the interface is UP. The callback may sleep. Note that while an
173 interface is being switched, it will not be found by the interface
174 iteration callbacks.
175
176 remove_interface
177 Notifies a driver that an interface is going down. The stop
178 callback is called after this if it is the last interface and no
179 monitor interfaces are present. When all interfaces are removed,
180 the MAC address in the hardware must be cleared so the device no
181 longer acknowledges packets, the mac_addr member of the conf
182 structure is, however, set to the MAC address of the device going
183 away. Hence, this callback must be implemented. It can sleep.
184
185 config
186 Handler for configuration requests. IEEE 802.11 code calls this
187 function to change hardware configuration, e.g., channel. This
188 function should never fail but returns a negative error code if it
189 does. The callback can sleep.
190
191 bss_info_changed
192 Handler for configuration requests related to BSS parameters that
193 may vary during BSS´s lifespan, and may affect low level driver
194 (e.g. assoc/disassoc status, erp parameters). This function should
195 not be used if no BSS has been set, unless for association
196 indication. The changed parameter indicates which of the bss
197 parameters has changed when a call is made. The callback can sleep.
198
199 start_ap
200 Start operation on the AP interface, this is called after all the
201 information in bss_conf is set and beacon can be retrieved. A
202 channel context is bound before this is called. Note that if the
203 driver uses software scan or ROC, this (and stop_ap) isn´t called
204 when the AP is just “paused” for scanning/ROC, which is indicated
205 by the beacon being disabled/enabled via bss_info_changed.
206
207 stop_ap
208 Stop operation on the AP interface.
209
210 prepare_multicast
211 Prepare for multicast filter configuration. This callback is
212 optional, and its return value is passed to configure_filter. This
213 callback must be atomic.
214
215 prepare_multicast
216 Prepare for multicast filter configuration. This callback is
217 optional, and its return value is passed to configure_filter. This
218 callback must be atomic.
219
220 configure_filter
221 Configure the device´s RX filter. See the section “Frame filtering”
222 for more information. This callback must be implemented and can
223 sleep.
224
225 set_tim
226 Set TIM bit. mac80211 calls this function when a TIM bit must be
227 set or cleared for a given STA. Must be atomic.
228
229 set_key
230 See the section “Hardware crypto acceleration” This callback is
231 only called between add_interface and remove_interface calls, i.e.
232 while the given virtual interface is enabled. Returns a negative
233 error code if the key can´t be added. The callback can sleep.
234
235 update_tkip_key
236 See the section “Hardware crypto acceleration” This callback will
237 be called in the context of Rx. Called for drivers which set
238 IEEE80211_KEY_FLAG_TKIP_REQ_RX_P1_KEY. The callback must be atomic.
239
240 set_rekey_data
241 If the device supports GTK rekeying, for example while the host is
242 suspended, it can assign this callback to retrieve the data
243 necessary to do GTK rekeying, this is the KEK, KCK and replay
244 counter. After rekeying was done it should (for example during
245 resume) notify userspace of the new replay counter using
246 ieee80211_gtk_rekey_notify.
247
248 set_default_unicast_key
249 Set the default (unicast) key index, useful for WEP when the device
250 sends data packets autonomously, e.g. for ARP offloading. The index
251 can be 0-3, or -1 for unsetting it.
252
253 hw_scan
254 Ask the hardware to service the scan request, no need to start the
255 scan state machine in stack. The scan must honour the channel
256 configuration done by the regulatory agent in the wiphy´s
257 registered bands. The hardware (or the driver) needs to make sure
258 that power save is disabled. The req ie/ie_len members are
259 rewritten by mac80211 to contain the entire IEs after the SSID, so
260 that drivers need not look at these at all but just send them after
261 the SSID -- mac80211 includes the (extended) supported rates and HT
262 information (where applicable). When the scan finishes,
263 ieee80211_scan_completed must be called; note that it also must be
264 called when the scan cannot finish due to any error unless this
265 callback returned a negative error code. The callback can sleep.
266
267 cancel_hw_scan
268 Ask the low-level tp cancel the active hw scan. The driver should
269 ask the hardware to cancel the scan (if possible), but the scan
270 will be completed only after the driver will call
271 ieee80211_scan_completed. This callback is needed for wowlan, to
272 prevent enqueueing a new scan_work after the low-level driver was
273 already suspended. The callback can sleep.
274
275 sched_scan_start
276 Ask the hardware to start scanning repeatedly at specific
277 intervals. The driver must call the ieee80211_sched_scan_results
278 function whenever it finds results. This process will continue
279 until sched_scan_stop is called.
280
281 sched_scan_stop
282 Tell the hardware to stop an ongoing scheduled scan. In this case,
283 ieee80211_sched_scan_stopped must not be called.
284
285 sw_scan_start
286 Notifier function that is called just before a software scan is
287 started. Can be NULL, if the driver doesn´t need this notification.
288 The mac_addr parameter allows supporting
289 NL80211_SCAN_FLAG_RANDOM_ADDR, the driver may set the
290 NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR flag if it can use this
291 parameter. The callback can sleep.
292
293 sw_scan_complete
294 Notifier function that is called just after a software scan
295 finished. Can be NULL, if the driver doesn´t need this
296 notification. The callback can sleep.
297
298 get_stats
299 Return low-level statistics. Returns zero if statistics are
300 available. The callback can sleep.
301
302 get_key_seq
303 If your device implements encryption in hardware and does IV/PN
304 assignment then this callback should be provided to read the IV/PN
305 for the given key from hardware. The callback must be atomic.
306
307 set_frag_threshold
308 Configuration of fragmentation threshold. Assign this if the device
309 does fragmentation by itself; if this callback is implemented then
310 the stack will not do fragmentation. The callback can sleep.
311
312 set_rts_threshold
313 Configuration of RTS threshold (if device needs it) The callback
314 can sleep.
315
316 sta_add
317 Notifies low level driver about addition of an associated station,
318 AP, IBSS/WDS/mesh peer etc. This callback can sleep.
319
320 sta_remove
321 Notifies low level driver about removal of an associated station,
322 AP, IBSS/WDS/mesh peer etc. Note that after the callback returns it
323 isn´t safe to use the pointer, not even RCU protected; no RCU grace
324 period is guaranteed between returning here and freeing the
325 station. See sta_pre_rcu_remove if needed. This callback can sleep.
326
327 sta_add_debugfs
328 Drivers can use this callback to add debugfs files when a station
329 is added to mac80211´s station list. This callback and
330 sta_remove_debugfs should be within a CONFIG_MAC80211_DEBUGFS
331 conditional. This callback can sleep.
332
333 sta_remove_debugfs
334 Remove the debugfs files which were added using sta_add_debugfs.
335 This callback can sleep.
336
337 sta_notify
338 Notifies low level driver about power state transition of an
339 associated station, AP, IBSS/WDS/mesh peer etc. For a VIF operating
340 in AP mode, this callback will not be called when the flag
341 IEEE80211_HW_AP_LINK_PS is set. Must be atomic.
342
343 sta_state
344 Notifies low level driver about state transition of a station
345 (which can be the AP, a client, IBSS/WDS/mesh peer etc.) This
346 callback is mutually exclusive with sta_add/sta_remove. It must not
347 fail for down transitions but may fail for transitions up the list
348 of states. Also note that after the callback returns it isn´t safe
349 to use the pointer, not even RCU protected - no RCU grace period is
350 guaranteed between returning here and freeing the station. See
351 sta_pre_rcu_remove if needed. The callback can sleep.
352
353 sta_pre_rcu_remove
354 Notify driver about station removal before RCU synchronisation.
355 This is useful if a driver needs to have station pointers protected
356 using RCU, it can then use this call to clear the pointers instead
357 of waiting for an RCU grace period to elapse in sta_state. The
358 callback can sleep.
359
360 sta_rc_update
361 Notifies the driver of changes to the bitrates that can be used to
362 transmit to the station. The changes are advertised with bits from
363 enum ieee80211_rate_control_changed and the values are reflected in
364 the station data. This callback should only be used when the driver
365 uses hardware rate control (IEEE80211_HW_HAS_RATE_CONTROL) since
366 otherwise the rate control algorithm is notified directly. Must be
367 atomic.
368
369 sta_rate_tbl_update
370 Notifies the driver that the rate table changed. This is only used
371 if the configured rate control algorithm actually uses the new rate
372 table API, and is therefore optional. Must be atomic.
373
374 sta_statistics
375 Get statistics for this station. For example with beacon filtering,
376 the statistics kept by mac80211 might not be accurate, so let the
377 driver pre-fill the statistics. The driver can fill most of the
378 values (indicating which by setting the filled bitmap), but not all
379 of them make sense - see the source for which ones are possible.
380 Statistics that the driver doesn´t fill will be filled by mac80211.
381 The callback can sleep.
382
383 conf_tx
384 Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
385 bursting) for a hardware TX queue. Returns a negative error code on
386 failure. The callback can sleep.
387
388 get_tsf
389 Get the current TSF timer value from firmware/hardware. Currently,
390 this is only used for IBSS mode BSSID merging and debugging. Is not
391 a required function. The callback can sleep.
392
393 set_tsf
394 Set the TSF timer to the specified value in the firmware/hardware.
395 Currently, this is only used for IBSS mode debugging. Is not a
396 required function. The callback can sleep.
397
398 reset_tsf
399 Reset the TSF timer and allow firmware/hardware to synchronize with
400 other STAs in the IBSS. This is only used in IBSS mode. This
401 function is optional if the firmware/hardware takes full care of
402 TSF synchronization. The callback can sleep.
403
404 tx_last_beacon
405 Determine whether the last IBSS beacon was sent by us. This is
406 needed only for IBSS mode and the result of this function is used
407 to determine whether to reply to Probe Requests. Returns non-zero
408 if this device sent the last beacon. The callback can sleep.
409
410 ampdu_action
411 Perform a certain A-MPDU action The RA/TID combination determines
412 the destination and TID we want the ampdu action to be performed
413 for. The action is defined through ieee80211_ampdu_mlme_action.
414 Starting sequence number (ssn) is the first frame we expect to
415 perform the action on. Notice that TX/RX_STOP can pass NULL for
416 this parameter. The buf_size parameter is only valid when the
417 action is set to IEEE80211_AMPDU_TX_OPERATIONAL and indicates the
418 peer´s reorder buffer size (number of subframes) for this session
419 -- the driver may neither send aggregates containing more subframes
420 than this nor send aggregates in a way that lost frames would
421 exceed the buffer size. If just limiting the aggregate size, this
422 would be
423
424 get_survey
425 Return per-channel survey information
426
427 rfkill_poll
428 Poll rfkill hardware state. If you need this, you also need to set
429 wiphy->rfkill_poll to true before registration, and need to call
430 wiphy_rfkill_set_hw_state in the callback. The callback can sleep.
431
432 set_coverage_class
433 Set slot time for given coverage class as specified in IEEE
434 802.11-2007 section 17.3.8.6 and modify ACK timeout accordingly;
435 coverage class equals to -1 to enable ACK timeout estimation
436 algorithm (dynack). To disable dynack set valid value for coverage
437 class. This callback is not required and may sleep.
438
439 testmode_cmd
440 Implement a cfg80211 test mode command. The passed vif may be NULL.
441 The callback can sleep.
442
443 testmode_dump
444 Implement a cfg80211 test mode dump. The callback can sleep.
445
446 flush
447 Flush all pending frames from the hardware queue, making sure that
448 the hardware queues are empty. The queues parameter is a bitmap of
449 queues to flush, which is useful if different virtual interfaces
450 use different hardware queues; it may also indicate all queues. If
451 the parameter drop is set to true, pending frames may be dropped.
452 Note that vif can be NULL. The callback can sleep.
453
454 channel_switch
455 Drivers that need (or want) to offload the channel switch operation
456 for CSAs received from the AP may implement this callback. They
457 must then call ieee80211_chswitch_done to indicate completion of
458 the channel switch.
459
460 set_antenna
461 Set antenna configuration (tx_ant, rx_ant) on the device.
462 Parameters are bitmaps of allowed antennas to use for TX/RX.
463 Drivers may reject TX/RX mask combinations they cannot support by
464 returning -EINVAL (also see nl80211.h
465 NL80211_ATTR_WIPHY_ANTENNA_TX).
466
467 get_antenna
468 Get current antenna configuration from device (tx_ant, rx_ant).
469
470 remain_on_channel
471 Starts an off-channel period on the given channel, must call back
472 to ieee80211_ready_on_channel when on that channel. Note that
473 normal channel traffic is not stopped as this is intended for hw
474 offload. Frames to transmit on the off-channel channel are
475 transmitted normally except for the IEEE80211_TX_CTL_TX_OFFCHAN
476 flag. When the duration (which will always be non-zero) expires,
477 the driver must call ieee80211_remain_on_channel_expired. Note that
478 this callback may be called while the device is in IDLE and must be
479 accepted in this case. This callback may sleep.
480
481 cancel_remain_on_channel
482 Requests that an ongoing off-channel period is aborted before it
483 expires. This callback may sleep.
484
485 set_ringparam
486 Set tx and rx ring sizes.
487
488 get_ringparam
489 Get tx and rx ring current and maximum sizes.
490
491 tx_frames_pending
492 Check if there is any pending frame in the hardware queues before
493 entering power save.
494
495 set_bitrate_mask
496 Set a mask of rates to be used for rate control selection when
497 transmitting a frame. Currently only legacy rates are handled. The
498 callback can sleep.
499
500 event_callback
501 Notify driver about any event in mac80211. See enum
502 ieee80211_event_type for the different types. The callback must be
503 atomic.
504
505 allow_buffered_frames
506 Prepare device to allow the given number of frames to go out to the
507 given station. The frames will be sent by mac80211 via the usual TX
508 path after this call. The TX information for frames released will
509 also have the IEEE80211_TX_CTL_NO_PS_BUFFER flag set and the last
510 one will also have IEEE80211_TX_STATUS_EOSP set. In case frames
511 from multiple TIDs are released and the driver might reorder them
512 between the TIDs, it must set the IEEE80211_TX_STATUS_EOSP flag on
513 the last frame and clear it on all others and also handle the EOSP
514 bit in the QoS header correctly. Alternatively, it can also call
515 the ieee80211_sta_eosp function. The tids parameter is a bitmap and
516 tells the driver which TIDs the frames will be on; it will at most
517 have two bits set. This callback must be atomic.
518
519 release_buffered_frames
520 Release buffered frames according to the given parameters. In the
521 case where the driver buffers some frames for sleeping stations
522 mac80211 will use this callback to tell the driver to release some
523 frames, either for PS-poll or uAPSD. Note that if the more_data
524 parameter is false the driver must check if there are more frames
525 on the given TIDs, and if there are more than the frames being
526 released then it must still set the more-data bit in the frame. If
527 the more_data parameter is true, then of course the more-data bit
528 must always be set. The tids parameter tells the driver which TIDs
529 to release frames from, for PS-poll it will always have only a
530 single bit set. In the case this is used for a PS-poll initiated
531 release, the num_frames parameter will always be 1 so code can be
532 shared. In this case the driver must also set
533 IEEE80211_TX_STATUS_EOSP flag on the TX status (and must report TX
534 status) so that the PS-poll period is properly ended. This is used
535 to avoid sending multiple responses for a retried PS-poll frame. In
536 the case this is used for uAPSD, the num_frames parameter may be
537 bigger than one, but the driver may send fewer frames (it must send
538 at least one, however). In this case it is also responsible for
539 setting the EOSP flag in the QoS header of the frames. Also, when
540 the service period ends, the driver must set
541 IEEE80211_TX_STATUS_EOSP on the last frame in the SP.
542 Alternatively, it may call the function ieee80211_sta_eosp to
543 inform mac80211 of the end of the SP. This callback must be atomic.
544
545 get_et_sset_count
546 Ethtool API to get string-set count.
547
548 get_et_stats
549 Ethtool API to get a set of u64 stats.
550
551 get_et_strings
552 Ethtool API to get a set of strings to describe stats and perhaps
553 other supported types of ethtool data-sets.
554
555 mgd_prepare_tx
556 Prepare for transmitting a management frame for association before
557 associated. In multi-channel scenarios, a virtual interface is
558 bound to a channel before it is associated, but as it isn´t
559 associated yet it need not necessarily be given airtime, in
560 particular since any transmission to a P2P GO needs to be
561 synchronized against the GO´s powersave state. mac80211 will call
562 this function before transmitting a management frame prior to
563 having successfully associated to allow the driver to give it
564 channel time for the transmission, to get a response and to be able
565 to synchronize with the GO. The callback will be called before each
566 transmission and upon return mac80211 will transmit the frame right
567 away. The callback is optional and can (should!) sleep.
568
569 mgd_protect_tdls_discover
570 Protect a TDLS discovery session. After sending a TDLS
571 discovery-request, we expect a reply to arrive on the AP´s channel.
572 We must stay on the channel (no PSM, scan, etc.), since a TDLS
573 setup-response is a direct packet not buffered by the AP. mac80211
574 will call this function just before the transmission of a TDLS
575 discovery-request. The recommended period of protection is at least
576 2 * (DTIM period). The callback is optional and can sleep.
577
578 add_chanctx
579 Notifies device driver about new channel context creation.
580
581 remove_chanctx
582 Notifies device driver about channel context destruction.
583
584 change_chanctx
585 Notifies device driver about channel context changes that may
586 happen when combining different virtual interfaces on the same
587 channel context with different settings
588
589 assign_vif_chanctx
590 Notifies device driver about channel context being bound to vif.
591 Possible use is for hw queue remapping.
592
593 unassign_vif_chanctx
594 Notifies device driver about channel context being unbound from
595 vif.
596
597 switch_vif_chanctx
598 switch a number of vifs from one chanctx to another, as specified
599 in the list of ieee80211_vif_chanctx_switch passed to the driver,
600 according to the mode defined in ieee80211_chanctx_switch_mode.
601
602 reconfig_complete
603 Called after a call to ieee80211_restart_hw and during resume, when
604 the reconfiguration has completed. This can help the driver
605 implement the reconfiguration step (and indicate mac80211 is ready
606 to receive frames). This callback may sleep.
607
608 ipv6_addr_change
609 IPv6 address assignment on the given interface changed. Currently,
610 this is only called for managed or P2P client interfaces. This
611 callback is optional; it must not sleep.
612
613 channel_switch_beacon
614 Starts a channel switch to a new channel. Beacons are modified to
615 include CSA or ECSA IEs before calling this function. The
616 corresponding count fields in these IEs must be decremented, and
617 when they reach 1 the driver must call ieee80211_csa_finish.
618 Drivers which use ieee80211_beacon_get get the csa counter
619 decremented by mac80211, but must check if it is 1 using
620 ieee80211_csa_is_complete after the beacon has been transmitted and
621 then call ieee80211_csa_finish. If the CSA count starts as zero or
622 1, this function will not be called, since there won´t be any time
623 to beacon before the switch anyway.
624
625 pre_channel_switch
626 This is an optional callback that is called before a channel switch
627 procedure is started (ie. when a STA gets a CSA or an userspace
628 initiated channel-switch), allowing the driver to prepare for the
629 channel switch.
630
631 post_channel_switch
632 This is an optional callback that is called after a channel switch
633 procedure is completed, allowing the driver to go back to a normal
634 configuration.
635
636 join_ibss
637 Join an IBSS (on an IBSS interface); this is called after all
638 information in bss_conf is set up and the beacon can be retrieved.
639 A channel context is bound before this is called.
640
641 leave_ibss
642 Leave the IBSS again.
643
644 get_expected_throughput
645 extract the expected throughput towards the specified station. The
646 returned value is expressed in Kbps. It returns 0 if the RC
647 algorithm does not have proper data to provide.
648
649 get_txpower
650 get current maximum tx power (in dBm) based on configuration and
651 hardware limits.
652
653 tdls_channel_switch
654 Start channel-switching with a TDLS peer. The driver is responsible
655 for continually initiating channel-switching operations and
656 returning to the base channel for communication with the AP. The
657 driver receives a channel-switch request template and the location
658 of the switch-timing IE within the template as part of the
659 invocation. The template is valid only within the call, and the
660 driver can optionally copy the skb for further re-use.
661
662 tdls_cancel_channel_switch
663 Stop channel-switching with a TDLS peer. Both peers must be on the
664 base channel when the call completes.
665
666 tdls_recv_channel_switch
667 a TDLS channel-switch related frame (request or response) has been
668 received from a remote peer. The driver gets parameters parsed from
669 the incoming frame and may use them to continue an ongoing
670 channel-switch operation. In addition, a channel-switch response
671 template is provided, together with the location of the
672 switch-timing IE within the template. The skb can only be used
673 within the function call.
674
675 wake_tx_queue
676 Called when new packets have been added to the queue.
677
679 This structure contains various callbacks that the driver may handle
680 or, in some cases, must handle, for example to configure the hardware
681 to a new channel or to transmit a frame.
682
684 - TX: 1.....7 - RX: 2....7 (lost frame #1) - TX: 8..1... which is
685 invalid since #1 was now re-transmitted well past the buffer size of 8.
686 Correct ways to retransmit #1 would be: - TX: 1 or 18 or 81 Even “189”
687 would be wrong since 1 could be lost again.
688
689 Returns a negative error code on failure. The callback can sleep.
690
692 Johannes Berg <johannes@sipsolutions.net>
693 Author.
694
696Kernel Hackers Manual 2.6. June 2019 STRUCT IEEE80211_OPS(9)