179 lines · 5.1 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note *//* * Copyright (c) 2024,2025, Intel Corporation * * These are definitions for the mailbox command interface of CXL subsystem. */#ifndef _UAPI_CXL_FEATURES_H_#define _UAPI_CXL_FEATURES_H_ #include <linux/types.h> typedef unsigned char __uapi_uuid_t[16]; #ifdef __KERNEL__#include <linux/uuid.h>/* * Note, __uapi_uuid_t is 1-byte aligned on modern compilers and 4-byte * aligned on others. Ensure that __uapi_uuid_t in a struct is placed at * a 4-byte aligned offset, or the structure is packed, to ensure * consistent padding. */static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t));#define __uapi_uuid_t uuid_t#endif /* * struct cxl_mbox_get_sup_feats_in - Get Supported Features input * * @count: bytes of Feature data to return in output * @start_idx: index of first requested Supported Feature Entry, 0 based. * @reserved: reserved field, must be 0s. * * Get Supported Features (0x500h) CXL r3.2 8.2.9.6.1 command. * Input block for Get support Feature */struct cxl_mbox_get_sup_feats_in {	__le32 count;	__le16 start_idx;	__u8 reserved[2];} __attribute__ ((__packed__)); /* CXL spec r3.2 Table 8-87 command effects */#define CXL_CMD_CONFIG_CHANGE_COLD_RESET	BIT(0)#define CXL_CMD_CONFIG_CHANGE_IMMEDIATE		BIT(1)#define CXL_CMD_DATA_CHANGE_IMMEDIATE		BIT(2)#define CXL_CMD_POLICY_CHANGE_IMMEDIATE		BIT(3)#define CXL_CMD_LOG_CHANGE_IMMEDIATE		BIT(4)#define CXL_CMD_SECURITY_STATE_CHANGE		BIT(5)#define CXL_CMD_BACKGROUND			BIT(6)#define CXL_CMD_BGCMD_ABORT_SUPPORTED		BIT(7)#define CXL_CMD_EFFECTS_VALID			BIT(9)#define CXL_CMD_CONFIG_CHANGE_CONV_RESET	BIT(10)#define CXL_CMD_CONFIG_CHANGE_CXL_RESET		BIT(11)#define CXL_CMD_EFFECTS_RESERVED		GENMASK(15, 12) /* * struct cxl_feat_entry - Supported Feature Entry * @uuid: UUID of the Feature * @id: id to identify the feature. 0 based * @get_feat_size: max bytes required for Get Feature command for this Feature * @set_feat_size: max bytes required for Set Feature command for this Feature * @flags: attribute flags * @get_feat_ver: Get Feature version * @set_feat_ver: Set Feature version * @effects: Set Feature command effects * @reserved: reserved, must be 0 * * CXL spec r3.2 Table 8-109 * Get Supported Features Supported Feature Entry */struct cxl_feat_entry {	__uapi_uuid_t uuid;	__le16 id;	__le16 get_feat_size;	__le16 set_feat_size;	__le32 flags;	__u8 get_feat_ver;	__u8 set_feat_ver;	__le16 effects;	__u8 reserved[18];} __attribute__ ((__packed__)); /* @flags field for 'struct cxl_feat_entry' */#define CXL_FEATURE_F_CHANGEABLE		BIT(0)#define CXL_FEATURE_F_PERSIST_FW_UPDATE		BIT(4)#define CXL_FEATURE_F_DEFAULT_SEL		BIT(5)#define CXL_FEATURE_F_SAVED_SEL			BIT(6) /* * struct cxl_mbox_get_sup_feats_out - Get Supported Features output * @num_entries: number of Supported Feature Entries returned * @supported_feats: number of supported Features * @reserved: reserved, must be 0s. * @ents: Supported Feature Entries array * * CXL spec r3.2 Table 8-108 * Get supported Features Output Payload */struct cxl_mbox_get_sup_feats_out {	__struct_group(cxl_mbox_get_sup_feats_out_hdr, hdr, /* no attrs */,		__le16 num_entries;		__le16 supported_feats;		__u8 reserved[4];	);	struct cxl_feat_entry ents[] __counted_by_le(num_entries);} __attribute__ ((__packed__)); /* * Get Feature CXL spec r3.2 Spec 8.2.9.6.2 */ /* * struct cxl_mbox_get_feat_in - Get Feature input * @uuid: UUID for Feature * @offset: offset of the first byte in Feature data for output payload * @count: count in bytes of Feature data returned * @selection: 0 current value, 1 default value, 2 saved value * * CXL spec r3.2 section 8.2.9.6.2 Table 8-99 */struct cxl_mbox_get_feat_in {	__uapi_uuid_t uuid;	__le16 offset;	__le16 count;	__u8 selection;} __attribute__ ((__packed__)); /* * enum cxl_get_feat_selection - selection field of Get Feature input */enum cxl_get_feat_selection {	CXL_GET_FEAT_SEL_CURRENT_VALUE,	CXL_GET_FEAT_SEL_DEFAULT_VALUE,	CXL_GET_FEAT_SEL_SAVED_VALUE,	CXL_GET_FEAT_SEL_MAX}; /* * Set Feature CXL spec r3.2  8.2.9.6.3 */ /* * struct cxl_mbox_set_feat_in - Set Features input * @uuid: UUID for Feature * @flags: set feature flags * @offset: byte offset of Feature data to update * @version: Feature version of the data in Feature Data * @rsvd: reserved, must be 0s. * @feat_data: raw byte stream of Features data to update * * CXL spec r3.2 section 8.2.9.6.3 Table 8-101 */struct cxl_mbox_set_feat_in {	__struct_group(cxl_mbox_set_feat_hdr, hdr, /* no attrs */,		__uapi_uuid_t uuid;		__le32 flags;		__le16 offset;		__u8 version;		__u8 rsvd[9];	);	__u8 feat_data[];}  __packed; /* * enum cxl_set_feat_flag_data_transfer - Set Feature flags field */enum cxl_set_feat_flag_data_transfer {	CXL_SET_FEAT_FLAG_FULL_DATA_TRANSFER = 0,	CXL_SET_FEAT_FLAG_INITIATE_DATA_TRANSFER,	CXL_SET_FEAT_FLAG_CONTINUE_DATA_TRANSFER,	CXL_SET_FEAT_FLAG_FINISH_DATA_TRANSFER,	CXL_SET_FEAT_FLAG_ABORT_DATA_TRANSFER,	CXL_SET_FEAT_FLAG_DATA_TRANSFER_MAX}; #define CXL_SET_FEAT_FLAG_DATA_TRANSFER_MASK		GENMASK(2, 0)#define CXL_SET_FEAT_FLAG_DATA_SAVED_ACROSS_RESET	BIT(3) #endif