aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2400pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2400pci.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2400pci.c84
1 files changed, 43 insertions, 41 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index fc161084a8d3..61766ed800e3 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -246,50 +246,50 @@ static int rt2400pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
246/* 246/*
247 * Configuration handlers. 247 * Configuration handlers.
248 */ 248 */
249static void rt2400pci_config_mac_addr(struct rt2x00_dev *rt2x00dev, 249static void rt2400pci_config_intf(struct rt2x00_dev *rt2x00dev,
250 __le32 *mac) 250 struct rt2x00_intf *intf,
251 struct rt2x00intf_conf *conf,
252 const unsigned int flags)
251{ 253{
252 rt2x00pci_register_multiwrite(rt2x00dev, CSR3, mac, 254 unsigned int bcn_preload;
253 (2 * sizeof(__le32))); 255 u32 reg;
254}
255 256
256static void rt2400pci_config_bssid(struct rt2x00_dev *rt2x00dev, 257 if (flags & CONFIG_UPDATE_TYPE) {
257 __le32 *bssid) 258 rt2x00pci_register_write(rt2x00dev, CSR14, 0);
258{
259 rt2x00pci_register_multiwrite(rt2x00dev, CSR5, bssid,
260 (2 * sizeof(__le32)));
261}
262 259
263static void rt2400pci_config_type(struct rt2x00_dev *rt2x00dev, const int type, 260 /*
264 const int tsf_sync) 261 * Enable beacon config
265{ 262 */
266 u32 reg; 263 bcn_preload = PREAMBLE + get_duration(IEEE80211_HEADER, 20);
264 rt2x00pci_register_read(rt2x00dev, BCNCSR1, &reg);
265 rt2x00_set_field32(&reg, BCNCSR1_PRELOAD, bcn_preload);
266 rt2x00pci_register_write(rt2x00dev, BCNCSR1, reg);
267 267
268 rt2x00pci_register_write(rt2x00dev, CSR14, 0); 268 /*
269 * Enable synchronisation.
270 */
271 rt2x00pci_register_read(rt2x00dev, CSR14, &reg);
272 rt2x00_set_field32(&reg, CSR14_TSF_COUNT, 1);
273 rt2x00_set_field32(&reg, CSR14_TBCN,
274 (conf->sync == TSF_SYNC_BEACON));
275 rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 0);
276 rt2x00_set_field32(&reg, CSR14_TSF_SYNC, conf->sync);
277 rt2x00pci_register_write(rt2x00dev, CSR14, reg);
278 }
269 279
270 /* 280 if (flags & CONFIG_UPDATE_MAC)
271 * Enable beacon config 281 rt2x00pci_register_multiwrite(rt2x00dev, CSR3,
272 */ 282 conf->mac, sizeof(conf->mac));
273 rt2x00pci_register_read(rt2x00dev, BCNCSR1, &reg);
274 rt2x00_set_field32(&reg, BCNCSR1_PRELOAD,
275 PREAMBLE + get_duration(IEEE80211_HEADER, 20));
276 rt2x00pci_register_write(rt2x00dev, BCNCSR1, reg);
277 283
278 /* 284 if (flags & CONFIG_UPDATE_BSSID)
279 * Enable synchronisation. 285 rt2x00pci_register_multiwrite(rt2x00dev, CSR5,
280 */ 286 conf->bssid, sizeof(conf->bssid));
281 rt2x00pci_register_read(rt2x00dev, CSR14, &reg);
282 rt2x00_set_field32(&reg, CSR14_TSF_COUNT, 1);
283 rt2x00_set_field32(&reg, CSR14_TBCN, (tsf_sync == TSF_SYNC_BEACON));
284 rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 0);
285 rt2x00_set_field32(&reg, CSR14_TSF_SYNC, tsf_sync);
286 rt2x00pci_register_write(rt2x00dev, CSR14, reg);
287} 287}
288 288
289static void rt2400pci_config_preamble(struct rt2x00_dev *rt2x00dev, 289static int rt2400pci_config_preamble(struct rt2x00_dev *rt2x00dev,
290 const int short_preamble, 290 const int short_preamble,
291 const int ack_timeout, 291 const int ack_timeout,
292 const int ack_consume_time) 292 const int ack_consume_time)
293{ 293{
294 int preamble_mask; 294 int preamble_mask;
295 u32 reg; 295 u32 reg;
@@ -327,6 +327,8 @@ static void rt2400pci_config_preamble(struct rt2x00_dev *rt2x00dev,
327 rt2x00_set_field32(&reg, ARCSR5_SERVICE, 0x84); 327 rt2x00_set_field32(&reg, ARCSR5_SERVICE, 0x84);
328 rt2x00_set_field32(&reg, ARCSR2_LENGTH, get_duration(ACK_SIZE, 110)); 328 rt2x00_set_field32(&reg, ARCSR2_LENGTH, get_duration(ACK_SIZE, 110));
329 rt2x00pci_register_write(rt2x00dev, ARCSR5, reg); 329 rt2x00pci_register_write(rt2x00dev, ARCSR5, reg);
330
331 return 0;
330} 332}
331 333
332static void rt2400pci_config_phymode(struct rt2x00_dev *rt2x00dev, 334static void rt2400pci_config_phymode(struct rt2x00_dev *rt2x00dev,
@@ -481,8 +483,8 @@ static void rt2400pci_config_duration(struct rt2x00_dev *rt2x00dev,
481} 483}
482 484
483static void rt2400pci_config(struct rt2x00_dev *rt2x00dev, 485static void rt2400pci_config(struct rt2x00_dev *rt2x00dev,
484 const unsigned int flags, 486 struct rt2x00lib_conf *libconf,
485 struct rt2x00lib_conf *libconf) 487 const unsigned int flags)
486{ 488{
487 if (flags & CONFIG_UPDATE_PHYMODE) 489 if (flags & CONFIG_UPDATE_PHYMODE)
488 rt2400pci_config_phymode(rt2x00dev, libconf->basic_rates); 490 rt2400pci_config_phymode(rt2x00dev, libconf->basic_rates);
@@ -1553,9 +1555,7 @@ static const struct rt2x00lib_ops rt2400pci_rt2x00_ops = {
1553 .write_tx_data = rt2x00pci_write_tx_data, 1555 .write_tx_data = rt2x00pci_write_tx_data,
1554 .kick_tx_queue = rt2400pci_kick_tx_queue, 1556 .kick_tx_queue = rt2400pci_kick_tx_queue,
1555 .fill_rxdone = rt2400pci_fill_rxdone, 1557 .fill_rxdone = rt2400pci_fill_rxdone,
1556 .config_mac_addr = rt2400pci_config_mac_addr, 1558 .config_intf = rt2400pci_config_intf,
1557 .config_bssid = rt2400pci_config_bssid,
1558 .config_type = rt2400pci_config_type,
1559 .config_preamble = rt2400pci_config_preamble, 1559 .config_preamble = rt2400pci_config_preamble,
1560 .config = rt2400pci_config, 1560 .config = rt2400pci_config,
1561}; 1561};
@@ -1590,6 +1590,8 @@ static const struct data_queue_desc rt2400pci_queue_atim = {
1590 1590
1591static const struct rt2x00_ops rt2400pci_ops = { 1591static const struct rt2x00_ops rt2400pci_ops = {
1592 .name = KBUILD_MODNAME, 1592 .name = KBUILD_MODNAME,
1593 .max_sta_intf = 1,
1594 .max_ap_intf = 1,
1593 .eeprom_size = EEPROM_SIZE, 1595 .eeprom_size = EEPROM_SIZE,
1594 .rf_size = RF_SIZE, 1596 .rf_size = RF_SIZE,
1595 .rx = &rt2400pci_queue_rx, 1597 .rx = &rt2400pci_queue_rx,