summaryrefslogtreecommitdiff
path: root/common/producer.c
blob: 855eb4a6511b5a27c83a44fb1a682e3c762065a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* Copyright (c) 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.
 *
 * Producer methods
 */
#include "consumer.h"
#include "producer.h"

void producer_notify_directly(struct producer const *producer, size_t count)
{
	if (count && producer->ops->read)
		producer->ops->read(producer, count);
}

size_t producer_write_unit(struct producer const *producer, void const *unit)
{
	size_t added = queue_add_unit(producer->queue, unit);

	consumer_notify_directly(producer->consumer, added);

	return added;
}

size_t producer_write_memcpy(struct producer const *producer,
			     void const *units,
			     size_t count,
			     void *(*memcpy)(void *dest,
					     void const *src,
					     size_t n))
{
	size_t added = queue_add_memcpy(producer->queue,
					units,
					count,
					memcpy);

	consumer_notify_directly(producer->consumer, added);

	return added;
}