From 2d3964ec29ecc5df5783f8c7366fb1416f83f68c Mon Sep 17 00:00:00 2001 From: Dave Frodin Date: Tue, 12 May 2015 06:53:11 -0600 Subject: superio: Replace the indexed I/O functions Replace the multiple indexed I/O read and write functions with common functions. Change-Id: Idfe7a8784c28d51b3fbcb2f4e26beaa0b91741a8 Signed-off-by: Dave Frodin Reviewed-on: http://review.coreboot.org/10145 Reviewed-by: Aaron Durbin Tested-by: build bot (Jenkins) --- src/include/device/pnp.h | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src/include/device/pnp.h') diff --git a/src/include/device/pnp.h b/src/include/device/pnp.h index d0d6fa36a9..29df77de20 100644 --- a/src/include/device/pnp.h +++ b/src/include/device/pnp.h @@ -5,6 +5,7 @@ #include #include #include +#include #ifndef __SIMPLE_DEVICE__ @@ -63,5 +64,43 @@ struct pnp_mode_ops { void pnp_enter_conf_mode(device_t dev); void pnp_exit_conf_mode(device_t dev); +/* PNP indexed I/O operations */ + +/* + * u8 pnp_read_index(u16 port, u8 reg) + * Description: + * This routine reads indexed I/O registers. The reg byte is written + * to the index register at I/O address = port. The result is then + * read from the data register at I/O address = port + 1. + * + * Parameters: + * @param[in] u16 port = The I/O address of the port index register. + * @param[in] u8 reg = The offset within the indexed space. + * @param[out] u8 result = The value read back from the data register. + */ +static inline u8 pnp_read_index(u16 port, u8 reg) +{ + outb(reg, port); + return inb(port + 1); +} + +/* + * void pnp_write_index(u16 port, u8 reg, u8 value) + * Description: + * This routine writes indexed I/O registers. The reg byte is written + * to the index register at I/O address = port. The value byte is then + * written to the data register at I/O address = port + 1. + * + * Parameters: + * @param[in] u16 port = The address of the port index register. + * @param[in] u8 reg = The offset within the indexed space. + * @param[in] u8 value = The value to be written to the data register. + */ +static inline void pnp_write_index(u16 port, u8 reg, u8 value) +{ + outb(reg, port); + outb(value, port + 1); +} + #endif /* ! __SIMPLE_DEVICE__ */ #endif /* DEVICE_PNP_H */ -- cgit v1.2.3