Kernel: Fix 32 bit compilation
This commit is contained in:
parent
687fa44eff
commit
30d12a76bc
|
@ -43,7 +43,7 @@ namespace Kernel::ACPI::AML
|
||||||
if (!buffer_size.has_value())
|
if (!buffer_size.has_value())
|
||||||
return ParseResult::Failure;
|
return ParseResult::Failure;
|
||||||
|
|
||||||
uint32_t actual_buffer_size = BAN::Math::max(buffer_size.value(), buffer_context.aml_data.size());
|
uint32_t actual_buffer_size = BAN::Math::max<uint32_t>(buffer_size.value(), buffer_context.aml_data.size());
|
||||||
|
|
||||||
auto buffer = MUST(BAN::RefPtr<Buffer>::create());
|
auto buffer = MUST(BAN::RefPtr<Buffer>::create());
|
||||||
MUST(buffer->buffer.resize(actual_buffer_size, 0));
|
MUST(buffer->buffer.resize(actual_buffer_size, 0));
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
namespace Kernel::ACPI
|
namespace Kernel::ACPI
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
static uint32_t* s_global_lock { nullptr };
|
static uint32_t* s_global_lock { nullptr };
|
||||||
|
|
||||||
// https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/05_ACPI_Software_Programming_Model/ACPI_Software_Programming_Model.html#global-lock
|
// https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/05_ACPI_Software_Programming_Model/ACPI_Software_Programming_Model.html#global-lock
|
||||||
|
#if ARCH(x86_64)
|
||||||
asm(R"(
|
asm(R"(
|
||||||
.global acpi_acquire_global_lock
|
.global acpi_acquire_global_lock
|
||||||
acpi_acquire_global_lock:
|
acpi_acquire_global_lock:
|
||||||
|
@ -54,6 +54,41 @@ acpi_release_global_lock:
|
||||||
|
|
||||||
ret
|
ret
|
||||||
)");
|
)");
|
||||||
|
#elif ARCH(i686)
|
||||||
|
asm(R"(
|
||||||
|
.global acpi_acquire_global_lock
|
||||||
|
acpi_acquire_global_lock:
|
||||||
|
movl 4(%esp), %ecx
|
||||||
|
movl (%ecx), %edx
|
||||||
|
andl $(~1), %edx
|
||||||
|
btsl $1, %edx
|
||||||
|
adcl $0, %edx
|
||||||
|
|
||||||
|
lock cmpxchgl %edx, (%ecx)
|
||||||
|
jnz acpi_acquire_global_lock
|
||||||
|
|
||||||
|
cmpb $3, %dl
|
||||||
|
sbbl %eax, %eax
|
||||||
|
negl %eax
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
.global acpi_release_global_lock
|
||||||
|
acpi_release_global_lock:
|
||||||
|
movl 4(%esp), %ecx
|
||||||
|
movl (%ecx), %eax
|
||||||
|
movl %eax, %edx
|
||||||
|
|
||||||
|
andl $(~3), %edx
|
||||||
|
|
||||||
|
lock cmpxchgl %edx, (%ecx)
|
||||||
|
jnz acpi_release_global_lock
|
||||||
|
|
||||||
|
andl $1, %eax
|
||||||
|
|
||||||
|
ret
|
||||||
|
)");
|
||||||
|
#endif
|
||||||
|
|
||||||
// returns true if lock was acquired successfully
|
// returns true if lock was acquired successfully
|
||||||
extern "C" bool acpi_acquire_global_lock(uint32_t* lock);
|
extern "C" bool acpi_acquire_global_lock(uint32_t* lock);
|
||||||
|
|
Loading…
Reference in New Issue