diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2019-03-03 00:35:15 +0200 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2019-03-04 15:59:23 +0000 |
commit | 3ee8b750f49b7c82e8b8787ee306017746e8c12a (patch) | |
tree | c2d5a9a2b35e561303e9a6088004e05a7b282421 /src/arch/x86 | |
parent | 3855c01e0a9d9e9787652479576e882bcda9fde5 (diff) | |
download | coreboot-3ee8b750f49b7c82e8b8787ee306017746e8c12a.tar.xz |
arch/io.h: Separate MMIO and PNP ops
Change-Id: Ie32f1d43168c277be46cdbd7fbfa2445d9899689
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/31699
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/include/arch/io.h | 124 | ||||
-rw-r--r-- | src/arch/x86/include/arch/mmio.h | 71 |
2 files changed, 73 insertions, 122 deletions
diff --git a/src/arch/x86/include/arch/io.h b/src/arch/x86/include/arch/io.h index f0c0c80260..d39bbb3ff4 100644 --- a/src/arch/x86/include/arch/io.h +++ b/src/arch/x86/include/arch/io.h @@ -11,10 +11,9 @@ * GNU General Public License for more details. */ -#ifndef _ASM_IO_H -#define _ASM_IO_H +#ifndef __ARCH_IO_H__ +#define __ARCH_IO_H__ -#include <endian.h> #include <stdint.h> /* @@ -150,123 +149,4 @@ static inline void insl(uint16_t port, void *addr, unsigned long count) ); } -static __always_inline uint8_t read8( - const volatile void *addr) -{ - return *((volatile uint8_t *)(addr)); -} - -static __always_inline uint16_t read16( - const volatile void *addr) -{ - return *((volatile uint16_t *)(addr)); -} - -static __always_inline uint32_t read32( - const volatile void *addr) -{ - return *((volatile uint32_t *)(addr)); -} - -#ifndef __ROMCC__ -static __always_inline uint64_t read64( - const volatile void *addr) -{ - return *((volatile uint64_t *)(addr)); -} -#endif - -static __always_inline void write8(volatile void *addr, - uint8_t value) -{ - *((volatile uint8_t *)(addr)) = value; -} - -static __always_inline void write16(volatile void *addr, - uint16_t value) -{ - *((volatile uint16_t *)(addr)) = value; -} - -static __always_inline void write32(volatile void *addr, - uint32_t value) -{ - *((volatile uint32_t *)(addr)) = value; -} - -#ifndef __ROMCC__ -static __always_inline void write64(volatile void *addr, - uint64_t value) -{ - *((volatile uint64_t *)(addr)) = value; -} -#endif - -#include <device/pnp_type.h> - -#ifdef __SIMPLE_DEVICE__ - -/* Generic functions for pnp devices */ -static __always_inline void pnp_write_config( - pnp_devfn_t dev, uint8_t reg, uint8_t value) -{ - unsigned int port = dev >> 8; - outb(reg, port); - outb(value, port + 1); -} - -static __always_inline uint8_t pnp_read_config( - pnp_devfn_t dev, uint8_t reg) -{ - unsigned int port = dev >> 8; - outb(reg, port); - return inb(port + 1); -} - -static __always_inline -void pnp_set_logical_device(pnp_devfn_t dev) -{ - unsigned int device = dev & 0xff; - pnp_write_config(dev, 0x07, device); -} - -static __always_inline -void pnp_set_enable(pnp_devfn_t dev, int enable) -{ - pnp_write_config(dev, 0x30, enable?0x1:0x0); -} - -static __always_inline -int pnp_read_enable(pnp_devfn_t dev) -{ - return !!pnp_read_config(dev, 0x30); -} - -static __always_inline -void pnp_set_iobase(pnp_devfn_t dev, unsigned int index, unsigned int iobase) -{ - pnp_write_config(dev, index + 0, (iobase >> 8) & 0xff); - pnp_write_config(dev, index + 1, iobase & 0xff); -} - -static __always_inline -uint16_t pnp_read_iobase(pnp_devfn_t dev, unsigned int index) -{ - return ((uint16_t)(pnp_read_config(dev, index)) << 8) - | pnp_read_config(dev, index + 1); -} - -static __always_inline -void pnp_set_irq(pnp_devfn_t dev, unsigned int index, unsigned int irq) -{ - pnp_write_config(dev, index, irq); -} - -static __always_inline -void pnp_set_drq(pnp_devfn_t dev, unsigned int index, unsigned int drq) -{ - pnp_write_config(dev, index, drq & 0xff); -} - -#endif /* __SIMPLE_DEVICE__ */ #endif diff --git a/src/arch/x86/include/arch/mmio.h b/src/arch/x86/include/arch/mmio.h new file mode 100644 index 0000000000..f271a973eb --- /dev/null +++ b/src/arch/x86/include/arch/mmio.h @@ -0,0 +1,71 @@ +/* + * This file is part of the coreboot project. + * + * 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. + */ + +#ifndef __ARCH_MMIO_H__ +#define __ARCH_MMIO_H__ + +#include <stdint.h> + +static __always_inline uint8_t read8( + const volatile void *addr) +{ + return *((volatile uint8_t *)(addr)); +} + +static __always_inline uint16_t read16( + const volatile void *addr) +{ + return *((volatile uint16_t *)(addr)); +} + +static __always_inline uint32_t read32( + const volatile void *addr) +{ + return *((volatile uint32_t *)(addr)); +} + +#ifndef __ROMCC__ +static __always_inline uint64_t read64( + const volatile void *addr) +{ + return *((volatile uint64_t *)(addr)); +} +#endif + +static __always_inline void write8(volatile void *addr, + uint8_t value) +{ + *((volatile uint8_t *)(addr)) = value; +} + +static __always_inline void write16(volatile void *addr, + uint16_t value) +{ + *((volatile uint16_t *)(addr)) = value; +} + +static __always_inline void write32(volatile void *addr, + uint32_t value) +{ + *((volatile uint32_t *)(addr)) = value; +} + +#ifndef __ROMCC__ +static __always_inline void write64(volatile void *addr, + uint64_t value) +{ + *((volatile uint64_t *)(addr)) = value; +} +#endif + +#endif /* __ARCH_MMIO_H__ */ |