[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>
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index e4fdadb..5bf7913 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -1555,7 +1555,7 @@
{
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);
@@ -1898,7 +1898,7 @@
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) {
@@ -1993,7 +1993,7 @@
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);
}
@@ -2011,7 +2011,7 @@
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);
}
diff --git a/drivers/net/wireless/p54common.c b/drivers/net/wireless/p54common.c
index 9befd6c..2c63cf0 100644
--- a/drivers/net/wireless/p54common.c
+++ b/drivers/net/wireless/p54common.c
@@ -797,7 +797,7 @@
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 @@
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));
diff --git a/drivers/net/wireless/p54pci.c b/drivers/net/wireless/p54pci.c
index 7592758..410b543 100644
--- a/drivers/net/wireless/p54pci.c
+++ b/drivers/net/wireless/p54pci.c
@@ -640,7 +640,7 @@
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);
}
@@ -658,7 +658,7 @@
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);
}
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
index 511c11c..6262d4e4 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -297,7 +297,7 @@
* 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.
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 6ec12bd..bd72f59 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -457,6 +457,8 @@
/**
* 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 @@
* 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,
diff --git a/net/mac80211/ieee80211.c b/net/mac80211/ieee80211.c
index 62877a8..373e8b7 100644
--- a/net/mac80211/ieee80211.c
+++ b/net/mac80211/ieee80211.c
@@ -351,6 +351,10 @@
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) {
diff --git a/net/mac80211/ieee80211_iface.c b/net/mac80211/ieee80211_iface.c
index 08c1e188d..ef618e94 100644
--- a/net/mac80211/ieee80211_iface.c
+++ b/net/mac80211/ieee80211_iface.c
@@ -243,6 +243,10 @@
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;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 03635fb..b4a62fe 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1453,6 +1453,7 @@
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);