aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2007-09-28 08:01:25 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:54:15 -0400
commita28975525016ddcbdaab8225666df1cf2dc9cb2d (patch)
tree5043b4c24c3c6c40d3d844259e2c47421204436d
parentf7c4daed99fba15e4e48df464031f4ac7c32e4c9 (diff)
[MAC80211]: add "invalid" interface type
Since I cannot convince the lazy driver authors (hello Michael) to stop (ab)using the MGMT interface type internally in their drivers, this patch introduces a new _INVALID type especially for their use and changes all affected drivers to use it. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/wireless/adm8211.c8
-rw-r--r--drivers/net/wireless/p54common.c4
-rw-r--r--drivers/net/wireless/p54pci.c4
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00.h2
-rw-r--r--include/net/mac80211.h3
-rw-r--r--net/mac80211/ieee80211.c4
-rw-r--r--net/mac80211/ieee80211_iface.c4
-rw-r--r--net/mac80211/rx.c1
8 files changed, 21 insertions, 9 deletions
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index e4fdadb52503..5bf7913aadda 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -1555,7 +1555,7 @@ static void adm8211_stop(struct ieee80211_hw *dev)
1555{ 1555{
1556 struct adm8211_priv *priv = dev->priv; 1556 struct adm8211_priv *priv = dev->priv;
1557 1557
1558 priv->mode = IEEE80211_IF_TYPE_MGMT; 1558 priv->mode = IEEE80211_IF_TYPE_INVALID;
1559 priv->nar = 0; 1559 priv->nar = 0;
1560 ADM8211_CSR_WRITE(NAR, 0); 1560 ADM8211_CSR_WRITE(NAR, 0);
1561 ADM8211_CSR_WRITE(IER, 0); 1561 ADM8211_CSR_WRITE(IER, 0);
@@ -1898,7 +1898,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
1898 priv->tx_power = 0x40; 1898 priv->tx_power = 0x40;
1899 priv->lpf_cutoff = 0xFF; 1899 priv->lpf_cutoff = 0xFF;
1900 priv->lnags_threshold = 0xFF; 1900 priv->lnags_threshold = 0xFF;
1901 priv->mode = IEEE80211_IF_TYPE_MGMT; 1901 priv->mode = IEEE80211_IF_TYPE_INVALID;
1902 1902
1903 /* Power-on issue. EEPROM won't read correctly without */ 1903 /* Power-on issue. EEPROM won't read correctly without */
1904 if (pdev->revision >= ADM8211_REV_BA) { 1904 if (pdev->revision >= ADM8211_REV_BA) {
@@ -1993,7 +1993,7 @@ static int adm8211_suspend(struct pci_dev *pdev, pm_message_t state)
1993 struct ieee80211_hw *dev = pci_get_drvdata(pdev); 1993 struct ieee80211_hw *dev = pci_get_drvdata(pdev);
1994 struct adm8211_priv *priv = dev->priv; 1994 struct adm8211_priv *priv = dev->priv;
1995 1995
1996 if (priv->mode != IEEE80211_IF_TYPE_MGMT) { 1996 if (priv->mode != IEEE80211_IF_TYPE_INVALID) {
1997 ieee80211_stop_queues(dev); 1997 ieee80211_stop_queues(dev);
1998 adm8211_stop(dev); 1998 adm8211_stop(dev);
1999 } 1999 }
@@ -2011,7 +2011,7 @@ static int adm8211_resume(struct pci_dev *pdev)
2011 pci_set_power_state(pdev, PCI_D0); 2011 pci_set_power_state(pdev, PCI_D0);
2012 pci_restore_state(pdev); 2012 pci_restore_state(pdev);
2013 2013
2014 if (priv->mode != IEEE80211_IF_TYPE_MGMT) { 2014 if (priv->mode != IEEE80211_IF_TYPE_INVALID) {
2015 adm8211_start(dev); 2015 adm8211_start(dev);
2016 ieee80211_start_queues(dev); 2016 ieee80211_start_queues(dev);
2017 } 2017 }
diff --git a/drivers/net/wireless/p54common.c b/drivers/net/wireless/p54common.c
index 9befd6cc7911..2c63cf0ad2cd 100644
--- a/drivers/net/wireless/p54common.c
+++ b/drivers/net/wireless/p54common.c
@@ -797,7 +797,7 @@ static void p54_stop(struct ieee80211_hw *dev)
797 kfree_skb(skb); 797 kfree_skb(skb);
798 } 798 }
799 priv->stop(dev); 799 priv->stop(dev);
800 priv->mode = IEEE80211_IF_TYPE_MGMT; 800 priv->mode = IEEE80211_IF_TYPE_INVALID;
801} 801}
802 802
803static int p54_add_interface(struct ieee80211_hw *dev, 803static int p54_add_interface(struct ieee80211_hw *dev,
@@ -949,7 +949,7 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len)
949 return NULL; 949 return NULL;
950 950
951 priv = dev->priv; 951 priv = dev->priv;
952 priv->mode = IEEE80211_IF_TYPE_MGMT; 952 priv->mode = IEEE80211_IF_TYPE_INVALID;
953 skb_queue_head_init(&priv->tx_queue); 953 skb_queue_head_init(&priv->tx_queue);
954 memcpy(priv->channels, p54_channels, sizeof(p54_channels)); 954 memcpy(priv->channels, p54_channels, sizeof(p54_channels));
955 memcpy(priv->rates, p54_rates, sizeof(p54_rates)); 955 memcpy(priv->rates, p54_rates, sizeof(p54_rates));
diff --git a/drivers/net/wireless/p54pci.c b/drivers/net/wireless/p54pci.c
index 75927583f766..410b54387f23 100644
--- a/drivers/net/wireless/p54pci.c
+++ b/drivers/net/wireless/p54pci.c
@@ -640,7 +640,7 @@ static int p54p_suspend(struct pci_dev *pdev, pm_message_t state)
640 struct ieee80211_hw *dev = pci_get_drvdata(pdev); 640 struct ieee80211_hw *dev = pci_get_drvdata(pdev);
641 struct p54p_priv *priv = dev->priv; 641 struct p54p_priv *priv = dev->priv;
642 642
643 if (priv->common.mode != IEEE80211_IF_TYPE_MGMT) { 643 if (priv->common.mode != IEEE80211_IF_TYPE_INVALID) {
644 ieee80211_stop_queues(dev); 644 ieee80211_stop_queues(dev);
645 p54p_stop(dev); 645 p54p_stop(dev);
646 } 646 }
@@ -658,7 +658,7 @@ static int p54p_resume(struct pci_dev *pdev)
658 pci_set_power_state(pdev, PCI_D0); 658 pci_set_power_state(pdev, PCI_D0);
659 pci_restore_state(pdev); 659 pci_restore_state(pdev);
660 660
661 if (priv->common.mode != IEEE80211_IF_TYPE_MGMT) { 661 if (priv->common.mode != IEEE80211_IF_TYPE_INVALID) {
662 p54p_open(dev); 662 p54p_open(dev);
663 ieee80211_start_queues(dev); 663 ieee80211_start_queues(dev);
664 } 664 }
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
index 511c11c4edda..6262d4e47c56 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -297,7 +297,7 @@ struct interface {
297 * When set to INVALID_INTERFACE, no interface is configured. 297 * When set to INVALID_INTERFACE, no interface is configured.
298 */ 298 */
299 int type; 299 int type;
300#define INVALID_INTERFACE IEEE80211_IF_TYPE_MGMT 300#define INVALID_INTERFACE IEEE80211_IF_TYPE_INVALID
301 301
302 /* 302 /*
303 * MAC of the device. 303 * MAC of the device.
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 6ec12bd3a3ec..bd72f59e98fd 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -457,6 +457,8 @@ struct ieee80211_conf {
457/** 457/**
458 * enum ieee80211_if_types - types of 802.11 network interfaces 458 * enum ieee80211_if_types - types of 802.11 network interfaces
459 * 459 *
460 * @IEEE80211_IF_TYPE_INVALID: invalid interface type, not used
461 * by mac80211 itself
460 * @IEEE80211_IF_TYPE_AP: interface in AP mode. 462 * @IEEE80211_IF_TYPE_AP: interface in AP mode.
461 * @IEEE80211_IF_TYPE_MGMT: special interface for communication with hostap 463 * @IEEE80211_IF_TYPE_MGMT: special interface for communication with hostap
462 * daemon. Drivers should never see this type. 464 * daemon. Drivers should never see this type.
@@ -468,6 +470,7 @@ struct ieee80211_conf {
468 * will never see this type. 470 * will never see this type.
469 */ 471 */
470enum ieee80211_if_types { 472enum ieee80211_if_types {
473 IEEE80211_IF_TYPE_INVALID,
471 IEEE80211_IF_TYPE_AP, 474 IEEE80211_IF_TYPE_AP,
472 IEEE80211_IF_TYPE_MGMT, 475 IEEE80211_IF_TYPE_MGMT,
473 IEEE80211_IF_TYPE_STA, 476 IEEE80211_IF_TYPE_STA,
diff --git a/net/mac80211/ieee80211.c b/net/mac80211/ieee80211.c
index 62877a8f9f0f..373e8b728782 100644
--- a/net/mac80211/ieee80211.c
+++ b/net/mac80211/ieee80211.c
@@ -351,6 +351,10 @@ static int ieee80211_open(struct net_device *dev)
351 case IEEE80211_IF_TYPE_IBSS: 351 case IEEE80211_IF_TYPE_IBSS:
352 /* no special treatment */ 352 /* no special treatment */
353 break; 353 break;
354 case IEEE80211_IF_TYPE_INVALID:
355 /* cannot happen */
356 WARN_ON(1);
357 break;
354 } 358 }
355 359
356 if (local->open_count == 0) { 360 if (local->open_count == 0) {
diff --git a/net/mac80211/ieee80211_iface.c b/net/mac80211/ieee80211_iface.c
index 08c1e188d4b8..ef618e947e2b 100644
--- a/net/mac80211/ieee80211_iface.c
+++ b/net/mac80211/ieee80211_iface.c
@@ -243,6 +243,10 @@ void ieee80211_if_reinit(struct net_device *dev)
243 ieee80211_if_sdata_deinit(sdata); 243 ieee80211_if_sdata_deinit(sdata);
244 244
245 switch (sdata->type) { 245 switch (sdata->type) {
246 case IEEE80211_IF_TYPE_INVALID:
247 /* cannot happen */
248 WARN_ON(1);
249 break;
246 case IEEE80211_IF_TYPE_MGMT: 250 case IEEE80211_IF_TYPE_MGMT:
247 /* nothing to do */ 251 /* nothing to do */
248 break; 252 break;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 03635fb3e9b6..b4a62fe3ccbd 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1453,6 +1453,7 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
1453 case IEEE80211_IF_TYPE_MNTR: 1453 case IEEE80211_IF_TYPE_MNTR:
1454 /* take everything */ 1454 /* take everything */
1455 break; 1455 break;
1456 case IEEE80211_IF_TYPE_INVALID:
1456 case IEEE80211_IF_TYPE_MGMT: 1457 case IEEE80211_IF_TYPE_MGMT:
1457 /* should never get here */ 1458 /* should never get here */
1458 WARN_ON(1); 1459 WARN_ON(1);