root/drivers/accel/amdxdna/amdxdna_mailbox_helper.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2023-2024, Advanced Micro Devices, Inc.
 */

#ifndef _AMDXDNA_MAILBOX_HELPER_H
#define _AMDXDNA_MAILBOX_HELPER_H

#define TX_TIMEOUT 2000 /* milliseconds */
#define RX_TIMEOUT 5000 /* milliseconds */

struct amdxdna_dev;

struct xdna_notify {
        struct completion       comp;
        u32                     *data;
        size_t                  size;
        int                     error;
        u32                     *status;
};

#define DECLARE_XDNA_MSG_COMMON(name, op, s)                            \
        struct name##_req       req = { 0 };                            \
        struct name##_resp      resp = { .status = s };                 \
        struct xdna_notify      hdl = {                                 \
                .error = 0,                                             \
                .data = (u32 *)&resp,                                   \
                .size = sizeof(resp),                                   \
                .comp = COMPLETION_INITIALIZER_ONSTACK(hdl.comp),       \
                .status = (u32 *)&resp.status,                          \
        };                                                              \
        struct xdna_mailbox_msg msg = {                                 \
                .send_data = (u8 *)&req,                                \
                .send_size = sizeof(req),                               \
                .handle = &hdl,                                         \
                .opcode = op,                                           \
                .notify_cb = xdna_msg_cb,                               \
        }

int xdna_msg_cb(void *handle, void __iomem *data, size_t size);
int xdna_send_msg_wait(struct amdxdna_dev *xdna, struct mailbox_channel *chann,
                       struct xdna_mailbox_msg *msg);

#endif /* _AMDXDNA_MAILBOX_HELPER_H */