diff options
author | Damien Zammit <damien@zamaudio.com> | 2019-11-03 21:35:57 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2019-11-03 21:37:57 +0100 |
commit | b160d6f3b3cdcd6a293c33cd89dcc46ab54c3264 (patch) | |
tree | babcc0b5db069672277131e914beef6d6b4dddc5 /pci-arbiter/func_files.c | |
parent | 084e5a86e5eca77cec49e08e0d83fe8266eca91b (diff) | |
download | hurd-b160d6f3b3cdcd6a293c33cd89dcc46ab54c3264.tar.gz hurd-b160d6f3b3cdcd6a293c33cd89dcc46ab54c3264.tar.bz2 hurd-b160d6f3b3cdcd6a293c33cd89dcc46ab54c3264.zip |
pci-arbiter: Use libpciaccess instead of embedding it
This patch removes all embedded pciaccess code from the arbiter
and instead uses the external pciaccess library.
* pci-arbiter/Makefile:
* Remove pci_access.c and x86_pci.c from the sources.
* pci-arbiter/func_files.c:
* io_config_file: Use a harcoded PCI config size.
* read_rom_file:
Grab the full rom first, then return the
requested amount.
* pci-arbiter/main.c:
* main: Call create_fs_tree() w/o pci_sys.
Since it's not part of the translator anymore.
* pci-arbiter/netfs_impl.c:
* netfs_attempt_read:
Send pci_device_cfg_read() as the read op.
* netfs_attempt_write:
Send pci_device_cfg_write() as the write op.
* pci-arbiter/pci-ops.c:
* S_pci_conf_read: Call libpciaccess' pci_device_cfg_read().
* S_pci_conf_write: Call libpciaccess' pci_device_cfg_write().
* S_pci_get_dev_rom:
Set rom.base_addr to zero for the moment, until
libpciaccess esposes it properly.
* pci-arbiter/pci_access.c: Deleted
* pci-arbiter/pci_access.h: Deleted
* pci-arbiter/pcifs.c:
* create_fs_tree:
Remove the pci_sys parameter.
Use libpciaccess' iterator.
Use a hardcoded config space size.
* pci-arbiter/pcifs.h: Definitions for changes in pcifs.c.
* pci-arbiter/x86_pci.c: Deleted.
* pci-arbiter/x86_pci.h: Deleted.
Diffstat (limited to 'pci-arbiter/func_files.c')
-rw-r--r-- | pci-arbiter/func_files.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/pci-arbiter/func_files.c b/pci-arbiter/func_files.c index 7df94d2f..c7da6978 100644 --- a/pci-arbiter/func_files.c +++ b/pci-arbiter/func_files.c @@ -35,10 +35,11 @@ config_block_op (struct pci_device *dev, off_t offset, size_t * len, { error_t err; size_t pendent = *len; + pciaddr_t actual = 0; while (pendent >= 4) { - err = op (dev->bus, dev->dev, dev->func, offset, data, 4); + err = op (dev, data, offset, 4, &actual); if (err) return err; @@ -49,7 +50,7 @@ config_block_op (struct pci_device *dev, off_t offset, size_t * len, if (pendent >= 2) { - err = op (dev->bus, dev->dev, dev->func, offset, data, 2); + err = op (dev, data, offset, 2, &actual); if (err) return err; @@ -60,7 +61,7 @@ config_block_op (struct pci_device *dev, off_t offset, size_t * len, if (pendent) { - err = op (dev->bus, dev->dev, dev->func, offset, data, 1); + err = op (dev, data, offset, 1, &actual); if (err) return err; @@ -85,10 +86,10 @@ io_config_file (struct pci_device * dev, off_t offset, size_t * len, assert_backtrace (dev != 0); /* Don't exceed the config space size */ - if (offset > dev->config_size) + if (offset > PCI_CONFIG_SIZE) return EINVAL; - if ((offset + *len) > dev->config_size) - *len = dev->config_size - offset; + if ((offset + *len) > PCI_CONFIG_SIZE) + *len = PCI_CONFIG_SIZE - offset; pthread_mutex_lock (&fs->pci_conf_lock); err = config_block_op (dev, offset, len, data, op); @@ -102,24 +103,25 @@ error_t read_rom_file (struct pci_device * dev, off_t offset, size_t * len, void *data) { - error_t err; + void *fullrom; /* This should never happen */ assert_backtrace (dev != 0); - /* Refresh the ROM */ - err = pci_sys->device_refresh (dev, -1, 1); - if (err) - return err; - /* Don't exceed the ROM size */ if (offset > dev->rom_size) return EINVAL; if ((offset + *len) > dev->rom_size) *len = dev->rom_size - offset; - memcpy (data, dev->rom_memory + offset, *len); + /* Grab the full rom first */ + fullrom = calloc(1, dev->rom_size); + pci_device_read_rom(dev, fullrom); + + /* Return the requested amount */ + memcpy (data, fullrom + offset, *len); + free(fullrom); return 0; } @@ -177,7 +179,6 @@ error_t io_region_file (struct pcifs_dirent * e, off_t offset, size_t * len, void *data, int read) { - error_t err; size_t reg_num; struct pci_mem_region *region; @@ -188,11 +189,6 @@ io_region_file (struct pcifs_dirent * e, off_t offset, size_t * len, reg_num = strtol (&e->name[strlen (e->name) - 1], 0, 16); region = &e->device->regions[reg_num]; - /* Refresh the region */ - err = pci_sys->device_refresh (e->device, reg_num, -1); - if (err) - return err; - /* Don't exceed the region size */ if (offset > region->size) return EINVAL; |