summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorService qcabuildsw <qcabuildsw@localhost>2017-03-22 12:55:02 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-03-22 12:55:02 -0700
commit770bc784123c615cb95ccb32cb6bb2f6ccb65ae3 (patch)
treeff7aca45c771e1dd4441d6fc22bffb1f028176ae
parent6edb4fa157c6c1053aeb28f191192e5da138df99 (diff)
parent0261aaaf1017bd83ac9b66b7687791dee8767225 (diff)
Merge "fw-api: CL 2936935 - update fw common interface files" into wlan-api.lnx.1.1-dev
-rwxr-xr-xfw/wmi_services.h1
-rwxr-xr-xfw/wmi_tlv_defs.h21
-rwxr-xr-xfw/wmi_unified.h208
-rwxr-xr-xfw/wmi_version.h2
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