diff options
Diffstat (limited to 'drivers/net/wireless/orinoco.c')
-rw-r--r-- | drivers/net/wireless/orinoco.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c index 29cb5d81b67e..1ae301c62281 100644 --- a/drivers/net/wireless/orinoco.c +++ b/drivers/net/wireless/orinoco.c | |||
@@ -202,31 +202,32 @@ static struct { | |||
202 | /********************************************************************/ | 202 | /********************************************************************/ |
203 | 203 | ||
204 | /* Used in Event handling. | 204 | /* Used in Event handling. |
205 | * We avoid nested structres as they break on ARM -- Moustafa */ | 205 | * We avoid nested structures as they break on ARM -- Moustafa */ |
206 | struct hermes_tx_descriptor_802_11 { | 206 | struct hermes_tx_descriptor_802_11 { |
207 | /* hermes_tx_descriptor */ | 207 | /* hermes_tx_descriptor */ |
208 | u16 status; | 208 | __le16 status; |
209 | u16 reserved1; | 209 | __le16 reserved1; |
210 | u16 reserved2; | 210 | __le16 reserved2; |
211 | u32 sw_support; | 211 | __le32 sw_support; |
212 | u8 retry_count; | 212 | u8 retry_count; |
213 | u8 tx_rate; | 213 | u8 tx_rate; |
214 | u16 tx_control; | 214 | __le16 tx_control; |
215 | 215 | ||
216 | /* ieee802_11_hdr */ | 216 | /* ieee80211_hdr */ |
217 | u16 frame_ctl; | 217 | __le16 frame_ctl; |
218 | u16 duration_id; | 218 | __le16 duration_id; |
219 | u8 addr1[ETH_ALEN]; | 219 | u8 addr1[ETH_ALEN]; |
220 | u8 addr2[ETH_ALEN]; | 220 | u8 addr2[ETH_ALEN]; |
221 | u8 addr3[ETH_ALEN]; | 221 | u8 addr3[ETH_ALEN]; |
222 | u16 seq_ctl; | 222 | __le16 seq_ctl; |
223 | u8 addr4[ETH_ALEN]; | 223 | u8 addr4[ETH_ALEN]; |
224 | u16 data_len; | 224 | |
225 | __le16 data_len; | ||
225 | 226 | ||
226 | /* ethhdr */ | 227 | /* ethhdr */ |
227 | unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ | 228 | u8 h_dest[ETH_ALEN]; /* destination eth addr */ |
228 | unsigned char h_source[ETH_ALEN]; /* source ether addr */ | 229 | u8 h_source[ETH_ALEN]; /* source ether addr */ |
229 | unsigned short h_proto; /* packet type ID field */ | 230 | __be16 h_proto; /* packet type ID field */ |
230 | 231 | ||
231 | /* p8022_hdr */ | 232 | /* p8022_hdr */ |
232 | u8 dsap; | 233 | u8 dsap; |
@@ -234,31 +235,31 @@ struct hermes_tx_descriptor_802_11 { | |||
234 | u8 ctrl; | 235 | u8 ctrl; |
235 | u8 oui[3]; | 236 | u8 oui[3]; |
236 | 237 | ||
237 | u16 ethertype; | 238 | __be16 ethertype; |
238 | } __attribute__ ((packed)); | 239 | } __attribute__ ((packed)); |
239 | 240 | ||
240 | /* Rx frame header except compatibility 802.3 header */ | 241 | /* Rx frame header except compatibility 802.3 header */ |
241 | struct hermes_rx_descriptor { | 242 | struct hermes_rx_descriptor { |
242 | /* Control */ | 243 | /* Control */ |
243 | u16 status; | 244 | __le16 status; |
244 | u32 time; | 245 | __le32 time; |
245 | u8 silence; | 246 | u8 silence; |
246 | u8 signal; | 247 | u8 signal; |
247 | u8 rate; | 248 | u8 rate; |
248 | u8 rxflow; | 249 | u8 rxflow; |
249 | u32 reserved; | 250 | __le32 reserved; |
250 | 251 | ||
251 | /* 802.11 header */ | 252 | /* 802.11 header */ |
252 | u16 frame_ctl; | 253 | __le16 frame_ctl; |
253 | u16 duration_id; | 254 | __le16 duration_id; |
254 | u8 addr1[ETH_ALEN]; | 255 | u8 addr1[ETH_ALEN]; |
255 | u8 addr2[ETH_ALEN]; | 256 | u8 addr2[ETH_ALEN]; |
256 | u8 addr3[ETH_ALEN]; | 257 | u8 addr3[ETH_ALEN]; |
257 | u16 seq_ctl; | 258 | __le16 seq_ctl; |
258 | u8 addr4[ETH_ALEN]; | 259 | u8 addr4[ETH_ALEN]; |
259 | 260 | ||
260 | /* Data length */ | 261 | /* Data length */ |
261 | u16 data_len; | 262 | __le16 data_len; |
262 | } __attribute__ ((packed)); | 263 | } __attribute__ ((packed)); |
263 | 264 | ||
264 | /********************************************************************/ | 265 | /********************************************************************/ |
@@ -389,7 +390,7 @@ static struct iw_statistics *orinoco_get_wireless_stats(struct net_device *dev) | |||
389 | } | 390 | } |
390 | } else { | 391 | } else { |
391 | struct { | 392 | struct { |
392 | u16 qual, signal, noise; | 393 | __le16 qual, signal, noise; |
393 | } __attribute__ ((packed)) cq; | 394 | } __attribute__ ((packed)) cq; |
394 | 395 | ||
395 | err = HERMES_READ_RECORD(hw, USER_BAP, | 396 | err = HERMES_READ_RECORD(hw, USER_BAP, |
@@ -615,6 +616,7 @@ static void __orinoco_ev_txexc(struct net_device *dev, hermes_t *hw) | |||
615 | struct orinoco_private *priv = netdev_priv(dev); | 616 | struct orinoco_private *priv = netdev_priv(dev); |
616 | struct net_device_stats *stats = &priv->stats; | 617 | struct net_device_stats *stats = &priv->stats; |
617 | u16 fid = hermes_read_regn(hw, TXCOMPLFID); | 618 | u16 fid = hermes_read_regn(hw, TXCOMPLFID); |
619 | u16 status; | ||
618 | struct hermes_tx_descriptor_802_11 hdr; | 620 | struct hermes_tx_descriptor_802_11 hdr; |
619 | int err = 0; | 621 | int err = 0; |
620 | 622 | ||
@@ -644,8 +646,8 @@ static void __orinoco_ev_txexc(struct net_device *dev, hermes_t *hw) | |||
644 | * exceeded, because that's the only status that really mean | 646 | * exceeded, because that's the only status that really mean |
645 | * that this particular node went away. | 647 | * that this particular node went away. |
646 | * Other errors means that *we* screwed up. - Jean II */ | 648 | * Other errors means that *we* screwed up. - Jean II */ |
647 | hdr.status = le16_to_cpu(hdr.status); | 649 | status = le16_to_cpu(hdr.status); |
648 | if (hdr.status & (HERMES_TXSTAT_RETRYERR | HERMES_TXSTAT_AGEDERR)) { | 650 | if (status & (HERMES_TXSTAT_RETRYERR | HERMES_TXSTAT_AGEDERR)) { |
649 | union iwreq_data wrqu; | 651 | union iwreq_data wrqu; |
650 | 652 | ||
651 | /* Copy 802.11 dest address. | 653 | /* Copy 802.11 dest address. |
@@ -1031,7 +1033,7 @@ static void orinoco_join_ap(struct net_device *dev) | |||
1031 | unsigned long flags; | 1033 | unsigned long flags; |
1032 | struct join_req { | 1034 | struct join_req { |
1033 | u8 bssid[ETH_ALEN]; | 1035 | u8 bssid[ETH_ALEN]; |
1034 | u16 channel; | 1036 | __le16 channel; |
1035 | } __attribute__ ((packed)) req; | 1037 | } __attribute__ ((packed)) req; |
1036 | const int atom_len = offsetof(struct prism2_scan_apinfo, atim); | 1038 | const int atom_len = offsetof(struct prism2_scan_apinfo, atim); |
1037 | struct prism2_scan_apinfo *atom = NULL; | 1039 | struct prism2_scan_apinfo *atom = NULL; |
@@ -1128,8 +1130,8 @@ static void __orinoco_ev_info(struct net_device *dev, hermes_t *hw) | |||
1128 | struct orinoco_private *priv = netdev_priv(dev); | 1130 | struct orinoco_private *priv = netdev_priv(dev); |
1129 | u16 infofid; | 1131 | u16 infofid; |
1130 | struct { | 1132 | struct { |
1131 | u16 len; | 1133 | __le16 len; |
1132 | u16 type; | 1134 | __le16 type; |
1133 | } __attribute__ ((packed)) info; | 1135 | } __attribute__ ((packed)) info; |
1134 | int len, type; | 1136 | int len, type; |
1135 | int err; | 1137 | int err; |
@@ -3905,7 +3907,7 @@ static int orinoco_ioctl_setscan(struct net_device *dev, | |||
3905 | HERMES_HOSTSCAN_SYMBOL_BCAST); | 3907 | HERMES_HOSTSCAN_SYMBOL_BCAST); |
3906 | break; | 3908 | break; |
3907 | case FIRMWARE_TYPE_INTERSIL: { | 3909 | case FIRMWARE_TYPE_INTERSIL: { |
3908 | u16 req[3]; | 3910 | __le16 req[3]; |
3909 | 3911 | ||
3910 | req[0] = cpu_to_le16(0x3fff); /* All channels */ | 3912 | req[0] = cpu_to_le16(0x3fff); /* All channels */ |
3911 | req[1] = cpu_to_le16(0x0001); /* rate 1 Mbps */ | 3913 | req[1] = cpu_to_le16(0x0001); /* rate 1 Mbps */ |
@@ -3979,7 +3981,7 @@ static inline int orinoco_translate_scan(struct net_device *dev, | |||
3979 | case FIRMWARE_TYPE_INTERSIL: | 3981 | case FIRMWARE_TYPE_INTERSIL: |
3980 | offset = 4; | 3982 | offset = 4; |
3981 | if (priv->has_hostscan) { | 3983 | if (priv->has_hostscan) { |
3982 | atom_len = le16_to_cpup((u16 *)scan); | 3984 | atom_len = le16_to_cpup((__le16 *)scan); |
3983 | /* Sanity check for atom_len */ | 3985 | /* Sanity check for atom_len */ |
3984 | if (atom_len < sizeof(struct prism2_scan_apinfo)) { | 3986 | if (atom_len < sizeof(struct prism2_scan_apinfo)) { |
3985 | printk(KERN_ERR "%s: Invalid atom_len in scan data: %d\n", | 3987 | printk(KERN_ERR "%s: Invalid atom_len in scan data: %d\n", |