From 3ee8b750f49b7c82e8b8787ee306017746e8c12a Mon Sep 17 00:00:00 2001 From: Kyösti Mälkki Date: Sun, 3 Mar 2019 00:35:15 +0200 Subject: arch/io.h: Separate MMIO and PNP ops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie32f1d43168c277be46cdbd7fbfa2445d9899689 Signed-off-by: Kyösti Mälkki Reviewed-on: https://review.coreboot.org/c/31699 Reviewed-by: Aaron Durbin Tested-by: build bot (Jenkins) --- src/arch/x86/include/arch/io.h | 124 +-------------------------------------- src/arch/x86/include/arch/mmio.h | 71 ++++++++++++++++++++++ 2 files changed, 73 insertions(+), 122 deletions(-) create mode 100644 src/arch/x86/include/arch/mmio.h (limited to 'src/arch/x86/include') 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 #include /* @@ -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 - -#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 + +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__ */ -- cgit v1.2.3