Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 158825
b: refs/heads/master
c: a70742f
h: refs/heads/master
i:
  158823: ece4e69
v: v3
  • Loading branch information
Samuel Ortiz authored and John W. Linville committed Jul 10, 2009
1 parent 17d171b commit 5ed1dc4
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 16 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: 0c5553b1392dea5ba5ad678790367c1275ed1172
refs/heads/master: a70742f167424bab794ca74b9e99b598b358bb7d
31 changes: 18 additions & 13 deletions trunk/drivers/net/wireless/iwmc3200wifi/commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,28 @@ static int iwm_send_lmac_ptrough_cmd(struct iwm_priv *iwm,
int iwm_send_wifi_if_cmd(struct iwm_priv *iwm, void *payload, u16 payload_size,
bool resp)
{
struct iwm_umac_wifi_if *hdr = (struct iwm_umac_wifi_if *)payload;
struct iwm_udma_wifi_cmd udma_cmd = UDMA_UMAC_INIT;
struct iwm_umac_cmd umac_cmd;
int ret;
u8 oid = hdr->oid;

umac_cmd.id = UMAC_CMD_OPCODE_WIFI_IF_WRAPPER;
umac_cmd.resp = resp;

return iwm_hal_send_umac_cmd(iwm, &udma_cmd, &umac_cmd,
payload, payload_size);
ret = iwm_hal_send_umac_cmd(iwm, &udma_cmd, &umac_cmd,
payload, payload_size);

if (resp) {
ret = wait_event_interruptible_timeout(iwm->wifi_ntfy_queue,
test_and_clear_bit(oid, &iwm->wifi_ntfy[0]),
3 * HZ);

if (!ret)
ret = -EBUSY;
}

return ret;
}

static struct coex_event iwm_sta_xor_prio_tbl[COEX_EVENTS_NUM] =
Expand Down Expand Up @@ -746,14 +760,6 @@ int iwm_send_mlme_profile(struct iwm_priv *iwm)
return ret;
}

/* Wait for the profile to be active */
ret = wait_event_interruptible_timeout(iwm->mlme_queue,
iwm->umac_profile_active == 1,
3 * HZ);
if (!ret)
return -EBUSY;


for (i = 0; i < IWM_NUM_KEYS; i++)
if (iwm->keys[i].in_use) {
int default_key = 0;
Expand All @@ -778,8 +784,8 @@ int iwm_send_mlme_profile(struct iwm_priv *iwm)

int iwm_invalidate_mlme_profile(struct iwm_priv *iwm)
{
int ret;
struct iwm_umac_invalidate_profile invalid;
int ret;

invalid.hdr.oid = UMAC_WIFI_IF_CMD_INVALIDATE_PROFILE;
invalid.hdr.buf_size =
Expand All @@ -793,8 +799,7 @@ int iwm_invalidate_mlme_profile(struct iwm_priv *iwm)
return ret;

ret = wait_event_interruptible_timeout(iwm->mlme_queue,
(iwm->umac_profile_active == 0),
2 * HZ);
(iwm->umac_profile_active == 0), 2 * HZ);
if (!ret)
return -EBUSY;

Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/net/wireless/iwmc3200wifi/iwm.h
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,9 @@ struct iwm_priv {
struct iwm_key keys[IWM_NUM_KEYS];
struct iwm_key *default_key;

DECLARE_BITMAP(wifi_ntfy, WIFI_IF_NTFY_MAX);
wait_queue_head_t wifi_ntfy_queue;

wait_queue_head_t mlme_queue;

struct iw_statistics wstats;
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/net/wireless/iwmc3200wifi/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ int iwm_priv_init(struct iwm_priv *iwm)
INIT_LIST_HEAD(&iwm->pending_notif);
init_waitqueue_head(&iwm->notif_queue);
init_waitqueue_head(&iwm->nonwifi_queue);
init_waitqueue_head(&iwm->wifi_ntfy_queue);
init_waitqueue_head(&iwm->mlme_queue);
memcpy(&iwm->conf, &def_iwm_conf, sizeof(struct iwm_conf));
spin_lock_init(&iwm->tx_credit.lock);
Expand Down
9 changes: 7 additions & 2 deletions trunk/drivers/net/wireless/iwmc3200wifi/rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -993,12 +993,17 @@ static int iwm_ntf_wifi_if_wrapper(struct iwm_priv *iwm, u8 *buf,
(struct iwm_umac_wifi_if *)cmd->buf.payload;

IWM_DBG_NTF(iwm, DBG, "WIFI_IF_WRAPPER cmd is delivered to UMAC: "
"oid is %d\n", hdr->oid);
"oid is 0x%x\n", hdr->oid);

if (hdr->oid <= WIFI_IF_NTFY_MAX) {
set_bit(hdr->oid, &iwm->wifi_ntfy[0]);
wake_up_interruptible(&iwm->wifi_ntfy_queue);
} else
return -EINVAL;

switch (hdr->oid) {
case UMAC_WIFI_IF_CMD_SET_PROFILE:
iwm->umac_profile_active = 1;
wake_up_interruptible(&iwm->mlme_queue);
break;
default:
break;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/net/wireless/iwmc3200wifi/umac.h
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,8 @@ struct iwm_fw_alive_hdr {
#define WIFI_DBG_IF_NTFY_COEX_HANDLE_ENVELOP 0xE8
#define WIFI_DBG_IF_NTFY_COEX_HANDLE_RELEASE_ENVELOP 0xE9

#define WIFI_IF_NTFY_MAX 0xff

/* Notification structures */
struct iwm_umac_notif_wifi_if {
struct iwm_umac_wifi_in_hdr hdr;
Expand Down

0 comments on commit 5ed1dc4

Please sign in to comment.