/* SPDX-License-Identifier: GPL-2.0 */ /* Marvell Octeon EP (EndPoint) Ethernet Driver * * Copyright (C) 2020 Marvell. * */ #ifndef __OCTEP_CTRL_MBOX_H__ #define __OCTEP_CTRL_MBOX_H__ /* barmem structure * |===========================================| * |Info (16 + 120 + 120 = 256 bytes) | * |-------------------------------------------| * |magic number (8 bytes) | * |bar memory size (4 bytes) | * |reserved (4 bytes) | * |-------------------------------------------| * |host version (8 bytes) | * | low 32 bits | * |host status (8 bytes) | * |host reserved (104 bytes) | * |-------------------------------------------| * |fw version's (8 bytes) | * | min=high 32 bits, max=low 32 bits | * |fw status (8 bytes) | * |fw reserved (104 bytes) | * |===========================================| * |Host to Fw Queue info (16 bytes) | * |-------------------------------------------| * |producer index (4 bytes) | * |consumer index (4 bytes) | * |max element size (4 bytes) | * |reserved (4 bytes) | * |===========================================| * |Fw to Host Queue info (16 bytes) | * |-------------------------------------------| * |producer index (4 bytes) | * |consumer index (4 bytes) | * |max element size (4 bytes) | * |reserved (4 bytes) | * |===========================================| * |Host to Fw Queue ((total size-288/2) bytes)| * |-------------------------------------------| * | | * |===========================================| * |===========================================| * |Fw to Host Queue ((total size-288/2) bytes)| * |-------------------------------------------| * | | * |===========================================| */ #define OCTEP_CTRL_MBOX_MAGIC_NUMBER … /* Valid request message */ #define OCTEP_CTRL_MBOX_MSG_HDR_FLAG_REQ … /* Valid response message */ #define OCTEP_CTRL_MBOX_MSG_HDR_FLAG_RESP … /* Valid notification, no response required */ #define OCTEP_CTRL_MBOX_MSG_HDR_FLAG_NOTIFY … /* Valid custom message */ #define OCTEP_CTRL_MBOX_MSG_HDR_FLAG_CUSTOM … #define OCTEP_CTRL_MBOX_MSG_DESC_MAX … enum octep_ctrl_mbox_status { … }; /* mbox message */ octep_ctrl_mbox_msg_hdr; /* mbox message buffer */ struct octep_ctrl_mbox_msg_buf { … }; /* mbox message */ struct octep_ctrl_mbox_msg { … }; /* Mbox queue */ struct octep_ctrl_mbox_q { … }; struct octep_ctrl_mbox { … }; /* Initialize control mbox. * * @param mbox: non-null pointer to struct octep_ctrl_mbox. * * return value: 0 on success, -errno on failure. */ int octep_ctrl_mbox_init(struct octep_ctrl_mbox *mbox); /* Send mbox message. * * @param mbox: non-null pointer to struct octep_ctrl_mbox. * @param msg: non-null pointer to struct octep_ctrl_mbox_msg. * Caller should fill msg.sz and msg.desc.sz for each message. * * return value: 0 on success, -errno on failure. */ int octep_ctrl_mbox_send(struct octep_ctrl_mbox *mbox, struct octep_ctrl_mbox_msg *msg); /* Retrieve mbox message. * * @param mbox: non-null pointer to struct octep_ctrl_mbox. * @param msg: non-null pointer to struct octep_ctrl_mbox_msg. * Caller should fill msg.sz and msg.desc.sz for each message. * * return value: 0 on success, -errno on failure. */ int octep_ctrl_mbox_recv(struct octep_ctrl_mbox *mbox, struct octep_ctrl_mbox_msg *msg); /* Uninitialize control mbox. * * @param mbox: non-null pointer to struct octep_ctrl_mbox. * * return value: 0 on success, -errno on failure. */ int octep_ctrl_mbox_uninit(struct octep_ctrl_mbox *mbox); #endif /* __OCTEP_CTRL_MBOX_H__ */