/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright ( C ) 2022 - 2024 , Advanced Micro Devices , Inc .
*/
#ifndef _AIE2_MAILBOX_H_
#define _AIE2_MAILBOX_H_
struct mailbox;
struct mailbox_channel;
/*
* xdna_mailbox_msg - message struct
*
* @ opcode : opcode for firmware
* @ handle : handle used for the notify callback
* @ notify_cb : callback function to notify the sender when there is response
* @ send_data : pointing to sending data
* @ send_size : size of the sending data
*
* The mailbox will split the sending data in to multiple firmware message if
* the size of the data is too big . This is transparent to the sender . The
* sender will receive one notification .
*/
struct xdna_mailbox_msg {
u32 opcode;
void *handle;
int (*notify_cb)(void *handle, void __iomem *data, size_t size);
u8 *send_data;
size_t send_size;
};
/*
* xdna_mailbox_res - mailbox hardware resource
*
* @ ringbuf_base : ring buffer base address
* @ ringbuf_size : ring buffer size
* @ mbox_base : mailbox base address
* @ mbox_size : mailbox size
*/
struct xdna_mailbox_res {
void __iomem *ringbuf_base;
size_t ringbuf_size;
void __iomem *mbox_base;
size_t mbox_size;
const char *name;
};
/*
* xdna_mailbox_chann_res - resources
*
* @ rb_start_addr : ring buffer start address
* @ rb_size : ring buffer size
* @ mb_head_ptr_reg : mailbox head pointer register
* @ mb_tail_ptr_reg : mailbox tail pointer register
*/
struct xdna_mailbox_chann_res {
u32 rb_start_addr;
u32 rb_size;
u32 mb_head_ptr_reg;
u32 mb_tail_ptr_reg;
};
/*
* xdna_mailbox_create ( ) - - create mailbox subsystem and initialize
*
* @ ddev : device pointer
* @ res : SRAM and mailbox resources
*
* Return : If success , return a handle of mailbox subsystem .
* Otherwise , return NULL pointer .
*/
struct mailbox *xdnam_mailbox_create(struct drm_device *ddev,
const struct xdna_mailbox_res *res);
/*
* xdna_mailbox_create_channel ( ) - - Create a mailbox channel instance
*
* @ mailbox : the handle return from xdna_mailbox_create ( )
* @ x2i : host to firmware mailbox resources
* @ i2x : firmware to host mailbox resources
* @ xdna_mailbox_intr_reg : register addr of MSI - X interrupt
* @ mb_irq : Linux IRQ number associated with mailbox MSI - X interrupt vector index
*
* Return : If success , return a handle of mailbox channel . Otherwise , return NULL .
*/
struct mailbox_channel *
xdna_mailbox_create_channel(struct mailbox *mailbox,
const struct xdna_mailbox_chann_res *x2i,
const struct xdna_mailbox_chann_res *i2x,
u32 xdna_mailbox_intr_reg,
int mb_irq);
/*
* xdna_mailbox_destroy_channel ( ) - - destroy mailbox channel
*
* @ mailbox_chann : the handle return from xdna_mailbox_create_channel ( )
*
* Return : if success , return 0 . otherwise return error code
*/
int xdna_mailbox_destroy_channel(struct mailbox_channel *mailbox_chann);
/*
* xdna_mailbox_stop_channel ( ) - - stop mailbox channel
*
* @ mailbox_chann : the handle return from xdna_mailbox_create_channel ( )
*
* Return : if success , return 0 . otherwise return error code
*/
void xdna_mailbox_stop_channel(struct mailbox_channel *mailbox_chann);
/*
* xdna_mailbox_send_msg ( ) - - Send a message
*
* @ mailbox_chann : Mailbox channel handle
* @ msg : message struct for message information
* @ tx_timeout : the timeout value for sending the message in ms .
*
* Return : If success return 0 , otherwise , return error code
*/
int xdna_mailbox_send_msg(struct mailbox_channel *mailbox_chann,
const struct xdna_mailbox_msg *msg, u64 tx_timeout);
#endif /* _AIE2_MAILBOX_ */
Messung V0.5 in Prozent C=95 H=95 G=94
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*Bot Zugriff