]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
6238935d SW |
2 | /* |
3 | * Copyright (c) 2016, NVIDIA CORPORATION. | |
6238935d SW |
4 | */ |
5 | ||
6 | #ifndef _MAILBOX_UCLASS_H | |
7 | #define _MAILBOX_UCLASS_H | |
8 | ||
769d52ef | 9 | /* See mailbox.h for background documentation. */ |
6238935d | 10 | |
769d52ef | 11 | #include <mailbox.h> |
6238935d SW |
12 | |
13 | struct udevice; | |
14 | ||
15 | /** | |
16 | * struct mbox_ops - The functions that a mailbox driver must implement. | |
17 | */ | |
18 | struct mbox_ops { | |
19 | /** | |
20 | * of_xlate - Translate a client's device-tree (OF) mailbox specifier. | |
21 | * | |
22 | * The mailbox core calls this function as the first step in | |
23 | * implementing a client's mbox_get_by_*() call. | |
24 | * | |
25 | * If this function pointer is set to NULL, the mailbox core will use | |
26 | * a default implementation, which assumes #mbox-cells = <1>, and that | |
27 | * the DT cell contains a simple integer channel ID. | |
28 | * | |
29 | * At present, the mailbox API solely supports device-tree. If this | |
30 | * changes, other xxx_xlate() functions may be added to support those | |
31 | * other mechanisms. | |
32 | * | |
33 | * @chan: The channel to hold the translation result. | |
34 | * @args: The mailbox specifier values from device tree. | |
35 | * @return 0 if OK, or a negative error code. | |
36 | */ | |
37 | int (*of_xlate)(struct mbox_chan *chan, | |
5e1ff648 | 38 | struct ofnode_phandle_args *args); |
6238935d SW |
39 | /** |
40 | * request - Request a translated channel. | |
41 | * | |
42 | * The mailbox core calls this function as the second step in | |
43 | * implementing a client's mbox_get_by_*() call, following a successful | |
44 | * xxx_xlate() call. | |
45 | * | |
46 | * @chan: The channel to request; this has been filled in by a | |
47 | * previoux xxx_xlate() function call. | |
48 | * @return 0 if OK, or a negative error code. | |
49 | */ | |
50 | int (*request)(struct mbox_chan *chan); | |
51 | /** | |
cc92c3cc | 52 | * rfree - Free a previously requested channel. |
6238935d SW |
53 | * |
54 | * This is the implementation of the client mbox_free() API. | |
55 | * | |
56 | * @chan: The channel to free. | |
57 | * @return 0 if OK, or a negative error code. | |
58 | */ | |
cc92c3cc | 59 | int (*rfree)(struct mbox_chan *chan); |
6238935d SW |
60 | /** |
61 | * send - Send a message over a mailbox channel | |
62 | * | |
63 | * @chan: The channel to send to the message to. | |
64 | * @data: A pointer to the message to send. | |
65 | * @return 0 if OK, or a negative error code. | |
66 | */ | |
67 | int (*send)(struct mbox_chan *chan, const void *data); | |
68 | /** | |
69 | * recv - Receive any available message from the channel. | |
70 | * | |
71 | * This function does not block. If not message is immediately | |
72 | * available, the function should return an error. | |
73 | * | |
74 | * @chan: The channel to receive to the message from. | |
75 | * @data: A pointer to the buffer to hold the received message. | |
76 | * @return 0 if OK, -ENODATA if no message was available, or a negative | |
77 | * error code. | |
78 | */ | |
79 | int (*recv)(struct mbox_chan *chan, void *data); | |
80 | }; | |
81 | ||
82 | #endif |