/* 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 #ifndef __KERNEL__ #include #else #include #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 { 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 { 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 */, 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