Search Linux Wireless

[patch 11a/12] mac80211: add "invalid" interface type

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxxx>

---
 drivers/net/wireless/adm8211.c                  |    8 ++++----
 drivers/net/wireless/p54common.c                |    4 ++--
 drivers/net/wireless/p54pci.c                   |    4 ++--
 drivers/net/wireless/rt2x00/rt2x00.h            |    2 +-
 drivers/net/wireless/zd1211rw-mac80211/zd_mac.c |    8 ++++----
 include/net/mac80211.h                          |    3 +++
 net/mac80211/ieee80211.c                        |    4 ++++
 net/mac80211/ieee80211_iface.c                  |    4 ++++
 net/mac80211/rx.c                               |    1 +
 9 files changed, 25 insertions(+), 13 deletions(-)

--- wireless-dev.orig/include/net/mac80211.h	2007-09-28 13:05:09.411864682 +0200
+++ wireless-dev/include/net/mac80211.h	2007-09-28 13:20:30.321864682 +0200
@@ -457,6 +457,8 @@ struct ieee80211_conf {
 /**
  * enum ieee80211_if_types - types of 802.11 network interfaces
  *
+ * @IEEE80211_IF_TYPE_INVALID: invalid interface type, not used
+ *	by mac80211 itself
  * @IEEE80211_IF_TYPE_AP: interface in AP mode.
  * @IEEE80211_IF_TYPE_MGMT: special interface for communication with hostap
  *	daemon. Drivers should never see this type.
@@ -468,6 +470,7 @@ struct ieee80211_conf {
  *	will never see this type.
  */
 enum ieee80211_if_types {
+	IEEE80211_IF_TYPE_INVALID,
 	IEEE80211_IF_TYPE_AP,
 	IEEE80211_IF_TYPE_MGMT,
 	IEEE80211_IF_TYPE_STA,
--- wireless-dev.orig/drivers/net/wireless/adm8211.c	2007-09-28 13:06:51.781864682 +0200
+++ wireless-dev/drivers/net/wireless/adm8211.c	2007-09-28 13:07:15.581864682 +0200
@@ -1555,7 +1555,7 @@ static void adm8211_stop(struct ieee8021
 {
 	struct adm8211_priv *priv = dev->priv;
 
-	priv->mode = IEEE80211_IF_TYPE_MGMT;
+	priv->mode = IEEE80211_IF_TYPE_INVALID;
 	priv->nar = 0;
 	ADM8211_CSR_WRITE(NAR, 0);
 	ADM8211_CSR_WRITE(IER, 0);
@@ -1897,7 +1897,7 @@ static int __devinit adm8211_probe(struc
 	priv->tx_power = 0x40;
 	priv->lpf_cutoff = 0xFF;
 	priv->lnags_threshold = 0xFF;
-	priv->mode = IEEE80211_IF_TYPE_MGMT;
+	priv->mode = IEEE80211_IF_TYPE_INVALID;
 
 	/* Power-on issue. EEPROM won't read correctly without */
 	if (pdev->revision >= ADM8211_REV_BA) {
@@ -1992,7 +1992,7 @@ static int adm8211_suspend(struct pci_de
 	struct ieee80211_hw *dev = pci_get_drvdata(pdev);
 	struct adm8211_priv *priv = dev->priv;
 
-	if (priv->mode != IEEE80211_IF_TYPE_MGMT) {
+	if (priv->mode != IEEE80211_IF_TYPE_INVALID) {
 		ieee80211_stop_queues(dev);
 		adm8211_stop(dev);
 	}
@@ -2010,7 +2010,7 @@ static int adm8211_resume(struct pci_dev
 	pci_set_power_state(pdev, PCI_D0);
 	pci_restore_state(pdev);
 
-	if (priv->mode != IEEE80211_IF_TYPE_MGMT) {
+	if (priv->mode != IEEE80211_IF_TYPE_INVALID) {
 		adm8211_start(dev);
 		ieee80211_start_queues(dev);
 	}
--- wireless-dev.orig/drivers/net/wireless/p54common.c	2007-09-28 13:06:51.541864682 +0200
+++ wireless-dev/drivers/net/wireless/p54common.c	2007-09-28 13:07:15.571864682 +0200
@@ -797,7 +797,7 @@ static void p54_stop(struct ieee80211_hw
 		kfree_skb(skb);
 	}
 	priv->stop(dev);
-	priv->mode = IEEE80211_IF_TYPE_MGMT;
+	priv->mode = IEEE80211_IF_TYPE_INVALID;
 }
 
 static int p54_add_interface(struct ieee80211_hw *dev,
@@ -949,7 +949,7 @@ struct ieee80211_hw *p54_init_common(siz
 		return NULL;
 
 	priv = dev->priv;
-	priv->mode = IEEE80211_IF_TYPE_MGMT;
+	priv->mode = IEEE80211_IF_TYPE_INVALID;
 	skb_queue_head_init(&priv->tx_queue);
 	memcpy(priv->channels, p54_channels, sizeof(p54_channels));
 	memcpy(priv->rates, p54_rates, sizeof(p54_rates));
--- wireless-dev.orig/drivers/net/wireless/p54pci.c	2007-09-28 13:06:51.441864682 +0200
+++ wireless-dev/drivers/net/wireless/p54pci.c	2007-09-28 13:07:15.551864682 +0200
@@ -638,7 +638,7 @@ static int p54p_suspend(struct pci_dev *
 	struct ieee80211_hw *dev = pci_get_drvdata(pdev);
 	struct p54p_priv *priv = dev->priv;
 
-	if (priv->common.mode != IEEE80211_IF_TYPE_MGMT) {
+	if (priv->common.mode != IEEE80211_IF_TYPE_INVALID) {
 		ieee80211_stop_queues(dev);
 		p54p_stop(dev);
 	}
@@ -656,7 +656,7 @@ static int p54p_resume(struct pci_dev *p
 	pci_set_power_state(pdev, PCI_D0);
 	pci_restore_state(pdev);
 
-	if (priv->common.mode != IEEE80211_IF_TYPE_MGMT) {
+	if (priv->common.mode != IEEE80211_IF_TYPE_INVALID) {
 		p54p_open(dev);
 		ieee80211_start_queues(dev);
 	}
--- wireless-dev.orig/drivers/net/wireless/rt2x00/rt2x00.h	2007-09-28 13:06:51.891864682 +0200
+++ wireless-dev/drivers/net/wireless/rt2x00/rt2x00.h	2007-09-28 13:07:15.581864682 +0200
@@ -297,7 +297,7 @@ struct interface {
 	 * When set to INVALID_INTERFACE, no interface is configured.
 	 */
 	int type;
-#define INVALID_INTERFACE	IEEE80211_IF_TYPE_MGMT
+#define INVALID_INTERFACE	IEEE80211_IF_TYPE_INVALID
 
 	/*
 	 * MAC of the device.
--- wireless-dev.orig/drivers/net/wireless/zd1211rw-mac80211/zd_mac.c	2007-09-28 13:06:51.661864682 +0200
+++ wireless-dev/drivers/net/wireless/zd1211rw-mac80211/zd_mac.c	2007-09-28 13:07:59.331864682 +0200
@@ -710,8 +710,8 @@ static int zd_op_add_interface(struct ie
 {
 	struct zd_mac *mac = zd_hw_mac(hw);
 
-	/* NOTE: using IEEE80211_IF_TYPE_MGMT to indicate no mode selected */
-	if (mac->type != IEEE80211_IF_TYPE_MGMT)
+	/* using IEEE80211_IF_TYPE_INVALID to indicate no mode selected */
+	if (mac->type != IEEE80211_IF_TYPE_INVALID)
 		return -1;
 
 	switch (conf->type) {
@@ -732,7 +732,7 @@ static void zd_op_remove_interface(struc
 				    struct ieee80211_if_init_conf *conf)
 {
 	struct zd_mac *mac = zd_hw_mac(hw);
-	mac->type = IEEE80211_IF_TYPE_MGMT;
+	mac->type = IEEE80211_IF_TYPE_INVALID;
 }
 
 static int zd_op_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf)
@@ -864,7 +864,7 @@ struct ieee80211_hw *zd_mac_alloc_hw(str
 	spin_lock_init(&mac->lock);
 	mac->hw = hw;
 
-	mac->type = IEEE80211_IF_TYPE_MGMT;
+	mac->type = IEEE80211_IF_TYPE_INVALID;
 	mac->hwaddr = hw->wiphy->perm_addr;
 
 	memcpy(mac->channels, zd_channels, sizeof(zd_channels));
--- wireless-dev.orig/net/mac80211/ieee80211.c	2007-09-28 13:09:28.011864682 +0200
+++ wireless-dev/net/mac80211/ieee80211.c	2007-09-28 13:20:30.401864682 +0200
@@ -351,6 +351,10 @@ static int ieee80211_open(struct net_dev
 	case IEEE80211_IF_TYPE_IBSS:
 		/* no special treatment */
 		break;
+	case IEEE80211_IF_TYPE_INVALID:
+		/* cannot happen */
+		WARN_ON(1);
+		break;
 	}
 
 	if (local->open_count == 0) {
--- wireless-dev.orig/net/mac80211/ieee80211_iface.c	2007-09-28 13:10:05.841864682 +0200
+++ wireless-dev/net/mac80211/ieee80211_iface.c	2007-09-28 13:20:30.471864682 +0200
@@ -243,6 +243,10 @@ void ieee80211_if_reinit(struct net_devi
 	ieee80211_if_sdata_deinit(sdata);
 
 	switch (sdata->type) {
+	case IEEE80211_IF_TYPE_INVALID:
+		/* cannot happen */
+		WARN_ON(1);
+		break;
 	case IEEE80211_IF_TYPE_MGMT:
 		/* nothing to do */
 		break;
--- wireless-dev.orig/net/mac80211/rx.c	2007-09-28 13:10:33.301864682 +0200
+++ wireless-dev/net/mac80211/rx.c	2007-09-28 13:20:30.661864682 +0200
@@ -1444,6 +1444,7 @@ static int prepare_for_handlers(struct i
 	case IEEE80211_IF_TYPE_MNTR:
 		/* take everything */
 		break;
+	case IEEE80211_IF_TYPE_INVALID:
 	case IEEE80211_IF_TYPE_MGMT:
 		/* should never get here */
 		WARN_ON(1);


-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux