1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Copyright(c) 2024 Intel Corporation. */
3 #ifndef __CXL_MBOX_H__
4 #define __CXL_MBOX_H__
5 #include <linux/rcuwait.h>
6 
7 struct cxl_mbox_cmd;
8 
9 /**
10  * struct cxl_mailbox - context for CXL mailbox operations
11  * @host: device that hosts the mailbox
12  * @payload_size: Size of space for payload
13  *                (CXL 3.1 8.2.8.4.3 Mailbox Capabilities Register)
14  * @mbox_mutex: mutex protects device mailbox and firmware
15  * @mbox_wait: rcuwait for mailbox
16  * @mbox_send: @dev specific transport for transmitting mailbox commands
17  */
18 struct cxl_mailbox {
19 	struct device *host;
20 	size_t payload_size;
21 	struct mutex mbox_mutex; /* lock to protect mailbox context */
22 	struct rcuwait mbox_wait;
23 	int (*mbox_send)(struct cxl_mailbox *cxl_mbox, struct cxl_mbox_cmd *cmd);
24 };
25 
26 int cxl_mailbox_init(struct cxl_mailbox *cxl_mbox, struct device *host);
27 
28 #endif
29