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