|
|
1.1 root 1: #define _DDI_DKI 1
2: #define _SYSV4 1
3:
4: /*
5: * This file exists to provide external-linkage versions of the normally
6: * inline definitions for the 80x86 I/O functions, and to provide manual-page
7: * skeletons for them as well.
8: *
9: * Note that on systems which already provide these functions or where they
10: * cannot be provided in an inline form (such as Coherent, where they must be
11: * implemented in assembly language) this module should be excluded from the
12: * library builds, but should be kept for documentation extraction.
13: */
14:
15: /*
16: *-IMPORTS:
17: * <common/ccompat.h>
18: * __USE_PROTO__
19: * __ARGS ()
20: * <sys/types.h>
21: * uchar_t
22: * ushort_t
23: * ulong_t
24: */
25:
26: #include <common/ccompat.h>
27: #include <sys/types.h>
28:
29: #include <kernel/x86io.h>
30:
31: #if ! defined (repinsb) || ! defined (repinsd) || ! defined (repinsw) \
32: || ! defined (repoutsb) || ! defined (repoutsd) || ! defined (repoutsw) \
33: || ! defined (inb) || ! defined (inl) || ! defined (inw) \
34: || ! defined (outb) || ! defined (outl) || ! defined (outw)
35: #error This module expects preprocessor definitions for the I/O functions
36: #endif
37:
38: /*
39: *-STATUS:
40: * DDI/DKI
41: *
42: *-NAME:
43: * inb Read a byte from an 8-bit I/O port
44: *
45: *-ARGUMENTS:
46: * port A valid 8-bit I/O port
47: *
48: *-DESCRIPTION:
49: * This function provides a C-language interface to the machine
50: * instruction that reads a byte from an 8-bit I/O port using the I/O
51: * address space instead of the memory address space.
52: *
53: *-RETURN VALUE:
54: * Returns the value of the byte read from the I/O port.
55: *
56: *-LEVEL:
57: * Base or Interrupt.
58: *
59: *-NOTES:
60: * Does not sleep.
61: *
62: * Driver-defined basic locks, read/write locks, and sleep locks may be
63: * held across calls to this function.
64: *
65: * This function may not be meaningful on all implementations because
66: * some implementations may not support I/O-mapped I/O.
67: */
68:
69: #if __USE_PROTO__
70: uchar_t (inb) (int port)
71: #else
72: uchar_t
73: inb __ARGS ((port))
74: int port;
75: #endif
76: {
77: return inb (port);
78: }
79:
80:
81:
82: /*
83: *-STATUS:
84: * DDI/DKI
85: *
86: *-NAME:
87: * inl Read a 32-bit long word from a 32-bit I/O port
88: *
89: *-ARGUMENTS:
90: * port A valid 32-bit I/O port
91: *
92: *-DESCRIPTION:
93: * This function provides a C-language interface to the machine
94: * instruction that reads a 32-bit long word from a 32-bit I/O port using
95: * the I/O address space instead of the memory address space.
96: *
97: *-RETURN VALUE:
98: * Returns the value of the 32-bit word read from the I/O port.
99: *
100: *-LEVEL:
101: * Base or Interrupt.
102: *
103: *-NOTES:
104: * Does not sleep.
105: *
106: * Driver-defined basic locks, read/write locks, and sleep locks may be
107: * held across calls to this function.
108: *
109: * This function may not be meaningful on all implementations because
110: * some implementations may not support I/O-mapped I/O.
111: */
112:
113: #if __USE_PROTO__
114: ulong_t (inl) (int port)
115: #else
116: ulong_t
117: inl __ARGS ((port))
118: int port;
119: #endif
120: {
121: return inl (port);
122: }
123:
124:
125: /*
126: *-STATUS:
127: * DDI/DKI
128: *
129: *-NAME:
130: * inw Read a 16-bit short word from a 16-bit I/O port
131: *
132: *-ARGUMENTS:
133: * port A valid 16-bit I/O port
134: *
135: *-DESCRIPTION:
136: * This function provides a C-language interface to the machine
137: * instruction that reads a 16-bit short word from a 16-bit I/O port
138: * using the I/O address space instead of the memory address space.
139: *
140: *-RETURN VALUE:
141: * Returns the value of the 16-bit short word read from the I/O port.
142: *
143: *-LEVEL:
144: * Base or Interrupt.
145: *
146: *-NOTES:
147: * Does not sleep.
148: *
149: * Driver-defined basic locks, read/write locks, and sleep locks may be
150: * held across calls to this function.
151: *
152: * This function may not be meaningful on all implementations because
153: * some implementations may not support I/O-mapped I/O.
154: */
155:
156: #if __USE_PROTO__
157: ushort_t (inw) (int port)
158: #else
159: ushort_t
160: inw __ARGS ((port))
161: int port;
162: #endif
163: {
164: return inw (port);
165: }
166:
167:
168:
169: /*
170: *-STATUS:
171: * DDI/DKI
172: *
173: *-NAME:
174: * outb Write a byte to an 8-bit I/O port.
175: *
176: *-ARGUMENTS:
177: * port A valid 8-bit I/O port.
178: * data The 8-bit value to the written to the port.
179: *
180: *-DESCRIPTION:
181: * This function provides a C-language interface to the machine
182: * instruction that writes a byte to an 8-bit I/O port using the I/O
183: * address space instead of the memory address space.
184: *
185: *-RETURN VALUE:
186: * None.
187: *
188: *-LEVEL:
189: * Base or Interrupt.
190: *
191: *-NOTES:
192: * Does not sleep.
193: *
194: * Driver-defined basic locks, read/write locks, and sleep locks may be
195: * held across calls to this function.
196: *
197: * This function may not be meaningful on all implementations because
198: * some implementations may not support I/O-mapped I/O.
199: */
200:
201: #if __USE_PROTO__
202: void (outb) (int port, uchar_t data)
203: #else
204: void
205: outb __ARGS ((port, data))
206: int port;
207: uchar_t data;
208: #endif
209: {
210: outb (port, data);
211: }
212:
213:
214:
215: /*
216: *-STATUS:
217: * DDI/DKI
218: *
219: *-NAME:
220: * outl Write a 32-bit long word to a 32-bit I/O port.
221: *
222: *-ARGUMENTS:
223: * port A valid 32-bit I/O port.
224: * data The 32-bit value to the written to the port.
225: *
226: *-DESCRIPTION:
227: * This function provides a C-language interface to the machine
228: * instruction that writes a 32-bit long word to a 32-bit I/O port using
229: * the I/O address space instead of the memory address space.
230: *
231: *-RETURN VALUE:
232: * None.
233: *
234: *-LEVEL:
235: * Base or Interrupt.
236: *
237: *-NOTES:
238: * Does not sleep.
239: *
240: * Driver-defined basic locks, read/write locks, and sleep locks may be
241: * held across calls to this function.
242: *
243: * This function may not be meaningful on all implementations because
244: * some implementations may not support I/O-mapped I/O.
245: */
246:
247: #if __USE_PROTO__
248: void (outl) (int port, ulong_t value)
249: #else
250: void
251: outl __ARGS ((port, value))
252: int port;
253: ulong_t value;
254: #endif
255: {
256: outl (port, value);
257: }
258:
259:
260:
261: /*
262: *-STATUS:
263: * DDI/DKI
264: *
265: *-NAME:
266: * outw Write a 16-bit short word to a 16-bit I/O port.
267: *
268: *-ARGUMENTS:
269: * port A valid 16-bit I/O port.
270: * data The 16-bit value to the written to the port.
271: *
272: *-DESCRIPTION:
273: * This function provides a C-language interface to the machine
274: * instruction that writes a 16-bit short word to a 16-bit I/O port using
275: * the I/O address space instead of the memory address space.
276: *
277: *-RETURN VALUE:
278: * None.
279: *
280: *-LEVEL:
281: * Base or Interrupt.
282: *
283: *-NOTES:
284: * Does not sleep.
285: *
286: * Driver-defined basic locks, read/write locks, and sleep locks may be
287: * held across calls to this function.
288: *
289: * This function may not be meaningful on all implementations because
290: * some implementations may not support I/O-mapped I/O.
291: */
292:
293: #if __USE_PROTO__
294: void (outw) (int port, ushort_t value)
295: #else
296: void
297: outw __ARGS ((port, value))
298: int port;
299: ushort_t value;
300: #endif
301: {
302: outw (port, value);
303: }
304:
305:
306: /*
307: *-STATUS:
308: * DDI/DKI
309: *
310: *-NAME:
311: * repinsb Read bytes from an I/O port to a buffer.
312: *
313: *-ARGUMENTS:
314: * port A valid 8-bit I/O port.
315: * addr The address of the buffer where data is stored after
316: * "cnt" reads of the I/O port.
317: * cnt The number of bytes to be read from the I/O port.
318: *
319: *-DESCRIPTION:
320: * This function provides a C-language interface to the machine
321: * instructions that read a string of bytes from an 8-bit I/O port using
322: * the I/O address space instead of the memory address space. The data
323: * from "cnt" reads of the I/O port is stored in the data buffer pointed
324: * to by "addr". The data buffer should be at least "cnt" bytes in
325: * length.
326: *
327: *-RETURN VALUE:
328: * None.
329: *
330: *-LEVEL:
331: * Base or Interrupt.
332: *
333: *-NOTES:
334: * Does not sleep.
335: *
336: * Driver-defined basic locks, read/write locks and sleep locks may be
337: * held across calls to this function.
338: *
339: * This function may not be meaningful on all implementations because
340: * some implementations may not support I/O-mapped I/O.
341: */
342:
343: #if __USE_PROTO__
344: void (repinsb) (int port, uchar_t * addr, int cnt)
345: #else
346: void
347: repinsb __ARGS ((port, addr, cnt))
348: int port;
349: uchar_t * addr;
350: int cnt;
351: #endif
352: {
353: repinsb (port, addr, cnt);
354: }
355:
356:
357: /*
358: *-STATUS:
359: * DDI/DKI
360: *
361: *-NAME:
362: * repinsd Read 32-bit long words from an I/O port to a buffer.
363: *
364: *-ARGUMENTS:
365: * port A valid 32-bit I/O port.
366: * addr The address of the buffer where data is stored after
367: * "cnt" reads of the I/O port.
368: * cnt The number of 32-bit long words to be read from the
369: * I/O port.
370: *
371: *-DESCRIPTION:
372: * This function provides a C-language interface to the machine
373: * instructions that read a string of 32-bit long words from a 32-bit I/O
374: * port using the I/O address space instead of the memory address space.
375: * The data from "cnt" reads of the I/O port is stored in the data buffer
376: * pointed to by "addr". The data buffer should be at least "cnt" 32-bit
377: * long words in length.
378: *
379: *-RETURN VALUE:
380: * None.
381: *
382: *-LEVEL:
383: * Base or Interrupt.
384: *
385: *-NOTES:
386: * Does not sleep.
387: *
388: * Driver-defined basic locks, read/write locks and sleep locks may be
389: * held across calls to this function.
390: *
391: * This function may not be meaningful on all implementations because
392: * some implementations may not support I/O-mapped I/O.
393: */
394:
395: #if __USE_PROTO__
396: void (repinsd) (int port, ulong_t * addr, int cnt)
397: #else
398: void
399: repinsd __ARGS ((port, addr, cnt))
400: int port;
401: ulong_t * addr;
402: int cnt;
403: #endif
404: {
405: repinsd (port, addr, cnt);
406: }
407:
408:
409: /*
410: *-STATUS:
411: * DDI/DKI
412: *
413: *-NAME:
414: * repinsw Read 16-bit short words from an I/O port to a buffer.
415: *
416: *-ARGUMENTS:
417: * port A valid 16-bit I/O port.
418: * addr The address of the buffer where data is stored after
419: * "cnt" reads of the I/O port.
420: * cnt The number of 16-bit short words to be read from the
421: * I/O port.
422: *
423: *-DESCRIPTION:
424: * This function provides a C-language interface to the machine
425: * instructions that read a string of 16-bit short words from a 16-bit
426: * I/O port using the I/O address space instead of the memory address
427: * space. The data from "cnt" reads of the I/O port is stored in the data
428: * buffer pointed to by "addr". The data buffer should be at least "cnt"
429: * 16-bit short words in length.
430: *
431: *-RETURN VALUE:
432: * None.
433: *
434: *-LEVEL:
435: * Base or Interrupt.
436: *
437: *-NOTES:
438: * Does not sleep.
439: *
440: * Driver-defined basic locks, read/write locks and sleep locks may be
441: * held across calls to this function.
442: *
443: * This function may not be meaningful on all implementations because
444: * some implementations may not support I/O-mapped I/O.
445: */
446:
447: #if __USE_PROTO__
448: void (repinsw) (int port, ushort_t * addr, int cnt)
449: #else
450: void
451: repinsw __ARGS ((port, addr, cnt))
452: int port;
453: ushort_t * addr;
454: int cnt;
455: #endif
456: {
457: repinsw (port, addr, cnt);
458: }
459:
460:
461: /*
462: *-STATUS:
463: * DDI/DKI
464: *
465: *-NAME:
466: * repoutsb Write bytes from a buffer to an I/O port.
467: *
468: *-ARGUMENTS:
469: * port A valid 8-bit I/O port.
470: * addr The address of the buffer from which "cnt" bytes are
471: * written to the I/O port.
472: * cnt The number of bytes to be written to the I/O port.
473: *
474: *-DESCRIPTION:
475: * This function provides a C-language interface to the machine
476: * instructions that write a string of bytes to an 8-bit I/O port using
477: * the I/O address space instead of the memory address space. "cnt"
478: * bytes starting at the address pointed to by "addr" are written to the
479: * I/O port in "cnt" write operations. The buffer should be at least
480: * "cnt" bytes in length.
481: *
482: *-RETURN VALUE:
483: * None.
484: *
485: *-LEVEL:
486: * Base or Interrupt.
487: *
488: *-NOTES:
489: * Does not sleep.
490: *
491: * Driver-defined basic locks, read/write locks and sleep locks may be
492: * held across calls to this function.
493: *
494: * This function may not be meaningful on all implementations because
495: * some implementations may not support I/O-mapped I/O.
496: */
497:
498: #if __USE_PROTO__
499: void (repoutsb) (int port, uchar_t * addr, int cnt)
500: #else
501: void
502: repoutsb __ARGS ((port, addr, cnt))
503: int port;
504: uchar_t * addr;
505: int cnt;
506: #endif
507: {
508: repoutsb (port, addr, cnt);
509: }
510:
511:
512: /*
513: *-STATUS:
514: * DDI/DKI
515: *
516: *-NAME:
517: * repoutsd Write 32-bit long words from a buffer to an I/O port.
518: *
519: *-ARGUMENTS:
520: * port A valid 32-bit I/O port.
521: * addr The address of the buffer from which "cnt" 32-bit long
522: * words are written to the I/O port.
523: * cnt The number of 32-bit long words to be written to the
524: * I/O port.
525: *
526: *-DESCRIPTION:
527: * This function provides a C-language interface to the machine
528: * instructions that write a string of 32-bit long words to a 32-bit I/O
529: * port using the I/O address space instead of the memory address space.
530: * "cnt" 32-bit long words starting at the address pointed to by "addr"
531: * are written to the I/O port in "cnt" write operations. The buffer
532: * should be at least "cnt" 32-bit long words in length.
533: *
534: *-RETURN VALUE:
535: * None.
536: *
537: *-LEVEL:
538: * Base or Interrupt.
539: *
540: *-NOTES:
541: * Does not sleep.
542: *
543: * Driver-defined basic locks, read/write locks and sleep locks may be
544: * held across calls to this function.
545: *
546: * This function may not be meaningful on all implementations because
547: * some implementations may not support I/O-mapped I/O.
548: */
549:
550: #if __USE_PROTO__
551: void (repoutsd) (int port, ulong_t * addr, int cnt)
552: #else
553: void
554: repoutsd __ARGS ((port, addr, cnt))
555: int port;
556: ulong_t * addr;
557: int cnt;
558: #endif
559: {
560: repoutsd (port, addr, cnt);
561: }
562:
563:
564: /*
565: *-STATUS:
566: * DDI/DKI
567: *
568: *-NAME:
569: * repoutsw Write 16-bit short words from a buffer to an I/O port.
570: *
571: *-ARGUMENTS:
572: * port A valid 32-bit I/O port.
573: * addr The address of the buffer from which "cnt" 16-bit
574: short words are written to the I/O port.
575: * cnt The number of 16-bit short words to be written to the
576: * I/O port.
577: *
578: *-DESCRIPTION:
579: * This function provides a C-language interface to the machine
580: * instructions that write a string of 16-bit short words to a 16-bit I/O
581: * port using the I/O address space instead of the memory address space.
582: * "cnt" 16-bit short words starting at the address pointed to by "addr"
583: * are written to the I/O port in "cnt" write operations. The buffer
584: * should be at least "cnt" 16-bit short words in length.
585: *
586: *-RETURN VALUE:
587: * None.
588: *
589: *-LEVEL:
590: * Base or Interrupt.
591: *
592: *-NOTES:
593: * Does not sleep.
594: *
595: * Driver-defined basic locks, read/write locks and sleep locks may be
596: * held across calls to this function.
597: *
598: * This function may not be meaningful on all implementations because
599: * some implementations may not support I/O-mapped I/O.
600: */
601:
602: #if __USE_PROTO__
603: void (repoutsw) (int port, ushort_t * addr, int cnt)
604: #else
605: void
606: repoutsw __ARGS ((port, addr, cnt))
607: int port;
608: ushort_t * addr;
609: int cnt;
610: #endif
611: {
612: repoutsw (port, addr, cnt);
613: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.