diff options
Diffstat (limited to 'drivers/net/wireless/bcm43xx/bcm43xx_main.h')
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.h | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.h b/drivers/net/wireless/bcm43xx/bcm43xx_main.h new file mode 100644 index 000000000000..eca79a38594a --- /dev/null +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.h | |||
@@ -0,0 +1,168 @@ | |||
1 | /* | ||
2 | |||
3 | Broadcom BCM43xx wireless driver | ||
4 | |||
5 | Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>, | ||
6 | Stefano Brivio <st3@riseup.net> | ||
7 | Michael Buesch <mbuesch@freenet.de> | ||
8 | Danny van Dyk <kugelfang@gentoo.org> | ||
9 | Andreas Jaggi <andreas.jaggi@waterwave.ch> | ||
10 | |||
11 | Some parts of the code in this file are derived from the ipw2200 | ||
12 | driver Copyright(c) 2003 - 2004 Intel Corporation. | ||
13 | |||
14 | This program is free software; you can redistribute it and/or modify | ||
15 | it under the terms of the GNU General Public License as published by | ||
16 | the Free Software Foundation; either version 2 of the License, or | ||
17 | (at your option) any later version. | ||
18 | |||
19 | This program is distributed in the hope that it will be useful, | ||
20 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
22 | GNU General Public License for more details. | ||
23 | |||
24 | You should have received a copy of the GNU General Public License | ||
25 | along with this program; see the file COPYING. If not, write to | ||
26 | the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor, | ||
27 | Boston, MA 02110-1301, USA. | ||
28 | |||
29 | */ | ||
30 | |||
31 | #ifndef BCM43xx_MAIN_H_ | ||
32 | #define BCM43xx_MAIN_H_ | ||
33 | |||
34 | #include "bcm43xx.h" | ||
35 | |||
36 | #ifdef CONFIG_BCM947XX | ||
37 | #define atoi(str) simple_strtoul(((str != NULL) ? str : ""), NULL, 0) | ||
38 | |||
39 | static inline void e_aton(char *str, char *dest) | ||
40 | { | ||
41 | int i = 0; | ||
42 | u16 *d = (u16 *) dest; | ||
43 | |||
44 | for (;;) { | ||
45 | dest[i++] = (char) simple_strtoul(str, NULL, 16); | ||
46 | str += 2; | ||
47 | if (!*str++ || i == 6) | ||
48 | break; | ||
49 | } | ||
50 | for (i = 0; i < 3; i++) | ||
51 | d[i] = cpu_to_be16(d[i]); | ||
52 | } | ||
53 | #endif | ||
54 | |||
55 | #define P4D_BYT3S(magic, nr_bytes) u8 __p4dding##magic[nr_bytes] | ||
56 | #define P4D_BYTES(line, nr_bytes) P4D_BYT3S(line, nr_bytes) | ||
57 | /* Magic helper macro to pad structures. Ignore those above. It's magic. */ | ||
58 | #define PAD_BYTES(nr_bytes) P4D_BYTES( __LINE__ , (nr_bytes)) | ||
59 | |||
60 | |||
61 | /* Lightweight function to convert a frequency (in Mhz) to a channel number. */ | ||
62 | static inline | ||
63 | u8 bcm43xx_freq_to_channel_a(int freq) | ||
64 | { | ||
65 | return ((freq - 5000) / 5); | ||
66 | } | ||
67 | static inline | ||
68 | u8 bcm43xx_freq_to_channel_bg(int freq) | ||
69 | { | ||
70 | u8 channel; | ||
71 | |||
72 | if (freq == 2484) | ||
73 | channel = 14; | ||
74 | else | ||
75 | channel = (freq - 2407) / 5; | ||
76 | |||
77 | return channel; | ||
78 | } | ||
79 | static inline | ||
80 | u8 bcm43xx_freq_to_channel(struct bcm43xx_private *bcm, | ||
81 | int freq) | ||
82 | { | ||
83 | if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) | ||
84 | return bcm43xx_freq_to_channel_a(freq); | ||
85 | return bcm43xx_freq_to_channel_bg(freq); | ||
86 | } | ||
87 | |||
88 | /* Lightweight function to convert a channel number to a frequency (in Mhz). */ | ||
89 | static inline | ||
90 | int bcm43xx_channel_to_freq_a(u8 channel) | ||
91 | { | ||
92 | return (5000 + (5 * channel)); | ||
93 | } | ||
94 | static inline | ||
95 | int bcm43xx_channel_to_freq_bg(u8 channel) | ||
96 | { | ||
97 | int freq; | ||
98 | |||
99 | if (channel == 14) | ||
100 | freq = 2484; | ||
101 | else | ||
102 | freq = 2407 + (5 * channel); | ||
103 | |||
104 | return freq; | ||
105 | } | ||
106 | static inline | ||
107 | int bcm43xx_channel_to_freq(struct bcm43xx_private *bcm, | ||
108 | u8 channel) | ||
109 | { | ||
110 | if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) | ||
111 | return bcm43xx_channel_to_freq_a(channel); | ||
112 | return bcm43xx_channel_to_freq_bg(channel); | ||
113 | } | ||
114 | |||
115 | /* Lightweight function to check if a channel number is valid. | ||
116 | * Note that this does _NOT_ check for geographical restrictions! | ||
117 | */ | ||
118 | static inline | ||
119 | int bcm43xx_is_valid_channel_a(u8 channel) | ||
120 | { | ||
121 | return (channel <= 200); | ||
122 | } | ||
123 | static inline | ||
124 | int bcm43xx_is_valid_channel_bg(u8 channel) | ||
125 | { | ||
126 | return (channel >= 1 && channel <= 14); | ||
127 | } | ||
128 | static inline | ||
129 | int bcm43xx_is_valid_channel(struct bcm43xx_private *bcm, | ||
130 | u8 channel) | ||
131 | { | ||
132 | if (bcm43xx_current_phy(bcm)->type == BCM43xx_PHYTYPE_A) | ||
133 | return bcm43xx_is_valid_channel_a(channel); | ||
134 | return bcm43xx_is_valid_channel_bg(channel); | ||
135 | } | ||
136 | |||
137 | void bcm43xx_tsf_read(struct bcm43xx_private *bcm, u64 *tsf); | ||
138 | void bcm43xx_tsf_write(struct bcm43xx_private *bcm, u64 tsf); | ||
139 | |||
140 | void bcm43xx_set_iwmode(struct bcm43xx_private *bcm, | ||
141 | int iw_mode); | ||
142 | |||
143 | u32 bcm43xx_shm_read32(struct bcm43xx_private *bcm, | ||
144 | u16 routing, u16 offset); | ||
145 | u16 bcm43xx_shm_read16(struct bcm43xx_private *bcm, | ||
146 | u16 routing, u16 offset); | ||
147 | void bcm43xx_shm_write32(struct bcm43xx_private *bcm, | ||
148 | u16 routing, u16 offset, | ||
149 | u32 value); | ||
150 | void bcm43xx_shm_write16(struct bcm43xx_private *bcm, | ||
151 | u16 routing, u16 offset, | ||
152 | u16 value); | ||
153 | |||
154 | void bcm43xx_dummy_transmission(struct bcm43xx_private *bcm); | ||
155 | |||
156 | int bcm43xx_switch_core(struct bcm43xx_private *bcm, struct bcm43xx_coreinfo *new_core); | ||
157 | |||
158 | void bcm43xx_wireless_core_reset(struct bcm43xx_private *bcm, int connect_phy); | ||
159 | |||
160 | void bcm43xx_mac_suspend(struct bcm43xx_private *bcm); | ||
161 | void bcm43xx_mac_enable(struct bcm43xx_private *bcm); | ||
162 | |||
163 | void bcm43xx_controller_restart(struct bcm43xx_private *bcm, const char *reason); | ||
164 | |||
165 | int bcm43xx_sprom_read(struct bcm43xx_private *bcm, u16 *sprom); | ||
166 | int bcm43xx_sprom_write(struct bcm43xx_private *bcm, const u16 *sprom); | ||
167 | |||
168 | #endif /* BCM43xx_MAIN_H_ */ | ||