diff options
| author | Service qcabuildsw <qcabuildsw@localhost> | 2017-03-22 12:55:02 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-03-22 12:55:02 -0700 |
| commit | 770bc784123c615cb95ccb32cb6bb2f6ccb65ae3 (patch) | |
| tree | ff7aca45c771e1dd4441d6fc22bffb1f028176ae | |
| parent | 6edb4fa157c6c1053aeb28f191192e5da138df99 (diff) | |
| parent | 0261aaaf1017bd83ac9b66b7687791dee8767225 (diff) | |
Merge "fw-api: CL 2936935 - update fw common interface files" into wlan-api.lnx.1.1-dev
| -rwxr-xr-x | fw/wmi_services.h | 1 | ||||
| -rwxr-xr-x | fw/wmi_tlv_defs.h | 21 | ||||
| -rwxr-xr-x | fw/wmi_unified.h | 208 | ||||
| -rwxr-xr-x | fw/wmi_version.h | 2 |
4 files changed, 229 insertions, 3 deletions
diff --git a/fw/wmi_services.h b/fw/wmi_services.h index d50e115357a9..1efcfb4403f9 100755 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -189,6 +189,7 @@ typedef enum { WMI_SERVICE_MULTIPLE_VDEV_RESTART=120, /* Support for single command for multiple vdev restart */ WMI_SERVICE_PKT_ROUTING=121, /* Support for routing specific data packets to selected destination rings */ WMI_SERVICE_CHECK_CAL_VERSION=122, /* Support cal version check */ + WMI_SERVICE_OFFCHAN_TX_WMI=123, /* Support offchan data/mgmt tx over wmi */ /******* ADD NEW SERVICES HERE UNTIL ALL VALUES UP TO 128 ARE USED *******/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index c6c620a60713..c5b050eea78c 100755 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -814,6 +814,9 @@ typedef enum { WMITLV_TAG_STRUC_wmi_coex_bt_activity_event_fixed_param, WMITLV_TAG_STRUC_wmi_vdev_get_tx_power_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_vdev_tx_power_event_fixed_param, + WMITLV_TAG_STRUC_wmi_offchan_data_tx_compl_event_fixed_param, + WMITLV_TAG_STRUC_wmi_offchan_data_tx_send_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_tx_send_params, } WMITLV_TAG_ID; /* @@ -1142,6 +1145,7 @@ typedef enum { OP(WMI_VDEV_SET_ARP_STAT_CMDID) \ OP(WMI_VDEV_GET_ARP_STAT_CMDID) \ OP(WMI_VDEV_GET_TX_POWER_CMDID) \ + OP(WMI_OFFCHAN_DATA_TX_SEND_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -1323,6 +1327,7 @@ typedef enum { OP(WMI_VDEV_GET_ARP_STAT_EVENTID) \ OP(WMI_WLAN_COEX_BT_ACTIVITY_EVENTID) \ OP(WMI_VDEV_GET_TX_POWER_EVENTID) \ + OP(WMI_OFFCHAN_DATA_TX_COMPLETION_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2049,10 +2054,19 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_TX_CMDID); /* Management tx send cmd */ #define WMITLV_TABLE_WMI_MGMT_TX_SEND_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_tx_send_cmd_fixed_param, wmi_mgmt_tx_send_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tx_send_params, wmi_tx_send_params, tx_send_params, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_TX_SEND_CMDID); +/* offchan data tx send cmd */ +#define WMITLV_TABLE_WMI_OFFCHAN_DATA_TX_SEND_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_offchan_data_tx_send_cmd_fixed_param, wmi_offchan_data_tx_send_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tx_send_params, wmi_tx_send_params, tx_send_params, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_OFFCHAN_DATA_TX_SEND_CMDID); + /* ADD clear response Cmd */ #define WMITLV_TABLE_WMI_ADDBA_CLEAR_RESP_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_addba_clear_resp_cmd_fixed_param, wmi_addba_clear_resp_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -3409,6 +3423,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_TX_PAUSE_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_tx_compl_event_fixed_param, wmi_mgmt_tx_compl_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_TX_COMPLETION_EVENTID); +/* offchan data TX completion event */ +#define WMITLV_TABLE_WMI_OFFCHAN_DATA_TX_COMPLETION_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_offchan_data_tx_compl_event_fixed_param, wmi_offchan_data_tx_compl_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_OFFCHAN_DATA_TX_COMPLETION_EVENTID); + /* Bundled Mgmt TX completion event */ #define WMITLV_TABLE_WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_tx_compl_bundle_event_fixed_param, wmi_mgmt_tx_compl_bundle_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index d5377cfbe285..6dc18221eb20 100755 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -501,6 +501,8 @@ typedef enum { WMI_PRB_TMPL_CMDID, /** Transmit Mgmt frame by reference */ WMI_MGMT_TX_SEND_CMDID, + /** Transmit data frame by reference */ + WMI_OFFCHAN_DATA_TX_SEND_CMDID, /** commands to directly control ba negotiation directly from host. only used in test mode */ @@ -1209,8 +1211,10 @@ typedef enum { * Use this event if number of vdevs > 32. */ WMI_TBTTOFFSET_EXT_UPDATE_EVENTID, + /** Event for offchan data TX completion event */ + WMI_OFFCHAN_DATA_TX_COMPLETION_EVENTID, - /*ADDBA Related WMI Events*/ + /* ADDBA Related WMI Events*/ /** Indication the completion of the prior WMI_PEER_TID_DELBA_CMDID(initiator) */ WMI_TX_DELBA_COMPLETE_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_BA_NEG), @@ -3393,6 +3397,167 @@ typedef struct { */ } wmi_mgmt_tx_hdr; +#define WMI_TX_SEND_PARAM_PWR_GET(tx_param_dword0) WMI_GET_BITS(tx_param_dword0, 0, 8) +#define WMI_TX_SEND_PARAM_PWR_SET(tx_param_dword0, value) WMI_SET_BITS(tx_param_dword0, 0, 8, value) + +#define WMI_TX_SEND_PARAM_MCS_MASK_GET(tx_param_dword0) WMI_GET_BITS(tx_param_dword0, 8, 12) +#define WMI_TX_SEND_PARAM_MCS_MASK_SET(tx_param_dword0, value) WMI_SET_BITS(tx_param_dword0, 8, 12, value) + +#define WMI_TX_SEND_PARAM_NSS_MASK_GET(tx_param_dword0) WMI_GET_BITS(tx_param_dword0, 20, 8) +#define WMI_TX_SEND_PARAM_NSS_MASK_SET(tx_param_dword0, value) WMI_SET_BITS(tx_param_dword0, 20, 8, value) + +#define WMI_TX_SEND_PARAM_RETRY_LIMIT_GET(tx_param_dword0) WMI_GET_BITS(tx_param_dword0, 28, 4) +#define WMI_TX_SEND_PARAM_RETRY_LIMIT_SET(tx_param_dword0, value) WMI_SET_BITS(tx_param_dword0, 28, 4, value) + +#define WMI_TX_SEND_PARAM_CHAIN_MASK_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 0, 8) +#define WMI_TX_SEND_PARAM_CHAIN_MASK_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 0, 8, value) + +#define WMI_TX_SEND_PARAM_BW_MASK_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 8, 7) +#define WMI_TX_SEND_PARAM_BW_MASK_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 8, 7, value) + +#define WMI_TX_SEND_PARAM_PREAMBLE_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 15, 5) +#define WMI_TX_SEND_PARAM_PREAMBLE_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 15, 5, value) + +#define WMI_TX_SEND_PARAM_FRAME_TYPE_GET(tx_param_dword1) WMI_GET_BITS(tx_param_dword1, 20, 1) +#define WMI_TX_SEND_PARAM_FRAME_TYPE_SET(tx_param_dword1, value) WMI_SET_BITS(tx_param_dword1, 20, 1, value) + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_send_params */ + + union { + struct { + /* DWORD 0: tx power, tx rate, retry_limit */ + A_UINT32 + /* pwr - + * Specify what power the tx frame needs to be transmitted at. + * The power a signed (two's complement) value is in units of 0.5 dBm. + * The value needs to be appropriately sign-extended when extracting + * the value from the message and storing it in a variable that is + * larger than A_INT8. (fw automatically handles this sign-extension.) + * If the transmission uses multiple tx chains, this power spec is + * the total transmit power, assuming incoherent combination of + * per-chain power to produce the total power. + */ + pwr: 8, + + /* mcs_mask - + * Specify the allowable values for MCS index (modulation and coding) + * to use for transmitting the frame. + * + * For HT / VHT preamble types, this mask directly corresponds to + * the HT or VHT MCS indices that are allowed. For each bit N set + * within the mask, MCS index N is allowed for transmitting the frame. + * For legacy CCK and OFDM rates, separate bits are provided for CCK + * rates versus OFDM rates, so the host has the option of specifying + * that the target must transmit the frame with CCK or OFDM rates + * (not HT or VHT), but leaving the decision to the target whether + * to use CCK or OFDM. + * + * For CCK and OFDM, the bits within this mask are interpreted as + * follows: + * bit 0 -> CCK 1 Mbps rate is allowed + * bit 1 -> CCK 2 Mbps rate is allowed + * bit 2 -> CCK 5.5 Mbps rate is allowed + * bit 3 -> CCK 11 Mbps rate is allowed + * bit 4 -> OFDM BPSK modulation, 1/2 coding rate is allowed + * bit 5 -> OFDM BPSK modulation, 3/4 coding rate is allowed + * bit 6 -> OFDM QPSK modulation, 1/2 coding rate is allowed + * bit 7 -> OFDM QPSK modulation, 3/4 coding rate is allowed + * bit 8 -> OFDM 16-QAM modulation, 1/2 coding rate is allowed + * bit 9 -> OFDM 16-QAM modulation, 3/4 coding rate is allowed + * bit 10 -> OFDM 64-QAM modulation, 2/3 coding rate is allowed + * bit 11 -> OFDM 64-QAM modulation, 3/4 coding rate is allowed + * + * The MCS index specification needs to be compatible with the + * bandwidth mask specification. For example, a MCS index == 9 + * specification is inconsistent with a preamble type == VHT, + * Nss == 1, and channel bandwidth == 20 MHz. + * + * Furthermore, the host has only a limited ability to specify to + * the target to select from HT + legacy rates, or VHT + legacy rates, + * since this mcs_mask can specify either HT/VHT rates or legacy rates. + * If no bits are set, target can choose what MCS type to use. + */ + mcs_mask: 12, + + /* nss_mask - + * Specify which numbers of spatial streams (MIMO factor) are permitted. + * Each bit in this mask corresponds to a Nss value: + * bit 0: if set, Nss = 1 (non-MIMO) is permitted + * bit 1: if set, Nss = 2 (2x2 MIMO) is permitted + * bit 2: if set, Nss = 3 (3x3 MIMO) is permitted + * bit 3: if set, Nss = 4 (4x4 MIMO) is permitted + * bit 4: if set, Nss = 5 (5x5 MIMO) is permitted + * bit 5: if set, Nss = 6 (6x6 MIMO) is permitted + * bit 6: if set, Nss = 7 (7x7 MIMO) is permitted + * bit 7: if set, Nss = 8 (8x8 MIMO) is permitted + * The values in the Nss mask must be suitable for the recipient, e.g. + * a value of 0x4 (Nss = 3) cannot be specified for a tx frame to a + * recipient which only supports 2x2 MIMO. + * If no bits are set, target can choose what NSS type to use. + */ + nss_mask: 8, + + /* retry_limit - + * Specify the maximum number of transmissions, including the + * initial transmission, to attempt before giving up if no ack + * is received. + * If the tx rate is specified, then all retries shall use the + * same rate as the initial transmission. + * If no tx rate is specified, the target can choose whether to + * retain the original rate during the retransmissions, or to + * fall back to a more robust rate. + */ + retry_limit: 4; + + }; + A_UINT32 tx_param_dword0; + }; + + union { + struct { + /* DWORD 1: tx chain mask, preamble_type, tx BW */ + A_UINT32 + /* chain_mask - specify which chains to transmit from + * If not set, target will choose what chain_mask to use. + */ + chain_mask: 8, + + /* The bits in this mask correspond to the values as below + * bit 0 -> 5MHz + * bit 1 -> 10MHz + * bit 2 -> 20MHz + * bit 3 -> 40MHz + * bit 4 -> 80MHz + * bit 5 -> 160MHz + * bit 6 -> 80_80MHz + * If no bits are set, target can choose what BW to use. + */ + bw_mask: 7, + + /* preamble_type_mask - + * Specify which preamble types (CCK, OFDM, HT, VHT) the target + * may choose from for transmitting this frame. + * Each bit in this mask corresponds to a preamble_type value: + * bit 0: if set, OFDM + * bit 1: if set, CCK + * bit 2: if set, HT + * bit 3: if set, VHT + * bit 4: if set, HE + * If no bits are set, target can choose what preamble type to use. + */ + preamble_type: 5, + + /* Data:1 Mgmt:0 + */ + frame_type: 1, + + reserved1_31_21: 11; + }; + A_UINT32 tx_param_dword1; + }; +} wmi_tx_send_params; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mgmt_tx_send_cmd_fixed_param */ A_UINT32 vdev_id; @@ -3402,12 +3567,42 @@ typedef struct { A_UINT32 paddr_hi; A_UINT32 frame_len; A_UINT32 buf_len; /** Buffer length in bytes */ + /* + * The frame which will have tx_params_valid set will be always be RAW + * frame, as it will be tx'ed on non-pause tid + */ + A_UINT32 tx_params_valid; /* This TLV is followed by array of bytes: First 64 bytes of management frame * A_UINT8 bufp[]; */ +/* This TLV is followed by wmi_tx_send_params + * wmi_tx_send_params tx_send_params; + */ } wmi_mgmt_tx_send_cmd_fixed_param; typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_offchan_data_tx_send_cmd_fixed_param */ + A_UINT32 vdev_id; + A_UINT32 desc_id; /* echoed in tx_compl_event */ + A_UINT32 chanfreq; /* MHz units */ + A_UINT32 paddr_lo; + A_UINT32 paddr_hi; + A_UINT32 frame_len; + A_UINT32 buf_len; /** Buffer length in bytes */ + /* The frame which will have tx_params_valid set will be always be RAW + * frame, as it will be tx'ed on non-pause tid + */ + A_UINT32 tx_params_valid; + +/* This TLV is followed by array of bytes: First 64 bytes of frame + * A_UINT8 bufp[]; + */ +/* This TLV is followed by wmi_tx_send_params + * wmi_tx_send_params tx_send_params; + */ +} wmi_offchan_data_tx_send_cmd_fixed_param; + +typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_echo_event_fixed_param */ A_UINT32 value; } wmi_echo_event_fixed_param; @@ -4199,6 +4394,16 @@ typedef struct { } wmi_mgmt_tx_compl_event_fixed_param; typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_offchan_data_tx_compl_event_fixed_param */ + A_UINT32 desc_id; /* from tx_send_cmd */ + A_UINT32 status; /* same status as WMI_MGMT_TX_COMP_STATUS_TYPE */ + /** pdev_id for identifying the MAC that transmitted the mgmt frame + * See macros starting with WMI_PDEV_ID_ for values. + */ + A_UINT32 pdev_id; +} wmi_offchan_data_tx_compl_event_fixed_param; + +typedef struct { A_UINT32 tlv_header; A_UINT32 num_reports; /* tlv for completion @@ -18459,6 +18664,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_VDEV_SET_ARP_STAT_CMDID); WMI_RETURN_STRING(WMI_VDEV_GET_ARP_STAT_CMDID); WMI_RETURN_STRING(WMI_VDEV_GET_TX_POWER_CMDID); + WMI_RETURN_STRING(WMI_OFFCHAN_DATA_TX_SEND_CMDID); } return "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index fc2cf8d50000..44e30c77ea9d 100755 --- a/fw/wmi_version.h +++ b/fw/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 367 +#define __WMI_REVISION_ 368 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work |
