From: Joshua Wise Date: Thu, 2 Oct 2008 23:20:20 +0000 (-0400) Subject: Add the mechanism by which we bother PCI, generically. X-Git-Url: http://git.joshuawise.com/netwatch.git/commitdiff_plain/ec2d61895a6b60afbed9661240d868405310dc7f?hp=--cc Add the mechanism by which we bother PCI, generically. --- ec2d61895a6b60afbed9661240d868405310dc7f diff --git a/include/pci-bother.h b/include/pci-bother.h new file mode 100644 index 0000000..ff71755 --- /dev/null +++ b/include/pci-bother.h @@ -0,0 +1,12 @@ +#ifndef _PCI_BOTHER_H +#define _PCI_BOTHER_H + +#include + +#define MAX_BOTHERS 5 + +extern int pci_bother_add(pci_dev_t *dev); +extern void pci_bother_all(); +extern void pci_unbother_all(); + +#endif diff --git a/pci/pci-bother.c b/pci/pci-bother.c new file mode 100644 index 0000000..0c3c0ec --- /dev/null +++ b/pci/pci-bother.c @@ -0,0 +1,41 @@ +#include + +struct pci_bother { + int bus, dev, fn; + unsigned short origstate; +}; + +static struct pci_bother bothers[MAX_BOTHERS]; +static int nbothers = 0; + +int pci_bother_add(pci_dev_t *dev) +{ + if (nbothers == MAX_BOTHERS) + return -1; + + bothers[nbothers].bus = dev->bus; + bothers[nbothers].dev = dev->dev; + bothers[nbothers].fn = dev->fn; + + bothers[nbothers].origstate = pci_read16(dev->bus, dev->dev, dev->fn, 0x04); + + nbothers++; + + return 0; +} + +void pci_bother_all() +{ + int i; + + for (i = 0; i < nbothers; i++) + pci_write16(bothers[i].bus, bothers[i].dev, bothers[i].fn, 0x0); +} + +void pci_unbother_all() +{ + int i; + + for (i = 0; i < nbothers; i++) + pci_write16(bothers[i].bus, bothers[i].dev, bothers[i].fn, bothers[i].origstate); +}