env: add struct spdk_pci_id and getter function
Use the new public PCI ID structure in the NVMe library to replace the previously private struct pci_id. Change-Id: I267d343917f60bdae949a824bc0fe67457cbbc0d Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
c0527befc5
commit
ed1e7ca2d7
@ -159,6 +159,13 @@ struct spdk_pci_addr {
|
|||||||
uint8_t func;
|
uint8_t func;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct spdk_pci_id {
|
||||||
|
uint16_t vendor_id;
|
||||||
|
uint16_t device_id;
|
||||||
|
uint16_t subvendor_id;
|
||||||
|
uint16_t subdevice_id;
|
||||||
|
};
|
||||||
|
|
||||||
typedef int (*spdk_pci_enum_cb)(void *enum_ctx, struct spdk_pci_device *pci_dev);
|
typedef int (*spdk_pci_enum_cb)(void *enum_ctx, struct spdk_pci_device *pci_dev);
|
||||||
|
|
||||||
int spdk_pci_enumerate(enum spdk_pci_device_type type,
|
int spdk_pci_enumerate(enum spdk_pci_device_type type,
|
||||||
@ -180,6 +187,9 @@ uint16_t spdk_pci_device_get_vendor_id(struct spdk_pci_device *dev);
|
|||||||
uint16_t spdk_pci_device_get_device_id(struct spdk_pci_device *dev);
|
uint16_t spdk_pci_device_get_device_id(struct spdk_pci_device *dev);
|
||||||
uint16_t spdk_pci_device_get_subvendor_id(struct spdk_pci_device *dev);
|
uint16_t spdk_pci_device_get_subvendor_id(struct spdk_pci_device *dev);
|
||||||
uint16_t spdk_pci_device_get_subdevice_id(struct spdk_pci_device *dev);
|
uint16_t spdk_pci_device_get_subdevice_id(struct spdk_pci_device *dev);
|
||||||
|
|
||||||
|
struct spdk_pci_id spdk_pci_device_get_id(struct spdk_pci_device *dev);
|
||||||
|
|
||||||
uint32_t spdk_pci_device_get_class(struct spdk_pci_device *dev);
|
uint32_t spdk_pci_device_get_class(struct spdk_pci_device *dev);
|
||||||
const char *spdk_pci_device_get_device_name(struct spdk_pci_device *dev);
|
const char *spdk_pci_device_get_device_name(struct spdk_pci_device *dev);
|
||||||
int spdk_pci_device_get_serial_number(struct spdk_pci_device *dev, char *sn, size_t len);
|
int spdk_pci_device_get_serial_number(struct spdk_pci_device *dev, char *sn, size_t len);
|
||||||
|
13
lib/env/pci.c
vendored
13
lib/env/pci.c
vendored
@ -299,6 +299,19 @@ spdk_pci_device_get_subdevice_id(struct spdk_pci_device *dev)
|
|||||||
return dev->id.subsystem_device_id;
|
return dev->id.subsystem_device_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct spdk_pci_id
|
||||||
|
spdk_pci_device_get_id(struct spdk_pci_device *pci_dev)
|
||||||
|
{
|
||||||
|
struct spdk_pci_id pci_id;
|
||||||
|
|
||||||
|
pci_id.vendor_id = spdk_pci_device_get_vendor_id(pci_dev);
|
||||||
|
pci_id.device_id = spdk_pci_device_get_device_id(pci_dev);
|
||||||
|
pci_id.subvendor_id = spdk_pci_device_get_subvendor_id(pci_dev);
|
||||||
|
pci_id.subdevice_id = spdk_pci_device_get_subdevice_id(pci_dev);
|
||||||
|
|
||||||
|
return pci_id;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
spdk_pci_device_get_class(struct spdk_pci_device *dev)
|
spdk_pci_device_get_class(struct spdk_pci_device *dev)
|
||||||
{
|
{
|
||||||
|
@ -163,7 +163,7 @@ static void
|
|||||||
nvme_ctrlr_construct_intel_support_log_page_list(struct spdk_nvme_ctrlr *ctrlr,
|
nvme_ctrlr_construct_intel_support_log_page_list(struct spdk_nvme_ctrlr *ctrlr,
|
||||||
struct spdk_nvme_intel_log_page_directory *log_page_directory)
|
struct spdk_nvme_intel_log_page_directory *log_page_directory)
|
||||||
{
|
{
|
||||||
struct pci_id pci_id;
|
struct spdk_pci_id pci_id;
|
||||||
|
|
||||||
if (log_page_directory == NULL) {
|
if (log_page_directory == NULL) {
|
||||||
return;
|
return;
|
||||||
@ -995,7 +995,7 @@ nvme_mutex_init_recursive_shared(pthread_mutex_t *mtx)
|
|||||||
int
|
int
|
||||||
nvme_ctrlr_construct(struct spdk_nvme_ctrlr *ctrlr)
|
nvme_ctrlr_construct(struct spdk_nvme_ctrlr *ctrlr)
|
||||||
{
|
{
|
||||||
struct pci_id pci_id;
|
struct spdk_pci_id pci_id;
|
||||||
|
|
||||||
nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_INIT, NVME_TIMEOUT_INFINITE);
|
nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_INIT, NVME_TIMEOUT_INFINITE);
|
||||||
ctrlr->flags = 0;
|
ctrlr->flags = 0;
|
||||||
|
@ -207,20 +207,13 @@ struct nvme_request {
|
|||||||
void *user_buffer;
|
void *user_buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pci_id {
|
|
||||||
uint16_t vendor_id;
|
|
||||||
uint16_t dev_id;
|
|
||||||
uint16_t sub_vendor_id;
|
|
||||||
uint16_t sub_dev_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct spdk_nvme_transport {
|
struct spdk_nvme_transport {
|
||||||
struct spdk_nvme_ctrlr *(*ctrlr_construct)(void *devhandle);
|
struct spdk_nvme_ctrlr *(*ctrlr_construct)(void *devhandle);
|
||||||
void (*ctrlr_destruct)(struct spdk_nvme_ctrlr *ctrlr);
|
void (*ctrlr_destruct)(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
|
||||||
int (*ctrlr_enable)(struct spdk_nvme_ctrlr *ctrlr);
|
int (*ctrlr_enable)(struct spdk_nvme_ctrlr *ctrlr);
|
||||||
|
|
||||||
int (*ctrlr_get_pci_id)(struct spdk_nvme_ctrlr *ctrlr, struct pci_id *pci_id);
|
int (*ctrlr_get_pci_id)(struct spdk_nvme_ctrlr *ctrlr, struct spdk_pci_id *pci_id);
|
||||||
|
|
||||||
int (*ctrlr_set_reg_4)(struct spdk_nvme_ctrlr *ctrlr, uint32_t offset, uint32_t value);
|
int (*ctrlr_set_reg_4)(struct spdk_nvme_ctrlr *ctrlr, uint32_t offset, uint32_t value);
|
||||||
int (*ctrlr_set_reg_8)(struct spdk_nvme_ctrlr *ctrlr, uint32_t offset, uint64_t value);
|
int (*ctrlr_set_reg_8)(struct spdk_nvme_ctrlr *ctrlr, uint32_t offset, uint64_t value);
|
||||||
@ -514,7 +507,7 @@ struct nvme_request *nvme_allocate_request_user_copy(void *buffer, uint32_t payl
|
|||||||
spdk_nvme_cmd_cb cb_fn, void *cb_arg, bool host_to_controller);
|
spdk_nvme_cmd_cb cb_fn, void *cb_arg, bool host_to_controller);
|
||||||
void nvme_free_request(struct nvme_request *req);
|
void nvme_free_request(struct nvme_request *req);
|
||||||
void nvme_request_remove_child(struct nvme_request *parent, struct nvme_request *child);
|
void nvme_request_remove_child(struct nvme_request *parent, struct nvme_request *child);
|
||||||
uint64_t nvme_get_quirks(const struct pci_id *id);
|
uint64_t nvme_get_quirks(const struct spdk_pci_id *id);
|
||||||
|
|
||||||
void spdk_nvme_ctrlr_opts_set_defaults(struct spdk_nvme_ctrlr_opts *opts);
|
void spdk_nvme_ctrlr_opts_set_defaults(struct spdk_nvme_ctrlr_opts *opts);
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ spdk_nvme_ns_get_data(struct spdk_nvme_ns *ns)
|
|||||||
int nvme_ns_construct(struct spdk_nvme_ns *ns, uint16_t id,
|
int nvme_ns_construct(struct spdk_nvme_ns *ns, uint16_t id,
|
||||||
struct spdk_nvme_ctrlr *ctrlr)
|
struct spdk_nvme_ctrlr *ctrlr)
|
||||||
{
|
{
|
||||||
struct pci_id pci_id;
|
struct spdk_pci_id pci_id;
|
||||||
|
|
||||||
assert(id > 0);
|
assert(id > 0);
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ int nvme_ns_construct(struct spdk_nvme_ns *ns, uint16_t id,
|
|||||||
|
|
||||||
if (ctrlr->transport->ctrlr_get_pci_id(ctrlr, &pci_id) == 0) {
|
if (ctrlr->transport->ctrlr_get_pci_id(ctrlr, &pci_id) == 0) {
|
||||||
if (pci_id.vendor_id == SPDK_PCI_VID_INTEL &&
|
if (pci_id.vendor_id == SPDK_PCI_VID_INTEL &&
|
||||||
pci_id.dev_id == INTEL_DC_P3X00_DEVID &&
|
pci_id.device_id == INTEL_DC_P3X00_DEVID &&
|
||||||
ctrlr->cdata.vs[3] != 0) {
|
ctrlr->cdata.vs[3] != 0) {
|
||||||
ns->stripe_size = (1 << ctrlr->cdata.vs[3]) * ctrlr->min_page_size;
|
ns->stripe_size = (1 << ctrlr->cdata.vs[3]) * ctrlr->min_page_size;
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ nvme_pcie_qpair(struct spdk_nvme_qpair *qpair)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nvme_pcie_ctrlr_get_pci_id(struct spdk_nvme_ctrlr *ctrlr, struct pci_id *pci_id)
|
nvme_pcie_ctrlr_get_pci_id(struct spdk_nvme_ctrlr *ctrlr, struct spdk_pci_id *pci_id)
|
||||||
{
|
{
|
||||||
struct spdk_pci_device *pci_dev;
|
struct spdk_pci_device *pci_dev;
|
||||||
|
|
||||||
@ -188,10 +188,7 @@ nvme_pcie_ctrlr_get_pci_id(struct spdk_nvme_ctrlr *ctrlr, struct pci_id *pci_id)
|
|||||||
pci_dev = ctrlr->devhandle;
|
pci_dev = ctrlr->devhandle;
|
||||||
assert(pci_dev != NULL);
|
assert(pci_dev != NULL);
|
||||||
|
|
||||||
pci_id->vendor_id = spdk_pci_device_get_vendor_id(pci_dev);
|
*pci_id = spdk_pci_device_get_id(pci_dev);
|
||||||
pci_id->dev_id = spdk_pci_device_get_device_id(pci_dev);
|
|
||||||
pci_id->sub_vendor_id = spdk_pci_device_get_subvendor_id(pci_dev);
|
|
||||||
pci_id->sub_dev_id = spdk_pci_device_get_subdevice_id(pci_dev);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,8 @@
|
|||||||
#include "nvme_internal.h"
|
#include "nvme_internal.h"
|
||||||
|
|
||||||
struct nvme_quirk {
|
struct nvme_quirk {
|
||||||
struct pci_id id;
|
struct spdk_pci_id id;
|
||||||
uint64_t flags;
|
uint64_t flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct nvme_quirk nvme_quirks[] = {
|
static const struct nvme_quirk nvme_quirks[] = {
|
||||||
@ -51,19 +51,19 @@ static const struct nvme_quirk nvme_quirks[] = {
|
|||||||
|
|
||||||
/* Compare each field. SPDK_PCI_ANY_ID in s1 matches everything */
|
/* Compare each field. SPDK_PCI_ANY_ID in s1 matches everything */
|
||||||
static bool
|
static bool
|
||||||
pci_id_match(const struct pci_id *s1, const struct pci_id *s2)
|
pci_id_match(const struct spdk_pci_id *s1, const struct spdk_pci_id *s2)
|
||||||
{
|
{
|
||||||
if ((s1->vendor_id == SPDK_PCI_ANY_ID || s1->vendor_id == s2->vendor_id) &&
|
if ((s1->vendor_id == SPDK_PCI_ANY_ID || s1->vendor_id == s2->vendor_id) &&
|
||||||
(s1->dev_id == SPDK_PCI_ANY_ID || s1->dev_id == s2->dev_id) &&
|
(s1->device_id == SPDK_PCI_ANY_ID || s1->device_id == s2->device_id) &&
|
||||||
(s1->sub_vendor_id == SPDK_PCI_ANY_ID || s1->sub_vendor_id == s2->sub_vendor_id) &&
|
(s1->subvendor_id == SPDK_PCI_ANY_ID || s1->subvendor_id == s2->subvendor_id) &&
|
||||||
(s1->sub_dev_id == SPDK_PCI_ANY_ID || s1->sub_dev_id == s2->sub_dev_id)) {
|
(s1->subdevice_id == SPDK_PCI_ANY_ID || s1->subdevice_id == s2->subdevice_id)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t
|
uint64_t
|
||||||
nvme_get_quirks(const struct pci_id *id)
|
nvme_get_quirks(const struct spdk_pci_id *id)
|
||||||
{
|
{
|
||||||
const struct nvme_quirk *quirk = nvme_quirks;
|
const struct nvme_quirk *quirk = nvme_quirks;
|
||||||
|
|
||||||
|
@ -74,16 +74,16 @@ ut_ctrlr_enable(struct spdk_nvme_ctrlr *ctrlr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ut_ctrlr_get_pci_id(struct spdk_nvme_ctrlr *ctrlr, struct pci_id *pci_id)
|
ut_ctrlr_get_pci_id(struct spdk_nvme_ctrlr *ctrlr, struct spdk_pci_id *pci_id)
|
||||||
{
|
{
|
||||||
if (ctrlr == NULL || pci_id == NULL) {
|
if (ctrlr == NULL || pci_id == NULL) {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pci_id->vendor_id = g_pci_vendor_id;
|
pci_id->vendor_id = g_pci_vendor_id;
|
||||||
pci_id->dev_id = g_pci_device_id;
|
pci_id->device_id = g_pci_device_id;
|
||||||
pci_id->sub_vendor_id = g_pci_subvendor_id;
|
pci_id->subvendor_id = g_pci_subvendor_id;
|
||||||
pci_id->sub_dev_id = g_pci_subdevice_id;
|
pci_id->subdevice_id = g_pci_subdevice_id;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1156,7 +1156,7 @@ test_nvme_ctrlr_construct_intel_support_log_page_list(void)
|
|||||||
bool res;
|
bool res;
|
||||||
struct spdk_nvme_ctrlr ctrlr = {};
|
struct spdk_nvme_ctrlr ctrlr = {};
|
||||||
struct spdk_nvme_intel_log_page_directory payload = {};
|
struct spdk_nvme_intel_log_page_directory payload = {};
|
||||||
struct pci_id pci_id;
|
struct spdk_pci_id pci_id;
|
||||||
|
|
||||||
ctrlr.transport = &nvme_ctrlr_ut_transport;
|
ctrlr.transport = &nvme_ctrlr_ut_transport;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user