Date: Fri, 22 Aug 2008 20:05:11 -0600 (MDT) From: "M. Warner Losh" <imp@bsdimp.com> To: rpaulo@FreeBSD.org Cc: brooks@FreeBSD.org, ivoras@FreeBSD.org, brueffer@FreeBSD.org, freebsd-arch@FreeBSD.org Subject: Re: Magic symlinks redux Message-ID: <20080822.200511.1137957320.imp@bsdimp.com> In-Reply-To: <20080823013912.GA19588@epsilon.local> References: <20080822.160107.511563083.imp@bsdimp.com> <20080822225119.GA65119@onelab2.iet.unipi.it> <20080823013912.GA19588@epsilon.local>
next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20080823013912.GA19588@epsilon.local> : I hope this is what Warner was trying to say. More or less the following, with a less lame way of getting the table into the kernel, and maybe more fields than vendor/device.... The reason this works is that the pci_get_vendor and pci_get_device read out of the area pointed to by cfg. Warner Index: pci.c =================================================================== --- pci.c (revision 182024) +++ pci.c (working copy) @@ -419,6 +419,33 @@ #undef REG } +static struct pci_remap_entry +{ + uint16_t vendor; + uint16_t device; + uint16_t mapped_vendor; + uint16_t mapped_device; +} pci_remap[] = +{ + { 0x1039, 0x0901, 0x1039, 0x0900 } /* Map sis 901 to sis 900 */ +}; +static int pci_remap_entries = 1; + +static void +pci_apply_remap_table(pcicfgregs *cfg) +{ + int i; + + for (i = 0; i < pci_remap_entries; i++) { + if (cfg->vendor == pci_remap[i].vendor && + cfg->device == pci_remap[i].device) { + cfg->vendor = pci_remap[i].mapped_vendor; + cfg->device = pci_remap[i].mapped_device; + return; + } + } +} + /* read configuration header into pcicfgregs structure */ struct pci_devinfo * pci_read_device(device_t pcib, int d, int b, int s, int f, size_t size) @@ -465,6 +492,7 @@ pci_fixancient(cfg); pci_hdrtypedata(pcib, b, s, f, cfg); + pci_apply_remap_table(cfg); if (REG(PCIR_STATUS, 2) & PCIM_STATUS_CAPPRESENT) pci_read_extcap(pcib, cfg);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080822.200511.1137957320.imp>