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