blob: dff97976fda7303bf08ee310c6a1ebf75cfbbd01 [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2020, 2021, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**************************************************************************
*/
/**
* @file nss_wifi_mac_db_if.h
* NSS-to-HLOS interface definitions.
*/
#ifndef __NSS_WIFI_MAC_DB_H
#define __NSS_WIFI_MAC_DB_H
#define NSS_WIFI_MAC_DB_ENTRY_IF_LOCAL 0x1
/**
* @addtogroup nss_wifi_mac_db_if_subsystem
* @{
*/
/*
* MAX Wi-Fi MAC database entries sent in group
* is chosen considering the entry size and
* maximum entries a smallest buffer could accomodate.
*/
#define NSS_WIFI_MAC_DB_GROUP_ENTRIES_MAX 48
/**
* nss_wifi_mac_db_msg_types
* Wi-Fi MAC database messages.
*/
enum nss_wifi_mac_db_msg_types {
NSS_WIFI_MAC_DB_INIT_MSG, /**< Wi-Fi MAC database initialization message. */
NSS_WIFI_MAC_DB_ADD_ENTRY_MSG, /**< Wi-Fi MAC database add entry message. */
NSS_WIFI_MAC_DB_DEL_ENTRY_MSG, /**< Wi-Fi MAC database delete entry message. */
NSS_WIFI_MAC_DB_UPDATE_ENTRY_MSG, /**< Wi-Fi MAC database update entry message. */
NSS_WIFI_MAC_DB_DEINIT_MSG, /**< Wi-Fi MAC database deinitialization message. */
NSS_WIFI_MAC_DB_GROUP_ENTRIES_ADD_MSG, /**< Wi-Fi MAC database group entries add message. */
NSS_WIFI_MAC_DB_ENTRY_ACTIVITY_MSG, /**< Wi-Fi MAC database entry activity message. */
NSS_WIFI_MAC_DB_CREATE_ENTRY_MSG, /**< Wi-Fi MAC database entry create message. */
NSS_WIFI_MAC_DB_MAX_MSG
};
/**
* nss_wifi_mac_db_iftype
* Wi-Fi MAC database interface type.
*/
enum nss_wifi_mac_db_iftype {
NSS_WIFI_MAC_DB_ENTRY_IFTYPE_NONE,
NSS_WIFI_MAC_DB_ENTRY_IFTYPE_VAP, /**< Wi-Fi MAC database VAP entry interface. */
NSS_WIFI_MAC_DB_ENTRY_IFTYPE_NON_VAP, /**< Wi-Fi MAC database non-VAP entry interface. */
NSS_WIFI_MAC_DB_ENTRY_IFTYPE_MAX /**< Wi-Fi MAC database maximum interface. */
};
/**
* nss_wifi_mac_db_if_opmode
* Wi-Fi MAC database interface operation mode.
*/
enum nss_wifi_mac_db_if_opmode {
NSS_WIFI_MAC_DB_ENTRY_IF_OPMODE_NONE, /**< No entry database interface operation mode. */
NSS_WIFI_MAC_DB_ENTRY_IF_OPMODE_ETH, /**< Ethernet entry database interface operation mode. */
NSS_WIFI_MAC_DB_ENTRY_IF_OPMODE_WIFI_AP, /**< Wi-Fi AP entry database interface operation mode. */
NSS_WIFI_MAC_DB_ENTRY_IF_OPMODE_WIFI_STA, /**< Wi-Fi station entry database interface operation mode. */
NSS_WIFI_MAC_DB_ENTRY_IF_OPMODE_MAX /**< Maximum entry database interface operation mode. */
};
/**
* nss_wifi_mac_db_err_types
* Wi-Fi MAC database errors.
*/
enum nss_wifi_mac_db_err_types {
NSS_WIFI_MAC_DB_ERROR_NONE,
/**< Wi-Fi MAC database error none. */
NSS_WIFI_MAC_DB_ERROR_ENTRY_ALLOC_FAIL,
/**< Error used to report a Wi-Fi MAC database entry pool allocation failure. */
NSS_WIFI_MAC_DB_ERROR_MAC_EXISTS,
/**< Error used to report that a Wi-Fi MAC database entry already exists. */
NSS_WIFI_MAC_DB_ERROR_MAC_TABLE_FULL,
/**< Error used to report that a Wi-Fi MAC table is full. */
NSS_WIFI_MAC_DB_ERROR_MAC_ENTRY_ALLOC_FAILED,
/**< Error used to report a Wi-Fi MAC database entry allocation failure. */
NSS_WIFI_MAC_DB_ERROR_ENTRY_NOT_FOUND,
/**< Error used to report that a Wi-Fi MAC database entry is not present. */
NSS_WIFI_MAC_DB_ERROR_MAC_ENTRY_UNHASHED,
/**< Error used to report that a Wi-Fi MAC database entry is unhashed. */
NSS_WIFI_MAC_DB_ERROR_MAC_ENTRY_DELETE_FAILED,
/**< Error used to report a Wi-Fi MAC database entry delete failure. */
NSS_WIFI_MAC_DB_ERROR_INVALID_NUM_ENTRIES_FAIL,
/**< Error used to report the number of invalid Wi-Fi MAC database entries. */
NSS_WIFI_MAC_DB_ERROR_NOT_ALLOCATED_FAIL,
/**< Error used to report that a Wi-Fi MAC database is not allocated. */
NSS_WIFI_MAC_DB_ERROR_INV_IF_RECVD_FAIL,
/**< Error used to report that a Wi-Fi MAC database entry interface is invalid. */
NSS_WIFI_MAC_DB_ERROR_INVALID_EVENT,
/**< Error used to report that a Wi-Fi MAC database event is invalid. */
NSS_WIFI_MAC_DB_ERROR_PN_INVALID,
/**< Error used to report that a Wi-Fi MAC database entry pnode is invalid. */
NSS_WIFI_MAC_DB_ERROR_PHY_PN_INVALID,
/**< Error used to report that a Wi-Fi MAC database entry radio pnode is invalid. */
NSS_WIFI_MAC_DB_ERROR_ENTRY_POOL_INVALID,
/**< Error used to report that a Wi-Fi MAC database entry pool is invalid. */
NSS_WIFI_MAC_DB_ERROR_ENTRY_POOL_ALREADY_ALLOCATED,
/**< Error used to report that a Wi-Fi MAC database entry pool exists. */
NSS_WIFI_MAC_DB_ERROR_GROUP_ENTRY_ADD_FAIL,
/**< Error used to report that a Wi-Fi MAC database group entry add failure. */
NSS_WIFI_MAC_DB_ERROR_MAX,
/**< Wi-Fi MAC database error maximum. */
};
/**
* nss_wifi_mac_db_entry_create_msg
* Wi-Fi MAC database entry create message.
*/
struct nss_wifi_mac_db_entry_create_msg {
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint16_t reserved; /**< Reserved bytes. */
int32_t nss_if; /**< NSS interface number. */
};
/**
* nss_wifi_mac_db_entry_activity_info
* Wi-Fi MAC database entry activity information.
*/
struct nss_wifi_mac_db_entry_activity_info {
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint16_t reserved; /**< Reserved bytes. */
int32_t nss_if; /**< NSS interface number. */
};
/**
* nss_wifi_mac_db_entry_activity_info_msg
* Wi-Fi MAC database entry activity information message.
*/
struct nss_wifi_mac_db_entry_activity_info_msg {
uint32_t nentries; /**< Number of entries. */
struct nss_wifi_mac_db_entry_activity_info info[1];
/**< Wi-Fi MAC database entry activity information. */
};
/**
* nss_wifi_mac_db_entry_info_msg
* Wi-Fi MAC database entry information.
*/
struct nss_wifi_mac_db_entry_info_msg {
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint16_t flag; /**< Flag information about NSS interface. */
int32_t nss_if; /**< NSS interface number. */
uint32_t iftype; /**< NSS interface type. */
uint32_t opmode; /**< NSS interface operation mode. */
uint32_t wiphy_ifnum; /**< NSS interface for wireless physical device. */
};
/**
* nss_wifi_mac_db_entry_group_info_msg
* Wi-Fi MAC database group of entries information.
*/
struct nss_wifi_mac_db_entry_group_info_msg {
uint32_t num_entries;
/**< Number of entries in group information message. */
struct nss_wifi_mac_db_entry_info_msg entry[NSS_WIFI_MAC_DB_GROUP_ENTRIES_MAX];
/**< Wi-Fi MAC database information specific message. */
};
/**
* nss_wifi_mac_db_msg
* Structure that describes Wi-Fi MAC database messages.
*/
struct nss_wifi_mac_db_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of Wi-Fi MAC database message.
*/
union {
struct nss_wifi_mac_db_entry_info_msg nmfdbeimsg;
/**< Wi-Fi MAC database information specific message. */
struct nss_wifi_mac_db_entry_group_info_msg nmfdbegimsg;
/**< Wi-Fi MAC database information specific message. */
struct nss_wifi_mac_db_entry_activity_info_msg nmfdbeact_imsg;
/**< Wi-Fi MAC database entry activity information message. */
struct nss_wifi_mac_db_entry_create_msg nmfdbecmsg;
/**< Wi-Fi MAC database entry create message. */
} msg; /**< Message payload. */
};
/**
* nss_wifi_mac_db_msg_callback_t
* Callback to receive Wi-Fi MAC database messages.
*
* @datatypes
* nss_wifi_mac_db_msg
*
* @param[in] app_data Application context of the message.
* @param[in] msg Message data.
*
* @return
* void
*/
typedef void (*nss_wifi_mac_db_msg_callback_t)(void *app_data, struct nss_wifi_mac_db_msg *msg);
/**
* nss_wifi_mac_db_callback_t
* Callback to receive Wi-Fi MAC database messages.
*
* @datatypes
* net_device \n
* sk_buff \n
* napi_struct
*
*
* @param[in] netdev Pointer to the associated network device.
* @param[in] skb Pointer to the data socket buffer.
* @param[in] napi Pointer to the NAPI structure.
*
* @return
* void
*/
typedef void (*nss_wifi_mac_db_callback_t)(struct net_device *netdev, struct sk_buff *skb, struct napi_struct *napi);
/**
* nss_wifi_mac_db_tx_msg
* Send Wi-Fi MAC database messages.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifi_mac_db_msg
*
* @param[in] nss_ctx NSS context.
* @param[in] msg NSS Wi-Fi MAC database message.
*
* @return
* nss_tx_status_t Tx status
*/
extern nss_tx_status_t nss_wifi_mac_db_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_wifi_mac_db_msg *msg);
/**
* nss_register_wifi_mac_db_if
* Register to send/receive Wi-Fi MAC database messages to NSS.
*
* @datatypes
* nss_wifi_mac_db_callback_t \n
* nss_wifi_mac_db_msg_callback_t \n
* net_device
*
* @param[in] if_num NSS interface number.
* @param[in] mfdb_callback Callback for the Wi-Fi MAC database device data.
* @param[in] mfdb_ext_callback Callback for the extended data.
* @param[in] event_callback Callback for the message.
* @param[in] netdev Pointer to the associated network device.
* @param[in] features Data socket buffer types supported by this
* interface.
*
* @return
* nss_ctx_instance* NSS context
*/
struct nss_ctx_instance *nss_register_wifi_mac_db_if(uint32_t if_num, nss_wifi_mac_db_callback_t wifi_mac_db_callback,
nss_wifi_mac_db_callback_t wifi_mac_db_ext_callback, nss_wifi_mac_db_msg_callback_t event_callback, struct net_device *netdev, uint32_t features);
/**
* nss_unregister_wifi_mac_db_if
* Deregister Wi-Fi MAC database SoC interface with NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* void
*/
void nss_unregister_wifi_mac_db_if(uint32_t if_num);
struct nss_ctx_instance *nss_wifi_mac_db_get_context(void);
/**
* @}
*/
#endif /* __NSS_WIFI_MAC_DB_H */