|
|
1.1.1.4 root 1: #ifndef _ASM_IO_H
2: #define _ASM_IO_H
3:
1.1.1.5 ! root 4: /*
! 5: * Thanks to James van Artsdalen for a better timing-fix than
! 6: * the two short jumps: using outb's to a nonexistent port seems
! 7: * to guarantee better timings even on fast machines.
! 8: *
! 9: * Linus
! 10: */
! 11:
1.1.1.4 root 12: extern void inline outb(char value, unsigned short port)
1.1.1.2 root 13: {
1.1.1.3 root 14: __asm__ volatile ("outb %0,%1"
15: ::"a" ((char) value),"d" ((unsigned short) port));
1.1.1.2 root 16: }
1.1 root 17:
1.1.1.4 root 18: extern void inline outb_p(char value, unsigned short port)
1.1.1.2 root 19: {
1.1.1.5 ! root 20: __asm__ volatile ("outb %0,%1\n\t"
! 21: "outb %0,$0x80\n\t"
! 22: "outb %0,$0x80\n\t"
! 23: "outb %0,$0x80\n\t"
! 24: "outb %0,$0x80"
1.1.1.3 root 25: ::"a" ((char) value),"d" ((unsigned short) port));
1.1.1.2 root 26: }
1.1 root 27:
1.1.1.4 root 28: extern unsigned char inline inb(unsigned short port)
1.1.1.2 root 29: {
30: unsigned char _v;
1.1.1.3 root 31: __asm__ volatile ("inb %1,%0"
32: :"=a" (_v):"d" ((unsigned short) port));
1.1.1.2 root 33: return _v;
34: }
1.1 root 35:
1.1.1.4 root 36: extern unsigned char inline inb_p(unsigned short port)
1.1.1.2 root 37: {
38: unsigned char _v;
1.1.1.5 ! root 39: __asm__ volatile ("inb %1,%0\n\t"
! 40: "outb %0,$0x80\n\t"
! 41: "outb %0,$0x80\n\t"
! 42: "outb %0,$0x80\n\t"
! 43: "outb %0,$0x80"
1.1.1.3 root 44: :"=a" (_v):"d" ((unsigned short) port));
1.1.1.2 root 45: return _v;
46: }
1.1.1.4 root 47:
48: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.