brintos

brintos / linux-shallow public Read only

0
0
Text · 5.2 KiB · d3994b7 Raw
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