AquilaOS documentation
How it works, and its code
Loading...
Searching...
No Matches
io.h File Reference
#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  ioaddr
 Where a device's registers are. More...

Macros

#define __inb(port)
#define __inw(port)
#define __inl(port)
#define __insw(port, count, buf)
#define __outsw(port, count, buf)
#define __outb(port, value)
#define __outw(port, value)
#define __outl(port, value)
#define __io_wait()
#define __mmio_inb(addr)
#define __mmio_inw(addr)
#define __mmio_inl(addr)
#define __mmio_inq(addr)
#define __mmio_outb(addr, v)
#define __mmio_outw(addr, v)
#define __mmio_outl(addr, v)
#define __mmio_outq(addr, v)
#define IOADDR_PORT   1
#define IOADDR_MMIO8   2
#define IOADDR_MMIO16   3
#define IOADDR_MMIO32   4

Functions

static char * ioaddr_type_str (struct ioaddr *io)
static uint8_t io_in8 (struct ioaddr *io, uintptr_t off)
static uint16_t io_in16 (struct ioaddr *io, uintptr_t off)
static uint32_t io_in32 (struct ioaddr *io, uintptr_t off)
static void io_out8 (struct ioaddr *io, uintptr_t off, uint8_t val)
static void io_out16 (struct ioaddr *io, uintptr_t off, uint16_t val)
static void io_out32 (struct ioaddr *io, uintptr_t off, uint32_t val)

Macro Definition Documentation

◆ __inb

#define __inb ( port)
Value:
({ \
uint8_t ret; \
asm volatile ("inb %%dx, %%al":"=a"(ret):"d"(port)); \
ret; \
})
unsigned char uint8_t
Definition stddef.h:20

Definition at line 14 of file io.h.

Referenced by io_in8().

◆ __inl

#define __inl ( port)
Value:
({ \
uint32_t ret; \
asm volatile ("inl %%dx, %%eax":"=a"(ret):"d"(port)); \
ret; \
})
unsigned int uint32_t
Definition stddef.h:22

Definition at line 28 of file io.h.

Referenced by io_in32().

◆ __insw

#define __insw ( port,
count,
buf )
Value:
({ \
void *__buf = (buf); \
uint32_t __count = (count); \
asm volatile ("rep insw":"+D"(__buf), "+c"(__count):"d"(port):"memory"); \
})

Definition at line 38 of file io.h.

Referenced by pio_read_sectors().

◆ __inw

#define __inw ( port)
Value:
({ \
uint16_t ret; \
asm volatile ("inw %%dx, %%ax":"=a"(ret):"dN"(port)); \
ret; \
})
unsigned short int uint16_t
Definition stddef.h:21

Definition at line 21 of file io.h.

Referenced by io_in16().

◆ __io_wait

#define __io_wait ( )
Value:
({ \
asm volatile ( "jmp 1f\n\t" \
"1:jmp 2f\n\t" \
"2:" ); \
})

Definition at line 69 of file io.h.

◆ __mmio_inb

#define __mmio_inb ( addr)
Value:
(*((volatile uint8_t *)(addr)))

Definition at line 77 of file io.h.

Referenced by io_in8().

◆ __mmio_inl

#define __mmio_inl ( addr)
Value:
(*((volatile uint32_t *)(addr)))

Definition at line 79 of file io.h.

Referenced by io_in32().

◆ __mmio_inq

#define __mmio_inq ( addr)
Value:
(*((volatile uint64_t *)(addr)))
unsigned long long int uint64_t
Definition stddef.h:23

Definition at line 80 of file io.h.

◆ __mmio_inw

#define __mmio_inw ( addr)
Value:
(*((volatile uint16_t *)(addr)))

Definition at line 78 of file io.h.

Referenced by io_in16().

◆ __mmio_outb

#define __mmio_outb ( addr,
v )
Value:
(*((volatile uint8_t *)(addr)) = v)

Definition at line 82 of file io.h.

Referenced by io_out8().

◆ __mmio_outl

#define __mmio_outl ( addr,
v )
Value:
(*((volatile uint32_t *)(addr)) = v)

Definition at line 84 of file io.h.

Referenced by io_out32().

◆ __mmio_outq

#define __mmio_outq ( addr,
v )
Value:
(*((volatile uint64_t *)(addr)) = v)

Definition at line 85 of file io.h.

◆ __mmio_outw

#define __mmio_outw ( addr,
v )
Value:
(*((volatile uint16_t *)(addr)) = v)

Definition at line 83 of file io.h.

Referenced by io_out16().

◆ __outb

#define __outb ( port,
value )
Value:
({ \
asm volatile ("outb %%al, %%dx"::"d"((port)),"a"((value))); \
})

Definition at line 53 of file io.h.

Referenced by io_out8().

◆ __outl

#define __outl ( port,
value )
Value:
({ \
asm volatile ("outl %%eax, %%dx"::"d"(port),"a"(value)); \
})

Definition at line 63 of file io.h.

Referenced by io_out32().

◆ __outsw

#define __outsw ( port,
count,
buf )
Value:
({ \
const void *__buf = (buf); \
uint32_t __count = (count); \
asm volatile ("rep outsw":"+S"(__buf), "+c"(__count):"d"(port):"memory"); \
})

Definition at line 45 of file io.h.

Referenced by pio_write_sectors().

◆ __outw

#define __outw ( port,
value )
Value:
({ \
asm volatile ("outw %%ax, %%dx"::"d"(port),"a"(value)); \
})

Definition at line 58 of file io.h.

Referenced by io_out16().

◆ IOADDR_MMIO16

#define IOADDR_MMIO16   3

Definition at line 91 of file io.h.

Referenced by io_in16(), io_in32(), io_in8(), io_out16(), io_out32(), io_out8(), io_reg(), and ioaddr_type_str().

◆ IOADDR_MMIO32

#define IOADDR_MMIO32   4

Definition at line 92 of file io.h.

Referenced by io_in16(), io_in32(), io_in8(), io_out16(), io_out32(), io_out8(), io_reg(), and ioaddr_type_str().

◆ IOADDR_MMIO8

#define IOADDR_MMIO8   2

Definition at line 90 of file io.h.

Referenced by e1000_probe(), io_in16(), io_in32(), io_in8(), io_out16(), io_out32(), io_out8(), and ioaddr_type_str().

◆ IOADDR_PORT

Function Documentation

◆ io_in16()

uint16_t io_in16 ( struct ioaddr * io,
uintptr_t off )
inlinestatic

◆ io_in32()

uint32_t io_in32 ( struct ioaddr * io,
uintptr_t off )
inlinestatic

◆ io_in8()

uint8_t io_in8 ( struct ioaddr * io,
uintptr_t off )
inlinestatic

◆ io_out16()

void io_out16 ( struct ioaddr * io,
uintptr_t off,
uint16_t val )
inlinestatic

◆ io_out32()

void io_out32 ( struct ioaddr * io,
uintptr_t off,
uint32_t val )
inlinestatic

◆ io_out8()

void io_out8 ( struct ioaddr * io,
uintptr_t off,
uint8_t val )
inlinestatic

◆ ioaddr_type_str()

char * ioaddr_type_str ( struct ioaddr * io)
inlinestatic