Merge branch 'for-next' of git://neil.brown.name/md
[cascardo/linux.git] / drivers / staging / csr / unifi_wext.h
1 /*
2  *****************************************************************************
3  *
4  * FILE : unifi_wext.h
5  *
6  * PURPOSE : Private header file for unifi driver support to wireless extensions.
7  *
8  * Copyright (C) 2005-2008 by Cambridge Silicon Radio Ltd.
9  *
10  * Refer to LICENSE.txt included with this source code for details on
11  * the license terms.
12  *
13 *****************************************************************************
14  */
15 #ifndef __LINUX_UNIFI_WEXT_H__
16 #define __LINUX_UNIFI_WEXT_H__ 1
17
18 #include <linux/kernel.h>
19 #include <net/iw_handler.h>
20 #include "csr_wifi_sme_prim.h"
21
22 /*
23  *      wext.c
24  */
25 /* A few details needed for WEP (Wireless Equivalent Privacy) */
26 #define UNIFI_MAX_KEY_SIZE      16
27 #define NUM_WEPKEYS              4
28 #define SMALL_KEY_SIZE           5
29 #define LARGE_KEY_SIZE          13
30 typedef struct wep_key_t {
31     int len;
32     unsigned char key[UNIFI_MAX_KEY_SIZE];  /* 40-bit and 104-bit keys */
33 } wep_key_t;
34
35 #define UNIFI_SCAN_ACTIVE       0
36 #define UNIFI_SCAN_PASSIVE      1
37 #define UNIFI_MAX_SSID_LEN      32
38
39 #define MAX_WPA_IE_LEN 64
40 #define MAX_RSN_IE_LEN 255
41
42 /*
43  * Function to register in the netdev to report wireless stats.
44  */
45 struct iw_statistics *unifi_get_wireless_stats(struct net_device *dev);
46
47 void uf_sme_wext_set_defaults(unifi_priv_t *priv);
48
49
50 /*
51  *      wext_events.c
52  */
53 /* Functions to generate Wireless Extension events */
54 void wext_send_scan_results_event(unifi_priv_t *priv);
55 void wext_send_assoc_event(unifi_priv_t *priv, unsigned char *bssid,
56                            unsigned char *req_ie, int req_ie_len,
57                            unsigned char *resp_ie, int resp_ie_len,
58                            unsigned char *scan_ie, unsigned int scan_ie_len);
59 void wext_send_disassoc_event(unifi_priv_t *priv);
60 void wext_send_michaelmicfailure_event(unifi_priv_t *priv,
61                                        u16 count, CsrWifiMacAddress address,
62                                        CsrWifiSmeKeyType keyType, u16 interfaceTag);
63 void wext_send_pmkid_candidate_event(unifi_priv_t *priv, CsrWifiMacAddress bssid, u8 preauth_allowed, u16 interfaceTag);
64 void wext_send_started_event(unifi_priv_t *priv);
65
66
67 static inline int
68 uf_iwe_stream_add_point(struct iw_request_info *info, char *start, char *stop,
69                         struct iw_event *piwe, char *extra)
70 {
71     char *new_start;
72
73     new_start = iwe_stream_add_point(
74 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) || defined (IW_REQUEST_FLAG_COMPAT)
75                                      info,
76 #endif
77                                      start, stop, piwe, extra);
78     if (unlikely(new_start == start))
79     {
80         return -E2BIG;
81     }
82
83     return (new_start - start);
84 }
85
86
87 static inline int
88 uf_iwe_stream_add_event(struct iw_request_info *info, char *start, char *stop,
89                         struct iw_event *piwe, int len)
90 {
91     char *new_start;
92
93     new_start = iwe_stream_add_event(
94 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) || defined(IW_REQUEST_FLAG_COMPAT)
95                                      info,
96 #endif
97                                      start, stop, piwe, len);
98     if (unlikely(new_start == start)) {
99         return -E2BIG;
100     }
101
102     return (new_start - start);
103 }
104
105 static inline int
106 uf_iwe_stream_add_value(struct iw_request_info *info, char *stream, char *start,
107                         char *stop, struct iw_event *piwe, int len)
108 {
109     char *new_start;
110
111     new_start = iwe_stream_add_value(
112 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) || defined(IW_REQUEST_FLAG_COMPAT)
113                                      info,
114 #endif
115                                      stream, start, stop, piwe, len);
116     if (unlikely(new_start == start)) {
117         return -E2BIG;
118     }
119
120     return (new_start - start);
121 }
122
123
124 #endif /* __LINUX_UNIFI_WEXT_H__ */