246 lines
8.7 KiB
C
246 lines
8.7 KiB
C
/*
|
|
* ***************************************************************************
|
|
* FILE: unifi_sme.h
|
|
*
|
|
* PURPOSE: SME related definitions.
|
|
*
|
|
* Copyright (C) 2007-2011 by Cambridge Silicon Radio Ltd.
|
|
*
|
|
* Refer to LICENSE.txt included with this source code for details on
|
|
* the license terms.
|
|
*
|
|
* ***************************************************************************
|
|
*/
|
|
#ifndef __LINUX_UNIFI_SME_H__
|
|
#define __LINUX_UNIFI_SME_H__ 1
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
#ifdef CSR_SME_USERSPACE
|
|
#include "sme_userspace.h"
|
|
#endif
|
|
|
|
#include "csr_wifi_sme_lib.h"
|
|
|
|
typedef int unifi_data_port_action;
|
|
|
|
typedef struct unifi_port_cfg
|
|
{
|
|
/* TRUE if this port entry is allocated */
|
|
u8 in_use;
|
|
CsrWifiRouterCtrlPortAction port_action;
|
|
CsrWifiMacAddress mac_address;
|
|
} unifi_port_cfg_t;
|
|
|
|
#define UNIFI_MAX_CONNECTIONS 8
|
|
#define UNIFI_MAX_RETRY_LIMIT 5
|
|
#define UF_DATA_PORT_NOT_OVERIDE 0
|
|
#define UF_DATA_PORT_OVERIDE 1
|
|
|
|
typedef struct unifi_port_config
|
|
{
|
|
int entries_in_use;
|
|
int overide_action;
|
|
unifi_port_cfg_t port_cfg[UNIFI_MAX_CONNECTIONS];
|
|
} unifi_port_config_t;
|
|
|
|
|
|
enum sme_request_status {
|
|
SME_REQUEST_EMPTY,
|
|
SME_REQUEST_PENDING,
|
|
SME_REQUEST_RECEIVED,
|
|
SME_REQUEST_TIMEDOUT,
|
|
SME_REQUEST_CANCELLED,
|
|
};
|
|
|
|
/* Structure to hold a UDI logged signal */
|
|
typedef struct {
|
|
|
|
/* The current status of the request */
|
|
enum sme_request_status request_status;
|
|
|
|
/* The status the SME has passed to us */
|
|
CsrResult reply_status;
|
|
|
|
/* SME's reply to a get request */
|
|
CsrWifiSmeVersions versions;
|
|
CsrWifiSmePowerConfig powerConfig;
|
|
CsrWifiSmeHostConfig hostConfig;
|
|
CsrWifiSmeStaConfig staConfig;
|
|
CsrWifiSmeDeviceConfig deviceConfig;
|
|
CsrWifiSmeCoexInfo coexInfo;
|
|
CsrWifiSmeCoexConfig coexConfig;
|
|
CsrWifiSmeMibConfig mibConfig;
|
|
CsrWifiSmeConnectionInfo connectionInfo;
|
|
CsrWifiSmeConnectionConfig connectionConfig;
|
|
CsrWifiSmeConnectionStats connectionStats;
|
|
|
|
|
|
/* SME's reply to a scan request */
|
|
u16 reply_scan_results_count;
|
|
CsrWifiSmeScanResult* reply_scan_results;
|
|
|
|
} sme_reply_t;
|
|
|
|
|
|
typedef struct {
|
|
u16 appHandle;
|
|
CsrWifiRouterEncapsulation encapsulation;
|
|
u16 protocol;
|
|
u8 oui[3];
|
|
u8 in_use;
|
|
} sme_ma_unidata_ind_filter_t;
|
|
|
|
|
|
CsrWifiRouterCtrlPortAction uf_sme_port_state(unifi_priv_t *priv,
|
|
unsigned char *address,
|
|
int queue,
|
|
u16 interfaceTag);
|
|
unifi_port_cfg_t *uf_sme_port_config_handle(unifi_priv_t *priv,
|
|
unsigned char *address,
|
|
int queue,
|
|
u16 interfaceTag);
|
|
|
|
|
|
|
|
/* Callback for event logging to SME clients */
|
|
void sme_log_event(ul_client_t *client, const u8 *signal, int signal_len,
|
|
const bulk_data_param_t *bulkdata, int dir);
|
|
|
|
/* The workqueue task to the set the multicast addresses list */
|
|
void uf_multicast_list_wq(struct work_struct *work);
|
|
|
|
/* The workqueue task to execute the TA module */
|
|
void uf_ta_wq(struct work_struct *work);
|
|
|
|
|
|
/*
|
|
* SME blocking helper functions
|
|
*/
|
|
#ifdef UNIFI_DEBUG
|
|
# define sme_complete_request(priv, status) uf_sme_complete_request(priv, status, __func__)
|
|
#else
|
|
# define sme_complete_request(priv, status) uf_sme_complete_request(priv, status, NULL)
|
|
#endif
|
|
|
|
void uf_sme_complete_request(unifi_priv_t *priv, CsrResult reply_status, const char *func);
|
|
void uf_sme_cancel_request(unifi_priv_t *priv, CsrResult reply_status);
|
|
|
|
|
|
/*
|
|
* Blocking functions using the SME SYS API.
|
|
*/
|
|
int sme_sys_suspend(unifi_priv_t *priv);
|
|
int sme_sys_resume(unifi_priv_t *priv);
|
|
|
|
|
|
/*
|
|
* Traffic Analysis workqueue jobs
|
|
*/
|
|
void uf_ta_ind_wq(struct work_struct *work);
|
|
void uf_ta_sample_ind_wq(struct work_struct *work);
|
|
|
|
/*
|
|
* SME config workqueue job
|
|
*/
|
|
void uf_sme_config_wq(struct work_struct *work);
|
|
|
|
/*
|
|
* To send M4 read to send IND
|
|
*/
|
|
void uf_send_m4_ready_wq(struct work_struct *work);
|
|
|
|
#if (defined(CSR_WIFI_SECURITY_WAPI_ENABLE) && defined(CSR_WIFI_SECURITY_WAPI_SW_ENCRYPTION))
|
|
/*
|
|
* To send data pkt to Sme for encryption
|
|
*/
|
|
void uf_send_pkt_to_encrypt(struct work_struct *work);
|
|
#endif
|
|
|
|
int sme_mgt_power_config_set(unifi_priv_t *priv, CsrWifiSmePowerConfig *powerConfig);
|
|
int sme_mgt_power_config_get(unifi_priv_t *priv, CsrWifiSmePowerConfig *powerConfig);
|
|
int sme_mgt_host_config_set(unifi_priv_t *priv, CsrWifiSmeHostConfig *hostConfig);
|
|
int sme_mgt_host_config_get(unifi_priv_t *priv, CsrWifiSmeHostConfig *hostConfig);
|
|
int sme_mgt_sme_config_set(unifi_priv_t *priv, CsrWifiSmeStaConfig *staConfig, CsrWifiSmeDeviceConfig *deviceConfig);
|
|
int sme_mgt_sme_config_get(unifi_priv_t *priv, CsrWifiSmeStaConfig *staConfig, CsrWifiSmeDeviceConfig *deviceConfig);
|
|
int sme_mgt_coex_info_get(unifi_priv_t *priv, CsrWifiSmeCoexInfo *coexInfo);
|
|
int sme_mgt_packet_filter_set(unifi_priv_t *priv);
|
|
int sme_mgt_tspec(unifi_priv_t *priv, CsrWifiSmeListAction action,
|
|
u32 tid, CsrWifiSmeDataBlock *tspec, CsrWifiSmeDataBlock *tclas);
|
|
|
|
#ifdef CSR_SUPPORT_WEXT
|
|
/*
|
|
* Blocking functions using the SME MGT API.
|
|
*/
|
|
int sme_mgt_wifi_on(unifi_priv_t *priv);
|
|
int sme_mgt_wifi_off(unifi_priv_t *priv);
|
|
/*int sme_mgt_set_value_async(unifi_priv_t *priv, unifi_AppValue *app_value);
|
|
int sme_mgt_get_value_async(unifi_priv_t *priv, unifi_AppValue *app_value);
|
|
int sme_mgt_get_value(unifi_priv_t *priv, unifi_AppValue *app_value);
|
|
int sme_mgt_set_value(unifi_priv_t *priv, unifi_AppValue *app_value);
|
|
*/
|
|
int sme_mgt_coex_config_set(unifi_priv_t *priv, CsrWifiSmeCoexConfig *coexConfig);
|
|
int sme_mgt_coex_config_get(unifi_priv_t *priv, CsrWifiSmeCoexConfig *coexConfig);
|
|
int sme_mgt_mib_config_set(unifi_priv_t *priv, CsrWifiSmeMibConfig *mibConfig);
|
|
int sme_mgt_mib_config_get(unifi_priv_t *priv, CsrWifiSmeMibConfig *mibConfig);
|
|
|
|
int sme_mgt_connection_info_set(unifi_priv_t *priv, CsrWifiSmeConnectionInfo *connectionInfo);
|
|
int sme_mgt_connection_info_get(unifi_priv_t *priv, CsrWifiSmeConnectionInfo *connectionInfo);
|
|
int sme_mgt_connection_config_set(unifi_priv_t *priv, CsrWifiSmeConnectionConfig *connectionConfig);
|
|
int sme_mgt_connection_config_get(unifi_priv_t *priv, CsrWifiSmeConnectionConfig *connectionConfig);
|
|
int sme_mgt_connection_stats_get(unifi_priv_t *priv, CsrWifiSmeConnectionStats *connectionStats);
|
|
|
|
int sme_mgt_versions_get(unifi_priv_t *priv, CsrWifiSmeVersions *versions);
|
|
|
|
|
|
int sme_mgt_scan_full(unifi_priv_t *priv, CsrWifiSsid *specific_ssid,
|
|
int num_channels, unsigned char *channel_list);
|
|
int sme_mgt_scan_results_get_async(unifi_priv_t *priv,
|
|
struct iw_request_info *info,
|
|
char *scan_results,
|
|
long scan_results_len);
|
|
int sme_mgt_disconnect(unifi_priv_t *priv);
|
|
int sme_mgt_connect(unifi_priv_t *priv);
|
|
int sme_mgt_key(unifi_priv_t *priv, CsrWifiSmeKey *sme_key,
|
|
CsrWifiSmeListAction action);
|
|
int sme_mgt_pmkid(unifi_priv_t *priv, CsrWifiSmeListAction action,
|
|
CsrWifiSmePmkidList *pmkid_list);
|
|
int sme_mgt_mib_get(unifi_priv_t *priv,
|
|
unsigned char *varbind, int *length);
|
|
int sme_mgt_mib_set(unifi_priv_t *priv,
|
|
unsigned char *varbind, int length);
|
|
#ifdef CSR_SUPPORT_WEXT_AP
|
|
int sme_ap_start(unifi_priv_t *priv,u16 interface_tag,CsrWifiSmeApConfig_t *ap_config);
|
|
int sme_ap_stop(unifi_priv_t *priv,u16 interface_tag);
|
|
int sme_ap_config(unifi_priv_t *priv,CsrWifiSmeApMacConfig *ap_mac_config, CsrWifiNmeApConfig *group_security_config);
|
|
int uf_configure_supported_rates(u8 * supportedRates, u8 phySupportedBitmap);
|
|
#endif
|
|
int unifi_translate_scan(struct net_device *dev,
|
|
struct iw_request_info *info,
|
|
char *current_ev, char *end_buf,
|
|
CsrWifiSmeScanResult *scan_data,
|
|
int scan_index);
|
|
|
|
#endif /* CSR_SUPPORT_WEXT */
|
|
|
|
int unifi_cfg_power(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_power_save(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_power_supply(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_packet_filters(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_wmm_qos_info(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_wmm_addts(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_wmm_delts(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_get_info(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_strict_draft_n(unifi_priv_t *priv, unsigned char *arg);
|
|
int unifi_cfg_enable_okc(unifi_priv_t *priv, unsigned char *arg);
|
|
#ifdef CSR_SUPPORT_WEXT_AP
|
|
int unifi_cfg_set_ap_config(unifi_priv_t * priv,unsigned char* arg);
|
|
#endif
|
|
|
|
|
|
|
|
int convert_sme_error(CsrResult error);
|
|
|
|
|
|
#endif /* __LINUX_UNIFI_SME_H__ */
|