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