|
|
1.1 root 1: Here are some notes on writing device drivers; before reading
2:
3: them, you should familiarize yourself with the information in
4:
5: "filesys.doc", especially the material on device drivers.
6:
7:
8:
9: Serial Port Device Drivers
10:
11:
12:
13: Serial port device drivers should recognize the
14:
15: following ioctl calls:
16:
17: (here "f" is always a FILEPTR referring to an open
18:
19: file on the device)
20:
21:
22:
23:
24:
25: ioctl(f, TIOCIBAUD, long *r):
26:
27:
28:
29: Set input speed. "r" is a pointer to a 32 bit value, and is both an
30:
31: input and output parameter. If *r is > 0, it represents the value
32:
33: to which the serial port's input speed should be set. This value
34:
35: is a long word representation of the speed in bits per second,
36:
37: e.g. to set 9600 bits per second *r should be 9600L.
38:
39: If *r is 0, it indicates that DTR should be dropped.
40:
41: If *r is < 0, the call is an inquiry call only.
42:
43:
44:
45: On return, *r is set to the value of the input speed before the
46:
47: ioctl call was made. If, for some reason, this value is unknown,
48:
49: *r is set to -1L.
50:
51:
52:
53: Returns:
54:
55: 0 on success
56:
57: ERANGE if the requested input speed is not available. In this case,
58:
59: the next lowest legal input speed available is returned in *r.
60:
61:
62:
63:
64:
65:
66:
67: ioctl(f, TIOCOBAUD, long *r):
68:
69:
70:
71: Set output speed. "r" is a pointer to a 32 bit value, and is both an
72:
73: input and output parameter. If *r is > 0, it represents the value
74:
75: to which the serial port's output speed should be set. This value
76:
77: is a long word representation of the speed in bits per second,
78:
79: e.g. to set 9600 bits per second *r should be 9600L.
80:
81: If *r is 0, it indicates that the device should be hung up, i.e.
82:
83: that DTR should no longer be asserted.
84:
85: If *r is < 0, no change is to be made to the output speed.
86:
87:
88:
89: On return, *r is set to the value of the output speed before the
90:
91: ioctl call was made. If, for some reason, this value is unknown,
92:
93: *r is set to -1L.
94:
95:
96:
97: Returns:
98:
99: 0 on success
100:
101: ERANGE if the requested output speed is not available. In this case,
102:
103: the next lowest legal output speed available is returned in *r.
104:
105:
106:
107: Note: For many devices both the input and output speeds must always be
108:
109: the same. For such devices, TIOCIBAUD and TIOCOBAUD may affect both
110:
111: input and output speed.
112:
113:
114:
115:
116:
117:
118:
119: ioctl(f, TIOCSBRK, dummy):
120:
121:
122:
123: Causes a BREAK condition to be set on the output line.
124:
125: Returns:
126:
127: 0 on success
128:
129: EINVFN if the serial port cannot send BREAK
130:
131:
132:
133:
134:
135:
136:
137: ioctl(f, TIOCCBRK, dummy)
138:
139:
140:
141: Causes any existing BREAK condition to be cleared.
142:
143: Returns:
144:
145: 0 on success
146:
147: EINVFN if the serial port cannot send BREAK
148:
149:
150:
151:
152:
153:
154:
155: ioctl(f, TIOCGFLAGS, short *flags)
156:
157:
158:
159: Get the terminal control flags bits. 16 bit flag word
160:
161: pointed to by "flags" is set to reflect the current
162:
163: terminal state, as follows:
164:
165:
166:
167: TF_STOPBITS 0x0003
168:
169: The two low order bits describe the stop bits:
170:
171: 0x0000 illegal -- attempts to set this value are
172:
173: ignored
174:
175: 0x0001 1 stop bit
176:
177: 0x0002 1.5 stop bits
178:
179: 0x0003 2 stop bits
180:
181:
182:
183: TF_CHARBITS 0x000C
184:
185: The next two bits describe the number of bits
186:
187: transmitted per character:
188:
189: 0x0000 8 bits per character
190:
191: 0x0004 7 bits per character
192:
193: 0x0008 6 bits per character
194:
195: 0x000C 5 bits per character
196:
197:
198:
199: The final nybble contains miscellaneous flags:
200:
201: T_TANDEM 0x1000 ^S/^Q flow control active
202:
203: T_RTSCTS 0x2000 RTS/CTS flow control active
204:
205: T_EVENP 0x4000 even parity enabled
206:
207: T_ODDP 0x8000 odd parity enabled
208:
209: (note: T_EVENPAR and T_ODDPAR are mutually exclusive)
210:
211:
212:
213: All other bits are reserved, and should be set to 0.
214:
215:
216:
217: Returns:
218:
219: 0 on success
220:
221:
222:
223:
224:
225:
226:
227: ioctl(f, TIOCSFLAGS, short *flags)
228:
229:
230:
231: Set the terminal control flags (see the description
232:
233: of TIOCGFLAGS for details) based on the values in the
234:
235: word pointed to by "flags".
236:
237:
238:
239: Returns:
240:
241: 0 on success
242:
243: ERANGE if an illegal or unsupported combination of flags
244:
245: is detected.
246:
247:
248:
249:
250:
251: INTERFACE WITH EXISTING TIOCSETP/TIOCGETP CALLS:
252:
253:
254:
255: The MiNT kernel will automatically make appropriate
256:
257: TIOCIBAUD, TIOCOBAUD, TIOCGFLAGS, and TIOCSFLAGS calls
258:
259: whenever a TIOCSETP or TIOCGETP Fcntl is made on a
260:
261: terminal. The kernel will convert a Unix style baud
262:
263: specification into a MiNT style one, as follows:
264:
265:
266:
267: value of sg_ispeed or value sent to
268:
269: sg_ospeed driver
270:
271: #define B0 0 0L
272:
273: #define B50 1 50L
274:
275: #define B75 2 75L
276:
277: #define B110 3 110L
278:
279: #define B134 4 134L
280:
281: #define B150 5 150L
282:
283: #define B200 6 200L
284:
285: #define B300 7 300L
286:
287: #define B600 8 600L
288:
289: #define B1200 9 1200L
290:
291: #define B1800 10 1800L
292:
293: #define B2400 11 2400L
294:
295: #define B4800 12 4800L
296:
297: #define B9600 13 9600L
298:
299: #define B19200 14 19200L
300:
301: #define B38400 15 38400L (*)
302:
303:
304:
305: anything else -1L
306:
307:
308:
309:
310:
311: (*) 38400 baud is not supported by the built
312:
313: in device drivers, but may be by external drivers
314:
315:
316:
317: If a speed other than those listed above is desired, the
318:
319: TIOCIBAUD and/or TIOCOBAUD Fcntls should be used directly.
320:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.