cxl: Move cxl feature command structs to user header

In preparation for cxl fwctl enabling, move data structures related to
cxl feature commands to a user header file.

Reviewed-by; Jonathan Cameron <Jonathan.Cameron@huawei.com>

Link: https://patch.msgid.link/r/20250307205648.1021626-3-dave.jiang@intel.com
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Li Ming <ming.li@zohomail.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
Dave Jiang 2025-03-07 13:55:32 -07:00 committed by Jason Gunthorpe
parent 858ce2f56b
commit 9b8e73cdb1
2 changed files with 170 additions and 111 deletions

View file

@ -5,6 +5,7 @@
#include <linux/uuid.h>
#include <linux/fwctl.h>
#include <uapi/cxl/features.h>
/* Feature UUIDs used by the kernel */
#define CXL_FEAT_PATROL_SCRUB_UUID \
@ -46,117 +47,6 @@ enum cxl_features_capability {
CXL_FEATURES_RW,
};
/* Get Supported Features (0x500h) CXL r3.2 8.2.9.6.1 */
struct cxl_mbox_get_sup_feats_in {
__le32 count;
__le16 start_idx;
u8 reserved[2];
} __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)
/*
* 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];
} __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)
/*
* 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);
} __packed;
/*
* Get Feature CXL spec r3.2 Spec 8.2.9.6.2
*/
/*
* Get Feature input payload
* 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;
} __packed;
/* Selection field for 'struct cxl_mbox_get_feat_in' */
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
*/
/*
* Set Feature input payload
* 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;
/* 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)
/**
* struct cxl_features_state - The Features state for the device
* @cxlds: Pointer to CXL device state

169
include/uapi/cxl/features.h Normal file
View file

@ -0,0 +1,169 @@
/* 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>
#ifndef __KERNEL__
#include <uuid/uuid.h>
#else
#include <linux/uuid.h>
#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)
/*
* 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