diff options
author | Stefan Reinauer <reinauer@chromium.org> | 2015-10-21 13:00:41 -0700 |
---|---|---|
committer | Stefan Reinauer <stefan.reinauer@coreboot.org> | 2016-02-18 01:47:04 +0100 |
commit | 05082737a9507a8bbb238d9d439f74a72a7606e8 (patch) | |
tree | dd5ec603f620e9e4a7a054533d5098b2a19c97b2 /util/vgabios/pci-userspace.c | |
parent | eb960f1af93b55cbfb0d5f86343970ded151d3c7 (diff) | |
download | coreboot-05082737a9507a8bbb238d9d439f74a72a7606e8.tar.xz |
Redo testbios utility to use all of YABEL
Drop buggy duplicate implementation of intXX handlers
and provide enough glue to use all of YABEL.
Change-Id: I2db77a56a2a991cb84876456dcbb3a843a0d9754
Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-on: https://review.coreboot.org/12117
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Tested-by: build bot (Jenkins)
Diffstat (limited to 'util/vgabios/pci-userspace.c')
-rw-r--r-- | util/vgabios/pci-userspace.c | 150 |
1 files changed, 48 insertions, 102 deletions
diff --git a/util/vgabios/pci-userspace.c b/util/vgabios/pci-userspace.c index 796933e5b0..0390f7a494 100644 --- a/util/vgabios/pci-userspace.c +++ b/util/vgabios/pci-userspace.c @@ -1,31 +1,30 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2016 Google Inc + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + #include <stdio.h> +#include <pci/pci.h> #include "pci-userspace.h" -#ifdef PCI_LIB_VERSION -#define LIBPCI_CHECK_VERSION(major,minor,micro) \ - ((((major) << 16) | ((minor) << 8) | (micro)) <= PCI_LIB_VERSION) -#else -#define LIBPCI_CHECK_VERSION(major,minor,micro) \ - ( (LIBPCI_MAJOR_VERSION > (major)) || \ - (LIBPCI_MAJOR_VERSION == (major) && LIBPCI_MINOR_VERSION > (minor)) || \ - (LIBPCI_MAJOR_VERSION == (major) && LIBPCI_MINOR_VERSION == (minor)) && \ - LIBPCI_MICRO_VERSION >= (micro) ) -#endif - -#define PCITAG struct pci_filter * - #define DEBUG_PCI 1 -struct pci_access *pacc; -struct pci_dev *dev; - -struct pci_filter ltag; - - -int pciNumBuses = 0; +static struct pci_access *pacc; -int pciInit(void) +int pci_initialize(void) { + struct pci_dev *dev; + pacc = pci_alloc(); pci_init(pacc); @@ -36,133 +35,80 @@ int pciInit(void) return 0; } -int pciExit(void) +int pci_exit(void) { pci_cleanup(pacc); return 0; } -PCITAG findPci(unsigned short bx) -{ - PCITAG tag = <ag; - - int bus = (bx >> 8) & 0xFF; - int slot = (bx >> 3) & 0x1F; - int func = bx & 0x7; - - tag->bus = bus; - tag->slot = slot; - tag->func = func; - -#if LIBPCI_CHECK_VERSION(2,1,99) - if (pci_get_dev(pacc, 0, bus, slot, func)) -#else - if (pci_get_dev(pacc, bus, slot, func)) -#endif - return tag; - - return NULL; -} - -u32 pciSlotBX(PCITAG tag) -{ - return (tag->bus << 8) | (tag->slot << 3) | (tag->func); -} - -u8 pciReadByte(PCITAG tag, u32 idx) +u8 pci_read_config8(struct device *dev, unsigned int where) { struct pci_dev *d; -#if LIBPCI_CHECK_VERSION(2,1,99) - if ((d = pci_get_dev(pacc, 0, tag->bus, tag->slot, tag->func))) -#else - if ((d = pci_get_dev(pacc, tag->bus, tag->slot, tag->func))) -#endif - return pci_read_byte(d, idx); + if ((d = pci_get_dev(pacc, 0, dev->busno, dev->slot, dev->func))) + return pci_read_byte(d, where); #ifdef DEBUG_PCI printf("PCI: device not found while read byte (%x:%x.%x)\n", - tag->bus, tag->slot, tag->func); + dev->busno, dev->slot, dev->func); #endif return 0; } -u16 pciReadWord(PCITAG tag, u32 idx) +u16 pci_read_config16(struct device *dev, unsigned int where) { struct pci_dev *d; -#if LIBPCI_CHECK_VERSION(2,1,99) - if ((d = pci_get_dev(pacc, 0, tag->bus, tag->slot, tag->func))) -#else - if ((d = pci_get_dev(pacc, tag->bus, tag->slot, tag->func))) -#endif - return pci_read_word(d, idx); + if ((d = pci_get_dev(pacc, 0, dev->busno, dev->slot, dev->func))) + return pci_read_word(d, where); #ifdef DEBUG_PCI printf("PCI: device not found while read word (%x:%x.%x)\n", - tag->bus, tag->slot, tag->func); + dev->busno, dev->slot, dev->func); #endif return 0; } -u32 pciReadLong(PCITAG tag, u32 idx) +u32 pci_read_config32(struct device *dev, unsigned int where) { struct pci_dev *d; -#if LIBPCI_CHECK_VERSION(2,1,99) - if ((d = pci_get_dev(pacc, 0, tag->bus, tag->slot, tag->func))) -#else - if ((d = pci_get_dev(pacc, tag->bus, tag->slot, tag->func))) -#endif - return pci_read_long(d, idx); + if ((d = pci_get_dev(pacc, 0, dev->busno, dev->slot, dev->func))) + return pci_read_long(d, where); #ifdef DEBUG_PCI - printf("PCI: device not found while read long (%x:%x.%x)\n", - tag->bus, tag->slot, tag->func); + printf("PCI: device not found while read dword (%x:%x.%x)\n", + dev->busno, dev->slot, dev->func); #endif return 0; } - -void pciWriteLong(PCITAG tag, u32 idx, u32 data) +void pci_write_config8(struct device *dev, unsigned int where, u8 val) { struct pci_dev *d; -#if LIBPCI_CHECK_VERSION(2,1,99) - if ((d = pci_get_dev(pacc, 0, tag->bus, tag->slot, tag->func))) -#else - if ((d = pci_get_dev(pacc, tag->bus, tag->slot, tag->func))) -#endif - pci_write_long(d, idx, data); + if ((d = pci_get_dev(pacc, 0, dev->busno, dev->slot, dev->func))) + pci_write_byte(d, where, val); #ifdef DEBUG_PCI else - printf("PCI: device not found while write long (%x:%x.%x)\n", - tag->bus, tag->slot, tag->func); + printf("PCI: device not found while write byte (%x:%x.%x)\n", + dev->busno, dev->slot, dev->func); #endif } -void pciWriteWord(PCITAG tag, u32 idx, u16 data) +void pci_write_config16(struct device *dev, unsigned int where, u16 val) { struct pci_dev *d; -#if LIBPCI_CHECK_VERSION(2,1,99) - if ((d = pci_get_dev(pacc, 0, tag->bus, tag->slot, tag->func))) -#else - if ((d = pci_get_dev(pacc, tag->bus, tag->slot, tag->func))) -#endif - pci_write_word(d, idx, data); + if ((d = pci_get_dev(pacc, 0, dev->busno, dev->slot, dev->func))) + pci_write_word(d, where, val); #ifdef DEBUG_PCI else printf("PCI: device not found while write word (%x:%x.%x)\n", - tag->bus, tag->slot, tag->func); + dev->busno, dev->slot, dev->func); #endif - } -void pciWriteByte(PCITAG tag, u32 idx, u8 data) +void pci_write_config32(struct device *dev, unsigned int where, u32 val) { struct pci_dev *d; -#if LIBPCI_CHECK_VERSION(2,1,99) - if ((d = pci_get_dev(pacc, 0, tag->bus, tag->slot, tag->func))) -#else - if ((d = pci_get_dev(pacc, tag->bus, tag->slot, tag->func))) -#endif - pci_write_long(d, idx, data); + if ((d = pci_get_dev(pacc, 0, dev->busno, dev->slot, dev->func))) + pci_write_long(d, where, val); #ifdef DEBUG_PCI else - printf("PCI: device not found while write long (%x:%x.%x)\n", - tag->bus, tag->slot, tag->func); + printf("PCI: device not found while write dword (%x:%x.%x)\n", + dev->busno, dev->slot, dev->func); #endif } |