220 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2/*3 * Copyright © 2016 Intel Corporation4 *5 * Authors:6 * Rafael Antognolli <rafael.antognolli@intel.com>7 * Scott Bauer <scott.bauer@intel.com>8 */9 10#ifndef _UAPI_SED_OPAL_H11#define _UAPI_SED_OPAL_H12 13#include <linux/types.h>14 15#define OPAL_KEY_MAX 25616#define OPAL_MAX_LRS 917 18enum opal_mbr {19 OPAL_MBR_ENABLE = 0x0,20 OPAL_MBR_DISABLE = 0x01,21};22 23enum opal_mbr_done_flag {24 OPAL_MBR_NOT_DONE = 0x0,25 OPAL_MBR_DONE = 0x0126};27 28enum opal_user {29 OPAL_ADMIN1 = 0x0,30 OPAL_USER1 = 0x01,31 OPAL_USER2 = 0x02,32 OPAL_USER3 = 0x03,33 OPAL_USER4 = 0x04,34 OPAL_USER5 = 0x05,35 OPAL_USER6 = 0x06,36 OPAL_USER7 = 0x07,37 OPAL_USER8 = 0x08,38 OPAL_USER9 = 0x09,39};40 41enum opal_lock_state {42 OPAL_RO = 0x01, /* 0001 */43 OPAL_RW = 0x02, /* 0010 */44 OPAL_LK = 0x04, /* 0100 */45};46 47enum opal_lock_flags {48 /* IOC_OPAL_SAVE will also store the provided key for locking */49 OPAL_SAVE_FOR_LOCK = 0x01,50};51 52enum opal_key_type {53 OPAL_INCLUDED = 0, /* key[] is the key */54 OPAL_KEYRING, /* key is in keyring */55};56 57struct opal_key {58 __u8 lr;59 __u8 key_len;60 __u8 key_type;61 __u8 __align[5];62 __u8 key[OPAL_KEY_MAX];63};64 65enum opal_revert_lsp_opts {66 OPAL_PRESERVE = 0x01,67};68 69struct opal_lr_act {70 struct opal_key key;71 __u32 sum;72 __u8 num_lrs;73 __u8 lr[OPAL_MAX_LRS];74 __u8 align[2]; /* Align to 8 byte boundary */75};76 77struct opal_session_info {78 __u32 sum;79 __u32 who;80 struct opal_key opal_key;81};82 83struct opal_user_lr_setup {84 __u64 range_start;85 __u64 range_length;86 __u32 RLE; /* Read Lock enabled */87 __u32 WLE; /* Write Lock Enabled */88 struct opal_session_info session;89};90 91struct opal_lr_status {92 struct opal_session_info session;93 __u64 range_start;94 __u64 range_length;95 __u32 RLE; /* Read Lock enabled */96 __u32 WLE; /* Write Lock Enabled */97 __u32 l_state;98 __u8 align[4];99};100 101struct opal_lock_unlock {102 struct opal_session_info session;103 __u32 l_state;104 __u16 flags;105 __u8 __align[2];106};107 108struct opal_new_pw {109 struct opal_session_info session;110 111 /* When we're not operating in sum, and we first set112 * passwords we need to set them via ADMIN authority.113 * After passwords are changed, we can set them via,114 * User authorities.115 * Because of this restriction we need to know about116 * Two different users. One in 'session' which we will use117 * to start the session and new_userr_pw as the user we're118 * chaning the pw for.119 */120 struct opal_session_info new_user_pw;121};122 123struct opal_mbr_data {124 struct opal_key key;125 __u8 enable_disable;126 __u8 __align[7];127};128 129struct opal_mbr_done {130 struct opal_key key;131 __u8 done_flag;132 __u8 __align[7];133};134 135struct opal_shadow_mbr {136 struct opal_key key;137 const __u64 data;138 __u64 offset;139 __u64 size;140};141 142/* Opal table operations */143enum opal_table_ops {144 OPAL_READ_TABLE,145 OPAL_WRITE_TABLE,146};147 148#define OPAL_UID_LENGTH 8149struct opal_read_write_table {150 struct opal_key key;151 const __u64 data;152 const __u8 table_uid[OPAL_UID_LENGTH];153 __u64 offset;154 __u64 size;155#define OPAL_TABLE_READ (1 << OPAL_READ_TABLE)156#define OPAL_TABLE_WRITE (1 << OPAL_WRITE_TABLE)157 __u64 flags;158 __u64 priv;159};160 161#define OPAL_FL_SUPPORTED 0x00000001162#define OPAL_FL_LOCKING_SUPPORTED 0x00000002163#define OPAL_FL_LOCKING_ENABLED 0x00000004164#define OPAL_FL_LOCKED 0x00000008165#define OPAL_FL_MBR_ENABLED 0x00000010166#define OPAL_FL_MBR_DONE 0x00000020167#define OPAL_FL_SUM_SUPPORTED 0x00000040168 169struct opal_status {170 __u32 flags;171 __u32 reserved;172};173 174/*175 * Geometry Reporting per TCG Storage OPAL SSC176 * section 3.1.1.4177 */178struct opal_geometry {179 __u8 align;180 __u32 logical_block_size;181 __u64 alignment_granularity;182 __u64 lowest_aligned_lba;183 __u8 __align[3];184};185 186struct opal_discovery {187 __u64 data;188 __u64 size;189};190 191struct opal_revert_lsp {192 struct opal_key key;193 __u32 options;194 __u32 __pad;195};196 197#define IOC_OPAL_SAVE _IOW('p', 220, struct opal_lock_unlock)198#define IOC_OPAL_LOCK_UNLOCK _IOW('p', 221, struct opal_lock_unlock)199#define IOC_OPAL_TAKE_OWNERSHIP _IOW('p', 222, struct opal_key)200#define IOC_OPAL_ACTIVATE_LSP _IOW('p', 223, struct opal_lr_act)201#define IOC_OPAL_SET_PW _IOW('p', 224, struct opal_new_pw)202#define IOC_OPAL_ACTIVATE_USR _IOW('p', 225, struct opal_session_info)203#define IOC_OPAL_REVERT_TPR _IOW('p', 226, struct opal_key)204#define IOC_OPAL_LR_SETUP _IOW('p', 227, struct opal_user_lr_setup)205#define IOC_OPAL_ADD_USR_TO_LR _IOW('p', 228, struct opal_lock_unlock)206#define IOC_OPAL_ENABLE_DISABLE_MBR _IOW('p', 229, struct opal_mbr_data)207#define IOC_OPAL_ERASE_LR _IOW('p', 230, struct opal_session_info)208#define IOC_OPAL_SECURE_ERASE_LR _IOW('p', 231, struct opal_session_info)209#define IOC_OPAL_PSID_REVERT_TPR _IOW('p', 232, struct opal_key)210#define IOC_OPAL_MBR_DONE _IOW('p', 233, struct opal_mbr_done)211#define IOC_OPAL_WRITE_SHADOW_MBR _IOW('p', 234, struct opal_shadow_mbr)212#define IOC_OPAL_GENERIC_TABLE_RW _IOW('p', 235, struct opal_read_write_table)213#define IOC_OPAL_GET_STATUS _IOR('p', 236, struct opal_status)214#define IOC_OPAL_GET_LR_STATUS _IOW('p', 237, struct opal_lr_status)215#define IOC_OPAL_GET_GEOMETRY _IOR('p', 238, struct opal_geometry)216#define IOC_OPAL_DISCOVERY _IOW('p', 239, struct opal_discovery)217#define IOC_OPAL_REVERT_LSP _IOW('p', 240, struct opal_revert_lsp)218 219#endif /* _UAPI_SED_OPAL_H */220