Commit 6b301cdf authored by Johannes Berg's avatar Johannes Berg Committed by David S. Miller

[MAC80211]: yet more documentation

Add more mac80211 documentation.
Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarMichael Wu <flamingice@sourmilk.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c33e3f3b
...@@ -98,42 +98,96 @@ struct ieee80211_rate { ...@@ -98,42 +98,96 @@ struct ieee80211_rate {
* optimizing channel utilization estimates */ * optimizing channel utilization estimates */
}; };
/* 802.11g is backwards-compatible with 802.11b, so a wlan card can /**
* actually be both in 11b and 11g modes at the same time. */ * enum ieee80211_phymode - PHY modes
*
* @MODE_IEEE80211A: 5GHz as defined by 802.11a/802.11h
* @MODE_IEEE80211B: 2.4 GHz as defined by 802.11b
* @MODE_IEEE80211G: 2.4 GHz as defined by 802.11g (with OFDM),
* backwards compatible with 11b mode
* @NUM_IEEE80211_MODES: internal
*/
enum ieee80211_phymode { enum ieee80211_phymode {
MODE_IEEE80211A, /* IEEE 802.11a */ MODE_IEEE80211A,
MODE_IEEE80211B, /* IEEE 802.11b only */ MODE_IEEE80211B,
MODE_IEEE80211G, /* IEEE 802.11g (and 802.11b compatibility) */ MODE_IEEE80211G,
/* keep last */ /* keep last */
NUM_IEEE80211_MODES NUM_IEEE80211_MODES
}; };
/**
* struct ieee80211_hw_mode - PHY mode definition
*
* This structure describes the capabilities supported by the device
* in a single PHY mode.
*
* @mode: the PHY mode for this definition
* @num_channels: number of supported channels
* @channels: pointer to array of supported channels
* @num_rates: number of supported bitrates
* @rates: pointer to array of supported bitrates
* @list: internal
*/
struct ieee80211_hw_mode { struct ieee80211_hw_mode {
int mode; /* MODE_IEEE80211... */ struct list_head list;
int num_channels; /* Number of channels (below) */ struct ieee80211_channel *channels;
struct ieee80211_channel *channels; /* Array of supported channels */ struct ieee80211_rate *rates;
int num_rates; /* Number of rates (below) */ enum ieee80211_phymode mode;
struct ieee80211_rate *rates; /* Array of supported rates */ int num_channels;
int num_rates;
struct list_head list; /* Internal, don't touch */
}; };
/**
* struct ieee80211_tx_queue_params - transmit queue configuration
*
* The information provided in this structure is required for QoS
* transmit queue configuration.
*
* @aifs: arbitration interface space [0..255, -1: use default]
* @cw_min: minimum contention window [will be a value of the form
* 2^n-1 in the range 1..1023; 0: use default]
* @cw_max: maximum contention window [like @cw_min]
* @burst_time: maximum burst time in units of 0.1ms, 0 meaning disabled
*/
struct ieee80211_tx_queue_params { struct ieee80211_tx_queue_params {
int aifs; /* 0 .. 255; -1 = use default */ int aifs;
int cw_min; /* 2^n-1: 1, 3, 7, .. , 1023; 0 = use default */ int cw_min;
int cw_max; /* 2^n-1: 1, 3, 7, .. , 1023; 0 = use default */ int cw_max;
int burst_time; /* maximum burst time in 0.1 ms (i.e., 10 = 1 ms); int burst_time;
* 0 = disabled */
}; };
/**
* struct ieee80211_tx_queue_stats_data - transmit queue statistics
*
* @len: number of packets in queue
* @limit: queue length limit
* @count: number of frames sent
*/
struct ieee80211_tx_queue_stats_data { struct ieee80211_tx_queue_stats_data {
unsigned int len; /* num packets in queue */ unsigned int len;
unsigned int limit; /* queue len (soft) limit */ unsigned int limit;
unsigned int count; /* total num frames sent */ unsigned int count;
}; };
enum { /**
* enum ieee80211_tx_queue - transmit queue number
*
* These constants are used with some callbacks that take a
* queue number to set parameters for a queue.
*
* @IEEE80211_TX_QUEUE_DATA0: data queue 0
* @IEEE80211_TX_QUEUE_DATA1: data queue 1
* @IEEE80211_TX_QUEUE_DATA2: data queue 2
* @IEEE80211_TX_QUEUE_DATA3: data queue 3
* @IEEE80211_TX_QUEUE_DATA4: data queue 4
* @IEEE80211_TX_QUEUE_SVP: ??
* @NUM_TX_DATA_QUEUES: number of data queues
* @IEEE80211_TX_QUEUE_AFTER_BEACON: transmit queue for frames to be
* sent after a beacon
* @IEEE80211_TX_QUEUE_BEACON: transmit queue for beacon frames
*/
enum ieee80211_tx_queue {
IEEE80211_TX_QUEUE_DATA0, IEEE80211_TX_QUEUE_DATA0,
IEEE80211_TX_QUEUE_DATA1, IEEE80211_TX_QUEUE_DATA1,
IEEE80211_TX_QUEUE_DATA2, IEEE80211_TX_QUEUE_DATA2,
...@@ -271,7 +325,7 @@ struct ieee80211_rx_status { ...@@ -271,7 +325,7 @@ struct ieee80211_rx_status {
u64 mactime; u64 mactime;
int freq; int freq;
int channel; int channel;
int phymode; enum ieee80211_phymode phymode;
int ssi; int ssi;
int signal; int signal;
int noise; int noise;
...@@ -280,25 +334,65 @@ struct ieee80211_rx_status { ...@@ -280,25 +334,65 @@ struct ieee80211_rx_status {
int flag; int flag;
}; };
/* Transmit status. The low-level driver should provide this information /**
* (the subset supported by hardware) to the 802.11 code for each transmit * enum ieee80211_tx_status_flags - transmit status flags
* frame. */ *
* Status flags to indicate various transmit conditions.
*
* @IEEE80211_TX_STATUS_TX_FILTERED: The frame was not transmitted
* because the destination STA was in powersave mode.
*
* @IEEE80211_TX_STATUS_ACK: Frame was acknowledged
*/
enum ieee80211_tx_status_flags {
IEEE80211_TX_STATUS_TX_FILTERED = 1<<0,
IEEE80211_TX_STATUS_ACK = 1<<1,
};
/**
* struct ieee80211_tx_status - transmit status
*
* As much information as possible should be provided for each transmitted
* frame with ieee80211_tx_status().
*
* @control: a copy of the &struct ieee80211_tx_control passed to the driver
* in the tx() callback.
*
* @flags: transmit status flags, defined above
*
* @ack_signal: signal strength of the ACK frame
*
* @excessive_retries: set to 1 if the frame was retried many times
* but not acknowledged
*
* @retry_count: number of retries
*
* @queue_length: ?? REMOVE
* @queue_number: ?? REMOVE
*/
struct ieee80211_tx_status { struct ieee80211_tx_status {
/* copied ieee80211_tx_control structure */
struct ieee80211_tx_control control; struct ieee80211_tx_control control;
u8 flags;
#define IEEE80211_TX_STATUS_TX_FILTERED (1<<0) bool excessive_retries;
#define IEEE80211_TX_STATUS_ACK (1<<1) /* whether the TX frame was ACKed */ u8 retry_count;
u32 flags; /* tx staus flags defined above */ int ack_signal;
int queue_length;
int ack_signal; /* measured signal strength of the ACK frame */
int excessive_retries;
int retry_count;
int queue_length; /* information about TX queue */
int queue_number; int queue_number;
}; };
/**
* enum ieee80211_conf_flags - configuration flags
*
* Flags to define PHY configuration options
*
* @IEEE80211_CONF_SHORT_SLOT_TIME: use 802.11g short slot time
* @IEEE80211_CONF_RADIOTAP: add radiotap header at receive time (if supported)
*
*/
enum ieee80211_conf_flags {
IEEE80211_CONF_SHORT_SLOT_TIME = 1<<0,
IEEE80211_CONF_RADIOTAP = 1<<1,
};
/** /**
* struct ieee80211_conf - configuration of the device * struct ieee80211_conf - configuration of the device
...@@ -306,31 +400,37 @@ struct ieee80211_tx_status { ...@@ -306,31 +400,37 @@ struct ieee80211_tx_status {
* This struct indicates how the driver shall configure the hardware. * This struct indicates how the driver shall configure the hardware.
* *
* @radio_enabled: when zero, driver is required to switch off the radio. * @radio_enabled: when zero, driver is required to switch off the radio.
* TODO make a flag
* @channel: IEEE 802.11 channel number
* @freq: frequency in MHz
* @channel_val: hardware specific channel value for the channel
* @phymode: PHY mode to activate (REMOVE)
* @chan: channel to switch to, pointer to the channel information
* @mode: pointer to mode definition
* @regulatory_domain: ??
* @beacon_int: beacon interval (TODO make interface config)
* @flags: configuration flags defined above
* @power_level: transmit power limit for current regulatory domain in dBm
* @antenna_max: maximum antenna gain
* @antenna_sel_tx: transmit antenna selection, 0: default/diversity,
* 1/2: antenna 0/1
* @antenna_sel_rx: receive antenna selection, like @antenna_sel_tx
*/ */
struct ieee80211_conf { struct ieee80211_conf {
int channel; /* IEEE 802.11 channel number */ int channel; /* IEEE 802.11 channel number */
int freq; /* MHz */ int freq; /* MHz */
int channel_val; /* hw specific value for the channel */ int channel_val; /* hw specific value for the channel */
int phymode; /* MODE_IEEE80211A, .. */ enum ieee80211_phymode phymode;
struct ieee80211_channel *chan; struct ieee80211_channel *chan;
struct ieee80211_hw_mode *mode; struct ieee80211_hw_mode *mode;
unsigned int regulatory_domain; unsigned int regulatory_domain;
int radio_enabled; int radio_enabled;
int beacon_int; int beacon_int;
u32 flags;
#define IEEE80211_CONF_SHORT_SLOT_TIME (1<<0) /* use IEEE 802.11g Short Slot u8 power_level;
* Time */ u8 antenna_max;
#define IEEE80211_CONF_RADIOTAP (1<<1) /* use radiotap if supported
check this bit at RX time */
u32 flags; /* configuration flags defined above */
u8 power_level; /* transmit power limit for current
* regulatory domain; in dBm */
u8 antenna_max; /* maximum antenna gain */
/* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */
u8 antenna_sel_tx; u8 antenna_sel_tx;
u8 antenna_sel_rx; u8 antenna_sel_rx;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment