drivers_framework/include/wifi/wifi_mac80211_ops.h
RichardHuang9527 7cb9d3a197 feat: Add new hdf wlan hal interfaces about power model.
Signed-off-by: RichardHuang9527 <huangyiping8@huawei.com>
2022-05-12 07:05:29 -07:00

836 lines
30 KiB
C

/*
* Copyright (c) 2020-2022 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
/**
* @addtogroup WLAN
* @{
*
* @brief Provides cross-OS migration, component adaptation, and modular assembly and compilation.
*
* Based on the unified APIs provided by the WLAN module, developers of the Hardware Driver Interface
* (HDI) are capable of creating, disabling, scanning for, and connecting to WLAN hotspots, managing WLAN chips,
* network devices, and power, and applying for, releasing, and moving network data buffers.
*
* @since 1.0
* @version 1.0
*/
/**
* @file wifi_mac80211_ops.h
*
* @brief Declares Media Access Control (MAC) APIs and functions related to control flows.
*
* This file declares APIs for scanning, connection, disconnection, and mode conversion, as well as data
* structures of the parameters of these APIs.
*
* @since 1.0
* @version 1.0
*/
#ifndef WIFI_MAC80211_OPS_H
#define WIFI_MAC80211_OPS_H
#include "hdf_wifi_cmd.h"
#include "net_device.h"
/**
* @brief Indicates the length of the MAC address of the device.
*
* The value is <b>6</b>.
*
* @since 1.0
* @version 1.0
*/
#define IEEE80211_MAC_ADDR_LEN 6
/**
* @brief Indicates the maximum length of the SSID of the device.
*
* The value is <b>32</b>.
*
* @since 1.0
* @version 1.0
*/
#define IEEE80211_MAX_SSID_LEN 32
/**
* @brief Indicates the length of a reserved field for the WLAN connection parameters.
*
* The value is <b>3</b>.
*
* @since 1.0
* @version 1.0
*/
#define WIFI_CONNECT_PARM_RESV_SIZE 3
/**
* @brief Indicates that the frequency is not specified.
*
* The value is <b>0</b>.
*
* @since 1.0
* @version 1.0
*/
#define WLAN_FREQ_NOT_SPECFIED 0
/**
* @brief Indicates the maximum length of the hotspot SSID array.
*
* The value is <b>32</b>.
*
* @since 1.0
* @version 1.0
*/
#define OAL_IEEE80211_MAX_SSID_LEN 32
/**
* @brief Indicates the maximum number of channels to scan for.
*
* The value is <b>14</b>.
*
* @since 1.0
* @version 1.0
*/
#define MAX_SCAN_CHANNELS 14
/**
* @brief Indicates a reserved field for a scan request.
*
* The value is <b>2</b>.
*
* @since 1.0
* @version 1.0
*/
#define SCAN_REQUEST_RESV_SIZE 2
/**
* @brief Indicates the maximum number of frequency filters.
*
* The value is <b>200</b>.
*
* @since 1.0
* @version 1.0
*/
#define MAX_FREQ_FTILTER_COUNT 200
/**
* @brief Indicates the maximum number of cipher suites.
*
* The value is <b>5</b>.
*
* @since 1.0
* @version 1.0
*/
#define NL80211_MAX_NR_CIPHER_SUITES 5
/**
* @brief Indicates the maximum number of AKM suites.
*
* The value is <b>2</b>.
*
* @since 1.0
* @version 1.0
*/
#define NL80211_MAX_NR_AKM_SUITES 2
/**
* @brief Enumerates frequency bands.
*
* @since 1.0
* @version 1.0
*/
enum Ieee80211Band {
IEEE80211_BAND_2GHZ = 0, /**< 2.4 GHz */
IEEE80211_BAND_5GHZ, /**< 5 GHz */
IEEE80211_NUM_BANDS /**< Number of frequency bands */
};
/**
* @brief Enumerates channel widths.
*
* @since 1.0
* @version 1.0
*/
enum Ieee80211ChannelWidth {
WLAN_CHANNEL_WIDTH_10 = BIT(0), /**< 10 MHz */
WLAN_CHANNEL_WIDTH_20 = BIT(1), /**< 20 MHz */
WLAN_CHANNEL_WIDTH_40P = BIT(2), /**< 40 MHz (two 20 MHz channels, with the primary channel
* having a higher frequency
*/
WLAN_CHANNEL_WIDTH_40M = BIT(3), /**< 40 MHz (two 20 MHz channels, with the primary channel
* having a lower frequency
*/
WLAN_CHANNEL_WIDTH_80 = BIT(4), /**< 80 MHz */
WLAN_CHANNEL_WIDTH_160 = BIT(5), /**< 160 MHz */
};
/**
* @brief Enumerates WLAN modes.
*
* @since 1.0
* @version 1.0
*/
enum WlanWorkMode {
WLAN_WORKMODE_STA = 2, /**< STA mode */
WLAN_WORKMODE_AP = 3, /**< AP mode */
WLAN_WORKMODE_AP_VLAN,
WLAN_WORKMODE_WDS,
WLAN_WORKMODE_MONITOR,
WLAN_WORKMODE_MESH_POINT,
WLAN_WORKMODE_P2P_CLIENT,
WLAN_WORKMODE_P2P_GO,
WLAN_WORKMODE_P2P_DEVICE,
};
/**
* @brief Describes a key.
*
* @since 1.0
* @version 1.0
*/
struct KeyParams {
uint8_t *key; /**< Key content */
uint8_t *seq; /**< Content of a Temporal Key Integrity Protocol (TKIP) or Counter Mode Cipher Block Chaining
* Message Authentication Code Protocol (CCMP) key
*/
int32_t keyLen; /**< Key length */
int32_t seqLen; /**< Length of a TKIP or CCMP key */
uint32_t cipher; /**< Cipher suite */
};
#define UINT32_BIT(BIT) (((uint32_t)1) << (BIT))
#define WLAN_CHANNEL_FLAG_DFS_UNKNOWN 0x00000000
#define WLAN_CHANNEL_FLAG_DFS_MASK 0x00000300
/**
* @brief Enumerates WLAN channel capability flags.
*
* @since 1.0
* @version 1.0
*/
enum WlanChannelCapabilityFlags {
WLAN_CHANNEL_FLAG_DISABLED = UINT32_BIT(0), /**< Channel disabled */
WLAN_CHANNEL_FLAG_NO_IR = UINT32_BIT(1), /**< Infrared light (IR) not supported */
WLAN_CHANNEL_FLAG_RADAR = UINT32_BIT(3), /**< Radar supported */
WLAN_CHANNEL_FLAG_HT40PLUS = UINT32_BIT(4), /**< A 40 MHz channel that consists of two 20 MHz channels,
* with the primary channel having a higher frequency
*/
WLAN_CHANNEL_FLAG_HT40MINUS = UINT32_BIT(5), /**< A 40 MHz channel that consists of two 20 MHz channels,
* with the primary channel having a lower frequency
*/
WLAN_CHANNEL_FLAG_HT40 = UINT32_BIT(6), /**< 40 MHz channel */
WLAN_CHANNEL_FLAG_SURVEY_LIST_INITIALIZED = UINT32_BIT(7), /**< Survey list initialized */
WLAN_CHANNEL_FLAG_DFS_USABLE = UINT32_BIT(8), /**< Dynamic frequency selection (DFS) supported */
WLAN_CHANNEL_FLAG_DFS_UNAVAILABLE = UINT32_BIT(9), /**< DFS disabled */
WLAN_CHANNEL_FLAG_DFS_AVAILABLE = WLAN_CHANNEL_FLAG_DFS_USABLE | WLAN_CHANNEL_FLAG_DFS_UNAVAILABLE,
WLAN_CHANNEL_FLAG_VHT_10_70 =
UINT32_BIT(11), /**< A 80 MHz channel: Frequency
* band = Channel's center frequency - 10 MHz to the channel's center frequency + 70 MHz
*/
WLAN_CHANNEL_FLAG_VHT_30_50 =
UINT32_BIT(12), /**< A 80 MHz channel: Frequency
* band = Channel's center frequency - 30 MHz to the channel's center frequency + 50 MHz
*/
WLAN_CHANNEL_FLAG_VHT_50_30 =
UINT32_BIT(13), /**< A 80 MHz channel: Frequency
* band = Channel's center frequency - 50 MHz to the channel's center frequency + 30 MHz
*/
WLAN_CHANNEL_FLAG_VHT_70_10 =
UINT32_BIT(14), /**< A 80 MHz channel: Frequency
* band = Channel's center frequency - 70 MHz to the channel's center frequency + 10 MHz
*/
WLAN_CHANNEL_FLAG_INDOOR_ONLY = UINT32_BIT(16), /**< Used only indoors */
WLAN_CHANNEL_FLAG_GO_CONCURRENT = UINT32_BIT(17), /**< Go Concurrent supported */
WLAN_CHANNEL_FLAG_VHT_10_150 = UINT32_BIT(20), /**< A 160 MHz channel: Frequency band = Channel's center
* frequency - 10 MHz to the channel's center frequency + 150 MHz
*/
WLAN_CHANNEL_FLAG_VHT_30_130 = UINT32_BIT(21), /**< A 160 MHz channel: Frequency band = Channel's center
* frequency - 30 MHz to the channel's center frequency + 130 MHz
*/
WLAN_CHANNEL_FLAG_VHT_50_110 = UINT32_BIT(22), /**< A 160 MHz channel: Frequency band = Channel's center
* frequency - 50 MHz to the channel's center frequency + 110 MHz
*/
WLAN_CHANNEL_FLAG_VHT_70_90 = UINT32_BIT(23), /**< A 160 MHz channel: Frequency band = Channel's center
frequency - 70 MHz to the channel's center frequency + 90 MHz
*/
WLAN_CHANNEL_FLAG_VHT_90_70 = UINT32_BIT(24), /**< A 160 MHz channel: Frequency band = Channel's center
* frequency - 90 MHz to the channel's center frequency + 70 MHz
*/
WLAN_CHANNEL_FLAG_VHT_110_50 = UINT32_BIT(25), /**< A 160 MHz channel: Frequency band = Channel's center
* frequency - 110 MHz to the channel's center frequency + 50 MHz
*/
WLAN_CHANNEL_FLAG_VHT_130_30 = UINT32_BIT(26), /**< A 160 MHz channel: Frequency band = Channel's center
* frequency - 130 MHz to the channel's center frequency + 30 MHz
*/
WLAN_CHANNEL_FLAG_VHT_150_10 = UINT32_BIT(27), /**< A 160 MHz channel: Frequency band = Channel's center
* frequency - 150 MHz to the channel's center frequency + 10 MHz
*/
};
/**
* @brief Define wifi power mode.
*
* @since 1.0
* @version 1.0
*/
#define WIFI_POWER_MODE_SLEEPING 0
#define WIFI_POWER_MODE_GENERAL 1
#define WIFI_POWER_MODE_THROUGH_WALL 2
#define WIFI_POWER_MODE_NUM 3
/**
* @brief Describes a communication channel.
*
* @since 1.0
* @version 1.0
*/
struct WlanChannel {
uint8_t channelId; /**< Channel ID */
uint32_t centerFreq; /**< Center frequency */
uint32_t flags; /**< Flags for the channel, as enumerated in <b>WlanChannelCapabilityFlags</b> */
};
/**
* @brief Describes a band.
*
* @since 1.0
* @version 1.0
*/
struct WlanBand {
uint16_t channelCount; /**< Number of channels */
struct WlanChannel channels[0]; /**< WLAN channel structures */
};
/**
* @brief Describes an SSID.
*
* @since 1.0
* @version 1.0
*/
struct WlanSSID {
uint8_t ssid[IEEE80211_MAX_SSID_LEN]; /**< SSID array */
uint8_t ssidLen; /**< SSID length */
};
/**
* @brief Describes scan request parameters.
*
* @since 1.0
* @version 1.0
*/
struct WlanScanRequest {
uint8_t ssidCount; /**< Number of SSIDs */
uint8_t freqsCount; /**< Number of frequencies */
uint8_t *bssid; /**< BSSID to scan for */
struct WlanSSID *ssids; /**< SSIDs to scan for */
uint32_t *freqs; /**< An array of frequencies */
uint32_t extraIEsLen; /**< Length of an extended information element (IE) */
uint8_t *extraIEs; /**< Extended IEs */
};
/**
* @brief Describes cryptography settings.
*
* @since 1.0
* @version 1.0
*/
struct CryptoSettings {
uint32_t wpaVersions; /**< WPA version */
uint32_t cipherGroup; /**< Cipher group */
int32_t n_ciphersPairwise; /**< Number of unicast ciphers supported by the AP */
uint32_t ciphersPairwise[NL80211_MAX_NR_CIPHER_SUITES]; /**< Unicast cipher suites. The maximum number of
* unicast cipher suites is specified by
* {@link NL80211_MAX_NR_CIPHER_SUITES}.
*/
int32_t n_akmSuites; /**< Number of authentication and key management (AKM) suites */
uint32_t akmSuites[NL80211_MAX_NR_AKM_SUITES]; /**< AKM suites. The maximum number of AKM suites is specified
* by {@link NL80211_MAX_NR_AKM_SUITES}.
*/
uint16_t controlPortEthertype; /**< Data can be transmitted over an unauthenticated port. */
int8_t controlPort; /**< Whether the user space control port is authorized. The value <b>true</b>
* indicates that the user space control port is unauthorized.
*/
int8_t controlPortNoEncrypt; /**< Whether to encrypt frames transmitted over the control port.
* The value <b>1</b> indicates that the frames are not encrypted.
*/
};
/**
* @brief Describes parameters for a connection request.
*
* @since 1.0
* @version 1.0
*/
typedef struct WlanConnectParams {
uint32_t centerFreq; /**< Connection channel. If this parameter is not specified, the connection channel
* is automatically obtained from the scan result.
*/
uint8_t *bssid; /**< AP BSSID. If this parameter is not specified, the AP BSSID is automatically
* obtained from the scan result.
*/
uint8_t *ssid; /**< SSID */
uint8_t *ie; /**< IE information required for the connection */
uint32_t ssidLen; /**< SSID length */
uint32_t ieLen; /**< IE length */
struct CryptoSettings crypto; /**< Cryptography information */
const uint8_t *key; /**< Wired Equivalent Privacy (WEP) key used for Shared Key
* Authentication (SKA)
*/
uint8_t authType; /**< Authorization type */
uint8_t privacy; /**< Whether to use a privacy-enabled AP */
uint8_t keyLen; /**< Key length */
uint8_t keyIdx; /**< Index of the WEP key used for SKA */
uint8_t mfp; /**< Whether to enable Management Frame Protection (MFP) */
uint8_t aucResv[WIFI_CONNECT_PARM_RESV_SIZE]; /**< Reserved field */
} WlanConnectParams;
/**
* @brief Describes parameters for canceling a connection.
*
* @since 1.0
* @version 1.0
*/
struct StationDelParameters {
const uint8_t *mac; /**< MAC address of the station with which the connection is to be canceled */
uint8_t subtype; /**< Cancellation type */
uint16_t reasonCode; /**< Reason code for the cancellation */
};
/**
* @brief Describes MAC configuration parameters.
*
* @since 1.0
* @version 1.0
*/
typedef struct MacConfigParam {
uint8_t mac[IEEE80211_MAC_ADDR_LEN]; /**< MAC address. For details about its length, see {@link
* IEEE80211_MAC_ADDR_LEN}.
*/
uint8_t p2pMode; /**< Whether the peer-to-peer (P2P) mode is used. */
uint8_t resv; /**< Reserved field */
} Mac80211SetMacParam;
/**
* @brief Describes disconnection parameters.
*
* @since 1.0
* @version 1.0
*/
typedef struct {
uint8_t macAddr[IEEE80211_MAC_ADDR_LEN]; /**< Device MAC address */
uint16_t reasonCode; /**< Disconnection reason code */
} Mac80211DisconnectParam;
/**
* @brief Describes the beacon configuration.
*
* @since 1.0
* @version 1.0
*/
struct WlanBeaconConf {
uint32_t interval; /**< Beacon interval */
uint32_t DTIMPeriod; /**< Delivery Traffic Indication Message (DTIM) interval for sending beacons */
uint8_t *headIEs; /**< One or more IEs before the TIM IE */
size_t headIEsLength; /**< Length of the IEs before the TIM IE */
uint8_t *tailIEs; /**< One or more IEs after the TIM IE */
size_t tailIEsLength; /**< Length of the IEs after the TIM IE */
bool hiddenSSID; /**< Whether to hide the SSID */
};
/**
* @brief Describes the AP configuration.
*
* @since 1.0
* @version 1.0
*/
struct WlanAPConf {
struct WlanSSID ssidConf; /**< SSID configuration */
uint16_t channel; /**< Channel */
uint16_t centerFreq1; /**< Center frequency 1 */
uint16_t centerFreq2; /**< Center frequency 2 */
uint8_t band; /**< Band, as enumerated in <b>Ieee80211Band</b> */
uint8_t width; /**< Channel width, as enumerated in <b>Ieee80211ChannelWidth</b> */
};
/**
* @brief Describes the hardware capability.
*
* @since 1.0
* @version 1.0
*/
struct WlanHwCapability {
void (*Release)(struct WlanHwCapability *self); /**< Function for releasing the hardware capability */
struct WlanBand *bands[IEEE80211_NUM_BANDS]; /**< Frequency bands */
uint16_t htCapability; /**< High-throughput (HT) capability */
uint16_t supportedRateCount; /**< Number of supported rates */
uint16_t *supportedRates; /**< An array of supported rates in 100 kbit/s */
};
/**
* @brief Describes the MAC-layer APIs for basic operations that need to be implemented by the driver.
*
* @since 1.0
* @version 1.0
*/
struct HdfMac80211BaseOps {
/**
* @brief Sets the WLAN mode.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param mode Indicates the WLAN mode to set.
*
* @return Returns <b>0</b> if the WLAN mode is set; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*SetMode)(NetDevice *netDev, enum WlanWorkMode mode);
/**
* @brief Adds a key with specified parameters.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param keyIndex Indicates the key index.
* @param pairwise Specifies whether the key is a key pair.
* @param macAddr Indicates the pointer to the MAC address.
* @param params Indicates the pointer to the key parameters.
*
* @return Returns <b>0</b> if the key is added; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*AddKey)(
struct NetDevice *netDev, uint8_t keyIndex, bool pairwise, const uint8_t *macAddr, struct KeyParams *params);
/**
* @brief Deletes a key with a specified MAC address.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param keyIndex Indicates the key index.
* @param pairwise Specifies whether the key is a key pair.
* @param macAddr Indicates the pointer to the MAC address.
*
* @return Returns <b>0</b> if the key is deleted; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*DelKey)(struct NetDevice *netDev, uint8_t keyIndex, bool pairwise, const uint8_t *macAddr);
/**
* @brief Sets the default key.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param keyIndex Indicates the key index.
* @param unicast Indicates the unicast.
* @param multicas Indicates the multicast.
*
* @return Returns <b>0</b> if the default key is set; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*SetDefaultKey)(struct NetDevice *netDev, uint8_t keyIndex, bool unicast, bool multicas);
/**
* @brief Obtains the device MAC address.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param type Indicates the MAC address type of the device.
* @param mac Indicates the pointer to the MAC address.
* @param len Indicates the length of the MAC address.
*
* @return Returns <b>0</b> if the MAC address is obtained; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*GetDeviceMacAddr)(NetDevice *netDev, int32_t type, uint8_t *mac, uint8_t len);
/**
* @brief Sets the MAC address.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param mac Indicates the pointer to the MAC address.
* @param len Indicates the length of the MAC address.
*
* @return Returns <b>0</b> if the MAC address is set; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*SetMacAddr)(NetDevice *netDev, uint8_t *mac, uint8_t len);
/**
* @brief Sets the transmit power.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param power Indicates the transmit power to set.
*
* @return Returns <b>0</b> if the transmit power is set; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*SetTxPower)(NetDevice *netDev, int32_t power);
/**
* @brief Obtains the frequencies supported by the 2.4 GHz or 5 GHz band.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param band Indicates the frequency band, either 2.4 GHz or 5 GHz.
* @param freqs Indicates the pointer to the supported frequencies.
* @param num Indicates the pointer to the number of supported frequencies.
*
* @return Returns <b>0</b> if the supported frequencies are obtained; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*GetValidFreqsWithBand)(NetDevice *netDev, int32_t band, int32_t *freqs, uint32_t *num);
/**
* @brief Obtains the hardware capability supported by the device.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param capability Indicates the double pointer to the hardware capability.
*
* @return Returns <b>0</b> if the hardware capability is obtained; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*GetHwCapability)(NetDevice *netDev, struct WlanHwCapability **capability);
int32_t (*SendAction)(struct NetDevice *netDev, WifiActionData *actionData);
int32_t (*GetIftype)(struct NetDevice *netDev, uint8_t *iftype);
/**
* @brief Obtains the power mode which is being used.
*
* @param ifName Indicates the pointer to the network interface name.
* @param mode Indicates the pointer to the power mode.
*
* @return Returns <b>0</b> if get infos successful; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*GetPowerMode)(const char *ifName, uint8_t *mode);
/**
* @brief Set the power mode.
*
* @param ifName Indicates the pointer to the network interface name.
* @param mode The value set to power mode.
*
* @return Returns <b>0</b> if get infos successful; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*SetPowerMode)(const char *ifName, uint8_t mode);
};
/**
* @brief Describes the MAC-layer APIs for station operations that need to be implemented by the driver.
*
* @since 1.0
* @version 1.0
*/
struct HdfMac80211STAOps {
/**
* @brief Starts a connection based on the specified parameters.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param param Indicates the pointer to the connection parameters.
*
* @return Returns <b>0</b> if the connection is started; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*Connect)(NetDevice *netDev, WlanConnectParams *param);
/**
* @brief Cancels a connection.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param reasonCode Indicates the reason code for connection cancellation.
*
* @return Returns <b>0</b> if the connection is canceled; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*Disconnect)(NetDevice *netDev, uint16_t reasonCode);
/**
* @brief Starts a scan based on the specified parameters.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param param Indicates the pointer to the scan parameters.
*
* @return Returns <b>0</b> if the scan is started; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*StartScan)(NetDevice *netDev, struct WlanScanRequest *param);
/**
* @brief Stops a scan.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
*
* @return Returns <b>0</b> if the scan is stopped; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*AbortScan)(NetDevice *netDev);
/**
* @brief Sets scanning for a single MAC address.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param mac Indicates the pointer to the MAC address.
* @param len Indicates the length of the MAC address.
*
* @return Returns <b>0</b> if the setting is successful; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*SetScanningMacAddress)(NetDevice *netDev, unsigned char *mac, uint32_t len);
};
/**
* @brief Describes the MAC-layer APIs for AP operations that need to be implemented by the driver.
*
* @since 1.0
*/
struct HdfMac80211APOps {
/**
* @brief Sets an AP.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param apConf Indicates the pointer to the AP configuration.
*
* @return Returns <b>0</b> if the AP is set; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*ConfigAp)(NetDevice *netDev, struct WlanAPConf *apConf);
/**
* @brief Starts an AP.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
*
* @return Returns <b>0</b> if the AP is started; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*StartAp)(NetDevice *netDev);
/**
* @brief Stops an AP.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
*
* @return Returns <b>0</b> if the AP is stopped; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*StopAp)(NetDevice *netDev);
/**
* @brief Sets a beacon.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param beaconConf Indicates the pointer to the beacon configuration.
*
* @return Returns <b>0</b> if the beacon is set; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*ConfigBeacon)(NetDevice *netDev, struct WlanBeaconConf *beaconConf);
/**
* @brief Deletes a station with a specified MAC address.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param macAddr Indicates the pointer to the MAC address.
*
* @return Returns <b>0</b> if the station is deleted; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*DelStation)(NetDevice *netDev, const uint8_t *macAddr);
/**
* @brief Sets the country/region code.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param code Indicates the pointer to the country/region code.
* @param len Indicates the length of the country/region code.
*
* @return Returns <b>0</b> if the country/region code is set; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*SetCountryCode)(NetDevice *netDev, const char *code, uint32_t len);
/**
* @brief Obtains the number of associated stations.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param num Indicates the pointer to the number of associated stations.
*
* @return Returns <b>0</b> if the number of associated stations is obtained; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*GetAssociatedStasCount)(NetDevice *netDev, uint32_t *num);
/**
* @brief Obtains information about the associated stations.
*
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
* @param staInfo Indicates the pointer to the information about the associated stations.
* @param num Indicates the number of associated stations.
*
* @return Returns <b>0</b> if the information is obtained; returns a non-zero value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*GetAssociatedStasInfo)(NetDevice *netDev, WifiStaInfo *staInfo, uint32_t num);
};
struct HdfMac80211P2POps {
int32_t (*RemainOnChannel)(NetDevice *netDev, WifiOnChannel *onChannel);
int32_t (*CancelRemainOnChannel)(NetDevice *netDev);
int32_t (*ProbeReqReport)(NetDevice *netDev, int32_t report);
int32_t (*AddIf)(NetDevice *netDev, WifiIfAdd *ifAdd);
int32_t (*RemoveIf)(NetDevice *netDev, WifiIfRemove *ifRemove);
int32_t (*SetApWpsP2pIe)(NetDevice *netDev, WifiAppIe *appIe);
int32_t (*GetDriverFlag)(struct NetDevice *netDev, WifiGetDrvFlags **params);
};
#endif // WIFI_MAC80211_OPS_H
/** @} */