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(a)gmx.net>
Index: flashrom-internal_pci_split/hwaccess.c
===================================================================
--- flashrom-internal_pci_split/hwaccess.c (Revision 896)
+++ flashrom-internal_pci_split/hwaccess.c (Arbeitskopie)
@@ -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;
Index: flashrom-internal_pci_split/hwaccess.h
===================================================================
--- flashrom-internal_pci_split/hwaccess.h (Revision 896)
+++ flashrom-internal_pci_split/hwaccess.h (Arbeitskopie)
@@ -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);
Index: flashrom-internal_pci_split/Makefile
===================================================================
--- flashrom-internal_pci_split/Makefile (Revision 896)
+++ flashrom-internal_pci_split/Makefile (Arbeitskopie)
@@ -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).
Index: flashrom-internal_pci_split/internal.c
===================================================================
--- flashrom-internal_pci_split/internal.c (Revision 896)
+++ flashrom-internal_pci_split/internal.c (Arbeitskopie)
@@ -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;
-}
--
Developer quote of the year:
"We are juggling too many chainsaws and flaming arrows and tigers."