diff options
Diffstat (limited to 'src/arch/i386')
-rw-r--r-- | src/arch/i386/Config.lb | 42 | ||||
-rw-r--r-- | src/arch/i386/boot/acpi.c | 25 | ||||
-rw-r--r-- | src/arch/i386/include/arch/acpi.h | 21 | ||||
-rw-r--r-- | src/arch/i386/include/arch/cpu.h | 19 | ||||
-rw-r--r-- | src/arch/i386/include/arch/romcc_io.h | 150 | ||||
-rw-r--r-- | src/arch/i386/init/ldscript.lb | 5 | ||||
-rw-r--r-- | src/arch/i386/init/ldscript_apc.lb | 13 | ||||
-rw-r--r-- | src/arch/i386/init/ldscript_failover.lb | 56 | ||||
-rw-r--r-- | src/arch/i386/init/ldscript_fallback.lb | 71 | ||||
-rw-r--r-- | src/arch/i386/lib/cpu.c | 7 | ||||
-rw-r--r-- | src/arch/i386/lib/pci_ops_conf1.c | 36 | ||||
-rw-r--r-- | src/arch/i386/lib/pci_ops_conf2.c | 12 |
12 files changed, 339 insertions, 118 deletions
diff --git a/src/arch/i386/Config.lb b/src/arch/i386/Config.lb index c13427042a..2b197f867e 100644 --- a/src/arch/i386/Config.lb +++ b/src/arch/i386/Config.lb @@ -1,9 +1,25 @@ uses CONFIG_SMP uses CONFIG_PRECOMPRESSED_ROM_STREAM uses CONFIG_USE_INIT +uses HAVE_FAILOVER_BOOT +uses USE_FAILOVER_IMAGE +uses USE_FALLBACK_IMAGE init init/crt0.S.lb -ldscript init/ldscript.lb + +if HAVE_FAILOVER_BOOT + if USE_FAILOVER_IMAGE + ldscript init/ldscript_failover.lb + else + ldscript init/ldscript.lb + end +else + if USE_FALLBACK_IMAGE + ldscript init/ldscript_fallback.lb + else + ldscript init/ldscript.lb + end +end makerule all depends "linuxbios.rom" @@ -21,7 +37,7 @@ end makerule payload depends "$(PAYLOAD)" - action "cp -f $< $@" + action "cp $< $@" end makerule payload.nrv2b @@ -53,9 +69,19 @@ if CONFIG_PRECOMPRESSED_ROM_STREAM makedefine PAYLOAD-1:=payload end -makerule linuxbios.rom - depends "linuxbios.strip buildrom $(PAYLOAD-1)" - action "./buildrom $< $@ $(PAYLOAD-1) $(ROM_IMAGE_SIZE) $(ROM_SECTION_SIZE)" +if USE_FAILOVER_IMAGE + makedefine LINUXBIOS_APC:= + makedefine LINUXBIOS_RAM_ROM:= + + makerule linuxbios.rom + depends "linuxbios.strip" + action "cp $< $@" + end +else + makerule linuxbios.rom + depends "linuxbios.strip buildrom $(PAYLOAD-1)" + action "./buildrom $< $@ $(PAYLOAD-1) $(ROM_IMAGE_SIZE) $(ROM_SECTION_SIZE)" + end end makerule crt0.S @@ -72,11 +98,11 @@ if CONFIG_USE_INIT action "$(OBJCOPY) --rename-section .text=.init.text --rename-section .data=.init.data --rename-section .rodata=.init.rodata --rename-section .rodata.str1.1=.init.rodata.str1.1 init.pre.o init.o" end - makerule linuxbios - depends "crt0.o init.o linuxbios_ram.rom ldscript.ld" + makerule linuxbios + depends "crt0.o $(INIT-OBJECTS) $(LINUXBIOS_APC) $(LINUXBIOS_RAM_ROM) ldscript.ld" action "$(CC) -nostdlib -nostartfiles -static -o $@ -T ldscript.ld crt0.o init.o" action "$(CROSS_COMPILE)nm -n linuxbios | sort > linuxbios.map" - end + end end diff --git a/src/arch/i386/boot/acpi.c b/src/arch/i386/boot/acpi.c index 3393b89fee..e1734d80e7 100644 --- a/src/arch/i386/boot/acpi.c +++ b/src/arch/i386/boot/acpi.c @@ -203,6 +203,31 @@ void acpi_create_srat(acpi_srat_t *srat) header->checksum = acpi_checksum((void *)srat, header->length); } +void acpi_create_slit(acpi_slit_t *slit) +{ + + acpi_header_t *header=&(slit->header); + unsigned long current=(unsigned long)slit+sizeof(acpi_slit_t); + + memset((void *)slit, 0, sizeof(acpi_slit_t)); + + /* fill out header fields */ + memcpy(header->signature, SLIT_NAME, 4); + memcpy(header->oem_id, OEM_ID, 6); + memcpy(header->oem_table_id, SLIT_TABLE, 8); + memcpy(header->asl_compiler_id, ASLC, 4); + + header->length = sizeof(acpi_slit_t); + header->revision = 1; + +// current = acpi_fill_slit(current); + + /* recalculate length */ + header->length= current - (unsigned long)slit; + + header->checksum = acpi_checksum((void *)slit, header->length); +} + void acpi_create_hpet(acpi_hpet_t *hpet) { #define HPET_ADDR 0xfed00000ULL diff --git a/src/arch/i386/include/arch/acpi.h b/src/arch/i386/include/arch/acpi.h index 12d57549bc..333057b13b 100644 --- a/src/arch/i386/include/arch/acpi.h +++ b/src/arch/i386/include/arch/acpi.h @@ -6,12 +6,9 @@ * * The ACPI table structs are based on the Linux kernel sources. * - * ACPI FADT & FACS added by Nick Barker <nick.barker9@btinternet.com> + */ +/* ACPI FADT & FACS added by Nick Barker <nick.barker9@btinternet.com> * those parts (C) 2004 Nick Barker - * - * ACPI SRAT support added in 2005.9 by yhlu - * Copyright 2005 ADVANCED MICRO DEVICES, INC. All Rights Reserved. - * */ @@ -32,11 +29,13 @@ typedef unsigned long long u64; #define HPET_NAME "HPET" #define MADT_NAME "APIC" #define SRAT_NAME "SRAT" +#define SLIT_NAME "SLIT" #define RSDT_TABLE "RSDT " #define HPET_TABLE "AMD64 " #define MADT_TABLE "MADT " #define SRAT_TABLE "SRAT " +#define SLIT_TABLE "SLIT " #define OEM_ID "LXBIOS" #define ASLC "NONE" @@ -49,7 +48,7 @@ typedef struct acpi_rsdp { char oem_id[6]; /* OEM ID, "LXBIOS" */ u8 revision; /* 0 for APCI 1.0, 2 for ACPI 2.0 */ u32 rsdt_address; /* physical address of RSDT */ - u32 length; /* total length of RSDP (incl. extended part) */ + u32 length; /* total length of RSDP (including extended part) */ u64 xsdt_address; /* physical address of XSDT */ u8 ext_checksum; /* chechsum of whole table */ u8 reserved[3]; @@ -84,16 +83,15 @@ typedef struct acpi_table_header /* ACPI common table header */ /* RSDT */ typedef struct acpi_rsdt { struct acpi_table_header header; - u32 entry[5+ACPI_SSDTX_NUM]; /* HPET, FADT, SRAT, MADT(APIC), SSDT, SSDTX */ + u32 entry[6+ACPI_SSDTX_NUM]; /* HPET, FADT, SRAT, SLIT, MADT(APIC), SSDT, SSDTX*/ } __attribute__ ((packed)) acpi_rsdt_t; /* XSDT */ typedef struct acpi_xsdt { struct acpi_table_header header; - u64 entry[5+ACPI_SSDTX_NUM]; + u64 entry[6+ACPI_SSDTX_NUM]; } __attribute__ ((packed)) acpi_xsdt_t; - /* HPET TIMERS */ typedef struct acpi_hpet { struct acpi_table_header header; @@ -138,6 +136,11 @@ typedef struct acpi_srat_mem { u32 resv2[2]; } __attribute__ ((packed)) acpi_srat_mem_t; +/* SLIT */ +typedef struct acpi_slit { + struct acpi_table_header header; + /* followed by static resource allocation 8+byte[num*num]*/ +} __attribute__ ((packed)) acpi_slit_t; /* MADT */ diff --git a/src/arch/i386/include/arch/cpu.h b/src/arch/i386/include/arch/cpu.h index 4cdeded8bc..ebe6ed155c 100644 --- a/src/arch/i386/include/arch/cpu.h +++ b/src/arch/i386/include/arch/cpu.h @@ -141,6 +141,25 @@ static inline unsigned long cpu_index(void) return ci->index; } + +struct cpuinfo_x86 { + uint8_t x86; /* CPU family */ + uint8_t x86_vendor; /* CPU vendor */ + uint8_t x86_model; + uint8_t x86_mask; +}; + +static void inline get_fms(struct cpuinfo_x86 *c, uint32_t tfms) +{ + c->x86 = (tfms >> 8) & 0xf; + c->x86_model = (tfms >> 4) & 0xf; + c->x86_mask = tfms & 0xf; + if (c->x86 == 0xf) + c->x86 += (tfms >> 20) & 0xff; + if (c->x86 >= 0x6) + c->x86_model += ((tfms >> 16) & 0xF) << 4; + +} #endif #endif /* ARCH_CPU_H */ diff --git a/src/arch/i386/include/arch/romcc_io.h b/src/arch/i386/include/arch/romcc_io.h index 983835a093..6fafbd99a9 100644 --- a/src/arch/i386/include/arch/romcc_io.h +++ b/src/arch/i386/include/arch/romcc_io.h @@ -4,74 +4,35 @@ #include <stdint.h> -static inline uint8_t read8(unsigned long addr) +static inline __attribute__((always_inline)) uint8_t read8(unsigned long addr) { return *((volatile uint8_t *)(addr)); } -static inline uint16_t read16(unsigned long addr) +static inline __attribute__((always_inline)) uint16_t read16(unsigned long addr) { return *((volatile uint16_t *)(addr)); } -static inline uint32_t read32(unsigned long addr) +static inline __attribute__((always_inline)) uint32_t read32(unsigned long addr) { return *((volatile uint32_t *)(addr)); } -static inline void write8(unsigned long addr, uint8_t value) +static inline __attribute__((always_inline)) void write8(unsigned long addr, uint8_t value) { *((volatile uint8_t *)(addr)) = value; } -static inline void write16(unsigned long addr, uint16_t value) +static inline __attribute__((always_inline)) void write16(unsigned long addr, uint16_t value) { *((volatile uint16_t *)(addr)) = value; } -static inline void write32(unsigned long addr, uint32_t value) +static inline __attribute__((always_inline)) void write32(unsigned long addr, uint32_t value) { *((volatile uint32_t *)(addr)) = value; } -#if 0 -typedef __builtin_div_t div_t; -typedef __builtin_ldiv_t ldiv_t; -typedef __builtin_udiv_t udiv_t; -typedef __builtin_uldiv_t uldiv_t; - -static inline div_t div(int numer, int denom) -{ - return __builtin_div(numer, denom); -} - -static inline ldiv_t ldiv(long numer, long denom) -{ - return __builtin_ldiv(numer, denom); -} - -static inline udiv_t udiv(unsigned numer, unsigned denom) -{ - return __builtin_udiv(numer, denom); -} - -static inline uldiv_t uldiv(unsigned long numer, unsigned long denom) -{ - return __builtin_uldiv(numer, denom); -} - - - -inline int log2(int value) -{ - /* __builtin_bsr is a exactly equivalent to the x86 machine - * instruction with the exception that it returns -1 - * when the value presented to it is zero. - * Otherwise __builtin_bsr returns the zero based index of - * the highest bit set. - */ - return __builtin_bsr(value); -} -#endif static inline int log2(int value) { @@ -98,16 +59,16 @@ static inline int log2f(int value) } -#define PCI_ADDR(BUS, DEV, FN, WHERE) ( \ - (((BUS) & 0xFF) << 16) | \ - (((DEV) & 0x1f) << 11) | \ - (((FN) & 0x07) << 8) | \ - ((WHERE) & 0xFF)) +#define PCI_ADDR(SEGBUS, DEV, FN, WHERE) ( \ + (((SEGBUS) & 0xFFF) << 20) | \ + (((DEV) & 0x1F) << 15) | \ + (((FN) & 0x07) << 12) | \ + ((WHERE) & 0xFFF)) -#define PCI_DEV(BUS, DEV, FN) ( \ - (((BUS) & 0xFF) << 16) | \ - (((DEV) & 0x1f) << 11) | \ - (((FN) & 0x7) << 8)) +#define PCI_DEV(SEGBUS, DEV, FN) ( \ + (((SEGBUS) & 0xFFF) << 20) | \ + (((DEV) & 0x1F) << 15) | \ + (((FN) & 0x07) << 12)) #define PCI_ID(VENDOR_ID, DEVICE_ID) \ ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF)) @@ -117,58 +78,103 @@ static inline int log2f(int value) typedef unsigned device_t; -static inline __attribute__((always_inline)) uint8_t pci_read_config8(device_t dev, unsigned where) +static inline __attribute__((always_inline)) uint8_t pci_io_read_config8(device_t dev, unsigned where) { unsigned addr; - addr = dev | where; + addr = (dev>>4) | where; outl(0x80000000 | (addr & ~3), 0xCF8); return inb(0xCFC + (addr & 3)); } -static inline __attribute__((always_inline)) uint16_t pci_read_config16(device_t dev, unsigned where) +static inline __attribute__((always_inline)) uint8_t pci_read_config8(device_t dev, unsigned where) +{ + return pci_io_read_config8(dev, where); +} + +static inline __attribute__((always_inline)) uint16_t pci_io_read_config16(device_t dev, unsigned where) { unsigned addr; - addr = dev | where; + addr = (dev>>4) | where; outl(0x80000000 | (addr & ~3), 0xCF8); return inw(0xCFC + (addr & 2)); } -static inline __attribute__((always_inline)) uint32_t pci_read_config32(device_t dev, unsigned where) +static inline __attribute__((always_inline)) uint16_t pci_read_config16(device_t dev, unsigned where) +{ + return pci_io_read_config16(dev, where); +} + + +static inline __attribute__((always_inline)) uint32_t pci_io_read_config32(device_t dev, unsigned where) { unsigned addr; - addr = dev | where; + addr = (dev>>4) | where; outl(0x80000000 | (addr & ~3), 0xCF8); return inl(0xCFC); } -static inline __attribute__((always_inline)) void pci_write_config8(device_t dev, unsigned where, uint8_t value) +static inline __attribute__((always_inline)) uint32_t pci_read_config32(device_t dev, unsigned where) +{ + return pci_io_read_config32(dev, where); +} + +static inline __attribute__((always_inline)) void pci_io_write_config8(device_t dev, unsigned where, uint8_t value) { unsigned addr; - addr = dev | where; + addr = (dev>>4) | where; outl(0x80000000 | (addr & ~3), 0xCF8); outb(value, 0xCFC + (addr & 3)); } +static inline __attribute__((always_inline)) void pci_write_config8(device_t dev, unsigned where, uint8_t value) +{ + pci_io_write_config8(dev, where, value); +} + + +static inline __attribute__((always_inline)) void pci_io_write_config16(device_t dev, unsigned where, uint16_t value) +{ + unsigned addr; + addr = (dev>>4) | where; + outl(0x80000000 | (addr & ~3), 0xCF8); + outw(value, 0xCFC + (addr & 2)); +} + static inline __attribute__((always_inline)) void pci_write_config16(device_t dev, unsigned where, uint16_t value) { - unsigned addr; - addr = dev | where; - outl(0x80000000 | (addr & ~3), 0xCF8); - outw(value, 0xCFC + (addr & 2)); + pci_io_write_config16(dev, where, value); } -static inline __attribute__((always_inline)) void pci_write_config32(device_t dev, unsigned where, uint32_t value) + +static inline __attribute__((always_inline)) void pci_io_write_config32(device_t dev, unsigned where, uint32_t value) { unsigned addr; - addr = dev | where; + addr = (dev>>4) | where; outl(0x80000000 | (addr & ~3), 0xCF8); outl(value, 0xCFC); } +static inline __attribute__((always_inline)) void pci_write_config32(device_t dev, unsigned where, uint32_t value) +{ + pci_io_write_config32(dev, where, value); +} + #define PCI_DEV_INVALID (0xffffffffU) +static device_t pci_io_locate_device(unsigned pci_id, device_t dev) +{ + for(; dev <= PCI_DEV(255, 31, 7); dev += PCI_DEV(0,0,1)) { + unsigned int id; + id = pci_io_read_config32(dev, 0); + if (id == pci_id) { + return dev; + } + } + return PCI_DEV_INVALID; +} + static device_t pci_locate_device(unsigned pci_id, device_t dev) { - for(; dev <= PCI_DEV(CONFIG_MAX_PCI_BUSES, 31, 7); dev += PCI_DEV(0,0,1)) { + for(; dev <= PCI_DEV(255, 31, 7); dev += PCI_DEV(0,0,1)) { unsigned int id; id = pci_read_config32(dev, 0); if (id == pci_id) { @@ -180,11 +186,11 @@ static device_t pci_locate_device(unsigned pci_id, device_t dev) static device_t pci_locate_device_on_bus(unsigned pci_id, unsigned bus) { - device_t dev, last; + device_t dev, last; dev = PCI_DEV(bus, 0, 0); last = PCI_DEV(bus, 31, 7); - + for(; dev <=last; dev += PCI_DEV(0,0,1)) { unsigned int id; id = pci_read_config32(dev, 0); @@ -195,8 +201,6 @@ static device_t pci_locate_device_on_bus(unsigned pci_id, unsigned bus) return PCI_DEV_INVALID; } - - /* Generic functions for pnp devices */ static inline __attribute__((always_inline)) void pnp_write_config(device_t dev, uint8_t reg, uint8_t value) { diff --git a/src/arch/i386/init/ldscript.lb b/src/arch/i386/init/ldscript.lb index e647fb42fe..c902782681 100644 --- a/src/arch/i386/init/ldscript.lb +++ b/src/arch/i386/init/ldscript.lb @@ -36,16 +36,13 @@ INPUT(linuxbios_ram.rom) SECTIONS { . = _ROMBASE; - + .ram . : { _ram = . ; linuxbios_ram.rom(*) _eram = . ; } - _x = .; - . = (_x < (_ROMBASE - 0x10000 + ROM_IMAGE_SIZE)) ? (_ROMBASE - 0x10000 + ROM_IMAGE_SIZE) : _x; - /* This section might be better named .setup */ .rom . : { _rom = .; diff --git a/src/arch/i386/init/ldscript_apc.lb b/src/arch/i386/init/ldscript_apc.lb new file mode 100644 index 0000000000..43570ebe90 --- /dev/null +++ b/src/arch/i386/init/ldscript_apc.lb @@ -0,0 +1,13 @@ +INPUT(linuxbios_apc.rom) +SECTIONS +{ + .apcrom . : { + _apcrom = .; + linuxbios_apc.rom(*) + _eapcrom = .; + } + _iseg_apc = DCACHE_RAM_BASE; + _eiseg_apc = _iseg_apc + SIZEOF(.apcrom); + _liseg_apc = _apcrom; + _eliseg_apc = _eapcrom; +} diff --git a/src/arch/i386/init/ldscript_failover.lb b/src/arch/i386/init/ldscript_failover.lb new file mode 100644 index 0000000000..12cb3feba8 --- /dev/null +++ b/src/arch/i386/init/ldscript_failover.lb @@ -0,0 +1,56 @@ +/* + * Memory map: + * + * _RAMBASE + * : data segment + * : bss segment + * : heap + * : stack + * _ROMBASE + * : linuxbios text + * : readonly text + */ +/* + * Bootstrap code for the STPC Consumer + * Copyright (c) 1999 by Net Insight AB. All Rights Reserved. + * + */ + +/* + * Written by Johan Rydberg, based on work by Daniel Kahlin. + * Rewritten by Eric Biederman + */ +/* + * We use ELF as output format. So that we can + * debug the code in some form. + */ +OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") +OUTPUT_ARCH(i386) + +/* +ENTRY(_start) +*/ + +TARGET(binary) +SECTIONS +{ + . = _ROMBASE; + + /* This section might be better named .setup */ + .rom . : { + _rom = .; + *(.rom.text); + *(.rom.data); + *(.rom.data.*); + . = ALIGN(16); + _erom = .; + } + + _lrom = LOADADDR(.rom); + _elrom = LOADADDR(.rom) + SIZEOF(.rom); + + /DISCARD/ : { + *(.comment) + *(.note) + } +} diff --git a/src/arch/i386/init/ldscript_fallback.lb b/src/arch/i386/init/ldscript_fallback.lb new file mode 100644 index 0000000000..f2ffd1288c --- /dev/null +++ b/src/arch/i386/init/ldscript_fallback.lb @@ -0,0 +1,71 @@ +/* + * Memory map: + * + * _RAMBASE + * : data segment + * : bss segment + * : heap + * : stack + * _ROMBASE + * : linuxbios text + * : readonly text + */ +/* + * Bootstrap code for the STPC Consumer + * Copyright (c) 1999 by Net Insight AB. All Rights Reserved. + * + */ + +/* + * Written by Johan Rydberg, based on work by Daniel Kahlin. + * Rewritten by Eric Biederman + */ +/* + * We use ELF as output format. So that we can + * debug the code in some form. + */ +OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") +OUTPUT_ARCH(i386) + +/* +ENTRY(_start) +*/ + +TARGET(binary) +INPUT(linuxbios_ram.rom) +SECTIONS +{ + . = _ROMBASE; + + .ram . : { + _ram = . ; + linuxbios_ram.rom(*) + _eram = . ; + } + + /* cut _start into last 64k*/ + _x = .; + . = (_x < (_ROMBASE - 0x10000 + ROM_IMAGE_SIZE)) ? (_ROMBASE - 0x10000 + ROM_IMAGE_SIZE) : _x; + + /* This section might be better named .setup */ + .rom . : { + _rom = .; + *(.rom.text); + *(.rom.data); + *(.rom.data.*); + . = ALIGN(16); + _erom = .; + } + + _lrom = LOADADDR(.rom); + _elrom = LOADADDR(.rom) + SIZEOF(.rom); + _iseg = _RAMBASE; + _eiseg = _iseg + SIZEOF(.ram); + _liseg = _ram; + _eliseg = _eram; + + /DISCARD/ : { + *(.comment) + *(.note) + } +} diff --git a/src/arch/i386/lib/cpu.c b/src/arch/i386/lib/cpu.c index 11ccee211f..aee230d075 100644 --- a/src/arch/i386/lib/cpu.c +++ b/src/arch/i386/lib/cpu.c @@ -222,6 +222,8 @@ void cpu_initialize(void) */ struct device *cpu; struct cpu_info *info; + struct cpuinfo_x86 c; + info = cpu_info(); printk_notice("Initializing CPU #%d\n", info->index); @@ -245,6 +247,11 @@ void cpu_initialize(void) identify_cpu(cpu); printk_debug("CPU: vendor %s device %x\n", cpu_vendor_name(cpu->vendor), cpu->device); + + get_fms(&c, cpu->device); + + printk_debug("CPU: family %02x, model %02x, stepping %02x\n", c.x86, c.x86_model, c.x86_mask); + /* Lookup the cpu's operations */ set_cpu_ops(cpu); diff --git a/src/arch/i386/lib/pci_ops_conf1.c b/src/arch/i386/lib/pci_ops_conf1.c index fb0a434d53..b4181e39bc 100644 --- a/src/arch/i386/lib/pci_ops_conf1.c +++ b/src/arch/i386/lib/pci_ops_conf1.c @@ -10,40 +10,40 @@ #define CONFIG_CMD(bus,devfn, where) (0x80000000 | (bus << 16) | (devfn << 8) | (where & ~3)) -static uint8_t pci_conf1_read_config8(struct bus *pbus, unsigned char bus, int devfn, int where) +static uint8_t pci_conf1_read_config8(struct bus *pbus, int bus, int devfn, int where) { - outl(CONFIG_CMD(bus, devfn, where), 0xCF8); - return inb(0xCFC + (where & 3)); + outl(CONFIG_CMD(bus, devfn, where), 0xCF8); + return inb(0xCFC + (where & 3)); } -static uint16_t pci_conf1_read_config16(struct bus *pbus, unsigned char bus, int devfn, int where) +static uint16_t pci_conf1_read_config16(struct bus *pbus, int bus, int devfn, int where) { - outl(CONFIG_CMD(bus, devfn, where), 0xCF8); - return inw(0xCFC + (where & 2)); + outl(CONFIG_CMD(bus, devfn, where), 0xCF8); + return inw(0xCFC + (where & 2)); } -static uint32_t pci_conf1_read_config32(struct bus *pbus, unsigned char bus, int devfn, int where) +static uint32_t pci_conf1_read_config32(struct bus *pbus, int bus, int devfn, int where) { - outl(CONFIG_CMD(bus, devfn, where), 0xCF8); - return inl(0xCFC); + outl(CONFIG_CMD(bus, devfn, where), 0xCF8); + return inl(0xCFC); } -static void pci_conf1_write_config8(struct bus *pbus, unsigned char bus, int devfn, int where, uint8_t value) +static void pci_conf1_write_config8(struct bus *pbus, int bus, int devfn, int where, uint8_t value) { - outl(CONFIG_CMD(bus, devfn, where), 0xCF8); - outb(value, 0xCFC + (where & 3)); + outl(CONFIG_CMD(bus, devfn, where), 0xCF8); + outb(value, 0xCFC + (where & 3)); } -static void pci_conf1_write_config16(struct bus *pbus, unsigned char bus, int devfn, int where, uint16_t value) +static void pci_conf1_write_config16(struct bus *pbus, int bus, int devfn, int where, uint16_t value) { - outl(CONFIG_CMD(bus, devfn, where), 0xCF8); - outw(value, 0xCFC + (where & 2)); + outl(CONFIG_CMD(bus, devfn, where), 0xCF8); + outw(value, 0xCFC + (where & 2)); } -static void pci_conf1_write_config32(struct bus *pbus, unsigned char bus, int devfn, int where, uint32_t value) +static void pci_conf1_write_config32(struct bus *pbus, int bus, int devfn, int where, uint32_t value) { - outl(CONFIG_CMD(bus, devfn, where), 0xCF8); - outl(value, 0xCFC); + outl(CONFIG_CMD(bus, devfn, where), 0xCF8); + outl(value, 0xCFC); } #undef CONFIG_CMD diff --git a/src/arch/i386/lib/pci_ops_conf2.c b/src/arch/i386/lib/pci_ops_conf2.c index 10fde93346..839f5b44c7 100644 --- a/src/arch/i386/lib/pci_ops_conf2.c +++ b/src/arch/i386/lib/pci_ops_conf2.c @@ -12,7 +12,7 @@ #define FUNC(devfn) (((devfn & 7) << 1) | 0xf0) #define SET(bus,devfn) outb(FUNC(devfn), 0xCF8); outb(bus, 0xCFA); -static uint8_t pci_conf2_read_config8(struct bus *pbus, unsigned char bus, int devfn, int where) +static uint8_t pci_conf2_read_config8(struct bus *pbus, int bus, int devfn, int where) { uint8_t value; SET(bus, devfn); @@ -21,7 +21,7 @@ static uint8_t pci_conf2_read_config8(struct bus *pbus, unsigned char bus, int d return value; } -static uint16_t pci_conf2_read_config16(struct bus *pbus, unsigned char bus, int devfn, int where) +static uint16_t pci_conf2_read_config16(struct bus *pbus, int bus, int devfn, int where) { uint16_t value; SET(bus, devfn); @@ -30,7 +30,7 @@ static uint16_t pci_conf2_read_config16(struct bus *pbus, unsigned char bus, int return value; } -static uint32_t pci_conf2_read_config32(struct bus *pbus, unsigned char bus, int devfn, int where) +static uint32_t pci_conf2_read_config32(struct bus *pbus, int bus, int devfn, int where) { uint32_t value; SET(bus, devfn); @@ -39,21 +39,21 @@ static uint32_t pci_conf2_read_config32(struct bus *pbus, unsigned char bus, int return value; } -static void pci_conf2_write_config8(struct bus *pbus, unsigned char bus, int devfn, int where, uint8_t value) +static void pci_conf2_write_config8(struct bus *pbus, int bus, int devfn, int where, uint8_t value) { SET(bus, devfn); outb(value, IOADDR(devfn, where)); outb(0, 0xCF8); } -static void pci_conf2_write_config16(struct bus *pbus, unsigned char bus, int devfn, int where, uint16_t value) +static void pci_conf2_write_config16(struct bus *pbus, int bus, int devfn, int where, uint16_t value) { SET(bus, devfn); outw(value, IOADDR(devfn, where)); outb(0, 0xCF8); } -static void pci_conf2_write_config32(struct bus *pbus, unsigned char bus, int devfn, int where, uint32_t value) +static void pci_conf2_write_config32(struct bus *pbus, int bus, int devfn, int where, uint32_t value) { SET(bus, devfn); outl(value, IOADDR(devfn, where)); |