mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-30 03:20:28 +00:00
6c4024c04a
Also add an AudioServer that (right now) doesn't do much. It tries to open, parse, and play a wav file. In the future, it can do more. My general thinking here here is that /dev/audio will be "owned" by AudioServer, and we'll do mixing in software before passing buffers off to the kernel to play, but we have to start somewhere.
72 lines
1.3 KiB
C++
72 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
|
|
namespace IO {
|
|
|
|
inline u8 in8(u16 port)
|
|
{
|
|
u8 value;
|
|
asm volatile("inb %1, %0"
|
|
: "=a"(value)
|
|
: "Nd"(port));
|
|
return value;
|
|
}
|
|
|
|
inline u16 in16(u16 port)
|
|
{
|
|
u16 value;
|
|
asm volatile("inw %1, %0"
|
|
: "=a"(value)
|
|
: "Nd"(port));
|
|
return value;
|
|
}
|
|
|
|
inline u32 in32(u16 port)
|
|
{
|
|
u32 value;
|
|
asm volatile("inl %1, %0"
|
|
: "=a"(value)
|
|
: "Nd"(port));
|
|
return value;
|
|
}
|
|
|
|
inline void repeated_in16(u16 port, u8* buffer, int buffer_size)
|
|
{
|
|
asm volatile("rep insw"
|
|
: "+D"(buffer), "+c"(buffer_size)
|
|
: "d"(port)
|
|
: "memory");
|
|
}
|
|
|
|
inline void out8(u16 port, u8 value)
|
|
{
|
|
asm volatile("outb %0, %1" ::"a"(value), "Nd"(port));
|
|
}
|
|
|
|
inline void out16(u16 port, u16 value)
|
|
{
|
|
asm volatile("outw %0, %1" ::"a"(value), "Nd"(port));
|
|
}
|
|
|
|
inline void out32(u16 port, u32 value)
|
|
{
|
|
asm volatile("outl %0, %1" ::"a"(value), "Nd"(port));
|
|
}
|
|
|
|
inline void repeated_out16(u16 port, const u8* data, int data_size)
|
|
{
|
|
asm volatile("rep outsw"
|
|
: "+S"(data), "+c"(data_size)
|
|
: "d"(port));
|
|
}
|
|
|
|
inline void delay()
|
|
{
|
|
// ~3 microsecs
|
|
for (auto i = 0; i < 32; i++) {
|
|
IO::in8(0x80);
|
|
}
|
|
}
|
|
|
|
}
|