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