in/out-Funktionen für IO-Bereich bitte "streamlinen"
-
Bezüglich der I/O-Funktionen hat es inzwischen etwas Wildwuchs gegeben. Ich bitte darum, dass die Assembler-Fachleute das mal in ein homogenes Format optimieren:
aus util.c, Rev. 117:uint32_t inportb(uint16_t port) { uint32_t ret_val; __asm__ volatile ("inb %w1,%b0" : "=a"(ret_val) : "d"(port)); return ret_val; } uint16_t inportw(uint16_t port) { uint16_t ret_val; __asm__ volatile ("inw %1,%0" : "=a" (ret_val) : "Nd" (port)); return ret_val; } uint32_t inportl(uint16_t port) { uint32_t ret_val; __asm__ volatile ("inl %1,%0" : "=a" (ret_val) : "Nd" (port)); return ret_val; } void outportb(uint16_t port, uint32_t val) { __asm__ volatile ("outb %b0,%w1" : : "a"(val), "d"(port)); } void outportw(uint16_t port, uint32_t val) { __asm__ volatile ("out %%ax,%%dx" :: "a"(val), "d"(port)); } void outportl(uint16_t port, uint32_t val) { __asm__ volatile ("outl %0,%1" : : "a"(val), "Nd"(port)); }
-
uint8_t inportb(uint16_t port) { uint8_t ret_val; __asm__ volatile ("in %%dx,%%al" : "=a"(ret_val) : "d"(port)); return ret_val; } uint16_t inportw(uint16_t port) { uint16_t ret_val; __asm__ volatile ("in %%dx,%%ax" : "=a" (ret_val) : "d"(port)); return ret_val; } uint32_t inportl(uint16_t port) { uint32_t ret_val; __asm__ volatile ("in %%dx,%%eax" : "=a" (ret_val) : "d"(port)); return ret_val; } void outportb(uint16_t port, uint8_t val) { __asm__ volatile ("out %%al,%%dx" :: "a"(val), "d"(port)); } void outportw(uint16_t port, uint16_t val) { __asm__ volatile ("out %%ax,%%dx" :: "a"(val), "d"(port)); } void outportl(uint16_t port, uint32_t val) { __asm__ volatile ("outl %%eax,%%dx" : : "a"(val), "d"(port)); }