diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h | 369 | 
1 files changed, 369 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h new file mode 100644 index 00000000000..ae39b7dfda7 --- /dev/null +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-mac.h @@ -0,0 +1,369 @@ +/****************************************************************************** + * + * This file is provided under a dual BSD/GPLv2 license.  When using or + * redistributing this file, you may do so under either license. + * + * GPL LICENSE SUMMARY + * + * Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, + * USA + * + * The full GNU General Public License is included in this distribution + * in the file called LICENSE.GPL. + * + * Contact Information: + *  Intel Linux Wireless <ilw@linux.intel.com> + * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + * + * BSD LICENSE + * + * Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + *  * Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + *  * Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in + *    the documentation and/or other materials provided with the + *    distribution. + *  * Neither the name Intel Corporation nor the names of its + *    contributors may be used to endorse or promote products derived + *    from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#ifndef __fw_api_mac_h__ +#define __fw_api_mac_h__ + +/* + * The first MAC indices (starting from 0) + * are available to the driver, AUX follows + */ +#define MAC_INDEX_AUX		4 +#define MAC_INDEX_MIN_DRIVER	0 +#define NUM_MAC_INDEX_DRIVER	MAC_INDEX_AUX + +#define AC_NUM	4 /* Number of access categories */ + +/** + * enum iwl_mac_protection_flags - MAC context flags + * @MAC_PROT_FLG_TGG_PROTECT: 11g protection when transmitting OFDM frames, + *	this will require CCK RTS/CTS2self. + *	RTS/CTS will protect full burst time. + * @MAC_PROT_FLG_HT_PROT: enable HT protection + * @MAC_PROT_FLG_FAT_PROT: protect 40 MHz transmissions + * @MAC_PROT_FLG_SELF_CTS_EN: allow CTS2self + */ +enum iwl_mac_protection_flags { +	MAC_PROT_FLG_TGG_PROTECT	= BIT(3), +	MAC_PROT_FLG_HT_PROT		= BIT(23), +	MAC_PROT_FLG_FAT_PROT		= BIT(24), +	MAC_PROT_FLG_SELF_CTS_EN	= BIT(30), +}; + +#define MAC_FLG_SHORT_SLOT		BIT(4) +#define MAC_FLG_SHORT_PREAMBLE		BIT(5) + +/** + * enum iwl_mac_types - Supported MAC types + * @FW_MAC_TYPE_FIRST: lowest supported MAC type + * @FW_MAC_TYPE_AUX: Auxiliary MAC (internal) + * @FW_MAC_TYPE_LISTENER: monitor MAC type (?) + * @FW_MAC_TYPE_PIBSS: Pseudo-IBSS + * @FW_MAC_TYPE_IBSS: IBSS + * @FW_MAC_TYPE_BSS_STA: BSS (managed) station + * @FW_MAC_TYPE_P2P_DEVICE: P2P Device + * @FW_MAC_TYPE_P2P_STA: P2P client + * @FW_MAC_TYPE_GO: P2P GO + * @FW_MAC_TYPE_TEST: ? + * @FW_MAC_TYPE_MAX: highest support MAC type + */ +enum iwl_mac_types { +	FW_MAC_TYPE_FIRST = 1, +	FW_MAC_TYPE_AUX = FW_MAC_TYPE_FIRST, +	FW_MAC_TYPE_LISTENER, +	FW_MAC_TYPE_PIBSS, +	FW_MAC_TYPE_IBSS, +	FW_MAC_TYPE_BSS_STA, +	FW_MAC_TYPE_P2P_DEVICE, +	FW_MAC_TYPE_P2P_STA, +	FW_MAC_TYPE_GO, +	FW_MAC_TYPE_TEST, +	FW_MAC_TYPE_MAX = FW_MAC_TYPE_TEST +}; /* MAC_CONTEXT_TYPE_API_E_VER_1 */ + +/** + * enum iwl_tsf_id - TSF hw timer ID + * @TSF_ID_A: use TSF A + * @TSF_ID_B: use TSF B + * @TSF_ID_C: use TSF C + * @TSF_ID_D: use TSF D + * @NUM_TSF_IDS: number of TSF timers available + */ +enum iwl_tsf_id { +	TSF_ID_A = 0, +	TSF_ID_B = 1, +	TSF_ID_C = 2, +	TSF_ID_D = 3, +	NUM_TSF_IDS = 4, +}; /* TSF_ID_API_E_VER_1 */ + +/** + * struct iwl_mac_data_ap - configuration data for AP MAC context + * @beacon_time: beacon transmit time in system time + * @beacon_tsf: beacon transmit time in TSF + * @bi: beacon interval in TU + * @bi_reciprocal: 2^32 / bi + * @dtim_interval: dtim transmit time in TU + * @dtim_reciprocal: 2^32 / dtim_interval + * @mcast_qid: queue ID for multicast traffic + * @beacon_template: beacon template ID + */ +struct iwl_mac_data_ap { +	__le32 beacon_time; +	__le64 beacon_tsf; +	__le32 bi; +	__le32 bi_reciprocal; +	__le32 dtim_interval; +	__le32 dtim_reciprocal; +	__le32 mcast_qid; +	__le32 beacon_template; +} __packed; /* AP_MAC_DATA_API_S_VER_1 */ + +/** + * struct iwl_mac_data_ibss - configuration data for IBSS MAC context + * @beacon_time: beacon transmit time in system time + * @beacon_tsf: beacon transmit time in TSF + * @bi: beacon interval in TU + * @bi_reciprocal: 2^32 / bi + */ +struct iwl_mac_data_ibss { +	__le32 beacon_time; +	__le64 beacon_tsf; +	__le32 bi; +	__le32 bi_reciprocal; +} __packed; /* IBSS_MAC_DATA_API_S_VER_1 */ + +/** + * struct iwl_mac_data_sta - configuration data for station MAC context + * @is_assoc: 1 for associated state, 0 otherwise + * @dtim_time: DTIM arrival time in system time + * @dtim_tsf: DTIM arrival time in TSF + * @bi: beacon interval in TU, applicable only when associated + * @bi_reciprocal: 2^32 / bi , applicable only when associated + * @dtim_interval: DTIM interval in TU, applicable only when associated + * @dtim_reciprocal: 2^32 / dtim_interval , applicable only when associated + * @listen_interval: in beacon intervals, applicable only when associated + * @assoc_id: unique ID assigned by the AP during association + */ +struct iwl_mac_data_sta { +	__le32 is_assoc; +	__le32 dtim_time; +	__le64 dtim_tsf; +	__le32 bi; +	__le32 bi_reciprocal; +	__le32 dtim_interval; +	__le32 dtim_reciprocal; +	__le32 listen_interval; +	__le32 assoc_id; +	__le32 assoc_beacon_arrive_time; +} __packed; /* STA_MAC_DATA_API_S_VER_1 */ + +/** + * struct iwl_mac_data_go - configuration data for P2P GO MAC context + * @ap: iwl_mac_data_ap struct with most config data + * @ctwin: client traffic window in TU (period after TBTT when GO is present). + *	0 indicates that there is no CT window. + * @opp_ps_enabled: indicate that opportunistic PS allowed + */ +struct iwl_mac_data_go { +	struct iwl_mac_data_ap ap; +	__le32 ctwin; +	__le32 opp_ps_enabled; +} __packed; /* GO_MAC_DATA_API_S_VER_1 */ + +/** + * struct iwl_mac_data_p2p_sta - configuration data for P2P client MAC context + * @sta: iwl_mac_data_sta struct with most config data + * @ctwin: client traffic window in TU (period after TBTT when GO is present). + *	0 indicates that there is no CT window. + */ +struct iwl_mac_data_p2p_sta { +	struct iwl_mac_data_sta sta; +	__le32 ctwin; +} __packed; /* P2P_STA_MAC_DATA_API_S_VER_1 */ + +/** + * struct iwl_mac_data_pibss - Pseudo IBSS config data + * @stats_interval: interval in TU between statistics notifications to host. + */ +struct iwl_mac_data_pibss { +	__le32 stats_interval; +} __packed; /* PIBSS_MAC_DATA_API_S_VER_1 */ + +/* + * struct iwl_mac_data_p2p_dev - configuration data for the P2P Device MAC + * context. + * @is_disc_extended: if set to true, P2P Device discoverability is enabled on + *	other channels as well. This should be to true only in case that the + *	device is discoverable and there is an active GO. Note that setting this + *	field when not needed, will increase the number of interrupts and have + *	effect on the platform power, as this setting opens the Rx filters on + *	all macs. + */ +struct iwl_mac_data_p2p_dev { +	__le32 is_disc_extended; +} __packed; /* _P2P_DEV_MAC_DATA_API_S_VER_1 */ + +/** + * enum iwl_mac_filter_flags - MAC context filter flags + * @MAC_FILTER_IN_PROMISC: accept all data frames + * @MAC_FILTER_IN_CONTROL_AND_MGMT: pass all mangement and + *	control frames to the host + * @MAC_FILTER_ACCEPT_GRP: accept multicast frames + * @MAC_FILTER_DIS_DECRYPT: don't decrypt unicast frames + * @MAC_FILTER_DIS_GRP_DECRYPT: don't decrypt multicast frames + * @MAC_FILTER_IN_BEACON: transfer foreign BSS's beacons to host + *	(in station mode when associated) + * @MAC_FILTER_OUT_BCAST: filter out all broadcast frames + * @MAC_FILTER_IN_CRC32: extract FCS and append it to frames + * @MAC_FILTER_IN_PROBE_REQUEST: pass probe requests to host + */ +enum iwl_mac_filter_flags { +	MAC_FILTER_IN_PROMISC		= BIT(0), +	MAC_FILTER_IN_CONTROL_AND_MGMT	= BIT(1), +	MAC_FILTER_ACCEPT_GRP		= BIT(2), +	MAC_FILTER_DIS_DECRYPT		= BIT(3), +	MAC_FILTER_DIS_GRP_DECRYPT	= BIT(4), +	MAC_FILTER_IN_BEACON		= BIT(6), +	MAC_FILTER_OUT_BCAST		= BIT(8), +	MAC_FILTER_IN_CRC32		= BIT(11), +	MAC_FILTER_IN_PROBE_REQUEST	= BIT(12), +}; + +/** + * enum iwl_mac_qos_flags - QoS flags + * @MAC_QOS_FLG_UPDATE_EDCA: ? + * @MAC_QOS_FLG_TGN: HT is enabled + * @MAC_QOS_FLG_TXOP_TYPE: ? + * + */ +enum iwl_mac_qos_flags { +	MAC_QOS_FLG_UPDATE_EDCA	= BIT(0), +	MAC_QOS_FLG_TGN		= BIT(1), +	MAC_QOS_FLG_TXOP_TYPE	= BIT(4), +}; + +/** + * struct iwl_ac_qos - QOS timing params for MAC_CONTEXT_CMD + * @cw_min: Contention window, start value in numbers of slots. + *	Should be a power-of-2, minus 1.  Device's default is 0x0f. + * @cw_max: Contention window, max value in numbers of slots. + *	Should be a power-of-2, minus 1.  Device's default is 0x3f. + * @aifsn:  Number of slots in Arbitration Interframe Space (before + *	performing random backoff timing prior to Tx).  Device default 1. + * @fifos_mask: FIFOs used by this MAC for this AC + * @edca_txop:  Length of Tx opportunity, in uSecs.  Device default is 0. + * + * One instance of this config struct for each of 4 EDCA access categories + * in struct iwl_qosparam_cmd. + * + * Device will automatically increase contention window by (2*CW) + 1 for each + * transmission retry.  Device uses cw_max as a bit mask, ANDed with new CW + * value, to cap the CW value. + */ +struct iwl_ac_qos { +	__le16 cw_min; +	__le16 cw_max; +	u8 aifsn; +	u8 fifos_mask; +	__le16 edca_txop; +} __packed; /* AC_QOS_API_S_VER_2 */ + +/** + * struct iwl_mac_ctx_cmd - command structure to configure MAC contexts + * ( MAC_CONTEXT_CMD = 0x28 ) + * @id_and_color: ID and color of the MAC + * @action: action to perform, one of FW_CTXT_ACTION_* + * @mac_type: one of FW_MAC_TYPE_* + * @tsd_id: TSF HW timer, one of TSF_ID_* + * @node_addr: MAC address + * @bssid_addr: BSSID + * @cck_rates: basic rates available for CCK + * @ofdm_rates: basic rates available for OFDM + * @protection_flags: combination of MAC_PROT_FLG_FLAG_* + * @cck_short_preamble: 0x20 for enabling short preamble, 0 otherwise + * @short_slot: 0x10 for enabling short slots, 0 otherwise + * @filter_flags: combination of MAC_FILTER_* + * @qos_flags: from MAC_QOS_FLG_* + * @ac: one iwl_mac_qos configuration for each AC + * @mac_specific: one of struct iwl_mac_data_*, according to mac_type + */ +struct iwl_mac_ctx_cmd { +	/* COMMON_INDEX_HDR_API_S_VER_1 */ +	__le32 id_and_color; +	__le32 action; +	/* MAC_CONTEXT_COMMON_DATA_API_S_VER_1 */ +	__le32 mac_type; +	__le32 tsf_id; +	u8 node_addr[6]; +	__le16 reserved_for_node_addr; +	u8 bssid_addr[6]; +	__le16 reserved_for_bssid_addr; +	__le32 cck_rates; +	__le32 ofdm_rates; +	__le32 protection_flags; +	__le32 cck_short_preamble; +	__le32 short_slot; +	__le32 filter_flags; +	/* MAC_QOS_PARAM_API_S_VER_1 */ +	__le32 qos_flags; +	struct iwl_ac_qos ac[AC_NUM+1]; +	/* MAC_CONTEXT_COMMON_DATA_API_S */ +	union { +		struct iwl_mac_data_ap ap; +		struct iwl_mac_data_go go; +		struct iwl_mac_data_sta sta; +		struct iwl_mac_data_p2p_sta p2p_sta; +		struct iwl_mac_data_p2p_dev p2p_dev; +		struct iwl_mac_data_pibss pibss; +		struct iwl_mac_data_ibss ibss; +	}; +} __packed; /* MAC_CONTEXT_CMD_API_S_VER_1 */ + +static inline u32 iwl_mvm_reciprocal(u32 v) +{ +	if (!v) +		return 0; +	return 0xFFFFFFFF / v; +} + +#endif /* __fw_api_mac_h__ */  |