Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 79382
b: refs/heads/master
c: e37ea21
h: refs/heads/master
v: v3
  • Loading branch information
Ivo van Doorn authored and David S. Miller committed Jan 28, 2008
1 parent d400c08 commit 9c78b07
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 47 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 042671040db95a896c5ca960b9b656692a787892
refs/heads/master: e37ea2135be080dd25f1a2644c9132c109fa77d1
66 changes: 61 additions & 5 deletions trunk/drivers/net/wireless/rt2x00/rt2x00dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1046,7 +1046,7 @@ static void rt2x00lib_free_ring_entries(struct rt2x00_dev *rt2x00dev)
}
}

void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
static void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
{
if (!__test_and_clear_bit(DEVICE_INITIALIZED, &rt2x00dev->flags))
return;
Expand All @@ -1067,7 +1067,7 @@ void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
rt2x00lib_free_ring_entries(rt2x00dev);
}

int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
{
int status;

Expand Down Expand Up @@ -1110,6 +1110,58 @@ int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
return status;
}

int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
{
int retval;

if (test_bit(DEVICE_STARTED, &rt2x00dev->flags))
return 0;

/*
* If this is the first interface which is added,
* we should load the firmware now.
*/
if (test_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags)) {
retval = rt2x00lib_load_firmware(rt2x00dev);
if (retval)
return retval;
}

/*
* Initialize the device.
*/
retval = rt2x00lib_initialize(rt2x00dev);
if (retval)
return retval;

/*
* Enable radio.
*/
retval = rt2x00lib_enable_radio(rt2x00dev);
if (retval) {
rt2x00lib_uninitialize(rt2x00dev);
return retval;
}

__set_bit(DEVICE_STARTED, &rt2x00dev->flags);

return 0;
}

void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev)
{
if (!test_bit(DEVICE_STARTED, &rt2x00dev->flags))
return;

/*
* Perhaps we can add something smarter here,
* but for now just disabling the radio should do.
*/
rt2x00lib_disable_radio(rt2x00dev);

__clear_bit(DEVICE_STARTED, &rt2x00dev->flags);
}

/*
* driver allocation handlers.
*/
Expand Down Expand Up @@ -1295,7 +1347,7 @@ int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state)
* Disable radio and unitialize all items
* that must be recreated on resume.
*/
rt2x00mac_stop(rt2x00dev->hw);
rt2x00lib_stop(rt2x00dev);
rt2x00lib_uninitialize(rt2x00dev);
rt2x00debug_deregister(rt2x00dev);

Expand All @@ -1317,7 +1369,6 @@ int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev)
int retval;

NOTICE(rt2x00dev, "Waking up.\n");
__set_bit(DEVICE_PRESENT, &rt2x00dev->flags);

/*
* Open the debugfs entry.
Expand All @@ -1333,7 +1384,7 @@ int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev)
/*
* Reinitialize device and all active interfaces.
*/
retval = rt2x00mac_start(rt2x00dev->hw);
retval = rt2x00lib_start(rt2x00dev);
if (retval)
goto exit;

Expand All @@ -1348,6 +1399,11 @@ int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev)
rt2x00lib_config_bssid(rt2x00dev, intf->bssid);
rt2x00lib_config_type(rt2x00dev, intf->type);

/*
* We are ready again to receive requests from mac80211.
*/
__set_bit(DEVICE_PRESENT, &rt2x00dev->flags);

/*
* It is possible that during that mac80211 has attempted
* to send frames while we were suspending or resuming.
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/net/wireless/rt2x00/rt2x00lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ void rt2x00lib_reset_link_tuner(struct rt2x00_dev *rt2x00dev);
/*
* Initialization handlers.
*/
int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev);
void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev);
int rt2x00lib_start(struct rt2x00_dev *rt2x00dev);
void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev);

/*
* Configuration handlers.
Expand Down
42 changes: 3 additions & 39 deletions trunk/drivers/net/wireless/rt2x00/rt2x00mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,41 +139,11 @@ EXPORT_SYMBOL_GPL(rt2x00mac_tx);
int rt2x00mac_start(struct ieee80211_hw *hw)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
int status;

if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags) ||
test_bit(DEVICE_STARTED, &rt2x00dev->flags))
if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags))
return 0;

/*
* If this is the first interface which is added,
* we should load the firmware now.
*/
if (test_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags)) {
status = rt2x00lib_load_firmware(rt2x00dev);
if (status)
return status;
}

/*
* Initialize the device.
*/
status = rt2x00lib_initialize(rt2x00dev);
if (status)
return status;

/*
* Enable radio.
*/
status = rt2x00lib_enable_radio(rt2x00dev);
if (status) {
rt2x00lib_uninitialize(rt2x00dev);
return status;
}

__set_bit(DEVICE_STARTED, &rt2x00dev->flags);

return 0;
return rt2x00lib_start(rt2x00dev);
}
EXPORT_SYMBOL_GPL(rt2x00mac_start);

Expand All @@ -184,13 +154,7 @@ void rt2x00mac_stop(struct ieee80211_hw *hw)
if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags))
return;

/*
* Perhaps we can add something smarter here,
* but for now just disabling the radio should do.
*/
rt2x00lib_disable_radio(rt2x00dev);

__clear_bit(DEVICE_STARTED, &rt2x00dev->flags);
rt2x00lib_stop(rt2x00dev);
}
EXPORT_SYMBOL_GPL(rt2x00mac_stop);

Expand Down

0 comments on commit 9c78b07

Please sign in to comment.