aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2007-09-18 17:29:20 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:59 -0400
commit75a5f0ccfdbc0151ee40bb742f7b5c8eba493c0e (patch)
treef82e329ec030e767d65b767914fd501c955de4f9 /include
parent1bc0826c8f5f3fa26644a8e878aae0be304a670f (diff)
[PATCH] mac80211: document a lot more
This patch adds a lot more documentation (in kernel-doc format) to include/net/mac80211.h Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Michael Wu <flamingice@sourmilk.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r--include/net/mac80211.h792
1 files changed, 499 insertions, 293 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index c5554ad87a17..d2cf734402e3 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -22,29 +22,51 @@
22#include <net/wireless.h> 22#include <net/wireless.h>
23#include <net/cfg80211.h> 23#include <net/cfg80211.h>
24 24
25/* Note! Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be 25/**
26 * DOC: Introduction
27 *
28 * mac80211 is the Linux stack for 802.11 hardware that implements
29 * only partial functionality in hard- or firmware. This document
30 * defines the interface between mac80211 and low-level hardware
31 * drivers.
32 */
33
34/**
35 * DOC: Calling mac80211 from interrupts
36 *
37 * Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be
26 * called in hardware interrupt context. The low-level driver must not call any 38 * called in hardware interrupt context. The low-level driver must not call any
27 * other functions in hardware interrupt context. If there is a need for such 39 * other functions in hardware interrupt context. If there is a need for such
28 * call, the low-level driver should first ACK the interrupt and perform the 40 * call, the low-level driver should first ACK the interrupt and perform the
29 * IEEE 802.11 code call after this, e.g., from a scheduled tasklet (in 41 * IEEE 802.11 code call after this, e.g. from a scheduled workqueue function.
30 * software interrupt context).
31 */ 42 */
32 43
33/* 44/**
34 * Frame format used when passing frame between low-level hardware drivers 45 * DOC: Warning
35 * and IEEE 802.11 driver the same as used in the wireless media, i.e., 46 *
36 * buffers start with IEEE 802.11 header and include the same octets that 47 * If you're reading this document and not the header file itself, it will
37 * are sent over air. 48 * be incomplete because not all documentation has been converted yet.
38 * 49 */
39 * If hardware uses IEEE 802.3 headers (and perform 802.3 <-> 802.11 50
40 * conversion in firmware), upper layer 802.11 code needs to be changed to 51/**
41 * support this. 52 * DOC: Frame format
42 * 53 *
43 * If the receive frame format is not the same as the real frame sent 54 * As a general rule, when frames are passed between mac80211 and the driver,
44 * on the wireless media (e.g., due to padding etc.), upper layer 802.11 code 55 * they start with the IEEE 802.11 header and include the same octets that are
45 * could be updated to provide support for such format assuming this would 56 * sent over the air except for the FCS which should be calculated by the
46 * optimize the performance, e.g., by removing need to re-allocation and 57 * hardware.
47 * copying of the data. 58 *
59 * There are, however, various exceptions to this rule for advanced features:
60 *
61 * The first exception is for hardware encryption and decryption offload
62 * where the IV/ICV may or may not be generated in hardware.
63 *
64 * Secondly, when the hardware handles fragmentation, the frame handed to
65 * the driver from mac80211 is the MSDU, not the MPDU.
66 *
67 * Finally, for received frames, the driver is able to indicate that it has
68 * filled a radiotap header and put that in front of the frame; if it does
69 * not do so then mac80211 may add this under certain circumstances.
48 */ 70 */
49 71
50#define IEEE80211_CHAN_W_SCAN 0x00000001 72#define IEEE80211_CHAN_W_SCAN 0x00000001
@@ -480,7 +502,7 @@ enum ieee80211_if_types {
480 */ 502 */
481struct ieee80211_if_init_conf { 503struct ieee80211_if_init_conf {
482 int if_id; 504 int if_id;
483 int type; 505 enum ieee80211_if_types type;
484 void *mac_addr; 506 void *mac_addr;
485}; 507};
486 508
@@ -645,351 +667,426 @@ enum ieee80211_hw_flags {
645 667
646/** 668/**
647 * struct ieee80211_hw - hardware information and state 669 * struct ieee80211_hw - hardware information and state
648 * TODO: move documentation into kernel-doc format 670 *
671 * This structure contains the configuration and hardware
672 * information for an 802.11 PHY.
673 *
674 * @wiphy: This points to the &struct wiphy allocated for this
675 * 802.11 PHY. You must fill in the @perm_addr and @dev
676 * members of this structure using SET_IEEE80211_DEV()
677 * and SET_IEEE80211_PERM_ADDR().
678 *
679 * @conf: &struct ieee80211_conf, device configuration, don't use.
680 *
681 * @workqueue: single threaded workqueue available for driver use,
682 * allocated by mac80211 on registration and flushed on
683 * unregistration.
684 *
685 * @priv: pointer to private area that was allocated for driver use
686 * along with this structure.
687 *
688 * @flags: hardware flags, see &enum ieee80211_hw_flags.
689 *
690 * @extra_tx_headroom: headroom to reserve in each transmit skb
691 * for use by the driver (e.g. for transmit headers.)
692 *
693 * @channel_change_time: time (in microseconds) it takes to change channels.
694 *
695 * @max_rssi: Maximum value for ssi in RX information, use
696 * negative numbers for dBm and 0 to indicate no support.
697 *
698 * @max_signal: like @max_rssi, but for the signal value.
699 *
700 * @max_noise: like @max_rssi, but for the noise value.
701 *
702 * @queues: number of available hardware transmit queues for
703 * data packets. WMM/QoS requires at least four.
649 */ 704 */
650struct ieee80211_hw { 705struct ieee80211_hw {
651 /* points to the cfg80211 wiphy for this piece. Note
652 * that you must fill in the perm_addr and dev fields
653 * of this structure, use the macros provided below. */
654 struct wiphy *wiphy;
655
656 /* assigned by mac80211, don't write */
657 struct ieee80211_conf conf; 706 struct ieee80211_conf conf;
658 707 struct wiphy *wiphy;
659 /* Single thread workqueue available for driver use
660 * Allocated by mac80211 on registration */
661 struct workqueue_struct *workqueue; 708 struct workqueue_struct *workqueue;
662
663 /* Pointer to the private area that was
664 * allocated with this struct for you. */
665 void *priv; 709 void *priv;
666 710 u32 flags;
667 /* The rest is information about your hardware */
668
669 u32 flags; /* hardware flags defined above */
670
671 /* Set to the size of a needed device specific skb headroom for TX skbs. */
672 unsigned int extra_tx_headroom; 711 unsigned int extra_tx_headroom;
673
674 /* This is the time in us to change channels
675 */
676 int channel_change_time; 712 int channel_change_time;
677 /* Maximum values for various statistics. 713 u8 queues;
678 * Leave at 0 to indicate no support. Use negative numbers for dBm. */
679 s8 max_rssi; 714 s8 max_rssi;
680 s8 max_signal; 715 s8 max_signal;
681 s8 max_noise; 716 s8 max_noise;
682
683 /* Number of available hardware TX queues for data packets.
684 * WMM requires at least four queues. */
685 int queues;
686}; 717};
687 718
719/**
720 * SET_IEEE80211_DEV - set device for 802.11 hardware
721 *
722 * @hw: the &struct ieee80211_hw to set the device for
723 * @dev: the &struct device of this 802.11 device
724 */
688static inline void SET_IEEE80211_DEV(struct ieee80211_hw *hw, struct device *dev) 725static inline void SET_IEEE80211_DEV(struct ieee80211_hw *hw, struct device *dev)
689{ 726{
690 set_wiphy_dev(hw->wiphy, dev); 727 set_wiphy_dev(hw->wiphy, dev);
691} 728}
692 729
730/**
731 * SET_IEEE80211_PERM_ADDR - set the permanenet MAC address for 802.11 hardware
732 *
733 * @hw: the &struct ieee80211_hw to set the MAC address for
734 * @addr: the address to set
735 */
693static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr) 736static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr)
694{ 737{
695 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); 738 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN);
696} 739}
697 740
698/* 741/**
699 * flags for change_filter_flags() 742 * DOC: Hardware crypto acceleration
743 *
744 * mac80211 is capable of taking advantage of many hardware
745 * acceleration designs for encryption and decryption operations.
746 *
747 * The set_key() callback in the &struct ieee80211_ops for a given
748 * device is called to enable hardware acceleration of encryption and
749 * decryption. The callback takes an @address parameter that will be
750 * the broadcast address for default keys, the other station's hardware
751 * address for individual keys or the zero address for keys that will
752 * be used only for transmission.
753 * Multiple transmission keys with the same key index may be used when
754 * VLANs are configured for an access point.
700 * 755 *
701 * Note that e.g. if PROMISC_IN_BSS is unset then 756 * The @local_address parameter will always be set to our own address,
702 * you should still do MAC address filtering if 757 * this is only relevant if you support multiple local addresses.
703 * possible even if OTHER_BSS is set to indicate 758 *
704 * no BSSID filtering should be done. 759 * When transmitting, the TX control data will use the @hw_key_idx
760 * selected by the driver by modifying the &struct ieee80211_key_conf
761 * pointed to by the @key parameter to the set_key() function.
762 *
763 * The set_key() call for the %SET_KEY command should return 0 if
764 * the key is now in use, -%EOPNOTSUPP or -%ENOSPC if it couldn't be
765 * added; if you return 0 then hw_key_idx must be assigned to the
766 * hardware key index, you are free to use the full u8 range.
767 *
768 * When the cmd is %DISABLE_KEY then it must succeed.
769 *
770 * Note that it is permissible to not decrypt a frame even if a key
771 * for it has been uploaded to hardware, the stack will not make any
772 * decision based on whether a key has been uploaded or not but rather
773 * based on the receive flags.
774 *
775 * The &struct ieee80211_key_conf structure pointed to by the @key
776 * parameter is guaranteed to be valid until another call to set_key()
777 * removes it, but it can only be used as a cookie to differentiate
778 * keys.
705 */ 779 */
706/* 780
707 * promiscuous mode within your BSS, 781/**
708 * think of the BSS as your network segment and then this corresponds 782 * DOC: Frame filtering
709 * to the regular ethernet device promiscuous mode 783 *
784 * mac80211 requires to see many management frames for proper
785 * operation, and users may want to see many more frames when
786 * in monitor mode. However, for best CPU usage and power consumption,
787 * having as few frames as possible percolate through the stack is
788 * desirable. Hence, the hardware should filter as much as possible.
789 *
790 * To achieve this, mac80211 uses filter flags (see below) to tell
791 * the driver's configure_filter() function which frames should be
792 * passed to mac80211 and which should be filtered out.
793 *
794 * The configure_filter() callback is invoked with the parameters
795 * @mc_count and @mc_list for the combined multicast address list
796 * of all virtual interfaces, @changed_flags telling which flags
797 * were changed and @total_flags with the new flag states.
798 *
799 * If your device has no multicast address filters your driver will
800 * need to check both the %FIF_ALLMULTI flag and the @mc_count
801 * parameter to see whether multicast frames should be accepted
802 * or dropped.
803 *
804 * All unsupported flags in @total_flags must be cleared, i.e. you
805 * should clear all bits except those you honoured.
710 */ 806 */
711#define FIF_PROMISC_IN_BSS 0x01 807
712/* show all multicast frames */ 808/**
713#define FIF_ALLMULTI 0x02 809 * enum ieee80211_filter_flags - hardware filter flags
714/* show frames with failed FCS, but set RX_FLAG_FAILED_FCS_CRC for them */ 810 *
715#define FIF_FCSFAIL 0x04 811 * These flags determine what the filter in hardware should be
716/* show frames with failed PLCP CRC, but set RX_FLAG_FAILED_PLCP_CRC for them */ 812 * programmed to let through and what should not be passed to the
717#define FIF_PLCPFAIL 0x08 813 * stack. It is always safe to pass more frames than requested,
718/* 814 * but this has negative impact on power consumption.
719 * This flag is set during scanning to indicate to the hardware 815 *
720 * that it should not filter beacons or probe responses by BSSID. 816 * @FIF_PROMISC_IN_BSS: promiscuous mode within your BSS,
817 * think of the BSS as your network segment and then this corresponds
818 * to the regular ethernet device promiscuous mode.
819 *
820 * @FIF_ALLMULTI: pass all multicast frames, this is used if requested
821 * by the user or if the hardware is not capable of filtering by
822 * multicast address.
823 *
824 * @FIF_FCSFAIL: pass frames with failed FCS (but you need to set the
825 * %RX_FLAG_FAILED_FCS_CRC for them)
826 *
827 * @FIF_PLCPFAIL: pass frames with failed PLCP CRC (but you need to set
828 * the %RX_FLAG_FAILED_PLCP_CRC for them
829 *
830 * @FIF_BCN_PRBRESP_PROMISC: This flag is set during scanning to indicate
831 * to the hardware that it should not filter beacons or probe responses
832 * by BSSID. Filtering them can greatly reduce the amount of processing
833 * mac80211 needs to do and the amount of CPU wakeups, so you should
834 * honour this flag if possible.
835 *
836 * @FIF_CONTROL: pass control frames, if PROMISC_IN_BSS is not set then
837 * only those addressed to this station
838 *
839 * @FIF_OTHER_BSS: pass frames destined to other BSSes
721 */ 840 */
722#define FIF_BCN_PRBRESP_PROMISC 0x10 841enum ieee80211_filter_flags {
723/* 842 FIF_PROMISC_IN_BSS = 1<<0,
724 * show control frames, if PROMISC_IN_BSS is not set then 843 FIF_ALLMULTI = 1<<1,
725 * only those addressed to this station 844 FIF_FCSFAIL = 1<<2,
845 FIF_PLCPFAIL = 1<<3,
846 FIF_BCN_PRBRESP_PROMISC = 1<<4,
847 FIF_CONTROL = 1<<5,
848 FIF_OTHER_BSS = 1<<6,
849};
850
851/**
852 * enum ieee80211_erp_change_flags - erp change flags
853 *
854 * These flags are used with the erp_ie_changed() callback in
855 * &struct ieee80211_ops to indicate which parameter(s) changed.
856 * @IEEE80211_ERP_CHANGE_PROTECTION: protection changed
857 * @IEEE80211_ERP_CHANGE_PREAMBLE: barker preamble mode changed
726 */ 858 */
727#define FIF_CONTROL 0x20 859enum ieee80211_erp_change_flags {
728/* show frames from other BSSes */ 860 IEEE80211_ERP_CHANGE_PROTECTION = 1<<0,
729#define FIF_OTHER_BSS 0x40 861 IEEE80211_ERP_CHANGE_PREAMBLE = 1<<1,
862};
730 863
731/* Configuration block used by the low-level driver to tell the 802.11 code 864
732 * about supported hardware features and to pass function pointers to callback 865/**
733 * functions. */ 866 * struct ieee80211_ops - callbacks from mac80211 to the driver
867 *
868 * This structure contains various callbacks that the driver may
869 * handle or, in some cases, must handle, for example to configure
870 * the hardware to a new channel or to transmit a frame.
871 *
872 * @tx: Handler that 802.11 module calls for each transmitted frame.
873 * skb contains the buffer starting from the IEEE 802.11 header.
874 * The low-level driver should send the frame out based on
875 * configuration in the TX control data. Must be implemented and
876 * atomic.
877 *
878 * @start: Called before the first netdevice attached to the hardware
879 * is enabled. This should turn on the hardware and must turn on
880 * frame reception (for possibly enabled monitor interfaces.)
881 * Returns negative error codes, these may be seen in userspace,
882 * or zero.
883 * When the device is started it should not have a MAC address
884 * to avoid acknowledging frames before a non-monitor device
885 * is added.
886 * Must be implemented.
887 *
888 * @stop: Called after last netdevice attached to the hardware
889 * is disabled. This should turn off the hardware (at least
890 * it must turn off frame reception.)
891 * May be called right after add_interface if that rejects
892 * an interface.
893 * Must be implemented.
894 *
895 * @add_interface: Called when a netdevice attached to the hardware is
896 * enabled. Because it is not called for monitor mode devices, @open
897 * and @stop must be implemented.
898 * The driver should perform any initialization it needs before
899 * the device can be enabled. The initial configuration for the
900 * interface is given in the conf parameter.
901 * The callback may refuse to add an interface by returning a
902 * negative error code (which will be seen in userspace.)
903 * Must be implemented.
904 *
905 * @remove_interface: Notifies a driver that an interface is going down.
906 * The @stop callback is called after this if it is the last interface
907 * and no monitor interfaces are present.
908 * When all interfaces are removed, the MAC address in the hardware
909 * must be cleared so the device no longer acknowledges packets,
910 * the mac_addr member of the conf structure is, however, set to the
911 * MAC address of the device going away.
912 * Hence, this callback must be implemented.
913 *
914 * @config: Handler for configuration requests. IEEE 802.11 code calls this
915 * function to change hardware configuration, e.g., channel.
916 *
917 * @config_interface: Handler for configuration requests related to interfaces
918 * (e.g. BSSID changes.)
919 *
920 * @configure_filter: Configure the device's RX filter.
921 * See the section "Frame filtering" for more information.
922 * This callback must be implemented and atomic.
923 *
924 * @set_tim: Set TIM bit. If the hardware/firmware takes care of beacon
925 * generation (that is, %IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE is set)
926 * mac80211 calls this function when a TIM bit must be set or cleared
927 * for a given AID. Must be atomic.
928 *
929 * @set_key: See the section "Hardware crypto acceleration"
930 * This callback can sleep, and is only called between add_interface
931 * and remove_interface calls, i.e. while the interface with the
932 * given local_address is enabled.
933 *
934 * @set_ieee8021x: Enable/disable IEEE 802.1X. This item requests wlan card
935 * to pass unencrypted EAPOL-Key frames even when encryption is
936 * configured. If the wlan card does not require such a configuration,
937 * this function pointer can be set to NULL.
938 *
939 * @set_port_auth: Set port authorization state (IEEE 802.1X PAE) to be
940 * authorized (@authorized=1) or unauthorized (=0). This function can be
941 * used if the wlan hardware or low-level driver implements PAE.
942 * mac80211 will filter frames based on authorization state in any case,
943 * so this function pointer can be NULL if low-level driver does not
944 * require event notification about port state changes.
945 *
946 * @hw_scan: Ask the hardware to service the scan request, no need to start
947 * the scan state machine in stack.
948 *
949 * @get_stats: return low-level statistics
950 *
951 * @set_privacy_invoked: For devices that generate their own beacons and probe
952 * response or association responses this updates the state of privacy_invoked
953 * returns 0 for success or an error number.
954 *
955 * @get_sequence_counter: For devices that have internal sequence counters this
956 * callback allows mac80211 to access the current value of a counter.
957 * This callback seems not well-defined, tell us if you need it.
958 *
959 * @set_rts_threshold: Configuration of RTS threshold (if device needs it)
960 *
961 * @set_frag_threshold: Configuration of fragmentation threshold. Assign this if
962 * the device does fragmentation by itself; if this method is assigned then
963 * the stack will not do fragmentation.
964 *
965 * @set_retry_limit: Configuration of retry limits (if device needs it)
966 *
967 * @sta_table_notification: Number of STAs in STA table notification. Must
968 * be atomic.
969 *
970 * @erp_ie_changed: Handle ERP IE change notifications. Must be atomic.
971 *
972 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
973 * bursting) for a hardware TX queue. The @queue parameter uses the
974 * %IEEE80211_TX_QUEUE_* constants. Must be atomic.
975 *
976 * @get_tx_stats: Get statistics of the current TX queue status. This is used
977 * to get number of currently queued packets (queue length), maximum queue
978 * size (limit), and total number of packets sent using each TX queue
979 * (count). This information is used for WMM to find out which TX
980 * queues have room for more packets and by hostapd to provide
981 * statistics about the current queueing state to external programs.
982 *
983 * @get_tsf: Get the current TSF timer value from firmware/hardware. Currently,
984 * this is only used for IBSS mode debugging and, as such, is not a
985 * required function. Must be atomic.
986 *
987 * @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize
988 * with other STAs in the IBSS. This is only used in IBSS mode. This
989 * function is optional if the firmware/hardware takes full care of
990 * TSF synchronization.
991 *
992 * @beacon_update: Setup beacon data for IBSS beacons. Unlike access point,
993 * IBSS uses a fixed beacon frame which is configured using this
994 * function. This handler is required only for IBSS mode.
995 *
996 * @tx_last_beacon: Determine whether the last IBSS beacon was sent by us.
997 * This is needed only for IBSS mode and the result of this function is
998 * used to determine whether to reply to Probe Requests.
999 */
734struct ieee80211_ops { 1000struct ieee80211_ops {
735 /* Handler that 802.11 module calls for each transmitted frame.
736 * skb contains the buffer starting from the IEEE 802.11 header.
737 * The low-level driver should send the frame out based on
738 * configuration in the TX control data.
739 * Must be atomic. */
740 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb, 1001 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb,
741 struct ieee80211_tx_control *control); 1002 struct ieee80211_tx_control *control);
742
743 /*
744 * Called before the first netdevice attached to the hardware
745 * is enabled. This should turn on the hardware and must turn on
746 * frame reception (for possibly enabled monitor interfaces.)
747 * Returns negative error codes, these may be seen in userspace,
748 * or zero.
749 * When the device is started it should not have a MAC address
750 * to avoid acknowledging frames before a non-monitor device
751 * is added.
752 *
753 * Must be implemented.
754 */
755 int (*start)(struct ieee80211_hw *hw); 1003 int (*start)(struct ieee80211_hw *hw);
756
757 /*
758 * Called after last netdevice attached to the hardware
759 * is disabled. This should turn off the hardware (at least
760 * it must turn off frame reception.)
761 * May be called right after add_interface if that rejects
762 * an interface.
763 *
764 * Must be implemented.
765 */
766 void (*stop)(struct ieee80211_hw *hw); 1004 void (*stop)(struct ieee80211_hw *hw);
767
768 /*
769 * Called when a netdevice attached to the hardware is enabled.
770 * Because it is not called for monitor mode devices, open()
771 * and stop() must be implemented.
772 * The driver should perform any initialization it needs before
773 * the device can be enabled. The initial configuration for the
774 * interface is given in the conf parameter.
775 *
776 * Must be implemented.
777 */
778 int (*add_interface)(struct ieee80211_hw *hw, 1005 int (*add_interface)(struct ieee80211_hw *hw,
779 struct ieee80211_if_init_conf *conf); 1006 struct ieee80211_if_init_conf *conf);
780
781 /*
782 * Notifies a driver that an interface is going down. The stop() handler
783 * is called after this if it is the last interface and no monitor
784 * interfaces are present.
785 * When all interfaces are removed, the MAC address in the hardware
786 * must be cleared so the device no longer acknowledges packets,
787 * the mac_addr member of the conf structure is, however, set to the
788 * MAC address of the device going away.
789 *
790 * Hence, this callback must be implemented.
791 */
792 void (*remove_interface)(struct ieee80211_hw *hw, 1007 void (*remove_interface)(struct ieee80211_hw *hw,
793 struct ieee80211_if_init_conf *conf); 1008 struct ieee80211_if_init_conf *conf);
794
795 /* Handler for configuration requests. IEEE 802.11 code calls this
796 * function to change hardware configuration, e.g., channel. */
797 int (*config)(struct ieee80211_hw *hw, struct ieee80211_conf *conf); 1009 int (*config)(struct ieee80211_hw *hw, struct ieee80211_conf *conf);
798
799 /* Handler for configuration requests related to interfaces (e.g.
800 * BSSID). */
801 int (*config_interface)(struct ieee80211_hw *hw, 1010 int (*config_interface)(struct ieee80211_hw *hw,
802 int if_id, struct ieee80211_if_conf *conf); 1011 int if_id, struct ieee80211_if_conf *conf);
803
804 /*
805 * Configure the device's RX filter.
806 *
807 * The multicast address filter must be changed if the hardware flags
808 * indicate that one is present.
809 *
810 * All unsupported flags in 'total_flags' must be cleared,
811 * clear all bits except those you honoured.
812 *
813 * The callback must be implemented and must be atomic.
814 */
815 void (*configure_filter)(struct ieee80211_hw *hw, 1012 void (*configure_filter)(struct ieee80211_hw *hw,
816 unsigned int changed_flags, 1013 unsigned int changed_flags,
817 unsigned int *total_flags, 1014 unsigned int *total_flags,
818 int mc_count, struct dev_addr_list *mc_list); 1015 int mc_count, struct dev_addr_list *mc_list);
819
820 /* Set TIM bit handler. If the hardware/firmware takes care of beacon
821 * generation, IEEE 802.11 code uses this function to tell the
822 * low-level to set (or clear if set==0) TIM bit for the given aid. If
823 * host system is used to generate beacons, this handler is not used
824 * and low-level driver should set it to NULL.
825 * Must be atomic. */
826 int (*set_tim)(struct ieee80211_hw *hw, int aid, int set); 1016 int (*set_tim)(struct ieee80211_hw *hw, int aid, int set);
827
828 /*
829 * Set encryption key.
830 *
831 * This is called to enable hardware acceleration of encryption and
832 * decryption. The address will be the broadcast address for default
833 * keys, the other station's hardware address for individual keys or
834 * the zero address for keys that will be used only for transmission.
835 *
836 * The local_address parameter will always be set to our own address,
837 * this is only relevant if you support multiple local addresses.
838 *
839 * When transmitting, the TX control data will use the hw_key_idx
840 * selected by the low-level driver.
841 *
842 * Return 0 if the key is now in use, -EOPNOTSUPP or -ENOSPC if it
843 * couldn't be added; if you return 0 then hw_key_idx must be assigned
844 * to the hardware key index, you are free to use the full u8 range.
845 *
846 * When the cmd is DISABLE_KEY then it must succeed.
847 *
848 * Note that it is permissible to not decrypt a frame even if a key
849 * for it has been uploaded to hardware, the stack will not make any
850 * decision based on whether a key has been uploaded or not but rather
851 * based on the receive flags.
852 *
853 * This callback can sleep, and is only called between add_interface
854 * and remove_interface calls, i.e. while the interface with the
855 * given local_address is enabled.
856 *
857 * The ieee80211_key_conf structure pointed to by the key parameter
858 * is guaranteed to be valid until another call to set_key removes
859 * it, but it can only be used as a cookie to differentiate keys.
860 */
861 int (*set_key)(struct ieee80211_hw *hw, set_key_cmd cmd, 1017 int (*set_key)(struct ieee80211_hw *hw, set_key_cmd cmd,
862 const u8 *local_address, const u8 *address, 1018 const u8 *local_address, const u8 *address,
863 struct ieee80211_key_conf *key); 1019 struct ieee80211_key_conf *key);
864
865 /* Enable/disable IEEE 802.1X. This item requests wlan card to pass
866 * unencrypted EAPOL-Key frames even when encryption is configured.
867 * If the wlan card does not require such a configuration, this
868 * function pointer can be set to NULL. */
869 int (*set_ieee8021x)(struct ieee80211_hw *hw, int use_ieee8021x); 1020 int (*set_ieee8021x)(struct ieee80211_hw *hw, int use_ieee8021x);
870
871 /* Set port authorization state (IEEE 802.1X PAE) to be authorized
872 * (authorized=1) or unauthorized (authorized=0). This function can be
873 * used if the wlan hardware or low-level driver implements PAE.
874 * 80211.o module will anyway filter frames based on authorization
875 * state, so this function pointer can be NULL if low-level driver does
876 * not require event notification about port state changes.
877 * Currently unused. */
878 int (*set_port_auth)(struct ieee80211_hw *hw, u8 *addr, 1021 int (*set_port_auth)(struct ieee80211_hw *hw, u8 *addr,
879 int authorized); 1022 int authorized);
880
881 /* Ask the hardware to service the scan request, no need to start
882 * the scan state machine in stack. */
883 int (*hw_scan)(struct ieee80211_hw *hw, u8 *ssid, size_t len); 1023 int (*hw_scan)(struct ieee80211_hw *hw, u8 *ssid, size_t len);
884
885 /* return low-level statistics */
886 int (*get_stats)(struct ieee80211_hw *hw, 1024 int (*get_stats)(struct ieee80211_hw *hw,
887 struct ieee80211_low_level_stats *stats); 1025 struct ieee80211_low_level_stats *stats);
888
889 /* For devices that generate their own beacons and probe response
890 * or association responses this updates the state of privacy_invoked
891 * returns 0 for success or an error number */
892 int (*set_privacy_invoked)(struct ieee80211_hw *hw, 1026 int (*set_privacy_invoked)(struct ieee80211_hw *hw,
893 int privacy_invoked); 1027 int privacy_invoked);
894
895 /* For devices that have internal sequence counters, allow 802.11
896 * code to access the current value of a counter */
897 int (*get_sequence_counter)(struct ieee80211_hw *hw, 1028 int (*get_sequence_counter)(struct ieee80211_hw *hw,
898 u8* addr, u8 keyidx, u8 txrx, 1029 u8* addr, u8 keyidx, u8 txrx,
899 u32* iv32, u16* iv16); 1030 u32* iv32, u16* iv16);
900
901 /* Configuration of RTS threshold (if device needs it) */
902 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value); 1031 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value);
903
904 /* Configuration of fragmentation threshold.
905 * Assign this if the device does fragmentation by itself,
906 * if this method is assigned then the stack will not do
907 * fragmentation. */
908 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value); 1032 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
909
910 /* Configuration of retry limits (if device needs it) */
911 int (*set_retry_limit)(struct ieee80211_hw *hw, 1033 int (*set_retry_limit)(struct ieee80211_hw *hw,
912 u32 short_retry, u32 long_retr); 1034 u32 short_retry, u32 long_retr);
913
914 /* Number of STAs in STA table notification (NULL = disabled).
915 * Must be atomic. */
916 void (*sta_table_notification)(struct ieee80211_hw *hw, 1035 void (*sta_table_notification)(struct ieee80211_hw *hw,
917 int num_sta); 1036 int num_sta);
918
919 /* Handle ERP IE change notifications. Must be atomic. */
920 void (*erp_ie_changed)(struct ieee80211_hw *hw, u8 changes, 1037 void (*erp_ie_changed)(struct ieee80211_hw *hw, u8 changes,
921 int cts_protection, int preamble); 1038 int cts_protection, int preamble);
922
923 /* Flags for the erp_ie_changed changes parameter */
924#define IEEE80211_ERP_CHANGE_PROTECTION (1<<0) /* protection flag changed */
925#define IEEE80211_ERP_CHANGE_PREAMBLE (1<<1) /* barker preamble mode changed */
926
927 /* Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
928 * bursting) for a hardware TX queue.
929 * queue = IEEE80211_TX_QUEUE_*.
930 * Must be atomic. */
931 int (*conf_tx)(struct ieee80211_hw *hw, int queue, 1039 int (*conf_tx)(struct ieee80211_hw *hw, int queue,
932 const struct ieee80211_tx_queue_params *params); 1040 const struct ieee80211_tx_queue_params *params);
933
934 /* Get statistics of the current TX queue status. This is used to get
935 * number of currently queued packets (queue length), maximum queue
936 * size (limit), and total number of packets sent using each TX queue
937 * (count).
938 * Currently unused. */
939 int (*get_tx_stats)(struct ieee80211_hw *hw, 1041 int (*get_tx_stats)(struct ieee80211_hw *hw,
940 struct ieee80211_tx_queue_stats *stats); 1042 struct ieee80211_tx_queue_stats *stats);
941
942 /* Get the current TSF timer value from firmware/hardware. Currently,
943 * this is only used for IBSS mode debugging and, as such, is not a
944 * required function.
945 * Must be atomic. */
946 u64 (*get_tsf)(struct ieee80211_hw *hw); 1043 u64 (*get_tsf)(struct ieee80211_hw *hw);
947
948 /* Reset the TSF timer and allow firmware/hardware to synchronize with
949 * other STAs in the IBSS. This is only used in IBSS mode. This
950 * function is optional if the firmware/hardware takes full care of
951 * TSF synchronization. */
952 void (*reset_tsf)(struct ieee80211_hw *hw); 1044 void (*reset_tsf)(struct ieee80211_hw *hw);
953
954 /* Setup beacon data for IBSS beacons. Unlike access point (Master),
955 * IBSS uses a fixed beacon frame which is configured using this
956 * function. This handler is required only for IBSS mode. */
957 int (*beacon_update)(struct ieee80211_hw *hw, 1045 int (*beacon_update)(struct ieee80211_hw *hw,
958 struct sk_buff *skb, 1046 struct sk_buff *skb,
959 struct ieee80211_tx_control *control); 1047 struct ieee80211_tx_control *control);
960
961 /* Determine whether the last IBSS beacon was sent by us. This is
962 * needed only for IBSS mode and the result of this function is used to
963 * determine whether to reply to Probe Requests. */
964 int (*tx_last_beacon)(struct ieee80211_hw *hw); 1048 int (*tx_last_beacon)(struct ieee80211_hw *hw);
965}; 1049};
966 1050
967/* Allocate a new hardware device. This must be called once for each 1051/**
968 * hardware device. The returned pointer must be used to refer to this 1052 * ieee80211_alloc_hw - Allocate a new hardware device
969 * device when calling other functions. 802.11 code allocates a private data 1053 *
970 * area for the low-level driver. The size of this area is given as 1054 * This must be called once for each hardware device. The returned pointer
971 * priv_data_len. 1055 * must be used to refer to this device when calling other functions.
1056 * mac80211 allocates a private data area for the driver pointed to by
1057 * @priv in &struct ieee80211_hw, the size of this area is given as
1058 * @priv_data_len.
1059 *
1060 * @priv_data_len: length of private data
1061 * @ops: callbacks for this device
972 */ 1062 */
973struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, 1063struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
974 const struct ieee80211_ops *ops); 1064 const struct ieee80211_ops *ops);
975 1065
976/* Register hardware device to the IEEE 802.11 code and kernel. Low-level 1066/**
977 * drivers must call this function before using any other IEEE 802.11 1067 * ieee80211_register_hw - Register hardware device
978 * function except ieee80211_register_hwmode. */ 1068 *
1069 * You must call this function before any other functions
1070 * except ieee80211_register_hwmode.
1071 *
1072 * @hw: the device to register as returned by ieee80211_alloc_hw()
1073 */
979int ieee80211_register_hw(struct ieee80211_hw *hw); 1074int ieee80211_register_hw(struct ieee80211_hw *hw);
980 1075
981/* driver can use this and ieee80211_get_rx_led_name to get the
982 * name of the registered LEDs after ieee80211_register_hw
983 * was called.
984 * This is useful to set the default trigger on the LED class
985 * device that your driver should export for each LED the device
986 * has, that way the default behaviour will be as expected but
987 * the user can still change it/turn off the LED etc.
988 */
989#ifdef CONFIG_MAC80211_LEDS 1076#ifdef CONFIG_MAC80211_LEDS
990extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw); 1077extern char *__ieee80211_get_tx_led_name(struct ieee80211_hw *hw);
991extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw); 1078extern char *__ieee80211_get_rx_led_name(struct ieee80211_hw *hw);
992#endif 1079#endif
1080/**
1081 * ieee80211_get_tx_led_name - get name of TX LED
1082 *
1083 * mac80211 creates a transmit LED trigger for each wireless hardware
1084 * that can be used to drive LEDs if your driver registers a LED device.
1085 * This function returns the name (or %NULL if not configured for LEDs)
1086 * of the trigger so you can automatically link the LED device.
1087 *
1088 * @hw: the hardware to get the LED trigger name for
1089 */
993static inline char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw) 1090static inline char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw)
994{ 1091{
995#ifdef CONFIG_MAC80211_LEDS 1092#ifdef CONFIG_MAC80211_LEDS
@@ -999,6 +1096,16 @@ static inline char *ieee80211_get_tx_led_name(struct ieee80211_hw *hw)
999#endif 1096#endif
1000} 1097}
1001 1098
1099/**
1100 * ieee80211_get_rx_led_name - get name of RX LED
1101 *
1102 * mac80211 creates a receive LED trigger for each wireless hardware
1103 * that can be used to drive LEDs if your driver registers a LED device.
1104 * This function returns the name (or %NULL if not configured for LEDs)
1105 * of the trigger so you can automatically link the LED device.
1106 *
1107 * @hw: the hardware to get the LED trigger name for
1108 */
1002static inline char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw) 1109static inline char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw)
1003{ 1110{
1004#ifdef CONFIG_MAC80211_LEDS 1111#ifdef CONFIG_MAC80211_LEDS
@@ -1012,29 +1119,80 @@ static inline char *ieee80211_get_rx_led_name(struct ieee80211_hw *hw)
1012int ieee80211_register_hwmode(struct ieee80211_hw *hw, 1119int ieee80211_register_hwmode(struct ieee80211_hw *hw,
1013 struct ieee80211_hw_mode *mode); 1120 struct ieee80211_hw_mode *mode);
1014 1121
1015/* Unregister a hardware device. This function instructs 802.11 code to free 1122/**
1016 * allocated resources and unregister netdevices from the kernel. */ 1123 * ieee80211_unregister_hw - Unregister a hardware device
1124 *
1125 * This function instructs mac80211 to free allocated resources
1126 * and unregister netdevices from the networking subsystem.
1127 *
1128 * @hw: the hardware to unregister
1129 */
1017void ieee80211_unregister_hw(struct ieee80211_hw *hw); 1130void ieee80211_unregister_hw(struct ieee80211_hw *hw);
1018 1131
1019/* Free everything that was allocated including private data of a driver. */ 1132/**
1133 * ieee80211_free_hw - free hardware descriptor
1134 *
1135 * This function frees everything that was allocated, including the
1136 * private data for the driver. You must call ieee80211_unregister_hw()
1137 * before calling this function
1138 *
1139 * @hw: the hardware to free
1140 */
1020void ieee80211_free_hw(struct ieee80211_hw *hw); 1141void ieee80211_free_hw(struct ieee80211_hw *hw);
1021 1142
1022/* Receive frame callback function. The low-level driver uses this function to 1143/* trick to avoid symbol clashes with the ieee80211 subsystem */
1023 * send received frames to the IEEE 802.11 code. Receive buffer (skb) must
1024 * start with IEEE 802.11 header. */
1025void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, 1144void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb,
1026 struct ieee80211_rx_status *status); 1145 struct ieee80211_rx_status *status);
1146
1147/**
1148 * ieee80211_rx - receive frame
1149 *
1150 * Use this function to hand received frames to mac80211. The receive
1151 * buffer in @skb must start with an IEEE 802.11 header or a radiotap
1152 * header if %RX_FLAG_RADIOTAP is set in the @status flags.
1153 *
1154 * This function may not be called in IRQ context.
1155 *
1156 * @hw: the hardware this frame came in on
1157 * @skb: the buffer to receive, owned by mac80211 after this call
1158 * @status: status of this frame; the status pointer need not be valid
1159 * after this function returns
1160 */
1161static inline void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb,
1162 struct ieee80211_rx_status *status)
1163{
1164 __ieee80211_rx(hw, skb, status);
1165}
1166
1167/**
1168 * ieee80211_rx_irqsafe - receive frame
1169 *
1170 * Like ieee80211_rx() but can be called in IRQ context
1171 * (internally defers to a workqueue.)
1172 *
1173 * @hw: the hardware this frame came in on
1174 * @skb: the buffer to receive, owned by mac80211 after this call
1175 * @status: status of this frame; the status pointer need not be valid
1176 * after this function returns and is not freed by mac80211,
1177 * it is recommended that it points to a stack area
1178 */
1027void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, 1179void ieee80211_rx_irqsafe(struct ieee80211_hw *hw,
1028 struct sk_buff *skb, 1180 struct sk_buff *skb,
1029 struct ieee80211_rx_status *status); 1181 struct ieee80211_rx_status *status);
1030 1182
1031/* Transmit status callback function. The low-level driver must call this 1183/**
1032 * function to report transmit status for all the TX frames that had 1184 * ieee80211_tx_status - transmit status callback
1033 * req_tx_status set in the transmit control fields. In addition, this should 1185 *
1034 * be called at least for all unicast frames to provide information for TX rate 1186 * Call this function for all transmitted frames after they have been
1035 * control algorithm. In order to maintain all statistics, this function is 1187 * transmitted. It is permissible to not call this function for
1036 * recommended to be called after each frame, including multicast/broadcast, is 1188 * multicast frames but this can affect statistics.
1037 * sent. */ 1189 *
1190 * @hw: the hardware the frame was transmitted by
1191 * @skb: the frame that was transmitted, owned by mac80211 after this call
1192 * @status: status information for this frame; the status pointer need not
1193 * be valid after this function returns and is not freed by mac80211,
1194 * it is recommended that it points to a stack area
1195 */
1038void ieee80211_tx_status(struct ieee80211_hw *hw, 1196void ieee80211_tx_status(struct ieee80211_hw *hw,
1039 struct sk_buff *skb, 1197 struct sk_buff *skb,
1040 struct ieee80211_tx_status *status); 1198 struct ieee80211_tx_status *status);
@@ -1166,14 +1324,26 @@ struct sk_buff *
1166ieee80211_get_buffered_bc(struct ieee80211_hw *hw, int if_id, 1324ieee80211_get_buffered_bc(struct ieee80211_hw *hw, int if_id,
1167 struct ieee80211_tx_control *control); 1325 struct ieee80211_tx_control *control);
1168 1326
1169/* Given an sk_buff with a raw 802.11 header at the data pointer this function 1327/**
1328 * ieee80211_get_hdrlen_from_skb - get header length from data
1329 *
1330 * Given an skb with a raw 802.11 header at the data pointer this function
1170 * returns the 802.11 header length in bytes (not including encryption 1331 * returns the 802.11 header length in bytes (not including encryption
1171 * headers). If the data in the sk_buff is too short to contain a valid 802.11 1332 * headers). If the data in the sk_buff is too short to contain a valid 802.11
1172 * header the function returns 0. 1333 * header the function returns 0.
1334 *
1335 * @skb: the frame
1173 */ 1336 */
1174int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); 1337int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb);
1175 1338
1176/* Like ieee80211_get_hdrlen_from_skb() but takes a FC in CPU order. */ 1339/**
1340 * ieee80211_get_hdrlen - get header length from frame control
1341 *
1342 * This function returns the 802.11 header length in bytes (not including
1343 * encryption headers.)
1344 *
1345 * @fc: the frame control field (in CPU endianness)
1346 */
1177int ieee80211_get_hdrlen(u16 fc); 1347int ieee80211_get_hdrlen(u16 fc);
1178 1348
1179/** 1349/**
@@ -1218,10 +1388,28 @@ void ieee80211_stop_queues(struct ieee80211_hw *hw);
1218 */ 1388 */
1219void ieee80211_wake_queues(struct ieee80211_hw *hw); 1389void ieee80211_wake_queues(struct ieee80211_hw *hw);
1220 1390
1221/* called by driver to notify scan status completed */ 1391/**
1392 * ieee80211_scan_completed - completed hardware scan
1393 *
1394 * When hardware scan offload is used (i.e. the hw_scan() callback is
1395 * assigned) this function needs to be called by the driver to notify
1396 * mac80211 that the scan finished.
1397 *
1398 * @hw: the hardware that finished the scan
1399 */
1222void ieee80211_scan_completed(struct ieee80211_hw *hw); 1400void ieee80211_scan_completed(struct ieee80211_hw *hw);
1223 1401
1224/* return a pointer to the source address (SA) */ 1402/**
1403 * ieee80211_get_SA - get pointer to SA
1404 *
1405 * Given an 802.11 frame, this function returns the offset
1406 * to the source address (SA). It does not verify that the
1407 * header is long enough to contain the address, and the
1408 * header must be long enough to contain the frame control
1409 * field.
1410 *
1411 * @hdr: the frame
1412 */
1225static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr) 1413static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr)
1226{ 1414{
1227 u8 *raw = (u8 *) hdr; 1415 u8 *raw = (u8 *) hdr;
@@ -1236,7 +1424,17 @@ static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr)
1236 return hdr->addr2; 1424 return hdr->addr2;
1237} 1425}
1238 1426
1239/* return a pointer to the destination address (DA) */ 1427/**
1428 * ieee80211_get_DA - get pointer to DA
1429 *
1430 * Given an 802.11 frame, this function returns the offset
1431 * to the destination address (DA). It does not verify that
1432 * the header is long enough to contain the address, and the
1433 * header must be long enough to contain the frame control
1434 * field.
1435 *
1436 * @hdr: the frame
1437 */
1240static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr) 1438static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr)
1241{ 1439{
1242 u8 *raw = (u8 *) hdr; 1440 u8 *raw = (u8 *) hdr;
@@ -1247,6 +1445,14 @@ static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr)
1247 return hdr->addr1; 1445 return hdr->addr1;
1248} 1446}
1249 1447
1448/**
1449 * ieee80211_get_morefrag - determine whether the MOREFRAGS bit is set
1450 *
1451 * This function determines whether the "more fragments" bit is set
1452 * in the frame.
1453 *
1454 * @hdr: the frame
1455 */
1250static inline int ieee80211_get_morefrag(struct ieee80211_hdr *hdr) 1456static inline int ieee80211_get_morefrag(struct ieee80211_hdr *hdr)
1251{ 1457{
1252 return (le16_to_cpu(hdr->frame_control) & 1458 return (le16_to_cpu(hdr->frame_control) &