41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
/* deshab/portio.h - 端口 I/O 内联函数
|
|||
|
|
*
|
||
|
|
* 统一 dkm_shared.h 的 dkm_outb/inb/outl/inl 与 desktop_app.h 的 outb/inb 两套实现。
|
||
|
|
* 宿主已自带端口 I/O 声明时,包含前 #define DSB_NO_PORTIO 跳过本段。
|
||
|
|
*/
|
||
|
|
#ifndef DESHAB_PORTIO_H
|
||
|
|
#define DESHAB_PORTIO_H
|
||
|
|
|
||
|
|
#include "types.h"
|
||
|
|
|
||
|
|
#ifndef DSB_NO_PORTIO
|
||
|
|
|
||
|
|
static inline void dsb_outb(u16 port, u8 val) {
|
||
|
|
__asm__ volatile("outb %0, %1" :: "a"(val), "Nd"(port));
|
||
|
|
}
|
||
|
|
static inline u8 dsb_inb(u16 port) {
|
||
|
|
u8 v;
|
||
|
|
__asm__ volatile("inb %1, %0" : "=a"(v) : "Nd"(port));
|
||
|
|
return v;
|
||
|
|
}
|
||
|
|
static inline void dsb_outw(u16 port, u16 val) {
|
||
|
|
__asm__ volatile("outw %0, %1" :: "a"(val), "Nd"(port));
|
||
|
|
}
|
||
|
|
static inline u16 dsb_inw(u16 port) {
|
||
|
|
u16 v;
|
||
|
|
__asm__ volatile("inw %1, %0" : "=a"(v) : "Nd"(port));
|
||
|
|
return v;
|
||
|
|
}
|
||
|
|
static inline void dsb_outl(u16 port, u32 val) {
|
||
|
|
__asm__ volatile("outl %0, %1" :: "a"(val), "Nd"(port));
|
||
|
|
}
|
||
|
|
static inline u32 dsb_inl(u16 port) {
|
||
|
|
u32 v;
|
||
|
|
__asm__ volatile("inl %1, %0" : "=a"(v) : "Nd"(port));
|
||
|
|
return v;
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif /* DSB_NO_PORTIO */
|
||
|
|
|
||
|
|
#endif /* DESHAB_PORTIO_H */
|