mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 13:02:45 +00:00 
			
		
		
		
	 0dc9af5f7e
			
		
	
	
		0dc9af5f7e
		
	
	
	
	
		
			
			Also run it across the whole tree to get everything using the One True Style. We don't yet run this in an automated fashion as it's a little slow, but there is a snippet to do so in makeall.sh.
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <AK/Types.h>
 | |
| 
 | |
| namespace IO {
 | |
| 
 | |
| inline byte in8(word port)
 | |
| {
 | |
|     byte value;
 | |
|     asm volatile("inb %1, %0"
 | |
|                  : "=a"(value)
 | |
|                  : "Nd"(port));
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| inline word in16(word port)
 | |
| {
 | |
|     word value;
 | |
|     asm volatile("inw %1, %0"
 | |
|                  : "=a"(value)
 | |
|                  : "Nd"(port));
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| inline dword in32(word port)
 | |
| {
 | |
|     dword value;
 | |
|     asm volatile("inl %1, %0"
 | |
|                  : "=a"(value)
 | |
|                  : "Nd"(port));
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| inline void repeated_in16(word port, byte* buffer, int buffer_size)
 | |
| {
 | |
|     asm volatile("rep insw"
 | |
|                  : "+D"(buffer), "+c"(buffer_size)
 | |
|                  : "d"(port)
 | |
|                  : "memory");
 | |
| }
 | |
| 
 | |
| inline void out8(word port, byte value)
 | |
| {
 | |
|     asm volatile("outb %0, %1" ::"a"(value), "Nd"(port));
 | |
| }
 | |
| 
 | |
| inline void out16(word port, word value)
 | |
| {
 | |
|     asm volatile("outw %0, %1" ::"a"(value), "Nd"(port));
 | |
| }
 | |
| 
 | |
| inline void out32(word port, dword value)
 | |
| {
 | |
|     asm volatile("outl %0, %1" ::"a"(value), "Nd"(port));
 | |
| }
 | |
| 
 | |
| inline void repeated_out16(word port, const byte* data, int data_size)
 | |
| {
 | |
|     asm volatile("rep outsw"
 | |
|                  : "+S"(data), "+c"(data_size)
 | |
|                  : "d"(port));
 | |
| }
 | |
| 
 | |
| }
 |