aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjal2 <jal2>2004-05-31 13:59:27 +0000
committerjal2 <jal2>2004-05-31 13:59:27 +0000
commit5eb1633e6e463ef48bbf3ebedfeea98d52cc3679 (patch)
treeb774680d8ed080645ca205c56bac9a213fe40ba5
parent6c15f166282cc5002c448e1beaa3b6b0eeda4a59 (diff)
version 0.12beta12: added wireless eventsversion_0_12beta12
-rw-r--r--Makefile4
-rw-r--r--at76c503.c56
2 files changed, 55 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 30ff620..774c4c8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
-#$Id: Makefile,v 1.30 2004/04/14 22:15:44 jal2 Exp $
+#$Id: Makefile,v 1.31 2004/05/31 13:59:27 jal2 Exp $
-VERSION = 0.12beta11
+VERSION = 0.12beta12
CC=gcc
diff --git a/at76c503.c b/at76c503.c
index 6f8a576..d9d5087 100644
--- a/at76c503.c
+++ b/at76c503.c
@@ -1,5 +1,5 @@
/* -*- linux-c -*- */
-/* $Id: at76c503.c,v 1.54 2004/05/29 22:16:17 jal2 Exp $
+/* $Id: at76c503.c,v 1.55 2004/05/31 13:59:27 jal2 Exp $
*
* USB at76c503/at76c505 driver
*
@@ -481,6 +481,41 @@ static int at76c503_get_fw_info(u8 *fw_data, int fw_size,
/* second step of initialisation (after fw download) */
static int init_new_device(struct at76c503 *dev);
+/* some abbrev. for wireless events */
+#if WIRELESS_EXT > 13
+static inline void iwevent_scan_complete(struct net_device *dev)
+{
+ union iwreq_data wrqu;
+ wrqu.data.length = 0;
+ wrqu.data.flags = 0;
+ wireless_send_event(dev, SIOCGIWSCAN, &wrqu, NULL);
+}
+static inline void iwevent_bss_connect(struct net_device *dev, u8 *bssid)
+{
+ union iwreq_data wrqu;
+ wrqu.data.length = 0;
+ wrqu.data.flags = 0;
+ memcpy(wrqu.ap_addr.sa_data, bssid, ETH_ALEN);
+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
+ wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
+}
+
+static inline void iwevent_bss_disconnect(struct net_device *dev)
+{
+ union iwreq_data wrqu;
+ wrqu.data.length = 0;
+ wrqu.data.flags = 0;
+ memset(wrqu.ap_addr.sa_data, '\0', ETH_ALEN);
+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
+ wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
+}
+
+#else
+static inline void iwevent_scan_complete(struct net_device *dev) {}
+static inline void iwevent_bss_connect(struct net_device *dev, u8 *bssid) {}
+static inline void iwevent_bss_disconnect(struct net_device *dev) {}
+#endif /* #if WIRELESS_EXT > 13 */
+
/* hexdump len many bytes from buf into obuf, separated by delim,
add a trailing \0 into obuf */
static char *hex2str(char *obuf, u8 *buf, int len, char delim)
@@ -1711,6 +1746,7 @@ void handle_mgmt_timeout(struct at76c503 *dev)
if (dev->iw_mode != IW_MODE_ADHOC) {
netif_carrier_off(dev->netdev);
netif_stop_queue(dev->netdev);
+ iwevent_bss_disconnect(dev->netdev);
NEW_STATE(dev,SCANNING);
defer_kevent(dev,KEVENT_SCAN);
}
@@ -2180,6 +2216,9 @@ int handle_scan(struct at76c503 *dev)
/* dump the results of the scan with real ssid */
dump_bss_table(dev, 0);
+
+ iwevent_scan_complete(dev->netdev); /* report the end of scan to user space */
+
end_scan:
return (ret < 0);
}
@@ -2289,6 +2328,8 @@ kevent(void *data)
memcpy(dev->bssid, mac_mgmt->current_bssid, ETH_ALEN);
dbg(DBG_PROGRESS, "using BSSID %s", mac2str(dev->bssid));
+ iwevent_bss_connect(dev->netdev, dev->bssid);
+
memset(&mib_buf, 0, sizeof(struct set_mib_buffer));
mib_buf.type = MIB_MAC_MGMT;
mib_buf.size = 1;
@@ -2399,7 +2440,7 @@ end_startibss:
memcpy(dev->essid, bptr->ssid, bptr->ssid_len);
memcpy(dev->bssid, bptr->bssid, ETH_ALEN);
dev->channel = bptr->channel;
-
+ iwevent_bss_connect(dev->netdev,bptr->bssid);
netif_start_queue(dev->netdev);
/* just to be sure */
del_timer_sync(&dev->mgmt_timer);
@@ -2498,6 +2539,7 @@ end_scan:
netif_carrier_on(dev->netdev);
netif_wake_queue(dev->netdev); /* _start_queue ??? */
NEW_STATE(dev,CONNECTED);
+ iwevent_bss_connect(dev->netdev,dev->curr_bss->bssid);
dbg(DBG_PROGRESS, "%s: connected to BSSID %s",
dev->netdev->name, mac2str(dev->curr_bss->bssid));
}
@@ -2808,6 +2850,8 @@ static void rx_mgmt_reassoc(struct at76c503 *dev,
bptr->assoc_id = assoc_id;
NEW_STATE(dev,CONNECTED);
+ iwevent_bss_connect(dev->netdev,bptr->bssid);
+
spin_lock_irqsave(&dev->bss_list_spinlock, flags);
dev->curr_bss = dev->new_bss;
dev->new_bss = NULL;
@@ -2873,6 +2917,7 @@ static void rx_mgmt_disassoc(struct at76c503 *dev,
if (dev->istate == CONNECTED) {
netif_carrier_off(dev->netdev);
netif_stop_queue(dev->netdev);
+ iwevent_bss_disconnect(dev->netdev);
}
del_timer_sync(&dev->mgmt_timer);
NEW_STATE(dev,JOINING);
@@ -2981,6 +3026,8 @@ static void rx_mgmt_deauth(struct at76c503 *dev,
!memcmp(bc_addr, mgmt->addr1, ETH_ALEN))) {
/* this is a DeAuth from the BSS we are connected or
trying to connect to, directed to us or broadcasted */
+ if (dev->istate == CONNECTED)
+ iwevent_bss_disconnect(dev->netdev);
NEW_STATE(dev,JOINING);
defer_kevent(dev,KEVENT_JOIN);
del_timer_sync(&dev->mgmt_timer);
@@ -6216,6 +6263,9 @@ void at76c503_delete_device(struct at76c503 *dev)
free_bss_list(dev);
del_timer_sync(&dev->bss_list_timer);
+ if (dev->istate == CONNECTED)
+ iwevent_bss_disconnect(dev->netdev);
+
for(i=0; i < NR_RX_DATA_BUF; i++)
if (dev->rx_data[i].skb != NULL) {
dev_kfree_skb(dev->rx_data[i].skb);
@@ -6421,7 +6471,7 @@ int init_new_device(struct at76c503 *dev)
else
dev->rx_data_fcs_len = 4;
- info("$Id: at76c503.c,v 1.54 2004/05/29 22:16:17 jal2 Exp $ compiled %s %s", __DATE__, __TIME__);
+ info("$Id: at76c503.c,v 1.55 2004/05/31 13:59:27 jal2 Exp $ compiled %s %s", __DATE__, __TIME__);
info("firmware version %d.%d.%d #%d (fcs_len %d)",
dev->fw_version.major, dev->fw_version.minor,
dev->fw_version.patch, dev->fw_version.build,