aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2x00.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00.h')
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00.h113
1 files changed, 83 insertions, 30 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
index 6a25195816db..2363ca4903cc 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -343,20 +343,22 @@ static inline int rt2x00_update_ant_rssi(struct link *link, int rssi)
343 343
344/* 344/*
345 * Interface structure 345 * Interface structure
346 * Configuration details about the current interface. 346 * Per interface configuration details, this structure
347 * is allocated as the private data for ieee80211_vif.
347 */ 348 */
348struct interface { 349struct rt2x00_intf {
349 /* 350 /*
350 * Interface identification. The value is assigned 351 * All fields within the rt2x00_intf structure
351 * to us by the 80211 stack, and is used to request 352 * must be protected with a spinlock.
352 * new beacons.
353 */ 353 */
354 struct ieee80211_vif *id; 354 spinlock_t lock;
355 355
356 /* 356 /*
357 * Current working type (IEEE80211_IF_TYPE_*). 357 * BSS configuration. Copied from the structure
358 * passed to us through the bss_info_changed()
359 * callback funtion.
358 */ 360 */
359 int type; 361 struct ieee80211_bss_conf conf;
360 362
361 /* 363 /*
362 * MAC of the device. 364 * MAC of the device.
@@ -367,16 +369,25 @@ struct interface {
367 * BBSID of the AP to associate with. 369 * BBSID of the AP to associate with.
368 */ 370 */
369 u8 bssid[ETH_ALEN]; 371 u8 bssid[ETH_ALEN];
370};
371 372
372static inline int is_interface_present(struct interface *intf) 373 /*
373{ 374 * Entry in the beacon queue which belongs to
374 return !!intf->id; 375 * this interface. Each interface has its own
375} 376 * dedicated beacon entry.
377 */
378 struct queue_entry *beacon;
376 379
377static inline int is_interface_type(struct interface *intf, int type) 380 /*
381 * Actions that needed rescheduling.
382 */
383 unsigned int delayed_flags;
384#define DELAYED_UPDATE_BEACON 0x00000001
385#define DELAYED_CONFIG_PREAMBLE 0x00000002
386};
387
388static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
378{ 389{
379 return intf->type == type; 390 return (struct rt2x00_intf *)vif->drv_priv;
380} 391}
381 392
382/* 393/*
@@ -430,6 +441,37 @@ struct rt2x00lib_conf {
430}; 441};
431 442
432/* 443/*
444 * Configuration structure wrapper around the
445 * rt2x00 interface configuration handler.
446 */
447struct rt2x00intf_conf {
448 /*
449 * Interface type
450 */
451 enum ieee80211_if_types type;
452
453 /*
454 * TSF sync value, this is dependant on the operation type.
455 */
456 enum tsf_sync sync;
457
458 /*
459 * The MAC and BSSID addressess are simple array of bytes,
460 * these arrays are little endian, so when sending the addressess
461 * to the drivers, copy the it into a endian-signed variable.
462 *
463 * Note that all devices (except rt2500usb) have 32 bits
464 * register word sizes. This means that whatever variable we
465 * pass _must_ be a multiple of 32 bits. Otherwise the device
466 * might not accept what we are sending to it.
467 * This will also make it easier for the driver to write
468 * the data to the device.
469 */
470 __le32 mac[2];
471 __le32 bssid[2];
472};
473
474/*
433 * rt2x00lib callback functions. 475 * rt2x00lib callback functions.
434 */ 476 */
435struct rt2x00lib_ops { 477struct rt2x00lib_ops {
@@ -495,16 +537,21 @@ struct rt2x00lib_ops {
495 /* 537 /*
496 * Configuration handlers. 538 * Configuration handlers.
497 */ 539 */
498 void (*config_mac_addr) (struct rt2x00_dev *rt2x00dev, __le32 *mac); 540 void (*config_intf) (struct rt2x00_dev *rt2x00dev,
499 void (*config_bssid) (struct rt2x00_dev *rt2x00dev, __le32 *bssid); 541 struct rt2x00_intf *intf,
500 void (*config_type) (struct rt2x00_dev *rt2x00dev, const int type, 542 struct rt2x00intf_conf *conf,
501 const int tsf_sync); 543 const unsigned int flags);
502 void (*config_preamble) (struct rt2x00_dev *rt2x00dev, 544#define CONFIG_UPDATE_TYPE ( 1 << 1 )
503 const int short_preamble, 545#define CONFIG_UPDATE_MAC ( 1 << 2 )
504 const int ack_timeout, 546#define CONFIG_UPDATE_BSSID ( 1 << 3 )
505 const int ack_consume_time); 547
506 void (*config) (struct rt2x00_dev *rt2x00dev, const unsigned int flags, 548 int (*config_preamble) (struct rt2x00_dev *rt2x00dev,
507 struct rt2x00lib_conf *libconf); 549 const int short_preamble,
550 const int ack_timeout,
551 const int ack_consume_time);
552 void (*config) (struct rt2x00_dev *rt2x00dev,
553 struct rt2x00lib_conf *libconf,
554 const unsigned int flags);
508#define CONFIG_UPDATE_PHYMODE ( 1 << 1 ) 555#define CONFIG_UPDATE_PHYMODE ( 1 << 1 )
509#define CONFIG_UPDATE_CHANNEL ( 1 << 2 ) 556#define CONFIG_UPDATE_CHANNEL ( 1 << 2 )
510#define CONFIG_UPDATE_TXPOWER ( 1 << 3 ) 557#define CONFIG_UPDATE_TXPOWER ( 1 << 3 )
@@ -519,6 +566,8 @@ struct rt2x00lib_ops {
519 */ 566 */
520struct rt2x00_ops { 567struct rt2x00_ops {
521 const char *name; 568 const char *name;
569 const unsigned int max_sta_intf;
570 const unsigned int max_ap_intf;
522 const unsigned int eeprom_size; 571 const unsigned int eeprom_size;
523 const unsigned int rf_size; 572 const unsigned int rf_size;
524 const struct data_queue_desc *rx; 573 const struct data_queue_desc *rx;
@@ -550,6 +599,7 @@ enum rt2x00_flags {
550 /* 599 /*
551 * Driver features 600 * Driver features
552 */ 601 */
602 DRIVER_SUPPORT_MIXED_INTERFACES,
553 DRIVER_REQUIRE_FIRMWARE, 603 DRIVER_REQUIRE_FIRMWARE,
554 DRIVER_REQUIRE_FIRMWARE_CRC_ITU_T, 604 DRIVER_REQUIRE_FIRMWARE_CRC_ITU_T,
555 DRIVER_REQUIRE_FIRMWARE_CCITT, 605 DRIVER_REQUIRE_FIRMWARE_CCITT,
@@ -566,7 +616,6 @@ enum rt2x00_flags {
566 CONFIG_EXTERNAL_LNA_BG, 616 CONFIG_EXTERNAL_LNA_BG,
567 CONFIG_DOUBLE_ANTENNA, 617 CONFIG_DOUBLE_ANTENNA,
568 CONFIG_DISABLE_LINK_TUNING, 618 CONFIG_DISABLE_LINK_TUNING,
569 CONFIG_SHORT_PREAMBLE,
570}; 619};
571 620
572/* 621/*
@@ -670,9 +719,14 @@ struct rt2x00_dev {
670 unsigned int packet_filter; 719 unsigned int packet_filter;
671 720
672 /* 721 /*
673 * Interface configuration. 722 * Interface details:
723 * - Open ap interface count.
724 * - Open sta interface count.
725 * - Association count.
674 */ 726 */
675 struct interface interface; 727 unsigned int intf_ap_count;
728 unsigned int intf_sta_count;
729 unsigned int intf_associated;
676 730
677 /* 731 /*
678 * Link quality 732 * Link quality
@@ -738,9 +792,8 @@ struct rt2x00_dev {
738 /* 792 /*
739 * Scheduled work. 793 * Scheduled work.
740 */ 794 */
741 struct work_struct beacon_work; 795 struct work_struct intf_work;
742 struct work_struct filter_work; 796 struct work_struct filter_work;
743 struct work_struct config_work;
744 797
745 /* 798 /*
746 * Data queue arrays for RX, TX and Beacon. 799 * Data queue arrays for RX, TX and Beacon.