diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h | 161 | 
1 files changed, 108 insertions, 53 deletions
| diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h index 81b98915b1a4..97d7eed32622 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h @@ -74,6 +74,7 @@   *	Otherwise, use rate_n_flags from the TX command   * @TX_CMD_FLG_BAR: this frame is a BA request, immediate BAR is expected   *	Must set TX_CMD_FLG_ACK with this flag. + * @TX_CMD_FLG_TXOP_PROT: TXOP protection requested   * @TX_CMD_FLG_VHT_NDPA: mark frame is NDPA for VHT beamformer sequence   * @TX_CMD_FLG_HT_NDPA: mark frame is NDPA for HT beamformer sequence   * @TX_CMD_FLG_CSI_FDBK2HOST: mark to send feedback to host (only if good CRC) @@ -177,29 +178,6 @@ enum iwl_tx_cmd_sec_ctrl {  	TX_CMD_SEC_KEY_FROM_TABLE	= 0x10,  }; -/* TODO: how does these values are OK with only 16 bit variable??? */ -/* - * TX command next frame info - * - * bits 0:2 - security control (TX_CMD_SEC_*) - * bit 3 - immediate ACK required - * bit 4 - rate is taken from STA table - * bit 5 - frame belongs to BA stream - * bit 6 - immediate BA response expected - * bit 7 - unused - * bits 8:15 - Station ID - * bits 16:31 - rate - */ -#define TX_CMD_NEXT_FRAME_ACK_MSK		(0x8) -#define TX_CMD_NEXT_FRAME_STA_RATE_MSK		(0x10) -#define TX_CMD_NEXT_FRAME_BA_MSK		(0x20) -#define TX_CMD_NEXT_FRAME_IMM_BA_RSP_MSK	(0x40) -#define TX_CMD_NEXT_FRAME_FLAGS_MSK		(0xf8) -#define TX_CMD_NEXT_FRAME_STA_ID_MSK		(0xff00) -#define TX_CMD_NEXT_FRAME_STA_ID_POS		(8) -#define TX_CMD_NEXT_FRAME_RATE_MSK		(0xffff0000) -#define TX_CMD_NEXT_FRAME_RATE_POS		(16) -  /*   * TX command Frame life time in us - to be written in pm_frame_timeout   */ @@ -224,7 +202,7 @@ enum iwl_tx_cmd_sec_ctrl {  /**   * enum iwl_tx_offload_assist_flags_pos -  set %iwl_tx_cmd offload_assist values - * @TX_CMD_OFFLD_IP_HDR_OFFSET: offset to start of IP header (in words) + * @TX_CMD_OFFLD_IP_HDR: offset to start of IP header (in words)   *	from mac header end. For normal case it is 4 words for SNAP.   *	note: tx_cmd, mac header and pad are not counted in the offset.   *	This is used to help the offload in case there is tunneling such as @@ -258,22 +236,27 @@ enum iwl_tx_offload_assist_flags_pos {   * @len: in bytes of the payload, see below for details   * @offload_assist: TX offload configuration   * @tx_flags: combination of TX_CMD_FLG_* + * @scratch: scratch buffer used by the device   * @rate_n_flags: rate for *all* Tx attempts, if TX_CMD_FLG_STA_RATE_MSK is   *	cleared. Combination of RATE_MCS_*   * @sta_id: index of destination station in FW station table   * @sec_ctl: security control, TX_CMD_SEC_*   * @initial_rate_index: index into the the rate table for initial TX attempt.   *	Applied if TX_CMD_FLG_STA_RATE_MSK is set, normally 0 for data frames. + * @reserved2: reserved   * @key: security key - * @next_frame_flags: TX_CMD_SEC_* and TX_CMD_NEXT_FRAME_* + * @reserved3: reserved   * @life_time: frame life time (usecs??)   * @dram_lsb_ptr: Physical address of scratch area in the command (try_cnt +   *	btkill_cnd + reserved), first 32 bits. "0" disables usage.   * @dram_msb_ptr: upper bits of the scratch physical address   * @rts_retry_limit: max attempts for RTS   * @data_retry_limit: max attempts to send the data packet - * @tid_spec: TID/tspec + * @tid_tspec: TID/tspec   * @pm_frame_timeout: PM TX frame timeout + * @reserved4: reserved + * @payload: payload (same as @hdr) + * @hdr: 802.11 header (same as @payload)   *   * The byte count (both len and next_frame_len) includes MAC header   * (24/26/30/32 bytes) @@ -327,10 +310,11 @@ struct iwl_dram_sec_info {   * ( TX_CMD = 0x1c )   * @len: in bytes of the payload, see below for details   * @offload_assist: TX offload configuration - * @tx_flags: combination of &iwl_tx_cmd_flags + * @flags: combination of &enum iwl_tx_cmd_flags   * @dram_info: FW internal DRAM storage   * @rate_n_flags: rate for *all* Tx attempts, if TX_CMD_FLG_STA_RATE_MSK is   *	cleared. Combination of RATE_MCS_* + * @hdr: 802.11 header   */  struct iwl_tx_cmd_gen2 {  	__le16 len; @@ -504,7 +488,7 @@ enum iwl_tx_agg_status {  /**   * struct agg_tx_status - per packet TX aggregation status - * @status: enum iwl_tx_agg_status + * @status: See &enum iwl_tx_agg_status   * @sequence: Sequence # for this frame's Tx cmd (not SSN!)   */  struct agg_tx_status { @@ -519,13 +503,73 @@ struct agg_tx_status {   * bit-7 invalid rate indication   */  #define TX_RES_INIT_RATE_INDEX_MSK 0x0f +#define TX_RES_RATE_TABLE_COLOR_POS 4  #define TX_RES_RATE_TABLE_COLOR_MSK 0x70  #define TX_RES_INV_RATE_INDEX_MSK 0x80 +#define TX_RES_RATE_TABLE_COL_GET(_f) (((_f) & TX_RES_RATE_TABLE_COLOR_MSK) >>\ +				       TX_RES_RATE_TABLE_COLOR_POS)  #define IWL_MVM_TX_RES_GET_TID(_ra_tid) ((_ra_tid) & 0x0f)  #define IWL_MVM_TX_RES_GET_RA(_ra_tid) ((_ra_tid) >> 4)  /** + * struct iwl_mvm_tx_resp_v3 - notifies that fw is TXing a packet + * ( REPLY_TX = 0x1c ) + * @frame_count: 1 no aggregation, >1 aggregation + * @bt_kill_count: num of times blocked by bluetooth (unused for agg) + * @failure_rts: num of failures due to unsuccessful RTS + * @failure_frame: num failures due to no ACK (unused for agg) + * @initial_rate: for non-agg: rate of the successful Tx. For agg: rate of the + *	Tx of all the batch. RATE_MCS_* + * @wireless_media_time: for non-agg: RTS + CTS + frame tx attempts time + ACK. + *	for agg: RTS + CTS + aggregation tx time + block-ack time. + *	in usec. + * @pa_status: tx power info + * @pa_integ_res_a: tx power info + * @pa_integ_res_b: tx power info + * @pa_integ_res_c: tx power info + * @measurement_req_id: tx power info + * @reduced_tpc: transmit power reduction used + * @reserved: reserved + * @tfd_info: TFD information set by the FH + * @seq_ctl: sequence control from the Tx cmd + * @byte_cnt: byte count from the Tx cmd + * @tlc_info: TLC rate info + * @ra_tid: bits [3:0] = ra, bits [7:4] = tid + * @frame_ctrl: frame control + * @status: for non-agg:  frame status TX_STATUS_* + *	for agg: status of 1st frame, AGG_TX_STATE_*; other frame status fields + *	follow this one, up to frame_count. Length in @frame_count. + * + * After the array of statuses comes the SSN of the SCD. Look at + * %iwl_mvm_get_scd_ssn for more details. + */ +struct iwl_mvm_tx_resp_v3 { +	u8 frame_count; +	u8 bt_kill_count; +	u8 failure_rts; +	u8 failure_frame; +	__le32 initial_rate; +	__le16 wireless_media_time; + +	u8 pa_status; +	u8 pa_integ_res_a[3]; +	u8 pa_integ_res_b[3]; +	u8 pa_integ_res_c[3]; +	__le16 measurement_req_id; +	u8 reduced_tpc; +	u8 reserved; + +	__le32 tfd_info; +	__le16 seq_ctl; +	__le16 byte_cnt; +	u8 tlc_info; +	u8 ra_tid; +	__le16 frame_ctrl; +	struct agg_tx_status status[]; +} __packed; /* TX_RSP_API_S_VER_3 */ + +/**   * struct iwl_mvm_tx_resp - notifies that fw is TXing a packet   * ( REPLY_TX = 0x1c )   * @frame_count: 1 no aggregation, >1 aggregation @@ -542,6 +586,8 @@ struct agg_tx_status {   * @pa_integ_res_b: tx power info   * @pa_integ_res_c: tx power info   * @measurement_req_id: tx power info + * @reduced_tpc: transmit power reduction used + * @reserved: reserved   * @tfd_info: TFD information set by the FH   * @seq_ctl: sequence control from the Tx cmd   * @byte_cnt: byte count from the Tx cmd @@ -549,9 +595,8 @@ struct agg_tx_status {   * @ra_tid: bits [3:0] = ra, bits [7:4] = tid   * @frame_ctrl: frame control   * @tx_queue: TX queue for this response + * @reserved2: reserved for padding/alignment   * @status: for non-agg:  frame status TX_STATUS_* - *	for agg: status of 1st frame, AGG_TX_STATE_*; other frame status fields - *	follow this one, up to frame_count.   *	For version 6 TX response isn't received for aggregation at all.   *   * After the array of statuses comes the SSN of the SCD. Look at @@ -579,26 +624,19 @@ struct iwl_mvm_tx_resp {  	u8 tlc_info;  	u8 ra_tid;  	__le16 frame_ctrl; -	union { -		struct { -			struct agg_tx_status status; -		} v3;/* TX_RSP_API_S_VER_3 */ -		struct { -			__le16 tx_queue; -			__le16 reserved2; -			struct agg_tx_status status; -		} v6; -	}; +	__le16 tx_queue; +	__le16 reserved2; +	struct agg_tx_status status;  } __packed; /* TX_RSP_API_S_VER_6 */  /**   * struct iwl_mvm_ba_notif - notifies about reception of BA   * ( BA_NOTIF = 0xc5 ) - * @sta_addr_lo32: lower 32 bits of the MAC address - * @sta_addr_hi16: upper 16 bits of the MAC address + * @sta_addr: MAC address + * @reserved: reserved   * @sta_id: Index of recipient (BA-sending) station in fw's station table   * @tid: tid of the session - * @seq_ctl: + * @seq_ctl: sequence control field   * @bitmap: the bitmap of the BA notification as seen in the air   * @scd_flow: the tx queue this BA relates to   * @scd_ssn: the index of the last contiguously sent packet @@ -607,10 +645,10 @@ struct iwl_mvm_tx_resp {   * @reduced_txp: power reduced according to TPC. This is the actual value and   *	not a copy from the LQ command. Thus, if not the first rate was used   *	for Tx-ing then this value will be set to 0 by FW. + * @reserved1: reserved   */  struct iwl_mvm_ba_notif { -	__le32 sta_addr_lo32; -	__le16 sta_addr_hi16; +	u8 sta_addr[ETH_ALEN];  	__le16 reserved;  	u8 sta_id; @@ -630,13 +668,15 @@ struct iwl_mvm_ba_notif {   * @q_num: TFD queue number   * @tfd_index: Index of first un-acked frame in the  TFD queue   * @scd_queue: For debug only - the physical queue the TFD queue is bound to + * @tid: TID of the queue (0-7) + * @reserved: reserved for alignment   */  struct iwl_mvm_compressed_ba_tfd {  	__le16 q_num;  	__le16 tfd_index;  	u8 scd_queue; -	u8 reserved; -	__le16 reserved2; +	u8 tid; +	u8 reserved[2];  } __packed; /* COMPRESSED_BA_TFD_API_S_VER_1 */  /** @@ -684,11 +724,12 @@ enum iwl_mvm_ba_resp_flags {   * @query_frame_cnt: SCD query frame count   * @txed: number of frames sent in the aggregation (all-TIDs)   * @done: number of frames that were Acked by the BA (all-TIDs) + * @reserved: reserved (for alignment)   * @wireless_time: Wireless-media time   * @tx_rate: the rate the aggregation was sent at   * @tfd_cnt: number of TFD-Q elements   * @ra_tid_cnt: number of RATID-Q elements - * @ba_tfd: array of TFD queue status updates. See &iwl_mvm_compressed_ba_tfd + * @tfd: array of TFD queue status updates. See &iwl_mvm_compressed_ba_tfd   *	for details.   * @ra_tid: array of RA-TID queue status updates. For debug purposes only. See   *	&iwl_mvm_compressed_ba_ratid for more details. @@ -762,6 +803,7 @@ struct iwl_mac_beacon_cmd_v7 {   * struct iwl_mac_beacon_cmd - beacon template command with offloaded CSA   * @byte_cnt: byte count of the beacon frame   * @flags: for future use + * @reserved: reserved   * @data: see &iwl_mac_beacon_cmd_data   */  struct iwl_mac_beacon_cmd { @@ -806,12 +848,24 @@ enum iwl_dump_control {   * @flush_ctl: control flags   * @reserved: reserved   */ -struct iwl_tx_path_flush_cmd { +struct iwl_tx_path_flush_cmd_v1 {  	__le32 queues_ctl;  	__le16 flush_ctl;  	__le16 reserved;  } __packed; /* TX_PATH_FLUSH_CMD_API_S_VER_1 */ +/** + * struct iwl_tx_path_flush_cmd -- queue/FIFO flush command + * @sta_id: station ID to flush + * @tid_mask: TID mask to flush + * @reserved: reserved + */ +struct iwl_tx_path_flush_cmd { +	__le32 sta_id; +	__le16 tid_mask; +	__le16 reserved; +} __packed; /* TX_PATH_FLUSH_CMD_API_S_VER_2 */ +  /* Available options for the SCD_QUEUE_CFG HCMD */  enum iwl_scd_cfg_actions {  	SCD_CFG_DISABLE_QUEUE		= 0x0, @@ -821,16 +875,17 @@ enum iwl_scd_cfg_actions {  /**   * struct iwl_scd_txq_cfg_cmd - New txq hw scheduler config command - * @token: + * @token: unused   * @sta_id: station id - * @tid: + * @tid: TID   * @scd_queue: scheduler queue to confiug   * @action: 1 queue enable, 0 queue disable, 2 change txq's tid owner - *	Value is one of %iwl_scd_cfg_actions options + *	Value is one of &enum iwl_scd_cfg_actions options   * @aggregate: 1 aggregated queue, 0 otherwise - * @tx_fifo: %enum iwl_mvm_tx_fifo + * @tx_fifo: &enum iwl_mvm_tx_fifo   * @window: BA window size   * @ssn: SSN for the BA agreement + * @reserved: reserved   */  struct iwl_scd_txq_cfg_cmd {  	u8 token; | 
