.TH UARTP8250 9 .SH NAME uartp8250 \- portable 8250-style uarts .SH SYNOPSIS .EX #include "../port/uartp8250.h" typedef struct Ctlr Ctlr; struct Ctlr { void *reg; uint (*get)(void*, int); void (*set)(void*, int, uint); int (*itr)(Uart*, int); int irq; int tbdf; int iena; uchar sticky[8]; Lock; int hasfifo; int checkfifo; int fena; }; .EE .PP .ta \w'\fLPhysUart 'u .PP .B PhysUart p8250physuart; .PP .B void i8250interrupt(Ureg*, void*); .SH DESCRIPTION P8250 provides a portable interface for 8250-style uarts. All necessary functions are provided except for .BR get , .BR set , and .BR itr . These functions get or set an 8250 register or enable or disable the interrupt, respectively. Since the .B PhysUart structure is required for device discovery, a dummy version needs to be provided .IP .EX PhysUart myphysuart = { .name = "myuart", .pnp = mypnp, }; .EE .PP On entry of the pnp function, the .B PhysUart can be filled out: .EX memmove(&myphysuart, &p8250physuart, sizeof(PhysUart)); myphysuart.name = "myuart"; myphysuart.pnp = mypnp; .EE .PP as can the .B Ctlr structure, which is assigned to .BR "uart->regs" . .SH SOURCE .B /sys/src/9/port/uartp8250.h .br .B /sys/src/9/port/uartp8250.c .SH "SEE ALSO" .IR uart (3). .SH BUGS The .B PhysUart is uncomfortable to use for device discovery.