io.h#

io.h中提供了io操作函数

Author

Shihong Wang (jack4shihong@gmail.com)

Version

0.1

Date

2023-04-09

Copyright

Copyright Shihong Wang (c) 2023 with GNU Public License V3.0

Note

RISC-V通过Memory Mapping IO (MMIO)的方式操作设备寄存器. 关于具体的MMIO Map, 参阅QEMU中的virt_memmap[]: qemu/qemu

Defines

dmb()#

dmb(Define Memory Barrier)定义了内存屏障(Memory Barrier)

__iormb()#

__iormb 定义了读取寄存器的内存屏障

__iowmb()#

__iowmb 定义了写入寄存器的内存屏障

glue(x, y, z)#

glue用于将符号x, y, z拼接为符号x_y_z

Parameters:
  • x – 第一个符号

  • y – 第二个符号

  • z – 第三个符号

mkname(type, width)#

mkname用于方便的拼接得到函数名

Parameters:
  • type – 读还是写寄存器, 只能是read或write

  • width – 读写的位数

mkread(width)#

mkread用于生成读不同长度寄存器的函数

Note

通常情况下,在内联汇编代码块的最后一条语句中将需要返回的值存储在一个特定的变量中,然后该变量将被作为代码块的返回值返回给调用者。在GCC扩展中,这个变量通常被命名为__v(两个下划线 + v),并且在代码块的最后一行写上__v;语句来表示将其作为返回值返回给调用者。

Note

因为地址的值(寄存器的值)可能会被设备改变, 因此必须声明是volatile, 以避免GCC进行优化

Parameters:
  • width – 读取的位数

mkwrite(width)#

mkwrite用于生成写不同长度寄存器的函数

Note

因为地址的值(寄存器的值)可能会被设备改变, 因此必须声明是volatile, 以避免GCC进行优化

Parameters:
  • width – 写入的位数

Functions

static inline void write_8_bits(uint64_t addr, uint8_t value)#

write_8_bitsaddr映射的寄存器写1个字节的数据

Parameters:
  • addr – 寄存器映射的地址

  • value – 需要写入的数据, 1个字节

static inline void write_16_bits(uint64_t addr, uint16_t value)#

write_16_bitsaddr映射的寄存器写2个字节的数据

Parameters:
  • addr – 寄存器映射的地址

  • value – 需要写入的数据, 2个字节

static inline void write_32_bits(uint64_t addr, uint32_t value)#

write_32_bitsaddr映射的寄存器写4个字节的数据

Parameters:
  • addr – 寄存器映射的地址

  • value – 需要写入的数据, 4个字节

static inline void write_64_bits(uint64_t addr, uint64_t value)#

write_64_bitsaddr映射的寄存器写8个字节的数据

Parameters:
  • addr – 寄存器映射的地址

  • value – 需要写入的数据, 8个字节

static inline uint8_t read_8_bits(uint64_t addr)#

read_8_bitsaddr映射的寄存器读取1个字节的数据

Parameters:

addr – 寄存器映射的地址

Returns:

uint8_t 读取的数据

static inline uint16_t read_16_bits(uint64_t addr)#

read_16_bitsaddr映射的寄存器读取2个字节的数据

Parameters:

addr – 寄存器映射的地址

Returns:

uint16_t 读取的数据

static inline uint32_t read_32_bits(uint64_t addr)#

read_32_bitsaddr映射的寄存器读取4个字节的数据

Parameters:

addr – 寄存器映射的地址

Returns:

uint32_t 读取的数据

static inline uint64_t read_64_bits(uint64_t addr)#

read_64_bitsaddr映射的寄存器读取8个字节的数据

Parameters:

addr – 寄存器映射的地址

Returns:

uint64_t 读取的数据

mkread (8)
mkread (16)
mkread (32)
mkread (64)
mkwrite (8)
mkwrite (16)
mkwrite (32)
mkwrite (64)