xref: /plan9/sys/src/cmd/usb/serial/serial.h (revision c8a340cd3a4d961f476a4f4f2d047cd5eedaced7)
15e4f5c78SDavid du Colombier typedef struct Serial Serial;
2d5789509SDavid du Colombier typedef struct Serialops Serialops;
3d5789509SDavid du Colombier typedef struct Serialport Serialport;
45e4f5c78SDavid du Colombier 
55e4f5c78SDavid du Colombier struct Serialops {
6d5789509SDavid du Colombier 	int	(*seteps)(Serialport*);
7d5789509SDavid du Colombier 	int	(*init)(Serialport*);
8d5789509SDavid du Colombier 	int	(*getparam)(Serialport*);
9d5789509SDavid du Colombier 	int	(*setparam)(Serialport*);
10d5789509SDavid du Colombier 	int	(*clearpipes)(Serialport*);
11*c8a340cdSDavid du Colombier 	int	(*reset)(Serial*, Serialport*);
12d5789509SDavid du Colombier 	int	(*sendlines)(Serialport*);
13d5789509SDavid du Colombier 	int	(*modemctl)(Serialport*, int);
14d5789509SDavid du Colombier 	int	(*setbreak)(Serialport*, int);
15d5789509SDavid du Colombier 	int	(*readstatus)(Serialport*);
16d5789509SDavid du Colombier 	int	(*wait4data)(Serialport*, uchar *, int);
17d5789509SDavid du Colombier 	int	(*wait4write)(Serialport*, uchar *, int);
185e4f5c78SDavid du Colombier };
195e4f5c78SDavid du Colombier 
2080e9508eSDavid du Colombier enum {
2180e9508eSDavid du Colombier 	DataBufSz = 8*1024,
22d5789509SDavid du Colombier 	Maxifc = 16,
2380e9508eSDavid du Colombier };
2480e9508eSDavid du Colombier 
25d5789509SDavid du Colombier 
26d5789509SDavid du Colombier struct Serialport {
27d584e620SDavid du Colombier 	char name[32];
28d5789509SDavid du Colombier 	Serial	*s;		/* device we belong to */
29d5789509SDavid du Colombier 	int	isjtag;
30d5789509SDavid du Colombier 
31d5789509SDavid du Colombier 	Dev	*epintr;	/* may not exist */
32d5789509SDavid du Colombier 
335e4f5c78SDavid du Colombier 	Dev	*epin;
345e4f5c78SDavid du Colombier 	Dev	*epout;
355e4f5c78SDavid du Colombier 
36d5789509SDavid du Colombier 	Usbfs	fs;
375e4f5c78SDavid du Colombier 	uchar	ctlstate;
38d5789509SDavid du Colombier 
395e4f5c78SDavid du Colombier 	/* serial parameters */
405e4f5c78SDavid du Colombier 	uint	baud;
415e4f5c78SDavid du Colombier 	int	stop;
425e4f5c78SDavid du Colombier 	int	mctl;
435e4f5c78SDavid du Colombier 	int	parity;
445e4f5c78SDavid du Colombier 	int	bits;
455e4f5c78SDavid du Colombier 	int	fifo;
465e4f5c78SDavid du Colombier 	int	limit;
475e4f5c78SDavid du Colombier 	int	rts;
485e4f5c78SDavid du Colombier 	int	cts;
495e4f5c78SDavid du Colombier 	int	dsr;
505e4f5c78SDavid du Colombier 	int	dcd;
515e4f5c78SDavid du Colombier 	int	dtr;
5280e9508eSDavid du Colombier 	int	rlsd;
5380e9508eSDavid du Colombier 
545e4f5c78SDavid du Colombier 	vlong	timer;
555e4f5c78SDavid du Colombier 	int	blocked;	/* for sw flow ctl. BUG: not implemented yet */
565e4f5c78SDavid du Colombier 	int	nbreakerr;
575e4f5c78SDavid du Colombier 	int	ring;
585e4f5c78SDavid du Colombier 	int	nframeerr;
595e4f5c78SDavid du Colombier 	int	nparityerr;
605e4f5c78SDavid du Colombier 	int	novererr;
615e4f5c78SDavid du Colombier 	int	enabled;
625e4f5c78SDavid du Colombier 
63d5789509SDavid du Colombier 	int	interfc;	/* interfc on the device for ftdi */
64d5789509SDavid du Colombier 
65d5789509SDavid du Colombier 	Channel *w4data;
66d5789509SDavid du Colombier 	Channel *gotdata;
67d5789509SDavid du Colombier 	Channel *readc;		/* to uncouple reads, only used in ftdi... */
68d5789509SDavid du Colombier 	int	ndata;
69d5789509SDavid du Colombier 	uchar	data[DataBufSz];
70d5789509SDavid du Colombier };
71d5789509SDavid du Colombier 
72d5789509SDavid du Colombier struct Serial {
73d5789509SDavid du Colombier 	QLock;
74d5789509SDavid du Colombier 	Dev	*dev;		/* usb device*/
75d5789509SDavid du Colombier 
76d5789509SDavid du Colombier 	int	type;		/* serial model subtype */
77d5789509SDavid du Colombier 	int	recover;	/* # of non-fatal recovery tries */
78d5789509SDavid du Colombier 	Serialops;
79d5789509SDavid du Colombier 
80d5789509SDavid du Colombier 	int	hasepintr;
81d5789509SDavid du Colombier 
82d5789509SDavid du Colombier 	int	jtag;		/* index of jtag interface, -1 none */
83d5789509SDavid du Colombier 	int	nifcs;		/* # of serial interfaces, including JTAG */
84d5789509SDavid du Colombier 	Serialport p[Maxifc];
85d5789509SDavid du Colombier 	int	maxrtrans;
86d5789509SDavid du Colombier 	int	maxwtrans;
87d5789509SDavid du Colombier 
8880e9508eSDavid du Colombier 	int	maxread;
8980e9508eSDavid du Colombier 	int	maxwrite;
9080e9508eSDavid du Colombier 
9180e9508eSDavid du Colombier 	int	inhdrsz;
9280e9508eSDavid du Colombier 	int	outhdrsz;
9380e9508eSDavid du Colombier 	int	baudbase;	/* for special baud base settings, see ftdi */
945e4f5c78SDavid du Colombier };
955e4f5c78SDavid du Colombier 
965e4f5c78SDavid du Colombier enum {
975e4f5c78SDavid du Colombier 	/* soft flow control chars */
985e4f5c78SDavid du Colombier 	CTLS	= 023,
995e4f5c78SDavid du Colombier 	CTLQ	= 021,
10080e9508eSDavid du Colombier 	CtlDTR	= 1,
10180e9508eSDavid du Colombier 	CtlRTS	= 2,
1025e4f5c78SDavid du Colombier };
1035e4f5c78SDavid du Colombier 
1045e4f5c78SDavid du Colombier /*
1055e4f5c78SDavid du Colombier  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.h|htmlfmt
1065e4f5c78SDavid du Colombier  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.c|htmlfmt
1075e4f5c78SDavid du Colombier  */
1085e4f5c78SDavid du Colombier 
1095e4f5c78SDavid du Colombier int serialmain(Dev *d, int argc, char *argv[]);
1105e4f5c78SDavid du Colombier 
1115e4f5c78SDavid du Colombier typedef struct Cinfo Cinfo;
1125e4f5c78SDavid du Colombier struct Cinfo {
1135e4f5c78SDavid du Colombier 	int	vid;		/* usb vendor id */
1145e4f5c78SDavid du Colombier 	int	did;		/* usb device/product id */
1155e4f5c78SDavid du Colombier 	int	cid;		/* controller id assigned by us */
1165e4f5c78SDavid du Colombier };
1175e4f5c78SDavid du Colombier 
1184d52e0f0SDavid du Colombier extern Cinfo plinfo[];
1194d52e0f0SDavid du Colombier extern Cinfo uconsinfo[];
1205e4f5c78SDavid du Colombier extern int serialdebug;
1215e4f5c78SDavid du Colombier 
1225e4f5c78SDavid du Colombier #define	dsprint	if(serialdebug)fprint
1235e4f5c78SDavid du Colombier 
124*c8a340cdSDavid du Colombier int	serialrecover(Serial *ser, Serialport *p, Dev *ep, char *err);
1255e4f5c78SDavid du Colombier int	serialreset(Serial *ser);
126d5789509SDavid du Colombier char	*serdumpst(Serialport *p, char *buf, int bufsz);
127