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