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())
 | 
			
		||||
				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());
 | 
			
		||||
			MUST(buffer->buffer.resize(actual_buffer_size, 0));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,10 +19,10 @@
 | 
			
		|||
namespace Kernel::ACPI
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
#if ARCH(x86_64)
 | 
			
		||||
asm(R"(
 | 
			
		||||
.global acpi_acquire_global_lock
 | 
			
		||||
acpi_acquire_global_lock:
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +54,41 @@ acpi_release_global_lock:
 | 
			
		|||
 | 
			
		||||
	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
 | 
			
		||||
	extern "C" bool acpi_acquire_global_lock(uint32_t* lock);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue