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