pci: stub out kernel driver functions on FreeBSD

The kernel driver unloading/loading code is Linux specific; replace it
with stubs on FreeBSD for now.

Change-Id: Ic67c1d89b2fb9a65e9ce5b88d27b6cd6af5554a7
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2016-07-21 09:00:10 -07:00
parent 51bc5fce79
commit 7ec9bb11da

View File

@ -451,60 +451,7 @@ spdk_pci_device_has_non_uio_driver(struct spdk_pci_device *dev)
return (strncmp(driver_begin, "uio_", 4) != 0 && return (strncmp(driver_begin, "uio_", 4) != 0 &&
strcmp(driver_begin, "vfio-pci") != 0); strcmp(driver_begin, "vfio-pci") != 0);
} }
#endif
#ifdef __FreeBSD__
int
spdk_pci_device_has_non_uio_driver(struct spdk_pci_device *dev)
{
struct pci_conf_io configsel;
struct pci_match_conf pattern;
struct pci_conf conf;
int fd;
memset(&pattern, 0, sizeof(pattern));
pattern.pc_sel.pc_domain = spdk_pci_device_get_domain(dev);
pattern.pc_sel.pc_bus = spdk_pci_device_get_bus(dev);
pattern.pc_sel.pc_dev = spdk_pci_device_get_dev(dev);
pattern.pc_sel.pc_func = spdk_pci_device_get_func(dev);
pattern.flags = PCI_GETCONF_MATCH_DOMAIN |
PCI_GETCONF_MATCH_BUS |
PCI_GETCONF_MATCH_DEV |
PCI_GETCONF_MATCH_FUNC;
memset(&configsel, 0, sizeof(configsel));
configsel.match_buf_len = sizeof(conf);
configsel.matches = &conf;
configsel.num_patterns = 1;
configsel.pat_buf_len = sizeof(pattern);
configsel.patterns = &pattern;
fd = open("/dev/pci", O_RDONLY, 0);
if (fd < 0) {
fprintf(stderr, "could not open /dev/pci\n");
return -1;
}
if (ioctl(fd, PCIOCGETCONF, &configsel) == -1) {
fprintf(stderr, "ioctl(PCIOCGETCONF) failed\n");
close(fd);
return -1;
}
close(fd);
if (configsel.num_matches != 1) {
fprintf(stderr, "could not find specified device\n");
return -1;
}
if (conf.pd_name[0] == '\0' || !strcmp(conf.pd_name, "nic_uio")) {
return 0;
} else {
return 1;
}
}
#endif
int int
spdk_pci_device_unbind_kernel_driver(struct spdk_pci_device *dev) spdk_pci_device_unbind_kernel_driver(struct spdk_pci_device *dev)
@ -677,3 +624,85 @@ spdk_pci_device_claim(struct spdk_pci_device *dev)
/* Keep dev_fd open to maintain the lock. */ /* Keep dev_fd open to maintain the lock. */
return 0; return 0;
} }
#endif /* __linux__ */
#ifdef __FreeBSD__
int
spdk_pci_device_has_non_uio_driver(struct spdk_pci_device *dev)
{
struct pci_conf_io configsel;
struct pci_match_conf pattern;
struct pci_conf conf;
int fd;
memset(&pattern, 0, sizeof(pattern));
pattern.pc_sel.pc_domain = spdk_pci_device_get_domain(dev);
pattern.pc_sel.pc_bus = spdk_pci_device_get_bus(dev);
pattern.pc_sel.pc_dev = spdk_pci_device_get_dev(dev);
pattern.pc_sel.pc_func = spdk_pci_device_get_func(dev);
pattern.flags = PCI_GETCONF_MATCH_DOMAIN |
PCI_GETCONF_MATCH_BUS |
PCI_GETCONF_MATCH_DEV |
PCI_GETCONF_MATCH_FUNC;
memset(&configsel, 0, sizeof(configsel));
configsel.match_buf_len = sizeof(conf);
configsel.matches = &conf;
configsel.num_patterns = 1;
configsel.pat_buf_len = sizeof(pattern);
configsel.patterns = &pattern;
fd = open("/dev/pci", O_RDONLY, 0);
if (fd < 0) {
fprintf(stderr, "could not open /dev/pci\n");
return -1;
}
if (ioctl(fd, PCIOCGETCONF, &configsel) == -1) {
fprintf(stderr, "ioctl(PCIOCGETCONF) failed\n");
close(fd);
return -1;
}
close(fd);
if (configsel.num_matches != 1) {
fprintf(stderr, "could not find specified device\n");
return -1;
}
if (conf.pd_name[0] == '\0' || !strcmp(conf.pd_name, "nic_uio")) {
return 0;
} else {
return 1;
}
}
int
spdk_pci_device_unbind_kernel_driver(struct spdk_pci_device *dev)
{
/* TODO */
return 0;
}
int
spdk_pci_device_bind_uio_driver(struct spdk_pci_device *dev)
{
/* TODO */
return 0;
}
int
spdk_pci_device_switch_to_uio_driver(struct spdk_pci_device *dev)
{
/* TODO */
return 0;
}
int
spdk_pci_device_claim(struct spdk_pci_device *dev)
{
/* TODO */
return 0;
}
#endif /* __FreeBSD__ */