Author: hailfinger Date: Fri Feb 12 20:35:25 2010 New Revision: 898 URL: http://flashrom.org/trac/coreboot/changeset/898
Log: Linking in support for the internal programmer doesn't make sense if you only need hardware (ioport, memory) access. Split internal.c into internal.c and hwaccess.c.
Note: This patch was created by "svn cp internal.c hwaccess.c" and then removing stuff from both files. That's why you can't apply the patch as-is before running the svn cp.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net Acked-by: Sean Nelson audiohacked@gmail.com
Added: trunk/hwaccess.c - copied, changed from r896, trunk/internal.c Modified: trunk/Makefile trunk/hwaccess.h trunk/internal.c
Modified: trunk/Makefile ============================================================================== --- trunk/Makefile Fri Feb 12 19:40:27 2010 (r897) +++ trunk/Makefile Fri Feb 12 20:35:25 2010 (r898) @@ -103,7 +103,7 @@
ifeq ($(CONFIG_INTERNAL), yes) FEATURE_CFLAGS += -D'INTERNAL_SUPPORT=1' -PROGRAMMER_OBJS += chipset_enable.o board_enable.o cbtable.o dmi.o it87spi.o ichspi.o sb600spi.o wbsio_spi.o +PROGRAMMER_OBJS += chipset_enable.o board_enable.o cbtable.o dmi.o it87spi.o ichspi.o sb600spi.o wbsio_spi.o internal.o NEED_PCI := yes endif
@@ -180,12 +180,7 @@ ifeq ($(NEED_PCI), yes) LIBS += -lpci FEATURE_CFLAGS += -D'NEED_PCI=1' -PROGRAMMER_OBJS += pcidev.o physmap.o internal.o #FIXME: We need to move stuff - # from internal.c and pcidev.c to pci.c - # internal.c needs to be split - # into internal-programmer-only stuff - # and a support lib for all internal+pci - # based stuff. +PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o ifeq ($(OS_ARCH), NetBSD) LIBS += -lpciutils # The libpci we want. LIBS += -l$(shell uname -m) # For (i386|x86_64)_iopl(2).
Copied and modified: trunk/hwaccess.c (from r896, trunk/internal.c) ============================================================================== --- trunk/internal.c Fri Feb 12 06:44:18 2010 (r896, copy source) +++ trunk/hwaccess.c Fri Feb 12 20:35:25 2010 (r898) @@ -1,7 +1,7 @@ /* * This file is part of the flashrom project. * - * Copyright (C) 2009 Carl-Daniel Hailfinger + * Copyright (C) 2009,2010 Carl-Daniel Hailfinger * * 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 @@ -23,7 +23,6 @@ #include <stdlib.h> #include <fcntl.h> #include <sys/types.h> -#include <sys/stat.h> #include <errno.h> #include "flash.h"
@@ -31,77 +30,6 @@ int io_fd; #endif
-#if NEED_PCI == 1 -struct pci_dev *pci_dev_find_filter(struct pci_filter filter) -{ - struct pci_dev *temp; - - for (temp = pacc->devices; temp; temp = temp->next) - if (pci_filter_match(&filter, temp)) - return temp; - - return NULL; -} - -struct pci_dev *pci_dev_find_vendorclass(uint16_t vendor, uint16_t class) -{ - struct pci_dev *temp; - struct pci_filter filter; - uint16_t tmp2; - - pci_filter_init(NULL, &filter); - filter.vendor = vendor; - - for (temp = pacc->devices; temp; temp = temp->next) - if (pci_filter_match(&filter, temp)) { - /* Read PCI class */ - tmp2 = pci_read_word(temp, 0x0a); - if (tmp2 == class) - return temp; - } - - return NULL; -} - -struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device) -{ - struct pci_dev *temp; - struct pci_filter filter; - - pci_filter_init(NULL, &filter); - filter.vendor = vendor; - filter.device = device; - - for (temp = pacc->devices; temp; temp = temp->next) - if (pci_filter_match(&filter, temp)) - return temp; - - return NULL; -} - -struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device, - uint16_t card_vendor, uint16_t card_device) -{ - struct pci_dev *temp; - struct pci_filter filter; - - pci_filter_init(NULL, &filter); - filter.vendor = vendor; - filter.device = device; - - for (temp = pacc->devices; temp; temp = temp->next) - if (pci_filter_match(&filter, temp)) { - if ((card_vendor == - pci_read_word(temp, PCI_SUBSYSTEM_VENDOR_ID)) - && (card_device == - pci_read_word(temp, PCI_SUBSYSTEM_ID))) - return temp; - } - - return NULL; -} -#endif - void get_io_perms(void) { #if defined (__sun) && (defined(__i386) || defined(__amd64)) @@ -124,101 +52,6 @@ #endif }
-#if INTERNAL_SUPPORT == 1 -struct superio superio = {}; - -void probe_superio(void) -{ - superio = probe_superio_ite(); -#if 0 /* Winbond SuperI/O code is not yet available. */ - if (superio.vendor == SUPERIO_VENDOR_NONE) - superio = probe_superio_winbond(); -#endif -} - -int internal_init(void) -{ - int ret = 0; - - get_io_perms(); - - /* Initialize PCI access for flash enables */ - pacc = pci_alloc(); /* Get the pci_access structure */ - /* Set all options you want -- here we stick with the defaults */ - pci_init(pacc); /* Initialize the PCI library */ - pci_scan_bus(pacc); /* We want to get the list of devices */ - - /* We look at the lbtable first to see if we need a - * mainboard specific flash enable sequence. - */ - coreboot_init(); - dmi_init(); - - /* Probe for the SuperI/O chip and fill global struct superio. */ - probe_superio(); - - /* try to enable it. Failure IS an option, since not all motherboards - * really need this to be done, etc., etc. - */ - ret = chipset_flash_enable(); - if (ret == -2) { - printf("WARNING: No chipset found. Flash detection " - "will most likely fail.\n"); - } - - board_flash_enable(lb_vendor, lb_part); - - /* Even if chipset init returns an error code, we don't want to abort. - * The error code might have been a warning only. - * Besides that, we don't check the board enable return code either. - */ - return 0; -} - -int internal_shutdown(void) -{ - release_io_perms(); - - return 0; -} -#endif - -void internal_chip_writeb(uint8_t val, chipaddr addr) -{ - mmio_writeb(val, (void *) addr); -} - -void internal_chip_writew(uint16_t val, chipaddr addr) -{ - mmio_writew(val, (void *) addr); -} - -void internal_chip_writel(uint32_t val, chipaddr addr) -{ - mmio_writel(val, (void *) addr); -} - -uint8_t internal_chip_readb(const chipaddr addr) -{ - return mmio_readb((void *) addr); -} - -uint16_t internal_chip_readw(const chipaddr addr) -{ - return mmio_readw((void *) addr); -} - -uint32_t internal_chip_readl(const chipaddr addr) -{ - return mmio_readl((void *) addr); -} - -void internal_chip_readn(uint8_t *buf, const chipaddr addr, size_t len) -{ - memcpy(buf, (void *)addr, len); - return; -} - void mmio_writeb(uint8_t val, void *addr) { *(volatile uint8_t *) addr = val;
Modified: trunk/hwaccess.h ============================================================================== --- trunk/hwaccess.h Fri Feb 12 19:40:27 2010 (r897) +++ trunk/hwaccess.h Fri Feb 12 20:35:25 2010 (r898) @@ -133,10 +133,6 @@ #endif #endif
-#if defined(__FreeBSD__) || defined(__DragonFly__) -extern int io_fd; -#endif - #if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__) typedef struct { uint32_t hi, lo; } msr_t; msr_t rdmsr(int addr);
Modified: trunk/internal.c ============================================================================== --- trunk/internal.c Fri Feb 12 19:40:27 2010 (r897) +++ trunk/internal.c Fri Feb 12 20:35:25 2010 (r898) @@ -27,10 +27,6 @@ #include <errno.h> #include "flash.h"
-#if defined(__FreeBSD__) || defined(__DragonFly__) -int io_fd; -#endif - #if NEED_PCI == 1 struct pci_dev *pci_dev_find_filter(struct pci_filter filter) { @@ -102,28 +98,6 @@ } #endif
-void get_io_perms(void) -{ -#if defined (__sun) && (defined(__i386) || defined(__amd64)) - if (sysi86(SI86V86, V86SC_IOPL, PS_IOPL) != 0) { -#elif defined(__FreeBSD__) || defined (__DragonFly__) - if ((io_fd = open("/dev/io", O_RDWR)) < 0) { -#else - if (iopl(3) != 0) { -#endif - fprintf(stderr, "ERROR: Could not get I/O privileges (%s).\n" - "You need to be root.\n", strerror(errno)); - exit(1); - } -} - -void release_io_perms(void) -{ -#if defined(__FreeBSD__) || defined(__DragonFly__) - close(io_fd); -#endif -} - #if INTERNAL_SUPPORT == 1 struct superio superio = {};
@@ -218,33 +192,3 @@ memcpy(buf, (void *)addr, len); return; } - -void mmio_writeb(uint8_t val, void *addr) -{ - *(volatile uint8_t *) addr = val; -} - -void mmio_writew(uint16_t val, void *addr) -{ - *(volatile uint16_t *) addr = val; -} - -void mmio_writel(uint32_t val, void *addr) -{ - *(volatile uint32_t *) addr = val; -} - -uint8_t mmio_readb(void *addr) -{ - return *(volatile uint8_t *) addr; -} - -uint16_t mmio_readw(void *addr) -{ - return *(volatile uint16_t *) addr; -} - -uint32_t mmio_readl(void *addr) -{ - return *(volatile uint32_t *) addr; -}