📄 bus.h
字号:
loop 1b" : "=&a" (__x) : "d" (bsh + offset), "D" (addr), "c" (count) : "%edx", "%edi", "%ecx", "memory"); }#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif { __asm __volatile(" \n\ cld \n\ repne \n\ movsl" : : "S" (bsh + offset), "D" (addr), "c" (count) : "%esi", "%edi", "%ecx", "memory"); }#endif}#if 0 /* Cause a link error for bus_space_read_region_8 */#define bus_space_read_region_8 !!! bus_space_read_region_8 unimplemented !!!#endif/* * Write the 1, 2, 4, or 8 byte value `value' to bus space * described by tag/handle/offset. */static __inline void bus_space_write_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int8_t value);static __inline void bus_space_write_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int16_t value);static __inline void bus_space_write_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int32_t value);static __inline voidbus_space_write_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int8_t value){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif outb(bsh + offset, value);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif *(volatile u_int8_t *)(bsh + offset) = value;#endif}static __inline voidbus_space_write_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int16_t value){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif outw(bsh + offset, value);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif *(volatile u_int16_t *)(bsh + offset) = value;#endif}static __inline voidbus_space_write_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int32_t value){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif outl(bsh + offset, value);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif *(volatile u_int32_t *)(bsh + offset) = value;#endif}#if 0 /* Cause a link error for bus_space_write_8 */#define bus_space_write_8 !!! bus_space_write_8 not implemented !!!#endif/* * Write `count' 1, 2, 4, or 8 byte quantities from the buffer * provided to bus space described by tag/handle/offset. */static __inline void bus_space_write_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int8_t *addr, size_t count);static __inline void bus_space_write_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int16_t *addr, size_t count);static __inline void bus_space_write_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int32_t *addr, size_t count);static __inline voidbus_space_write_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int8_t *addr, size_t count){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif outsb(bsh + offset, addr, count);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif { int __x __asm__("%eax"); __asm __volatile(" \n\ cld \n\ 1: lodsb \n\ movb %%al,(%1) \n\ loop 1b" : "=&a" (__x) : "r" (bsh + offset), "S" (addr), "c" (count) : "%esi", "%ecx"); }#endif}static __inline voidbus_space_write_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int16_t *addr, size_t count){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif outsw(bsh + offset, addr, count);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif { int __x __asm__("%eax"); __asm __volatile(" \n\ cld \n\ 1: lodsw \n\ movw %%ax,(%1) \n\ loop 1b" : "=&a" (__x) : "r" (bsh + offset), "S" (addr), "c" (count) : "%esi", "%ecx"); }#endif}static __inline voidbus_space_write_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int32_t *addr, size_t count){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif outsl(bsh + offset, addr, count);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif { int __x __asm__("%eax"); __asm __volatile(" \n\ cld \n\ 1: lodsl \n\ movl %%eax,(%1) \n\ loop 1b" : "=&a" (__x) : "r" (bsh + offset), "S" (addr), "c" (count) : "%esi", "%ecx"); }#endif}#if 0 /* Cause a link error for bus_space_write_multi_8 */#define bus_space_write_multi_8(t, h, o, a, c) \ !!! bus_space_write_multi_8 unimplemented !!!#endif/* * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided * to bus space described by tag/handle starting at `offset'. */static __inline void bus_space_write_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int8_t *addr, size_t count);static __inline void bus_space_write_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int16_t *addr, size_t count);static __inline void bus_space_write_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int32_t *addr, size_t count);static __inline voidbus_space_write_region_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int8_t *addr, size_t count){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif { int __x __asm__("%eax"); __asm __volatile(" \n\ cld \n\ 1: lodsb \n\ outb %%al,%w1 \n\ incl %1 \n\ loop 1b" : "=&a" (__x) : "d" (bsh + offset), "S" (addr), "c" (count) : "%edx", "%esi", "%ecx", "memory"); }#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif { __asm __volatile(" \n\ cld \n\ repne \n\ movsb" : : "D" (bsh + offset), "S" (addr), "c" (count) : "%edi", "%esi", "%ecx", "memory"); }#endif}static __inline voidbus_space_write_region_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int16_t *addr, size_t count){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif { int __x __asm__("%eax"); __asm __volatile(" \n\ cld \n\ 1: lodsw \n\ outw %%ax,%w1 \n\ addl $2,%1 \n\ loop 1b" : "=&a" (__x) : "d" (bsh + offset), "S" (addr), "c" (count) : "%edx", "%esi", "%ecx", "memory"); }#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif { __asm __volatile(" \n\ cld \n\ repne \n\ movsw" : : "D" (bsh + offset), "S" (addr), "c" (count) : "%edi", "%esi", "%ecx", "memory"); }#endif}static __inline voidbus_space_write_region_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, const u_int32_t *addr, size_t count){#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif { int __x __asm__("%eax"); __asm __volatile(" \n\ cld \n\ 1: lodsl \n\ outl %%eax,%w1 \n\ addl $4,%1 \n\ loop 1b" : "=&a" (__x) : "d" (bsh + offset), "S" (addr), "c" (count) : "%edx", "%esi", "%ecx", "memory"); }#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif { __asm __volatile(" \n\ cld \n\ repne \n\ movsl" : : "D" (bsh + offset), "S" (addr), "c" (count) : "%edi", "%esi", "%ecx", "memory"); }#endif}#if 0 /* Cause a link error for bus_space_write_region_8 */#define bus_space_write_region_8 \ !!! bus_space_write_region_8 unimplemented !!!#endif/* * Write the 1, 2, 4, or 8 byte value `val' to bus space described * by tag/handle/offset `count' times. */static __inline void bus_space_set_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int8_t value, size_t count);static __inline void bus_space_set_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int16_t value, size_t count);static __inline void bus_space_set_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int32_t value, size_t count);static __inline voidbus_space_set_multi_1(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int8_t value, size_t count){ bus_addr_t addr = bsh + offset;#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif while (count--) outb(addr, value);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif while (count--) *(volatile u_int8_t *)(addr) = value;#endif}static __inline voidbus_space_set_multi_2(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int16_t value, size_t count){ bus_addr_t addr = bsh + offset;#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif while (count--) outw(addr, value);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif while (count--) *(volatile u_int16_t *)(addr) = value;#endif}static __inline voidbus_space_set_multi_4(bus_space_tag_t tag, bus_space_handle_t bsh, bus_size_t offset, u_int32_t value, size_t count){ bus_addr_t addr = bsh + offset;#if defined(_I386_BUS_PIO_H_)#if defined(_I386_BUS_MEMIO_H_) if (tag == I386_BUS_SPACE_IO)#endif while (count--) outl(addr, value);#endif#if defined(_I386_BUS_MEMIO_H_)#if defined(_I386_BUS_PIO_H_) else#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -