258 lines
7.4 KiB
C
258 lines
7.4 KiB
C
/*
|
|
*****************************************************************************
|
|
*
|
|
* FILE : unifi_native.h
|
|
*
|
|
* PURPOSE : Private header file for unifi driver support to wireless extensions.
|
|
*
|
|
* UDI = UniFi Debug Interface
|
|
*
|
|
* Copyright (C) 2005-2008 by Cambridge Silicon Radio Ltd.
|
|
*
|
|
* Refer to LICENSE.txt included with this source code for details on
|
|
* the license terms.
|
|
*
|
|
*****************************************************************************
|
|
*/
|
|
#ifndef __LINUX_UNIFI_NATIVE_H__
|
|
#define __LINUX_UNIFI_NATIVE_H__ 1
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/if_arp.h>
|
|
|
|
|
|
/*
|
|
* scan.c wext.c autojoin.c
|
|
*/
|
|
/* Structure to hold results of a scan */
|
|
typedef struct scan_info {
|
|
|
|
/* CSR_MLME_SCAN_INDICATION msi; */
|
|
|
|
unsigned char *info_elems;
|
|
int info_elem_length;
|
|
|
|
} scan_info_t;
|
|
|
|
|
|
#define IE_VECTOR_MAXLEN 1024
|
|
|
|
#ifdef CSR_SUPPORT_WEXT
|
|
/*
|
|
* Structre to hold the wireless network configuration info.
|
|
*/
|
|
struct wext_config {
|
|
|
|
/* Requested channel when setting up an adhoc network */
|
|
int channel;
|
|
|
|
/* wireless extns mode: IW_MODE_AUTO, ADHOC, INFRA, MASTER ... MONITOR */
|
|
int mode;
|
|
|
|
/* The capabilities of the currently joined network */
|
|
int capability;
|
|
|
|
/* The interval between beacons if we create an IBSS */
|
|
int beacon_period;
|
|
|
|
/*
|
|
* Power-save parameters
|
|
*/
|
|
/* The listen interval to ask for in Associate req. */
|
|
int assoc_listen_interval;
|
|
/* Power-mode to put UniFi into */
|
|
|
|
unsigned char desired_ssid[UNIFI_MAX_SSID_LEN]; /* the last ESSID set by SIOCSIWESSID */
|
|
int power_mode;
|
|
/* Whether to wake for broadcast packets (using DTIM interval) */
|
|
int wakeup_for_dtims;
|
|
|
|
/* Currently selected WEP Key ID (0..3) */
|
|
int wep_key_id;
|
|
|
|
wep_key_t wep_keys[NUM_WEPKEYS];
|
|
|
|
/* CSR_AUTHENTICATION_TYPE auth_type; */
|
|
int privacy;
|
|
|
|
u32 join_failure_timeout;
|
|
u32 auth_failure_timeout;
|
|
u32 assoc_failure_timeout;
|
|
|
|
unsigned char generic_ie[IE_VECTOR_MAXLEN];
|
|
int generic_ie_len;
|
|
|
|
struct iw_statistics wireless_stats;
|
|
|
|
|
|
/* the ESSID we are currently associated to */
|
|
unsigned char current_ssid[UNIFI_MAX_SSID_LEN];
|
|
/* the BSSID we are currently associated to */
|
|
unsigned char current_bssid[6];
|
|
|
|
/*
|
|
* IW_AUTH_WPA_VERSION_DISABLED 0x00000001
|
|
* IW_AUTH_WPA_VERSION_WPA 0x00000002
|
|
* IW_AUTH_WPA_VERSION_WPA2 0x00000004
|
|
*/
|
|
unsigned char wpa_version;
|
|
|
|
/*
|
|
* cipher selection:
|
|
* IW_AUTH_CIPHER_NONE 0x00000001
|
|
* IW_AUTH_CIPHER_WEP40 0x00000002
|
|
* IW_AUTH_CIPHER_TKIP 0x00000004
|
|
* IW_AUTH_CIPHER_CCMP 0x00000008
|
|
* IW_AUTH_CIPHER_WEP104 0x00000010
|
|
*/
|
|
unsigned char pairwise_cipher_used;
|
|
unsigned char group_cipher_used;
|
|
|
|
unsigned int frag_thresh;
|
|
unsigned int rts_thresh;
|
|
|
|
/* U-APSD value, send with Association Request to WMM Enabled APs */
|
|
unsigned char wmm_bss_uapsd_mask;
|
|
/* The WMM capabilities of the selected BSS */
|
|
unsigned int bss_wmm_capabilities;
|
|
|
|
/* Flag to prevent a join when the ssid is set */
|
|
int disable_join_on_ssid_set;
|
|
|
|
/* Scan info */
|
|
#define UNIFI_MAX_SCANS 32
|
|
scan_info_t scan_list[UNIFI_MAX_SCANS];
|
|
int num_scan_info;
|
|
|
|
/* Flag on whether non-802.1x packets are allowed out */
|
|
/* CsrWifiRouterPortAction block_controlled_port;*/
|
|
|
|
/* Flag on whether we have completed an authenticate/associate process */
|
|
unsigned int flag_associated : 1;
|
|
}; /* struct wext_config */
|
|
|
|
#endif /* CSR_SUPPORT_WEXT */
|
|
|
|
|
|
/*
|
|
* wext.c
|
|
*/
|
|
/*int mlme_set_protection(unifi_priv_t *priv, unsigned char *addr,
|
|
CSR_PROTECT_TYPE prot, CSR_KEY_TYPE key_type);
|
|
*/
|
|
|
|
/*
|
|
* scan.c
|
|
*/
|
|
/*
|
|
void unifi_scan_indication_handler(unifi_priv_t *priv,
|
|
const CSR_MLME_SCAN_INDICATION *msg,
|
|
const unsigned char *extra,
|
|
unsigned int len);
|
|
*/
|
|
void unifi_clear_scan_table(unifi_priv_t *priv);
|
|
scan_info_t *unifi_get_scan_report(unifi_priv_t *priv, int index);
|
|
|
|
|
|
/*
|
|
* Utility functions
|
|
*/
|
|
const unsigned char *unifi_find_info_element(int id,
|
|
const unsigned char *info,
|
|
int len);
|
|
int unifi_add_info_element(unsigned char *info,
|
|
int ie_id,
|
|
const unsigned char *ie_data,
|
|
int ie_len);
|
|
|
|
/*
|
|
* autojoin.c
|
|
*/
|
|
/* Higher level fns */
|
|
int unifi_autojoin(unifi_priv_t *priv, const char *ssid);
|
|
/*
|
|
int unifi_do_scan(unifi_priv_t *priv, int scantype, CSR_BSS_TYPE bsstype,
|
|
const char *ssid, int ssid_len);
|
|
*/
|
|
int unifi_set_powermode(unifi_priv_t *priv);
|
|
int unifi_join_ap(unifi_priv_t *priv, scan_info_t *si);
|
|
int unifi_join_bss(unifi_priv_t *priv, unsigned char *macaddr);
|
|
int unifi_leave(unifi_priv_t *priv);
|
|
unsigned int unifi_get_wmm_bss_capabilities(unifi_priv_t *priv,
|
|
unsigned char *ie_vector,
|
|
int ie_len, int *ap_capabilities);
|
|
|
|
/*
|
|
* Status and management.
|
|
*/
|
|
int uf_init_wext_interface(unifi_priv_t *priv);
|
|
void uf_deinit_wext_interface(unifi_priv_t *priv);
|
|
|
|
/*
|
|
* Function to reset UniFi's 802.11 state by sending MLME-RESET.req
|
|
*/
|
|
int unifi_reset_state(unifi_priv_t *priv, unsigned char *macaddr, unsigned char set_default_mib);
|
|
|
|
|
|
/*
|
|
* mlme.c
|
|
*/
|
|
/* Abort an MLME operation - useful in error recovery */
|
|
int uf_abort_mlme(unifi_priv_t *priv);
|
|
|
|
int unifi_mlme_blocking_request(unifi_priv_t *priv, ul_client_t *pcli,
|
|
CSR_SIGNAL *sig, bulk_data_param_t *data_ptrs,
|
|
int timeout);
|
|
void unifi_mlme_copy_reply_and_wakeup_client(ul_client_t *pcli,
|
|
CSR_SIGNAL *signal, int signal_len,
|
|
const bulk_data_param_t *bulkdata);
|
|
|
|
/*
|
|
* Utility functions
|
|
*/
|
|
const char *lookup_reason_code(int reason);
|
|
const char *lookup_result_code(int result);
|
|
|
|
|
|
/*
|
|
* sme_native.c
|
|
*/
|
|
int uf_sme_init(unifi_priv_t *priv);
|
|
void uf_sme_deinit(unifi_priv_t *priv);
|
|
int sme_sys_suspend(unifi_priv_t *priv);
|
|
int sme_sys_resume(unifi_priv_t *priv);
|
|
int sme_mgt_wifi_on(unifi_priv_t *priv);
|
|
|
|
/* Callback for event logging to SME clients (unifi_manager) */
|
|
void sme_native_log_event(ul_client_t *client,
|
|
const u8 *sig_packed, int sig_len,
|
|
const bulk_data_param_t *bulkdata,
|
|
int dir);
|
|
|
|
void sme_native_mlme_event_handler(ul_client_t *pcli,
|
|
const u8 *sig_packed, int sig_len,
|
|
const bulk_data_param_t *bulkdata,
|
|
int dir);
|
|
|
|
/* Task to query statistics from the MIB */
|
|
#define UF_SME_STATS_WQ_TIMEOUT 2000 /* in msecs */
|
|
void uf_sme_stats_wq(struct work_struct *work);
|
|
|
|
void uf_native_process_udi_signal(ul_client_t *pcli,
|
|
const u8 *packed_signal,
|
|
int packed_signal_len,
|
|
const bulk_data_param_t *bulkdata, int dir);
|
|
#ifdef UNIFI_SNIFF_ARPHRD
|
|
/*
|
|
* monitor.c
|
|
*/
|
|
int uf_start_sniff(unifi_priv_t *priv);
|
|
/*
|
|
void ma_sniffdata_ind(void *ospriv,
|
|
const CSR_MA_SNIFFDATA_INDICATION *ind,
|
|
const bulk_data_param_t *bulkdata);
|
|
*/
|
|
#endif /* ARPHRD_IEEE80211_PRISM */
|
|
|
|
#endif /* __LINUX_UNIFI_NATIVE_H__ */
|