/* * Prepares event to be queued * Schedules the event */ int dhd_deferred_schedule_work(void *workq, void *event_data, u8 event, event_handler_t event_handler, u8 priority) { struct dhd_deferred_wq *deferred_wq = (struct dhd_deferred_wq *) workq; struct dhd_deferred_event_t deferred_event; int status; if (!deferred_wq) { DHD_ERROR(("%s: work queue not initialized \n", __FUNCTION__)); ASSERT(0); return DHD_WQ_STS_UNINITIALIZED; } if (!event || (event >= DHD_MAX_WQ_EVENTS)) { DHD_ERROR(("%s: Unknown event \n", __FUNCTION__)); return DHD_WQ_STS_UNKNOWN_EVENT; } /* * default element size is 1, which can be changed * using kfifo_esize(). Older kernel(FC11) doesn't support * changing element size. For compatibility changing * element size is not prefered */ ASSERT(kfifo_esize(deferred_wq->prio_fifo) == 1); ASSERT(kfifo_esize(deferred_wq->work_fifo) == 1); deferred_event.event = event; deferred_event.event_data = event_data; deferred_event.event_handler = event_handler; if (priority == DHD_WORK_PRIORITY_HIGH) { status = kfifo_in_spinlocked(deferred_wq->prio_fifo, &deferred_event, DEFRD_EVT_SIZE, &deferred_wq->work_lock); } else { status = kfifo_in_spinlocked(deferred_wq->work_fifo, &deferred_event, DEFRD_EVT_SIZE, &deferred_wq->work_lock); } if (!status) { return DHD_WQ_STS_SCHED_FAILED; } schedule_work((struct work_struct *)deferred_wq); return DHD_WQ_STS_OK; }
/** * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt. */ irqreturn_t inv_mpu6050_irq_handler(int irq, void *p) { struct iio_poll_func *pf = p; struct iio_dev *indio_dev = pf->indio_dev; struct inv_mpu6050_state *st = iio_priv(indio_dev); s64 timestamp; timestamp = iio_get_time_ns(); kfifo_in_spinlocked(&st->timestamps, ×tamp, 1, &st->time_stamp_lock); return IRQ_WAKE_THREAD; }
static void tmsi_enqueue_data(struct tmsi_data *dev, const char * buffer, size_t length) { if (length == 0) return; #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,35) kfifo_in_spinlocked(dev->packet_buffer, buffer, length, &dev->buffer_lock); #elif LINUX_VERSION_CODE > KERNEL_VERSION(2,6,32) kfifo_in_locked(dev->packet_buffer, buffer, length, &dev->buffer_lock); #else kfifo_put(dev->packet_buffer, buffer, length); #endif up(dev->fifo_sem); }