| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /* 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
|