mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
block: sed-opal: unify retrieval of table columns
Instead of having multiple places defining the same argument list to get a specific column of a sed-opal table, provide a generic version and call it from those functions. Co-authored-by: David Kozub <zub@linux.fjfi.cvut.cz> Signed-off-by: Jonas Rabenstein <jonas.rabenstein@studium.uni-erlangen.de> Signed-off-by: David Kozub <zub@linux.fjfi.cvut.cz> Reviewed-by: Scott Bauer <sbauer@plzdonthack.me> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jon Derrick <jonathan.derrick@intel.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
a4ddbd1b7b
commit
3fff234b85
130
block/sed-opal.c
130
block/sed-opal.c
@ -1075,6 +1075,37 @@ static int finalize_and_send(struct opal_dev *dev, cont_fn cont)
|
||||
return opal_send_recv(dev, cont);
|
||||
}
|
||||
|
||||
/*
|
||||
* request @column from table @table on device @dev. On success, the column
|
||||
* data will be available in dev->resp->tok[4]
|
||||
*/
|
||||
static int generic_get_column(struct opal_dev *dev, const u8 *table,
|
||||
u64 column)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = cmd_start(dev, table, opalmethod[OPAL_GET]);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTLIST);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, OPAL_STARTCOLUMN);
|
||||
add_token_u64(&err, dev, column);
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, OPAL_ENDCOLUMN);
|
||||
add_token_u64(&err, dev, column);
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_ENDLIST);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return finalize_and_send(dev, parse_and_check_status);
|
||||
}
|
||||
|
||||
static int gen_key(struct opal_dev *dev, void *data)
|
||||
{
|
||||
u8 uid[OPAL_UID_LENGTH];
|
||||
@ -1129,23 +1160,11 @@ static int get_active_key(struct opal_dev *dev, void *data)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = cmd_start(dev, uid, opalmethod[OPAL_GET]);
|
||||
add_token_u8(&err, dev, OPAL_STARTLIST);
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, 3); /* startCloumn */
|
||||
add_token_u8(&err, dev, 10); /* ActiveKey */
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, 4); /* endColumn */
|
||||
add_token_u8(&err, dev, 10); /* ActiveKey */
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
add_token_u8(&err, dev, OPAL_ENDLIST);
|
||||
if (err) {
|
||||
pr_debug("Error building get active key command\n");
|
||||
err = generic_get_column(dev, uid, OPAL_ACTIVEKEY);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
return finalize_and_send(dev, get_active_key_cont);
|
||||
return get_active_key_cont(dev);
|
||||
}
|
||||
|
||||
static int generic_lr_enable_disable(struct opal_dev *dev,
|
||||
@ -1754,14 +1773,16 @@ static int activate_lsp(struct opal_dev *dev, void *data)
|
||||
return finalize_and_send(dev, parse_and_check_status);
|
||||
}
|
||||
|
||||
static int get_lsp_lifecycle_cont(struct opal_dev *dev)
|
||||
/* Determine if we're in the Manufactured Inactive or Active state */
|
||||
static int get_lsp_lifecycle(struct opal_dev *dev, void *data)
|
||||
{
|
||||
u8 lc_status;
|
||||
int error = 0;
|
||||
int err;
|
||||
|
||||
error = parse_and_check_status(dev);
|
||||
if (error)
|
||||
return error;
|
||||
err = generic_get_column(dev, opaluid[OPAL_LOCKINGSP_UID],
|
||||
OPAL_LIFECYCLE);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
lc_status = response_get_u64(&dev->parsed, 4);
|
||||
/* 0x08 is Manufactured Inactive */
|
||||
@ -1774,49 +1795,19 @@ static int get_lsp_lifecycle_cont(struct opal_dev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Determine if we're in the Manufactured Inactive or Active state */
|
||||
static int get_lsp_lifecycle(struct opal_dev *dev, void *data)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = cmd_start(dev, opaluid[OPAL_LOCKINGSP_UID],
|
||||
opalmethod[OPAL_GET]);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTLIST);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, 3); /* Start Column */
|
||||
add_token_u8(&err, dev, OPAL_LIFECYCLE);
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, 4); /* End Column */
|
||||
add_token_u8(&err, dev, OPAL_LIFECYCLE);
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_ENDLIST);
|
||||
|
||||
if (err) {
|
||||
pr_debug("Error Building GET Lifecycle Status command\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
return finalize_and_send(dev, get_lsp_lifecycle_cont);
|
||||
}
|
||||
|
||||
static int get_msid_cpin_pin_cont(struct opal_dev *dev)
|
||||
static int get_msid_cpin_pin(struct opal_dev *dev, void *data)
|
||||
{
|
||||
const char *msid_pin;
|
||||
size_t strlen;
|
||||
int error = 0;
|
||||
int err;
|
||||
|
||||
error = parse_and_check_status(dev);
|
||||
if (error)
|
||||
return error;
|
||||
err = generic_get_column(dev, opaluid[OPAL_C_PIN_MSID], OPAL_PIN);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
strlen = response_get_string(&dev->parsed, 4, &msid_pin);
|
||||
if (!msid_pin) {
|
||||
pr_debug("%s: Couldn't extract PIN from response\n", __func__);
|
||||
pr_debug("Couldn't extract MSID_CPIN from response\n");
|
||||
return OPAL_INVAL_PARAM;
|
||||
}
|
||||
|
||||
@ -1829,33 +1820,6 @@ static int get_msid_cpin_pin_cont(struct opal_dev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_msid_cpin_pin(struct opal_dev *dev, void *data)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = cmd_start(dev, opaluid[OPAL_C_PIN_MSID],
|
||||
opalmethod[OPAL_GET]);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTLIST);
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, 3); /* Start Column */
|
||||
add_token_u8(&err, dev, 3); /* PIN */
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
|
||||
add_token_u8(&err, dev, OPAL_STARTNAME);
|
||||
add_token_u8(&err, dev, 4); /* End Column */
|
||||
add_token_u8(&err, dev, 3); /* Lifecycle Column */
|
||||
add_token_u8(&err, dev, OPAL_ENDNAME);
|
||||
add_token_u8(&err, dev, OPAL_ENDLIST);
|
||||
|
||||
if (err) {
|
||||
pr_debug("Error building Get MSID CPIN PIN command.\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
return finalize_and_send(dev, get_msid_cpin_pin_cont);
|
||||
}
|
||||
|
||||
static int end_opal_session(struct opal_dev *dev, void *data)
|
||||
{
|
||||
int err = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user