/** **************************************************************************************** * * @file lmac_msg.h * * @brief Main definitions for message exchanges with LMAC * * Copyright (C) RivieraWaves 2011-2019 * **************************************************************************************** */ #ifndef LMAC_MSG_H_ #define LMAC_MSG_H_ /* * INCLUDE FILES **************************************************************************************** */ // for MAC related elements (mac_addr, mac_ssid...) #include "lmac_mac.h" /* **************************************************************************************** */ ///////////////////////////////////////////////////////////////////////////////// // COMMUNICATION WITH LMAC LAYER ///////////////////////////////////////////////////////////////////////////////// /* Task identifiers for communication between LMAC and DRIVER */ enum { TASK_NONE = (u8_l) -1, // MAC Management task. TASK_MM = 0, // DEBUG task TASK_DBG, /// SCAN task TASK_SCAN, /// TDLS task TASK_TDLS, /// SCANU task TASK_SCANU, /// ME task TASK_ME, /// SM task TASK_SM, /// APM task TASK_APM, /// BAM task TASK_BAM, /// MESH task TASK_MESH, /// RXU task TASK_RXU, /// RM_task TASK_RM, /// TWT task TASK_TWT, #if defined CONFIG_RWNX_FULLMAC || defined CONFIG_RWNX_FHOST // This is used to define the last task that is running on the EMB processor TASK_LAST_EMB = TASK_TWT, #else #error "Need to define SOFTMAC or FULLMAC" #endif // nX API task TASK_API, TASK_MAX, }; /// For MAC HW States copied from "hal_machw.h" enum { /// MAC HW IDLE State. HW_IDLE = 0, /// MAC HW RESERVED State. HW_RESERVED, /// MAC HW DOZE State. HW_DOZE, /// MAC HW ACTIVE State. HW_ACTIVE }; /// Power Save mode setting enum mm_ps_mode_state { MM_PS_MODE_OFF, MM_PS_MODE_ON, MM_PS_MODE_ON_DYN, }; /// Status/error codes used in the MAC software. enum { CO_OK, CO_FAIL, CO_EMPTY, CO_FULL, CO_BAD_PARAM, CO_NOT_FOUND, CO_NO_MORE_ELT_AVAILABLE, CO_NO_ELT_IN_USE, CO_BUSY, CO_OP_IN_PROGRESS, }; /// Remain on channel operation codes enum mm_remain_on_channel_op { MM_ROC_OP_START = 0, MM_ROC_OP_CANCEL, }; #define DRV_TASK_ID 100 /// Message Identifier. The number of messages is limited to 0xFFFF. /// The message ID is divided in two parts: /// - bits[15..10] : task index (no more than 64 tasks supported). /// - bits[9..0] : message index (no more that 1024 messages per task). typedef u16 lmac_msg_id_t; typedef u16 lmac_task_id_t; /// Build the first message ID of a task. #define LMAC_FIRST_MSG(task) ((lmac_msg_id_t)((task) << 10)) #define MSG_T(msg) ((lmac_task_id_t)((msg) >> 10)) #define MSG_I(msg) ((msg) & ((1<<10)-1)) /// Message structure. struct lmac_msg { lmac_msg_id_t id; ///< Message id. lmac_task_id_t dest_id; ///< Destination kernel identifier. lmac_task_id_t src_id; ///< Source kernel identifier. u16 param_len; ///< Parameter embedded struct length. u32 param[]; ///< Parameter embedded struct. Must be word-aligned. }; /// List of messages related to the task. enum mm_msg_tag { /// RESET Request. MM_RESET_REQ = LMAC_FIRST_MSG(TASK_MM), /// RESET Confirmation. MM_RESET_CFM, /// START Request. MM_START_REQ, /// START Confirmation. MM_START_CFM, /// Read Version Request. MM_VERSION_REQ, /// Read Version Confirmation. MM_VERSION_CFM, /// ADD INTERFACE Request. MM_ADD_IF_REQ, /// ADD INTERFACE Confirmation. MM_ADD_IF_CFM, /// REMOVE INTERFACE Request. MM_REMOVE_IF_REQ, /// REMOVE INTERFACE Confirmation. MM_REMOVE_IF_CFM, /// STA ADD Request. MM_STA_ADD_REQ, /// STA ADD Confirm. MM_STA_ADD_CFM, /// STA DEL Request. MM_STA_DEL_REQ, /// STA DEL Confirm. MM_STA_DEL_CFM, /// RX FILTER CONFIGURATION Request. MM_SET_FILTER_REQ, /// RX FILTER CONFIGURATION Confirmation. MM_SET_FILTER_CFM, /// CHANNEL CONFIGURATION Request. MM_SET_CHANNEL_REQ, /// CHANNEL CONFIGURATION Confirmation. MM_SET_CHANNEL_CFM, /// DTIM PERIOD CONFIGURATION Request. MM_SET_DTIM_REQ, /// DTIM PERIOD CONFIGURATION Confirmation. MM_SET_DTIM_CFM, /// BEACON INTERVAL CONFIGURATION Request. MM_SET_BEACON_INT_REQ, /// BEACON INTERVAL CONFIGURATION Confirmation. MM_SET_BEACON_INT_CFM, /// BASIC RATES CONFIGURATION Request. MM_SET_BASIC_RATES_REQ, /// BASIC RATES CONFIGURATION Confirmation. MM_SET_BASIC_RATES_CFM, /// BSSID CONFIGURATION Request. MM_SET_BSSID_REQ, /// BSSID CONFIGURATION Confirmation. MM_SET_BSSID_CFM, /// EDCA PARAMETERS CONFIGURATION Request. MM_SET_EDCA_REQ, /// EDCA PARAMETERS CONFIGURATION Confirmation. MM_SET_EDCA_CFM, /// ABGN MODE CONFIGURATION Request. MM_SET_MODE_REQ, /// ABGN MODE CONFIGURATION Confirmation. MM_SET_MODE_CFM, /// Request setting the VIF active state (i.e associated or AP started) MM_SET_VIF_STATE_REQ, /// Confirmation of the @ref MM_SET_VIF_STATE_REQ message. MM_SET_VIF_STATE_CFM, /// SLOT TIME PARAMETERS CONFIGURATION Request. MM_SET_SLOTTIME_REQ, /// SLOT TIME PARAMETERS CONFIGURATION Confirmation. MM_SET_SLOTTIME_CFM, /// Power Mode Change Request. MM_SET_IDLE_REQ, /// Power Mode Change Confirm. MM_SET_IDLE_CFM, /// KEY ADD Request. MM_KEY_ADD_REQ, /// KEY ADD Confirm. MM_KEY_ADD_CFM, /// KEY DEL Request. MM_KEY_DEL_REQ, /// KEY DEL Confirm. MM_KEY_DEL_CFM, /// Block Ack agreement info addition MM_BA_ADD_REQ, /// Block Ack agreement info addition confirmation MM_BA_ADD_CFM, /// Block Ack agreement info deletion MM_BA_DEL_REQ, /// Block Ack agreement info deletion confirmation MM_BA_DEL_CFM, /// Indication of the primary TBTT to the upper MAC. Upon the reception of this // message the upper MAC has to push the beacon(s) to the beacon transmission queue. MM_PRIMARY_TBTT_IND, /// Indication of the secondary TBTT to the upper MAC. Upon the reception of this // message the upper MAC has to push the beacon(s) to the beacon transmission queue. MM_SECONDARY_TBTT_IND, /// Request for changing the TX power MM_SET_POWER_REQ, /// Confirmation of the TX power change MM_SET_POWER_CFM, /// Request to the LMAC to trigger the embedded logic analyzer and forward the debug /// dump. MM_DBG_TRIGGER_REQ, /// Set Power Save mode MM_SET_PS_MODE_REQ, /// Set Power Save mode confirmation MM_SET_PS_MODE_CFM, /// Request to add a channel context MM_CHAN_CTXT_ADD_REQ, /// Confirmation of the channel context addition MM_CHAN_CTXT_ADD_CFM, /// Request to delete a channel context MM_CHAN_CTXT_DEL_REQ, /// Confirmation of the channel context deletion MM_CHAN_CTXT_DEL_CFM, /// Request to link a channel context to a VIF MM_CHAN_CTXT_LINK_REQ, /// Confirmation of the channel context link MM_CHAN_CTXT_LINK_CFM, /// Request to unlink a channel context from a VIF MM_CHAN_CTXT_UNLINK_REQ, /// Confirmation of the channel context unlink MM_CHAN_CTXT_UNLINK_CFM, /// Request to update a channel context MM_CHAN_CTXT_UPDATE_REQ, /// Confirmation of the channel context update MM_CHAN_CTXT_UPDATE_CFM, /// Request to schedule a channel context MM_CHAN_CTXT_SCHED_REQ, /// Confirmation of the channel context scheduling MM_CHAN_CTXT_SCHED_CFM, /// Request to change the beacon template in LMAC MM_BCN_CHANGE_REQ, /// Confirmation of the beacon change MM_BCN_CHANGE_CFM, /// Request to update the TIM in the beacon (i.e to indicate traffic bufferized at AP) MM_TIM_UPDATE_REQ, /// Confirmation of the TIM update MM_TIM_UPDATE_CFM, /// Connection loss indication MM_CONNECTION_LOSS_IND, /// Channel context switch indication to the upper layers MM_CHANNEL_SWITCH_IND, /// Channel context pre-switch indication to the upper layers MM_CHANNEL_PRE_SWITCH_IND, /// Request to remain on channel or cancel remain on channel MM_REMAIN_ON_CHANNEL_REQ, /// Confirmation of the (cancel) remain on channel request MM_REMAIN_ON_CHANNEL_CFM, /// Remain on channel expired indication MM_REMAIN_ON_CHANNEL_EXP_IND, /// Indication of a PS state change of a peer device MM_PS_CHANGE_IND, /// Indication that some buffered traffic should be sent to the peer device MM_TRAFFIC_REQ_IND, /// Request to modify the STA Power-save mode options MM_SET_PS_OPTIONS_REQ, /// Confirmation of the PS options setting MM_SET_PS_OPTIONS_CFM, /// Indication of PS state change for a P2P VIF MM_P2P_VIF_PS_CHANGE_IND, /// Indication that CSA counter has been updated MM_CSA_COUNTER_IND, /// Channel occupation report indication MM_CHANNEL_SURVEY_IND, /// Message containing Beamformer Information MM_BFMER_ENABLE_REQ, /// Request to Start/Stop/Update NOA - GO Only MM_SET_P2P_NOA_REQ, /// Request to Start/Stop/Update Opportunistic PS - GO Only MM_SET_P2P_OPPPS_REQ, /// Start/Stop/Update NOA Confirmation MM_SET_P2P_NOA_CFM, /// Start/Stop/Update Opportunistic PS Confirmation MM_SET_P2P_OPPPS_CFM, /// P2P NoA Update Indication - GO Only MM_P2P_NOA_UPD_IND, /// Request to set RSSI threshold and RSSI hysteresis MM_CFG_RSSI_REQ, /// Indication that RSSI level is below or above the threshold MM_RSSI_STATUS_IND, /// Indication that CSA is done MM_CSA_FINISH_IND, /// Indication that CSA is in prorgess (resp. done) and traffic must be stopped (resp. restarted) MM_CSA_TRAFFIC_IND, /// Request to update the group information of a station MM_MU_GROUP_UPDATE_REQ, /// Confirmation of the @ref MM_MU_GROUP_UPDATE_REQ message MM_MU_GROUP_UPDATE_CFM, /// Request to initialize the antenna diversity algorithm MM_ANT_DIV_INIT_REQ, /// Request to stop the antenna diversity algorithm MM_ANT_DIV_STOP_REQ, /// Request to update the antenna switch status MM_ANT_DIV_UPDATE_REQ, /// Request to switch the antenna connected to path_0 MM_SWITCH_ANTENNA_REQ, /// Indication that a packet loss has occurred MM_PKTLOSS_IND, MM_SET_ARPOFFLOAD_REQ, MM_SET_ARPOFFLOAD_CFM, MM_SET_AGG_DISABLE_REQ, MM_SET_AGG_DISABLE_CFM, MM_SET_COEX_REQ, MM_SET_COEX_CFM, MM_SET_RF_CONFIG_REQ, MM_SET_RF_CONFIG_CFM, MM_SET_RF_CALIB_REQ, MM_SET_RF_CALIB_CFM, /// MU EDCA PARAMETERS Configuration Request. MM_SET_MU_EDCA_REQ, /// MU EDCA PARAMETERS Configuration Confirmation. MM_SET_MU_EDCA_CFM, /// UORA PARAMETERS Configuration Request. MM_SET_UORA_REQ, /// UORA PARAMETERS Configuration Confirmation. MM_SET_UORA_CFM, /// TXOP RTS THRESHOLD Configuration Request. MM_SET_TXOP_RTS_THRES_REQ, /// TXOP RTS THRESHOLD Configuration Confirmation. MM_SET_TXOP_RTS_THRES_CFM, /// HE BSS Color Configuration Request. MM_SET_BSS_COLOR_REQ, /// HE BSS Color Configuration Confirmation. MM_SET_BSS_COLOR_CFM, MM_GET_MAC_ADDR_REQ, MM_GET_MAC_ADDR_CFM, MM_GET_STA_INFO_REQ, MM_GET_STA_INFO_CFM, MM_SET_TXPWR_IDX_LVL_REQ, MM_SET_TXPWR_IDX_LVL_CFM, MM_SET_TXPWR_OFST_REQ, MM_SET_TXPWR_OFST_CFM, MM_SET_STACK_START_REQ, MM_SET_STACK_START_CFM, MM_APM_STALOSS_IND, MM_SET_TXOP_REQ, MM_SET_TXOP_CFM, MM_GET_FW_VERSION_REQ, MM_GET_FW_VERSION_CFM, MM_SET_VENDOR_TRX_PARAM_REQ, MM_SET_VENDOR_TRX_PARAM_CFM, /// MAX number of messages MM_MAX, }; /// Interface types enum { /// ESS STA interface MM_STA, /// IBSS STA interface MM_IBSS, /// AP interface MM_AP, // Mesh Point interface MM_MESH_POINT, // Monitor interface MM_MONITOR, }; ///BA agreement types enum { ///BlockAck agreement for TX BA_AGMT_TX, ///BlockAck agreement for RX BA_AGMT_RX, }; ///BA agreement related status enum { ///Correct BA agreement establishment BA_AGMT_ESTABLISHED, ///BA agreement already exists for STA+TID requested, cannot override it (should have been deleted first) BA_AGMT_ALREADY_EXISTS, ///Correct BA agreement deletion BA_AGMT_DELETED, ///BA agreement for the (STA, TID) doesn't exist so nothing to delete BA_AGMT_DOESNT_EXIST, }; /// Features supported by LMAC - Positions enum mm_features { /// Beaconing MM_FEAT_BCN_BIT = 0, /* /// Autonomous Beacon Transmission MM_FEAT_AUTOBCN_BIT, /// Scan in LMAC MM_FEAT_HWSCAN_BIT, /// Connection Monitoring MM_FEAT_CMON_BIT, /// Multi Role MM_FEAT_MROLE_BIT, */ /// Radar Detection MM_FEAT_RADAR_BIT, /// Power Save MM_FEAT_PS_BIT, /// UAPSD MM_FEAT_UAPSD_BIT, /// DPSM // MM_FEAT_DPSM_BIT, /// A-MPDU MM_FEAT_AMPDU_BIT, /// A-MSDU MM_FEAT_AMSDU_BIT, /// Channel Context // MM_FEAT_CHNL_CTXT_BIT, /// Packet reordering // MM_FEAT_REORD_BIT, /// P2P MM_FEAT_P2P_BIT, /// P2P Go MM_FEAT_P2P_GO_BIT, /// UMAC Present MM_FEAT_UMAC_BIT, /// VHT support MM_FEAT_VHT_BIT, /// Beamformee MM_FEAT_BFMEE_BIT, /// Beamformer MM_FEAT_BFMER_BIT, /// WAPI MM_FEAT_WAPI_BIT, /// MFP MM_FEAT_MFP_BIT, /// Mu-MIMO RX support MM_FEAT_MU_MIMO_RX_BIT, /// Mu-MIMO TX support MM_FEAT_MU_MIMO_TX_BIT, /// Wireless Mesh Networking MM_FEAT_MESH_BIT, /// TDLS support MM_FEAT_TDLS_BIT, /// Antenna Diversity support MM_FEAT_ANT_DIV_BIT, /// UF support MM_FEAT_UF_BIT, /// A-MSDU maximum size (bit0) MM_AMSDU_MAX_SIZE_BIT0, /// A-MSDU maximum size (bit1) MM_AMSDU_MAX_SIZE_BIT1, /// MON_DATA support MM_FEAT_MON_DATA_BIT, /// HE (802.11ax) support MM_FEAT_HE_BIT, /// TWT support MM_FEAT_TWT_BIT, }; /// Maximum number of words in the configuration buffer #define PHY_CFG_BUF_SIZE 16 /// Structure containing the parameters of the PHY configuration struct phy_cfg_tag { /// Buffer containing the parameters specific for the PHY used u32_l parameters[PHY_CFG_BUF_SIZE]; }; /// Structure containing the parameters of the Trident PHY configuration struct phy_trd_cfg_tag { /// MDM type(nxm)(upper nibble) and MDM2RF path mapping(lower nibble) u8_l path_mapping; /// TX DC offset compensation u32_l tx_dc_off_comp; }; /// Structure containing the parameters of the Karst PHY configuration struct phy_karst_cfg_tag { /// TX IQ mismatch compensation in 2.4GHz u32_l tx_iq_comp_2_4G[2]; /// RX IQ mismatch compensation in 2.4GHz u32_l rx_iq_comp_2_4G[2]; /// TX IQ mismatch compensation in 5GHz u32_l tx_iq_comp_5G[2]; /// RX IQ mismatch compensation in 5GHz u32_l rx_iq_comp_5G[2]; /// RF path used by default (0 or 1) u8_l path_used; }; /// Structure containing the parameters of the @ref MM_START_REQ message struct mm_start_req { /// PHY configuration struct phy_cfg_tag phy_cfg; /// UAPSD timeout u32_l uapsd_timeout; /// Local LP clock accuracy (in ppm) u16_l lp_clk_accuracy; }; /// Structure containing the parameters of the @ref MM_SET_CHANNEL_REQ message struct mm_set_channel_req { /// Channel information struct mac_chan_op chan; /// Index of the RF for which the channel has to be set (0: operating (primary), 1: secondary /// RF (used for additional radar detection). This parameter is reserved if no secondary RF /// is available in the system u8_l index; }; /// Structure containing the parameters of the @ref MM_SET_CHANNEL_CFM message struct mm_set_channel_cfm { /// Radio index to be used in policy table u8_l radio_idx; /// TX power configured (in dBm) s8_l power; }; /// Structure containing the parameters of the @ref MM_SET_DTIM_REQ message struct mm_set_dtim_req { /// DTIM period u8_l dtim_period; }; /// Structure containing the parameters of the @ref MM_SET_POWER_REQ message struct mm_set_power_req { /// Index of the interface for which the parameter is configured u8_l inst_nbr; /// TX power (in dBm) s8_l power; }; /// Structure containing the parameters of the @ref MM_SET_POWER_CFM message struct mm_set_power_cfm { /// Radio index to be used in policy table u8_l radio_idx; /// TX power configured (in dBm) s8_l power; }; /// Structure containing the parameters of the @ref MM_SET_BEACON_INT_REQ message struct mm_set_beacon_int_req { /// Beacon interval u16_l beacon_int; /// Index of the interface for which the parameter is configured u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_SET_BASIC_RATES_REQ message struct mm_set_basic_rates_req { /// Basic rate set (as expected by bssBasicRateSet field of Rates MAC HW register) u32_l rates; /// Index of the interface for which the parameter is configured u8_l inst_nbr; /// Band on which the interface will operate u8_l band; }; /// Structure containing the parameters of the @ref MM_SET_BSSID_REQ message struct mm_set_bssid_req { /// BSSID to be configured in HW struct mac_addr bssid; /// Index of the interface for which the parameter is configured u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_SET_FILTER_REQ message struct mm_set_filter_req { /// RX filter to be put into rxCntrlReg HW register u32_l filter; }; /// Structure containing the parameters of the @ref MM_ADD_IF_REQ message. struct mm_add_if_req { /// Type of the interface (AP, STA, ADHOC, ...) u8_l type; /// MAC ADDR of the interface to start struct mac_addr addr; /// P2P Interface bool_l p2p; }; /// Structure containing the parameters of the @ref MM_SET_EDCA_REQ message struct mm_set_edca_req { /// EDCA parameters of the queue (as expected by edcaACxReg HW register) u32_l ac_param; /// Flag indicating if UAPSD can be used on this queue bool_l uapsd; /// HW queue for which the parameters are configured u8_l hw_queue; /// Index of the interface for which the parameters are configured u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_SET_MU_EDCA_REQ message struct mm_set_mu_edca_req { /// MU EDCA parameters of the different HE queues u32_l param[AC_MAX]; }; /// Structure containing the parameters of the @ref MM_SET_UORA_REQ message struct mm_set_uora_req { /// Minimum exponent of OFDMA Contention Window. u8_l eocw_min; /// Maximum exponent of OFDMA Contention Window. u8_l eocw_max; }; /// Structure containing the parameters of the @ref MM_SET_TXOP_RTS_THRES_REQ message struct mm_set_txop_rts_thres_req { /// TXOP RTS threshold u16_l txop_dur_rts_thres; /// Index of the interface for which the parameter is configured u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_SET_BSS_COLOR_REQ message struct mm_set_bss_color_req { /// HE BSS color, formatted as per BSS_COLOR MAC HW register u32_l bss_color; }; struct mm_set_idle_req { u8_l hw_idle; }; /// Structure containing the parameters of the @ref MM_SET_SLOTTIME_REQ message struct mm_set_slottime_req { /// Slot time expressed in us u8_l slottime; }; /// Structure containing the parameters of the @ref MM_SET_MODE_REQ message struct mm_set_mode_req { /// abgnMode field of macCntrl1Reg register u8_l abgnmode; }; /// Structure containing the parameters of the @ref MM_SET_VIF_STATE_REQ message struct mm_set_vif_state_req { /// Association Id received from the AP (valid only if the VIF is of STA type) u16_l aid; /// Flag indicating if the VIF is active or not bool_l active; /// Interface index u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_ADD_IF_CFM message. struct mm_add_if_cfm { /// Status of operation (different from 0 if unsuccessful) u8_l status; /// Interface index assigned by the LMAC u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_REMOVE_IF_REQ message. struct mm_remove_if_req { /// Interface index assigned by the LMAC u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_VERSION_CFM message. struct mm_version_cfm { /// Version of the LMAC FW u32_l version_lmac; /// Version1 of the MAC HW (as encoded in version1Reg MAC HW register) u32_l version_machw_1; /// Version2 of the MAC HW (as encoded in version2Reg MAC HW register) u32_l version_machw_2; /// Version1 of the PHY (depends on actual PHY) u32_l version_phy_1; /// Version2 of the PHY (depends on actual PHY) u32_l version_phy_2; /// Supported Features u32_l features; /// Maximum number of supported stations u16_l max_sta_nb; /// Maximum number of supported virtual interfaces u8_l max_vif_nb; }; /// Structure containing the parameters of the @ref MM_STA_ADD_REQ message. struct mm_sta_add_req { /// Bitfield showing some capabilities of the STA (@ref enum mac_sta_flags) u32_l capa_flags; /// Maximum A-MPDU size, in bytes, for HE frames u32_l ampdu_size_max_he; /// Maximum A-MPDU size, in bytes, for VHT frames u32_l ampdu_size_max_vht; /// PAID/GID u32_l paid_gid; /// Maximum A-MPDU size, in bytes, for HT frames u16_l ampdu_size_max_ht; /// MAC address of the station to be added struct mac_addr mac_addr; /// A-MPDU spacing, in us u8_l ampdu_spacing_min; /// Interface index u8_l inst_nbr; /// TDLS station bool_l tdls_sta; /// Indicate if the station is TDLS link initiator station bool_l tdls_sta_initiator; /// Indicate if the TDLS Channel Switch is allowed bool_l tdls_chsw_allowed; /// nonTransmitted BSSID index, set to the BSSID index in case the STA added is an AP /// that is a nonTransmitted BSSID. Should be set to 0 otherwise u8_l bssid_index; /// Maximum BSSID indicator, valid if the STA added is an AP that is a nonTransmitted /// BSSID u8_l max_bssid_ind; }; /// Structure containing the parameters of the @ref MM_STA_ADD_CFM message. struct mm_sta_add_cfm { /// Status of the operation (different from 0 if unsuccessful) u8_l status; /// Index assigned by the LMAC to the newly added station u8_l sta_idx; /// MAC HW index of the newly added station u8_l hw_sta_idx; }; /// Structure containing the parameters of the @ref MM_STA_DEL_REQ message. struct mm_sta_del_req { /// Index of the station to be deleted u8_l sta_idx; }; /// Structure containing the parameters of the @ref MM_STA_DEL_CFM message. struct mm_sta_del_cfm { /// Status of the operation (different from 0 if unsuccessful) u8_l status; }; /// Structure containing the parameters of the SET_POWER_MODE REQ message. struct mm_setpowermode_req { u8_l mode; u8_l sta_idx; }; /// Structure containing the parameters of the SET_POWER_MODE CFM message. struct mm_setpowermode_cfm { u8_l status; }; /// Structure containing the parameters of the @ref MM_KEY_ADD REQ message. struct mm_key_add_req { /// Key index (valid only for default keys) u8_l key_idx; /// STA index (valid only for pairwise or mesh group keys) u8_l sta_idx; /// Key material struct mac_sec_key key; /// Cipher suite (WEP64, WEP128, TKIP, CCMP) u8_l cipher_suite; /// Index of the interface for which the key is set (valid only for default keys or mesh group keys) u8_l inst_nbr; /// A-MSDU SPP parameter u8_l spp; /// Indicate if provided key is a pairwise key or not bool_l pairwise; }; /// Structure containing the parameters of the @ref MM_KEY_ADD_CFM message. struct mm_key_add_cfm { /// Status of the operation (different from 0 if unsuccessful) u8_l status; /// HW index of the key just added u8_l hw_key_idx; }; /// Structure containing the parameters of the @ref MM_KEY_DEL_REQ message. struct mm_key_del_req { /// HW index of the key to be deleted u8_l hw_key_idx; }; /// Structure containing the parameters of the @ref MM_BA_ADD_REQ message. struct mm_ba_add_req { ///Type of agreement (0: TX, 1: RX) u8_l type; ///Index of peer station with which the agreement is made u8_l sta_idx; ///TID for which the agreement is made with peer station u8_l tid; ///Buffer size - number of MPDUs that can be held in its buffer per TID u8_l bufsz; /// Start sequence number negotiated during BA setup - the one in first aggregated MPDU counts more u16_l ssn; }; /// Structure containing the parameters of the @ref MM_BA_ADD_CFM message. struct mm_ba_add_cfm { ///Index of peer station for which the agreement is being confirmed u8_l sta_idx; ///TID for which the agreement is being confirmed u8_l tid; /// Status of ba establishment u8_l status; }; /// Structure containing the parameters of the @ref MM_BA_DEL_REQ message. struct mm_ba_del_req { ///Type of agreement (0: TX, 1: RX) u8_l type; ///Index of peer station for which the agreement is being deleted u8_l sta_idx; ///TID for which the agreement is being deleted u8_l tid; }; /// Structure containing the parameters of the @ref MM_BA_DEL_CFM message. struct mm_ba_del_cfm { ///Index of peer station for which the agreement deletion is being confirmed u8_l sta_idx; ///TID for which the agreement deletion is being confirmed u8_l tid; /// Status of ba deletion u8_l status; }; /// Structure containing the parameters of the @ref MM_CHAN_CTXT_ADD_REQ message struct mm_chan_ctxt_add_req { /// Operating channel struct mac_chan_op chan; }; /// Structure containing the parameters of the @ref MM_CHAN_CTXT_ADD_REQ message struct mm_chan_ctxt_add_cfm { /// Status of the addition u8_l status; /// Index of the new channel context u8_l index; }; /// Structure containing the parameters of the @ref MM_CHAN_CTXT_DEL_REQ message struct mm_chan_ctxt_del_req { /// Index of the new channel context to be deleted u8_l index; }; /// Structure containing the parameters of the @ref MM_CHAN_CTXT_LINK_REQ message struct mm_chan_ctxt_link_req { /// VIF index u8_l vif_index; /// Channel context index u8_l chan_index; /// Indicate if this is a channel switch (unlink current ctx first if true) u8_l chan_switch; }; /// Structure containing the parameters of the @ref MM_CHAN_CTXT_UNLINK_REQ message struct mm_chan_ctxt_unlink_req { /// VIF index u8_l vif_index; }; /// Structure containing the parameters of the @ref MM_CHAN_CTXT_UPDATE_REQ message struct mm_chan_ctxt_update_req { /// Channel context index u8_l chan_index; /// New channel information struct mac_chan_op chan; }; /// Structure containing the parameters of the @ref MM_CHAN_CTXT_SCHED_REQ message struct mm_chan_ctxt_sched_req { /// VIF index u8_l vif_index; /// Channel context index u8_l chan_index; /// Type of the scheduling request (0: normal scheduling, 1: derogatory /// scheduling) u8_l type; }; /// Structure containing the parameters of the @ref MM_CHANNEL_SWITCH_IND message struct mm_channel_switch_ind { /// Index of the channel context we will switch to u8_l chan_index; /// Indicate if the switch has been triggered by a Remain on channel request bool_l roc; /// VIF on which remain on channel operation has been started (if roc == 1) u8_l vif_index; /// Indicate if the switch has been triggered by a TDLS Remain on channel request bool_l roc_tdls; }; /// Structure containing the parameters of the @ref MM_CHANNEL_PRE_SWITCH_IND message struct mm_channel_pre_switch_ind { /// Index of the channel context we will switch to u8_l chan_index; }; /// Structure containing the parameters of the @ref MM_CONNECTION_LOSS_IND message. struct mm_connection_loss_ind { /// VIF instance number u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_DBG_TRIGGER_REQ message. struct mm_dbg_trigger_req { /// Error trace to be reported by the LMAC char error[64]; }; /// Structure containing the parameters of the @ref MM_SET_PS_MODE_REQ message. struct mm_set_ps_mode_req { /// Power Save is activated or deactivated u8_l new_state; }; /// Structure containing the parameters of the @ref MM_BCN_CHANGE_REQ message. #define BCN_MAX_CSA_CPT 2 struct mm_bcn_change_req { /// Pointer, in host memory, to the new beacon template u32_l bcn_ptr; /// Length of the beacon template u16_l bcn_len; /// Offset of the TIM IE in the beacon u16_l tim_oft; /// Length of the TIM IE u8_l tim_len; /// Index of the VIF for which the beacon is updated u8_l inst_nbr; /// Offset of CSA (channel switch announcement) counters (0 means no counter) u8_l csa_oft[BCN_MAX_CSA_CPT]; }; /// Structure containing the parameters of the @ref MM_TIM_UPDATE_REQ message. struct mm_tim_update_req { /// Association ID of the STA the bit of which has to be updated (0 for BC/MC traffic) u16_l aid; /// Flag indicating the availability of data packets for the given STA u8_l tx_avail; /// Index of the VIF for which the TIM is updated u8_l inst_nbr; }; /// Structure containing the parameters of the @ref MM_REMAIN_ON_CHANNEL_REQ message. struct mm_remain_on_channel_req { /// Operation Code u8_l op_code; /// VIF Index u8_l vif_index; /// Band (2.4GHz or 5GHz) u8_l band; /// Channel type: 20,40,80,160 or 80+80 MHz u8_l type; /// Frequency for Primary 20MHz channel (in MHz) u16_l prim20_freq; /// Frequency for Center of the contiguous channel or center of Primary 80+80 u16_l center1_freq; /// Frequency for Center of the non-contiguous secondary 80+80 u16_l center2_freq; /// Duration (in ms) u32_l duration_ms; /// TX power (in dBm) s8_l tx_power; }; /// Structure containing the parameters of the @ref MM_REMAIN_ON_CHANNEL_CFM message struct mm_remain_on_channel_cfm { /// Operation Code u8_l op_code; /// Status of the operation u8_l status; /// Channel Context index u8_l chan_ctxt_index; }; /// Structure containing the parameters of the @ref MM_REMAIN_ON_CHANNEL_EXP_IND message struct mm_remain_on_channel_exp_ind { /// VIF Index u8_l vif_index; /// Channel Context index u8_l chan_ctxt_index; }; /// Structure containing the parameters of the @ref MM_SET_UAPSD_TMR_REQ message. struct mm_set_uapsd_tmr_req { /// action: Start or Stop the timer u8_l action; /// timeout value, in milliseconds u32_l timeout; }; /// Structure containing the parameters of the @ref MM_SET_UAPSD_TMR_CFM message. struct mm_set_uapsd_tmr_cfm { /// Status of the operation (different from 0 if unsuccessful) u8_l status; }; /// Structure containing the parameters of the @ref MM_PS_CHANGE_IND message struct mm_ps_change_ind { /// Index of the peer device that is switching its PS state u8_l sta_idx; /// New PS state of the peer device (0: active, 1: sleeping) u8_l ps_state; }; /// Structure containing the parameters of the @ref MM_P2P_VIF_PS_CHANGE_IND message struct mm_p2p_vif_ps_change_ind { /// Index of the P2P VIF that is switching its PS state u8_l vif_index; /// New PS state of the P2P VIF interface (0: active, 1: sleeping) u8_l ps_state; }; /// Structure containing the parameters of the @ref MM_TRAFFIC_REQ_IND message struct mm_traffic_req_ind { /// Index of the peer device that needs traffic u8_l sta_idx; /// Number of packets that need to be sent (if 0, all buffered traffic shall be sent and /// if set to @ref PS_SP_INTERRUPTED, it means that current service period has been interrupted) u8_l pkt_cnt; /// Flag indicating if the traffic request concerns U-APSD queues or not bool_l uapsd; }; /// Structure containing the parameters of the @ref MM_SET_PS_OPTIONS_REQ message. struct mm_set_ps_options_req { /// VIF Index u8_l vif_index; /// Listen interval (0 if wake up shall be based on DTIM period) u16_l listen_interval; /// Flag indicating if we shall listen the BC/MC traffic or not bool_l dont_listen_bc_mc; }; /// Structure containing the parameters of the @ref MM_CSA_COUNTER_IND message struct mm_csa_counter_ind { /// Index of the VIF u8_l vif_index; /// Updated CSA counter value u8_l csa_count; }; /// Structure containing the parameters of the @ref MM_CHANNEL_SURVEY_IND message struct mm_channel_survey_ind { /// Frequency of the channel u16_l freq; /// Noise in dbm s8_l noise_dbm; /// Amount of time spent of the channel (in ms) u32_l chan_time_ms; /// Amount of time the primary channel was sensed busy u32_l chan_time_busy_ms; }; /// Structure containing the parameters of the @ref MM_BFMER_ENABLE_REQ message. struct mm_bfmer_enable_req { /** * Address of the beamforming report space allocated in host memory * (Valid only if vht_su_bfmee is true) */ u32_l host_bfr_addr; /** * Size of the beamforming report space allocated in host memory. This space should * be twice the maximum size of the expected beamforming reports as the FW will * divide it in two in order to be able to upload a new report while another one is * used in transmission */ u16_l host_bfr_size; /// AID u16_l aid; /// Station Index u8_l sta_idx; /// Maximum number of spatial streams the station can receive u8_l rx_nss; /** * Indicate if peer STA is MU Beamformee (VHT) capable * (Valid only if vht_su_bfmee is true) */ bool_l vht_mu_bfmee; }; /// Structure containing the parameters of the @ref MM_SET_P2P_NOA_REQ message. struct mm_set_p2p_noa_req { /// VIF Index u8_l vif_index; /// Allocated NOA Instance Number - Valid only if count = 0 u8_l noa_inst_nb; /// Count u8_l count; /// Indicate if NoA can be paused for traffic reason bool_l dyn_noa; /// Duration (in us) u32_l duration_us; /// Interval (in us) u32_l interval_us; /// Start Time offset from next TBTT (in us) u32_l start_offset; }; #ifdef AICWF_ARP_OFFLOAD struct mm_set_arpoffload_en_req { u32_l ipaddr; u8_l enable; u8_l vif_idx; }; struct mm_set_arpoffload_en_cfm { u8_l status; }; #endif struct mm_set_agg_disable_req { u8_l disable; u8_l staidx; }; struct mm_set_coex_req { u8_l bt_on; u8_l disable_coexnull; u8_l enable_nullcts; u8_l enable_periodic_timer; u8_l coex_timeslot_set; u32_l coex_timeslot[2]; }; #if 0 struct mm_set_rf_config_req { u8_l def_band; u8_l config_type; u16_l offset; u16_l len; u16_l set; u32_l rx_gain_24g[48][4]; u32_l rx_gain_5g[32][4]; u32_l tx_gain[32]; }; #endif struct mm_set_rf_config_req { u8_l table_sel; u8_l table_ofst; u8_l table_num; u8_l deft_page; u32_l data[64]; }; struct mm_set_rf_calib_req { u32_l cal_cfg_24g; u32_l cal_cfg_5g; u32_l param_alpha; u32_l bt_calib_en; u32_l bt_calib_param; u8_l xtal_cap; u8_l xtal_cap_fine; }; struct mm_set_rf_calib_cfm { u32_l rxgain_24g_addr; u32_l rxgain_5g_addr; u32_l txgain_24g_addr; u32_l txgain_5g_addr; }; struct mm_get_mac_addr_req { u32_l get; }; struct mm_get_mac_addr_cfm { u8_l mac_addr[6]; }; struct mm_get_sta_info_req { u8_l sta_idx; }; struct mm_get_sta_info_cfm { u32_l rate_info; u32_l txfailed; u8 rssi; }; typedef struct { u8_l enable; u8_l dsss; u8_l ofdmlowrate_2g4; u8_l ofdm64qam_2g4; u8_l ofdm256qam_2g4; u8_l ofdm1024qam_2g4; u8_l ofdmlowrate_5g; u8_l ofdm64qam_5g; u8_l ofdm256qam_5g; u8_l ofdm1024qam_5g; } txpwr_lvl_conf_t; typedef struct { u8_l enable; s8_l pwrlvl_11b_11ag_2g4[12]; s8_l pwrlvl_11n_11ac_2g4[10]; s8_l pwrlvl_11ax_2g4[12]; } txpwr_lvl_conf_v2_t; typedef struct { u8_l enable; s8_l pwrlvl_11b_11ag_2g4[12]; s8_l pwrlvl_11n_11ac_2g4[10]; s8_l pwrlvl_11ax_2g4[12]; s8_l pwrlvl_11a_5g[12]; s8_l pwrlvl_11n_11ac_5g[10]; s8_l pwrlvl_11ax_5g[12]; } txpwr_lvl_conf_v3_t; struct mm_set_txpwr_lvl_req { union { txpwr_lvl_conf_t txpwr_lvl; txpwr_lvl_conf_v2_t txpwr_lvl_v2; txpwr_lvl_conf_v3_t txpwr_lvl_v3; }; }; typedef struct { u8_l enable; u8_l dsss; u8_l ofdmlowrate_2g4; u8_l ofdm64qam_2g4; u8_l ofdm256qam_2g4; u8_l ofdm1024qam_2g4; u8_l ofdmlowrate_5g; u8_l ofdm64qam_5g; u8_l ofdm256qam_5g; u8_l ofdm1024qam_5g; } txpwr_idx_conf_t; struct mm_set_txpwr_idx_req { txpwr_idx_conf_t txpwr_idx; }; typedef struct { u8_l enable; s8_l chan_1_4; s8_l chan_5_9; s8_l chan_10_13; s8_l chan_36_64; s8_l chan_100_120; s8_l chan_122_140; s8_l chan_142_165; } txpwr_ofst_conf_t; typedef struct { u8_l enable; u8_l xtal_cap; u8_l xtal_cap_fine; } xtal_cap_conf_t; struct mm_set_txpwr_ofst_req { txpwr_ofst_conf_t txpwr_ofst; }; struct mm_set_stack_start_req { u8_l is_stack_start; u8_l efuse_valid; u8_l set_vendor_info; u8_l fwtrace_redir; }; struct mm_set_stack_start_cfm { u8_l is_5g_support; u8_l vendor_info; }; /// Structure containing the parameters of the @ref MM_SET_P2P_OPPPS_REQ message. struct mm_set_p2p_oppps_req { /// VIF Index u8_l vif_index; /// CTWindow u8_l ctwindow; }; /// Structure containing the parameters of the @ref MM_SET_P2P_NOA_CFM message. struct mm_set_p2p_noa_cfm { /// Request status u8_l status; }; /// Structure containing the parameters of the @ref MM_SET_P2P_OPPPS_CFM message. struct mm_set_p2p_oppps_cfm { /// Request status u8_l status; }; /// Structure containing the parameters of the @ref MM_P2P_NOA_UPD_IND message. struct mm_p2p_noa_upd_ind { /// VIF Index u8_l vif_index; /// NOA Instance Number u8_l noa_inst_nb; /// NoA Type u8_l noa_type; /// Count u8_l count; /// Duration (in us) u32_l duration_us; /// Interval (in us) u32_l interval_us; /// Start Time u32_l start_time; }; /// Structure containing the parameters of the @ref MM_CFG_RSSI_REQ message struct mm_cfg_rssi_req { /// Index of the VIF u8_l vif_index; /// RSSI threshold s8_l rssi_thold; /// RSSI hysteresis u8_l rssi_hyst; }; /// Structure containing the parameters of the @ref MM_RSSI_STATUS_IND message struct mm_rssi_status_ind { /// Index of the VIF u8_l vif_index; /// Status of the RSSI bool_l rssi_status; /// Current RSSI s8_l rssi; }; /// Structure containing the parameters of the @ref MM_PKTLOSS_IND message struct mm_pktloss_ind { /// Index of the VIF u8_l vif_index; /// Address of the STA for which there is a packet loss struct mac_addr mac_addr; /// Number of packets lost u32 num_packets; }; /// Structure containing the parameters of the @ref MM_CSA_FINISH_IND message struct mm_csa_finish_ind { /// Index of the VIF u8_l vif_index; /// Status of the operation u8_l status; /// New channel ctx index u8_l chan_idx; }; /// Structure containing the parameters of the @ref MM_CSA_TRAFFIC_IND message struct mm_csa_traffic_ind { /// Index of the VIF u8_l vif_index; /// Is tx traffic enable or disable bool_l enable; }; /// Structure containing the parameters of the @ref MM_MU_GROUP_UPDATE_REQ message. /// Size allocated for the structure depends of the number of group struct mm_mu_group_update_req { /// Station index u8_l sta_idx; /// Number of groups the STA belongs to u8_l group_cnt; /// Group information struct { /// Group Id u8_l group_id; /// User position u8_l user_pos; } groups[0]; }; /////////////////////////////////////////////////////////////////////////////// /////////// For Scan messages /////////////////////////////////////////////////////////////////////////////// enum scan_msg_tag { /// Scanning start Request. SCAN_START_REQ = LMAC_FIRST_MSG(TASK_SCAN), /// Scanning start Confirmation. SCAN_START_CFM, /// End of scanning indication. SCAN_DONE_IND, /// Cancel scan request SCAN_CANCEL_REQ, /// Cancel scan confirmation SCAN_CANCEL_CFM, /// MAX number of messages SCAN_MAX, }; /// Maximum number of SSIDs in a scan request #define SCAN_SSID_MAX 3 /// Maximum number of channels in a scan request #define SCAN_CHANNEL_MAX (MAC_DOMAINCHANNEL_24G_MAX + MAC_DOMAINCHANNEL_5G_MAX) /// Maximum length of the ProbeReq IEs (SoftMAC mode) #define SCAN_MAX_IE_LEN 300 /// Maximum number of PHY bands supported #define SCAN_BAND_MAX 2 /// Structure containing the parameters of the @ref SCAN_START_REQ message struct scan_start_req { /// List of channel to be scanned struct mac_chan_def chan[SCAN_CHANNEL_MAX]; /// List of SSIDs to be scanned struct mac_ssid ssid[SCAN_SSID_MAX]; /// BSSID to be scanned struct mac_addr bssid; /// Pointer (in host memory) to the additional IEs that need to be added to the ProbeReq /// (following the SSID element) u32_l add_ies; /// Length of the additional IEs u16_l add_ie_len; /// Index of the VIF that is scanning u8_l vif_idx; /// Number of channels to scan u8_l chan_cnt; /// Number of SSIDs to scan for u8_l ssid_cnt; /// no CCK - For P2P frames not being sent at CCK rate in 2GHz band. bool no_cck; /// Scan duration, in us u32_l duration; }; /// Structure containing the parameters of the @ref SCAN_START_CFM message struct scan_start_cfm { /// Status of the request u8_l status; }; /// Structure containing the parameters of the @ref SCAN_CANCEL_REQ message struct scan_cancel_req { }; /// Structure containing the parameters of the @ref SCAN_START_CFM message struct scan_cancel_cfm { /// Status of the request u8_l status; }; /////////////////////////////////////////////////////////////////////////////// /////////// For Scanu messages /////////////////////////////////////////////////////////////////////////////// /// Messages that are logically related to the task. enum { /// Scan request from host. SCANU_START_REQ = LMAC_FIRST_MSG(TASK_SCANU), /// Scanning start Confirmation. SCANU_START_CFM, /// Join request SCANU_JOIN_REQ, /// Join confirmation. SCANU_JOIN_CFM, /// Scan result indication. SCANU_RESULT_IND, /// Fast scan request from any other module. SCANU_FAST_REQ, /// Confirmation of fast scan request. SCANU_FAST_CFM, SCANU_VENDOR_IE_REQ, SCANU_VENDOR_IE_CFM, SCANU_START_CFM_ADDTIONAL, SCANU_CANCEL_REQ, SCANU_CANCEL_CFM, /// MAX number of messages SCANU_MAX, }; /// Maximum length of the additional ProbeReq IEs (FullMAC mode) #define SCANU_MAX_IE_LEN 200 /// Structure containing the parameters of the @ref SCANU_START_REQ message struct scanu_start_req { /// List of channel to be scanned struct mac_chan_def chan[SCAN_CHANNEL_MAX]; /// List of SSIDs to be scanned struct mac_ssid ssid[SCAN_SSID_MAX]; /// BSSID to be scanned (or WILDCARD BSSID if no BSSID is searched in particular) struct mac_addr bssid; /// Address (in host memory) of the additional IEs that need to be added to the ProbeReq /// (following the SSID element) u32_l add_ies; /// Length of the additional IEs u16_l add_ie_len; /// Index of the VIF that is scanning u8_l vif_idx; /// Number of channels to scan u8_l chan_cnt; /// Number of SSIDs to scan for u8_l ssid_cnt; /// no CCK - For P2P frames not being sent at CCK rate in 2GHz band. bool no_cck; /// Scan duration, in us u32_l duration; }; struct scanu_vendor_ie_req { u16_l add_ie_len; u8_l vif_idx; u8_l ie[256]; }; /// Structure containing the parameters of the @ref SCANU_START_CFM message struct scanu_start_cfm { /// Index of the VIF that was scanning u8_l vif_idx; /// Status of the request u8_l status; /// Number of scan results available u8_l result_cnt; }; /// Parameters of the @SCANU_RESULT_IND message struct scanu_result_ind { /// Length of the frame u16_l length; /// Frame control field of the frame. u16_l framectrl; /// Center frequency on which we received the packet u16_l center_freq; /// PHY band u8_l band; /// Index of the station that sent the frame. 0xFF if unknown. u8_l sta_idx; /// Index of the VIF that received the frame. 0xFF if unknown. u8_l inst_nbr; /// RSSI of the received frame. s8_l rssi; /// Frame payload. u32_l payload[]; }; /// Structure containing the parameters of the message. struct scanu_fast_req { /// The SSID to scan in the channel. struct mac_ssid ssid; /// BSSID. struct mac_addr bssid; /// Probe delay. u16_l probe_delay; /// Minimum channel time. u16_l minch_time; /// Maximum channel time. u16_l maxch_time; /// The channel number to scan. u16_l ch_nbr; }; /////////////////////////////////////////////////////////////////////////////// /////////// For ME messages /////////////////////////////////////////////////////////////////////////////// /// Messages that are logically related to the task. enum { /// Configuration request from host. ME_CONFIG_REQ = LMAC_FIRST_MSG(TASK_ME), /// Configuration confirmation. ME_CONFIG_CFM, /// Configuration request from host. ME_CHAN_CONFIG_REQ, /// Configuration confirmation. ME_CHAN_CONFIG_CFM, /// Set control port state for a station. ME_SET_CONTROL_PORT_REQ, /// Control port setting confirmation. ME_SET_CONTROL_PORT_CFM, /// TKIP MIC failure indication. ME_TKIP_MIC_FAILURE_IND, /// Add a station to the FW (AP mode) ME_STA_ADD_REQ, /// Confirmation of the STA addition ME_STA_ADD_CFM, /// Delete a station from the FW (AP mode) ME_STA_DEL_REQ, /// Confirmation of the STA deletion ME_STA_DEL_CFM, /// Indication of a TX RA/TID queue credit update ME_TX_CREDITS_UPDATE_IND, /// Request indicating to the FW that there is traffic buffered on host ME_TRAFFIC_IND_REQ, /// Confirmation that the @ref ME_TRAFFIC_IND_REQ has been executed ME_TRAFFIC_IND_CFM, /// Request of RC statistics to a station ME_RC_STATS_REQ, /// RC statistics confirmation ME_RC_STATS_CFM, /// RC fixed rate request ME_RC_SET_RATE_REQ, /// Configure monitor interface ME_CONFIG_MONITOR_REQ, /// Configure monitor interface response ME_CONFIG_MONITOR_CFM, /// Setting power Save mode request from host ME_SET_PS_MODE_REQ, /// Set power Save mode confirmation ME_SET_PS_MODE_CFM, /// Setting Low Power level request from host ME_SET_LP_LEVEL_REQ, /// Set Low Power level confirmation ME_SET_LP_LEVEL_CFM, /// MAX number of messages ME_MAX, }; /// Structure containing the parameters of the @ref ME_START_REQ message struct me_config_req { /// HT Capabilities struct mac_htcapability ht_cap; /// VHT Capabilities struct mac_vhtcapability vht_cap; /// HE capabilities struct mac_hecapability he_cap; /// Lifetime of packets sent under a BlockAck agreement (expressed in TUs) u16_l tx_lft; /// Maximum supported BW u8_l phy_bw_max; /// Boolean indicating if HT is supported or not bool_l ht_supp; /// Boolean indicating if VHT is supported or not bool_l vht_supp; /// Boolean indicating if HE is supported or not bool_l he_supp; /// Boolean indicating if HE OFDMA UL is enabled or not bool_l he_ul_on; /// Boolean indicating if PS mode shall be enabled or not bool_l ps_on; /// Boolean indicating if Antenna Diversity shall be enabled or not bool_l ant_div_on; /// Boolean indicating if Dynamic PS mode shall be used or not bool_l dpsm; }; /// Structure containing the parameters of the @ref ME_CHAN_CONFIG_REQ message struct me_chan_config_req { /// List of 2.4GHz supported channels struct mac_chan_def chan2G4[MAC_DOMAINCHANNEL_24G_MAX]; /// List of 5GHz supported channels struct mac_chan_def chan5G[MAC_DOMAINCHANNEL_5G_MAX]; /// Number of 2.4GHz channels in the list u8_l chan2G4_cnt; /// Number of 5GHz channels in the list u8_l chan5G_cnt; }; /// Structure containing the parameters of the @ref ME_SET_CONTROL_PORT_REQ message struct me_set_control_port_req { /// Index of the station for which the control port is opened u8_l sta_idx; /// Control port state bool_l control_port_open; }; /// Structure containing the parameters of the @ref ME_TKIP_MIC_FAILURE_IND message struct me_tkip_mic_failure_ind { /// Address of the sending STA struct mac_addr addr; /// TSC value u64_l tsc; /// Boolean indicating if the packet was a group or unicast one (true if group) bool_l ga; /// Key Id u8_l keyid; /// VIF index u8_l vif_idx; }; /// Structure containing the parameters of the @ref ME_STA_ADD_REQ message struct me_sta_add_req { /// MAC address of the station to be added struct mac_addr mac_addr; /// Supported legacy rates struct mac_rateset rate_set; /// HT Capabilities struct mac_htcapability ht_cap; /// VHT Capabilities struct mac_vhtcapability vht_cap; /// HE capabilities struct mac_hecapability he_cap; /// Flags giving additional information about the station (@ref mac_sta_flags) u32_l flags; /// Association ID of the station u16_l aid; /// Bit field indicating which queues have U-APSD enabled u8_l uapsd_queues; /// Maximum size, in frames, of a APSD service period u8_l max_sp_len; /// Operation mode information (valid if bit @ref STA_OPMOD_NOTIF is /// set in the flags) u8_l opmode; /// Index of the VIF the station is attached to u8_l vif_idx; /// Whether the the station is TDLS station bool_l tdls_sta; /// Indicate if the station is TDLS link initiator station bool_l tdls_sta_initiator; /// Indicate if the TDLS Channel Switch is allowed bool_l tdls_chsw_allowed; }; /// Structure containing the parameters of the @ref ME_STA_ADD_CFM message struct me_sta_add_cfm { /// Station index u8_l sta_idx; /// Status of the station addition u8_l status; /// PM state of the station u8_l pm_state; }; /// Structure containing the parameters of the @ref ME_STA_DEL_REQ message. struct me_sta_del_req { /// Index of the station to be deleted u8_l sta_idx; /// Whether the the station is TDLS station bool_l tdls_sta; }; /// Structure containing the parameters of the @ref ME_TX_CREDITS_UPDATE_IND message. struct me_tx_credits_update_ind { /// Index of the station for which the credits are updated u8_l sta_idx; /// TID for which the credits are updated u8_l tid; /// Offset to be applied on the credit count s8_l credits; }; /// Structure containing the parameters of the @ref ME_TRAFFIC_IND_REQ message. struct me_traffic_ind_req { /// Index of the station for which UAPSD traffic is available on host u8_l sta_idx; /// Flag indicating the availability of UAPSD packets for the given STA u8_l tx_avail; /// Indicate if traffic is on uapsd-enabled queues bool_l uapsd; }; struct mm_apm_staloss_ind { u8_l sta_idx; u8_l vif_idx; u8_l mac_addr[6]; }; struct mm_set_txop_req { u16_l txop_bk; u16_l txop_be; u16_l txop_vi; u16_l txop_vo; u8_l long_nav_en; u8_l cfe_en; }; struct mm_get_fw_version_cfm { u8_l fw_version_len; u8_l fw_version[63]; }; /// Structure containing the parameters of the @ref ME_RC_STATS_REQ message. struct me_rc_stats_req { /// Index of the station for which the RC statistics are requested u8_l sta_idx; }; /// Structure containing the rate control statistics struct rc_rate_stats { /// Number of attempts (per sampling interval) u16_l attempts; /// Number of success (per sampling interval) u16_l success; /// Estimated probability of success (EWMA) u16_l probability; /// Rate configuration of the sample u16_l rate_config; union { struct { /// Number of times the sample has been skipped (per sampling interval) u8_l sample_skipped; /// Whether the old probability is available bool_l old_prob_available; /// Whether the rate can be used in the retry chain bool_l rate_allowed; }; struct { /// RU size and UL length received in the latest HE trigger frame u16_l ru_and_length; }; }; }; /// Number of RC samples #define RC_MAX_N_SAMPLE 10 /// Index of the HE statistics element in the table #define RC_HE_STATS_IDX RC_MAX_N_SAMPLE /// Structure containing the parameters of the @ref ME_RC_STATS_CFM message. struct me_rc_stats_cfm { /// Index of the station for which the RC statistics are provided u8_l sta_idx; /// Number of samples used in the RC algorithm u16_l no_samples; /// Number of MPDUs transmitted (per sampling interval) u16_l ampdu_len; /// Number of AMPDUs transmitted (per sampling interval) u16_l ampdu_packets; /// Average number of MPDUs in each AMPDU frame (EWMA) u32_l avg_ampdu_len; // Current step 0 of the retry chain u8_l sw_retry_step; /// Trial transmission period u8_l sample_wait; /// Retry chain steps u16_l retry_step_idx[4]; /// RC statistics - Max number of RC samples, plus one for the HE TB statistics struct rc_rate_stats rate_stats[RC_MAX_N_SAMPLE + 1]; /// Throughput - Max number of RC samples, plus one for the HE TB statistics u32_l tp[RC_MAX_N_SAMPLE + 1]; }; /// Structure containing the parameters of the @ref ME_RC_SET_RATE_REQ message. struct me_rc_set_rate_req { /// Index of the station for which the fixed rate is set u8_l sta_idx; /// Rate configuration to be set u16_l fixed_rate_cfg; }; /// Structure containing the parameters of the @ref ME_CONFIG_MONITOR_REQ message. struct me_config_monitor_req { /// Channel to configure struct mac_chan_op chan; /// Is channel data valid bool_l chan_set; /// Enable report of unsupported HT frames bool_l uf; /// Enable auto-reply as the mac_addr matches bool_l auto_reply; }; /// Structure containing the parameters of the @ref ME_CONFIG_MONITOR_CFM message. struct me_config_monitor_cfm { /// Channel context index u8_l chan_index; /// Channel parameters struct mac_chan_op chan; }; /// Structure containing the parameters of the @ref ME_SET_PS_MODE_REQ message. struct me_set_ps_mode_req { /// Power Save is activated or deactivated u8_l ps_state; }; /// Structure containing the parameters of the @ref ME_SET_LP_LEVEL_REQ message. struct me_set_lp_level_req { /// Low Power level u8_l lp_level; }; /////////////////////////////////////////////////////////////////////////////// /////////// For SM messages /////////////////////////////////////////////////////////////////////////////// /// Message API of the SM task enum sm_msg_tag { /// Request to connect to an AP SM_CONNECT_REQ = LMAC_FIRST_MSG(TASK_SM), /// Confirmation of connection SM_CONNECT_CFM, /// Indicates that the SM associated to the AP SM_CONNECT_IND, /// Request to disconnect SM_DISCONNECT_REQ, /// Confirmation of disconnection SM_DISCONNECT_CFM, /// Indicates that the SM disassociated the AP SM_DISCONNECT_IND, /// Request to start external authentication SM_EXTERNAL_AUTH_REQUIRED_IND, /// Response to external authentication request SM_EXTERNAL_AUTH_REQUIRED_RSP, /// Request to update assoc elements after FT over the air authentication SM_FT_AUTH_IND, /// Response to FT authentication with updated assoc elements SM_FT_AUTH_RSP, /// MAX number of messages SM_MAX, }; /// Structure containing the parameters of @ref SM_CONNECT_REQ message. struct sm_connect_req { /// SSID to connect to struct mac_ssid ssid; /// BSSID to connect to (if not specified, set this field to WILDCARD BSSID) struct mac_addr bssid; /// Channel on which we have to connect (if not specified, set -1 in the chan.freq field) struct mac_chan_def chan; /// Connection flags (see @ref mac_connection_flags) u32_l flags; /// Control port Ethertype (in network endianness) u16_l ctrl_port_ethertype; /// Length of the association request IEs u16_l ie_len; /// Listen interval to be used for this connection u16_l listen_interval; /// Flag indicating if the we have to wait for the BC/MC traffic after beacon or not bool_l dont_wait_bcmc; /// Authentication type u8_l auth_type; /// UAPSD queues (bit0: VO, bit1: VI, bit2: BE, bit3: BK) u8_l uapsd_queues; /// VIF index u8_l vif_idx; /// Buffer containing the additional information elements to be put in the /// association request u32_l ie_buf[64]; }; /// Structure containing the parameters of the @ref SM_CONNECT_CFM message. struct sm_connect_cfm { /// Status. If 0, it means that the connection procedure will be performed and that /// a subsequent @ref SM_CONNECT_IND message will be forwarded once the procedure is /// completed u8_l status; }; #define SM_ASSOC_IE_LEN 800 /// Structure containing the parameters of the @ref SM_CONNECT_IND message. struct sm_connect_ind { /// Status code of the connection procedure u16_l status_code; /// BSSID struct mac_addr bssid; /// Flag indicating if the indication refers to an internal roaming or from a host request bool_l roamed; /// Index of the VIF for which the association process is complete u8_l vif_idx; /// Index of the STA entry allocated for the AP u8_l ap_idx; /// Index of the LMAC channel context the connection is attached to u8_l ch_idx; /// Flag indicating if the AP is supporting QoS bool_l qos; /// ACM bits set in the AP WMM parameter element u8_l acm; /// Length of the AssocReq IEs u16_l assoc_req_ie_len; /// Length of the AssocRsp IEs u16_l assoc_rsp_ie_len; /// IE buffer u32_l assoc_ie_buf[SM_ASSOC_IE_LEN/4]; u16_l aid; u8_l band; u16_l center_freq; u8_l width; u32_l center_freq1; u32_l center_freq2; /// EDCA parameters u32_l ac_param[AC_MAX]; }; /// Structure containing the parameters of the @ref SM_DISCONNECT_REQ message. struct sm_disconnect_req { /// Reason of the deauthentication. u16_l reason_code; /// Index of the VIF. u8_l vif_idx; }; /// Structure containing the parameters of SM_ASSOCIATION_IND the message struct sm_association_ind { // MAC ADDR of the STA struct mac_addr me_mac_addr; }; /// Structure containing the parameters of the @ref SM_DISCONNECT_IND message. struct sm_disconnect_ind { /// Reason of the disconnection. u16_l reason_code; /// Index of the VIF. u8_l vif_idx; /// FT over DS is ongoing bool_l ft_over_ds; u8_l reassoc; }; /// Structure containing the parameters of the @ref SM_EXTERNAL_AUTH_REQUIRED_IND struct sm_external_auth_required_ind { /// Index of the VIF. u8_l vif_idx; /// SSID to authenticate to struct mac_ssid ssid; /// BSSID to authenticate to struct mac_addr bssid; /// AKM suite of the respective authentication u32_l akm; }; /// Structure containing the parameters of the @ref SM_EXTERNAL_AUTH_REQUIRED_RSP struct sm_external_auth_required_rsp { /// Index of the VIF. u8_l vif_idx; /// Authentication status u16_l status; }; /////////////////////////////////////////////////////////////////////////////// /////////// For APM messages /////////////////////////////////////////////////////////////////////////////// /// Message API of the APM task enum apm_msg_tag { /// Request to start the AP. APM_START_REQ = LMAC_FIRST_MSG(TASK_APM), /// Confirmation of the AP start. APM_START_CFM, /// Request to stop the AP. APM_STOP_REQ, /// Confirmation of the AP stop. APM_STOP_CFM, /// Request to start CAC APM_START_CAC_REQ, /// Confirmation of the CAC start APM_START_CAC_CFM, /// Request to stop CAC APM_STOP_CAC_REQ, /// Confirmation of the CAC stop APM_STOP_CAC_CFM, APM_SET_BEACON_IE_REQ, APM_SET_BEACON_IE_CFM, /// MAX number of messages APM_MAX, }; /// Structure containing the parameters of the @ref APM_START_REQ message. struct apm_start_req { /// Basic rate set struct mac_rateset basic_rates; /// Control channel on which we have to enable the AP struct mac_chan_def chan; /// Center frequency of the first segment u32_l center_freq1; /// Center frequency of the second segment (only in 80+80 configuration) u32_l center_freq2; /// Width of channel u8_l ch_width; /// Address, in host memory, to the beacon template u32_l bcn_addr; /// Length of the beacon template u16_l bcn_len; /// Offset of the TIM IE in the beacon u16_l tim_oft; /// Beacon interval u16_l bcn_int; /// Flags (@ref mac_connection_flags) u32_l flags; /// Control port Ethertype u16_l ctrl_port_ethertype; /// Length of the TIM IE u8_l tim_len; /// Index of the VIF for which the AP is started u8_l vif_idx; }; struct apm_set_bcn_ie_req { u8_l vif_idx; u16_l bcn_ie_len; u8_l bcn_ie[512]; }; /// Structure containing the parameters of the @ref APM_START_CFM message. struct apm_start_cfm { /// Status of the AP starting procedure u8_l status; /// Index of the VIF for which the AP is started u8_l vif_idx; /// Index of the channel context attached to the VIF u8_l ch_idx; /// Index of the STA used for BC/MC traffic u8_l bcmc_idx; }; /// Structure containing the parameters of the @ref APM_STOP_REQ message. struct apm_stop_req { /// Index of the VIF for which the AP has to be stopped u8_l vif_idx; }; /// Structure containing the parameters of the @ref APM_START_CAC_REQ message. struct apm_start_cac_req { /// Control channel on which we have to start the CAC struct mac_chan_def chan; /// Center frequency of the first segment u32_l center_freq1; /// Center frequency of the second segment (only in 80+80 configuration) u32_l center_freq2; /// Width of channel u8_l ch_width; /// Index of the VIF for which the CAC is started u8_l vif_idx; }; /// Structure containing the parameters of the @ref APM_START_CAC_CFM message. struct apm_start_cac_cfm { /// Status of the CAC starting procedure u8_l status; /// Index of the channel context attached to the VIF for CAC u8_l ch_idx; }; /// Structure containing the parameters of the @ref APM_STOP_CAC_REQ message. struct apm_stop_cac_req { /// Index of the VIF for which the CAC has to be stopped u8_l vif_idx; }; /////////////////////////////////////////////////////////////////////////////// /////////// For MESH messages /////////////////////////////////////////////////////////////////////////////// /// Maximum length of the Mesh ID #define MESH_MESHID_MAX_LEN (32) /// Message API of the MESH task enum mesh_msg_tag { /// Request to start the MP MESH_START_REQ = LMAC_FIRST_MSG(TASK_MESH), /// Confirmation of the MP start. MESH_START_CFM, /// Request to stop the MP. MESH_STOP_REQ, /// Confirmation of the MP stop. MESH_STOP_CFM, // Request to update the MP MESH_UPDATE_REQ, /// Confirmation of the MP update MESH_UPDATE_CFM, /// Request information about a given link MESH_PEER_INFO_REQ, /// Response to the MESH_PEER_INFO_REQ message MESH_PEER_INFO_CFM, /// Request automatic establishment of a path with a given mesh STA MESH_PATH_CREATE_REQ, /// Confirmation to the MESH_PATH_CREATE_REQ message MESH_PATH_CREATE_CFM, /// Request a path update (delete path, modify next hop mesh STA) MESH_PATH_UPDATE_REQ, /// Confirmation to the MESH_PATH_UPDATE_REQ message MESH_PATH_UPDATE_CFM, /// Indication from Host that the indicated Mesh Interface is a proxy for an external STA MESH_PROXY_ADD_REQ, /// Indicate that a connection has been established or lost MESH_PEER_UPDATE_IND, /// Notification that a connection has been established or lost (when MPM handled by userspace) MESH_PEER_UPDATE_NTF = MESH_PEER_UPDATE_IND, /// Indicate that a path is now active or inactive MESH_PATH_UPDATE_IND, /// Indicate that proxy information have been updated MESH_PROXY_UPDATE_IND, /// MAX number of messages MESH_MAX, }; /// Structure containing the parameters of the @ref MESH_START_REQ message. struct mesh_start_req { /// Basic rate set struct mac_rateset basic_rates; /// Control channel on which we have to enable the AP struct mac_chan_def chan; /// Center frequency of the first segment u32_l center_freq1; /// Center frequency of the second segment (only in 80+80 configuration) u32_l center_freq2; /// Width of channel u8_l ch_width; /// DTIM Period u8_l dtim_period; /// Beacon Interval u16_l bcn_int; /// Index of the VIF for which the MP is started u8_l vif_index; /// Length of the Mesh ID u8_l mesh_id_len; /// Mesh ID u8_l mesh_id[MESH_MESHID_MAX_LEN]; /// Address of the IEs to download u32_l ie_addr; /// Length of the provided IEs u8_l ie_len; /// Indicate if Mesh Peering Management (MPM) protocol is handled in userspace bool_l user_mpm; /// Indicate if Mesh Point is using authentication bool_l is_auth; /// Indicate which authentication method is used u8_l auth_id; }; /// Structure containing the parameters of the @ref MESH_START_CFM message. struct mesh_start_cfm { /// Status of the MP starting procedure u8_l status; /// Index of the VIF for which the MP is started u8_l vif_idx; /// Index of the channel context attached to the VIF u8_l ch_idx; /// Index of the STA used for BC/MC traffic u8_l bcmc_idx; }; /// Structure containing the parameters of the @ref MESH_STOP_REQ message. struct mesh_stop_req { /// Index of the VIF for which the MP has to be stopped u8_l vif_idx; }; /// Structure containing the parameters of the @ref MESH_STOP_CFM message. struct mesh_stop_cfm { /// Index of the VIF for which the MP has to be stopped u8_l vif_idx; /// Status u8_l status; }; /// Bit fields for mesh_update_req message's flags value enum mesh_update_flags_bit { /// Root Mode MESH_UPDATE_FLAGS_ROOT_MODE_BIT = 0, /// Gate Mode MESH_UPDATE_FLAGS_GATE_MODE_BIT, /// Mesh Forwarding MESH_UPDATE_FLAGS_MESH_FWD_BIT, /// Local Power Save Mode MESH_UPDATE_FLAGS_LOCAL_PSM_BIT, }; /// Structure containing the parameters of the @ref MESH_UPDATE_REQ message. struct mesh_update_req { /// Flags, indicate fields which have been updated u8_l flags; /// VIF Index u8_l vif_idx; /// Root Mode u8_l root_mode; /// Gate Announcement bool_l gate_announ; /// Mesh Forwarding bool_l mesh_forward; /// Local PS Mode u8_l local_ps_mode; }; /// Structure containing the parameters of the @ref MESH_UPDATE_CFM message. struct mesh_update_cfm { /// Status u8_l status; }; /// Structure containing the parameters of the @ref MESH_PEER_INFO_REQ message. struct mesh_peer_info_req { ///Index of the station allocated for the peer u8_l sta_idx; }; /// Structure containing the parameters of the @ref MESH_PEER_INFO_CFM message. struct mesh_peer_info_cfm { /// Response status u8_l status; /// Index of the station allocated for the peer u8_l sta_idx; /// Local Link ID u16_l local_link_id; /// Peer Link ID u16_l peer_link_id; /// Local PS Mode u8_l local_ps_mode; /// Peer PS Mode u8_l peer_ps_mode; /// Non-peer PS Mode u8_l non_peer_ps_mode; /// Link State u8_l link_state; }; /// Structure containing the parameters of the @ref MESH_PATH_CREATE_REQ message. struct mesh_path_create_req { /// Index of the interface on which path has to be created u8_l vif_idx; /// Indicate if originator MAC Address is provided bool_l has_orig_addr; /// Path Target MAC Address struct mac_addr tgt_mac_addr; /// Originator MAC Address struct mac_addr orig_mac_addr; }; /// Structure containing the parameters of the @ref MESH_PATH_CREATE_CFM message. struct mesh_path_create_cfm { /// Confirmation status u8_l status; /// VIF Index u8_l vif_idx; }; /// Structure containing the parameters of the @ref MESH_PATH_UPDATE_REQ message. struct mesh_path_update_req { /// Indicate if path must be deleted bool_l delete; /// Index of the interface on which path has to be created u8_l vif_idx; /// Path Target MAC Address struct mac_addr tgt_mac_addr; /// Next Hop MAC Address struct mac_addr nhop_mac_addr; }; /// Structure containing the parameters of the @ref MESH_PATH_UPDATE_CFM message. struct mesh_path_update_cfm { /// Confirmation status u8_l status; /// VIF Index u8_l vif_idx; }; /// Structure containing the parameters of the @ref MESH_PROXY_ADD_REQ message. struct mesh_proxy_add_req { /// VIF Index u8_l vif_idx; /// MAC Address of the External STA struct mac_addr ext_sta_addr; }; /// Structure containing the parameters of the @ref MESH_PROXY_UPDATE_IND struct mesh_proxy_update_ind { /// Indicate if proxy information has been added or deleted bool_l delete; /// Indicate if we are a proxy for the external STA bool_l local; /// VIF Index u8_l vif_idx; /// MAC Address of the External STA struct mac_addr ext_sta_addr; /// MAC Address of the proxy (only valid if local is false) struct mac_addr proxy_mac_addr; }; /// Structure containing the parameters of the @ref MESH_PEER_UPDATE_IND message. struct mesh_peer_update_ind { /// Indicate if connection has been established or lost bool_l estab; /// VIF Index u8_l vif_idx; /// STA Index u8_l sta_idx; /// Peer MAC Address struct mac_addr peer_addr; }; /// Structure containing the parameters of the @ref MESH_PEER_UPDATE_NTF message. struct mesh_peer_update_ntf { /// VIF Index u8_l vif_idx; /// STA Index u8_l sta_idx; /// Mesh Link State u8_l state; }; /// Structure containing the parameters of the @ref MESH_PATH_UPDATE_IND message. struct mesh_path_update_ind { /// Indicate if path is deleted or not bool_l delete; /// Indicate if path is towards an external STA (not part of MBSS) bool_l ext_sta; /// VIF Index u8_l vif_idx; /// Path Index u8_l path_idx; /// Target MAC Address struct mac_addr tgt_mac_addr; /// External STA MAC Address (only if ext_sta is true) struct mac_addr ext_sta_mac_addr; /// Next Hop STA Index u8_l nhop_sta_idx; }; /////////////////////////////////////////////////////////////////////////////// /////////// For Debug messages /////////////////////////////////////////////////////////////////////////////// /// Messages related to Debug Task enum dbg_msg_tag { /// Memory read request DBG_MEM_READ_REQ = LMAC_FIRST_MSG(TASK_DBG), /// Memory read confirm DBG_MEM_READ_CFM, /// Memory write request DBG_MEM_WRITE_REQ, /// Memory write confirm DBG_MEM_WRITE_CFM, /// Module filter request DBG_SET_MOD_FILTER_REQ, /// Module filter confirm DBG_SET_MOD_FILTER_CFM, /// Severity filter request DBG_SET_SEV_FILTER_REQ, /// Severity filter confirm DBG_SET_SEV_FILTER_CFM, /// LMAC/MAC HW fatal error indication DBG_ERROR_IND, /// Request to get system statistics DBG_GET_SYS_STAT_REQ, /// COnfirmation of system statistics DBG_GET_SYS_STAT_CFM, /// Memory block write request DBG_MEM_BLOCK_WRITE_REQ, /// Memory block write confirm DBG_MEM_BLOCK_WRITE_CFM, /// Start app request DBG_START_APP_REQ, /// Start app confirm DBG_START_APP_CFM, /// Start npc request DBG_START_NPC_REQ, /// Start npc confirm DBG_START_NPC_CFM, /// Memory mask write request DBG_MEM_MASK_WRITE_REQ, /// Memory mask write confirm DBG_MEM_MASK_WRITE_CFM, DBG_RFTEST_CMD_REQ, DBG_RFTEST_CMD_CFM, DBG_BINDING_REQ, DBG_BINDING_CFM, DBG_BINDING_IND, DBG_CUSTOM_MSG_REQ, DBG_CUSTOM_MSG_CFM, DBG_CUSTOM_MSG_IND, DBG_GPIO_WRITE_REQ, DBG_GPIO_WRITE_CFM, DBG_GPIO_READ_REQ, DBG_GPIO_READ_CFM, DBG_GPIO_INIT_REQ, DBG_GPIO_INIT_CFM, /// Max number of Debug messages DBG_MAX, }; /// Structure containing the parameters of the @ref DBG_MEM_READ_REQ message. struct dbg_mem_read_req { u32_l memaddr; }; /// Structure containing the parameters of the @ref DBG_MEM_READ_CFM message. struct dbg_mem_read_cfm { u32_l memaddr; u32_l memdata; }; /// Structure containing the parameters of the @ref DBG_MEM_WRITE_REQ message. struct dbg_mem_write_req { u32_l memaddr; u32_l memdata; }; /// Structure containing the parameters of the @ref DBG_MEM_WRITE_CFM message. struct dbg_mem_write_cfm { u32_l memaddr; u32_l memdata; }; /// Structure containing the parameters of the @ref DBG_MEM_MASK_WRITE_REQ message. struct dbg_mem_mask_write_req { u32_l memaddr; u32_l memmask; u32_l memdata; }; /// Structure containing the parameters of the @ref DBG_MEM_MASK_WRITE_CFM message. struct dbg_mem_mask_write_cfm { u32_l memaddr; u32_l memdata; }; struct dbg_rftest_cmd_req { u32_l cmd; u32_l argc; u8_l argv[10]; }; struct dbg_rftest_cmd_cfm { u32_l rftest_result[18]; }; struct dbg_gpio_write_req { uint8_t gpio_idx; uint8_t gpio_val; }; struct dbg_gpio_read_req { uint8_t gpio_idx; }; struct dbg_gpio_read_cfm { uint8_t gpio_idx; uint8_t gpio_val; }; struct dbg_gpio_init_req { uint8_t gpio_idx; uint8_t gpio_dir; //1 output, 0 input; uint8_t gpio_val; //for output, 1 high, 0 low; }; #ifdef CONFIG_MCU_MESSAGE /// Structure containing the parameters of the @ref DBG_CUSTOM_MSG_REQ message. struct dbg_custom_msg_req { u32_l cmd; u32_l len; u32_l flags; u32_l buf[1]; }; /// Structure containing the parameters of the @ref DBG_CUSTOM_MSG_CFM message. struct dbg_custom_msg_cfm { u32_l cmd; u32_l len; u32_l status; u32_l buf[1]; }; typedef struct dbg_custom_msg_cfm dbg_custom_msg_ind_t; #endif /// Structure containing the parameters of the @ref DBG_SET_MOD_FILTER_REQ message. struct dbg_set_mod_filter_req { /// Bit field indicating for each module if the traces are enabled or not u32_l mod_filter; }; /// Structure containing the parameters of the @ref DBG_SEV_MOD_FILTER_REQ message. struct dbg_set_sev_filter_req { /// Bit field indicating the severity threshold for the traces u32_l sev_filter; }; /// Structure containing the parameters of the @ref DBG_GET_SYS_STAT_CFM message. struct dbg_get_sys_stat_cfm { /// Time spent in CPU sleep since last reset of the system statistics u32_l cpu_sleep_time; /// Time spent in DOZE since last reset of the system statistics u32_l doze_time; /// Total time spent since last reset of the system statistics u32_l stats_time; }; /// Structure containing the parameters of the @ref DBG_MEM_BLOCK_WRITE_REQ message. struct dbg_mem_block_write_req { u32_l memaddr; u32_l memsize; u32_l memdata[1024 / sizeof(u32_l)]; }; /// Structure containing the parameters of the @ref DBG_MEM_BLOCK_WRITE_CFM message. struct dbg_mem_block_write_cfm { u32_l wstatus; }; /// Structure containing the parameters of the @ref DBG_START_APP_REQ message. struct dbg_start_app_req { u32_l bootaddr; u32_l boottype; }; /// Structure containing the parameters of the @ref DBG_START_APP_CFM message. struct dbg_start_app_cfm { u32_l bootstatus; }; enum { HOST_START_APP_AUTO = 1, HOST_START_APP_CUSTOM, HOST_START_APP_FNCALL = 4, HOST_START_APP_DUMMY = 5, }; /////////////////////////////////////////////////////////////////////////////// /////////// For TDLS messages /////////////////////////////////////////////////////////////////////////////// /// List of messages related to the task. enum tdls_msg_tag { /// TDLS channel Switch Request. TDLS_CHAN_SWITCH_REQ = LMAC_FIRST_MSG(TASK_TDLS), /// TDLS channel switch confirmation. TDLS_CHAN_SWITCH_CFM, /// TDLS channel switch indication. TDLS_CHAN_SWITCH_IND, /// TDLS channel switch to base channel indication. TDLS_CHAN_SWITCH_BASE_IND, /// TDLS cancel channel switch request. TDLS_CANCEL_CHAN_SWITCH_REQ, /// TDLS cancel channel switch confirmation. TDLS_CANCEL_CHAN_SWITCH_CFM, /// TDLS peer power save indication. TDLS_PEER_PS_IND, /// TDLS peer traffic indication request. TDLS_PEER_TRAFFIC_IND_REQ, /// TDLS peer traffic indication confirmation. TDLS_PEER_TRAFFIC_IND_CFM, /// MAX number of messages TDLS_MAX }; /// Structure containing the parameters of the @ref TDLS_CHAN_SWITCH_REQ message struct tdls_chan_switch_req { /// Index of the VIF u8_l vif_index; /// STA Index u8_l sta_idx; /// MAC address of the TDLS station struct mac_addr peer_mac_addr; bool_l initiator; /// Band (2.4GHz or 5GHz) u8_l band; /// Channel type: 20,40,80,160 or 80+80 MHz u8_l type; /// Frequency for Primary 20MHz channel (in MHz) u16_l prim20_freq; /// Frequency for Center of the contiguous channel or center of Primary 80+80 u16_l center1_freq; /// Frequency for Center of the non-contiguous secondary 80+80 u16_l center2_freq; /// TX power (in dBm) s8_l tx_power; /// Operating class u8_l op_class; }; /// Structure containing the parameters of the @ref TDLS_CANCEL_CHAN_SWITCH_REQ message struct tdls_cancel_chan_switch_req { /// Index of the VIF u8_l vif_index; /// STA Index u8_l sta_idx; /// MAC address of the TDLS station struct mac_addr peer_mac_addr; }; /// Structure containing the parameters of the @ref TDLS_CHAN_SWITCH_CFM message struct tdls_chan_switch_cfm { /// Status of the operation u8_l status; }; /// Structure containing the parameters of the @ref TDLS_CANCEL_CHAN_SWITCH_CFM message struct tdls_cancel_chan_switch_cfm { /// Status of the operation u8_l status; }; /// Structure containing the parameters of the @ref TDLS_CHAN_SWITCH_IND message struct tdls_chan_switch_ind { /// VIF Index u8_l vif_index; /// Channel Context Index u8_l chan_ctxt_index; /// Status of the operation u8_l status; }; /// Structure containing the parameters of the @ref TDLS_CHAN_SWITCH_BASE_IND message struct tdls_chan_switch_base_ind { /// VIF Index u8_l vif_index; /// Channel Context index u8_l chan_ctxt_index; }; /// Structure containing the parameters of the @ref TDLS_PEER_PS_IND message struct tdls_peer_ps_ind { /// VIF Index u8_l vif_index; /// STA Index u8_l sta_idx; /// MAC ADDR of the TDLS STA struct mac_addr peer_mac_addr; /// Flag to indicate if the TDLS peer is going to sleep bool ps_on; }; /// Structure containing the parameters of the @ref TDLS_PEER_TRAFFIC_IND_REQ message struct tdls_peer_traffic_ind_req { /// VIF Index u8_l vif_index; /// STA Index u8_l sta_idx; // MAC ADDR of the TDLS STA struct mac_addr peer_mac_addr; /// Dialog token u8_l dialog_token; /// TID of the latest MPDU transmitted over the TDLS direct link to the TDLS STA u8_l last_tid; /// Sequence number of the latest MPDU transmitted over the TDLS direct link /// to the TDLS STA u16_l last_sn; }; /// Structure containing the parameters of the @ref TDLS_PEER_TRAFFIC_IND_CFM message struct tdls_peer_traffic_ind_cfm { /// Status of the operation u8_l status; }; #endif // LMAC_MSG_H_