xref: /plan9/sys/src/cmd/usb/serial/serial.h (revision c8a340cd3a4d961f476a4f4f2d047cd5eedaced7)
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 	Usbfs	fs;
37 	uchar	ctlstate;
38 
39 	/* serial parameters */
40 	uint	baud;
41 	int	stop;
42 	int	mctl;
43 	int	parity;
44 	int	bits;
45 	int	fifo;
46 	int	limit;
47 	int	rts;
48 	int	cts;
49 	int	dsr;
50 	int	dcd;
51 	int	dtr;
52 	int	rlsd;
53 
54 	vlong	timer;
55 	int	blocked;	/* for sw flow ctl. BUG: not implemented yet */
56 	int	nbreakerr;
57 	int	ring;
58 	int	nframeerr;
59 	int	nparityerr;
60 	int	novererr;
61 	int	enabled;
62 
63 	int	interfc;	/* interfc on the device for ftdi */
64 
65 	Channel *w4data;
66 	Channel *gotdata;
67 	Channel *readc;		/* to uncouple reads, only used in ftdi... */
68 	int	ndata;
69 	uchar	data[DataBufSz];
70 };
71 
72 struct Serial {
73 	QLock;
74 	Dev	*dev;		/* usb device*/
75 
76 	int	type;		/* serial model subtype */
77 	int	recover;	/* # of non-fatal recovery tries */
78 	Serialops;
79 
80 	int	hasepintr;
81 
82 	int	jtag;		/* index of jtag interface, -1 none */
83 	int	nifcs;		/* # of serial interfaces, including JTAG */
84 	Serialport p[Maxifc];
85 	int	maxrtrans;
86 	int	maxwtrans;
87 
88 	int	maxread;
89 	int	maxwrite;
90 
91 	int	inhdrsz;
92 	int	outhdrsz;
93 	int	baudbase;	/* for special baud base settings, see ftdi */
94 };
95 
96 enum {
97 	/* soft flow control chars */
98 	CTLS	= 023,
99 	CTLQ	= 021,
100 	CtlDTR	= 1,
101 	CtlRTS	= 2,
102 };
103 
104 /*
105  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.h|htmlfmt
106  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.c|htmlfmt
107  */
108 
109 int serialmain(Dev *d, int argc, char *argv[]);
110 
111 typedef struct Cinfo Cinfo;
112 struct Cinfo {
113 	int	vid;		/* usb vendor id */
114 	int	did;		/* usb device/product id */
115 	int	cid;		/* controller id assigned by us */
116 };
117 
118 extern Cinfo plinfo[];
119 extern Cinfo uconsinfo[];
120 extern int serialdebug;
121 
122 #define	dsprint	if(serialdebug)fprint
123 
124 int	serialrecover(Serial *ser, Serialport *p, Dev *ep, char *err);
125 int	serialreset(Serial *ser);
126 char	*serdumpst(Serialport *p, char *buf, int bufsz);
127