|
@@ -1,6 +1,6 @@
|
|
|
/*
|
|
|
* Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
|
|
|
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
+ * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
*
|
|
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
|
|
*
|
|
@@ -239,9 +239,11 @@
|
|
|
* 3.112 Add logical_link_id field in rx_peer_metadata_v1.
|
|
|
* 3.113 Add add rx msdu,mpdu,ppdu fields in rx_ring_selection_cfg_t
|
|
|
* 3.114 Add HTT_H2T_MSG_TYPE_UMAC_HANG_RECOVERY_SOC_START_PRE_RESET def.
|
|
|
+ * 3.115 Add HTT_H2T_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP and
|
|
|
+ * HTT_T2H_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP_DONE msg defs.
|
|
|
*/
|
|
|
#define HTT_CURRENT_VERSION_MAJOR 3
|
|
|
-#define HTT_CURRENT_VERSION_MINOR 114
|
|
|
+#define HTT_CURRENT_VERSION_MINOR 115
|
|
|
|
|
|
#define HTT_NUM_TX_FRAG_DESC 1024
|
|
|
|
|
@@ -843,6 +845,7 @@ enum htt_h2t_msg_type {
|
|
|
HTT_H2T_MSG_TYPE_STREAMING_STATS_REQ = 0x20,
|
|
|
HTT_H2T_MSG_TYPE_UMAC_HANG_RECOVERY_PREREQUISITE_SETUP = 0x21,
|
|
|
HTT_H2T_MSG_TYPE_UMAC_HANG_RECOVERY_SOC_START_PRE_RESET = 0x22,
|
|
|
+ HTT_H2T_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP = 0x23,
|
|
|
|
|
|
/* keep this last */
|
|
|
HTT_H2T_NUM_MSGS
|
|
@@ -10213,6 +10216,265 @@ PREPACK typedef struct {
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
+/*
|
|
|
+ * @brief host -> target HTT RX_CCE_SUPER_RULE_SETUP message
|
|
|
+ *
|
|
|
+ * MSG_TYPE => HTT_H2T_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP
|
|
|
+ *
|
|
|
+ * @details
|
|
|
+ * Host sends RX_CCE_SUPER_RULE setup message to target, in order to request,
|
|
|
+ * install or uninstall rx cce super rules to match certain kind of packets
|
|
|
+ * with specific parameters. Target sets up HW registers based on setup message
|
|
|
+ * and always confirms back to Host.
|
|
|
+ *
|
|
|
+ * The message would appear as follows:
|
|
|
+ * |31 24|23 16|15 8|7 0|
|
|
|
+ * |-----------------+-----------------+-----------------+-----------------|
|
|
|
+ * | reserved | operation | vdev_id | msg_type |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * | cce_super_rule_param[0] |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * | cce_super_rule_param[1] |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ *
|
|
|
+ * The message is interpreted as follows:
|
|
|
+ * dword0 - b'0:7 - msg_type: This will be set to
|
|
|
+ * 0x23 (HTT_H2T_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP)
|
|
|
+ * b'8:15 - vdev_id: Identify which vdev RX_CCE_SUPER_RULE is for
|
|
|
+ * b'16:23 - operation: Identify operation to be taken,
|
|
|
+ * 0: HTT_RX_CCE_SUPER_RULE_SETUP_REQUEST
|
|
|
+ * 1: HTT_RX_CCE_SUPER_RULE_INSTALL
|
|
|
+ * 2: HTT_RX_CCE_SUPER_RULE_RELEASE
|
|
|
+ * b'24:31 - reserved
|
|
|
+ * dword1~10 - cce_super_rule_param[0]:
|
|
|
+ * contains parameters used to setup RX_CCE_SUPER_RULE_0
|
|
|
+ * dword11~20 - cce_super_rule_param[1]:
|
|
|
+ * contains parameters used to setup RX_CCE_SUPER_RULE_1
|
|
|
+ *
|
|
|
+ * Each cce_super_rule_param structure would appear as follows:
|
|
|
+ * |31 24|23 16|15 8|7 0|
|
|
|
+ * |-----------------+-----------------+-----------------+-----------------|
|
|
|
+ * |src_ipv6_addr[3] |src_ipv6_addr[2] |src_ipv6_addr[1] |src_ipv6_addr[0] |
|
|
|
+ * |/src_ipv4_addr[3]|/src_ipv4_addr[2]|/src_ipv4_addr[1]|/src_ipv4_addr[0]|
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * |src_ipv6_addr[7] |src_ipv6_addr[6] |src_ipv6_addr[5] |src_ipv6_addr[4] |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * |src_ipv6_addr[11]|src_ipv6_addr[10]|src_ipv6_addr[9] |src_ipv6_addr[8] |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * |src_ipv6_addr[15]|src_ipv6_addr[14]|src_ipv6_addr[13]|src_ipv6_addr[12]|
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * |dst_ipv6_addr[3] |dst_ipv6_addr[2] |dst_ipv6_addr[1] |dst_ipv6_addr[0] |
|
|
|
+ * |/dst_ipv4_addr[3]|/dst_ipv4_addr[2]|/dst_ipv4_addr[1]|/dst_ipv4_addr[0]|
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * |dst_ipv6_addr[7] |dst_ipv6_addr[6] |dst_ipv6_addr[5] |dst_ipv6_addr[4] |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * |dst_ipv6_addr[11]|dst_ipv6_addr[10]|dst_ipv6_addr[9] |dst_ipv6_addr[8] |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * |dst_ipv6_addr[15]|dst_ipv6_addr[14]|dst_ipv6_addr[13]|dst_ipv6_addr[12]|
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * | is_valid | l4_type | l3_type |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ * | l4_dst_port | l4_src_port |
|
|
|
+ * |-----------------------------------------------------------------------|
|
|
|
+ *
|
|
|
+ * The cce_super_rule_param[0] structure is interpreted as follows:
|
|
|
+ * dword1 - b'0:7 - src_ipv6_addr[0]: b'120:127 of source ipv6 address
|
|
|
+ * (or src_ipv4_addr[0]: b'24:31 of source ipv4 address,
|
|
|
+ * in case of ipv4)
|
|
|
+ * b'8:15 - src_ipv6_addr[1]: b'112:119 of source ipv6 address
|
|
|
+ * (or src_ipv4_addr[1]: b'16:23 of source ipv4 address,
|
|
|
+ * in case of ipv4)
|
|
|
+ * b'16:23 - src_ipv6_addr[2]: b'104:111 of source ipv6 address
|
|
|
+ * (or src_ipv4_addr[2]: b'8:15 of source ipv4 address,
|
|
|
+ * in case of ipv4)
|
|
|
+ * b'24:31 - src_ipv6_addr[3]: b'96:103 of source ipv6 address
|
|
|
+ * (or src_ipv4_addr[3]: b'0:7 of source ipv4 address,
|
|
|
+ * in case of ipv4)
|
|
|
+ * dword2 - b'0:7 - src_ipv6_addr[4]: b'88:95 of source ipv6 address
|
|
|
+ * b'8:15 - src_ipv6_addr[5]: b'80:87 of source ipv6 address
|
|
|
+ * b'16:23 - src_ipv6_addr[6]: b'72:79 of source ipv6 address
|
|
|
+ * b'24:31 - src_ipv6_addr[7]: b'64:71 of source ipv6 address
|
|
|
+ * dword3 - b'0:7 - src_ipv6_addr[8]: b'56:63 of source ipv6 address
|
|
|
+ * b'8:15 - src_ipv6_addr[9]: b'48:55 of source ipv6 address
|
|
|
+ * b'16:23 - src_ipv6_addr[10]: b'40:47 of source ipv6 address
|
|
|
+ * b'24:31 - src_ipv6_addr[11]: b'32:39 of source ipv6 address
|
|
|
+ * dword4 - b'0:7 - src_ipv6_addr[12]: b'24:31 of source ipv6 address
|
|
|
+ * b'8:15 - src_ipv6_addr[13]: b'16:23 of source ipv6 address
|
|
|
+ * b'16:23 - src_ipv6_addr[14]: b'8:15 of source ipv6 address
|
|
|
+ * b'24:31 - src_ipv6_addr[15]: b'0:7 of source ipv6 address
|
|
|
+ * dword5 - b'0:7 - dst_ipv6_addr[0]: b'120:127 of destination ipv6 address
|
|
|
+ * (or dst_ipv4_addr[0]: b'24:31 of destination
|
|
|
+ * ipv4 address, in case of ipv4)
|
|
|
+ * b'8:15 - dst_ipv6_addr[1]: b'112:119 of destination ipv6 address
|
|
|
+ * (or dst_ipv4_addr[1]: b'16:23 of destination
|
|
|
+ * ipv4 address, in case of ipv4)
|
|
|
+ * b'16:23 - dst_ipv6_addr[2]: b'104:111 of destination ipv6 address
|
|
|
+ * (or dst_ipv4_addr[2]: b'8:15 of destination
|
|
|
+ * ipv4 address, in case of ipv4)
|
|
|
+ * b'24:31 - dst_ipv6_addr[3]: b'96:103 of destination ipv6 address
|
|
|
+ * (or dst_ipv4_addr[3]: b'0:7 of destination
|
|
|
+ * ipv4 address, in case of ipv4)
|
|
|
+ * dword6 - b'0:7 - dst_ipv6_addr[4]: b'88:95 of destination ipv6 address
|
|
|
+ * b'8:15 - dst_ipv6_addr[5]: b'80:87 of destination ipv6 address
|
|
|
+ * b'16:23 - dst_ipv6_addr[6]: b'72:79 of destination ipv6 address
|
|
|
+ * b'24:31 - dst_ipv6_addr[7]: b'64:71 of destination ipv6 address
|
|
|
+ * dword7 - b'0:7 - dst_ipv6_addr[8]: b'56:63 of destination ipv6 address
|
|
|
+ * b'8:15 - dst_ipv6_addr[9]: b'48:55 of destination ipv6 address
|
|
|
+ * b'16:23 - dst_ipv6_addr[10]: b'40:47 of destination ipv6 address
|
|
|
+ * b'24:31 - dst_ipv6_addr[11]: b'32:39 of destination ipv6 address
|
|
|
+ * dword8 - b'0:7 - dst_ipv6_addr[12]: b'24:31 of destination ipv6 address
|
|
|
+ * b'8:15 - dst_ipv6_addr[13]: b'16:23 of destination ipv6 address
|
|
|
+ * b'16:23 - dst_ipv6_addr[14]: b'8:15 of destination ipv6 address
|
|
|
+ * b'24:31 - dst_ipv6_addr[15]: b'0:7 of destination ipv6 address
|
|
|
+ * dword9 - b'0:15 - l3_type: type of L3 protocol, indicating L3 protocol used
|
|
|
+ * 0x0008: ipv4
|
|
|
+ * 0xdd86: ipv6
|
|
|
+ * b'16:23 - l4_type: type of L4 protocol, indicating L4 protocol used
|
|
|
+ * 6: TCP
|
|
|
+ * 17: UDP
|
|
|
+ * b'24:31 - is_valid: indicate whether this parameter is valid
|
|
|
+ * 0: invalid
|
|
|
+ * 1: valid
|
|
|
+ * dword10 - b'0:15 - l4_src_port: TCP/UDP source port field
|
|
|
+ * b'16:31 - l4_dst_port: TCP/UDP destination port field
|
|
|
+ *
|
|
|
+ * The cce_super_rule_param[1] structure is similar.
|
|
|
+ */
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_NUM 2
|
|
|
+
|
|
|
+enum htt_rx_cce_super_rule_setup_operation {
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_REQUEST = 0,
|
|
|
+ HTT_RX_CCE_SUPER_RULE_INSTALL,
|
|
|
+ HTT_RX_CCE_SUPER_RULE_RELEASE,
|
|
|
+
|
|
|
+ /* All operation should be before this */
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_INVALID_OPERATION,
|
|
|
+};
|
|
|
+
|
|
|
+typedef struct {
|
|
|
+ union {
|
|
|
+ A_UINT8 src_ipv4_addr[4];
|
|
|
+ A_UINT8 src_ipv6_addr[16];
|
|
|
+ };
|
|
|
+ union {
|
|
|
+ A_UINT8 dst_ipv4_addr[4];
|
|
|
+ A_UINT8 dst_ipv6_addr[16];
|
|
|
+ };
|
|
|
+ A_UINT32 l3_type: 16,
|
|
|
+ l4_type: 8,
|
|
|
+ is_valid: 8;
|
|
|
+ A_UINT32 l4_src_port: 16,
|
|
|
+ l4_dst_port: 16;
|
|
|
+} htt_rx_cce_super_rule_param_t;
|
|
|
+
|
|
|
+PREPACK struct htt_rx_cce_super_rule_setup_t {
|
|
|
+ A_UINT32 msg_type: 8,
|
|
|
+ vdev_id: 8,
|
|
|
+ operation: 8,
|
|
|
+ reserved: 8;
|
|
|
+ htt_rx_cce_super_rule_param_t
|
|
|
+ cce_super_rule_param[HTT_RX_CCE_SUPER_RULE_SETUP_NUM];
|
|
|
+} POSTPACK;
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_SZ \
|
|
|
+ (sizeof(struct htt_rx_cce_super_rule_setup_t))
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID_M 0x0000ff00
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID_S 8
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_VDEV_ID_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION_M 0x00ff0000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION_S 16
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_OPERATION_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE_M 0x0000ffff
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE_S 0
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_L3_TYPE_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE_M 0x00ff0000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE_S 16
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_L4_TYPE_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID_M 0xff000000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID_S 24
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_IS_VALID_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT_M 0x0000ffff
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT_S 0
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_L4_SRC_PORT_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT_M 0xffff0000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT_S 16
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_L4_DST_PORT_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IPV4_ADDR_ARRAY_GET(_ptr, _array) \
|
|
|
+ do { \
|
|
|
+ A_MEMCPY(_array, _ptr, 4); \
|
|
|
+ } while (0)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IPV4_ADDR_ARRAY_SET(_ptr, _array) \
|
|
|
+ do { \
|
|
|
+ A_MEMCPY(_ptr, _array, 4); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IPV6_ADDR_ARRAY_GET(_ptr, _array) \
|
|
|
+ do { \
|
|
|
+ A_MEMCPY(_array, _ptr, 16); \
|
|
|
+ } while (0)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_IPV6_ADDR_ARRAY_SET(_ptr, _array) \
|
|
|
+ do { \
|
|
|
+ A_MEMCPY(_ptr, _array, 16); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+
|
|
|
/*=== target -> host messages ===============================================*/
|
|
|
|
|
|
|
|
@@ -10275,6 +10537,7 @@ enum htt_t2h_msg_type {
|
|
|
HTT_T2H_PPDU_ID_FMT_IND = 0x30,
|
|
|
HTT_T2H_MSG_TYPE_RX_ADDBA_EXTN = 0x31,
|
|
|
HTT_T2H_MSG_TYPE_RX_DELBA_EXTN = 0x32,
|
|
|
+ HTT_T2H_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP_DONE = 0x33,
|
|
|
|
|
|
|
|
|
HTT_T2H_MSG_TYPE_TEST,
|
|
@@ -19466,4 +19729,176 @@ typedef struct {
|
|
|
} htt_t2h_ppdu_id_fmt_ind_t;
|
|
|
|
|
|
|
|
|
+/**
|
|
|
+ * @brief target -> host RX_CCE_SUPER_RULE setup done message
|
|
|
+ *
|
|
|
+ * MSG_TYPE => HTT_T2H_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP_DONE
|
|
|
+ *
|
|
|
+ * @details
|
|
|
+ * HTT_T2H_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP_DONE message is sent by the target
|
|
|
+ * when RX_CCE_SUPER_RULE setup is done
|
|
|
+ *
|
|
|
+ * This message shows the configuration results after the setup operation.
|
|
|
+ * It will always be sent to host.
|
|
|
+ * The message would appear as follows:
|
|
|
+ *
|
|
|
+ * |31 24|23 16|15 8|7 0|
|
|
|
+ * |-----------------+-----------------+----------------+----------------|
|
|
|
+ * | result | response_type | vdev_id | msg_type |
|
|
|
+ * |---------------------------------------------------------------------|
|
|
|
+ *
|
|
|
+ * The message is interpreted as follows:
|
|
|
+ * dword0 - b'0:7 - msg_type: This will be set to 0x33
|
|
|
+ * (HTT_T2H_MSG_TYPE_RX_CCE_SUPER_RULE_SETUP_DONE)
|
|
|
+ * b'8:15 - vdev_id: Identify which vdev RX_CCE_SUPER_RULE is setup on
|
|
|
+ * b'16:23 - response_type: Indicate the response type of this setup
|
|
|
+ * done msg
|
|
|
+ * 0: HTT_RX_CCE_SUPER_RULE_SETUP_REQ_RESPONSE,
|
|
|
+ * response to HTT_RX_CCE_SUPER_RULE_SETUP_REQUEST
|
|
|
+ * 1: HTT_RX_CCE_SUPER_RULE_INSTALL_RESPONSE,
|
|
|
+ * response to HTT_RX_CCE_SUPER_RULE_INSTALL
|
|
|
+ * 2: HTT_RX_CCE_SUPER_RULE_RELEASE_RESPONSE,
|
|
|
+ * response to HTT_RX_CCE_SUPER_RULE_RELEASE
|
|
|
+ * b'24:31 - result: Indicate result of setup operation
|
|
|
+ * For HTT_RX_CCE_SUPER_RULE_SETUP_REQ_RESPONSE:
|
|
|
+ * b'24 - is_rule_enough: indicate if there are
|
|
|
+ * enough free cce rule slots
|
|
|
+ * 0: not enough
|
|
|
+ * 1: enough
|
|
|
+ * b'25:31 - avail_rule_num: indicate the number of
|
|
|
+ * remaining free cce rule slots, only makes sense
|
|
|
+ * when is_rule_enough = 0
|
|
|
+ * For HTT_RX_CCE_SUPER_RULE_INSTALL_RESPONSE:
|
|
|
+ * b'24 - cfg_result_0: indicate the config result
|
|
|
+ * of RX_CCE_SUPER_RULE_0
|
|
|
+ * 0: Install/Uninstall fails
|
|
|
+ * 1: Install/Uninstall succeeds
|
|
|
+ * b'25 - cfg_result_1: indicate the config result
|
|
|
+ * of RX_CCE_SUPER_RULE_1
|
|
|
+ * 0: Install/Uninstall fails
|
|
|
+ * 1: Install/Uninstall succeeds
|
|
|
+ * b'26:31 - reserved
|
|
|
+ * For HTT_RX_CCE_SUPER_RULE_RELEASE_RESPONSE:
|
|
|
+ * b'24 - cfg_result_0: indicate the config result
|
|
|
+ * of RX_CCE_SUPER_RULE_0
|
|
|
+ * 0: Release fails
|
|
|
+ * 1: Release succeeds
|
|
|
+ * b'25 - cfg_result_1: indicate the config result
|
|
|
+ * of RX_CCE_SUPER_RULE_1
|
|
|
+ * 0: Release fails
|
|
|
+ * 1: Release succeeds
|
|
|
+ * b'26:31 - reserved
|
|
|
+ */
|
|
|
+
|
|
|
+enum htt_rx_cce_super_rule_setup_done_response_type {
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_REQ_RESPONSE = 0,
|
|
|
+ HTT_RX_CCE_SUPER_RULE_INSTALL_RESPONSE,
|
|
|
+ HTT_RX_CCE_SUPER_RULE_RELEASE_RESPONSE,
|
|
|
+
|
|
|
+ /*All reply type should be before this*/
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_INVALID_RESPONSE,
|
|
|
+};
|
|
|
+
|
|
|
+PREPACK struct htt_rx_cce_super_rule_setup_done_t {
|
|
|
+ A_UINT8 msg_type;
|
|
|
+ A_UINT8 vdev_id;
|
|
|
+ A_UINT8 response_type;
|
|
|
+ union {
|
|
|
+ struct {
|
|
|
+ /* For HTT_RX_CCE_SUPER_RULE_SETUP_REQ_RESPONSE */
|
|
|
+ A_UINT8 is_rule_enough: 1,
|
|
|
+ avail_rule_num: 7;
|
|
|
+ };
|
|
|
+ struct {
|
|
|
+ /*
|
|
|
+ * For HTT_RX_CCE_SUPER_RULE_INSTALL_RESPONSE and
|
|
|
+ * HTT_RX_CCE_SUPER_RULE_RELEASE_RESPONSE
|
|
|
+ */
|
|
|
+ A_UINT8 cfg_result_0: 1,
|
|
|
+ cfg_result_1: 1,
|
|
|
+ rsvd: 6;
|
|
|
+ };
|
|
|
+ } result;
|
|
|
+} POSTPACK;
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_SZ (sizeof(struct htt_rx_cce_super_rule_setup_done_t))
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID_M 0x0000ff00
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID_S 8
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_DONE_VDEV_ID_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE_M 0x00ff0000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE_S 16
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESPONSE_TYPE_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT_M 0xff000000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT_S 24
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_DONE_RESULT_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH_M 0x01000000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH_S 24
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_DONE_IS_RULE_ENOUGH_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM_M 0xFE000000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM_S 25
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_DONE_AVAIL_RULE_NUM_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0_M 0x01000000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0_S 24
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_0_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1_M 0x02000000
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1_S 25
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1_GET(_var) \
|
|
|
+ (((_var) & HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1_M) >> \
|
|
|
+ HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1_S)
|
|
|
+#define HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1_SET(_var, _val) \
|
|
|
+ do { \
|
|
|
+ HTT_CHECK_SET_VAL(HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1, _val); \
|
|
|
+ ((_var) |= ((_val) << HTT_RX_CCE_SUPER_RULE_SETUP_DONE_CFG_RESULT_1_S)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+
|
|
|
#endif
|