|
|
@ -107,9 +107,31 @@ typedef enum { |
|
|
|
#define MEI_INIT_WAKELIST(name,queue) \ |
|
|
|
#define MEI_INIT_WAKELIST(name,queue) \ |
|
|
|
init_waitqueue_head(&queue) |
|
|
|
init_waitqueue_head(&queue) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline long |
|
|
|
|
|
|
|
ugly_hack_sleep_on_timeout(wait_queue_head_t *q, long timeout) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
unsigned long flags; |
|
|
|
|
|
|
|
wait_queue_t wait; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
init_waitqueue_entry(&wait, current); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
__set_current_state(TASK_INTERRUPTIBLE); |
|
|
|
|
|
|
|
spin_lock_irqsave(&q->lock, flags); |
|
|
|
|
|
|
|
__add_wait_queue(q, &wait); |
|
|
|
|
|
|
|
spin_unlock(&q->lock); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timeout = schedule_timeout(timeout); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
spin_lock_irq(&q->lock); |
|
|
|
|
|
|
|
__remove_wait_queue(q, &wait); |
|
|
|
|
|
|
|
spin_unlock_irqrestore(&q->lock, flags); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return timeout; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* wait for an event, timeout is measured in ms */ |
|
|
|
/* wait for an event, timeout is measured in ms */ |
|
|
|
#define MEI_WAIT_EVENT_TIMEOUT(ev,timeout)\ |
|
|
|
#define MEI_WAIT_EVENT_TIMEOUT(ev,timeout)\ |
|
|
|
wait_event_interruptible_timeout(ev,0 == 1, timeout * HZ / 1000) |
|
|
|
ugly_hack_sleep_on_timeout(&ev, timeout * HZ / 1000) |
|
|
|
#define MEI_WAKEUP_EVENT(ev)\ |
|
|
|
#define MEI_WAKEUP_EVENT(ev)\ |
|
|
|
wake_up_interruptible(&ev) |
|
|
|
wake_up_interruptible(&ev) |
|
|
|
#endif /* IFX_MEI_BSP */ |
|
|
|
#endif /* IFX_MEI_BSP */ |
|
|
|