diff options
Diffstat (limited to 'drivers/net/wireless/ipw2200.h')
-rw-r--r-- | drivers/net/wireless/ipw2200.h | 103 |
1 files changed, 47 insertions, 56 deletions
diff --git a/drivers/net/wireless/ipw2200.h b/drivers/net/wireless/ipw2200.h index e65620a4d79e..4b9804900702 100644 --- a/drivers/net/wireless/ipw2200.h +++ b/drivers/net/wireless/ipw2200.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /****************************************************************************** | 1 | /****************************************************************************** |
2 | 2 | ||
3 | Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved. | 3 | Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved. |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify it | 5 | This program is free software; you can redistribute it and/or modify it |
6 | under the terms of version 2 of the GNU General Public License as | 6 | under the terms of version 2 of the GNU General Public License as |
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/moduleparam.h> | 33 | #include <linux/moduleparam.h> |
34 | #include <linux/config.h> | 34 | #include <linux/config.h> |
35 | #include <linux/init.h> | 35 | #include <linux/init.h> |
36 | #include <linux/mutex.h> | ||
36 | 37 | ||
37 | #include <linux/pci.h> | 38 | #include <linux/pci.h> |
38 | #include <linux/netdevice.h> | 39 | #include <linux/netdevice.h> |
@@ -46,6 +47,7 @@ | |||
46 | #include <linux/firmware.h> | 47 | #include <linux/firmware.h> |
47 | #include <linux/wireless.h> | 48 | #include <linux/wireless.h> |
48 | #include <linux/dma-mapping.h> | 49 | #include <linux/dma-mapping.h> |
50 | #include <linux/jiffies.h> | ||
49 | #include <asm/io.h> | 51 | #include <asm/io.h> |
50 | 52 | ||
51 | #include <net/ieee80211.h> | 53 | #include <net/ieee80211.h> |
@@ -244,8 +246,10 @@ enum connection_manager_assoc_states { | |||
244 | #define HOST_NOTIFICATION_S36_MEASUREMENT_REFUSED 31 | 246 | #define HOST_NOTIFICATION_S36_MEASUREMENT_REFUSED 31 |
245 | 247 | ||
246 | #define HOST_NOTIFICATION_STATUS_BEACON_MISSING 1 | 248 | #define HOST_NOTIFICATION_STATUS_BEACON_MISSING 1 |
247 | #define IPW_MB_DISASSOCIATE_THRESHOLD_DEFAULT 24 | 249 | #define IPW_MB_ROAMING_THRESHOLD_MIN 1 |
248 | #define IPW_MB_ROAMING_THRESHOLD_DEFAULT 8 | 250 | #define IPW_MB_ROAMING_THRESHOLD_DEFAULT 8 |
251 | #define IPW_MB_ROAMING_THRESHOLD_MAX 30 | ||
252 | #define IPW_MB_DISASSOCIATE_THRESHOLD_DEFAULT 3*IPW_MB_ROAMING_THRESHOLD_DEFAULT | ||
249 | #define IPW_REAL_RATE_RX_PACKET_THRESHOLD 300 | 253 | #define IPW_REAL_RATE_RX_PACKET_THRESHOLD 300 |
250 | 254 | ||
251 | #define MACADRR_BYTE_LEN 6 | 255 | #define MACADRR_BYTE_LEN 6 |
@@ -616,13 +620,16 @@ struct notif_tgi_tx_key { | |||
616 | u8 reserved; | 620 | u8 reserved; |
617 | } __attribute__ ((packed)); | 621 | } __attribute__ ((packed)); |
618 | 622 | ||
623 | #define SILENCE_OVER_THRESH (1) | ||
624 | #define SILENCE_UNDER_THRESH (2) | ||
625 | |||
619 | struct notif_link_deterioration { | 626 | struct notif_link_deterioration { |
620 | struct ipw_cmd_stats stats; | 627 | struct ipw_cmd_stats stats; |
621 | u8 rate; | 628 | u8 rate; |
622 | u8 modulation; | 629 | u8 modulation; |
623 | struct rate_histogram histogram; | 630 | struct rate_histogram histogram; |
624 | u8 reserved1; | 631 | u8 silence_notification_type; /* SILENCE_OVER/UNDER_THRESH */ |
625 | u16 reserved2; | 632 | u16 silence_count; |
626 | } __attribute__ ((packed)); | 633 | } __attribute__ ((packed)); |
627 | 634 | ||
628 | struct notif_association { | 635 | struct notif_association { |
@@ -780,7 +787,7 @@ struct ipw_sys_config { | |||
780 | u8 enable_cts_to_self; | 787 | u8 enable_cts_to_self; |
781 | u8 enable_multicast_filtering; | 788 | u8 enable_multicast_filtering; |
782 | u8 bt_coexist_collision_thr; | 789 | u8 bt_coexist_collision_thr; |
783 | u8 reserved2; | 790 | u8 silence_threshold; |
784 | u8 accept_all_mgmt_bcpr; | 791 | u8 accept_all_mgmt_bcpr; |
785 | u8 accept_all_mgtm_frames; | 792 | u8 accept_all_mgtm_frames; |
786 | u8 pass_noise_stats_to_host; | 793 | u8 pass_noise_stats_to_host; |
@@ -852,7 +859,7 @@ struct ipw_scan_request_ext { | |||
852 | u16 dwell_time[IPW_SCAN_TYPES]; | 859 | u16 dwell_time[IPW_SCAN_TYPES]; |
853 | } __attribute__ ((packed)); | 860 | } __attribute__ ((packed)); |
854 | 861 | ||
855 | extern inline u8 ipw_get_scan_type(struct ipw_scan_request_ext *scan, u8 index) | 862 | static inline u8 ipw_get_scan_type(struct ipw_scan_request_ext *scan, u8 index) |
856 | { | 863 | { |
857 | if (index % 2) | 864 | if (index % 2) |
858 | return scan->scan_type[index / 2] & 0x0F; | 865 | return scan->scan_type[index / 2] & 0x0F; |
@@ -860,7 +867,7 @@ extern inline u8 ipw_get_scan_type(struct ipw_scan_request_ext *scan, u8 index) | |||
860 | return (scan->scan_type[index / 2] & 0xF0) >> 4; | 867 | return (scan->scan_type[index / 2] & 0xF0) >> 4; |
861 | } | 868 | } |
862 | 869 | ||
863 | extern inline void ipw_set_scan_type(struct ipw_scan_request_ext *scan, | 870 | static inline void ipw_set_scan_type(struct ipw_scan_request_ext *scan, |
864 | u8 index, u8 scan_type) | 871 | u8 index, u8 scan_type) |
865 | { | 872 | { |
866 | if (index % 2) | 873 | if (index % 2) |
@@ -1120,7 +1127,7 @@ struct ipw_priv { | |||
1120 | struct ieee80211_device *ieee; | 1127 | struct ieee80211_device *ieee; |
1121 | 1128 | ||
1122 | spinlock_t lock; | 1129 | spinlock_t lock; |
1123 | struct semaphore sem; | 1130 | struct mutex mutex; |
1124 | 1131 | ||
1125 | /* basic pci-network driver stuff */ | 1132 | /* basic pci-network driver stuff */ |
1126 | struct pci_dev *pci_dev; | 1133 | struct pci_dev *pci_dev; |
@@ -1406,13 +1413,6 @@ do { if (ipw_debug_level & (level)) \ | |||
1406 | * Register bit definitions | 1413 | * Register bit definitions |
1407 | */ | 1414 | */ |
1408 | 1415 | ||
1409 | /* Dino control registers bits */ | ||
1410 | |||
1411 | #define DINO_ENABLE_SYSTEM 0x80 | ||
1412 | #define DINO_ENABLE_CS 0x40 | ||
1413 | #define DINO_RXFIFO_DATA 0x01 | ||
1414 | #define DINO_CONTROL_REG 0x00200000 | ||
1415 | |||
1416 | #define IPW_INTA_RW 0x00000008 | 1416 | #define IPW_INTA_RW 0x00000008 |
1417 | #define IPW_INTA_MASK_R 0x0000000C | 1417 | #define IPW_INTA_MASK_R 0x0000000C |
1418 | #define IPW_INDIRECT_ADDR 0x00000010 | 1418 | #define IPW_INDIRECT_ADDR 0x00000010 |
@@ -1459,6 +1459,11 @@ do { if (ipw_debug_level & (level)) \ | |||
1459 | #define IPW_DOMAIN_0_END 0x1000 | 1459 | #define IPW_DOMAIN_0_END 0x1000 |
1460 | #define CLX_MEM_BAR_SIZE 0x1000 | 1460 | #define CLX_MEM_BAR_SIZE 0x1000 |
1461 | 1461 | ||
1462 | /* Dino/baseband control registers bits */ | ||
1463 | |||
1464 | #define DINO_ENABLE_SYSTEM 0x80 /* 1 = baseband processor on, 0 = reset */ | ||
1465 | #define DINO_ENABLE_CS 0x40 /* 1 = enable ucode load */ | ||
1466 | #define DINO_RXFIFO_DATA 0x01 /* 1 = data available */ | ||
1462 | #define IPW_BASEBAND_CONTROL_STATUS 0X00200000 | 1467 | #define IPW_BASEBAND_CONTROL_STATUS 0X00200000 |
1463 | #define IPW_BASEBAND_TX_FIFO_WRITE 0X00200004 | 1468 | #define IPW_BASEBAND_TX_FIFO_WRITE 0X00200004 |
1464 | #define IPW_BASEBAND_RX_FIFO_READ 0X00200004 | 1469 | #define IPW_BASEBAND_RX_FIFO_READ 0X00200004 |
@@ -1567,13 +1572,18 @@ do { if (ipw_debug_level & (level)) \ | |||
1567 | #define EEPROM_BSS_CHANNELS_BG (GET_EEPROM_ADDR(0x2c,LSB)) /* 2 bytes */ | 1572 | #define EEPROM_BSS_CHANNELS_BG (GET_EEPROM_ADDR(0x2c,LSB)) /* 2 bytes */ |
1568 | #define EEPROM_HW_VERSION (GET_EEPROM_ADDR(0x72,LSB)) /* 2 bytes */ | 1573 | #define EEPROM_HW_VERSION (GET_EEPROM_ADDR(0x72,LSB)) /* 2 bytes */ |
1569 | 1574 | ||
1570 | /* NIC type as found in the one byte EEPROM_NIC_TYPE offset*/ | 1575 | /* NIC type as found in the one byte EEPROM_NIC_TYPE offset */ |
1571 | #define EEPROM_NIC_TYPE_0 0 | 1576 | #define EEPROM_NIC_TYPE_0 0 |
1572 | #define EEPROM_NIC_TYPE_1 1 | 1577 | #define EEPROM_NIC_TYPE_1 1 |
1573 | #define EEPROM_NIC_TYPE_2 2 | 1578 | #define EEPROM_NIC_TYPE_2 2 |
1574 | #define EEPROM_NIC_TYPE_3 3 | 1579 | #define EEPROM_NIC_TYPE_3 3 |
1575 | #define EEPROM_NIC_TYPE_4 4 | 1580 | #define EEPROM_NIC_TYPE_4 4 |
1576 | 1581 | ||
1582 | /* Bluetooth Coexistence capabilities as found in EEPROM_SKU_CAPABILITY */ | ||
1583 | #define EEPROM_SKU_CAP_BT_CHANNEL_SIG 0x01 /* we can tell BT our channel # */ | ||
1584 | #define EEPROM_SKU_CAP_BT_PRIORITY 0x02 /* BT can take priority over us */ | ||
1585 | #define EEPROM_SKU_CAP_BT_OOB 0x04 /* we can signal BT out-of-band */ | ||
1586 | |||
1577 | #define FW_MEM_REG_LOWER_BOUND 0x00300000 | 1587 | #define FW_MEM_REG_LOWER_BOUND 0x00300000 |
1578 | #define FW_MEM_REG_EEPROM_ACCESS (FW_MEM_REG_LOWER_BOUND + 0x40) | 1588 | #define FW_MEM_REG_EEPROM_ACCESS (FW_MEM_REG_LOWER_BOUND + 0x40) |
1579 | #define IPW_EVENT_REG (FW_MEM_REG_LOWER_BOUND + 0x04) | 1589 | #define IPW_EVENT_REG (FW_MEM_REG_LOWER_BOUND + 0x04) |
@@ -1658,9 +1668,10 @@ enum { | |||
1658 | IPW_FW_ERROR_FATAL_ERROR | 1668 | IPW_FW_ERROR_FATAL_ERROR |
1659 | }; | 1669 | }; |
1660 | 1670 | ||
1661 | #define AUTH_OPEN 0 | 1671 | #define AUTH_OPEN 0 |
1662 | #define AUTH_SHARED_KEY 1 | 1672 | #define AUTH_SHARED_KEY 1 |
1663 | #define AUTH_IGNORE 3 | 1673 | #define AUTH_LEAP 2 |
1674 | #define AUTH_IGNORE 3 | ||
1664 | 1675 | ||
1665 | #define HC_ASSOCIATE 0 | 1676 | #define HC_ASSOCIATE 0 |
1666 | #define HC_REASSOCIATE 1 | 1677 | #define HC_REASSOCIATE 1 |
@@ -1860,7 +1871,7 @@ struct host_cmd { | |||
1860 | u8 cmd; | 1871 | u8 cmd; |
1861 | u8 len; | 1872 | u8 len; |
1862 | u16 reserved; | 1873 | u16 reserved; |
1863 | u32 param[TFD_CMD_IMMEDIATE_PAYLOAD_LENGTH]; | 1874 | u32 *param; |
1864 | } __attribute__ ((packed)); | 1875 | } __attribute__ ((packed)); |
1865 | 1876 | ||
1866 | struct ipw_cmd_log { | 1877 | struct ipw_cmd_log { |
@@ -1869,21 +1880,24 @@ struct ipw_cmd_log { | |||
1869 | struct host_cmd cmd; | 1880 | struct host_cmd cmd; |
1870 | }; | 1881 | }; |
1871 | 1882 | ||
1872 | #define CFG_BT_COEXISTENCE_MIN 0x00 | 1883 | /* SysConfig command parameters ... */ |
1873 | #define CFG_BT_COEXISTENCE_DEFER 0x02 | 1884 | /* bt_coexistence param */ |
1874 | #define CFG_BT_COEXISTENCE_KILL 0x04 | 1885 | #define CFG_BT_COEXISTENCE_SIGNAL_CHNL 0x01 /* tell BT our chnl # */ |
1875 | #define CFG_BT_COEXISTENCE_WME_OVER_BT 0x08 | 1886 | #define CFG_BT_COEXISTENCE_DEFER 0x02 /* defer our Tx if BT traffic */ |
1876 | #define CFG_BT_COEXISTENCE_OOB 0x10 | 1887 | #define CFG_BT_COEXISTENCE_KILL 0x04 /* kill our Tx if BT traffic */ |
1877 | #define CFG_BT_COEXISTENCE_MAX 0xFF | 1888 | #define CFG_BT_COEXISTENCE_WME_OVER_BT 0x08 /* multimedia extensions */ |
1878 | #define CFG_BT_COEXISTENCE_DEF 0x80 /* read Bt from EEPROM */ | 1889 | #define CFG_BT_COEXISTENCE_OOB 0x10 /* signal BT via out-of-band */ |
1879 | 1890 | ||
1880 | #define CFG_CTS_TO_ITSELF_ENABLED_MIN 0x0 | 1891 | /* clear-to-send to self param */ |
1881 | #define CFG_CTS_TO_ITSELF_ENABLED_MAX 0x1 | 1892 | #define CFG_CTS_TO_ITSELF_ENABLED_MIN 0x00 |
1893 | #define CFG_CTS_TO_ITSELF_ENABLED_MAX 0x01 | ||
1882 | #define CFG_CTS_TO_ITSELF_ENABLED_DEF CFG_CTS_TO_ITSELF_ENABLED_MIN | 1894 | #define CFG_CTS_TO_ITSELF_ENABLED_DEF CFG_CTS_TO_ITSELF_ENABLED_MIN |
1883 | 1895 | ||
1884 | #define CFG_SYS_ANTENNA_BOTH 0x000 | 1896 | /* Antenna diversity param (h/w can select best antenna, based on signal) */ |
1885 | #define CFG_SYS_ANTENNA_A 0x001 | 1897 | #define CFG_SYS_ANTENNA_BOTH 0x00 /* NIC selects best antenna */ |
1886 | #define CFG_SYS_ANTENNA_B 0x003 | 1898 | #define CFG_SYS_ANTENNA_A 0x01 /* force antenna A */ |
1899 | #define CFG_SYS_ANTENNA_B 0x03 /* force antenna B */ | ||
1900 | #define CFG_SYS_ANTENNA_SLOW_DIV 0x02 /* consider background noise */ | ||
1887 | 1901 | ||
1888 | /* | 1902 | /* |
1889 | * The definitions below were lifted off the ipw2100 driver, which only | 1903 | * The definitions below were lifted off the ipw2100 driver, which only |
@@ -1899,27 +1913,4 @@ struct ipw_cmd_log { | |||
1899 | 1913 | ||
1900 | #define IPW_MAX_CONFIG_RETRIES 10 | 1914 | #define IPW_MAX_CONFIG_RETRIES 10 |
1901 | 1915 | ||
1902 | static inline u32 frame_hdr_len(struct ieee80211_hdr_4addr *hdr) | ||
1903 | { | ||
1904 | u32 retval; | ||
1905 | u16 fc; | ||
1906 | |||
1907 | retval = sizeof(struct ieee80211_hdr_3addr); | ||
1908 | fc = le16_to_cpu(hdr->frame_ctl); | ||
1909 | |||
1910 | /* | ||
1911 | * Function ToDS FromDS | ||
1912 | * IBSS 0 0 | ||
1913 | * To AP 1 0 | ||
1914 | * From AP 0 1 | ||
1915 | * WDS (bridge) 1 1 | ||
1916 | * | ||
1917 | * Only WDS frames use Address4 among them. --YZ | ||
1918 | */ | ||
1919 | if (!(fc & IEEE80211_FCTL_TODS) || !(fc & IEEE80211_FCTL_FROMDS)) | ||
1920 | retval -= ETH_ALEN; | ||
1921 | |||
1922 | return retval; | ||
1923 | } | ||
1924 | |||
1925 | #endif /* __ipw2200_h__ */ | 1916 | #endif /* __ipw2200_h__ */ |