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