in/out-Funktionen für IO-Bereich bitte "streamlinen"


  • Mod

    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));
    }
    

Anmelden zum Antworten