blob: 3068a30a1f4a29a5b6ac65b27dd99b7810605a72 [file] [log] [blame]
/******************************************************************************
*
* Copyright(c) 2010 - 2014 Intel Corporation. All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
* Copyright(c) 2018 Intel Corporation
* 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 SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_TM_INFC_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_TM_INFC_H_
#include <linux/if_ether.h>
#include <linux/types.h>
/*
* Testmode GNL family command.
* There is only one NL command, not to be
* confused with testmode commands
*/
enum iwl_tm_gnl_cmd_t {
IWL_TM_GNL_CMD_EXECUTE = 0,
IWL_TM_GNL_CMD_SUBSCRIBE_EVENTS,
};
/* uCode trace buffer */
#define TRACE_BUFF_SIZE_MAX 0x200000
#define TRACE_BUFF_SIZE_MIN 0x1000
#define TRACE_BUFF_SIZE_DEF 0x20000
#define TM_CMD_BASE 0x100
#define TM_CMD_NOTIF_BASE 0x200
#define XVT_CMD_BASE 0x300
#define XVT_CMD_NOTIF_BASE 0x400
#define XVT_BUS_TESTER_BASE 0x500
/**
* signifies iwl_tm_mod_tx_request is set to infinite mode,
* when iwl_tm_mod_tx_request.times == IWL_XVT_TX_MODULATED_INFINITE
*/
#define IWL_XVT_TX_MODULATED_INFINITE (0)
#define IWL_XVT_MAX_MAC_HEADER_LENGTH (36)
#define IWL_XVT_MAX_NUM_OF_FRAMES (32)
/*
* Periphery registers absolute lower bound. This is used in order to
* differentiate registery access through HBUS_TARG_PRPH_.* and
* HBUS_TARG_MEM_* accesses.
*/
#define IWL_ABS_PRPH_START (0xA00000)
/* User-Driver interface commands */
enum {
IWL_TM_USER_CMD_HCMD = TM_CMD_BASE,
IWL_TM_USER_CMD_REG_ACCESS,
IWL_TM_USER_CMD_SRAM_WRITE,
IWL_TM_USER_CMD_SRAM_READ,
IWL_TM_USER_CMD_GET_DEVICE_INFO,
IWL_TM_USER_CMD_GET_DEVICE_STATUS,
IWL_TM_USER_CMD_BEGIN_TRACE,
IWL_TM_USER_CMD_END_TRACE,
IWL_TM_USER_CMD_TRACE_DUMP,
IWL_TM_USER_CMD_NOTIFICATIONS,
IWL_TM_USER_CMD_SWITCH_OP_MODE,
IWL_TM_USER_CMD_GET_SIL_STEP,
IWL_TM_USER_CMD_GET_DRIVER_BUILD_INFO,
IWL_TM_USER_CMD_GET_FW_INFO,
IWL_TM_USER_CMD_BUS_DATA_ACCESS,
IWL_TM_USER_CMD_GET_SIL_TYPE,
IWL_TM_USER_CMD_GET_RFID,
IWL_TM_USER_CMD_NOTIF_UCODE_RX_PKT = TM_CMD_NOTIF_BASE,
IWL_TM_USER_CMD_NOTIF_DRIVER,
IWL_TM_USER_CMD_NOTIF_RX_HDR,
IWL_TM_USER_CMD_NOTIF_COMMIT_STATISTICS,
IWL_TM_USER_CMD_NOTIF_PHY_DB,
IWL_TM_USER_CMD_NOTIF_DTS_MEASUREMENTS,
IWL_TM_USER_CMD_NOTIF_MONITOR_DATA,
IWL_TM_USER_CMD_NOTIF_UCODE_MSGS_DATA,
IWL_TM_USER_CMD_NOTIF_APMG_PD,
IWL_TM_USER_CMD_NOTIF_RETRIEVE_MONITOR,
IWL_TM_USER_CMD_NOTIF_CRASH_DATA,
IWL_TM_USER_CMD_NOTIF_BFE,
IWL_TM_USER_CMD_NOTIF_LOC_MCSI,
IWL_TM_USER_CMD_NOTIF_LOC_RANGE,
IWL_TM_USER_CMD_NOTIF_IQ_CALIB,
IWL_TM_USER_CMD_NOTIF_CT_KILL,
};
/*
* xVT commands indeces start where common
* testmode commands indeces end
*/
enum {
IWL_XVT_CMD_START = XVT_CMD_BASE,
IWL_XVT_CMD_STOP,
IWL_XVT_CMD_CONTINUE_INIT,
IWL_XVT_CMD_GET_PHY_DB_ENTRY,
IWL_XVT_CMD_SET_CONFIG,
IWL_XVT_CMD_GET_CONFIG,
IWL_XVT_CMD_MOD_TX,
IWL_XVT_CMD_RX_HDRS_MODE,
IWL_XVT_CMD_ALLOC_DMA,
IWL_XVT_CMD_GET_DMA,
IWL_XVT_CMD_FREE_DMA,
IWL_XVT_CMD_GET_CHIP_ID,
IWL_XVT_CMD_APMG_PD_MODE,
IWL_XVT_CMD_GET_MAC_ADDR_INFO,
IWL_XVT_CMD_MOD_TX_STOP,
IWL_XVT_CMD_TX_QUEUE_CFG,
IWL_XVT_CMD_DRIVER_CMD,
/* Driver notifications */
IWL_XVT_CMD_SEND_REPLY_ALIVE = XVT_CMD_NOTIF_BASE,
IWL_XVT_CMD_SEND_RFKILL,
IWL_XVT_CMD_SEND_NIC_ERROR,
IWL_XVT_CMD_SEND_NIC_UMAC_ERROR,
IWL_XVT_CMD_SEND_MOD_TX_DONE,
IWL_XVT_CMD_ENHANCED_TX_DONE,
IWL_XVT_CMD_TX_CMD_RESP,
IWL_XVT_CMD_ECHO_NOTIF,
/* Bus Tester Commands*/
IWL_TM_USER_CMD_SV_BUS_CONFIG = XVT_BUS_TESTER_BASE,
IWL_TM_USER_CMD_SV_BUS_RESET,
IWL_TM_USER_CMD_SV_IO_TOGGLE,
IWL_TM_USER_CMD_SV_GET_STATUS,
IWL_TM_USER_CMD_SV_RD_WR_UINT8,
IWL_TM_USER_CMD_SV_RD_WR_UINT32,
IWL_TM_USER_CMD_SV_RD_WR_BUFFER,
};
/**
* User space - driver interface command. These commands will be sent as
* sub-commands through IWL_XVT_CMD_DRIVER_CMD.
*/
enum {
IWL_DRV_CMD_CONFIG_TX_QUEUE = 0,
IWL_DRV_CMD_SET_TX_PAYLOAD,
IWL_DRV_CMD_TX_START,
IWL_DRV_CMD_TX_STOP,
IWL_DRV_CMD_GET_RX_AGG_STATS,
IWL_DRV_CMD_CONFIG_RX_MPDU,
IWL_DRV_CMD_ECHO_NOTIF,
};
enum {
NOTIFICATIONS_DISABLE = 0,
NOTIFICATIONS_ENABLE = 1,
};
/**
* struct iwl_tm_cmd_request - Host command request
* @id: Command ID
* @want_resp: True value if response is required, else false (0)
* @len: Data length
* @data: For command in, casted to iwl_host_cmd
* rx packet when structure is used for command response.
*/
struct iwl_tm_cmd_request {
__u32 id;
__u32 want_resp;
__u32 len;
__u8 data[];
} __packed __aligned(4);
/**
* struct iwl_svt_sdio_enable - SV Tester SDIO bus enable command
* @enable: Function enable/disable 1/0
*/
struct iwl_tm_sdio_io_toggle {
__u32 enable;
} __packed __aligned(4);
/* Register operations - Operation type */
enum { IWL_TM_REG_OP_READ = 0, IWL_TM_REG_OP_WRITE, IWL_TM_REG_OP_MAX };
/**
* struct iwl_tm_reg_op - Single register operation data
* @op_type: READ/WRITE
* @address: Register address
* @value: Write value, or read result
*/
struct iwl_tm_reg_op {
__u32 op_type;
__u32 address;
__u32 value;
} __packed __aligned(4);
/**
* struct iwl_tm_regs_request - Register operation request data
* @num: number of operations in struct
* @reg_ops: Array of register operations
*/
struct iwl_tm_regs_request {
__u32 num;
struct iwl_tm_reg_op reg_ops[];
} __packed __aligned(4);
/**
* struct iwl_tm_trace_request - Data for trace begin requests
* @size: Requested size of trace buffer
* @addr: Resulting DMA address of trace buffer LSB
*/
struct iwl_tm_trace_request {
__u64 addr;
__u32 size;
} __packed __aligned(4);
/**
* struct iwl_tm_sram_write_request
* @offest: Address offset
* @length: input data length
* @buffer: input data
*/
struct iwl_tm_sram_write_request {
__u32 offset;
__u32 len;
__u8 buffer[];
} __packed __aligned(4);
/**
* struct iwl_tm_sram_read_request
* @offest: Address offset
* @length: data length
*/
struct iwl_tm_sram_read_request {
__u32 offset;
__u32 length;
} __packed __aligned(4);
/**
* struct iwl_tm_dev_info_req - Request data for get info request
* @read_sv: rather or not read sv_srop
*/
struct iwl_tm_dev_info_req {
__u32 read_sv;
} __packed __aligned(4);
/**
* struct iwl_tm_dev_info - Result data for get info request
* @dev_id:
* @vendor_id:
* @silicon:
* @fw_ver:
* @driver_ver:
* @build_ver:
*/
struct iwl_tm_dev_info {
__u32 dev_id;
__u32 vendor_id;
__u32 silicon_step;
__u32 fw_ver;
__u32 build_ver;
__u8 driver_ver[];
} __packed __aligned(4);
/*
* struct iwl_tm_thrshld_md - tx packet metadata that crosses a thrshld
*
* @monitor_collec_wind: the size of the window to collect the logs
* @seq: packet sequence
* @pkt_start: start time of triggering pkt
* @pkt_end: end time of triggering pkt
* @msrmnt: the tx latency of the pkt
* @tid: tid of the pkt
* @mode: recording mode (internal buffer or continuous recording).
*/
struct iwl_tm_thrshld_md {
__u16 monitor_collec_wind;
__u16 seq;
__u32 pkt_start;
__u32 pkt_end;
__u32 msrmnt;
__u16 tid;
__u8 mode;
} __packed __aligned(4);
#define MAX_OP_MODE_LENGTH 16
/**
* struct iwl_switch_op_mode - switch op_mode
* @new_op_mode: size of data
*/
struct iwl_switch_op_mode {
__u8 new_op_mode[MAX_OP_MODE_LENGTH];
} __packed __aligned(4);
/**
* struct iwl_sil_step - holds the silicon step
* @silicon_step: the device silicon step
*/
struct iwl_sil_step {
__u32 silicon_step;
} __packed __aligned(4);
/**
* struct iwl_sil_type - holds the silicon type
* @silicon_type: the device silicon type
*/
struct iwl_tm_sil_type {
__u32 silicon_type;
} __packed __aligned(4);
/**
* struct iwl_tm_rfid - Currently connected RF device info
* @flavor: - RFID flavor
* @dash: - RFID dash
* @step: - RFID step
* @type: - RFID type
*/
struct iwl_tm_rfid {
__u32 flavor;
__u32 dash;
__u32 step;
__u32 type;
} __packed __aligned(4);
#define MAX_DRIVER_VERSION_LEN 256
#define MAX_BUILD_DATE_LEN 32
/**
* struct iwl_tm_build_info - Result data for get driver build info request
* @driver_version: driver version in tree:branch:build:sha1
* @branch_time: branch creation time
* @build_time: build time
*/
struct iwl_tm_build_info {
__u8 driver_version[MAX_DRIVER_VERSION_LEN];
__u8 branch_time[MAX_BUILD_DATE_LEN];
__u8 build_time[MAX_BUILD_DATE_LEN];
} __packed __aligned(4);
/**
* struct iwl_tm_get_fw_info - get the FW info
* @fw_major_ver: the fw major version
* @fw_minor_ver: the fw minor version
* @fw_capa_flags: the fw capabilities flags
* @fw_capa_api_len: the fw capabilities api length in data
* @fw_capa_len: the fw capabilities length in data
* @data: fw_capa_api and fa_capa data (length defined by fw_capa_api_len
* + fw_capa_len)
*/
struct iwl_tm_get_fw_info {
__u32 fw_major_ver;
__u32 fw_minor_ver;
__u32 fw_capa_flags;
__u32 fw_capa_api_len;
__u32 fw_capa_len;
__u8 data[];
} __packed __aligned(4);
/* xVT definitions */
#define IWL_XVT_RFKILL_OFF 0
#define IWL_XVT_RFKILL_ON 1
struct iwl_xvt_user_calib_ctrl {
__u32 flow_trigger;
__u32 event_trigger;
} __packed __aligned(4);
#define IWL_USER_FW_IMAGE_IDX_INIT 0
#define IWL_USER_FW_IMAGE_IDX_REGULAR 1
#define IWL_USER_FW_IMAGE_IDX_WOWLAN 2
#define IWL_USER_FW_IMAGE_IDX_TYPE_MAX 3
/**
* iwl_xvt_sw_cfg_request - Data for set SW stack configuration request
* @load_mask: bit[0] = Init FW
* bit[1] = Runtime FW
* @cfg_mask: Mask for which calibrations to regard
* @phy_config: PHY_CONFIGURATION command paramter
* Used only for "Get SW CFG"
* @get_calib_type: Used only in "Get SW CFG"
* 0: Get FW original calib ctrl
* 1: Get actual calib ctrl
* @calib_ctrl: Calibration control for each FW
*/
enum { IWL_XVT_GET_CALIB_TYPE_DEF = 0, IWL_XVT_GET_CALIB_TYPE_RUNTIME };
struct iwl_xvt_sw_cfg_request {
__u32 load_mask;
__u32 cfg_mask;
__u32 phy_config;
__u32 get_calib_type;
__u32 dbg_flags;
struct iwl_xvt_user_calib_ctrl calib_ctrl[IWL_UCODE_TYPE_MAX];
} __packed __aligned(4);
/**
* iwl_xvt_sw_cfg_request - Data for set SW stack configuration request
* @type: Type of DB section
* @chg_id: Channel Group ID, relevant only when
* type is CHG PAPD or CHG TXP calibrations
* @size: Size of result data, in bytes
* @data: Result entry data
*/
struct iwl_xvt_phy_db_request {
__u32 type;
__u32 chg_id;
__u32 size;
__u8 data[];
} __packed __aligned(4);
#define IWL_TM_STATION_COUNT 16
/**
* struct iwl_tm_tx_request - Data transmission request
* @times: Number of times to transmit the data.
* @delay_us: Delay between frames
* @pa_detect_en: Flag. When True, enable PA detector
* @trigger_led: Flag. When true, light led when transmitting
* @len: Size of data buffer
* @rate_flags: Tx Configuration rate flags
* @no_ack: Flag. When true, FW will not send ack
* @sta_id: Station ID
* @data: Data to transmit
*/
struct iwl_tm_mod_tx_request {
__u32 times;
__u32 delay_us;
__u32 pa_detect_en;
__u32 trigger_led;
__u32 len;
__u32 rate_flags;
__u32 no_ack;
__u8 sta_id;
__u8 data[];
} __packed __aligned(4);
/**
* struct iwl_xvt_tx_mod_task_data - Data for modulated tx task handler
* @lmac_id: lmac index
* @xvt: pointer to the xvt op mode
* @tx_req: pointer to data of transmission request
*/
struct iwl_xvt_tx_mod_task_data {
__u32 lmac_id;
struct iwl_xvt* xvt;
struct iwl_tm_mod_tx_request tx_req;
} __packed __aligned(4);
/**
* error status for status parameter in struct iwl_xvt_tx_mod_done
*/
enum {
XVT_TX_DRIVER_SUCCESSFUL = 0,
XVT_TX_DRIVER_QUEUE_FULL,
XVT_TX_DRIVER_TIMEOUT,
XVT_TX_DRIVER_ABORTED
};
/**
* struct iwl_xvt_tx_mod_done - Notification data for modulated tx
* @num_of_packets: number of sent packets
* @status: tx task handler error status
* @lmac_id: lmac index
*/
struct iwl_xvt_tx_mod_done {
__u64 num_of_packets;
__u32 status;
__u32 lmac_id;
} __packed __aligned(4);
/**
* struct iwl_xvt_tx_mod_stop - input for stop modulated tx
* @lmac_id: which lmac id to stop
*/
struct iwl_xvt_tx_mod_stop {
__u32 lmac_id;
} __packed __aligned(4);
/**
* struct iwl_xvt_rx_hdrs_mode_request - Start/Stop gathering headers info.
* @mode: 0 - stop
* 1 - start
*/
struct iwl_xvt_rx_hdrs_mode_request {
__u32 mode;
} __packed __aligned(4);
/**
* struct iwl_xvt_apmg_pd_mode_request - Start/Stop gathering apmg_pd info.
* @mode: 0 - stop
* 1 - start
*/
struct iwl_xvt_apmg_pd_mode_request {
__u32 mode;
} __packed __aligned(4);
/**
* struct iwl_xvt_alloc_dma - Data for alloc dma requests
* @addr: Resulting DMA address of trace buffer LSB
* @size: Requested size of dma buffer
*/
struct iwl_xvt_alloc_dma {
__u64 addr;
__u32 size;
} __packed __aligned(4);
/**
* struct iwl_xvt_alloc_dma - Data for alloc dma requests
* @size: size of data
* @data: Data to transmit
*/
struct iwl_xvt_get_dma {
__u32 size;
__u8 data[];
} __packed __aligned(4);
/**
* struct iwl_xvt_chip_id - get the chip id from SCU
* @registers: an array of registers to hold the chip id data
*/
struct iwl_xvt_chip_id {
__u32 registers[3];
} __packed __aligned(4);
/**
* struct iwl_tm_crash_data - Notifications containing crash data
* @data_type: type of the data
* @size: data size
* @data: data
*/
struct iwl_tm_crash_data {
__u32 size;
__u8 data[];
} __packed __aligned(4);
/**
* struct iwl_xvt_curr_mac_addr_info - Current mac address data
* @curr_mac_addr: the current mac address
*/
struct iwl_xvt_mac_addr_info {
__u8 mac_addr[ETH_ALEN];
} __packed __aligned(4);
enum {
TX_QUEUE_CFG_REMOVE,
TX_QUEUE_CFG_ADD,
};
/**
* iwl_xvt_tx_queue_cfg - add/remove tx queue
* @ sta_id: station ID associated with queue
* @ flags: 0 - remove queue, 1 - add queue
*/
struct iwl_xvt_tx_queue_cfg {
__u8 sta_id;
__u8 operation;
} __packed __aligned(4);
/**
* iwl_xvt_driver_command_req - wrapper for general driver command that are sent
* by IWL_XVT_CMD_DRIVER_CMD
* @ command_id: sub comamnd ID
* @ max_out_length: max size in bytes of the sub command's expected response
* @ input_data: place holder for the sub command's input structure
*/
struct iwl_xvt_driver_command_req {
__u32 command_id;
__u32 max_out_length;
__u8 input_data[0];
} __packed __aligned(4);
/**
* iwl_xvt_driver_command_resp - response of IWL_XVT_CMD_DRIVER_CMD
* @ command_id: sub command ID
* @ length: resp_data length in bytes
* @ resp_data: place holder for the sub command's rseponse data
*/
struct iwl_xvt_driver_command_resp {
__u32 command_id;
__u32 length;
__u8 resp_data[0];
} __packed __aligned(4);
/**
* iwl_xvt_txq_config - add/remove tx queue. IWL_DRV_CMD_CONFIG_TX_QUEUE input.
* @sta_id: station id
* @tid: TID
* @scd_queue: scheduler queue to configure
* @action: 1 queue enable, 0 queue disable, 2 change txq's tid owner
* Value is one of &enum iwl_scd_cfg_actions options
* @aggregate: 1 aggregated queue, 0 otherwise
* @tx_fifo: &enum iwl_mvm_tx_fifo
* @window: BA window size
* @reserved: reserved
* @ssn: SSN for the BA agreement
* @flags: flags for iwl_tx_queue_cfg_cmd. see &enum iwl_tx_queue_cfg_actions
* @reserved2: reserved
* @queue_size: size of configured queue
*/
struct iwl_xvt_txq_config {
uint8_t sta_id;
uint8_t tid;
uint8_t scd_queue;
uint8_t action;
uint8_t aggregate;
uint8_t tx_fifo;
uint8_t window;
uint8_t reserved;
uint16_t ssn;
uint16_t flags;
uint16_t reserved2;
int queue_size;
} __packed __aligned(4);
/**
* iwl_xvt_txq_config_resp - response from IWL_DRV_CMD_CONFIG_TX_QUEUE
* @sta_id: taken from command
* @tid: taken from command
* @scd_queue: queue number assigned to this RA -TID
* @reserved: for alignment
*/
struct iwl_xvt_txq_config_resp {
uint8_t sta_id;
uint8_t tid;
uint8_t scd_queue;
uint8_t reserved;
} __packed __aligned(4);
/**
* struct iwl_xvt_set_tx_payload - input for TX payload configuration
* @index: payload's index in 'payloads' array in struct iwl_xvt
* @length: payload length in bytes
* @payload: buffer containing payload
*/
struct iwl_xvt_set_tx_payload {
uint16_t index;
uint16_t length;
uint8_t payload[];
} __packed __aligned(4);
/**
* struct tx_cmd_commom_data - Data shared between all queues for TX
* command configuration
* @rate_flags: Tx Configuration rate flags
* @tx_flags: TX flags configuration
* @initial_rate_index: Start index in TLC table
* @rts_retry_limit: Max retry for RTS transmit
* @data_retry_limit: Max retry for data transmit
* @fragment_size: 0 - no fragnentation else - max fragment size
* @frag_num: Array of fragments numbers
*/
struct tx_cmd_commom_data {
uint32_t rate_flags;
uint32_t tx_flags;
uint8_t initial_rate_index;
uint8_t rts_retry_limit;
uint8_t data_retry_limit;
uint8_t fragment_size;
uint8_t frag_num[32];
} __packed __aligned(4);
/**
* struct tx_cmd_frame - frame specific transmission data
* @times: Number of subsequent times to transmit tx command to queue
* @sta_id: Station index
* @queue: Transmission queue
* @tid_tspec: TID tspec
* @sec_ctl: security control
* @payload_index: payload buffer index in 'payloads' array in struct iwl_xvt
* @key: security key
* @header: MAC header
*/
struct tx_cmd_frame_data {
uint16_t times;
uint8_t sta_id;
uint8_t queue;
uint8_t tid_tspec;
uint8_t sec_ctl;
uint8_t payload_index;
uint8_t reserved;
uint8_t key[16];
uint8_t header[IWL_XVT_MAX_MAC_HEADER_LENGTH];
} __packed __aligned(4);
/**
* struct iwl_xvt_tx_start - Data for transmission. IWL_DRV_CMD_TX_START input.
* @num_of_cycles: Number of times to go over frames_data. When set to zero -
* infinite transmit (max amount is ULLONG_MAX) - go over frames_data and sent
* tx until stop command is received.
* @num_of_different_frames: actual number of entries in frames_data
* @send_tx_resp: Whether to send FW's tx response to user
* @reserved1: for alignment
* @reserved2: for alignment
* @tx_data: Tx command configuration shared data
* @frames_data: array of specific frame data for each queue
*/
struct iwl_xvt_tx_start {
uint16_t num_of_cycles;
uint16_t num_of_different_frames;
uint8_t send_tx_resp;
uint8_t reserved1;
uint16_t reserved2;
struct tx_cmd_commom_data tx_data;
struct tx_cmd_frame_data frames_data[IWL_XVT_MAX_NUM_OF_FRAMES];
} __packed __aligned(4);
/**
* struct iwl_xvt_enhanced_tx_data - Data for enhanced TX task
* @xvt: pointer to the xvt op mode
* @tx_start_data: IWL_DRV_CMD_TX_START command's input
*/
struct iwl_xvt_enhanced_tx_data {
struct iwl_xvt* xvt;
struct iwl_xvt_tx_start tx_start_data;
} __packed __aligned(4);
/**
* struct iwl_xvt_post_tx_data - transmission data per queue
* @num_of_packets: number of sent packets
* @queue: queue packets were sent on
*/
struct iwl_xvt_post_tx_data {
uint64_t num_of_packets;
uint16_t queue;
uint16_t reserved;
} __packed __aligned(4);
/**
* struct iwl_xvt_tx_done - Notification data for sent tx
* @status: tx task handler error status
* @num_of_queues: total number of queues tx was sent from. Equals to number of
* entries in tx_data
* @tx_data: data of sent frames for each queue
*/
struct iwl_xvt_tx_done {
uint32_t status;
uint32_t num_of_queues;
struct iwl_xvt_post_tx_data tx_data[];
} __packed __aligned(4);
/*
* struct iwl_xvt_get_rx_agg_stats - get rx aggregation statistics
* @sta_id: station id of relevant ba
* @tid: tid of relevant ba
* @reserved: reserved
*/
struct iwl_xvt_get_rx_agg_stats {
uint8_t sta_id;
uint8_t tid;
uint16_t reserved;
} __packed __aligned(4);
/*
* struct iwl_xvt_get_rx_agg_stats_resp - rx aggregation statistics response
* @dropped: number of frames dropped (e.g. too old)
* @released: total number of frames released (either in-order or
* out of order (after passing the reorder buffer)
* @skipped: number of frames skipped the reorder buffer (in-order)
* @reordered: number of frames gone through the reorder buffer (unordered)
*/
struct iwl_xvt_get_rx_agg_stats_resp {
uint32_t dropped;
uint32_t released;
uint32_t skipped;
uint32_t reordered;
} __packed __aligned(4);
/* struct iwl_xvt_config_rx_mpdu - Whether to send RX MPDU notifications to user
* @enable: 0 - disable. don't send rx mpdu to user 1 - send rx mpdu to user.
* @reserved: reserved
*/
struct iwl_xvt_config_rx_mpdu_req {
uint8_t enable;
uint8_t reserved[3];
} __packed __aligned(4);
#endif // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_TM_INFC_H_