/*
* Copyright (c) 2020-2021 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_module.h
*
* @brief Provides features of the WLAN module and functions to create and delete modules.
*
* The {@link WifiModule} object is a core abstraction of the WLAN driver. It contains a module that communicates
* with user-level processes and also contains features.
*
* @since 1.0
* @version 1.0
*/
#ifndef HDFLITE_WIFI_MODULE_H
#define HDFLITE_WIFI_MODULE_H
#include "wifi_inc.h"
#include "wifi_module_config.h"
#include "net_device.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Defines a WLAN feature.
*
* @since 1.0
* @version 1.0
*/
struct WifiFeature {
char name[MAX_WIFI_COMPONENT_NAME_LEN]; /**< Feature name, which contains a maximum of 10 characters */
/**
* @brief Initializes a feature.
*
* @param feature Indicates the pointer to the feature.
*
* @return Returns 0 if the feature is initialized; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*init)(struct WifiFeature *feature);
/**
* @brief Deinitializes a feature.
*
* @param feature Indicates the pointer to the feature.
*
* @return Returns 0 if the feature is deinitialized; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*deInit)(struct WifiFeature *feature);
};
/**
* @brief Defines the WLAN feature list.
*
* @since 1.0
* @version 1.0
*/
struct WifiFeatureList {
struct WifiFeature *fe[HDF_WIFI_FEATURE_NUM]; /**< An array of WLAN features */
};
/**
* @brief Defines WLAN module APIs.
*
* The APIs can be used to obtain, initialize, update, and perform other operations on a WLAN module.
*
* @since 1.0
* @version 1.0
*/
struct WifiModuleIface {
/**
* @brief Deinitializes a WLAN module.
*
* @param module Indicates the pointer to the WLAN module.
*
* @return Returns 0 if the WLAN module is deinitialized; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*deInit)(struct WifiModule *module);
/**
* @brief Adds a feature.
*
* @param module Indicates the pointer to the WLAN module.
* @param featureType Indicates the feature type.
* @param feature Indicates the pointer to the feature.
*
* @return Returns 0 if the feature is added; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*addFeature)(struct WifiModule *module, uint16_t featureType, struct WifiFeature *feature);
/**
* @brief Deletes a feature.
*
* @param module Indicates the pointer to the WLAN module.
* @param featureType Indicates the feature type.
*
* @return Returns 0 if the feature is deleted; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*delFeature)(struct WifiModule *module, uint16_t featureType);
};
/**
* @brief Defines the WLAN module.
*
* The structure contains private data, APIs, module configurations, a module that communicates with user-level
* processes, and WLAN features.
*
* @since 1.0
* @version 1.0
*/
struct WifiModule {
void *modulePrivate; /**< Private data */
struct WifiModuleIface iface; /**< APIs */
struct WifiModuleConfig moduleConfig; /**< Module configurations */
struct WifiFeatureList feList; /**< WLAN features */
};
/**
* @brief Defines a WLAN chip driver.
*
* @since 1.0
* @version 1.0
*/
struct HdfChipDriver {
uint16_t type; /**< Chip type */
char name[MAX_WIFI_COMPONENT_NAME_LEN]; /**< Chip name */
struct HdfMac80211BaseOps *ops; /**< MAC address for the basic feature */
struct HdfMac80211STAOps *staOps; /**< MAC address for the STA feature */
struct HdfMac80211APOps *apOps; /**< MAC address for the AP feature */
struct HdfMac80211P2POps *p2pOps; /**< MAC address for the P2Pfeature */
void *priv; /**< Private data of the chip driver */
/**
* @brief Initializes a chip driver.
*
* @param chipDriver Indicates the pointer to the chip driver.
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
*
* @return Returns 0 if the chip is initialized; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*init)(struct HdfChipDriver *chipDriver, NetDevice *netDev);
/**
* @brief Deinitializes a chip driver.
*
* @param chipDriver Indicates the pointer to the chip driver.
* @param netDev Indicates the pointer to the network device structure obtained during initialization.
*
* @return Returns 0 if the chip is deinitialized; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int32_t (*deinit)(struct HdfChipDriver *chipDriver, NetDevice *netDev);
};
/**
* @brief Initializes a WifiModule object.
*
* @param module Indicates the pointer to the WifiModule object to initialize.
* @param config Indicates the pointer to the configuration generated by the HDF Configuration Source (HCS).
*
* @return Returns 0 if the WifiModule object is initialized; returns a negative value otherwise.
*
* @since 1.0
* @version 1.0
*/
int16_t InitWifiModule(struct WifiModule *module, const struct HdfConfigWlanModuleConfig *config);
#define RETURN_IF_CHIPOPS_NOT_IMPLEMENT(chipOps, opsName) \
do { \
if ((chipOps) == NULL || (chipOps)->opsName == NULL) { \
HDF_LOGE("macOps" #opsName "not implement"); \
return HDF_ERR_INVALID_OBJECT; \
} \
} while (0)
#ifdef __cplusplus
}
#endif
#endif // HDFLITE_WIFI_MODULE_H
/** @} */