]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/nusb/serial/serial.h
nusb/usbd: cleanup
[plan9front.git] / sys / src / cmd / nusb / serial / serial.h
1 typedef struct Serial Serial;
2 typedef struct Serialops Serialops;
3 typedef struct Serialport Serialport;
4
5 struct Serialops {
6         int     (*seteps)(Serialport*);
7         int     (*init)(Serialport*);
8         int     (*getparam)(Serialport*);
9         int     (*setparam)(Serialport*);
10         int     (*clearpipes)(Serialport*);
11         int     (*reset)(Serial*, Serialport*);
12         int     (*sendlines)(Serialport*);
13         int     (*modemctl)(Serialport*, int);
14         int     (*setbreak)(Serialport*, int);
15         int     (*readstatus)(Serialport*);
16         int     (*wait4data)(Serialport*, uchar *, int);
17         int     (*wait4write)(Serialport*, uchar *, int);
18 };
19
20 enum {
21         DataBufSz = 8*1024,
22         Maxifc = 16,
23 };
24
25
26 struct Serialport {
27         char name[32];
28         Serial  *s;             /* device we belong to */
29         int     isjtag;
30
31         Dev     *epintr;        /* may not exist */
32
33         Dev     *epin;
34         Dev     *epout;
35
36         uchar   ctlstate;
37
38         /* serial parameters */
39         uint    baud;
40         int     stop;
41         int     mctl;
42         int     parity;
43         int     bits;
44         int     fifo;
45         int     limit;
46         int     rts;
47         int     cts;
48         int     dsr;
49         int     dcd;
50         int     dtr;
51         int     rlsd;
52
53         vlong   timer;
54         int     blocked;        /* for sw flow ctl. BUG: not implemented yet */
55         int     nbreakerr;
56         int     ring;
57         int     nframeerr;
58         int     nparityerr;
59         int     novererr;
60         int     enabled;
61
62         int     interfc;        /* interfc on the device for ftdi */
63
64         Channel *w4data;
65         Channel *gotdata;
66         Channel *readc;         /* to uncouple reads, only used in ftdi... */
67         int     ndata;
68         uchar   data[DataBufSz];
69         
70         QLock readq;
71         Req *readfirst, *readlast; /* read request queue */
72         int readpid;
73         Rendez readrend;
74 };
75
76 struct Serial {
77         QLock;
78         Dev     *dev;           /* usb device*/
79
80         int     type;           /* serial model subtype */
81         int     recover;        /* # of non-fatal recovery tries */
82         Serialops;
83
84         int     hasepintr;
85
86         int     jtag;           /* index of jtag interface, -1 none */
87         int     nifcs;          /* # of serial interfaces, including JTAG */
88         Serialport p[Maxifc];
89         int     maxrtrans;
90         int     maxwtrans;
91
92         int     maxread;
93         int     maxwrite;
94
95         int     inhdrsz;
96         int     outhdrsz;
97         int     baudbase;       /* for special baud base settings, see ftdi */
98 };
99
100 enum {
101         /* soft flow control chars */
102         CTLS    = 023,
103         CTLQ    = 021,
104         CtlDTR  = 1,
105         CtlRTS  = 2,
106 };
107
108 /*
109  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.h|htmlfmt
110  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.c|htmlfmt
111  */
112
113 int serialmain(Dev *d, int argc, char *argv[]);
114
115 typedef struct Cinfo Cinfo;
116 struct Cinfo {
117         int     vid;            /* usb vendor id */
118         int     did;            /* usb device/product id */
119         int     cid;            /* controller id assigned by us */
120 };
121
122 extern Cinfo plinfo[];
123 extern Cinfo uconsinfo[];
124 extern int serialdebug;
125
126 #define dsprint if(serialdebug)fprint
127
128 int     serialrecover(Serial *ser, Serialport *p, Dev *ep, char *err);
129 int     serialreset(Serial *ser);
130 char    *serdumpst(Serialport *p, char *buf, int bufsz);