^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) mac80211 subsystem (basics)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) You should read and understand the information contained within this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) part of the book while implementing a mac80211 driver. In some chapters,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) advanced usage is noted, those may be skipped if this isn't needed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) This part of the book only covers station and monitor mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) functionality, additional information required to implement the other
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) modes is covered in the second part of the book.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) Basic hardware handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) =======================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) TBD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) This chapter shall contain information on getting a hw struct allocated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) and registered with mac80211.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) Since it is required to allocate rates/modes before registering a hw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) struct, this chapter shall also contain information on setting up the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) rate/mode structs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) Additionally, some discussion about the callbacks and the general
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) programming model should be in here, including the definition of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) ieee80211_ops which will be referred to a lot.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) Finally, a discussion of hardware capabilities should be done with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) references to other parts of the book.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) :functions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) ieee80211_hw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) ieee80211_hw_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) SET_IEEE80211_DEV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) SET_IEEE80211_PERM_ADDR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) ieee80211_ops
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ieee80211_alloc_hw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) ieee80211_register_hw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) ieee80211_unregister_hw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ieee80211_free_hw
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) PHY configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) TBD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) This chapter should describe PHY handling including start/stop callbacks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) and the various structures used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) :functions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) ieee80211_conf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) ieee80211_conf_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) Virtual interfaces
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) ==================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) TBD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) This chapter should describe virtual interface basics that are relevant
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) to the driver (VLANs, MGMT etc are not.) It should explain the use of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) the add_iface/remove_iface callbacks as well as the interface
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) configuration callbacks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) Things related to AP mode should be discussed there.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) Things related to supporting multiple interfaces should be in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) appropriate chapter, a BIG FAT note should be here about this though and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) the recommendation to allow only a single interface in STA mode at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) first!
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) :functions: ieee80211_vif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) Receive and transmit processing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) ===============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) what should be here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) -------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) TBD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) This should describe the receive and transmit paths in mac80211/the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) drivers as well as transmit status handling.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) Frame format
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) ------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) :doc: Frame format
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) Packet alignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) ----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) .. kernel-doc:: net/mac80211/rx.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) :doc: Packet alignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) Calling into mac80211 from interrupts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) -------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) :doc: Calling mac80211 from interrupts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) functions/definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) ---------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) :functions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) ieee80211_rx_status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) mac80211_rx_encoding_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) mac80211_rx_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) mac80211_tx_info_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) mac80211_tx_control_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) mac80211_rate_control_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) ieee80211_tx_rate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) ieee80211_tx_info
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) ieee80211_tx_info_clear_status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) ieee80211_rx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ieee80211_rx_ni
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) ieee80211_rx_irqsafe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) ieee80211_tx_status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) ieee80211_tx_status_ni
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) ieee80211_tx_status_irqsafe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) ieee80211_rts_get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) ieee80211_rts_duration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) ieee80211_ctstoself_get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) ieee80211_ctstoself_duration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) ieee80211_generic_frame_duration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) ieee80211_wake_queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) ieee80211_stop_queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) ieee80211_wake_queues
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) ieee80211_stop_queues
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) ieee80211_queue_stopped
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) Frame filtering
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) ===============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) :doc: Frame filtering
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) :functions: ieee80211_filter_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) The mac80211 workqueue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) ======================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) :doc: mac80211 workqueue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) .. kernel-doc:: include/net/mac80211.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) :functions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) ieee80211_queue_work
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) ieee80211_queue_delayed_work