[PATCH] zd1211rw: cleanups
Bit-field constants in zd_chip.h are now defined using a shift expression. The value 0x08 is now (1 << 3). The fix is intended to improve readability. Remove misleading comment in zd_mac.c: The function already returns -EPERM in managed mode (IW_MODE_INFRA). Remove unused code in zd_mac.c: The unused code intended for debugging rx_status values is no longer useful. Added dump_stack() to ZD_ASSERT macro: Output of the stack helps to debug assertions. Keep in mind that the ZD_ASSERT() macro only results in code, if DEBUG is defined. Improved comments for filter_rx() zd_usb.c: Added driver name to module init and exit functions Signed-off-by: Ulrich Kunitz <kune@deine-taler.de> Signed-off-by: Daniel Drake <dsd@gentoo.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
84bc715c46
commit
741fec53f2
|
@ -337,24 +337,24 @@
|
||||||
#define CR_MAC_PS_STATE CTL_REG(0x050C)
|
#define CR_MAC_PS_STATE CTL_REG(0x050C)
|
||||||
|
|
||||||
#define CR_INTERRUPT CTL_REG(0x0510)
|
#define CR_INTERRUPT CTL_REG(0x0510)
|
||||||
#define INT_TX_COMPLETE 0x00000001
|
#define INT_TX_COMPLETE (1 << 0)
|
||||||
#define INT_RX_COMPLETE 0x00000002
|
#define INT_RX_COMPLETE (1 << 1)
|
||||||
#define INT_RETRY_FAIL 0x00000004
|
#define INT_RETRY_FAIL (1 << 2)
|
||||||
#define INT_WAKEUP 0x00000008
|
#define INT_WAKEUP (1 << 3)
|
||||||
#define INT_DTIM_NOTIFY 0x00000020
|
#define INT_DTIM_NOTIFY (1 << 5)
|
||||||
#define INT_CFG_NEXT_BCN 0x00000040
|
#define INT_CFG_NEXT_BCN (1 << 6)
|
||||||
#define INT_BUS_ABORT 0x00000080
|
#define INT_BUS_ABORT (1 << 7)
|
||||||
#define INT_TX_FIFO_READY 0x00000100
|
#define INT_TX_FIFO_READY (1 << 8)
|
||||||
#define INT_UART 0x00000200
|
#define INT_UART (1 << 9)
|
||||||
#define INT_TX_COMPLETE_EN 0x00010000
|
#define INT_TX_COMPLETE_EN (1 << 16)
|
||||||
#define INT_RX_COMPLETE_EN 0x00020000
|
#define INT_RX_COMPLETE_EN (1 << 17)
|
||||||
#define INT_RETRY_FAIL_EN 0x00040000
|
#define INT_RETRY_FAIL_EN (1 << 18)
|
||||||
#define INT_WAKEUP_EN 0x00080000
|
#define INT_WAKEUP_EN (1 << 19)
|
||||||
#define INT_DTIM_NOTIFY_EN 0x00200000
|
#define INT_DTIM_NOTIFY_EN (1 << 21)
|
||||||
#define INT_CFG_NEXT_BCN_EN 0x00400000
|
#define INT_CFG_NEXT_BCN_EN (1 << 22)
|
||||||
#define INT_BUS_ABORT_EN 0x00800000
|
#define INT_BUS_ABORT_EN (1 << 23)
|
||||||
#define INT_TX_FIFO_READY_EN 0x01000000
|
#define INT_TX_FIFO_READY_EN (1 << 24)
|
||||||
#define INT_UART_EN 0x02000000
|
#define INT_UART_EN (1 << 25)
|
||||||
|
|
||||||
#define CR_TSF_LOW_PART CTL_REG(0x0514)
|
#define CR_TSF_LOW_PART CTL_REG(0x0514)
|
||||||
#define CR_TSF_HIGH_PART CTL_REG(0x0518)
|
#define CR_TSF_HIGH_PART CTL_REG(0x0518)
|
||||||
|
@ -398,18 +398,18 @@
|
||||||
* device will use a rate in this table that is less than or equal to the rate
|
* device will use a rate in this table that is less than or equal to the rate
|
||||||
* of the incoming frame which prompted the response */
|
* of the incoming frame which prompted the response */
|
||||||
#define CR_BASIC_RATE_TBL CTL_REG(0x0630)
|
#define CR_BASIC_RATE_TBL CTL_REG(0x0630)
|
||||||
#define CR_RATE_1M 0x0001 /* 802.11b */
|
#define CR_RATE_1M (1 << 0) /* 802.11b */
|
||||||
#define CR_RATE_2M 0x0002 /* 802.11b */
|
#define CR_RATE_2M (1 << 1) /* 802.11b */
|
||||||
#define CR_RATE_5_5M 0x0004 /* 802.11b */
|
#define CR_RATE_5_5M (1 << 2) /* 802.11b */
|
||||||
#define CR_RATE_11M 0x0008 /* 802.11b */
|
#define CR_RATE_11M (1 << 3) /* 802.11b */
|
||||||
#define CR_RATE_6M 0x0100 /* 802.11g */
|
#define CR_RATE_6M (1 << 8) /* 802.11g */
|
||||||
#define CR_RATE_9M 0x0200 /* 802.11g */
|
#define CR_RATE_9M (1 << 9) /* 802.11g */
|
||||||
#define CR_RATE_12M 0x0400 /* 802.11g */
|
#define CR_RATE_12M (1 << 10) /* 802.11g */
|
||||||
#define CR_RATE_18M 0x0800 /* 802.11g */
|
#define CR_RATE_18M (1 << 11) /* 802.11g */
|
||||||
#define CR_RATE_24M 0x1000 /* 802.11g */
|
#define CR_RATE_24M (1 << 12) /* 802.11g */
|
||||||
#define CR_RATE_36M 0x2000 /* 802.11g */
|
#define CR_RATE_36M (1 << 13) /* 802.11g */
|
||||||
#define CR_RATE_48M 0x4000 /* 802.11g */
|
#define CR_RATE_48M (1 << 14) /* 802.11g */
|
||||||
#define CR_RATE_54M 0x8000 /* 802.11g */
|
#define CR_RATE_54M (1 << 15) /* 802.11g */
|
||||||
#define CR_RATES_80211G 0xff00
|
#define CR_RATES_80211G 0xff00
|
||||||
#define CR_RATES_80211B 0x000f
|
#define CR_RATES_80211B 0x000f
|
||||||
|
|
||||||
|
@ -426,9 +426,9 @@
|
||||||
/* register for controlling the LEDS */
|
/* register for controlling the LEDS */
|
||||||
#define CR_LED CTL_REG(0x0644)
|
#define CR_LED CTL_REG(0x0644)
|
||||||
/* masks for controlling LEDs */
|
/* masks for controlling LEDs */
|
||||||
#define LED1 0x0100
|
#define LED1 (1 << 8)
|
||||||
#define LED2 0x0200
|
#define LED2 (1 << 9)
|
||||||
#define LED_SW 0x0400
|
#define LED_SW (1 << 10)
|
||||||
|
|
||||||
/* Seems to indicate that the configuration is over.
|
/* Seems to indicate that the configuration is over.
|
||||||
*/
|
*/
|
||||||
|
@ -455,18 +455,18 @@
|
||||||
* registers, so one could argue it is a LOCK bit. But calling it
|
* registers, so one could argue it is a LOCK bit. But calling it
|
||||||
* LOCK_PHY_REGS makes it confusing.
|
* LOCK_PHY_REGS makes it confusing.
|
||||||
*/
|
*/
|
||||||
#define UNLOCK_PHY_REGS 0x0080
|
#define UNLOCK_PHY_REGS (1 << 7)
|
||||||
|
|
||||||
#define CR_DEVICE_STATE CTL_REG(0x0684)
|
#define CR_DEVICE_STATE CTL_REG(0x0684)
|
||||||
#define CR_UNDERRUN_CNT CTL_REG(0x0688)
|
#define CR_UNDERRUN_CNT CTL_REG(0x0688)
|
||||||
|
|
||||||
#define CR_RX_FILTER CTL_REG(0x068c)
|
#define CR_RX_FILTER CTL_REG(0x068c)
|
||||||
#define RX_FILTER_ASSOC_RESPONSE 0x0002
|
#define RX_FILTER_ASSOC_RESPONSE (1 << 1)
|
||||||
#define RX_FILTER_REASSOC_RESPONSE 0x0008
|
#define RX_FILTER_REASSOC_RESPONSE (1 << 3)
|
||||||
#define RX_FILTER_PROBE_RESPONSE 0x0020
|
#define RX_FILTER_PROBE_RESPONSE (1 << 5)
|
||||||
#define RX_FILTER_BEACON 0x0100
|
#define RX_FILTER_BEACON (1 << 8)
|
||||||
#define RX_FILTER_DISASSOC 0x0400
|
#define RX_FILTER_DISASSOC (1 << 10)
|
||||||
#define RX_FILTER_AUTH 0x0800
|
#define RX_FILTER_AUTH (1 << 11)
|
||||||
#define AP_RX_FILTER 0x0400feff
|
#define AP_RX_FILTER 0x0400feff
|
||||||
#define STA_RX_FILTER 0x0000ffff
|
#define STA_RX_FILTER 0x0000ffff
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ do { \
|
||||||
if (!(x)) { \
|
if (!(x)) { \
|
||||||
pr_debug("%s:%d ASSERT %s VIOLATED!\n", \
|
pr_debug("%s:%d ASSERT %s VIOLATED!\n", \
|
||||||
__FILE__, __LINE__, __stringify(x)); \
|
__FILE__, __LINE__, __stringify(x)); \
|
||||||
|
dump_stack(); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -295,7 +295,6 @@ static void set_channel(struct net_device *netdev, u8 channel)
|
||||||
zd_chip_set_channel(&mac->chip, channel);
|
zd_chip_set_channel(&mac->chip, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Should not work in Managed mode. */
|
|
||||||
int zd_mac_request_channel(struct zd_mac *mac, u8 channel)
|
int zd_mac_request_channel(struct zd_mac *mac, u8 channel)
|
||||||
{
|
{
|
||||||
unsigned long lock_flags;
|
unsigned long lock_flags;
|
||||||
|
@ -773,9 +772,11 @@ static int is_data_packet_for_us(struct ieee80211_device *ieee,
|
||||||
(netdev->flags & IFF_PROMISC);
|
(netdev->flags & IFF_PROMISC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Filters receiving packets. If it returns 1 send it to ieee80211_rx, if 0
|
/* Filters received packets. The function returns 1 if the packet should be
|
||||||
* return. If an error is detected -EINVAL is returned. ieee80211_rx_mgt() is
|
* forwarded to ieee80211_rx(). If the packet should be ignored the function
|
||||||
* called here.
|
* returns 0. If an invalid packet is found the function returns -EINVAL.
|
||||||
|
*
|
||||||
|
* The function calls ieee80211_rx_mgt() directly.
|
||||||
*
|
*
|
||||||
* It has been based on ieee80211_rx_any.
|
* It has been based on ieee80211_rx_any.
|
||||||
*/
|
*/
|
||||||
|
@ -801,9 +802,9 @@ static int filter_rx(struct ieee80211_device *ieee,
|
||||||
ieee80211_rx_mgt(ieee, hdr, stats);
|
ieee80211_rx_mgt(ieee, hdr, stats);
|
||||||
return 0;
|
return 0;
|
||||||
case IEEE80211_FTYPE_CTL:
|
case IEEE80211_FTYPE_CTL:
|
||||||
/* Ignore invalid short buffers */
|
|
||||||
return 0;
|
return 0;
|
||||||
case IEEE80211_FTYPE_DATA:
|
case IEEE80211_FTYPE_DATA:
|
||||||
|
/* Ignore invalid short buffers */
|
||||||
if (length < sizeof(struct ieee80211_hdr_3addr))
|
if (length < sizeof(struct ieee80211_hdr_3addr))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return is_data_packet_for_us(ieee, hdr);
|
return is_data_packet_for_us(ieee, hdr);
|
||||||
|
@ -1019,66 +1020,6 @@ struct iw_statistics *zd_mac_get_wireless_stats(struct net_device *ndev)
|
||||||
return iw_stats;
|
return iw_stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
static const char* decryption_types[] = {
|
|
||||||
[ZD_RX_NO_WEP] = "none",
|
|
||||||
[ZD_RX_WEP64] = "WEP64",
|
|
||||||
[ZD_RX_TKIP] = "TKIP",
|
|
||||||
[ZD_RX_AES] = "AES",
|
|
||||||
[ZD_RX_WEP128] = "WEP128",
|
|
||||||
[ZD_RX_WEP256] = "WEP256",
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *decryption_type_string(u8 type)
|
|
||||||
{
|
|
||||||
const char *s;
|
|
||||||
|
|
||||||
if (type < ARRAY_SIZE(decryption_types)) {
|
|
||||||
s = decryption_types[type];
|
|
||||||
} else {
|
|
||||||
s = NULL;
|
|
||||||
}
|
|
||||||
return s ? s : "unknown";
|
|
||||||
}
|
|
||||||
|
|
||||||
static int is_ofdm(u8 frame_status)
|
|
||||||
{
|
|
||||||
return (frame_status & ZD_RX_OFDM);
|
|
||||||
}
|
|
||||||
|
|
||||||
void zd_dump_rx_status(const struct rx_status *status)
|
|
||||||
{
|
|
||||||
const char* modulation;
|
|
||||||
u8 quality;
|
|
||||||
|
|
||||||
if (is_ofdm(status->frame_status)) {
|
|
||||||
modulation = "ofdm";
|
|
||||||
quality = status->signal_quality_ofdm;
|
|
||||||
} else {
|
|
||||||
modulation = "cck";
|
|
||||||
quality = status->signal_quality_cck;
|
|
||||||
}
|
|
||||||
pr_debug("rx status %s strength %#04x qual %#04x decryption %s\n",
|
|
||||||
modulation, status->signal_strength, quality,
|
|
||||||
decryption_type_string(status->decryption_type));
|
|
||||||
if (status->frame_status & ZD_RX_ERROR) {
|
|
||||||
pr_debug("rx error %s%s%s%s%s%s\n",
|
|
||||||
(status->frame_status & ZD_RX_TIMEOUT_ERROR) ?
|
|
||||||
"timeout " : "",
|
|
||||||
(status->frame_status & ZD_RX_FIFO_OVERRUN_ERROR) ?
|
|
||||||
"fifo " : "",
|
|
||||||
(status->frame_status & ZD_RX_DECRYPTION_ERROR) ?
|
|
||||||
"decryption " : "",
|
|
||||||
(status->frame_status & ZD_RX_CRC32_ERROR) ?
|
|
||||||
"crc32 " : "",
|
|
||||||
(status->frame_status & ZD_RX_NO_ADDR1_MATCH_ERROR) ?
|
|
||||||
"addr1 " : "",
|
|
||||||
(status->frame_status & ZD_RX_CRC16_ERROR) ?
|
|
||||||
"crc16" : "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* DEBUG */
|
|
||||||
|
|
||||||
#define LINK_LED_WORK_DELAY HZ
|
#define LINK_LED_WORK_DELAY HZ
|
||||||
|
|
||||||
static void link_led_handler(void *p)
|
static void link_led_handler(void *p)
|
||||||
|
|
|
@ -1116,27 +1116,28 @@ static int __init usb_init(void)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
pr_debug("usb_init()\n");
|
pr_debug("%s usb_init()\n", driver.name);
|
||||||
|
|
||||||
zd_workqueue = create_singlethread_workqueue(driver.name);
|
zd_workqueue = create_singlethread_workqueue(driver.name);
|
||||||
if (zd_workqueue == NULL) {
|
if (zd_workqueue == NULL) {
|
||||||
printk(KERN_ERR "%s: couldn't create workqueue\n", driver.name);
|
printk(KERN_ERR "%s couldn't create workqueue\n", driver.name);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = usb_register(&driver);
|
r = usb_register(&driver);
|
||||||
if (r) {
|
if (r) {
|
||||||
printk(KERN_ERR "usb_register() failed. Error number %d\n", r);
|
printk(KERN_ERR "%s usb_register() failed. Error number %d\n",
|
||||||
|
driver.name, r);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_debug("zd1211rw initialized\n");
|
pr_debug("%s initialized\n", driver.name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit usb_exit(void)
|
static void __exit usb_exit(void)
|
||||||
{
|
{
|
||||||
pr_debug("usb_exit()\n");
|
pr_debug("%s usb_exit()\n", driver.name);
|
||||||
usb_deregister(&driver);
|
usb_deregister(&driver);
|
||||||
destroy_workqueue(zd_workqueue);
|
destroy_workqueue(zd_workqueue);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue