[PATCH] Marvell Libertas 8388 802.11b/g USB driver
[linux-2.6.git] / drivers / net / wireless / libertas / 11d.h
1 /**
2   * This header file contains data structures and
3   * function declarations of 802.11d
4   */
5 #ifndef _WLAN_11D_
6 #define _WLAN_11D_
7
8 #include "types.h"
9 #include "defs.h"
10
11 #define UNIVERSAL_REGION_CODE                   0xff
12
13 /** (Beaconsize(256)-5(IEId,len,contrystr(3))/3(FirstChan,NoOfChan,MaxPwr)
14  */
15 #define MRVDRV_MAX_SUBBAND_802_11D              83
16
17 #define COUNTRY_CODE_LEN                        3
18 #define MAX_NO_OF_CHAN                          40
19
20 struct cmd_ds_command;
21
22 /** Data structure for Country IE*/
23 struct ieeetypes_subbandset {
24         u8 firstchan;
25         u8 nrchan;
26         u8 maxtxpwr;
27 } __attribute__ ((packed));
28
29 struct ieeetypes_countryinfoset {
30         u8 element_id;
31         u8 len;
32         u8 countrycode[COUNTRY_CODE_LEN];
33         struct ieeetypes_subbandset subband[1];
34 };
35
36 struct ieeetypes_countryinfofullset {
37         u8 element_id;
38         u8 len;
39         u8 countrycode[COUNTRY_CODE_LEN];
40         struct ieeetypes_subbandset subband[MRVDRV_MAX_SUBBAND_802_11D];
41 } __attribute__ ((packed));
42
43 struct mrvlietypes_domainparamset {
44         struct mrvlietypesheader header;
45         u8 countrycode[COUNTRY_CODE_LEN];
46         struct ieeetypes_subbandset subband[1];
47 } __attribute__ ((packed));
48
49 struct cmd_ds_802_11d_domain_info {
50         u16 action;
51         struct mrvlietypes_domainparamset domain;
52 } __attribute__ ((packed));
53
54 /** domain regulatory information */
55 struct wlan_802_11d_domain_reg {
56         /** country Code*/
57         u8 countrycode[COUNTRY_CODE_LEN];
58         /** No. of subband*/
59         u8 nr_subband;
60         struct ieeetypes_subbandset subband[MRVDRV_MAX_SUBBAND_802_11D];
61 };
62
63 struct chan_power_11d {
64         u8 chan;
65         u8 pwr;
66 } __attribute__ ((packed));
67
68 struct parsed_region_chan_11d {
69         u8 band;
70         u8 region;
71         s8 countrycode[COUNTRY_CODE_LEN];
72         struct chan_power_11d chanpwr[MAX_NO_OF_CHAN];
73         u8 nr_chan;
74 } __attribute__ ((packed));
75
76 struct region_code_mapping {
77         u8 region[COUNTRY_CODE_LEN];
78         u8 code;
79 };
80
81 u8 libertas_get_scan_type_11d(u8 chan,
82                           struct parsed_region_chan_11d *parsed_region_chan);
83
84 u32 libertas_chan_2_freq(u8 chan, u8 band);
85
86 enum state_11d libertas_get_state_11d(wlan_private * priv);
87
88 void libertas_init_11d(wlan_private * priv);
89
90 int libertas_set_universaltable(wlan_private * priv, u8 band);
91
92 int libertas_cmd_802_11d_domain_info(wlan_private * priv,
93                                  struct cmd_ds_command *cmd, u16 cmdno,
94                                  u16 cmdOption);
95
96 int libertas_cmd_enable_11d(wlan_private * priv, struct iwreq *wrq);
97
98 int libertas_ret_802_11d_domain_info(wlan_private * priv,
99                                  struct cmd_ds_command *resp);
100
101 int libertas_parse_dnld_countryinfo_11d(wlan_private * priv);
102
103 int libertas_create_dnld_countryinfo_11d(wlan_private * priv);
104
105 #endif                          /* _WLAN_11D_ */