Skip to content

Commit

Permalink
wlcore: change the wait for event mechanism
Browse files Browse the repository at this point in the history
wlcore needs to wait for certain events for example
for roc complete event. Usually the events are received
from the FW very fast, therefore wlcore can poll with
a short delay and if after a second the event was
not received yet poll with a long (1-5 msec) delay.

This implementation is similar to the sending of
commands to the FW.

Empirically the change reduced the wait for roc event
from ~10-40msec to 100s of usecs.

[replace udelay/msleep with usleep_range - Arik]

Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
  • Loading branch information
Yoni Divinsky authored and John W. Linville committed Jul 10, 2012
1 parent c24ec83 commit c45ee4f
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/net/wireless/ti/wlcore/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include "hw_ops.h"

#define WL1271_CMD_FAST_POLL_COUNT 50
#define WL1271_WAIT_EVENT_FAST_POLL_COUNT 20

/*
* send command to firmware
Expand Down Expand Up @@ -138,6 +139,7 @@ static int wl1271_cmd_wait_for_event_or_timeout(struct wl1271 *wl,
u32 *events_vector;
u32 event;
unsigned long timeout_time;
u16 poll_count = 0;
int ret = 0;

*timeout = false;
Expand All @@ -156,7 +158,11 @@ static int wl1271_cmd_wait_for_event_or_timeout(struct wl1271 *wl,
goto out;
}

msleep(1);
poll_count++;
if (poll_count < WL1271_WAIT_EVENT_FAST_POLL_COUNT)
usleep_range(50, 51);
else
usleep_range(1000, 5000);

/* read from both event fields */
ret = wlcore_read(wl, wl->mbox_ptr[0], events_vector,
Expand Down

0 comments on commit c45ee4f

Please sign in to comment.