]> mj.ucw.cz Git - pciutils.git/blobdiff - lib/nbsd-libpci.c
By mistake, we were setting PCI_USE_DNS on Linux automatically.
[pciutils.git] / lib / nbsd-libpci.c
index 0b247c0e10a0ee5b98bdfd14d5d3fd75b7c307be..2d24c4cee69d96c92b421c126999adf1bede471b 100644 (file)
 static void
 nbsd_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_NBSD_LIBPCI] = PATH_NBSD_DEVICE;
+  pci_define_param(a, "nbsd.path", PCI_PATH_NBSD_DEVICE, "Path to the NetBSD PCI device");
 }
 
 static int
 nbsd_detect(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_NBSD_LIBPCI];
+  char *name = pci_get_param(a, "nbsd.path");
 
   if (access(name, R_OK))
     {
       a->warning("Cannot open %s", name);
       return 0;
     }
+
+  if (!access(name, W_OK))
+    a->writeable = O_RDWR;
   a->debug("...using %s", name);
   return 1;
 }
@@ -45,9 +48,10 @@ nbsd_detect(struct pci_access *a)
 static void
 nbsd_init(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_NBSD_LIBPCI];
+  char *name = pci_get_param(a, "nbsd.path");
+  int mode = a->writeable ? O_RDWR : O_RDONLY;
 
-  a->fd = open(name, O_RDWR, 0);
+  a->fd = open(name, mode, 0);
   if (a->fd < 0)
     a->error("nbsd_init: %s open failed", name);
 }
@@ -67,9 +71,12 @@ nbsd_read(struct pci_dev *d, int pos, byte *buf, int len)
   if (!(len == 1 || len == 2 || len == 4))
     return pci_generic_block_read(d, pos, buf, len);
 
+  if (pos >= 256)
+    return 0;
+
   shift = 8*(pos % 4);
   pos &= ~3;
-       
+
   if (pcibus_conf_read(d->access->fd, d->bus, d->dev, d->func, pos, &val) < 0)
     d->access->error("nbsd_read: pci_bus_conf_read() failed");
 
@@ -97,6 +104,9 @@ nbsd_write(struct pci_dev *d, int pos, byte *buf, int len)
   if (!(len == 1 || len == 2 || len == 4))
     return pci_generic_block_write(d, pos, buf, len);
 
+  if (pos >= 256)
+    return 0;
+
   /*
    *  BEWARE: NetBSD seems to support only 32-bit access, so we have
    *  to emulate byte and word writes by read-modify-write, possibly
@@ -123,7 +133,7 @@ nbsd_write(struct pci_dev *d, int pos, byte *buf, int len)
       val = le32_to_cpu(*(u32*)buf);
       break;
     }
-  
+
   if (pcibus_conf_write(d->access->fd, d->bus, d->dev, d->func, pos, val) < 0)
     d->access->error("nbsd_write: pci_bus_conf_write() failed");
 
@@ -131,7 +141,8 @@ nbsd_write(struct pci_dev *d, int pos, byte *buf, int len)
 }
 
 struct pci_methods pm_nbsd_libpci = {
-  "NetBSD-libpci",
+  "nbsd-libpci",
+  "NetBSD libpci",
   nbsd_config,
   nbsd_detect,
   nbsd_init,