UARTP8250(9)                                         UARTP8250(9)

     NAME
          uartp8250 - portable 8250-style uarts

     SYNOPSIS
          #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;
          };

          PhysUart p8250physuart;

          void     i8250interrupt(Ureg*, void*);

     DESCRIPTION
          P8250 provides a portable interface for 8250-style uarts.
          All necessary functions are provided except for get, set,
          and itr.  These functions get or set an 8250 register or
          enable or disable the interrupt, respectively.  Since the
          PhysUart structure is required for device discovery, a dummy
          version needs to be provided

               PhysUart myphysuart = {
                        .name= "myuart",
                        .pnp= mypnp,
               };

          On entry of the pnp function, the PhysUart can be filled
          out:
                   memmove(&myphysuart, &p8250physuart, sizeof(PhysUart));
                   myphysuart.name = "myuart";
                   myphysuart.pnp = mypnp;

          as can the Ctlr structure, which is assigned to uart->regs.

     Page 1                       Plan 9             (printed 4/16/24)

     UARTP8250(9)                                         UARTP8250(9)

     SOURCE
          /sys/src/9/port/uartp8250.h
          /sys/src/9/port/uartp8250.c

     SEE ALSO
          uart(3).

     BUGS
          The PhysUart is uncomfortable to use for device discovery.

     Page 2                       Plan 9             (printed 4/16/24)