blob: e66d2e769e93eff389ec2f8e501f86194720bd6d [file] [log] [blame]
/* 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 */