To avoid sleeping in firmware_get() with bwi mutex held, call
bwi_mac_fw_alloc() at the device attach, not in the interface init.
This commit is contained in:
parent
15692978d7
commit
c803f24b28
@ -101,7 +101,6 @@ static void bwi_mac_opmode_init(struct bwi_mac *);
|
|||||||
static void bwi_mac_hostflags_init(struct bwi_mac *);
|
static void bwi_mac_hostflags_init(struct bwi_mac *);
|
||||||
static void bwi_mac_bss_param_init(struct bwi_mac *);
|
static void bwi_mac_bss_param_init(struct bwi_mac *);
|
||||||
|
|
||||||
static int bwi_mac_fw_alloc(struct bwi_mac *);
|
|
||||||
static void bwi_mac_fw_free(struct bwi_mac *);
|
static void bwi_mac_fw_free(struct bwi_mac *);
|
||||||
static int bwi_mac_fw_load(struct bwi_mac *);
|
static int bwi_mac_fw_load(struct bwi_mac *);
|
||||||
static int bwi_mac_fw_init(struct bwi_mac *);
|
static int bwi_mac_fw_init(struct bwi_mac *);
|
||||||
@ -325,10 +324,6 @@ bwi_mac_init(struct bwi_mac *mac)
|
|||||||
/*
|
/*
|
||||||
* Load and initialize firmwares
|
* Load and initialize firmwares
|
||||||
*/
|
*/
|
||||||
error = bwi_mac_fw_alloc(mac);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
error = bwi_mac_fw_load(mac);
|
error = bwi_mac_fw_load(mac);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
@ -879,7 +874,7 @@ bwi_fwimage_is_valid(struct bwi_softc *sc, const struct firmware *fw,
|
|||||||
/*
|
/*
|
||||||
* XXX Error cleanup
|
* XXX Error cleanup
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
bwi_mac_fw_alloc(struct bwi_mac *mac)
|
bwi_mac_fw_alloc(struct bwi_mac *mac)
|
||||||
{
|
{
|
||||||
struct bwi_softc *sc = mac->mac_sc;
|
struct bwi_softc *sc = mac->mac_sc;
|
||||||
|
@ -57,6 +57,7 @@ void bwi_mac_init_tpctl_11bg(struct bwi_mac *);
|
|||||||
void bwi_mac_dummy_xmit(struct bwi_mac *);
|
void bwi_mac_dummy_xmit(struct bwi_mac *);
|
||||||
void bwi_mac_reset_hwkeys(struct bwi_mac *);
|
void bwi_mac_reset_hwkeys(struct bwi_mac *);
|
||||||
int bwi_mac_config_ps(struct bwi_mac *);
|
int bwi_mac_config_ps(struct bwi_mac *);
|
||||||
|
int bwi_mac_fw_alloc(struct bwi_mac *);
|
||||||
|
|
||||||
uint16_t bwi_memobj_read_2(struct bwi_mac *, uint16_t, uint16_t);
|
uint16_t bwi_memobj_read_2(struct bwi_mac *, uint16_t, uint16_t);
|
||||||
uint32_t bwi_memobj_read_4(struct bwi_mac *, uint16_t, uint16_t);
|
uint32_t bwi_memobj_read_4(struct bwi_mac *, uint16_t, uint16_t);
|
||||||
|
@ -446,6 +446,10 @@ bwi_attach(struct bwi_softc *sc)
|
|||||||
if (error)
|
if (error)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
error = bwi_mac_fw_alloc(mac);
|
||||||
|
if (error)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211);
|
ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211);
|
||||||
if (ifp == NULL) {
|
if (ifp == NULL) {
|
||||||
device_printf(dev, "can not if_alloc()\n");
|
device_printf(dev, "can not if_alloc()\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user