Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/uart/uart.h
Show All 35 Lines | |||||
* other timing related computations. | * other timing related computations. | ||||
*/ | */ | ||||
struct uart_bas { | struct uart_bas { | ||||
bus_space_tag_t bst; | bus_space_tag_t bst; | ||||
bus_space_handle_t bsh; | bus_space_handle_t bsh; | ||||
u_int chan; | u_int chan; | ||||
u_int rclk; | u_int rclk; | ||||
u_int regshft; | u_int regshft; | ||||
u_int regiowidth; | |||||
}; | }; | ||||
#define uart_regofs(bas, reg) ((reg) << (bas)->regshft) | #define uart_regofs(bas, reg) ((reg) << (bas)->regshft) | ||||
#define uart_regiowidth(bas) ((bas)->regiowidth) | |||||
#define uart_getreg(bas, reg) \ | static inline uint32_t | ||||
bus_space_read_1((bas)->bst, (bas)->bsh, uart_regofs(bas, reg)) | uart_getreg(struct uart_bas *bas, int reg) | ||||
#define uart_setreg(bas, reg, value) \ | { | ||||
bus_space_write_1((bas)->bst, (bas)->bsh, uart_regofs(bas, reg), value) | uint32_t ret; | ||||
switch (uart_regiowidth(bas)) { | |||||
case 4: | |||||
ret = bus_space_read_4(bas->bst, bas->bsh, uart_regofs(bas, reg)); | |||||
break; | |||||
case 2: | |||||
ret = bus_space_read_2(bas->bst, bas->bsh, uart_regofs(bas, reg)); | |||||
break; | |||||
default: | |||||
ret = bus_space_read_1(bas->bst, bas->bsh, uart_regofs(bas, reg)); | |||||
break; | |||||
} | |||||
return (ret); | |||||
} | |||||
static inline void | |||||
uart_setreg(struct uart_bas *bas, int reg, int value) | |||||
{ | |||||
switch (uart_regiowidth(bas)) { | |||||
case 4: | |||||
bus_space_write_4(bas->bst, bas->bsh, uart_regofs(bas, reg), value); | |||||
break; | |||||
case 2: | |||||
bus_space_write_2(bas->bst, bas->bsh, uart_regofs(bas, reg), value); | |||||
break; | |||||
default: | |||||
bus_space_write_1(bas->bst, bas->bsh, uart_regofs(bas, reg), value); | |||||
break; | |||||
} | |||||
} | |||||
/* | /* | ||||
* XXX we don't know the length of the bus space address range in use by | * XXX we don't know the length of the bus space address range in use by | ||||
* the UART. Since barriers don't use the length field currently, we put | * the UART. Since barriers don't use the length field currently, we put | ||||
* a zero there for now. | * a zero there for now. | ||||
*/ | */ | ||||
#define uart_barrier(bas) \ | #define uart_barrier(bas) \ | ||||
bus_space_barrier((bas)->bst, (bas)->bsh, 0, 0, \ | bus_space_barrier((bas)->bst, (bas)->bsh, 0, 0, \ | ||||
Show All 34 Lines |