Пример #1
0
/*
 * precondition: perimeter lock has been acquired
 */
void wl_free_timer(struct wl_info *wl, struct wl_timer *t)
{
	struct wl_timer *tmp;

	/* delete the timer in case it is active */
	wl_del_timer(wl, t);

	if (wl->timers == t) {
		wl->timers = wl->timers->next;
#ifdef BCMDBG
		kfree(t->name);
#endif
		kfree(t);
		return;

	}

	tmp = wl->timers;
	while (tmp) {
		if (tmp->next == t) {
			tmp->next = t->next;
#ifdef BCMDBG
			kfree(t->name);
#endif
			kfree(t);
			return;
		}
		tmp = tmp->next;
	}

}
Пример #2
0
int wlc_eventq_detach(wlc_eventq_t *eq)
{
	/* Clean up pending events */
	wlc_eventq_down(eq);

	if (eq->timer) {
		if (eq->tpending) {
			wl_del_timer(eq->wl, eq->timer);
			eq->tpending = false;
		}
		wl_free_timer(eq->wl, eq->timer);
		eq->timer = NULL;
	}

	ASSERT(wlc_eventq_avail(eq) == false);
	kfree(eq);
	return 0;
}
Пример #3
0
int wlc_eventq_down(wlc_eventq_t *eq)
{
	int callbacks = 0;
	if (eq->tpending && !eq->workpending) {
		if (!wl_del_timer(eq->wl, eq->timer))
			callbacks++;

		ASSERT(wlc_eventq_avail(eq) == true);
		ASSERT(eq->workpending == false);
		eq->workpending = true;
		if (eq->cb)
			eq->cb(eq->wlc);

		ASSERT(eq->workpending == true);
		eq->workpending = false;
		eq->tpending = false;
	} else {
		ASSERT(eq->workpending || wlc_eventq_avail(eq) == false);
	}
	return callbacks;
}
Пример #4
0
bool wlapi_del_timer(wlc_phy_shim_info_t *physhim, struct wlapi_timer *t)
{
	return wl_del_timer(physhim->wl, (struct wl_timer *)t);
}