Loading fw/htt.h +324 −1 Original line number Diff line number Diff line Loading @@ -212,9 +212,10 @@ * 3.88 Add HTT_H2T_MSG_TYPE_HOST_PADDR_SIZE def. * 3.89 Add MSDU queue enumerations. * 3.90 Add HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND def. * 3.91 Add TT_T2H_MSG_TYPE_MLO_RX_PEER_MAP, _UNMAP defs. */ #define HTT_CURRENT_VERSION_MAJOR 3 #define HTT_CURRENT_VERSION_MINOR 90 #define HTT_CURRENT_VERSION_MINOR 91 #define HTT_NUM_TX_FRAG_DESC 1024 Loading Loading @@ -7052,6 +7053,8 @@ enum htt_t2h_msg_type { HTT_T2H_MSG_TYPE_CHAN_CALDATA = 0x26, HTT_T2H_MSG_TYPE_FSE_CMEM_BASE_SEND = 0x27, HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND = 0x28, HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP = 0x29, HTT_T2H_MSG_TYPE_MLO_RX_PEER_UNMAP = 0x2a, HTT_T2H_MSG_TYPE_TEST, Loading Loading @@ -9742,6 +9745,326 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t #define HTT_RX_PEER_UNMAP_V2_BYTES 28 /** * @brief target -> host rx peer mlo map message definition * * MSG_TYPE => HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP * * @details * The following diagram shows the format of the rx mlo peer map message sent * from the target to the host. This layout assumes the target operates * as little-endian. * * MCC: * One HTT_MLO_PEER_MAP is sent after PEER_ASSOC received on first LINK for both STA and SAP. * * WIN: * One HTT_MLO_PEER_MAP is sent after peers are created on all the links for both AP and STA. * It will be sent on the Assoc Link. * * This message always contains a MLO peer ID. The main purpose of the * MLO peer ID is to tell the host what peer ID rx packets will be tagged * with, so that the host can use that MLO peer ID to determine which peer * transmitted the rx frame. * * |31 |29 27|26 24|23 20|19 17|16|15 8|7 0| * |-------------------------------------------------------------------------| * |RSVD | PRC |NUMLINK| MLO peer ID | msg type | * |-------------------------------------------------------------------------| * | MAC addr 3 | MAC addr 2 | MAC addr 1 | MAC addr 0 | * |-------------------------------------------------------------------------| * | RSVD_16_31 | MAC addr 5 | MAC addr 4 | * |-------------------------------------------------------------------------| * |CACHE_SET_NUM| TIDMASK |CHIPID|V| Primary TCL AST IDX 0 | * |-------------------------------------------------------------------------| * |CACHE_SET_NUM| TIDMASK |CHIPID|V| Primary TCL AST IDX 1 | * |-------------------------------------------------------------------------| * |CACHE_SET_NUM| TIDMASK |CHIPID|V| Primary TCL AST IDX 2 | * |-------------------------------------------------------------------------| * |RSVD | * |-------------------------------------------------------------------------| * |RSVD | * |-------------------------------------------------------------------------| * | htt_tlv_hdr_t | * |-------------------------------------------------------------------------| * |RSVD_27_31 |CHIPID| VDEVID | SW peer ID | * |-------------------------------------------------------------------------| * | htt_tlv_hdr_t | * |-------------------------------------------------------------------------| * |RSVD_27_31 |CHIPID| VDEVID | SW peer ID | * |-------------------------------------------------------------------------| * | htt_tlv_hdr_t | * |-------------------------------------------------------------------------| * |RSVD_27_31 |CHIPID| VDEVID | SW peer ID | * |-------------------------------------------------------------------------| * * Where: * PRC - Primary REO CHIPID - 3 Bits Bit24,25,26 * NUMLINK - NUM_LOGICAL_LINKS - 3 Bits Bit27,28,29 * V (valid) - 1 Bit Bit17 * CHIPID - 3 Bits * TIDMASK - 8 Bits * CACHE_SET_NUM - 8 Bits * * The following field definitions describe the format of the rx MLO peer map * messages sent from the target to the host. * - MSG_TYPE * Bits 7:0 * Purpose: identifies this as an rx mlo peer map message * Value: 0x29 (HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP) * * - MLO_PEER_ID * Bits 23:8 * Purpose: The MLO peer ID (index). * For MCC, FW will allocate it. For WIN, Host will allocate it. * Value: MLO peer ID * * - NUMLINK * Bits: 26:24 (3Bits) * Purpose: Indicate the max number of logical links supported per client. * Value: number of logical links * * - PRC * Bits: 29:27 (3Bits) * Purpose: Indicate the Primary REO CHIPID. The ID can be used to indicate * if there is migration of the primary chip. * Value: Primary REO CHIPID * * - MAC_ADDR_L32 * Bits 31:0 * Purpose: Identifies which mlo peer node the mlo peer ID is for. * Value: lower 4 bytes of peer node's MAC address * * - MAC_ADDR_U16 * Bits 15:0 * Purpose: Identifies which peer node the peer ID is for. * Value: upper 2 bytes of peer node's MAC address * * - PRIMARY_TCL_AST_IDX * Bits 15:0 * Purpose: Primary TCL AST index for this peer. * * - V * 1 Bit Position 16 * Purpose: If the ast idx is valid. * * - CHIPID * Bits 19:17 * Purpose: Identifies which chip id of PRIMARY_TCL_AST_IDX * * - TIDMASK * Bits 27:20 * Purpose: LINK to TID mapping for PRIMARY_TCL_AST_IDX * * - CACHE_SET_NUM * Bits 31:28 * Purpose: Cache Set Number for PRIMARY_TCL_AST_IDX * Cache set number that should be used to cache the index based * search results, for address and flow search. * This value should be equal to LSB four bits of the hash value * of match data, in case of search index points to an entry which * may be used in content based search also. The value can be * anything when the entry pointed by search index will not be * used for content based search. * * - htt_tlv_hdr_t * Purpose: Provide link specific chip,vdev and sw_peer IDs * * Bits 11:0 * Purpose: tag equal to MLO_PEER_MAP_TLV_STRUCT_SOC_VDEV_PEER_IDS. * * Bits 23:12 * Purpose: Length, Length of the value that follows the header * * Bits 31:28 * Purpose: Reserved. * * * - SW_PEER_ID * Bits 15:0 * Purpose: The peer ID (index) that WAL is allocating * Value: (rx) peer ID * * - VDEV_ID * Bits 23:16 * Purpose: Indicates which virtual device the peer is associated with. * Value: vdev ID (used in the host to look up the vdev object) * * - CHIPID * Bits 26:24 * Purpose: Indicates which Chip id the peer is associated with. * Value: chip ID (Provided by Host as part of QMI exchange) */ typedef enum { MLO_PEER_MAP_TLV_STRUCT_SOC_VDEV_PEER_IDS, } MLO_PEER_MAP_TLV_TAG_ID; #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_M 0x00ffff00 #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S 8 #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_M 0x07000000 #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_S 24 #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_M 0x38000000 #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_S 27 #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_L32_M 0xffffffff #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_L32_S 0 #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_U16_M 0x0000ffff #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_U16_S 0 #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_M 0x0000ffff #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_S 0 #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_M 0x00010000 #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_S 16 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_M 0x000E0000 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_S 17 #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_M 0x00F00000 #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_S 20 #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_M 0xF0000000 #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_S 28 #define HTT_RX_MLO_PEER_MAP_TLV_TAG_M 0x00000fff #define HTT_RX_MLO_PEER_MAP_TLV_TAG_S 0 #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_M 0x00fff000 #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_S 12 #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_M 0x0000ffff #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_S 0 #define HTT_RX_MLO_PEER_MAP_VDEV_ID_M 0x00ff0000 #define HTT_RX_MLO_PEER_MAP_VDEV_ID_S 16 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_M 0x07000000 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_S 24 #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_MLO_PEER_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_M) >> HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S) #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_M) >> HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_S) #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_M) >> HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_S) #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_M) >> HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_S) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_TLV_TAG_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_TLV_TAG, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_TLV_TAG_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_TLV_TAG_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_TLV_TAG_M) >> HTT_RX_MLO_PEER_MAP_TLV_TAG_S) #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_TLV_LENGTH, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_TLV_LENGTH_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_TLV_LENGTH_M) >> HTT_RX_MLO_PEER_MAP_TLV_LENGTH_S) #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_SW_PEER_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_SW_PEER_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_SW_PEER_ID_M) >> HTT_RX_MLO_PEER_MAP_SW_PEER_ID_S) #define HTT_RX_MLO_PEER_MAP_VDEV_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_VDEV_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_VDEV_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_VDEV_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_VDEV_ID_M) >> HTT_RX_MLO_PEER_MAP_VDEV_ID_S) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_CHIP_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_CHIP_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_CHIP_ID_M) >> HTT_RX_MLO_PEER_MAP_CHIP_ID_S) #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_OFFSET 4 /* bytes */ #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_0_OFFSET 12 /* bytes */ #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_1_OFFSET 16 /* bytes */ #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_2_OFFSET 20 /* bytes */ #define HTT_RX_MLO_PEER_MAP_TLV_OFFSET 32 /* bytes */ #define HTT_RX_MLO_PEER_MAP_FIXED_BYTES 8*4 /* 8 Dwords. Does not include the TLV header and the TLV */ /* MSG_TYPE => HTT_T2H_MSG_TYPE_MLO_RX_PEER_UNMAP * * The following diagram shows the format of the rx mlo peer unmap message sent * from the target to the host. * * |31 24|23 16|15 8|7 0| * |-----------------------------------------------------------------------| * | RSVD_24_31 | MLO peer ID | msg type | * |-----------------------------------------------------------------------| */ #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_M HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_M #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_S HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_SET HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_SET #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_GET HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_GET /** * @brief target -> host message specifying security parameters Loading Loading
fw/htt.h +324 −1 Original line number Diff line number Diff line Loading @@ -212,9 +212,10 @@ * 3.88 Add HTT_H2T_MSG_TYPE_HOST_PADDR_SIZE def. * 3.89 Add MSDU queue enumerations. * 3.90 Add HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND def. * 3.91 Add TT_T2H_MSG_TYPE_MLO_RX_PEER_MAP, _UNMAP defs. */ #define HTT_CURRENT_VERSION_MAJOR 3 #define HTT_CURRENT_VERSION_MINOR 90 #define HTT_CURRENT_VERSION_MINOR 91 #define HTT_NUM_TX_FRAG_DESC 1024 Loading Loading @@ -7052,6 +7053,8 @@ enum htt_t2h_msg_type { HTT_T2H_MSG_TYPE_CHAN_CALDATA = 0x26, HTT_T2H_MSG_TYPE_FSE_CMEM_BASE_SEND = 0x27, HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND = 0x28, HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP = 0x29, HTT_T2H_MSG_TYPE_MLO_RX_PEER_UNMAP = 0x2a, HTT_T2H_MSG_TYPE_TEST, Loading Loading @@ -9742,6 +9745,326 @@ PREPACK struct htt_tx_offload_deliver_ind_hdr_t #define HTT_RX_PEER_UNMAP_V2_BYTES 28 /** * @brief target -> host rx peer mlo map message definition * * MSG_TYPE => HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP * * @details * The following diagram shows the format of the rx mlo peer map message sent * from the target to the host. This layout assumes the target operates * as little-endian. * * MCC: * One HTT_MLO_PEER_MAP is sent after PEER_ASSOC received on first LINK for both STA and SAP. * * WIN: * One HTT_MLO_PEER_MAP is sent after peers are created on all the links for both AP and STA. * It will be sent on the Assoc Link. * * This message always contains a MLO peer ID. The main purpose of the * MLO peer ID is to tell the host what peer ID rx packets will be tagged * with, so that the host can use that MLO peer ID to determine which peer * transmitted the rx frame. * * |31 |29 27|26 24|23 20|19 17|16|15 8|7 0| * |-------------------------------------------------------------------------| * |RSVD | PRC |NUMLINK| MLO peer ID | msg type | * |-------------------------------------------------------------------------| * | MAC addr 3 | MAC addr 2 | MAC addr 1 | MAC addr 0 | * |-------------------------------------------------------------------------| * | RSVD_16_31 | MAC addr 5 | MAC addr 4 | * |-------------------------------------------------------------------------| * |CACHE_SET_NUM| TIDMASK |CHIPID|V| Primary TCL AST IDX 0 | * |-------------------------------------------------------------------------| * |CACHE_SET_NUM| TIDMASK |CHIPID|V| Primary TCL AST IDX 1 | * |-------------------------------------------------------------------------| * |CACHE_SET_NUM| TIDMASK |CHIPID|V| Primary TCL AST IDX 2 | * |-------------------------------------------------------------------------| * |RSVD | * |-------------------------------------------------------------------------| * |RSVD | * |-------------------------------------------------------------------------| * | htt_tlv_hdr_t | * |-------------------------------------------------------------------------| * |RSVD_27_31 |CHIPID| VDEVID | SW peer ID | * |-------------------------------------------------------------------------| * | htt_tlv_hdr_t | * |-------------------------------------------------------------------------| * |RSVD_27_31 |CHIPID| VDEVID | SW peer ID | * |-------------------------------------------------------------------------| * | htt_tlv_hdr_t | * |-------------------------------------------------------------------------| * |RSVD_27_31 |CHIPID| VDEVID | SW peer ID | * |-------------------------------------------------------------------------| * * Where: * PRC - Primary REO CHIPID - 3 Bits Bit24,25,26 * NUMLINK - NUM_LOGICAL_LINKS - 3 Bits Bit27,28,29 * V (valid) - 1 Bit Bit17 * CHIPID - 3 Bits * TIDMASK - 8 Bits * CACHE_SET_NUM - 8 Bits * * The following field definitions describe the format of the rx MLO peer map * messages sent from the target to the host. * - MSG_TYPE * Bits 7:0 * Purpose: identifies this as an rx mlo peer map message * Value: 0x29 (HTT_T2H_MSG_TYPE_MLO_RX_PEER_MAP) * * - MLO_PEER_ID * Bits 23:8 * Purpose: The MLO peer ID (index). * For MCC, FW will allocate it. For WIN, Host will allocate it. * Value: MLO peer ID * * - NUMLINK * Bits: 26:24 (3Bits) * Purpose: Indicate the max number of logical links supported per client. * Value: number of logical links * * - PRC * Bits: 29:27 (3Bits) * Purpose: Indicate the Primary REO CHIPID. The ID can be used to indicate * if there is migration of the primary chip. * Value: Primary REO CHIPID * * - MAC_ADDR_L32 * Bits 31:0 * Purpose: Identifies which mlo peer node the mlo peer ID is for. * Value: lower 4 bytes of peer node's MAC address * * - MAC_ADDR_U16 * Bits 15:0 * Purpose: Identifies which peer node the peer ID is for. * Value: upper 2 bytes of peer node's MAC address * * - PRIMARY_TCL_AST_IDX * Bits 15:0 * Purpose: Primary TCL AST index for this peer. * * - V * 1 Bit Position 16 * Purpose: If the ast idx is valid. * * - CHIPID * Bits 19:17 * Purpose: Identifies which chip id of PRIMARY_TCL_AST_IDX * * - TIDMASK * Bits 27:20 * Purpose: LINK to TID mapping for PRIMARY_TCL_AST_IDX * * - CACHE_SET_NUM * Bits 31:28 * Purpose: Cache Set Number for PRIMARY_TCL_AST_IDX * Cache set number that should be used to cache the index based * search results, for address and flow search. * This value should be equal to LSB four bits of the hash value * of match data, in case of search index points to an entry which * may be used in content based search also. The value can be * anything when the entry pointed by search index will not be * used for content based search. * * - htt_tlv_hdr_t * Purpose: Provide link specific chip,vdev and sw_peer IDs * * Bits 11:0 * Purpose: tag equal to MLO_PEER_MAP_TLV_STRUCT_SOC_VDEV_PEER_IDS. * * Bits 23:12 * Purpose: Length, Length of the value that follows the header * * Bits 31:28 * Purpose: Reserved. * * * - SW_PEER_ID * Bits 15:0 * Purpose: The peer ID (index) that WAL is allocating * Value: (rx) peer ID * * - VDEV_ID * Bits 23:16 * Purpose: Indicates which virtual device the peer is associated with. * Value: vdev ID (used in the host to look up the vdev object) * * - CHIPID * Bits 26:24 * Purpose: Indicates which Chip id the peer is associated with. * Value: chip ID (Provided by Host as part of QMI exchange) */ typedef enum { MLO_PEER_MAP_TLV_STRUCT_SOC_VDEV_PEER_IDS, } MLO_PEER_MAP_TLV_TAG_ID; #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_M 0x00ffff00 #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S 8 #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_M 0x07000000 #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_S 24 #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_M 0x38000000 #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_S 27 #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_L32_M 0xffffffff #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_L32_S 0 #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_U16_M 0x0000ffff #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_U16_S 0 #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_M 0x0000ffff #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_S 0 #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_M 0x00010000 #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_S 16 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_M 0x000E0000 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_S 17 #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_M 0x00F00000 #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_S 20 #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_M 0xF0000000 #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_S 28 #define HTT_RX_MLO_PEER_MAP_TLV_TAG_M 0x00000fff #define HTT_RX_MLO_PEER_MAP_TLV_TAG_S 0 #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_M 0x00fff000 #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_S 12 #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_M 0x0000ffff #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_S 0 #define HTT_RX_MLO_PEER_MAP_VDEV_ID_M 0x00ff0000 #define HTT_RX_MLO_PEER_MAP_VDEV_ID_S 16 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_M 0x07000000 #define HTT_RX_MLO_PEER_MAP_CHIP_ID_S 24 #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_MLO_PEER_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_M) >> HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S) #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_M) >> HTT_RX_MLO_PEER_MAP_NUM_LOGICAL_LINKS_S) #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_M) >> HTT_RX_MLO_PEER_PRIMARY_REO_CHIP_ID_S) #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_M) >> HTT_RX_MLO_PEER_MAP_AST_INDEX_VALID_FLAG_S) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_CHIP_ID_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_TIDMASK_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_M) >> HTT_RX_MLO_PEER_MAP_CACHE_SET_NUM_AST_INDEX_S) #define HTT_RX_MLO_PEER_MAP_TLV_TAG_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_TLV_TAG, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_TLV_TAG_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_TLV_TAG_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_TLV_TAG_M) >> HTT_RX_MLO_PEER_MAP_TLV_TAG_S) #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_TLV_LENGTH, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_TLV_LENGTH_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_TLV_LENGTH_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_TLV_LENGTH_M) >> HTT_RX_MLO_PEER_MAP_TLV_LENGTH_S) #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_SW_PEER_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_SW_PEER_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_SW_PEER_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_SW_PEER_ID_M) >> HTT_RX_MLO_PEER_MAP_SW_PEER_ID_S) #define HTT_RX_MLO_PEER_MAP_VDEV_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_VDEV_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_VDEV_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_VDEV_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_VDEV_ID_M) >> HTT_RX_MLO_PEER_MAP_VDEV_ID_S) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_SET(word, value) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_MLO_PEER_MAP_CHIP_ID, value); \ (word) |= (value) << HTT_RX_MLO_PEER_MAP_CHIP_ID_S; \ } while (0) #define HTT_RX_MLO_PEER_MAP_CHIP_ID_GET(word) \ (((word) & HTT_RX_MLO_PEER_MAP_CHIP_ID_M) >> HTT_RX_MLO_PEER_MAP_CHIP_ID_S) #define HTT_RX_MLO_PEER_MAP_MAC_ADDR_OFFSET 4 /* bytes */ #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_0_OFFSET 12 /* bytes */ #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_1_OFFSET 16 /* bytes */ #define HTT_RX_MLO_PEER_MAP_PRIMARY_AST_INDEX_2_OFFSET 20 /* bytes */ #define HTT_RX_MLO_PEER_MAP_TLV_OFFSET 32 /* bytes */ #define HTT_RX_MLO_PEER_MAP_FIXED_BYTES 8*4 /* 8 Dwords. Does not include the TLV header and the TLV */ /* MSG_TYPE => HTT_T2H_MSG_TYPE_MLO_RX_PEER_UNMAP * * The following diagram shows the format of the rx mlo peer unmap message sent * from the target to the host. * * |31 24|23 16|15 8|7 0| * |-----------------------------------------------------------------------| * | RSVD_24_31 | MLO peer ID | msg type | * |-----------------------------------------------------------------------| */ #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_M HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_M #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_S HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_S #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_SET HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_SET #define HTT_RX_MLO_PEER_UNMAP_MLO_PEER_ID_GET HTT_RX_MLO_PEER_MAP_MLO_PEER_ID_GET /** * @brief target -> host message specifying security parameters Loading