mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-14 06:56:51 -04:00
More hardware support
This commit is contained in:
parent
c752e65bb3
commit
e147ad8758
@ -40,6 +40,16 @@ inline uint32_t in_dword(uint16_t _port){
|
||||
return rv;
|
||||
}
|
||||
|
||||
inline uint64_t in_qword(uint16_t _port){
|
||||
uint64_t rv;
|
||||
|
||||
asm volatile ("in %[data], %[port]"
|
||||
: [data] "=a" (rv)
|
||||
: [port] "dN" (_port));
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
inline void out_byte (uint16_t _port, uint8_t _data){
|
||||
asm volatile ("out %[port], %[data]"
|
||||
: /* No outputs */
|
||||
@ -58,6 +68,12 @@ inline void out_dword(uint16_t _port, uint32_t _data){
|
||||
: [port] "dN" (_port), [data] "a" (_data));
|
||||
}
|
||||
|
||||
inline void out_qword(uint16_t _port, uint64_t _data){
|
||||
asm volatile ("out %[port], %[data]"
|
||||
: /* No outputs */
|
||||
: [port] "dN" (_port), [data] "a" (_data));
|
||||
}
|
||||
|
||||
inline uint16_t switch_endian_16(uint16_t nb) {
|
||||
return (nb>>8) | (nb<<8);
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "scheduler.hpp"
|
||||
#include "virtual_allocator.hpp"
|
||||
#include "paging.hpp"
|
||||
#include "kernel_utils.hpp"
|
||||
|
||||
#include "mutex.hpp"
|
||||
#include "semaphore.hpp"
|
||||
@ -187,4 +188,56 @@ ACPI_STATUS AcpiOsSignalSemaphore(ACPI_SEMAPHORE handle, UINT32 units){
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
// Input / Output
|
||||
|
||||
ACPI_STATUS AcpiOsReadPort(ACPI_IO_ADDRESS port, UINT32* value, UINT32 width){
|
||||
switch (width) {
|
||||
case 8:
|
||||
*value = in_byte(port);
|
||||
break;
|
||||
|
||||
case 16:
|
||||
*value = in_word(port);
|
||||
break;
|
||||
|
||||
case 32:
|
||||
*value = in_dword(port);
|
||||
break;
|
||||
|
||||
case 64:
|
||||
*value = in_qword(port);
|
||||
break;
|
||||
|
||||
default:
|
||||
return AE_BAD_PARAMETER;
|
||||
}
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
ACPI_STATUS AcpiOsWritePort(ACPI_IO_ADDRESS port, UINT32 value, UINT32 width){
|
||||
switch (width) {
|
||||
case 8:
|
||||
out_byte(port, value);
|
||||
break;
|
||||
|
||||
case 16:
|
||||
out_word(port, value);
|
||||
break;
|
||||
|
||||
case 32:
|
||||
out_dword(port, value);
|
||||
break;
|
||||
|
||||
case 64:
|
||||
out_qword(port, value);
|
||||
break;
|
||||
|
||||
default:
|
||||
return AE_BAD_PARAMETER;
|
||||
}
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
} //end of extern "C"
|
||||
|
Loading…
x
Reference in New Issue
Block a user