From 3ee8b750f49b7c82e8b8787ee306017746e8c12a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=C3=B6sti=20M=C3=A4lkki?= 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/arm/include/armv4/arch/io.h | 64 ---------------- src/arch/arm/include/armv4/arch/mmio.h | 65 ++++++++++++++++ src/arch/arm/include/armv7/arch/io.h | 74 ------------------ src/arch/arm/include/armv7/arch/mmio.h | 75 +++++++++++++++++++ src/arch/arm64/include/armv8/arch/io.h | 88 ---------------------- src/arch/arm64/include/armv8/arch/mmio.h | 89 ++++++++++++++++++++++ src/arch/mips/include/arch/io.h | 66 ---------------- src/arch/mips/include/arch/mmio.h | 66 ++++++++++++++++ src/arch/riscv/include/arch/io.h | 60 --------------- src/arch/riscv/include/arch/mmio.h | 60 +++++++++++++++ src/arch/x86/include/arch/io.h | 124 +------------------------------ src/arch/x86/include/arch/mmio.h | 71 ++++++++++++++++++ src/console/post.c | 5 +- src/include/device/device.h | 1 - src/include/device/mmio.h | 4 +- src/include/device/pnp_ops.h | 68 ++++++++++++++++- 16 files changed, 501 insertions(+), 479 deletions(-) delete mode 100644 src/arch/arm/include/armv4/arch/io.h create mode 100644 src/arch/arm/include/armv4/arch/mmio.h delete mode 100644 src/arch/arm/include/armv7/arch/io.h create mode 100644 src/arch/arm/include/armv7/arch/mmio.h delete mode 100644 src/arch/arm64/include/armv8/arch/io.h create mode 100644 src/arch/arm64/include/armv8/arch/mmio.h delete mode 100644 src/arch/mips/include/arch/io.h create mode 100644 src/arch/mips/include/arch/mmio.h delete mode 100644 src/arch/riscv/include/arch/io.h create mode 100644 src/arch/riscv/include/arch/mmio.h create mode 100644 src/arch/x86/include/arch/mmio.h (limited to 'src') diff --git a/src/arch/arm/include/armv4/arch/io.h b/src/arch/arm/include/armv4/arch/io.h deleted file mode 100644 index 9597ffed1c..0000000000 --- a/src/arch/arm/include/armv4/arch/io.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Originally imported from linux/include/asm-arm/io.h. This file has changed - * substantially since then. - * - * Copyright 2013 Google Inc. - * Copyright (C) 1996-2000 Russell King - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * 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. - * - * Modifications: - * 08-Apr-2013 G Replaced several macros with inlines for type safety. - * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both - * constant addresses and variable addresses. - * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture - * specific IO header files. - * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. - * 04-Apr-1999 PJB Added check_signature. - * 12-Dec-1999 RMK More cleanups - * 18-Jun-2000 RMK Removed virt_to_* and friends definitions - */ -#ifndef __ARCH_IO_H -#define __ARCH_IO_H - -#include -#include - -static inline uint8_t read8(const void *addr) -{ - return *(volatile uint8_t *)addr; -} - -static inline uint16_t read16(const void *addr) -{ - return *(volatile uint16_t *)addr; -} - -static inline uint32_t read32(const void *addr) -{ - return *(volatile uint32_t *)addr; -} - -static inline void write8(void *addr, uint8_t val) -{ - *(volatile uint8_t *)addr = val; -} - -static inline void write16(void *addr, uint16_t val) -{ - *(volatile uint16_t *)addr = val; -} - -static inline void write32(void *addr, uint32_t val) -{ - *(volatile uint32_t *)addr = val; -} - -#endif /* __ARCH_IO_H */ diff --git a/src/arch/arm/include/armv4/arch/mmio.h b/src/arch/arm/include/armv4/arch/mmio.h new file mode 100644 index 0000000000..ad89ef5d12 --- /dev/null +++ b/src/arch/arm/include/armv4/arch/mmio.h @@ -0,0 +1,65 @@ +/* + * Originally imported from linux/include/asm-arm/io.h. This file has changed + * substantially since then. + * + * Copyright 2013 Google Inc. + * Copyright (C) 1996-2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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. + * + * Modifications: + * 08-Apr-2013 G Replaced several macros with inlines for type safety. + * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both + * constant addresses and variable addresses. + * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture + * specific IO header files. + * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. + * 04-Apr-1999 PJB Added check_signature. + * 12-Dec-1999 RMK More cleanups + * 18-Jun-2000 RMK Removed virt_to_* and friends definitions + */ + +#ifndef __ARCH_MMIO_H__ +#define __ARCH_MMIO_H__ + +#include +#include + +static inline uint8_t read8(const void *addr) +{ + return *(volatile uint8_t *)addr; +} + +static inline uint16_t read16(const void *addr) +{ + return *(volatile uint16_t *)addr; +} + +static inline uint32_t read32(const void *addr) +{ + return *(volatile uint32_t *)addr; +} + +static inline void write8(void *addr, uint8_t val) +{ + *(volatile uint8_t *)addr = val; +} + +static inline void write16(void *addr, uint16_t val) +{ + *(volatile uint16_t *)addr = val; +} + +static inline void write32(void *addr, uint32_t val) +{ + *(volatile uint32_t *)addr = val; +} + +#endif /* __ARCH_MMIO_H__ */ diff --git a/src/arch/arm/include/armv7/arch/io.h b/src/arch/arm/include/armv7/arch/io.h deleted file mode 100644 index 1772659fec..0000000000 --- a/src/arch/arm/include/armv7/arch/io.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Originally imported from linux/include/asm-arm/io.h. This file has changed - * substantially since then. - * - * Copyright 2013 Google Inc. - * Copyright (C) 1996-2000 Russell King - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * 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. - * - * Modifications: - * 08-Apr-2013 G Replaced several macros with inlines for type safety. - * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both - * constant addresses and variable addresses. - * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture - * specific IO header files. - * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. - * 04-Apr-1999 PJB Added check_signature. - * 12-Dec-1999 RMK More cleanups - * 18-Jun-2000 RMK Removed virt_to_* and friends definitions - */ -#ifndef __ARCH_IO_H -#define __ARCH_IO_H - -#include /* for dmb() */ -#include -#include - -static inline uint8_t read8(const void *addr) -{ - dmb(); - return *(volatile uint8_t *)__builtin_assume_aligned(addr, sizeof(uint8_t)); -} - -static inline uint16_t read16(const void *addr) -{ - dmb(); - return *(volatile uint16_t *)__builtin_assume_aligned(addr, sizeof(uint16_t)); -} - -static inline uint32_t read32(const void *addr) -{ - dmb(); - return *(volatile uint32_t *)__builtin_assume_aligned(addr, sizeof(uint32_t)); -} - -static inline void write8(void *addr, uint8_t val) -{ - dmb(); - *(volatile uint8_t *)__builtin_assume_aligned(addr, sizeof(uint8_t)) = val; - dmb(); -} - -static inline void write16(void *addr, uint16_t val) -{ - dmb(); - *(volatile uint16_t *)__builtin_assume_aligned(addr, sizeof(uint16_t)) = val; - dmb(); -} - -static inline void write32(void *addr, uint32_t val) -{ - dmb(); - *(volatile uint32_t *)__builtin_assume_aligned(addr, sizeof(uint32_t)) = val; - dmb(); -} - -#endif /* __ARCH_IO_H */ diff --git a/src/arch/arm/include/armv7/arch/mmio.h b/src/arch/arm/include/armv7/arch/mmio.h new file mode 100644 index 0000000000..b245b264fd --- /dev/null +++ b/src/arch/arm/include/armv7/arch/mmio.h @@ -0,0 +1,75 @@ +/* + * Originally imported from linux/include/asm-arm/io.h. This file has changed + * substantially since then. + * + * Copyright 2013 Google Inc. + * Copyright (C) 1996-2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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. + * + * Modifications: + * 08-Apr-2013 G Replaced several macros with inlines for type safety. + * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both + * constant addresses and variable addresses. + * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture + * specific IO header files. + * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. + * 04-Apr-1999 PJB Added check_signature. + * 12-Dec-1999 RMK More cleanups + * 18-Jun-2000 RMK Removed virt_to_* and friends definitions + */ + +#ifndef __ARCH_MMIO_H__ +#define __ARCH_MMIO_H__ + +#include /* for dmb() */ +#include +#include + +static inline uint8_t read8(const void *addr) +{ + dmb(); + return *(volatile uint8_t *)__builtin_assume_aligned(addr, sizeof(uint8_t)); +} + +static inline uint16_t read16(const void *addr) +{ + dmb(); + return *(volatile uint16_t *)__builtin_assume_aligned(addr, sizeof(uint16_t)); +} + +static inline uint32_t read32(const void *addr) +{ + dmb(); + return *(volatile uint32_t *)__builtin_assume_aligned(addr, sizeof(uint32_t)); +} + +static inline void write8(void *addr, uint8_t val) +{ + dmb(); + *(volatile uint8_t *)__builtin_assume_aligned(addr, sizeof(uint8_t)) = val; + dmb(); +} + +static inline void write16(void *addr, uint16_t val) +{ + dmb(); + *(volatile uint16_t *)__builtin_assume_aligned(addr, sizeof(uint16_t)) = val; + dmb(); +} + +static inline void write32(void *addr, uint32_t val) +{ + dmb(); + *(volatile uint32_t *)__builtin_assume_aligned(addr, sizeof(uint32_t)) = val; + dmb(); +} + +#endif /* __ARCH_MMIO_H__ */ diff --git a/src/arch/arm64/include/armv8/arch/io.h b/src/arch/arm64/include/armv8/arch/io.h deleted file mode 100644 index 31615f736f..0000000000 --- a/src/arch/arm64/include/armv8/arch/io.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Originally imported from linux/include/asm-arm/io.h. This file has changed - * substantially since then. - * - * Copyright 2014 Google Inc. - * Copyright (C) 1996-2000 Russell King - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * 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. - * - * Modifications: - * 08-Apr-2013 G Replaced several macros with inlines for type safety. - * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both - * constant addresses and variable addresses. - * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture - * specific IO header files. - * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. - * 04-Apr-1999 PJB Added check_signature. - * 12-Dec-1999 RMK More cleanups - * 18-Jun-2000 RMK Removed virt_to_* and friends definitions - */ -#ifndef __ARCH_IO_H -#define __ARCH_IO_H - -#include -#include -#include -#include - -static inline uint8_t read8(const void *addr) -{ - dmb(); - return *(volatile uint8_t *)addr; -} - -static inline uint16_t read16(const void *addr) -{ - dmb(); - return *(volatile uint16_t *)addr; -} - -static inline uint32_t read32(const void *addr) -{ - dmb(); - return *(volatile uint32_t *)addr; -} - -static inline uint64_t read64(const void *addr) -{ - dmb(); - return *(volatile uint64_t *)addr; -} - -static inline void write8(void *addr, uint8_t val) -{ - dmb(); - *(volatile uint8_t *)addr = val; - dmb(); -} - -static inline void write16(void *addr, uint16_t val) -{ - dmb(); - *(volatile uint16_t *)addr = val; - dmb(); -} - -static inline void write32(void *addr, uint32_t val) -{ - dmb(); - *(volatile uint32_t *)addr = val; - dmb(); -} - -static inline void write64(void *addr, uint64_t val) -{ - dmb(); - *(volatile uint64_t *)addr = val; - dmb(); -} - -#endif /* __ARCH_IO_H */ diff --git a/src/arch/arm64/include/armv8/arch/mmio.h b/src/arch/arm64/include/armv8/arch/mmio.h new file mode 100644 index 0000000000..aabfa87fc9 --- /dev/null +++ b/src/arch/arm64/include/armv8/arch/mmio.h @@ -0,0 +1,89 @@ +/* + * Originally imported from linux/include/asm-arm/io.h. This file has changed + * substantially since then. + * + * Copyright 2014 Google Inc. + * Copyright (C) 1996-2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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. + * + * Modifications: + * 08-Apr-2013 G Replaced several macros with inlines for type safety. + * 16-Sep-1996 RMK Inlined the inx/outx functions & optimised for both + * constant addresses and variable addresses. + * 04-Dec-1997 RMK Moved a lot of this stuff to the new architecture + * specific IO header files. + * 27-Mar-1999 PJB Second parameter of memcpy_toio is const.. + * 04-Apr-1999 PJB Added check_signature. + * 12-Dec-1999 RMK More cleanups + * 18-Jun-2000 RMK Removed virt_to_* and friends definitions + */ + +#ifndef __ARCH_MMIO_H__ +#define __ARCH_MMIO_H__ + +#include +#include +#include +#include + +static inline uint8_t read8(const void *addr) +{ + dmb(); + return *(volatile uint8_t *)addr; +} + +static inline uint16_t read16(const void *addr) +{ + dmb(); + return *(volatile uint16_t *)addr; +} + +static inline uint32_t read32(const void *addr) +{ + dmb(); + return *(volatile uint32_t *)addr; +} + +static inline uint64_t read64(const void *addr) +{ + dmb(); + return *(volatile uint64_t *)addr; +} + +static inline void write8(void *addr, uint8_t val) +{ + dmb(); + *(volatile uint8_t *)addr = val; + dmb(); +} + +static inline void write16(void *addr, uint16_t val) +{ + dmb(); + *(volatile uint16_t *)addr = val; + dmb(); +} + +static inline void write32(void *addr, uint32_t val) +{ + dmb(); + *(volatile uint32_t *)addr = val; + dmb(); +} + +static inline void write64(void *addr, uint64_t val) +{ + dmb(); + *(volatile uint64_t *)addr = val; + dmb(); +} + +#endif /* __ARCH_MMIO_H__ */ diff --git a/src/arch/mips/include/arch/io.h b/src/arch/mips/include/arch/io.h deleted file mode 100644 index b61db9c650..0000000000 --- a/src/arch/mips/include/arch/io.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2014 Imagination Technologies - * - * Based on arch/armv7/include/arch/io.h: - * Copyright 2013 Google Inc. - * Copyright (C) 1996-2000 Russell King - * - * 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 __MIPS_ARCH_IO_H -#define __MIPS_ARCH_IO_H - -#include -#include -#include - -static inline uint8_t read8(unsigned long addr) -{ - asm("sync"); - return *(volatile uint8_t *)addr; -} - -static inline uint16_t read16(unsigned long addr) -{ - asm("sync"); - return *(volatile uint16_t *)addr; -} - -static inline uint32_t read32(unsigned long addr) -{ - asm("sync"); - return *(volatile uint32_t *)addr; -} - -static inline void write8(unsigned long addr, uint8_t val) -{ - asm("sync"); - *(volatile uint8_t *)addr = val; - asm("sync"); -} - -static inline void write16(unsigned long addr, uint16_t val) -{ - asm("sync"); - *(volatile uint16_t *)addr = val; - asm("sync"); -} - -static inline void write32(unsigned long addr, uint32_t val) -{ - asm("sync"); - *(volatile uint32_t *)addr = val; - asm("sync"); -} - -#endif /* __MIPS_ARCH_IO_H */ diff --git a/src/arch/mips/include/arch/mmio.h b/src/arch/mips/include/arch/mmio.h new file mode 100644 index 0000000000..27a4944961 --- /dev/null +++ b/src/arch/mips/include/arch/mmio.h @@ -0,0 +1,66 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Imagination Technologies + * + * Based on arch/armv7/include/arch/io.h: + * Copyright 2013 Google Inc. + * Copyright (C) 1996-2000 Russell King + * + * 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 +#include +#include + +static inline uint8_t read8(unsigned long addr) +{ + asm("sync"); + return *(volatile uint8_t *)addr; +} + +static inline uint16_t read16(unsigned long addr) +{ + asm("sync"); + return *(volatile uint16_t *)addr; +} + +static inline uint32_t read32(unsigned long addr) +{ + asm("sync"); + return *(volatile uint32_t *)addr; +} + +static inline void write8(unsigned long addr, uint8_t val) +{ + asm("sync"); + *(volatile uint8_t *)addr = val; + asm("sync"); +} + +static inline void write16(unsigned long addr, uint16_t val) +{ + asm("sync"); + *(volatile uint16_t *)addr = val; + asm("sync"); +} + +static inline void write32(unsigned long addr, uint32_t val) +{ + asm("sync"); + *(volatile uint32_t *)addr = val; + asm("sync"); +} + +#endif /* __MIPS_ARCH_IO_H */ diff --git a/src/arch/riscv/include/arch/io.h b/src/arch/riscv/include/arch/io.h deleted file mode 100644 index d086d0cdb2..0000000000 --- a/src/arch/riscv/include/arch/io.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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 _ASM_IO_H -#define _ASM_IO_H - -#include -#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)); -} - -static __always_inline uint64_t read64(const volatile void *addr) -{ - return *((volatile uint64_t *)(addr)); -} - -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; -} - -static __always_inline void write64(volatile void *addr, uint64_t value) -{ - *((volatile uint64_t *)(addr)) = value; -} - -#endif diff --git a/src/arch/riscv/include/arch/mmio.h b/src/arch/riscv/include/arch/mmio.h new file mode 100644 index 0000000000..4cbc07bbc7 --- /dev/null +++ b/src/arch/riscv/include/arch/mmio.h @@ -0,0 +1,60 @@ +/* + * 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 +#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)); +} + +static __always_inline uint64_t read64(const volatile void *addr) +{ + return *((volatile uint64_t *)(addr)); +} + +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; +} + +static __always_inline void write64(volatile void *addr, uint64_t value) +{ + *((volatile uint64_t *)(addr)) = value; +} + +#endif /* __ARCH_MMIO_H__ */ 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__ */ diff --git a/src/console/post.c b/src/console/post.c index 4c3753561b..08bdaa18a9 100644 --- a/src/console/post.c +++ b/src/console/post.c @@ -14,12 +14,15 @@ * GNU General Public License for more details. */ -#include +#include #include #include #include #include #include +#if IS_ENABLED(CONFIG_POST_IO) +#include +#endif /* Write POST information */ diff --git a/src/include/device/device.h b/src/include/device/device.h index c794322d92..3b38322fcc 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -14,7 +14,6 @@ #include #include #include -#include struct device; struct pci_operations; diff --git a/src/include/device/mmio.h b/src/include/device/mmio.h index bebf0cfbd4..34be1e8172 100644 --- a/src/include/device/mmio.h +++ b/src/include/device/mmio.h @@ -15,7 +15,7 @@ #ifndef __DEVICE_MMIO_H__ #define __DEVICE_MMIO_H__ -/* FIXME: We only want the volatile MMIO ops. */ -#include +#include +#include #endif diff --git a/src/include/device/pnp_ops.h b/src/include/device/pnp_ops.h index 370ede8bdd..9086fdf67c 100644 --- a/src/include/device/pnp_ops.h +++ b/src/include/device/pnp_ops.h @@ -15,7 +15,73 @@ #ifndef __DEVICE_PNP_OPS_H__ #define __DEVICE_PNP_OPS_H__ -/* FIXME: We only want the PNP ops. */ +#include #include +#include + +#ifdef __SIMPLE_DEVICE__ + +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 -- cgit v1.2.3