Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2008 Atheros Communications Inc.
|
||||
* Copyright (c) 2009 Gabor Juhos <juhosg@openwrt.org>
|
||||
* Copyright (c) 2009 Imre Kaloz <kaloz@openwrt.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_ATH9K_PLATFORM_H
|
||||
#define _LINUX_ATH9K_PLATFORM_H
|
||||
|
||||
#define ATH9K_PLAT_EEP_MAX_WORDS 2048
|
||||
|
||||
struct ath9k_platform_data {
|
||||
u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS];
|
||||
};
|
||||
|
||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
||||
@@ -527,6 +527,8 @@ struct ieee80211_tim_ie {
|
||||
u8 virtual_map[0];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#define WLAN_SA_QUERY_TR_ID_LEN 16
|
||||
|
||||
struct ieee80211_mgmt {
|
||||
__le16 frame_control;
|
||||
__le16 duration;
|
||||
@@ -646,6 +648,10 @@ struct ieee80211_mgmt {
|
||||
u8 action_code;
|
||||
u8 variable[0];
|
||||
} __attribute__((packed)) mesh_action;
|
||||
struct {
|
||||
u8 action;
|
||||
u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
|
||||
} __attribute__ ((packed)) sa_query;
|
||||
} u;
|
||||
} __attribute__ ((packed)) action;
|
||||
} u;
|
||||
@@ -655,6 +661,15 @@ struct ieee80211_mgmt {
|
||||
#define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u)
|
||||
|
||||
|
||||
/* Management MIC information element (IEEE 802.11w) */
|
||||
struct ieee80211_mmie {
|
||||
u8 element_id;
|
||||
u8 length;
|
||||
__le16 key_id;
|
||||
u8 sequence_number[6];
|
||||
u8 mic[8];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* Control frames */
|
||||
struct ieee80211_rts {
|
||||
__le16 frame_control;
|
||||
@@ -899,6 +914,9 @@ enum ieee80211_statuscode {
|
||||
/* 802.11g */
|
||||
WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25,
|
||||
WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26,
|
||||
/* 802.11w */
|
||||
WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY = 30,
|
||||
WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION = 31,
|
||||
/* 802.11i */
|
||||
WLAN_STATUS_INVALID_IE = 40,
|
||||
WLAN_STATUS_INVALID_GROUP_CIPHER = 41,
|
||||
@@ -1018,6 +1036,8 @@ enum ieee80211_eid {
|
||||
WLAN_EID_HT_INFORMATION = 61,
|
||||
/* 802.11i */
|
||||
WLAN_EID_RSN = 48,
|
||||
WLAN_EID_TIMEOUT_INTERVAL = 56,
|
||||
WLAN_EID_MMIE = 76 /* 802.11w */,
|
||||
WLAN_EID_WPA = 221,
|
||||
WLAN_EID_GENERIC = 221,
|
||||
WLAN_EID_VENDOR_SPECIFIC = 221,
|
||||
@@ -1030,6 +1050,8 @@ enum ieee80211_category {
|
||||
WLAN_CATEGORY_QOS = 1,
|
||||
WLAN_CATEGORY_DLS = 2,
|
||||
WLAN_CATEGORY_BACK = 3,
|
||||
WLAN_CATEGORY_PUBLIC = 4,
|
||||
WLAN_CATEGORY_SA_QUERY = 8,
|
||||
WLAN_CATEGORY_WMM = 17,
|
||||
};
|
||||
|
||||
@@ -1104,6 +1126,12 @@ struct ieee80211_country_ie_triplet {
|
||||
};
|
||||
} __attribute__ ((packed));
|
||||
|
||||
enum ieee80211_timeout_interval_type {
|
||||
WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */,
|
||||
WLAN_TIMEOUT_KEY_LIFETIME = 2 /* 802.11r */,
|
||||
WLAN_TIMEOUT_ASSOC_COMEBACK = 3 /* 802.11w */,
|
||||
};
|
||||
|
||||
/* BACK action code */
|
||||
enum ieee80211_back_actioncode {
|
||||
WLAN_ACTION_ADDBA_REQ = 0,
|
||||
@@ -1118,6 +1146,13 @@ enum ieee80211_back_parties {
|
||||
WLAN_BACK_TIMER = 2,
|
||||
};
|
||||
|
||||
/* SA Query action */
|
||||
enum ieee80211_sa_query_action {
|
||||
WLAN_ACTION_SA_QUERY_REQUEST = 0,
|
||||
WLAN_ACTION_SA_QUERY_RESPONSE = 1,
|
||||
};
|
||||
|
||||
|
||||
/* A-MSDU 802.11n */
|
||||
#define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080
|
||||
|
||||
@@ -1128,6 +1163,7 @@ enum ieee80211_back_parties {
|
||||
/* reserved: 0x000FAC03 */
|
||||
#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04
|
||||
#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05
|
||||
#define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06
|
||||
|
||||
#define WLAN_MAX_KEY_LEN 32
|
||||
|
||||
@@ -1185,4 +1221,149 @@ static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr)
|
||||
return hdr->addr1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_is_robust_mgmt_frame - check if frame is a robust management frame
|
||||
* @hdr: the frame (buffer must include at least the first octet of payload)
|
||||
*/
|
||||
static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)
|
||||
{
|
||||
if (ieee80211_is_disassoc(hdr->frame_control) ||
|
||||
ieee80211_is_deauth(hdr->frame_control))
|
||||
return true;
|
||||
|
||||
if (ieee80211_is_action(hdr->frame_control)) {
|
||||
u8 *category;
|
||||
|
||||
/*
|
||||
* Action frames, excluding Public Action frames, are Robust
|
||||
* Management Frames. However, if we are looking at a Protected
|
||||
* frame, skip the check since the data may be encrypted and
|
||||
* the frame has already been found to be a Robust Management
|
||||
* Frame (by the other end).
|
||||
*/
|
||||
if (ieee80211_has_protected(hdr->frame_control))
|
||||
return true;
|
||||
category = ((u8 *) hdr) + 24;
|
||||
return *category != WLAN_CATEGORY_PUBLIC;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_fhss_chan_to_freq - get channel frequency
|
||||
* @channel: the FHSS channel
|
||||
*
|
||||
* Convert IEEE802.11 FHSS channel to frequency (MHz)
|
||||
* Ref IEEE 802.11-2007 section 14.6
|
||||
*/
|
||||
static inline int ieee80211_fhss_chan_to_freq(int channel)
|
||||
{
|
||||
if ((channel > 1) && (channel < 96))
|
||||
return channel + 2400;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_freq_to_fhss_chan - get channel
|
||||
* @freq: the channels frequency
|
||||
*
|
||||
* Convert frequency (MHz) to IEEE802.11 FHSS channel
|
||||
* Ref IEEE 802.11-2007 section 14.6
|
||||
*/
|
||||
static inline int ieee80211_freq_to_fhss_chan(int freq)
|
||||
{
|
||||
if ((freq > 2401) && (freq < 2496))
|
||||
return freq - 2400;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_dsss_chan_to_freq - get channel center frequency
|
||||
* @channel: the DSSS channel
|
||||
*
|
||||
* Convert IEEE802.11 DSSS channel to the center frequency (MHz).
|
||||
* Ref IEEE 802.11-2007 section 15.6
|
||||
*/
|
||||
static inline int ieee80211_dsss_chan_to_freq(int channel)
|
||||
{
|
||||
if ((channel > 0) && (channel < 14))
|
||||
return 2407 + (channel * 5);
|
||||
else if (channel == 14)
|
||||
return 2484;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_freq_to_dsss_chan - get channel
|
||||
* @freq: the frequency
|
||||
*
|
||||
* Convert frequency (MHz) to IEEE802.11 DSSS channel
|
||||
* Ref IEEE 802.11-2007 section 15.6
|
||||
*
|
||||
* This routine selects the channel with the closest center frequency.
|
||||
*/
|
||||
static inline int ieee80211_freq_to_dsss_chan(int freq)
|
||||
{
|
||||
if ((freq >= 2410) && (freq < 2475))
|
||||
return (freq - 2405) / 5;
|
||||
else if ((freq >= 2482) && (freq < 2487))
|
||||
return 14;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Convert IEEE802.11 HR DSSS channel to frequency (MHz) and back
|
||||
* Ref IEEE 802.11-2007 section 18.4.6.2
|
||||
*
|
||||
* The channels and frequencies are the same as those defined for DSSS
|
||||
*/
|
||||
#define ieee80211_hr_chan_to_freq(chan) ieee80211_dsss_chan_to_freq(chan)
|
||||
#define ieee80211_freq_to_hr_chan(freq) ieee80211_freq_to_dsss_chan(freq)
|
||||
|
||||
/* Convert IEEE802.11 ERP channel to frequency (MHz) and back
|
||||
* Ref IEEE 802.11-2007 section 19.4.2
|
||||
*/
|
||||
#define ieee80211_erp_chan_to_freq(chan) ieee80211_hr_chan_to_freq(chan)
|
||||
#define ieee80211_freq_to_erp_chan(freq) ieee80211_freq_to_hr_chan(freq)
|
||||
|
||||
/**
|
||||
* ieee80211_ofdm_chan_to_freq - get channel center frequency
|
||||
* @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
|
||||
* @channel: the OFDM channel
|
||||
*
|
||||
* Convert IEEE802.11 OFDM channel to center frequency (MHz)
|
||||
* Ref IEEE 802.11-2007 section 17.3.8.3.2
|
||||
*/
|
||||
static inline int ieee80211_ofdm_chan_to_freq(int s_freq, int channel)
|
||||
{
|
||||
if ((channel > 0) && (channel <= 200) &&
|
||||
(s_freq >= 4000))
|
||||
return s_freq + (channel * 5);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_freq_to_ofdm_channel - get channel
|
||||
* @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
|
||||
* @freq: the frequency
|
||||
*
|
||||
* Convert frequency (MHz) to IEEE802.11 OFDM channel
|
||||
* Ref IEEE 802.11-2007 section 17.3.8.3.2
|
||||
*
|
||||
* This routine selects the channel with the closest center frequency.
|
||||
*/
|
||||
static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq)
|
||||
{
|
||||
if ((freq > (s_freq + 2)) && (freq <= (s_freq + 1202)) &&
|
||||
(s_freq >= 4000))
|
||||
return (freq + 2 - s_freq) / 5;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif /* LINUX_IEEE80211_H */
|
||||
|
||||
+31
-5
@@ -47,7 +47,7 @@
|
||||
* @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or
|
||||
* %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME,
|
||||
* %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, and/or
|
||||
* %NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET.
|
||||
* %NL80211_ATTR_WIPHY_CHANNEL_TYPE.
|
||||
* @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request
|
||||
* or rename notification. Has attributes %NL80211_ATTR_WIPHY and
|
||||
* %NL80211_ATTR_WIPHY_NAME.
|
||||
@@ -72,8 +72,8 @@
|
||||
*
|
||||
* @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
|
||||
* by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
|
||||
* @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT or
|
||||
* %NL80211_ATTR_KEY_THRESHOLD.
|
||||
* @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT,
|
||||
* %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD.
|
||||
* @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
|
||||
* %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC and %NL80211_ATTR_KEY_CIPHER
|
||||
* attributes.
|
||||
@@ -84,7 +84,7 @@
|
||||
* %NL80222_CMD_NEW_BEACON message)
|
||||
* @NL80211_CMD_SET_BEACON: set the beacon on an access point interface
|
||||
* using the %NL80211_ATTR_BEACON_INTERVAL, %NL80211_ATTR_DTIM_PERIOD,
|
||||
* %NL80211_BEACON_HEAD and %NL80211_BEACON_TAIL attributes.
|
||||
* %NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL attributes.
|
||||
* @NL80211_CMD_NEW_BEACON: add a new beacon to an access point interface,
|
||||
* parameters are like for %NL80211_CMD_SET_BEACON.
|
||||
* @NL80211_CMD_DEL_BEACON: remove the beacon, stop sending it
|
||||
@@ -133,6 +133,14 @@
|
||||
* @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the
|
||||
* interface identified by %NL80211_ATTR_IFINDEX
|
||||
*
|
||||
* @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The
|
||||
* interface is identified with %NL80211_ATTR_IFINDEX and the management
|
||||
* frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be
|
||||
* added to the end of the specified management frame is specified with
|
||||
* %NL80211_ATTR_IE. If the command succeeds, the requested data will be
|
||||
* added to all specified management frames generated by
|
||||
* kernel/firmware/driver.
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -178,6 +186,8 @@ enum nl80211_commands {
|
||||
NL80211_CMD_GET_MESH_PARAMS,
|
||||
NL80211_CMD_SET_MESH_PARAMS,
|
||||
|
||||
NL80211_CMD_SET_MGMT_EXTRA_IE,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
@@ -190,6 +200,7 @@ enum nl80211_commands {
|
||||
* here
|
||||
*/
|
||||
#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS
|
||||
#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE
|
||||
|
||||
/**
|
||||
* enum nl80211_attrs - nl80211 netlink attributes
|
||||
@@ -284,6 +295,12 @@ enum nl80211_commands {
|
||||
* supported interface types, each a flag attribute with the number
|
||||
* of the interface mode.
|
||||
*
|
||||
* @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for
|
||||
* %NL80211_CMD_SET_MGMT_EXTRA_IE.
|
||||
*
|
||||
* @NL80211_ATTR_IE: Information element(s) data (used, e.g., with
|
||||
* %NL80211_CMD_SET_MGMT_EXTRA_IE).
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -346,6 +363,11 @@ enum nl80211_attrs {
|
||||
NL80211_ATTR_WIPHY_FREQ,
|
||||
NL80211_ATTR_WIPHY_CHANNEL_TYPE,
|
||||
|
||||
NL80211_ATTR_KEY_DEFAULT_MGMT,
|
||||
|
||||
NL80211_ATTR_MGMT_SUBTYPE,
|
||||
NL80211_ATTR_IE,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
@@ -360,7 +382,9 @@ enum nl80211_attrs {
|
||||
#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES
|
||||
#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS
|
||||
#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ
|
||||
#define NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET NL80211_ATTR_WIPHY_SEC_CHAN_OFFSET
|
||||
#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE
|
||||
#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE
|
||||
#define NL80211_ATTR_IE NL80211_ATTR_IE
|
||||
|
||||
#define NL80211_MAX_SUPP_RATES 32
|
||||
#define NL80211_MAX_SUPP_REG_RULES 32
|
||||
@@ -412,12 +436,14 @@ enum nl80211_iftype {
|
||||
* @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
|
||||
* with short barker preamble
|
||||
* @NL80211_STA_FLAG_WME: station is WME/QoS capable
|
||||
* @NL80211_STA_FLAG_MFP: station uses management frame protection
|
||||
*/
|
||||
enum nl80211_sta_flags {
|
||||
__NL80211_STA_FLAG_INVALID,
|
||||
NL80211_STA_FLAG_AUTHORIZED,
|
||||
NL80211_STA_FLAG_SHORT_PREAMBLE,
|
||||
NL80211_STA_FLAG_WME,
|
||||
NL80211_STA_FLAG_MFP,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_FLAG_AFTER_LAST,
|
||||
|
||||
@@ -834,6 +834,8 @@
|
||||
#define PCI_DEVICE_ID_PROMISE_20276 0x5275
|
||||
#define PCI_DEVICE_ID_PROMISE_20277 0x7275
|
||||
|
||||
#define PCI_VENDOR_ID_FOXCONN 0x105b
|
||||
|
||||
#define PCI_VENDOR_ID_UMC 0x1060
|
||||
#define PCI_DEVICE_ID_UMC_UM8673F 0x0101
|
||||
#define PCI_DEVICE_ID_UMC_UM8886BF 0x673a
|
||||
@@ -1969,6 +1971,8 @@
|
||||
|
||||
#define PCI_VENDOR_ID_SAMSUNG 0x144d
|
||||
|
||||
#define PCI_VENDOR_ID_AMBIT 0x1468
|
||||
|
||||
#define PCI_VENDOR_ID_MYRICOM 0x14c1
|
||||
|
||||
#define PCI_VENDOR_ID_TITAN 0x14D2
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* board-specific data for the libertas_spi driver.
|
||||
*
|
||||
* Copyright 2008 Analog Devices Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or (at
|
||||
* your option) any later version.
|
||||
*/
|
||||
#ifndef _LIBERTAS_SPI_H_
|
||||
#define _LIBERTAS_SPI_H_
|
||||
struct libertas_spi_platform_data {
|
||||
/* There are two ways to read data from the WLAN module's SPI
|
||||
* interface. Setting 0 or 1 here controls which one is used.
|
||||
*
|
||||
* Usually you want to set use_dummy_writes = 1.
|
||||
* However, if that doesn't work or if you are using a slow SPI clock
|
||||
* speed, you may want to use 0 here. */
|
||||
u16 use_dummy_writes;
|
||||
|
||||
/* GPIO number to use as chip select */
|
||||
u16 gpio_cs;
|
||||
};
|
||||
#endif
|
||||
@@ -326,6 +326,42 @@
|
||||
#define SSB_SPROM5_GPIOB_P3 0xFF00 /* Pin 3 */
|
||||
#define SSB_SPROM5_GPIOB_P3_SHIFT 8
|
||||
|
||||
/* SPROM Revision 8 */
|
||||
#define SSB_SPROM8_BFLLO 0x1084 /* Boardflags (low 16 bits) */
|
||||
#define SSB_SPROM8_BFLHI 0x1086 /* Boardflags Hi */
|
||||
#define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */
|
||||
#define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */
|
||||
#define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/
|
||||
#define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */
|
||||
#define SSB_SPROM8_ANTAVAIL_A_SHIFT 8
|
||||
#define SSB_SPROM8_ANTAVAIL_BG 0x00FF /* B-PHY and G-PHY bitfield */
|
||||
#define SSB_SPROM8_ANTAVAIL_BG_SHIFT 0
|
||||
#define SSB_SPROM8_AGAIN01 0x109E /* Antenna Gain (in dBm Q5.2) */
|
||||
#define SSB_SPROM8_AGAIN0 0x00FF /* Antenna 0 */
|
||||
#define SSB_SPROM8_AGAIN0_SHIFT 0
|
||||
#define SSB_SPROM8_AGAIN1 0xFF00 /* Antenna 1 */
|
||||
#define SSB_SPROM8_AGAIN1_SHIFT 8
|
||||
#define SSB_SPROM8_AGAIN23 0x10A0
|
||||
#define SSB_SPROM8_AGAIN2 0x00FF /* Antenna 2 */
|
||||
#define SSB_SPROM8_AGAIN2_SHIFT 0
|
||||
#define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */
|
||||
#define SSB_SPROM8_AGAIN3_SHIFT 8
|
||||
#define SSB_SPROM8_GPIOA 0x1096 /*Gen. Purpose IO # 0 and 1 */
|
||||
#define SSB_SPROM8_GPIOA_P0 0x00FF /* Pin 0 */
|
||||
#define SSB_SPROM8_GPIOA_P1 0xFF00 /* Pin 1 */
|
||||
#define SSB_SPROM8_GPIOA_P1_SHIFT 8
|
||||
#define SSB_SPROM8_GPIOB 0x1098 /* Gen. Purpose IO # 2 and 3 */
|
||||
#define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */
|
||||
#define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */
|
||||
#define SSB_SPROM8_GPIOB_P3_SHIFT 8
|
||||
#define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power BG in path 1 */
|
||||
#define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */
|
||||
#define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */
|
||||
#define SSB_SPROM8_ITSSI_BG_SHIFT 8
|
||||
#define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power A in path 1 */
|
||||
#define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power A */
|
||||
#define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */
|
||||
#define SSB_SPROM8_ITSSI_A_SHIFT 8
|
||||
|
||||
/* Values for SSB_SPROM1_BINF_CCODE */
|
||||
enum {
|
||||
|
||||
@@ -577,18 +577,22 @@
|
||||
#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8
|
||||
#define IW_AUTH_ROAMING_CONTROL 9
|
||||
#define IW_AUTH_PRIVACY_INVOKED 10
|
||||
#define IW_AUTH_CIPHER_GROUP_MGMT 11
|
||||
#define IW_AUTH_MFP 12
|
||||
|
||||
/* IW_AUTH_WPA_VERSION values (bit field) */
|
||||
#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001
|
||||
#define IW_AUTH_WPA_VERSION_WPA 0x00000002
|
||||
#define IW_AUTH_WPA_VERSION_WPA2 0x00000004
|
||||
|
||||
/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */
|
||||
/* IW_AUTH_PAIRWISE_CIPHER, IW_AUTH_GROUP_CIPHER, and IW_AUTH_CIPHER_GROUP_MGMT
|
||||
* values (bit field) */
|
||||
#define IW_AUTH_CIPHER_NONE 0x00000001
|
||||
#define IW_AUTH_CIPHER_WEP40 0x00000002
|
||||
#define IW_AUTH_CIPHER_TKIP 0x00000004
|
||||
#define IW_AUTH_CIPHER_CCMP 0x00000008
|
||||
#define IW_AUTH_CIPHER_WEP104 0x00000010
|
||||
#define IW_AUTH_CIPHER_AES_CMAC 0x00000020
|
||||
|
||||
/* IW_AUTH_KEY_MGMT values (bit field) */
|
||||
#define IW_AUTH_KEY_MGMT_802_1X 1
|
||||
@@ -604,6 +608,11 @@
|
||||
#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming
|
||||
* control */
|
||||
|
||||
/* IW_AUTH_MFP (management frame protection) values */
|
||||
#define IW_AUTH_MFP_DISABLED 0 /* MFP disabled */
|
||||
#define IW_AUTH_MFP_OPTIONAL 1 /* MFP optional */
|
||||
#define IW_AUTH_MFP_REQUIRED 2 /* MFP required */
|
||||
|
||||
/* SIOCSIWENCODEEXT definitions */
|
||||
#define IW_ENCODE_SEQ_MAX_SIZE 8
|
||||
/* struct iw_encode_ext ->alg */
|
||||
@@ -612,6 +621,7 @@
|
||||
#define IW_ENCODE_ALG_TKIP 2
|
||||
#define IW_ENCODE_ALG_CCMP 3
|
||||
#define IW_ENCODE_ALG_PMK 4
|
||||
#define IW_ENCODE_ALG_AES_CMAC 5
|
||||
/* struct iw_encode_ext ->ext_flags */
|
||||
#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001
|
||||
#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002
|
||||
|
||||
@@ -112,12 +112,14 @@ struct beacon_parameters {
|
||||
* @STATION_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
|
||||
* with short preambles
|
||||
* @STATION_FLAG_WME: station is WME/QoS capable
|
||||
* @STATION_FLAG_MFP: station uses management frame protection
|
||||
*/
|
||||
enum station_flags {
|
||||
STATION_FLAG_CHANGED = 1<<0,
|
||||
STATION_FLAG_AUTHORIZED = 1<<NL80211_STA_FLAG_AUTHORIZED,
|
||||
STATION_FLAG_SHORT_PREAMBLE = 1<<NL80211_STA_FLAG_SHORT_PREAMBLE,
|
||||
STATION_FLAG_WME = 1<<NL80211_STA_FLAG_WME,
|
||||
STATION_FLAG_MFP = 1<<NL80211_STA_FLAG_MFP,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -355,6 +357,51 @@ enum reg_set_by {
|
||||
REGDOM_SET_BY_COUNTRY_IE,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum environment_cap - Environment parsed from country IE
|
||||
* @ENVIRON_ANY: indicates country IE applies to both indoor and
|
||||
* outdoor operation.
|
||||
* @ENVIRON_INDOOR: indicates country IE applies only to indoor operation
|
||||
* @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation
|
||||
*/
|
||||
enum environment_cap {
|
||||
ENVIRON_ANY,
|
||||
ENVIRON_INDOOR,
|
||||
ENVIRON_OUTDOOR,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct regulatory_request - receipt of last regulatory request
|
||||
*
|
||||
* @wiphy: this is set if this request's initiator is
|
||||
* %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This
|
||||
* can be used by the wireless core to deal with conflicts
|
||||
* and potentially inform users of which devices specifically
|
||||
* cased the conflicts.
|
||||
* @initiator: indicates who sent this request, could be any of
|
||||
* of those set in reg_set_by, %REGDOM_SET_BY_*
|
||||
* @alpha2: the ISO / IEC 3166 alpha2 country code of the requested
|
||||
* regulatory domain. We have a few special codes:
|
||||
* 00 - World regulatory domain
|
||||
* 99 - built by driver but a specific alpha2 cannot be determined
|
||||
* 98 - result of an intersection between two regulatory domains
|
||||
* @intersect: indicates whether the wireless core should intersect
|
||||
* the requested regulatory domain with the presently set regulatory
|
||||
* domain.
|
||||
* @country_ie_checksum: checksum of the last processed and accepted
|
||||
* country IE
|
||||
* @country_ie_env: lets us know if the AP is telling us we are outdoor,
|
||||
* indoor, or if it doesn't matter
|
||||
*/
|
||||
struct regulatory_request {
|
||||
struct wiphy *wiphy;
|
||||
enum reg_set_by initiator;
|
||||
char alpha2[2];
|
||||
bool intersect;
|
||||
u32 country_ie_checksum;
|
||||
enum environment_cap country_ie_env;
|
||||
};
|
||||
|
||||
struct ieee80211_freq_range {
|
||||
u32 start_freq_khz;
|
||||
u32 end_freq_khz;
|
||||
@@ -431,6 +478,26 @@ struct ieee80211_txq_params {
|
||||
u8 aifs;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mgmt_extra_ie_params - Extra management frame IE parameters
|
||||
*
|
||||
* Used to add extra IE(s) into management frames. If the driver cannot add the
|
||||
* requested data into all management frames of the specified subtype that are
|
||||
* generated in kernel or firmware/hardware, it must reject the configuration
|
||||
* call. The IE data buffer is added to the end of the specified management
|
||||
* frame body after all other IEs. This addition is not applied to frames that
|
||||
* are injected through a monitor interface.
|
||||
*
|
||||
* @subtype: Management frame subtype
|
||||
* @ies: IE data buffer or %NULL to remove previous data
|
||||
* @ies_len: Length of @ies in octets
|
||||
*/
|
||||
struct mgmt_extra_ie_params {
|
||||
u8 subtype;
|
||||
u8 *ies;
|
||||
int ies_len;
|
||||
};
|
||||
|
||||
/* from net/wireless.h */
|
||||
struct wiphy;
|
||||
|
||||
@@ -450,6 +517,9 @@ struct ieee80211_channel;
|
||||
* wireless extensions but this is subject to reevaluation as soon as this
|
||||
* code is used more widely and we have a first user without wext.
|
||||
*
|
||||
* @suspend: wiphy device needs to be suspended
|
||||
* @resume: wiphy device needs to be resumed
|
||||
*
|
||||
* @add_virtual_intf: create a new virtual interface with the given name,
|
||||
* must set the struct wireless_dev's iftype.
|
||||
*
|
||||
@@ -471,6 +541,8 @@ struct ieee80211_channel;
|
||||
*
|
||||
* @set_default_key: set the default key on an interface
|
||||
*
|
||||
* @set_default_mgmt_key: set the default management frame key on an interface
|
||||
*
|
||||
* @add_beacon: Add a beacon with given parameters, @head, @interval
|
||||
* and @dtim_period will be valid, @tail is optional.
|
||||
* @set_beacon: Change the beacon parameters for an access point mode
|
||||
@@ -497,8 +569,13 @@ struct ieee80211_channel;
|
||||
* @set_txq_params: Set TX queue parameters
|
||||
*
|
||||
* @set_channel: Set channel
|
||||
*
|
||||
* @set_mgmt_extra_ie: Set extra IE data for management frames
|
||||
*/
|
||||
struct cfg80211_ops {
|
||||
int (*suspend)(struct wiphy *wiphy);
|
||||
int (*resume)(struct wiphy *wiphy);
|
||||
|
||||
int (*add_virtual_intf)(struct wiphy *wiphy, char *name,
|
||||
enum nl80211_iftype type, u32 *flags,
|
||||
struct vif_params *params);
|
||||
@@ -518,6 +595,9 @@ struct cfg80211_ops {
|
||||
int (*set_default_key)(struct wiphy *wiphy,
|
||||
struct net_device *netdev,
|
||||
u8 key_index);
|
||||
int (*set_default_mgmt_key)(struct wiphy *wiphy,
|
||||
struct net_device *netdev,
|
||||
u8 key_index);
|
||||
|
||||
int (*add_beacon)(struct wiphy *wiphy, struct net_device *dev,
|
||||
struct beacon_parameters *info);
|
||||
@@ -564,6 +644,10 @@ struct cfg80211_ops {
|
||||
int (*set_channel)(struct wiphy *wiphy,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type);
|
||||
|
||||
int (*set_mgmt_extra_ie)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct mgmt_extra_ie_params *params);
|
||||
};
|
||||
|
||||
/* temporary wext handlers */
|
||||
|
||||
+170
-42
@@ -207,7 +207,7 @@ struct ieee80211_bss_conf {
|
||||
u16 beacon_int;
|
||||
u16 assoc_capability;
|
||||
u64 timestamp;
|
||||
u64 basic_rates;
|
||||
u32 basic_rates;
|
||||
struct ieee80211_bss_ht_conf ht;
|
||||
};
|
||||
|
||||
@@ -262,6 +262,26 @@ enum mac80211_tx_control_flags {
|
||||
IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12),
|
||||
};
|
||||
|
||||
/**
|
||||
* enum mac80211_rate_control_flags - per-rate flags set by the
|
||||
* Rate Control algorithm.
|
||||
*
|
||||
* These flags are set by the Rate control algorithm for each rate during tx,
|
||||
* in the @flags member of struct ieee80211_tx_rate.
|
||||
*
|
||||
* @IEEE80211_TX_RC_USE_RTS_CTS: Use RTS/CTS exchange for this rate.
|
||||
* @IEEE80211_TX_RC_USE_CTS_PROTECT: CTS-to-self protection is required.
|
||||
* This is set if the current BSS requires ERP protection.
|
||||
* @IEEE80211_TX_RC_USE_SHORT_PREAMBLE: Use short preamble.
|
||||
* @IEEE80211_TX_RC_MCS: HT rate.
|
||||
* @IEEE80211_TX_RC_GREEN_FIELD: Indicates whether this rate should be used in
|
||||
* Greenfield mode.
|
||||
* @IEEE80211_TX_RC_40_MHZ_WIDTH: Indicates if the Channel Width should be 40 MHz.
|
||||
* @IEEE80211_TX_RC_DUP_DATA: The frame should be transmitted on both of the
|
||||
* adjacent 20 MHz channels, if the current channel type is
|
||||
* NL80211_CHAN_HT40MINUS or NL80211_CHAN_HT40PLUS.
|
||||
* @IEEE80211_TX_RC_SHORT_GI: Short Guard interval should be used for this rate.
|
||||
*/
|
||||
enum mac80211_rate_control_flags {
|
||||
IEEE80211_TX_RC_USE_RTS_CTS = BIT(0),
|
||||
IEEE80211_TX_RC_USE_CTS_PROTECT = BIT(1),
|
||||
@@ -507,11 +527,6 @@ static inline int __deprecated __IEEE80211_CONF_SHORT_SLOT_TIME(void)
|
||||
}
|
||||
#define IEEE80211_CONF_SHORT_SLOT_TIME (__IEEE80211_CONF_SHORT_SLOT_TIME())
|
||||
|
||||
struct ieee80211_ht_conf {
|
||||
bool enabled;
|
||||
enum nl80211_channel_type channel_type;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee80211_conf_changed - denotes which configuration changed
|
||||
*
|
||||
@@ -520,10 +535,10 @@ struct ieee80211_ht_conf {
|
||||
* @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed
|
||||
* @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed
|
||||
* @IEEE80211_CONF_CHANGE_PS: the PS flag changed
|
||||
* @IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT: the dynamic PS timeout changed
|
||||
* @IEEE80211_CONF_CHANGE_POWER: the TX power changed
|
||||
* @IEEE80211_CONF_CHANGE_CHANNEL: the channel changed
|
||||
* @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed
|
||||
* @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
|
||||
* @IEEE80211_CONF_CHANGE_HT: HT configuration changed
|
||||
*/
|
||||
enum ieee80211_conf_changed {
|
||||
IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0),
|
||||
@@ -531,10 +546,10 @@ enum ieee80211_conf_changed {
|
||||
IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2),
|
||||
IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3),
|
||||
IEEE80211_CONF_CHANGE_PS = BIT(4),
|
||||
IEEE80211_CONF_CHANGE_POWER = BIT(5),
|
||||
IEEE80211_CONF_CHANGE_CHANNEL = BIT(6),
|
||||
IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7),
|
||||
IEEE80211_CONF_CHANGE_HT = BIT(8),
|
||||
IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT = BIT(5),
|
||||
IEEE80211_CONF_CHANGE_POWER = BIT(6),
|
||||
IEEE80211_CONF_CHANGE_CHANNEL = BIT(7),
|
||||
IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(8),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -547,8 +562,9 @@ enum ieee80211_conf_changed {
|
||||
* @listen_interval: listen interval in units of beacon interval
|
||||
* @flags: configuration flags defined above
|
||||
* @power_level: requested transmit power (in dBm)
|
||||
* @dynamic_ps_timeout: dynamic powersave timeout (in ms)
|
||||
* @channel: the channel to tune to
|
||||
* @ht: the HT configuration for the device
|
||||
* @channel_type: the channel (HT) type
|
||||
* @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
|
||||
* (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11,
|
||||
* but actually means the number of transmissions not the number of retries
|
||||
@@ -559,7 +575,7 @@ enum ieee80211_conf_changed {
|
||||
struct ieee80211_conf {
|
||||
int beacon_int;
|
||||
u32 flags;
|
||||
int power_level;
|
||||
int power_level, dynamic_ps_timeout;
|
||||
|
||||
u16 listen_interval;
|
||||
bool radio_enabled;
|
||||
@@ -567,7 +583,7 @@ struct ieee80211_conf {
|
||||
u8 long_frame_max_tx_count, short_frame_max_tx_count;
|
||||
|
||||
struct ieee80211_channel *channel;
|
||||
struct ieee80211_ht_conf ht;
|
||||
enum nl80211_channel_type channel_type;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -630,10 +646,12 @@ struct ieee80211_if_init_conf {
|
||||
* @IEEE80211_IFCC_BSSID: The BSSID changed.
|
||||
* @IEEE80211_IFCC_BEACON: The beacon for this interface changed
|
||||
* (currently AP and MESH only), use ieee80211_beacon_get().
|
||||
* @IEEE80211_IFCC_BEACON_ENABLED: The enable_beacon value changed.
|
||||
*/
|
||||
enum ieee80211_if_conf_change {
|
||||
IEEE80211_IFCC_BSSID = BIT(0),
|
||||
IEEE80211_IFCC_BEACON = BIT(1),
|
||||
IEEE80211_IFCC_BSSID = BIT(0),
|
||||
IEEE80211_IFCC_BEACON = BIT(1),
|
||||
IEEE80211_IFCC_BEACON_ENABLED = BIT(2),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -641,13 +659,16 @@ enum ieee80211_if_conf_change {
|
||||
*
|
||||
* @changed: parameters that have changed, see &enum ieee80211_if_conf_change.
|
||||
* @bssid: BSSID of the network we are associated to/creating.
|
||||
* @enable_beacon: Indicates whether beacons can be sent.
|
||||
* This is valid only for AP/IBSS/MESH modes.
|
||||
*
|
||||
* This structure is passed to the config_interface() callback of
|
||||
* &struct ieee80211_hw.
|
||||
*/
|
||||
struct ieee80211_if_conf {
|
||||
u32 changed;
|
||||
u8 *bssid;
|
||||
const u8 *bssid;
|
||||
bool enable_beacon;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -655,11 +676,13 @@ struct ieee80211_if_conf {
|
||||
* @ALG_WEP: WEP40 or WEP104
|
||||
* @ALG_TKIP: TKIP
|
||||
* @ALG_CCMP: CCMP (AES)
|
||||
* @ALG_AES_CMAC: AES-128-CMAC
|
||||
*/
|
||||
enum ieee80211_key_alg {
|
||||
ALG_WEP,
|
||||
ALG_TKIP,
|
||||
ALG_CCMP,
|
||||
ALG_AES_CMAC,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -688,12 +711,16 @@ enum ieee80211_key_len {
|
||||
* generation in software.
|
||||
* @IEEE80211_KEY_FLAG_PAIRWISE: Set by mac80211, this flag indicates
|
||||
* that the key is pairwise rather then a shared key.
|
||||
* @IEEE80211_KEY_FLAG_SW_MGMT: This flag should be set by the driver for a
|
||||
* CCMP key if it requires CCMP encryption of management frames (MFP) to
|
||||
* be done in software.
|
||||
*/
|
||||
enum ieee80211_key_flags {
|
||||
IEEE80211_KEY_FLAG_WMM_STA = 1<<0,
|
||||
IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1,
|
||||
IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2,
|
||||
IEEE80211_KEY_FLAG_PAIRWISE = 1<<3,
|
||||
IEEE80211_KEY_FLAG_SW_MGMT = 1<<4,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -714,8 +741,8 @@ enum ieee80211_key_flags {
|
||||
* - Temporal Encryption Key (128 bits)
|
||||
* - Temporal Authenticator Tx MIC Key (64 bits)
|
||||
* - Temporal Authenticator Rx MIC Key (64 bits)
|
||||
* @icv_len: FIXME
|
||||
* @iv_len: FIXME
|
||||
* @icv_len: The ICV length for this key type
|
||||
* @iv_len: The IV length for this key type
|
||||
*/
|
||||
struct ieee80211_key_conf {
|
||||
enum ieee80211_key_alg alg;
|
||||
@@ -759,7 +786,7 @@ enum set_key_cmd {
|
||||
* sizeof(void *), size is determined in hw information.
|
||||
*/
|
||||
struct ieee80211_sta {
|
||||
u64 supp_rates[IEEE80211_NUM_BANDS];
|
||||
u32 supp_rates[IEEE80211_NUM_BANDS];
|
||||
u8 addr[ETH_ALEN];
|
||||
u16 aid;
|
||||
struct ieee80211_sta_ht_cap ht_cap;
|
||||
@@ -854,10 +881,18 @@ enum ieee80211_tkip_key_type {
|
||||
* @IEEE80211_HW_AMPDU_AGGREGATION:
|
||||
* Hardware supports 11n A-MPDU aggregation.
|
||||
*
|
||||
* @IEEE80211_HW_NO_STACK_DYNAMIC_PS:
|
||||
* Hardware which has dynamic power save support, meaning
|
||||
* that power save is enabled in idle periods, and don't need support
|
||||
* from stack.
|
||||
* @IEEE80211_HW_SUPPORTS_PS:
|
||||
* Hardware has power save support (i.e. can go to sleep).
|
||||
*
|
||||
* @IEEE80211_HW_PS_NULLFUNC_STACK:
|
||||
* Hardware requires nullfunc frame handling in stack, implies
|
||||
* stack support for dynamic PS.
|
||||
*
|
||||
* @IEEE80211_HW_SUPPORTS_DYNAMIC_PS:
|
||||
* Hardware has support for dynamic PS.
|
||||
*
|
||||
* @IEEE80211_HW_MFP_CAPABLE:
|
||||
* Hardware supports management frame protection (MFP, IEEE 802.11w).
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_RX_INCLUDES_FCS = 1<<1,
|
||||
@@ -870,7 +905,10 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_NOISE_DBM = 1<<8,
|
||||
IEEE80211_HW_SPECTRUM_MGMT = 1<<9,
|
||||
IEEE80211_HW_AMPDU_AGGREGATION = 1<<10,
|
||||
IEEE80211_HW_NO_STACK_DYNAMIC_PS = 1<<11,
|
||||
IEEE80211_HW_SUPPORTS_PS = 1<<11,
|
||||
IEEE80211_HW_PS_NULLFUNC_STACK = 1<<12,
|
||||
IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<13,
|
||||
IEEE80211_HW_MFP_CAPABLE = 1<<14,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -890,9 +928,8 @@ enum ieee80211_hw_flags {
|
||||
* @workqueue: single threaded workqueue available for driver use,
|
||||
* allocated by mac80211 on registration and flushed when an
|
||||
* interface is removed.
|
||||
* NOTICE: All work performed on this workqueue should NEVER
|
||||
* acquire the RTNL lock (i.e. Don't use the function
|
||||
* ieee80211_iterate_active_interfaces())
|
||||
* NOTICE: All work performed on this workqueue must not
|
||||
* acquire the RTNL lock.
|
||||
*
|
||||
* @priv: pointer to private area that was allocated for driver use
|
||||
* along with this structure.
|
||||
@@ -951,6 +988,19 @@ struct ieee80211_hw {
|
||||
u8 max_rate_tries;
|
||||
};
|
||||
|
||||
/**
|
||||
* wiphy_to_ieee80211_hw - return a mac80211 driver hw struct from a wiphy
|
||||
*
|
||||
* @wiphy: the &struct wiphy which we want to query
|
||||
*
|
||||
* mac80211 drivers can use this to get to their respective
|
||||
* &struct ieee80211_hw. Drivers wishing to get to their own private
|
||||
* structure can then access it via hw->priv. Note that mac802111 drivers should
|
||||
* not use wiphy_priv() to try to get their private driver structure as this
|
||||
* is already used internally by mac80211.
|
||||
*/
|
||||
struct ieee80211_hw *wiphy_to_ieee80211_hw(struct wiphy *wiphy);
|
||||
|
||||
/**
|
||||
* SET_IEEE80211_DEV - set device for 802.11 hardware
|
||||
*
|
||||
@@ -1018,16 +1068,12 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
|
||||
*
|
||||
* The set_key() callback in the &struct ieee80211_ops for a given
|
||||
* device is called to enable hardware acceleration of encryption and
|
||||
* decryption. The callback takes an @address parameter that will be
|
||||
* the broadcast address for default keys, the other station's hardware
|
||||
* address for individual keys or the zero address for keys that will
|
||||
* be used only for transmission.
|
||||
* decryption. The callback takes a @sta parameter that will be NULL
|
||||
* for default keys or keys used for transmission only, or point to
|
||||
* the station information for the peer for individual keys.
|
||||
* Multiple transmission keys with the same key index may be used when
|
||||
* VLANs are configured for an access point.
|
||||
*
|
||||
* The @local_address parameter will always be set to our own address,
|
||||
* this is only relevant if you support multiple local addresses.
|
||||
*
|
||||
* When transmitting, the TX control data will use the @hw_key_idx
|
||||
* selected by the driver by modifying the &struct ieee80211_key_conf
|
||||
* pointed to by the @key parameter to the set_key() function.
|
||||
@@ -1060,6 +1106,42 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
|
||||
* handler is software decryption with wrap around of iv16.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Powersave support
|
||||
*
|
||||
* mac80211 has support for various powersave implementations.
|
||||
*
|
||||
* First, it can support hardware that handles all powersaving by
|
||||
* itself, such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS
|
||||
* hardware flag. In that case, it will be told about the desired
|
||||
* powersave mode depending on the association status, and the driver
|
||||
* must take care of sending nullfunc frames when necessary, i.e. when
|
||||
* entering and leaving powersave mode. The driver is required to look at
|
||||
* the AID in beacons and signal to the AP that it woke up when it finds
|
||||
* traffic directed to it. This mode supports dynamic PS by simply
|
||||
* enabling/disabling PS.
|
||||
*
|
||||
* Additionally, such hardware may set the %IEEE80211_HW_SUPPORTS_DYNAMIC_PS
|
||||
* flag to indicate that it can support dynamic PS mode itself (see below).
|
||||
*
|
||||
* Other hardware designs cannot send nullfunc frames by themselves and also
|
||||
* need software support for parsing the TIM bitmap. This is also supported
|
||||
* by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and
|
||||
* %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still
|
||||
* required to pass up beacons. Additionally, in this case, mac80211 will
|
||||
* wake up the hardware when multicast traffic is announced in the beacon.
|
||||
*
|
||||
* FIXME: I don't think we can be fast enough in software when we want to
|
||||
* receive multicast traffic?
|
||||
*
|
||||
* Dynamic powersave mode is an extension to normal powersave mode in which
|
||||
* the hardware stays awake for a user-specified period of time after sending
|
||||
* a frame so that reply frames need not be buffered and therefore delayed
|
||||
* to the next wakeup. This can either be supported by hardware, in which case
|
||||
* the driver needs to look at the @dynamic_ps_timeout hardware configuration
|
||||
* value, or by the stack if all nullfunc handling is in the stack.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Frame filtering
|
||||
*
|
||||
@@ -1172,6 +1254,8 @@ enum ieee80211_ampdu_mlme_action {
|
||||
* configuration in the TX control data. This handler should,
|
||||
* preferably, never fail and stop queues appropriately, more
|
||||
* importantly, however, it must never fail for A-MPDU-queues.
|
||||
* This function should return NETDEV_TX_OK except in very
|
||||
* limited cases.
|
||||
* Must be implemented and atomic.
|
||||
*
|
||||
* @start: Called before the first netdevice attached to the hardware
|
||||
@@ -1212,9 +1296,12 @@ enum ieee80211_ampdu_mlme_action {
|
||||
*
|
||||
* @config: Handler for configuration requests. IEEE 802.11 code calls this
|
||||
* function to change hardware configuration, e.g., channel.
|
||||
* This function should never fail but returns a negative error code
|
||||
* if it does.
|
||||
*
|
||||
* @config_interface: Handler for configuration requests related to interfaces
|
||||
* (e.g. BSSID changes.)
|
||||
* Returns a negative error code which will be seen in userspace.
|
||||
*
|
||||
* @bss_info_changed: Handler for configuration requests related to BSS
|
||||
* parameters that may vary during BSS's lifespan, and may affect low
|
||||
@@ -1232,8 +1319,9 @@ enum ieee80211_ampdu_mlme_action {
|
||||
*
|
||||
* @set_key: See the section "Hardware crypto acceleration"
|
||||
* This callback can sleep, and is only called between add_interface
|
||||
* and remove_interface calls, i.e. while the interface with the
|
||||
* given local_address is enabled.
|
||||
* and remove_interface calls, i.e. while the given virtual interface
|
||||
* is enabled.
|
||||
* Returns a negative error code if the key can't be added.
|
||||
*
|
||||
* @update_tkip_key: See the section "Hardware crypto acceleration"
|
||||
* This callback will be called in the context of Rx. Called for drivers
|
||||
@@ -1245,8 +1333,10 @@ enum ieee80211_ampdu_mlme_action {
|
||||
* bands. When the scan finishes, ieee80211_scan_completed() must be
|
||||
* called; note that it also must be called when the scan cannot finish
|
||||
* because the hardware is turned off! Anything else is a bug!
|
||||
* Returns a negative error code which will be seen in userspace.
|
||||
*
|
||||
* @get_stats: return low-level statistics
|
||||
* @get_stats: Return low-level statistics.
|
||||
* Returns zero if statistics are available.
|
||||
*
|
||||
* @get_tkip_seq: If your device implements TKIP encryption in hardware this
|
||||
* callback should be provided to read the TKIP transmit IVs (both IV32
|
||||
@@ -1260,6 +1350,7 @@ enum ieee80211_ampdu_mlme_action {
|
||||
*
|
||||
* @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
|
||||
* bursting) for a hardware TX queue.
|
||||
* Returns a negative error code on failure.
|
||||
*
|
||||
* @get_tx_stats: Get statistics of the current TX queue status. This is used
|
||||
* to get number of currently queued packets (queue length), maximum queue
|
||||
@@ -1268,7 +1359,11 @@ enum ieee80211_ampdu_mlme_action {
|
||||
* hw->ampdu_queues items.
|
||||
*
|
||||
* @get_tsf: Get the current TSF timer value from firmware/hardware. Currently,
|
||||
* this is only used for IBSS mode debugging and, as such, is not a
|
||||
* this is only used for IBSS mode BSSID merging and debugging. Is not a
|
||||
* required function. Must be atomic.
|
||||
*
|
||||
* @set_tsf: Set the TSF timer to the specified value in the firmware/hardware.
|
||||
* Currently, this is only used for IBSS mode debugging. Is not a
|
||||
* required function. Must be atomic.
|
||||
*
|
||||
* @reset_tsf: Reset the TSF timer and allow firmware/hardware to synchronize
|
||||
@@ -1279,13 +1374,15 @@ enum ieee80211_ampdu_mlme_action {
|
||||
* @tx_last_beacon: Determine whether the last IBSS beacon was sent by us.
|
||||
* This is needed only for IBSS mode and the result of this function is
|
||||
* used to determine whether to reply to Probe Requests.
|
||||
* Returns non-zero if this device sent the last beacon.
|
||||
*
|
||||
* @ampdu_action: Perform a certain A-MPDU action
|
||||
* The RA/TID combination determines the destination and TID we want
|
||||
* the ampdu action to be performed for. The action is defined through
|
||||
* ieee80211_ampdu_mlme_action. Starting sequence number (@ssn)
|
||||
* is the first frame we expect to perform the action on. notice
|
||||
* is the first frame we expect to perform the action on. Notice
|
||||
* that TX/RX_STOP can pass NULL for this parameter.
|
||||
* Returns a negative error code on failure.
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
|
||||
@@ -1310,7 +1407,7 @@ struct ieee80211_ops {
|
||||
int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
|
||||
bool set);
|
||||
int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||
const u8 *local_address, const u8 *address,
|
||||
struct ieee80211_vif *vif, struct ieee80211_sta *sta,
|
||||
struct ieee80211_key_conf *key);
|
||||
void (*update_tkip_key)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_key_conf *conf, const u8 *address,
|
||||
@@ -1328,6 +1425,7 @@ struct ieee80211_ops {
|
||||
int (*get_tx_stats)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_tx_queue_stats *stats);
|
||||
u64 (*get_tsf)(struct ieee80211_hw *hw);
|
||||
void (*set_tsf)(struct ieee80211_hw *hw, u64 tsf);
|
||||
void (*reset_tsf)(struct ieee80211_hw *hw);
|
||||
int (*tx_last_beacon)(struct ieee80211_hw *hw);
|
||||
int (*ampdu_action)(struct ieee80211_hw *hw,
|
||||
@@ -1962,4 +2060,34 @@ rate_lowest_index(struct ieee80211_supported_band *sband,
|
||||
int ieee80211_rate_control_register(struct rate_control_ops *ops);
|
||||
void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
|
||||
|
||||
static inline bool
|
||||
conf_is_ht20(struct ieee80211_conf *conf)
|
||||
{
|
||||
return conf->channel_type == NL80211_CHAN_HT20;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
conf_is_ht40_minus(struct ieee80211_conf *conf)
|
||||
{
|
||||
return conf->channel_type == NL80211_CHAN_HT40MINUS;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
conf_is_ht40_plus(struct ieee80211_conf *conf)
|
||||
{
|
||||
return conf->channel_type == NL80211_CHAN_HT40PLUS;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
conf_is_ht40(struct ieee80211_conf *conf)
|
||||
{
|
||||
return conf_is_ht40_minus(conf) || conf_is_ht40_plus(conf);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
conf_is_ht(struct ieee80211_conf *conf)
|
||||
{
|
||||
return conf->channel_type != NL80211_CHAN_NO_HT;
|
||||
}
|
||||
|
||||
#endif /* MAC80211_H */
|
||||
|
||||
+63
-5
@@ -181,12 +181,25 @@ struct ieee80211_supported_band {
|
||||
* struct wiphy - wireless hardware description
|
||||
* @idx: the wiphy index assigned to this item
|
||||
* @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name>
|
||||
* @fw_handles_regulatory: tells us the firmware for this device
|
||||
* has its own regulatory solution and cannot identify the
|
||||
* @custom_regulatory: tells us the driver for this device
|
||||
* has its own custom regulatory domain and cannot identify the
|
||||
* ISO / IEC 3166 alpha2 it belongs to. When this is enabled
|
||||
* we will disregard the first regulatory hint (when the
|
||||
* initiator is %REGDOM_SET_BY_CORE).
|
||||
* @strict_regulatory: tells us the driver for this device will ignore
|
||||
* regulatory domain settings until it gets its own regulatory domain
|
||||
* via its regulatory_hint(). After its gets its own regulatory domain
|
||||
* it will only allow further regulatory domain settings to further
|
||||
* enhance compliance. For example if channel 13 and 14 are disabled
|
||||
* by this regulatory domain no user regulatory domain can enable these
|
||||
* channels at a later time. This can be used for devices which do not
|
||||
* have calibration information gauranteed for frequencies or settings
|
||||
* outside of its regulatory domain.
|
||||
* @reg_notifier: the driver's regulatory notification callback
|
||||
* @regd: the driver's regulatory domain, if one was requested via
|
||||
* the regulatory_hint() API. This can be used by the driver
|
||||
* on the reg_notifier() if it chooses to ignore future
|
||||
* regulatory domain changes caused by other drivers.
|
||||
*/
|
||||
struct wiphy {
|
||||
/* assign these fields before you register the wiphy */
|
||||
@@ -197,7 +210,8 @@ struct wiphy {
|
||||
/* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */
|
||||
u16 interface_modes;
|
||||
|
||||
bool fw_handles_regulatory;
|
||||
bool custom_regulatory;
|
||||
bool strict_regulatory;
|
||||
|
||||
/* If multiple wiphys are registered and you're handed e.g.
|
||||
* a regular netdev with assigned ieee80211_ptr, you won't
|
||||
@@ -209,10 +223,13 @@ struct wiphy {
|
||||
struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS];
|
||||
|
||||
/* Lets us get back the wiphy on the callback */
|
||||
int (*reg_notifier)(struct wiphy *wiphy, enum reg_set_by setby);
|
||||
int (*reg_notifier)(struct wiphy *wiphy,
|
||||
struct regulatory_request *request);
|
||||
|
||||
/* fields below are read-only, assigned by cfg80211 */
|
||||
|
||||
const struct ieee80211_regdomain *regd;
|
||||
|
||||
/* the item in /sys/class/ieee80211/ points to this,
|
||||
* you need use set_wiphy_dev() (see below) */
|
||||
struct device dev;
|
||||
@@ -361,7 +378,7 @@ ieee80211_get_channel(struct wiphy *wiphy, int freq)
|
||||
*/
|
||||
struct ieee80211_rate *
|
||||
ieee80211_get_response_rate(struct ieee80211_supported_band *sband,
|
||||
u64 basic_rates, int bitrate);
|
||||
u32 basic_rates, int bitrate);
|
||||
|
||||
/**
|
||||
* regulatory_hint - driver hint to the wireless core a regulatory domain
|
||||
@@ -395,4 +412,45 @@ extern void regulatory_hint(struct wiphy *wiphy, const char *alpha2);
|
||||
extern void regulatory_hint_11d(struct wiphy *wiphy,
|
||||
u8 *country_ie,
|
||||
u8 country_ie_len);
|
||||
|
||||
/**
|
||||
* wiphy_apply_custom_regulatory - apply a custom driver regulatory domain
|
||||
* @wiphy: the wireless device we want to process the regulatory domain on
|
||||
* @regd: the custom regulatory domain to use for this wiphy
|
||||
*
|
||||
* Drivers can sometimes have custom regulatory domains which do not apply
|
||||
* to a specific country. Drivers can use this to apply such custom regulatory
|
||||
* domains. This routine must be called prior to wiphy registration. The
|
||||
* custom regulatory domain will be trusted completely and as such previous
|
||||
* default channel settings will be disregarded. If no rule is found for a
|
||||
* channel on the regulatory domain the channel will be disabled.
|
||||
*/
|
||||
extern void wiphy_apply_custom_regulatory(
|
||||
struct wiphy *wiphy,
|
||||
const struct ieee80211_regdomain *regd);
|
||||
|
||||
/**
|
||||
* freq_reg_info - get regulatory information for the given frequency
|
||||
* @wiphy: the wiphy for which we want to process this rule for
|
||||
* @center_freq: Frequency in KHz for which we want regulatory information for
|
||||
* @bandwidth: the bandwidth requirement you have in KHz, if you do not have one
|
||||
* you can set this to 0. If this frequency is allowed we then set
|
||||
* this value to the maximum allowed bandwidth.
|
||||
* @reg_rule: the regulatory rule which we have for this frequency
|
||||
*
|
||||
* Use this function to get the regulatory rule for a specific frequency on
|
||||
* a given wireless device. If the device has a specific regulatory domain
|
||||
* it wants to follow we respect that unless a country IE has been received
|
||||
* and processed already.
|
||||
*
|
||||
* Returns 0 if it was able to find a valid regulatory rule which does
|
||||
* apply to the given center_freq otherwise it returns non-zero. It will
|
||||
* also return -ERANGE if we determine the given center_freq does not even have
|
||||
* a regulatory rule for a frequency range in the center_freq's band. See
|
||||
* freq_in_rule_band() for our current definition of a band -- this is purely
|
||||
* subjective and right now its 802.11 specific.
|
||||
*/
|
||||
extern int freq_reg_info(struct wiphy *wiphy, u32 center_freq, u32 *bandwidth,
|
||||
const struct ieee80211_reg_rule **reg_rule);
|
||||
|
||||
#endif /* __NET_WIRELESS_H */
|
||||
|
||||
Reference in New Issue
Block a user