zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

sed-opal.h (5413B) - Raw


      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 /*
      3  * Copyright © 2016 Intel Corporation
      4  *
      5  * Authors:
      6  *    Rafael Antognolli <rafael.antognolli@intel.com>
      7  *    Scott  Bauer      <scott.bauer@intel.com>
      8  */
      9 
     10 #ifndef _SED_OPAL_H
     11 #define _SED_OPAL_H
     12 
     13 #include <linux/types.h>
     14 
     15 #define OPAL_KEY_MAX 256
     16 #define OPAL_MAX_LRS 9
     17 
     18 enum opal_mbr {
     19 	OPAL_MBR_ENABLE = 0x0,
     20 	OPAL_MBR_DISABLE = 0x01,
     21 };
     22 
     23 enum opal_mbr_done_flag {
     24 	OPAL_MBR_NOT_DONE = 0x0,
     25 	OPAL_MBR_DONE = 0x01
     26 };
     27 
     28 enum 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 
     41 enum opal_lock_state {
     42 	OPAL_RO = 0x01, /* 0001 */
     43 	OPAL_RW = 0x02, /* 0010 */
     44 	OPAL_LK = 0x04, /* 0100 */
     45 };
     46 
     47 enum opal_lock_flags {
     48 	/* IOC_OPAL_SAVE will also store the provided key for locking */
     49 	OPAL_SAVE_FOR_LOCK = 0x01,
     50 };
     51 
     52 enum opal_key_type {
     53 	OPAL_INCLUDED = 0,	/* key[] is the key */
     54 	OPAL_KEYRING,		/* key is in keyring */
     55 };
     56 
     57 struct 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 
     65 enum opal_revert_lsp_opts {
     66 	OPAL_PRESERVE = 0x01,
     67 };
     68 
     69 struct 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 
     77 struct opal_session_info {
     78 	__u32 sum;
     79 	__u32 who;
     80 	struct opal_key opal_key;
     81 };
     82 
     83 struct 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 
     91 struct 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 
    101 struct opal_lock_unlock {
    102 	struct opal_session_info session;
    103 	__u32 l_state;
    104 	__u16 flags;
    105 	__u8 __align[2];
    106 };
    107 
    108 struct opal_new_pw {
    109 	struct opal_session_info session;
    110 
    111 	/* When we're not operating in sum, and we first set
    112 	 * 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 about
    116 	 * Two different users. One in 'session' which we will use
    117 	 * to start the session and new_userr_pw as the user we're
    118 	 * chaning the pw for.
    119 	 */
    120 	struct opal_session_info new_user_pw;
    121 };
    122 
    123 struct opal_mbr_data {
    124 	struct opal_key key;
    125 	__u8 enable_disable;
    126 	__u8 __align[7];
    127 };
    128 
    129 struct opal_mbr_done {
    130 	struct opal_key key;
    131 	__u8 done_flag;
    132 	__u8 __align[7];
    133 };
    134 
    135 struct opal_shadow_mbr {
    136 	struct opal_key key;
    137 	const __u64 data;
    138 	__u64 offset;
    139 	__u64 size;
    140 };
    141 
    142 /* Opal table operations */
    143 enum opal_table_ops {
    144 	OPAL_READ_TABLE,
    145 	OPAL_WRITE_TABLE,
    146 };
    147 
    148 #define OPAL_UID_LENGTH 8
    149 struct 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		0x00000001
    162 #define OPAL_FL_LOCKING_SUPPORTED	0x00000002
    163 #define OPAL_FL_LOCKING_ENABLED		0x00000004
    164 #define OPAL_FL_LOCKED			0x00000008
    165 #define OPAL_FL_MBR_ENABLED		0x00000010
    166 #define OPAL_FL_MBR_DONE		0x00000020
    167 #define OPAL_FL_SUM_SUPPORTED		0x00000040
    168 
    169 struct opal_status {
    170 	__u32 flags;
    171 	__u32 reserved;
    172 };
    173 
    174 /*
    175  * Geometry Reporting per TCG Storage OPAL SSC
    176  * section 3.1.1.4
    177  */
    178 struct 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 
    186 struct opal_discovery {
    187 	__u64 data;
    188 	__u64 size;
    189 };
    190 
    191 struct 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 #define IOC_OPAL_SET_SID_PW         _IOW('p', 241, struct opal_new_pw)
    219 
    220 #endif /* _SED_OPAL_H */