Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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);