|  | <?xml version="1.0" encoding="UTF-8"?> | 
|  | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | 
|  | "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | 
|  |  | 
|  | <book id="mac80211-developers-guide"> | 
|  | <bookinfo> | 
|  | <title>The mac80211 subsystem for kernel developers</title> | 
|  |  | 
|  | <authorgroup> | 
|  | <author> | 
|  | <firstname>Johannes</firstname> | 
|  | <surname>Berg</surname> | 
|  | <affiliation> | 
|  | <address><email>johannes@sipsolutions.net</email></address> | 
|  | </affiliation> | 
|  | </author> | 
|  | </authorgroup> | 
|  |  | 
|  | <copyright> | 
|  | <year>2007-2009</year> | 
|  | <holder>Johannes Berg</holder> | 
|  | </copyright> | 
|  |  | 
|  | <legalnotice> | 
|  | <para> | 
|  | This documentation is free software; you can redistribute | 
|  | it and/or modify it under the terms of the GNU General Public | 
|  | License version 2 as published by the Free Software Foundation. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | This documentation is distributed in the hope that it will be | 
|  | useful, but WITHOUT ANY WARRANTY; without even the implied | 
|  | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
|  | See the GNU General Public License for more details. | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | You should have received a copy of the GNU General Public | 
|  | License along with this documentation; if not, write to the Free | 
|  | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | 
|  | MA 02111-1307 USA | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | For more details see the file COPYING in the source | 
|  | distribution of Linux. | 
|  | </para> | 
|  | </legalnotice> | 
|  |  | 
|  | <abstract> | 
|  | !Pinclude/net/mac80211.h Introduction | 
|  | !Pinclude/net/mac80211.h Warning | 
|  | </abstract> | 
|  | </bookinfo> | 
|  |  | 
|  | <toc></toc> | 
|  |  | 
|  | <!-- | 
|  | Generally, this document shall be ordered by increasing complexity. | 
|  | It is important to note that readers should be able to read only | 
|  | the first few sections to get a working driver and only advanced | 
|  | usage should require reading the full document. | 
|  | --> | 
|  |  | 
|  | <part> | 
|  | <title>The basic mac80211 driver interface</title> | 
|  | <partintro> | 
|  | <para> | 
|  | You should read and understand the information contained | 
|  | within this part of the book while implementing a driver. | 
|  | In some chapters, advanced usage is noted, that may be | 
|  | skipped at first. | 
|  | </para> | 
|  | <para> | 
|  | This part of the book only covers station and monitor mode | 
|  | functionality, additional information required to implement | 
|  | the other modes is covered in the second part of the book. | 
|  | </para> | 
|  | </partintro> | 
|  |  | 
|  | <chapter id="basics"> | 
|  | <title>Basic hardware handling</title> | 
|  | <para>TBD</para> | 
|  | <para> | 
|  | This chapter shall contain information on getting a hw | 
|  | struct allocated and registered with mac80211. | 
|  | </para> | 
|  | <para> | 
|  | Since it is required to allocate rates/modes before registering | 
|  | a hw struct, this chapter shall also contain information on setting | 
|  | up the rate/mode structs. | 
|  | </para> | 
|  | <para> | 
|  | Additionally, some discussion about the callbacks and | 
|  | the general programming model should be in here, including | 
|  | the definition of ieee80211_ops which will be referred to | 
|  | a lot. | 
|  | </para> | 
|  | <para> | 
|  | Finally, a discussion of hardware capabilities should be done | 
|  | with references to other parts of the book. | 
|  | </para> | 
|  | <!-- intentionally multiple !F lines to get proper order --> | 
|  | !Finclude/net/mac80211.h ieee80211_hw | 
|  | !Finclude/net/mac80211.h ieee80211_hw_flags | 
|  | !Finclude/net/mac80211.h SET_IEEE80211_DEV | 
|  | !Finclude/net/mac80211.h SET_IEEE80211_PERM_ADDR | 
|  | !Finclude/net/mac80211.h ieee80211_ops | 
|  | !Finclude/net/mac80211.h ieee80211_alloc_hw | 
|  | !Finclude/net/mac80211.h ieee80211_register_hw | 
|  | !Finclude/net/mac80211.h ieee80211_get_tx_led_name | 
|  | !Finclude/net/mac80211.h ieee80211_get_rx_led_name | 
|  | !Finclude/net/mac80211.h ieee80211_get_assoc_led_name | 
|  | !Finclude/net/mac80211.h ieee80211_get_radio_led_name | 
|  | !Finclude/net/mac80211.h ieee80211_unregister_hw | 
|  | !Finclude/net/mac80211.h ieee80211_free_hw | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="phy-handling"> | 
|  | <title>PHY configuration</title> | 
|  | <para>TBD</para> | 
|  | <para> | 
|  | This chapter should describe PHY handling including | 
|  | start/stop callbacks and the various structures used. | 
|  | </para> | 
|  | !Finclude/net/mac80211.h ieee80211_conf | 
|  | !Finclude/net/mac80211.h ieee80211_conf_flags | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="iface-handling"> | 
|  | <title>Virtual interfaces</title> | 
|  | <para>TBD</para> | 
|  | <para> | 
|  | This chapter should describe virtual interface basics | 
|  | that are relevant to the driver (VLANs, MGMT etc are not.) | 
|  | It should explain the use of the add_iface/remove_iface | 
|  | callbacks as well as the interface configuration callbacks. | 
|  | </para> | 
|  | <para>Things related to AP mode should be discussed there.</para> | 
|  | <para> | 
|  | Things related to supporting multiple interfaces should be | 
|  | in the appropriate chapter, a BIG FAT note should be here about | 
|  | this though and the recommendation to allow only a single | 
|  | interface in STA mode at first! | 
|  | </para> | 
|  | !Finclude/net/mac80211.h ieee80211_if_init_conf | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="rx-tx"> | 
|  | <title>Receive and transmit processing</title> | 
|  | <sect1> | 
|  | <title>what should be here</title> | 
|  | <para>TBD</para> | 
|  | <para> | 
|  | This should describe the receive and transmit | 
|  | paths in mac80211/the drivers as well as | 
|  | transmit status handling. | 
|  | </para> | 
|  | </sect1> | 
|  | <sect1> | 
|  | <title>Frame format</title> | 
|  | !Pinclude/net/mac80211.h Frame format | 
|  | </sect1> | 
|  | <sect1> | 
|  | <title>Packet alignment</title> | 
|  | !Pnet/mac80211/rx.c Packet alignment | 
|  | </sect1> | 
|  | <sect1> | 
|  | <title>Calling into mac80211 from interrupts</title> | 
|  | !Pinclude/net/mac80211.h Calling mac80211 from interrupts | 
|  | </sect1> | 
|  | <sect1> | 
|  | <title>functions/definitions</title> | 
|  | !Finclude/net/mac80211.h ieee80211_rx_status | 
|  | !Finclude/net/mac80211.h mac80211_rx_flags | 
|  | !Finclude/net/mac80211.h ieee80211_tx_info | 
|  | !Finclude/net/mac80211.h ieee80211_rx | 
|  | !Finclude/net/mac80211.h ieee80211_rx_irqsafe | 
|  | !Finclude/net/mac80211.h ieee80211_tx_status | 
|  | !Finclude/net/mac80211.h ieee80211_tx_status_irqsafe | 
|  | !Finclude/net/mac80211.h ieee80211_rts_get | 
|  | !Finclude/net/mac80211.h ieee80211_rts_duration | 
|  | !Finclude/net/mac80211.h ieee80211_ctstoself_get | 
|  | !Finclude/net/mac80211.h ieee80211_ctstoself_duration | 
|  | !Finclude/net/mac80211.h ieee80211_generic_frame_duration | 
|  | !Finclude/net/mac80211.h ieee80211_wake_queue | 
|  | !Finclude/net/mac80211.h ieee80211_stop_queue | 
|  | !Finclude/net/mac80211.h ieee80211_wake_queues | 
|  | !Finclude/net/mac80211.h ieee80211_stop_queues | 
|  | </sect1> | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="filters"> | 
|  | <title>Frame filtering</title> | 
|  | !Pinclude/net/mac80211.h Frame filtering | 
|  | !Finclude/net/mac80211.h ieee80211_filter_flags | 
|  | </chapter> | 
|  | </part> | 
|  |  | 
|  | <part id="advanced"> | 
|  | <title>Advanced driver interface</title> | 
|  | <partintro> | 
|  | <para> | 
|  | Information contained within this part of the book is | 
|  | of interest only for advanced interaction of mac80211 | 
|  | with drivers to exploit more hardware capabilities and | 
|  | improve performance. | 
|  | </para> | 
|  | </partintro> | 
|  |  | 
|  | <chapter id="hardware-crypto-offload"> | 
|  | <title>Hardware crypto acceleration</title> | 
|  | !Pinclude/net/mac80211.h Hardware crypto acceleration | 
|  | <!-- intentionally multiple !F lines to get proper order --> | 
|  | !Finclude/net/mac80211.h set_key_cmd | 
|  | !Finclude/net/mac80211.h ieee80211_key_conf | 
|  | !Finclude/net/mac80211.h ieee80211_key_alg | 
|  | !Finclude/net/mac80211.h ieee80211_key_flags | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="powersave"> | 
|  | <title>Powersave support</title> | 
|  | !Pinclude/net/mac80211.h Powersave support | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="beacon-filter"> | 
|  | <title>Beacon filter support</title> | 
|  | !Pinclude/net/mac80211.h Beacon filter support | 
|  | !Finclude/net/mac80211.h ieee80211_beacon_loss | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="qos"> | 
|  | <title>Multiple queues and QoS support</title> | 
|  | <para>TBD</para> | 
|  | !Finclude/net/mac80211.h ieee80211_tx_queue_params | 
|  | !Finclude/net/mac80211.h ieee80211_tx_queue_stats | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="AP"> | 
|  | <title>Access point mode support</title> | 
|  | <para>TBD</para> | 
|  | <para>Some parts of the if_conf should be discussed here instead</para> | 
|  | <para> | 
|  | Insert notes about VLAN interfaces with hw crypto here or | 
|  | in the hw crypto chapter. | 
|  | </para> | 
|  | !Finclude/net/mac80211.h ieee80211_get_buffered_bc | 
|  | !Finclude/net/mac80211.h ieee80211_beacon_get | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="multi-iface"> | 
|  | <title>Supporting multiple virtual interfaces</title> | 
|  | <para>TBD</para> | 
|  | <para> | 
|  | Note: WDS with identical MAC address should almost always be OK | 
|  | </para> | 
|  | <para> | 
|  | Insert notes about having multiple virtual interfaces with | 
|  | different MAC addresses here, note which configurations are | 
|  | supported by mac80211, add notes about supporting hw crypto | 
|  | with it. | 
|  | </para> | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="hardware-scan-offload"> | 
|  | <title>Hardware scan offload</title> | 
|  | <para>TBD</para> | 
|  | !Finclude/net/mac80211.h ieee80211_scan_completed | 
|  | </chapter> | 
|  | </part> | 
|  |  | 
|  | <part id="rate-control"> | 
|  | <title>Rate control interface</title> | 
|  | <partintro> | 
|  | <para>TBD</para> | 
|  | <para> | 
|  | This part of the book describes the rate control algorithm | 
|  | interface and how it relates to mac80211 and drivers. | 
|  | </para> | 
|  | </partintro> | 
|  | <chapter id="dummy"> | 
|  | <title>dummy chapter</title> | 
|  | <para>TBD</para> | 
|  | </chapter> | 
|  | </part> | 
|  |  | 
|  | <part id="internal"> | 
|  | <title>Internals</title> | 
|  | <partintro> | 
|  | <para>TBD</para> | 
|  | <para> | 
|  | This part of the book describes mac80211 internals. | 
|  | </para> | 
|  | </partintro> | 
|  |  | 
|  | <chapter id="key-handling"> | 
|  | <title>Key handling</title> | 
|  | <sect1> | 
|  | <title>Key handling basics</title> | 
|  | !Pnet/mac80211/key.c Key handling basics | 
|  | </sect1> | 
|  | <sect1> | 
|  | <title>MORE TBD</title> | 
|  | <para>TBD</para> | 
|  | </sect1> | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="rx-processing"> | 
|  | <title>Receive processing</title> | 
|  | <para>TBD</para> | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="tx-processing"> | 
|  | <title>Transmit processing</title> | 
|  | <para>TBD</para> | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="sta-info"> | 
|  | <title>Station info handling</title> | 
|  | <sect1> | 
|  | <title>Programming information</title> | 
|  | !Fnet/mac80211/sta_info.h sta_info | 
|  | !Fnet/mac80211/sta_info.h ieee80211_sta_info_flags | 
|  | </sect1> | 
|  | <sect1> | 
|  | <title>STA information lifetime rules</title> | 
|  | !Pnet/mac80211/sta_info.c STA information lifetime rules | 
|  | </sect1> | 
|  | </chapter> | 
|  |  | 
|  | <chapter id="synchronisation"> | 
|  | <title>Synchronisation</title> | 
|  | <para>TBD</para> | 
|  | <para>Locking, lots of RCU</para> | 
|  | </chapter> | 
|  | </part> | 
|  | </book> |