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