mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 22:22:08 +02:00
nvmet: Add vendor_id and subsys_vendor_id subsystem attributes
Define the new vendor_id and subsys_vendor_id configfs attribute for target subsystems. These attributes are respectively reported as the vid field and as the ssvid field of the identify controller data of a target controllers using the subsystem for which these attributes are set. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Tested-by: Rick Wertenbroek <rick.wertenbroek@gmail.com> Tested-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Signed-off-by: Keith Busch <kbusch@kernel.org>
This commit is contained in:
parent
30e77e0fbe
commit
5d4f4ea8fa
|
|
@ -522,9 +522,8 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req)
|
|||
goto out;
|
||||
}
|
||||
|
||||
/* XXX: figure out how to assign real vendors IDs. */
|
||||
id->vid = 0;
|
||||
id->ssvid = 0;
|
||||
id->vid = cpu_to_le16(subsys->vendor_id);
|
||||
id->ssvid = cpu_to_le16(subsys->subsys_vendor_id);
|
||||
|
||||
memcpy(id->sn, ctrl->subsys->serial, NVMET_SN_MAX_SIZE);
|
||||
memcpy_and_pad(id->mn, sizeof(id->mn), subsys->model_number,
|
||||
|
|
|
|||
|
|
@ -1412,6 +1412,49 @@ static ssize_t nvmet_subsys_attr_cntlid_max_store(struct config_item *item,
|
|||
}
|
||||
CONFIGFS_ATTR(nvmet_subsys_, attr_cntlid_max);
|
||||
|
||||
static ssize_t nvmet_subsys_attr_vendor_id_show(struct config_item *item,
|
||||
char *page)
|
||||
{
|
||||
return snprintf(page, PAGE_SIZE, "0x%x\n", to_subsys(item)->vendor_id);
|
||||
}
|
||||
|
||||
static ssize_t nvmet_subsys_attr_vendor_id_store(struct config_item *item,
|
||||
const char *page, size_t count)
|
||||
{
|
||||
u16 vid;
|
||||
|
||||
if (kstrtou16(page, 0, &vid))
|
||||
return -EINVAL;
|
||||
|
||||
down_write(&nvmet_config_sem);
|
||||
to_subsys(item)->vendor_id = vid;
|
||||
up_write(&nvmet_config_sem);
|
||||
return count;
|
||||
}
|
||||
CONFIGFS_ATTR(nvmet_subsys_, attr_vendor_id);
|
||||
|
||||
static ssize_t nvmet_subsys_attr_subsys_vendor_id_show(struct config_item *item,
|
||||
char *page)
|
||||
{
|
||||
return snprintf(page, PAGE_SIZE, "0x%x\n",
|
||||
to_subsys(item)->subsys_vendor_id);
|
||||
}
|
||||
|
||||
static ssize_t nvmet_subsys_attr_subsys_vendor_id_store(struct config_item *item,
|
||||
const char *page, size_t count)
|
||||
{
|
||||
u16 ssvid;
|
||||
|
||||
if (kstrtou16(page, 0, &ssvid))
|
||||
return -EINVAL;
|
||||
|
||||
down_write(&nvmet_config_sem);
|
||||
to_subsys(item)->subsys_vendor_id = ssvid;
|
||||
up_write(&nvmet_config_sem);
|
||||
return count;
|
||||
}
|
||||
CONFIGFS_ATTR(nvmet_subsys_, attr_subsys_vendor_id);
|
||||
|
||||
static ssize_t nvmet_subsys_attr_model_show(struct config_item *item,
|
||||
char *page)
|
||||
{
|
||||
|
|
@ -1640,6 +1683,8 @@ static struct configfs_attribute *nvmet_subsys_attrs[] = {
|
|||
&nvmet_subsys_attr_attr_serial,
|
||||
&nvmet_subsys_attr_attr_cntlid_min,
|
||||
&nvmet_subsys_attr_attr_cntlid_max,
|
||||
&nvmet_subsys_attr_attr_vendor_id,
|
||||
&nvmet_subsys_attr_attr_subsys_vendor_id,
|
||||
&nvmet_subsys_attr_attr_model,
|
||||
&nvmet_subsys_attr_attr_qid_max,
|
||||
&nvmet_subsys_attr_attr_ieee_oui,
|
||||
|
|
|
|||
|
|
@ -324,6 +324,8 @@ struct nvmet_subsys {
|
|||
struct config_group namespaces_group;
|
||||
struct config_group allowed_hosts_group;
|
||||
|
||||
u16 vendor_id;
|
||||
u16 subsys_vendor_id;
|
||||
char *model_number;
|
||||
u32 ieee_oui;
|
||||
char *firmware_rev;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user