| /* Copyright 2015 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| * Consumer interface |
| * |
| * The consumer abstraction allows for code that wants to be able to read from |
| * a queue, and be notified of new additions to the queue, or of requests to |
| * flush (empty) the queue. |
| */ |
| #ifndef __CROS_EC_CONSUMER_H |
| #define __CROS_EC_CONSUMER_H |
| |
| #include "queue.h" |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| struct consumer; |
| struct producer; |
| |
| struct consumer_ops { |
| /* |
| * Inform the consumer that count units were written to the queue. |
| * This gives it the oportunity to read additional units from the queue |
| * or to wake up a task or interrupt to do the same. If a consumer has |
| * no need for this information it can set this to NULL. |
| */ |
| void (*written)(struct consumer const *consumer, size_t count); |
| |
| /* |
| * Flush (read) everything from the associated queue. This call blocks |
| * until the consumer has flushed the queue. |
| */ |
| void (*flush)(struct consumer const *consumer); |
| }; |
| |
| struct consumer { |
| /* |
| * A consumer references the queue that it is reading from. |
| */ |
| struct queue const *queue; |
| |
| struct consumer_ops const *ops; |
| }; |
| |
| #endif /* __CROS_EC_CONSUMER_H */ |