mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
hw/cxl: Add a switch mailbox CCI function
CXL switch CCIs were added in CXL r3.0. They are a PCI function, identified by class code that provides a CXL mailbox (identical to that previously defined for CXL type 3 memory devices) over which various FM-API commands may be used. Whilst the intent of this feature is enable switch control from a BMC attached to a switch upstream port, it is also useful to allow emulation of this feature on the upstream port connected to a host using the CXL devices as this greatly simplifies testing. Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Message-Id: <20231023160806.13206-7-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
2710d49a7c
commit
4a58330343
7 changed files with 175 additions and 1 deletions
|
@ -211,8 +211,10 @@ void cxl_device_register_block_init(Object *obj, CXLDeviceState *dev,
|
|||
CXLCCI *cci);
|
||||
|
||||
typedef struct CXLType3Dev CXLType3Dev;
|
||||
typedef struct CSWMBCCIDev CSWMBCCIDev;
|
||||
/* Set up default values for the register block */
|
||||
void cxl_device_register_init_t3(CXLType3Dev *ct3d);
|
||||
void cxl_device_register_init_swcci(CSWMBCCIDev *sw);
|
||||
|
||||
/*
|
||||
* CXL 2.0 - 8.2.8.1 including errata F4
|
||||
|
@ -259,6 +261,8 @@ CXL_DEVICE_CAPABILITY_HEADER_REGISTER(MEMORY_DEVICE,
|
|||
CXL_DEVICE_CAP_REG_SIZE * 2)
|
||||
|
||||
void cxl_initialize_mailbox_t3(CXLCCI *cci, DeviceState *d, size_t payload_max);
|
||||
void cxl_initialize_mailbox_swcci(CXLCCI *cci, DeviceState *intf,
|
||||
DeviceState *d, size_t payload_max);
|
||||
void cxl_init_cci(CXLCCI *cci, size_t payload_max);
|
||||
int cxl_process_cci_message(CXLCCI *cci, uint8_t set, uint8_t cmd,
|
||||
size_t len_in, uint8_t *pl_in,
|
||||
|
@ -397,6 +401,17 @@ struct CXLType3Class {
|
|||
uint8_t *data);
|
||||
};
|
||||
|
||||
struct CSWMBCCIDev {
|
||||
PCIDevice parent_obj;
|
||||
PCIDevice *target;
|
||||
CXLComponentState cxl_cstate;
|
||||
CXLDeviceState cxl_dstate;
|
||||
CXLCCI *cci;
|
||||
};
|
||||
|
||||
#define TYPE_CXL_SWITCH_MAILBOX_CCI "cxl-switch-mailbox-cci"
|
||||
OBJECT_DECLARE_TYPE(CSWMBCCIDev, CSWMBCCIClass, CXL_SWITCH_MAILBOX_CCI)
|
||||
|
||||
MemTxResult cxl_type3_read(PCIDevice *d, hwaddr host_addr, uint64_t *data,
|
||||
unsigned size, MemTxAttrs attrs);
|
||||
MemTxResult cxl_type3_write(PCIDevice *d, hwaddr host_addr, uint64_t data,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue