blob: 1ffe9d41ee8b0deac87a751ee6963d5be67866a4 [file] [log] [blame]
/******************************************************************************
*
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
* Copyright(c) 2018 Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*****************************************************************************/
/****************************************************************************
* File Name : apiGroup_0x5_Datapath.h
*
*
* Description : This file contains all the structures and definitions required
* for Commands, Responses and Notifications in Group 0x5 (Datapath Services and HW configuration)
****************************************************************************/
#ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_MVM_APIGROUPDATAPATH_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_MVM_APIGROUPDATAPATH_H_
#include <fuchsia/hardware/wlan/phyinfo/c/banjo.h>
/* ***************************************************************************
* 0x0F - GRP_DATAPATH_TLC_MNG_CONFIG_CMD
*************************************************************************** */
/**
*****************************************************************************
* @ingroup TlcMngConfig
*
* @title{config the TLC Manager}
* @type{Command}
*
* The purpose is for the driver to configure the TLC engine
* with initial parameters and limitations, which will be used
*
* @return
* @fwImages
* Protocol
*
*****************************************************************************/
typedef enum _TLC_MNG_NSS_E {
TLC_MNG_NSS_1,
TLC_MNG_NSS_2,
TLC_MNG_NSS_MAX,
} TLC_MNG_NSS_E;
typedef enum _TLC_MNG_MODE_E {
TLC_MNG_MODE_CCK = 0,
TLC_MNG_MODE_OFDM_LEGACY = TLC_MNG_MODE_CCK,
TLC_MNG_MODE_LEGACY = TLC_MNG_MODE_CCK,
TLC_MNG_MODE_HT,
TLC_MNG_MODE_VHT,
TLC_MNG_MODE_HE,
TLC_MNG_MODE_INVALID, // keep last
TLC_MNG_MODE_NUM = TLC_MNG_MODE_INVALID,
} TLC_MNG_MODE_E;
// TLC_MNG_CONFIG_FLAGS - set the bit when the feature is enabled
/* STBC supported.
* NOTE: For HT/VHT this bit implies STBC support for all bandwidths. For HE this bit is used to
* imply STBC support for bandwidth <= 80Mhz only (bit 19 of the HE PHY Capabilities IE)
*/
#define TLC_MNG_CONFIG_FLAGS_STBC_MSK BIT(0)
/*
* LDPC supported
*/
#define TLC_MNG_CONFIG_FLAGS_LDPC_MSK BIT(1)
/*
* STBC supported for 160Mhz bandwidth in HE
* (in HE PHY Capabilites IE, bit 63 is set)
*/
#define TLC_MNG_CONFIG_FLAGS_HE_STBC_160MHZ_MSK BIT(2)
/*
* HE Dual Carrier Modulation (DCM) supported for BPSK (MCS 0) SISO
* (in HE PHY Capabilites IE, bits 27-28 are > 0)
*/
#define TLC_MNG_CONFIG_FLAGS_HE_DCM_NSS_1_MSK BIT(3)
/*
* HE Dual Carrier Modulation (DCM) supported for BPSK (MCS 0) MIMO
* (in HE PHY Capabilites IE, bits 27-28 are > 0, and bit 29 is set)
*/
#define TLC_MNG_CONFIG_FLAGS_HE_DCM_NSS_2_MSK BIT(4)
/*
* QCOM APs have a problem receiving frames with 2x LTF @160MHz, even though this is madatory by
* spec.
* Set this bit in order to prevent transmission with 2x LTF for all bandwidths (done this way in
* order to keep the W/A as simple as possible).
* NOTE - since setting this appies for all bandwidths, avoid setting it if the association doesn't
* support 160MHz.
*/
#define TLC_MNG_CONFIG_FLAGS_HE_BLOCK_2X_LTF_MSK BIT(15)
typedef enum _TLC_MNG_CH_WIDTH_E {
TLC_MNG_CH_WIDTH_20MHZ,
TLC_MNG_CH_WIDTH_40MHZ,
TLC_MNG_CH_WIDTH_80MHZ,
TLC_MNG_CH_WIDTH_160MHZ,
TLC_MNG_CH_WIDTH_MAX,
} TLC_MNG_CH_WIDTH_E;
#define TLC_MNG_CHAIN_A_MSK BIT(0)
#define TLC_MNG_CHAIN_B_MSK BIT(1)
#define TLC_AMSDU_NOT_SUPPORTED 0
#define TLC_AMSDU_SUPPORTED 1
typedef struct _TLC_MNG_CONFIG_PARAMS_CMD_API_S_VER_2 {
uint8_t maxChWidth; // one of TLC_MNG_CH_WIDTH_E
uint8_t bestSuppMode; // best mode supported - as defined above in TLC_MNG_MODE_E
uint8_t chainsEnabled; // bitmask of TLC_MNG_CHAIN_[A/B]_MSK
uint8_t amsduSupported; // TX AMSDU transmission is supported
// Use TLC_AMSDU_[NOT_]SUPPORTED
uint16_t configFlags; // bitmask of TLC_MNG_CONFIG_FLAGS_*
uint16_t nonHt; // bitmap of supported non-HT CCK and OFDM rates
/* bit | rate
-------|--------
0 | R_1M CCK
1 | R_2M CCK
2 | R_5_5M CCK
3 | R_11M CCK
4 | R_6M OFDM
5 | R_9M OFDM
6 | R_12M OFDM
7 | R_18M OFDM
8 | R_24M OFDM
9 | R_36M OFDM
10 | R_48M OFDM
11 | R_54M OFDM
*/
uint16_t mcs[TLC_MNG_NSS_MAX][2]; // supported HT/VHT/HE rates per nss. [0] for 80mhz width
// and lower, [1] for 160mhz.
// This is done in order to conform with HE capabilites.
uint16_t maxMpduLen; // Max length of MPDU, in bytes.
// Used to calculate allowed A-MSDU sizes.
uint8_t sgiChWidthSupport; // bitmap of SGI support per channel width.
// use 1 << BIT(TLC_MNG_CH_WIDTH_*) to indicate sgi support
// for that channel width.
// unused for HE.
uint8_t reserved1[1];
wlan_info_band_t band;
} TLC_MNG_CONFIG_PARAMS_CMD_API_S_VER_2;
#endif // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_MVM_APIGROUPDATAPATH_H_