at master 5.2 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2/* 3 * Copyright (c) 2024,2025, Intel Corporation 4 * 5 * These are definitions for the mailbox command interface of CXL subsystem. 6 */ 7#ifndef _UAPI_CXL_FEATURES_H_ 8#define _UAPI_CXL_FEATURES_H_ 9 10#include <linux/types.h> 11 12typedef unsigned char __uapi_uuid_t[16]; 13 14#ifdef __KERNEL__ 15#include <linux/uuid.h> 16/* 17 * Note, __uapi_uuid_t is 1-byte aligned on modern compilers and 4-byte 18 * aligned on others. Ensure that __uapi_uuid_t in a struct is placed at 19 * a 4-byte aligned offset, or the structure is packed, to ensure 20 * consistent padding. 21 */ 22static_assert(sizeof(__uapi_uuid_t) == sizeof(uuid_t)); 23#define __uapi_uuid_t uuid_t 24#endif 25 26/* 27 * struct cxl_mbox_get_sup_feats_in - Get Supported Features input 28 * 29 * @count: bytes of Feature data to return in output 30 * @start_idx: index of first requested Supported Feature Entry, 0 based. 31 * @reserved: reserved field, must be 0s. 32 * 33 * Get Supported Features (0x500h) CXL r3.2 8.2.9.6.1 command. 34 * Input block for Get support Feature 35 */ 36struct cxl_mbox_get_sup_feats_in { 37 __le32 count; 38 __le16 start_idx; 39 __u8 reserved[2]; 40} __attribute__ ((__packed__)); 41 42/* CXL spec r3.2 Table 8-87 command effects */ 43#define CXL_CMD_CONFIG_CHANGE_COLD_RESET BIT(0) 44#define CXL_CMD_CONFIG_CHANGE_IMMEDIATE BIT(1) 45#define CXL_CMD_DATA_CHANGE_IMMEDIATE BIT(2) 46#define CXL_CMD_POLICY_CHANGE_IMMEDIATE BIT(3) 47#define CXL_CMD_LOG_CHANGE_IMMEDIATE BIT(4) 48#define CXL_CMD_SECURITY_STATE_CHANGE BIT(5) 49#define CXL_CMD_BACKGROUND BIT(6) 50#define CXL_CMD_BGCMD_ABORT_SUPPORTED BIT(7) 51#define CXL_CMD_EFFECTS_VALID BIT(9) 52#define CXL_CMD_CONFIG_CHANGE_CONV_RESET BIT(10) 53#define CXL_CMD_CONFIG_CHANGE_CXL_RESET BIT(11) 54#define CXL_CMD_EFFECTS_RESERVED GENMASK(15, 12) 55 56/* 57 * struct cxl_feat_entry - Supported Feature Entry 58 * @uuid: UUID of the Feature 59 * @id: id to identify the feature. 0 based 60 * @get_feat_size: max bytes required for Get Feature command for this Feature 61 * @set_feat_size: max bytes required for Set Feature command for this Feature 62 * @flags: attribute flags 63 * @get_feat_ver: Get Feature version 64 * @set_feat_ver: Set Feature version 65 * @effects: Set Feature command effects 66 * @reserved: reserved, must be 0 67 * 68 * CXL spec r3.2 Table 8-109 69 * Get Supported Features Supported Feature Entry 70 */ 71struct cxl_feat_entry { 72 __uapi_uuid_t uuid; 73 __le16 id; 74 __le16 get_feat_size; 75 __le16 set_feat_size; 76 __le32 flags; 77 __u8 get_feat_ver; 78 __u8 set_feat_ver; 79 __le16 effects; 80 __u8 reserved[18]; 81} __attribute__ ((__packed__)); 82 83/* @flags field for 'struct cxl_feat_entry' */ 84#define CXL_FEATURE_F_CHANGEABLE BIT(0) 85#define CXL_FEATURE_F_PERSIST_FW_UPDATE BIT(4) 86#define CXL_FEATURE_F_DEFAULT_SEL BIT(5) 87#define CXL_FEATURE_F_SAVED_SEL BIT(6) 88 89/* 90 * struct cxl_mbox_get_sup_feats_out - Get Supported Features output 91 * @num_entries: number of Supported Feature Entries returned 92 * @supported_feats: number of supported Features 93 * @reserved: reserved, must be 0s. 94 * @ents: Supported Feature Entries array 95 * 96 * CXL spec r3.2 Table 8-108 97 * Get supported Features Output Payload 98 */ 99struct cxl_mbox_get_sup_feats_out { 100 __struct_group(cxl_mbox_get_sup_feats_out_hdr, hdr, /* no attrs */, 101 __le16 num_entries; 102 __le16 supported_feats; 103 __u8 reserved[4]; 104 ); 105 struct cxl_feat_entry ents[] __counted_by_le(num_entries); 106} __attribute__ ((__packed__)); 107 108/* 109 * Get Feature CXL spec r3.2 Spec 8.2.9.6.2 110 */ 111 112/* 113 * struct cxl_mbox_get_feat_in - Get Feature input 114 * @uuid: UUID for Feature 115 * @offset: offset of the first byte in Feature data for output payload 116 * @count: count in bytes of Feature data returned 117 * @selection: 0 current value, 1 default value, 2 saved value 118 * 119 * CXL spec r3.2 section 8.2.9.6.2 Table 8-99 120 */ 121struct cxl_mbox_get_feat_in { 122 __uapi_uuid_t uuid; 123 __le16 offset; 124 __le16 count; 125 __u8 selection; 126} __attribute__ ((__packed__)); 127 128/* 129 * enum cxl_get_feat_selection - selection field of Get Feature input 130 */ 131enum cxl_get_feat_selection { 132 CXL_GET_FEAT_SEL_CURRENT_VALUE, 133 CXL_GET_FEAT_SEL_DEFAULT_VALUE, 134 CXL_GET_FEAT_SEL_SAVED_VALUE, 135 CXL_GET_FEAT_SEL_MAX 136}; 137 138/* 139 * Set Feature CXL spec r3.2 8.2.9.6.3 140 */ 141 142/* 143 * struct cxl_mbox_set_feat_in - Set Features input 144 * @uuid: UUID for Feature 145 * @flags: set feature flags 146 * @offset: byte offset of Feature data to update 147 * @version: Feature version of the data in Feature Data 148 * @rsvd: reserved, must be 0s. 149 * @feat_data: raw byte stream of Features data to update 150 * 151 * CXL spec r3.2 section 8.2.9.6.3 Table 8-101 152 */ 153struct cxl_mbox_set_feat_in { 154 __struct_group(cxl_mbox_set_feat_hdr, hdr, /* no attrs */, 155 __uapi_uuid_t uuid; 156 __le32 flags; 157 __le16 offset; 158 __u8 version; 159 __u8 rsvd[9]; 160 ); 161 __u8 feat_data[]; 162} __packed; 163 164/* 165 * enum cxl_set_feat_flag_data_transfer - Set Feature flags field 166 */ 167enum cxl_set_feat_flag_data_transfer { 168 CXL_SET_FEAT_FLAG_FULL_DATA_TRANSFER = 0, 169 CXL_SET_FEAT_FLAG_INITIATE_DATA_TRANSFER, 170 CXL_SET_FEAT_FLAG_CONTINUE_DATA_TRANSFER, 171 CXL_SET_FEAT_FLAG_FINISH_DATA_TRANSFER, 172 CXL_SET_FEAT_FLAG_ABORT_DATA_TRANSFER, 173 CXL_SET_FEAT_FLAG_DATA_TRANSFER_MAX 174}; 175 176#define CXL_SET_FEAT_FLAG_DATA_TRANSFER_MASK GENMASK(2, 0) 177#define CXL_SET_FEAT_FLAG_DATA_SAVED_ACROSS_RESET BIT(3) 178 179#endif