int rt2x00lib_start(struct rt2x00_dev *rt2x00dev) { int retval; if (test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags)) return 0; /* * If this is the first interface which is added, * we should load the firmware now. */ retval = rt2x00lib_load_firmware(rt2x00dev); if (retval) return retval; /* * Initialize the device. */ retval = rt2x00lib_initialize(rt2x00dev); if (retval) return retval; rt2x00dev->intf_ap_count = 0; rt2x00dev->intf_sta_count = 0; rt2x00dev->intf_associated = 0; /* Enable the radio */ retval = rt2x00lib_enable_radio(rt2x00dev); if (retval) return retval; set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags); return 0; }
int rt2x00mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf) { struct rt2x00_dev *rt2x00dev = hw->priv; int force_reconfig; /* * Mac80211 might be calling this function while we are trying * to remove the device or perhaps suspending it. */ if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) return 0; /* * Check if we need to disable the radio, * if this is not the case, at least the RX must be disabled. */ if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) { if (!conf->radio_enabled) rt2x00lib_disable_radio(rt2x00dev); else rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF); } /* * When the DEVICE_DIRTY_CONFIG flag is set, the device has recently * been started and the configuration must be forced upon the hardware. * Otherwise registers will not be intialized correctly and could * result in non-working hardware because essential registers aren't * initialized. */ force_reconfig = __test_and_clear_bit(DEVICE_DIRTY_CONFIG, &rt2x00dev->flags); rt2x00lib_config(rt2x00dev, conf, force_reconfig); /* * Reenable RX only if the radio should be on. */ if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON); else if (conf->radio_enabled) return rt2x00lib_enable_radio(rt2x00dev); return 0; }
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)) 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; }