Commit a2897552 authored by Johannes Berg's avatar Johannes Berg Committed by David S. Miller

[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: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f7c4daed
...@@ -1555,7 +1555,7 @@ static void adm8211_stop(struct ieee80211_hw *dev) ...@@ -1555,7 +1555,7 @@ static void adm8211_stop(struct ieee80211_hw *dev)
{ {
struct adm8211_priv *priv = dev->priv; struct adm8211_priv *priv = dev->priv;
priv->mode = IEEE80211_IF_TYPE_MGMT; priv->mode = IEEE80211_IF_TYPE_INVALID;
priv->nar = 0; priv->nar = 0;
ADM8211_CSR_WRITE(NAR, 0); ADM8211_CSR_WRITE(NAR, 0);
ADM8211_CSR_WRITE(IER, 0); ADM8211_CSR_WRITE(IER, 0);
...@@ -1898,7 +1898,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev, ...@@ -1898,7 +1898,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
priv->tx_power = 0x40; priv->tx_power = 0x40;
priv->lpf_cutoff = 0xFF; priv->lpf_cutoff = 0xFF;
priv->lnags_threshold = 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 */ /* Power-on issue. EEPROM won't read correctly without */
if (pdev->revision >= ADM8211_REV_BA) { if (pdev->revision >= ADM8211_REV_BA) {
...@@ -1993,7 +1993,7 @@ static int adm8211_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -1993,7 +1993,7 @@ static int adm8211_suspend(struct pci_dev *pdev, pm_message_t state)
struct ieee80211_hw *dev = pci_get_drvdata(pdev); struct ieee80211_hw *dev = pci_get_drvdata(pdev);
struct adm8211_priv *priv = dev->priv; struct adm8211_priv *priv = dev->priv;
if (priv->mode != IEEE80211_IF_TYPE_MGMT) { if (priv->mode != IEEE80211_IF_TYPE_INVALID) {
ieee80211_stop_queues(dev); ieee80211_stop_queues(dev);
adm8211_stop(dev); adm8211_stop(dev);
} }
...@@ -2011,7 +2011,7 @@ static int adm8211_resume(struct pci_dev *pdev) ...@@ -2011,7 +2011,7 @@ static int adm8211_resume(struct pci_dev *pdev)
pci_set_power_state(pdev, PCI_D0); pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev); pci_restore_state(pdev);
if (priv->mode != IEEE80211_IF_TYPE_MGMT) { if (priv->mode != IEEE80211_IF_TYPE_INVALID) {
adm8211_start(dev); adm8211_start(dev);
ieee80211_start_queues(dev); ieee80211_start_queues(dev);
} }
......
...@@ -797,7 +797,7 @@ static void p54_stop(struct ieee80211_hw *dev) ...@@ -797,7 +797,7 @@ static void p54_stop(struct ieee80211_hw *dev)
kfree_skb(skb); kfree_skb(skb);
} }
priv->stop(dev); priv->stop(dev);
priv->mode = IEEE80211_IF_TYPE_MGMT; priv->mode = IEEE80211_IF_TYPE_INVALID;
} }
static int p54_add_interface(struct ieee80211_hw *dev, static int p54_add_interface(struct ieee80211_hw *dev,
...@@ -949,7 +949,7 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len) ...@@ -949,7 +949,7 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len)
return NULL; return NULL;
priv = dev->priv; priv = dev->priv;
priv->mode = IEEE80211_IF_TYPE_MGMT; priv->mode = IEEE80211_IF_TYPE_INVALID;
skb_queue_head_init(&priv->tx_queue); skb_queue_head_init(&priv->tx_queue);
memcpy(priv->channels, p54_channels, sizeof(p54_channels)); memcpy(priv->channels, p54_channels, sizeof(p54_channels));
memcpy(priv->rates, p54_rates, sizeof(p54_rates)); memcpy(priv->rates, p54_rates, sizeof(p54_rates));
......
...@@ -640,7 +640,7 @@ static int p54p_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -640,7 +640,7 @@ static int p54p_suspend(struct pci_dev *pdev, pm_message_t state)
struct ieee80211_hw *dev = pci_get_drvdata(pdev); struct ieee80211_hw *dev = pci_get_drvdata(pdev);
struct p54p_priv *priv = dev->priv; 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); ieee80211_stop_queues(dev);
p54p_stop(dev); p54p_stop(dev);
} }
...@@ -658,7 +658,7 @@ static int p54p_resume(struct pci_dev *pdev) ...@@ -658,7 +658,7 @@ static int p54p_resume(struct pci_dev *pdev)
pci_set_power_state(pdev, PCI_D0); pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev); pci_restore_state(pdev);
if (priv->common.mode != IEEE80211_IF_TYPE_MGMT) { if (priv->common.mode != IEEE80211_IF_TYPE_INVALID) {
p54p_open(dev); p54p_open(dev);
ieee80211_start_queues(dev); ieee80211_start_queues(dev);
} }
......
...@@ -297,7 +297,7 @@ struct interface { ...@@ -297,7 +297,7 @@ struct interface {
* When set to INVALID_INTERFACE, no interface is configured. * When set to INVALID_INTERFACE, no interface is configured.
*/ */
int type; int type;
#define INVALID_INTERFACE IEEE80211_IF_TYPE_MGMT #define INVALID_INTERFACE IEEE80211_IF_TYPE_INVALID
/* /*
* MAC of the device. * MAC of the device.
......
...@@ -457,6 +457,8 @@ struct ieee80211_conf { ...@@ -457,6 +457,8 @@ struct ieee80211_conf {
/** /**
* enum ieee80211_if_types - types of 802.11 network interfaces * 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_AP: interface in AP mode.
* @IEEE80211_IF_TYPE_MGMT: special interface for communication with hostap * @IEEE80211_IF_TYPE_MGMT: special interface for communication with hostap
* daemon. Drivers should never see this type. * daemon. Drivers should never see this type.
...@@ -468,6 +470,7 @@ struct ieee80211_conf { ...@@ -468,6 +470,7 @@ struct ieee80211_conf {
* will never see this type. * will never see this type.
*/ */
enum ieee80211_if_types { enum ieee80211_if_types {
IEEE80211_IF_TYPE_INVALID,
IEEE80211_IF_TYPE_AP, IEEE80211_IF_TYPE_AP,
IEEE80211_IF_TYPE_MGMT, IEEE80211_IF_TYPE_MGMT,
IEEE80211_IF_TYPE_STA, IEEE80211_IF_TYPE_STA,
......
...@@ -351,6 +351,10 @@ static int ieee80211_open(struct net_device *dev) ...@@ -351,6 +351,10 @@ static int ieee80211_open(struct net_device *dev)
case IEEE80211_IF_TYPE_IBSS: case IEEE80211_IF_TYPE_IBSS:
/* no special treatment */ /* no special treatment */
break; break;
case IEEE80211_IF_TYPE_INVALID:
/* cannot happen */
WARN_ON(1);
break;
} }
if (local->open_count == 0) { if (local->open_count == 0) {
......
...@@ -243,6 +243,10 @@ void ieee80211_if_reinit(struct net_device *dev) ...@@ -243,6 +243,10 @@ void ieee80211_if_reinit(struct net_device *dev)
ieee80211_if_sdata_deinit(sdata); ieee80211_if_sdata_deinit(sdata);
switch (sdata->type) { switch (sdata->type) {
case IEEE80211_IF_TYPE_INVALID:
/* cannot happen */
WARN_ON(1);
break;
case IEEE80211_IF_TYPE_MGMT: case IEEE80211_IF_TYPE_MGMT:
/* nothing to do */ /* nothing to do */
break; break;
......
...@@ -1453,6 +1453,7 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata, ...@@ -1453,6 +1453,7 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
case IEEE80211_IF_TYPE_MNTR: case IEEE80211_IF_TYPE_MNTR:
/* take everything */ /* take everything */
break; break;
case IEEE80211_IF_TYPE_INVALID:
case IEEE80211_IF_TYPE_MGMT: case IEEE80211_IF_TYPE_MGMT:
/* should never get here */ /* should never get here */
WARN_ON(1); WARN_ON(1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment