| /* |
| * *************************************************************************** |
| * 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__ */ |