fw-api: CL 5189165 - update fw common interface files

ath10k: provide channel state information, HTT CFR indication
<Describe here the change summary in detail>

Change-Id: I507e4a4aef7d321d3ad834a0ee1f9b8fc1238113
CRs-Fixed: 2262693
This commit is contained in:
spuligil
2018-08-16 00:03:55 -07:00
parent cd4976ab48
commit 03dd710655

493
fw/htt.h
View File

@@ -5597,6 +5597,7 @@ enum htt_t2h_msg_type {
HTT_T2H_MSG_TYPE_PEER_UNMAP_V2 = 0x1f,
HTT_T2H_MSG_TYPE_MONITOR_MAC_HEADER_IND = 0x20,
HTT_T2H_MSG_TYPE_FLOW_POOL_RESIZE = 0x21,
HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND = 0x22,
HTT_T2H_MSG_TYPE_TEST,
/* keep this last */
@@ -10589,4 +10590,496 @@ PREPACK struct htt_flow_pool_resize_t {
((_var) |= ((_val) << HTT_FLOW_POOL_RESIZE_FLOW_POOL_NEW_SIZE_S)); \
} while (0)
/**
* @brief host -> target channel change message
*
* @details
* the meesage is generated by FW every time FW changes channel. This will be used by host mainly
* to associate RX frames to correct channel they were received on.
* The following field definitions describe the format of the HTT target
* to host channel change message.
* |31 16|15 8|7 5|4 0|
* |------------------------------------------------------------|
* | reserved | MSG_TYPE |
* |------------------------------------------------------------|
* | CHAN_MHZ |
* |------------------------------------------------------------|
* | BAND_CENTER_FREQ1 |
* |------------------------------------------------------------|
* | BAND_CENTER_FREQ2 |
* |------------------------------------------------------------|
* | CHAN_PHY_MODE |
* |------------------------------------------------------------|
* Header fields:
* - MSG_TYPE
* Bits 7:0
* Value: 0xf
* - CHAN_MHZ
* Bits 31:0
* Purpose: frequency of the primary 20mhz channel.
* - BAND_CENTER_FREQ1
* Bits 31:0
* Purpose: centre frequency of the full channel.
* - BAND_CENTER_FREQ2
* Bits 31:0
* Purpose: centre frequency2 of the channel. is only valid for 11acvht 80plus80.
* - CHAN_PHY_MODE
* Bits 31:0
* Purpose: phy mode of the channel.
*/
PREPACK struct htt_chan_change_msg {
A_UINT32 chan_mhz; /* frequency in mhz */
A_UINT32 band_center_freq1; /* Center frequency 1 in MHz*/
A_UINT32 band_center_freq2; /* Center frequency 2 in MHz - valid only for 11acvht 80plus80 mode*/
A_UINT32 chan_mode; /* WLAN_PHY_MODE of the channel defined in wlan_defs.h */
} POSTPACK;
#define HTT_CFR_CAPTURE_MAGIC_PATTERN 0xCCCCCCCC
#define HTT_CFR_CAPTURE_READ_INDEX_OFFSET 0 /* bytes */
#define HTT_CFR_CAPTURE_SIZEOF_READ_INDEX_BYTES 4
#define HTT_CFR_CAPTURE_WRITE_INDEX_OFFSET /* bytes */ \
(HTT_CFR_CAPTURE_READ_INDEX_OFFSET + HTT_CFR_CAPTURE_SIZEOF_READ_INDEX_BYTES)
#define HTT_CFR_CAPTURE_SIZEOF_WRITE_INDEX_BYTES 4
#define HTT_CFR_CAPTURE_SIZEOF_MAGIC_PATTERN_BYTES 4
/*
* The read and write indices point to the data within the host buffer.
* Because the first 4 bytes of the host buffer is used for the read index and
* the next 4 bytes for the write index, the data itself starts at offset 8.
* The read index and write index are the byte offsets from the base of the
* meta-data buffer, and thus have a minimum value of 8 rather than 0.
* Refer the ASCII text picture below.
*/
#define HTT_CFR_CAPTURE_INITIAL_RW_START_INDEX \
(HTT_CFR_CAPTURE_SIZEOF_READ_INDEX_BYTES + \
HTT_CFR_CAPTURE_SIZEOF_WRITE_INDEX_BYTES)
/*
***************************************************************************
*
* Layout when CFR capture message type is 'HTT_PEER_CFR_CAPTURE_MSG_TYPE_1'
*
***************************************************************************
*
* The memory allocated by WMI_CHANNEL_CAPTURE_HOST_MEM_REQ_ID is used
* in the below format. The HTT message 'htt_cfr_dump_compl_ind' is sent by
* FW to Host whenever a CFR capture (CFR data1 or CFR data2 etc.,) is
* written into the Host memory region mentioned below.
*
* Read index is updated by the Host. At any point of time, the read index will
* indicate the index that will next be read by the Host. The read index is
* in units of bytes offset from the base of the meta-data buffer.
*
* Write index is updated by the FW. At any point of time, the write index will
* indicate from where the FW can start writing any new data. The write index is
* in units of bytes offset from the base of the meta-data buffer.
*
* If the Host is not fast enough in reading the CFR data, any new capture data
* would be dropped if there is no space left to write the new captures.
*
* The last 4 bytes of the memory region will have the magic pattern
* HTT_CFR_CAPTURE_MAGIC_PATTERN. This can be used to ensure that the FW does
* not overrun the host buffer.
*
* ,--------------------. read and write indices store the
* | | byte offset from the base of the
* | ,--------+--------. meta-data buffer to the next
* | | | | location within the data buffer
* | | v v that will be read / written
* ************************************************************************
* * Read * Write * * Magic *
* * index * index * CFR data1 ...... CFR data N * pattern *
* * (4 bytes) * (4 bytes) * * (4 bytes)*
* ************************************************************************
* |<---------- data buffer ---------->|
*
* |<----------------- meta-data buffer allocated in Host ----------------|
*
* Note:
* - Considering the 4 bytes needed to store the Read index (R) and the
* Write index (W), the initial value is as follows:
* R = W = HTT_CFR_CAPTURE_INITIAL_RW_START_INDEX
* - Buffer empty condition:
* R = W
*
* Regarding CFR data format:
* --------------------------
*
* Each CFR tone is stored in HW as 16-bits with the following format:
* {bits[15:12], bits[11:6], bits[5:0]} =
* {unsigned exponent (4 bits),
* signed mantissa_real (6 bits),
* signed mantissa_imag (6 bits)}
*
* CFR_real = mantissa_real * 2^(exponent-5)
* CFR_imag = mantissa_imag * 2^(exponent-5)
*
*
* The CFR data is written to the 16-bit unsigned output array (buff) in
* ascending tone order. For example, the Legacy20 CFR is output as follows:
*
* buff[0]: [CFR_exp[-26], CFR_mant_real[-26], CFR_mant_imag[-26]]
* buff[1]: [CFR_exp[-25], CFR_mant_real[-25], CFR_mant_imag[-25]]
* .
* .
* .
* buff[N-2]: [CFR_exp[25], CFR_mant_real[25], CFR_mant_imag[25]]
* buff[N-1]: [CFR_exp[26], CFR_mant_real[26], CFR_mant_imag[26]]
*/
/* Bandwidth of peer CFR captures */
typedef enum {
HTT_PEER_CFR_CAPTURE_BW_20MHZ = 0,
HTT_PEER_CFR_CAPTURE_BW_40MHZ = 1,
HTT_PEER_CFR_CAPTURE_BW_80MHZ = 2,
HTT_PEER_CFR_CAPTURE_BW_160MHZ = 3,
HTT_PEER_CFR_CAPTURE_BW_80_80MHZ = 4,
HTT_PEER_CFR_CAPTURE_BW_MAX,
} HTT_PEER_CFR_CAPTURE_BW;
/* Mode of the peer CFR captures. The type of RX frame for which the CFR
* was captured
*/
typedef enum {
HTT_PEER_CFR_CAPTURE_MODE_LEGACY = 0,
HTT_PEER_CFR_CAPTURE_MODE_DUP_LEGACY = 1,
HTT_PEER_CFR_CAPTURE_MODE_HT = 2,
HTT_PEER_CFR_CAPTURE_MODE_VHT = 3,
HTT_PEER_CFR_CAPTURE_MODE_MAX,
} HTT_PEER_CFR_CAPTURE_MODE;
typedef enum {
/* This message type is currently used for the below purpose:
*
* - capture_method = WMI_PEER_CFR_CAPTURE_METHOD_NULL_FRAME in the
* wmi_peer_cfr_capture_cmd. The associated memory region gets allocated
* through WMI_CHANNEL_CAPTURE_HOST_MEM_REQ_ID
*/
HTT_PEER_CFR_CAPTURE_MSG_TYPE_1 = 0x1,
/* Always keep this last */
HTT_PEER_CFR_CAPTURE_MSG_TYPE_MAX,
} HTT_PEER_CFR_CAPTURE_MSG_TYPE;
/**
* @brief target -> host CFR dump completion indication message definition
* htt_cfr_dump_compl_ind when the version is HTT_PEER_CFR_CAPTURE_MSG_TYPE_1.
*
* @details
* The following diagram shows the format of the Channel Frequency Response
* (CFR) dump completion indication. This inidcation is sent to the Host when
* the channel capture of a peer is copied by Firmware into the Host memory
*
* **************************************************************************
*
* Message format when the CFR capture message type is
* 'HTT_PEER_CFR_CAPTURE_MSG_TYPE_1'
*
* **************************************************************************
*
* |31 16|15 |7 0|
* |----------------------------------------------------------------|
* header: | reserved | msg_type |
* word 0 | | |
* |----------------------------------------------------------------|
* payload: | cfr_capture_msg_type |
* word 1 | |
* |----------------------------------------------------------------|
* | vdev_id | captype | chbw | sts | mode | capbw |S| req_id |
* word 2 | | | | | | | | |
* |----------------------------------------------------------------|
* | mac_addr31to0 |
* word 3 | |
* |----------------------------------------------------------------|
* | unused / reserved | mac_addr47to32 |
* word 4 | | |
* |----------------------------------------------------------------|
* | index |
* word 5 | |
* |----------------------------------------------------------------|
* | length |
* word 6 | |
* |----------------------------------------------------------------|
* | timestamp |
* word 7 | |
* |----------------------------------------------------------------|
* | counter |
* word 8 | |
* |----------------------------------------------------------------|
* | chan_mhz |
* word 9 | |
* |----------------------------------------------------------------|
* | band_center_freq1 |
* word 10 | |
* |----------------------------------------------------------------|
* | band_center_freq2 |
* word 11 | |
* |----------------------------------------------------------------|
* | chan_phy_mode |
* word 12 | |
* |----------------------------------------------------------------|
* where,
* req_id - memory request id (mem_req_id explained below)
* S - status field (status explained below)
* capbw - capture bandwidth (capture_bw explained below)
* mode - mode of capture (mode explained below)
* sts - space time streams (sts_count explained below)
* chbw - channel bandwidth (channel_bw explained below)
* captype - capture type (cap_type explained below)
*
* The following field definitions describe the format of the CFR dump
* completion indication sent from the target to the host
*
* Header fields:
*
* Word 0
* - msg_type
* Bits 7:0
* Purpose: Identifies this as CFR TX completion indication
* Value: HTT_T2H_MSG_TYPE_CFR_DUMP_COMPL_IND
* - reserved
* Bits 31:8
* Purpose: Reserved
* Value: 0
*
* Payload fields:
*
* Word 1
* - cfr_capture_msg_type
* Bits 31:0
* Purpose: Contains the type of the message HTT_PEER_CFR_CAPTURE_MSG_TYPE
* to specify the format used for the remainder of the message
* Value: HTT_PEER_CFR_CAPTURE_MSG_TYPE_1
* (currently only MSG_TYPE_1 is defined)
*
* Word 2
* - mem_req_id
* Bits 6:0
* Purpose: Contain the mem request id of the region where the CFR capture
* has been stored - of type WMI_HOST_MEM_REQ_ID
* Value: WMI_CHANNEL_CAPTURE_HOST_MEM_REQ_ID
* - status
* Bit 7
* Purpose: Boolean value carrying the status of the CFR capture of the peer
* Value: 1 (True) - Successful; 0 (False) - Not successful
* - capture_bw
* Bits 10:8
* Purpose: Carry the bandwidth of the CFR capture
* Value: Bandwidth of the CFR capture of type HTT_PEER_CFR_CAPTURE_BW
* - mode
* Bits 13:11
* Purpose: Carry the mode of the rx frame for which the CFR was captured
* Value: Mode of the CFR capture of type HTT_PEER_CFR_CAPTURE_MODE
* - sts_count
* Bits 16:14
* Purpose: Carry the number of space time streams
* Value: Number of space time streams
* - channel_bw
* Bits 19:17
* Purpose: Carry the bandwidth of the channel of the vdev performing the
* measurement
* Value: Bandwidth of the channel (of type HTT_PEER_CFR_CAPTURE_BW)
* - cap_type
* Bits 23:20
* Purpose: Carry the type of the capture
* Value: Capture type (of type WMI_PEER_CFR_CAPTURE_METHOD)
* - vdev_id
* Bits 31:24
* Purpose: Carry the virtual device id
* Value: vdev ID
*
* Word 3
* - mac_addr31to0
* Bits 31:0
* Purpose: Contain the bits 31:0 of the peer MAC address
* Value: Bits 31:0 of the peer MAC address
*
* Word 4
* - mac_addr47to32
* Bits 15:0
* Purpose: Contain the bits 47:32 of the peer MAC address
* Value: Bits 47:32 of the peer MAC address
*
* Word 5
* - index
* Bits 31:0
* Purpose: Contain the index at which this CFR dump was written in the Host
* allocated memory. This index is the number of bytes from the base address.
* Value: Index position
*
* Word 6
* - length
* Bits 31:0
* Purpose: Carry the length of the CFR capture of the peer, in bytes
* Value: Length of the CFR capture of the peer
*
* Word 7
* - timestamp
* Bits 31:0
* Purpose: Carry the time at which the CFR was captured in the hardware. The
* clock used for this timestamp is private to the target and not visible to
* the host i.e., Host can interpret only the relative timestamp deltas from
* one message to the next, but can't interpret the absolute timestamp from a
* single message.
* Value: Timestamp in microseconds
*
* Word 8
* - counter
* Bits 31:0
* Purpose: Carry the count of the current CFR capture from FW. This is
* helpful to identify any drops in FW in any scenario (e.g., lack of space
* in host memory)
* Value: Count of the current CFR capture
*
* Word 9
* - chan_mhz
* Bits 31:0
* Purpose: Carry the primary 20 MHz channel frequency in MHz of the VDEV
* Value: Primary 20 channel frequency
*
* Word 10
* - band_center_freq1
* Bits 31:0
* Purpose: Carry the center frequency 1 in MHz of the VDEV
* Value: Center frequency 1 in MHz
*
* Word 11
* - band_center_freq2
* Bits 31:0
* Purpose: Carry the center frequency 2 in MHz. valid only for 11acvht of
* the VDEV
* 80plus80 mode
* Value: Center frequency 2 in MHz
*
* Word 12
* - chan_phy_mode
* Bits 31:0
* Purpose: Carry the phy mode of the channel, of the VDEV
* Value: WLAN_PHY_MODE of the channel defined in wlan_defs.h
*/
PREPACK struct htt_cfr_dump_ind_type_1 {
A_UINT32 mem_req_id:7,
status:1,
capture_bw:3,
mode:3,
sts_count:3,
channel_bw:3,
cap_type:4,
vdev_id:8;
htt_mac_addr addr;
A_UINT32 index;
A_UINT32 length;
A_UINT32 timestamp;
A_UINT32 counter;
struct htt_chan_change_msg chan;
} POSTPACK;
PREPACK struct htt_cfr_dump_compl_ind {
A_UINT32 msg_type; /* HTT_PEER_CFR_CAPTURE_MSG_TYPE */
union {
/* Message format when msg_type = HTT_PEER_CFR_CAPTURE_MSG_TYPE_1 */
struct htt_cfr_dump_ind_type_1 htt_cfr_dump_compl_ind_type_1;
/* If there is a need to change the memory layout and its associated
* HTT indication format, a new CFR capture message type can be
* introduced and added into this union.
*/
};
} POSTPACK;
/*
* Get / set macros for the bit fields within WORD-2 of htt_cfr_dump_compl_ind,
* msg_type = HTT_PEER_CFR_CAPTURE_MSG_TYPE_1
*/
#define HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID_M 0X0000007F
#define HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID_S 0
#define HTT_T2H_CFR_DUMP_TYPE1_STATUS_M 0X00000080
#define HTT_T2H_CFR_DUMP_TYPE1_STATUS_S 7
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_BW_M 0X00000700
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_BW_S 8
#define HTT_T2H_CFR_DUMP_TYPE1_MODE_M 0X00003800
#define HTT_T2H_CFR_DUMP_TYPE1_MODE_S 11
#define HTT_T2H_CFR_DUMP_TYPE1_STS_M 0X0001C000
#define HTT_T2H_CFR_DUMP_TYPE1_STS_S 14
#define HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW_M 0X000E0000
#define HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW_S 17
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE_M 0X00F00000
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE_S 20
#define HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID_M 0XFF000000
#define HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID_S 24
#define HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_MEM_REQ_ID_S)
#define HTT_T2H_CFR_DUMP_TYPE1_STATUS_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_STATUS, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_STATUS_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_STATUS_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_STATUS_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_STATUS_S)
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_BW_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_CAP_BW, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_CAP_BW_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_BW_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_CAP_BW_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_CAP_BW_S)
#define HTT_T2H_CFR_DUMP_TYPE1_MODE_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_MODE, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_MODE_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_MODE_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_MODE_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_MODE_S)
#define HTT_T2H_CFR_DUMP_TYPE1_STS_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_STS, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_STS_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_STS_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_STS_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_STS_S)
#define HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_CHAN_BW_S)
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_CAP_TYPE_S)
#define HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID_SET(word, value) \
do { \
HTT_CHECK_SET_VAL(HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID, value); \
(word) |= (value) << HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID_S; \
} while (0)
#define HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID_GET(word) \
(((word) & HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID_M) >> \
HTT_T2H_CFR_DUMP_TYPE1_VDEV_ID_S)
#endif