1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2016, NVIDIA CORPORATION. 4 */ 5 6 #ifndef _MAILBOX_UCLASS_H 7 #define _MAILBOX_UCLASS_H 8 9 /* See mailbox.h for background documentation. */ 10 11 #include <mailbox.h> 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, 38 struct ofnode_phandle_args *args); 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 /** 52 * rfree - Free a previously requested channel. 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 */ 59 int (*rfree)(struct mbox_chan *chan); 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 83