1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */ 2769d52efSStephen Warren /* 3769d52efSStephen Warren * Copyright (c) 2016, NVIDIA CORPORATION. 4769d52efSStephen Warren */ 5769d52efSStephen Warren 6769d52efSStephen Warren #ifndef _MAILBOX_UCLASS_H 7769d52efSStephen Warren #define _MAILBOX_UCLASS_H 8769d52efSStephen Warren 9769d52efSStephen Warren /* See mailbox.h for background documentation. */ 10769d52efSStephen Warren 11769d52efSStephen Warren #include <mailbox.h> 12769d52efSStephen Warren 13769d52efSStephen Warren struct udevice; 14769d52efSStephen Warren 15769d52efSStephen Warren /** 16769d52efSStephen Warren * struct mbox_ops - The functions that a mailbox driver must implement. 17769d52efSStephen Warren */ 18769d52efSStephen Warren struct mbox_ops { 19769d52efSStephen Warren /** 20769d52efSStephen Warren * of_xlate - Translate a client's device-tree (OF) mailbox specifier. 21769d52efSStephen Warren * 22769d52efSStephen Warren * The mailbox core calls this function as the first step in 23769d52efSStephen Warren * implementing a client's mbox_get_by_*() call. 24769d52efSStephen Warren * 25769d52efSStephen Warren * If this function pointer is set to NULL, the mailbox core will use 26769d52efSStephen Warren * a default implementation, which assumes #mbox-cells = <1>, and that 27769d52efSStephen Warren * the DT cell contains a simple integer channel ID. 28769d52efSStephen Warren * 29769d52efSStephen Warren * At present, the mailbox API solely supports device-tree. If this 30769d52efSStephen Warren * changes, other xxx_xlate() functions may be added to support those 31769d52efSStephen Warren * other mechanisms. 32769d52efSStephen Warren * 33769d52efSStephen Warren * @chan: The channel to hold the translation result. 34769d52efSStephen Warren * @args: The mailbox specifier values from device tree. 35769d52efSStephen Warren * @return 0 if OK, or a negative error code. 36769d52efSStephen Warren */ 37769d52efSStephen Warren int (*of_xlate)(struct mbox_chan *chan, 385e1ff648SSimon Glass struct ofnode_phandle_args *args); 39769d52efSStephen Warren /** 40769d52efSStephen Warren * request - Request a translated channel. 41769d52efSStephen Warren * 42769d52efSStephen Warren * The mailbox core calls this function as the second step in 43769d52efSStephen Warren * implementing a client's mbox_get_by_*() call, following a successful 44769d52efSStephen Warren * xxx_xlate() call. 45769d52efSStephen Warren * 46769d52efSStephen Warren * @chan: The channel to request; this has been filled in by a 47769d52efSStephen Warren * previoux xxx_xlate() function call. 48769d52efSStephen Warren * @return 0 if OK, or a negative error code. 49769d52efSStephen Warren */ 50769d52efSStephen Warren int (*request)(struct mbox_chan *chan); 51769d52efSStephen Warren /** 52769d52efSStephen Warren * free - Free a previously requested channel. 53769d52efSStephen Warren * 54769d52efSStephen Warren * This is the implementation of the client mbox_free() API. 55769d52efSStephen Warren * 56769d52efSStephen Warren * @chan: The channel to free. 57769d52efSStephen Warren * @return 0 if OK, or a negative error code. 58769d52efSStephen Warren */ 59769d52efSStephen Warren int (*free)(struct mbox_chan *chan); 60769d52efSStephen Warren /** 61769d52efSStephen Warren * send - Send a message over a mailbox channel 62769d52efSStephen Warren * 63769d52efSStephen Warren * @chan: The channel to send to the message to. 64769d52efSStephen Warren * @data: A pointer to the message to send. 65769d52efSStephen Warren * @return 0 if OK, or a negative error code. 66769d52efSStephen Warren */ 67769d52efSStephen Warren int (*send)(struct mbox_chan *chan, const void *data); 68769d52efSStephen Warren /** 69769d52efSStephen Warren * recv - Receive any available message from the channel. 70769d52efSStephen Warren * 71769d52efSStephen Warren * This function does not block. If not message is immediately 72769d52efSStephen Warren * available, the function should return an error. 73769d52efSStephen Warren * 74769d52efSStephen Warren * @chan: The channel to receive to the message from. 75769d52efSStephen Warren * @data: A pointer to the buffer to hold the received message. 76769d52efSStephen Warren * @return 0 if OK, -ENODATA if no message was available, or a negative 77769d52efSStephen Warren * error code. 78769d52efSStephen Warren */ 79769d52efSStephen Warren int (*recv)(struct mbox_chan *chan, void *data); 80769d52efSStephen Warren }; 81769d52efSStephen Warren 82769d52efSStephen Warren #endif 83