diff options
author | marcel <marcel@FreeBSD.org> | 2003-09-07 21:51:03 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2003-09-07 21:51:03 +0000 |
commit | 99d0e6c9d5d310d7f4c4558288e881c89b3fdf78 (patch) | |
tree | 22e0d3f0111ac1127e824ebbf9c76d4238693f5f /sys/dev/uart | |
parent | 49215d6199e1f0cf0b9f639b2113118e61c3180d (diff) | |
download | FreeBSD-src-99d0e6c9d5d310d7f4c4558288e881c89b3fdf78.zip FreeBSD-src-99d0e6c9d5d310d7f4c4558288e881c89b3fdf78.tar.gz |
Remove the assumption that a bus_space_handle_t is an I/O address
from the SAB82532 and the Z8530 hardware drivers by introducing
uart_cpu_busaddr(). The assumption is not true on pc98 where
bus_space_handle_t is a pointer to a structure.
The uart_cpu_busaddr() function will return the bus address
corresponding the tag and handle given to it by the BAS.
WARNING: the intend of the function is STRICTLY to allow hardware
drivers to determine which logical channel they control and is NOT
to be used for actual I/O. It is therefore EXPLICITLY allowed that
uart_cpu_busaddr() returns only the lower 8 bits of the address
and garbage in all other bits. No mistakes...
Diffstat (limited to 'sys/dev/uart')
-rw-r--r-- | sys/dev/uart/uart_cpu.h | 5 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_alpha.c | 21 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_amd64.c | 21 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_i386.c | 21 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_ia64.c | 21 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_pc98.c | 21 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_sparc64.c | 21 | ||||
-rw-r--r-- | sys/dev/uart/uart_dev_sab82532.c | 4 | ||||
-rw-r--r-- | sys/dev/uart/uart_dev_z8530.c | 4 |
9 files changed, 91 insertions, 48 deletions
diff --git a/sys/dev/uart/uart_cpu.h b/sys/dev/uart/uart_cpu.h index f10e4dd..e60ce57 100644 --- a/sys/dev/uart/uart_cpu.h +++ b/sys/dev/uart/uart_cpu.h @@ -67,8 +67,9 @@ struct uart_devinfo { void *cookie; /* Type dependent use. */ }; -int uart_cpu_getdev(int devtype, struct uart_devinfo *di); -int uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2); +bus_addr_t uart_cpu_busaddr(struct uart_bas *); +int uart_cpu_eqres(struct uart_bas *, struct uart_bas *); +int uart_cpu_getdev(int, struct uart_devinfo *); void uart_add_sysdev(struct uart_devinfo*); diff --git a/sys/dev/uart/uart_cpu_alpha.c b/sys/dev/uart/uart_cpu_alpha.c index 95ee2ff..8638277 100644 --- a/sys/dev/uart/uart_cpu_alpha.c +++ b/sys/dev/uart/uart_cpu_alpha.c @@ -39,6 +39,20 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart.h> #include <dev/uart/uart_cpu.h> +bus_addr_t +uart_cpu_busaddr(struct uart_bas *bas) +{ + + return (bas->bsh); +} + +int +uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) +{ + + return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); +} + int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { @@ -102,10 +116,3 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) return (ENXIO); } - -int -uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) -{ - - return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); -} diff --git a/sys/dev/uart/uart_cpu_amd64.c b/sys/dev/uart/uart_cpu_amd64.c index a186216..1852d40 100644 --- a/sys/dev/uart/uart_cpu_amd64.c +++ b/sys/dev/uart/uart_cpu_amd64.c @@ -36,6 +36,20 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart.h> #include <dev/uart/uart_cpu.h> +bus_addr_t +uart_cpu_busaddr(struct uart_bas *bas) +{ + + return (bas->bsh); +} + +int +uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) +{ + + return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); +} + int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { @@ -83,10 +97,3 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) return (ENXIO); } - -int -uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) -{ - - return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); -} diff --git a/sys/dev/uart/uart_cpu_i386.c b/sys/dev/uart/uart_cpu_i386.c index 04de73a..9e34290 100644 --- a/sys/dev/uart/uart_cpu_i386.c +++ b/sys/dev/uart/uart_cpu_i386.c @@ -36,6 +36,20 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart.h> #include <dev/uart/uart_cpu.h> +bus_addr_t +uart_cpu_busaddr(struct uart_bas *bas) +{ + + return (bas->bsh); +} + +int +uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) +{ + + return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); +} + int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { @@ -83,10 +97,3 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) return (ENXIO); } - -int -uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) -{ - - return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); -} diff --git a/sys/dev/uart/uart_cpu_ia64.c b/sys/dev/uart/uart_cpu_ia64.c index f3523fb..32073fc 100644 --- a/sys/dev/uart/uart_cpu_ia64.c +++ b/sys/dev/uart/uart_cpu_ia64.c @@ -44,6 +44,20 @@ static int dig64_to_uart_parity[] = { UART_PARITY_ODD, UART_PARITY_MARK, UART_PARITY_SPACE }; +bus_addr_t +uart_cpu_busaddr(struct uart_bas *bas) +{ + + return (bas->bsh); +} + +int +uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) +{ + + return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); +} + int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { @@ -130,10 +144,3 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) return (ENXIO); } - -int -uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) -{ - - return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); -} diff --git a/sys/dev/uart/uart_cpu_pc98.c b/sys/dev/uart/uart_cpu_pc98.c index ab7f0b7..05704d2 100644 --- a/sys/dev/uart/uart_cpu_pc98.c +++ b/sys/dev/uart/uart_cpu_pc98.c @@ -36,6 +36,20 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart.h> #include <dev/uart/uart_cpu.h> +bus_addr_t +uart_cpu_busaddr(struct uart_bas *bas) +{ + + return (bas->bsh->bsh_base); +} + +int +uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) +{ + + return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); +} + int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { @@ -87,10 +101,3 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) return (ENXIO); } - -int -uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) -{ - - return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); -} diff --git a/sys/dev/uart/uart_cpu_sparc64.c b/sys/dev/uart/uart_cpu_sparc64.c index fed26a8..d14c68b 100644 --- a/sys/dev/uart/uart_cpu_sparc64.c +++ b/sys/dev/uart/uart_cpu_sparc64.c @@ -58,6 +58,20 @@ uart_cpu_channel(char *dev) return (alias[len - 1] - 'a'); } +bus_addr_t +uart_cpu_busaddr(struct uart_bas *bas) +{ + + return (bas->bsh); +} + +int +uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) +{ + + return ((b1->bsh == b2->bsh) ? 1 : 0); +} + int uart_cpu_getdev(int devtype, struct uart_devinfo *di) { @@ -147,10 +161,3 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) (par == 'o') ? UART_PARITY_ODD : UART_PARITY_EVEN; return (0); } - -int -uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) -{ - - return ((b1->bsh == b2->bsh) ? 1 : 0); -} diff --git a/sys/dev/uart/uart_dev_sab82532.c b/sys/dev/uart/uart_dev_sab82532.c index b7ca2e4..5345e97 100644 --- a/sys/dev/uart/uart_dev_sab82532.c +++ b/sys/dev/uart/uart_dev_sab82532.c @@ -42,8 +42,8 @@ __FBSDID("$FreeBSD$"); #define DEFAULT_RCLK 29491200 -#define IS_CHANNEL_A(bas) (((bas)->bsh & 0x40) == 0x00) -#define IS_CHANNEL_B(bas) (((bas)->bsh & 0x40) == 0x40) +#define IS_CHANNEL_A(bas) ((uart_cpu_busaddr(bas) & 0x40) == 0x00) +#define IS_CHANNEL_B(bas) ((uart_cpu_busaddr(bas) & 0x40) == 0x40) /* * NOTE: To allow us to read the baudrate divisor from the chip, we diff --git a/sys/dev/uart/uart_dev_z8530.c b/sys/dev/uart/uart_dev_z8530.c index 498b3a3..a7c6e25 100644 --- a/sys/dev/uart/uart_dev_z8530.c +++ b/sys/dev/uart/uart_dev_z8530.c @@ -42,8 +42,8 @@ __FBSDID("$FreeBSD$"); #define DEFAULT_RCLK 307200 -#define IS_CHANNEL_A(bas) (((bas)->bsh & 7) != 0) -#define IS_CHANNEL_B(bas) (((bas)->bsh & 7) == 0) +#define IS_CHANNEL_A(bas) ((uart_cpu_busaddr(bas) & 7) != 0) +#define IS_CHANNEL_B(bas) ((uart_cpu_busaddr(bas) & 7) == 0) /* Multiplexed I/O. */ static __inline void |