opal_dev
static int parse_and_check_status(struct opal_dev *dev)
static void clear_opal_cmd(struct opal_dev *dev)
static int cmd_start(struct opal_dev *dev, const u8 *uid, const u8 *method)
static int start_opal_session_cont(struct opal_dev *dev)
static void add_suspend_info(struct opal_dev *dev,
static int end_session_cont(struct opal_dev *dev)
static int finalize_and_send(struct opal_dev *dev, cont_fn cont)
static int generic_get_columns(struct opal_dev *dev, const u8 *table,
static int generic_get_column(struct opal_dev *dev, const u8 *table,
static int generic_get_table_info(struct opal_dev *dev, const u8 *table_uid,
static int gen_key(struct opal_dev *dev, void *data)
static int get_active_key_cont(struct opal_dev *dev)
static int get_active_key(struct opal_dev *dev, void *data)
static int generic_table_write_data(struct opal_dev *dev, const u64 data,
static int generic_lr_enable_disable(struct opal_dev *dev,
static inline int enable_global_lr(struct opal_dev *dev, u8 *uid,
static int setup_locking_range(struct opal_dev *dev, void *data)
static int locking_range_status(struct opal_dev *dev, void *data)
static int start_generic_opal_session(struct opal_dev *dev,
static int start_anybodyASP_opal_session(struct opal_dev *dev, void *data)
static int start_SIDASP_opal_session(struct opal_dev *dev, void *data)
static int start_admin1LSP_opal_session(struct opal_dev *dev, void *data)
static int start_PSID_opal_session(struct opal_dev *dev, void *data)
static int start_auth_opal_session(struct opal_dev *dev, void *data)
static int revert_tper(struct opal_dev *dev, void *data)
static int internal_activate_user(struct opal_dev *dev, void *data)
static int revert_lsp(struct opal_dev *dev, void *data)
static int erase_locking_range(struct opal_dev *dev, void *data)
static int set_mbr_done(struct opal_dev *dev, void *data)
static int set_mbr_enable_disable(struct opal_dev *dev, void *data)
static int write_shadow_mbr(struct opal_dev *dev, void *data)
struct opal_dev *dev)
static int set_new_pw(struct opal_dev *dev, void *data)
static int set_sid_cpin_pin(struct opal_dev *dev, void *data)
struct opal_dev *dev,
struct opal_dev *dev,
static int set_lr_boolean_ace(struct opal_dev *dev,
static int add_user_to_lr(struct opal_dev *dev, void *data)
static int add_user_to_lr_ace(struct opal_dev *dev, void *data)
static int lock_unlock_locking_range(struct opal_dev *dev, void *data)
static int lock_unlock_locking_range_sum(struct opal_dev *dev, void *data)
static int end_opal_session_error(struct opal_dev *dev);
static int opal_discovery0_step(struct opal_dev *dev);
static int activate_lsp(struct opal_dev *dev, void *data)
static int get_lsp_lifecycle(struct opal_dev *dev, void *data)
static int get_msid_cpin_pin(struct opal_dev *dev, void *data)
static int write_table_data(struct opal_dev *dev, void *data)
static int read_table_data_cont(struct opal_dev *dev)
static int read_table_data(struct opal_dev *dev, void *data)
static int end_opal_session(struct opal_dev *dev, void *data)
static int end_opal_session_error(struct opal_dev *dev)
static inline void setup_opal_dev(struct opal_dev *dev)
static int check_opal_support(struct opal_dev *dev)
static void clean_opal_dev(struct opal_dev *dev)
void free_opal_dev(struct opal_dev *dev)
struct opal_dev *init_opal_dev(void *data, sec_send_recv *send_recv)
struct opal_dev *dev;
static int opal_secure_erase_locking_range(struct opal_dev *dev,
static int opal_get_discv(struct opal_dev *dev, struct opal_discovery *discv)
static int opal_revertlsp(struct opal_dev *dev, struct opal_revert_lsp *rev)
static int opal_erase_locking_range(struct opal_dev *dev,
static int opal_enable_disable_shadow_mbr(struct opal_dev *dev,
static int opal_set_mbr_done(struct opal_dev *dev,
static int opal_write_shadow_mbr(struct opal_dev *dev,
static int opal_save(struct opal_dev *dev, struct opal_lock_unlock *lk_unlk)
static int opal_add_user_to_lr(struct opal_dev *dev,
static int opal_reverttper(struct opal_dev *dev, struct opal_key *opal, bool psid)
static int __opal_lock_unlock(struct opal_dev *dev,
static int __opal_set_mbr_done(struct opal_dev *dev, struct opal_key *key)
static void opal_lock_check_for_saved_key(struct opal_dev *dev,
static int opal_lock_unlock(struct opal_dev *dev,
static int opal_take_ownership(struct opal_dev *dev, struct opal_key *opal)
static int opal_activate_lsp(struct opal_dev *dev,
static int opal_setup_locking_range(struct opal_dev *dev,
static int opal_locking_range_status(struct opal_dev *dev,
static int opal_set_new_pw(struct opal_dev *dev, struct opal_new_pw *opal_pw)
static int opal_set_new_sid_pw(struct opal_dev *dev, struct opal_new_pw *opal_pw)
static int opal_activate_user(struct opal_dev *dev,
bool opal_unlock_from_suspend(struct opal_dev *dev)
static int opal_read_table(struct opal_dev *dev,
static int opal_write_table(struct opal_dev *dev,
static int opal_generic_read_write_table(struct opal_dev *dev,
static int opal_get_status(struct opal_dev *dev, void __user *data)
static int opal_get_geometry(struct opal_dev *dev, void __user *data)
int sed_ioctl(struct opal_dev *dev, unsigned int cmd, void __user *arg)
static int opal_get_key(struct opal_dev *dev, struct opal_key *key)
int (*fn)(struct opal_dev *dev, void *data);
typedef int (cont_fn)(struct opal_dev *dev);
static int opal_send_cmd(struct opal_dev *dev)
static int opal_recv_cmd(struct opal_dev *dev)
static int opal_recv_check(struct opal_dev *dev)
static int opal_send_recv(struct opal_dev *dev, cont_fn *cont)
static void check_geometry(struct opal_dev *dev, const void *data)
static int execute_step(struct opal_dev *dev,
static int execute_steps(struct opal_dev *dev,
static int opal_discovery0_end(struct opal_dev *dev, void *data)
static int opal_discovery0(struct opal_dev *dev, void *data)
static int opal_discovery0_step(struct opal_dev *dev)
static size_t remaining_size(struct opal_dev *cmd)
static bool can_add(int *err, struct opal_dev *cmd, size_t len)
static void add_token_u8(int *err, struct opal_dev *cmd, u8 tok)
static void add_short_atom_header(struct opal_dev *cmd, bool bytestring,
static void add_medium_atom_header(struct opal_dev *cmd, bool bytestring,
static void add_token_u64(int *err, struct opal_dev *cmd, u64 number)
static u8 *add_bytestring_header(int *err, struct opal_dev *cmd, size_t len)
static void add_token_bytestring(int *err, struct opal_dev *cmd,
static void set_comid(struct opal_dev *cmd, u16 comid)
static int cmd_finalize(struct opal_dev *cmd, u32 hsn, u32 tsn)
if (!ctrl->opal_dev)
ctrl->opal_dev = init_opal_dev(ctrl, &nvme_sec_submit);
opal_unlock_from_suspend(ctrl->opal_dev);
free_opal_dev(ctrl->opal_dev);
ctrl->opal_dev = NULL;
free_opal_dev(ctrl->opal_dev);
return sed_ioctl(ctrl->opal_dev, cmd, argp);
struct opal_dev *opal_dev;
return sed_ioctl(sdkp->opal_dev, cmd, p);
sdkp->opal_dev = init_opal_dev(sdkp, &sd_sec_submit);
if (sdkp->opal_dev)
if (opal_unlock_from_suspend(sdkp->opal_dev)) {
free_opal_dev(sdkp->opal_dev);
struct opal_dev *opal_dev;
struct opal_dev;
void free_opal_dev(struct opal_dev *dev);
bool opal_unlock_from_suspend(struct opal_dev *dev);
struct opal_dev *init_opal_dev(void *data, sec_send_recv *send_recv);
int sed_ioctl(struct opal_dev *dev, unsigned int cmd, void __user *ioctl_ptr);
static inline void free_opal_dev(struct opal_dev *dev)
static inline int sed_ioctl(struct opal_dev *dev, unsigned int cmd,
static inline bool opal_unlock_from_suspend(struct opal_dev *dev)