X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/378393581903b274cb7a4d18e0d978071a6b592d..b0d623f7f2ae71ed96e60569f61f9a9a27016e80:/osfmk/i386/postcode.h diff --git a/osfmk/i386/postcode.h b/osfmk/i386/postcode.h index d0065f7a6..498a88143 100644 --- a/osfmk/i386/postcode.h +++ b/osfmk/i386/postcode.h @@ -1,39 +1,41 @@ /* - * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2008 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. * - * @APPLE_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ #ifndef _I386_POSTCODE_H_ #define _I386_POSTCODE_H_ -#ifndef DEBUG -#include -#endif - /* Define this to delay about 1 sec after posting each code */ -/* #define POSTCODE_DELAY 1 */ +//#define POSTCODE_DELAY 1 /* The POSTCODE is port 0x80 */ #define POSTPORT 0x80 -#define SPINCOUNT 100000000 +#define SPINCOUNT 300000000 #define CPU_PAUSE() rep; nop #if DEBUG @@ -49,15 +51,28 @@ CPU_PAUSE(); \ decl %eax; \ jne 1b +#define POSTCODE_AX \ + outw %ax,$(POSTPORT); \ + movl $(SPINCOUNT), %eax; \ +1: \ + CPU_PAUSE(); \ + decl %eax; \ + jne 1b #else #define POSTCODE_AL \ outb %al,$(POSTPORT) +#define POSTCODE_AX \ + outw %ax,$(POSTPORT) #endif /* POSTCODE_DELAY */ #define POSTCODE(XX) \ mov $(XX), %al; \ POSTCODE_AL +#define POSTCODE2(XXXX) \ + mov $(XXXX), %ax; \ + POSTCODE_AX + /* Output byte value to postcode, without destoying register eax */ #define POSTCODE_SAVE_EAX(XX) \ push %eax; \ @@ -88,7 +103,10 @@ #else /* DEBUG */ #define POSTCODE_AL +#define POSTCODE_AX #define POSTCODE(X) +#define POSTCODE2(X) +#define POSTCODE_SAVE_EAX(X) #define POSTCODE32_EBX #endif /* DEBUG */ @@ -96,37 +114,57 @@ * The following postcodes are defined for stages of early startup: */ -#define PSTART_ENTRY 0xFF -#define PSTART_PAGE_TABLES 0xFE -#define PSTART_BEFORE_PAGING 0xFD -#define VSTART_ENTRY 0xFC -#define VSTART_STACK_SWITCH 0xFB -#define VSTART_EXIT 0xFA -#define I386_INIT_ENTRY 0xF9 -#define CPU_INIT_D 0xF8 -#define PROCESSOR_BOOTSTRAP_D 0xF7 -#define PE_INIT_PLATFORM_D 0xF6 -#define THREAD_BOOTSTRAP_D 0xF5 - -#define SLAVE_PSTART_ENTRY 0xEF -#define REAL_TO_PROT_ENTRY 0xEE -#define REAL_TO_PROT_EXIT 0xED -#define STARTPROG_ENTRY 0xEC -#define STARTPROG_EXIT 0xEB -#define SLAVE_START_ENTRY 0xEA -#define SLAVE_START_EXIT 0xE9 -#define SVSTART_ENTRY 0xE8 -#define SVSTART_DESC_INIT 0xE7 -#define SVSTART_STACK_SWITCH 0xE6 -#define SVSTART_EXIT 0xE5 -#define I386_INIT_SLAVE 0xE4 - -#define MP_KDP_ENTER 0xDB /* Machine in kdp DeBugger */ -#define PANIC_HLT 0xD1 /* Die an early death */ - -#define ACPI_WAKE_START_ENTRY 0xCF -#define ACPI_WAKE_PROT_ENTRY 0xCE -#define ACPI_WAKE_PAGED_ENTRY 0xCD +#define _PSTART_ENTRY 0xFF +#define _PSTART_RELOC 0xFE +#define PSTART_ENTRY 0xFD +#define PSTART_PAGE_TABLES 0xFC +#if defined(__x86_64__) +#define PSTART_BEFORE_ID_MAP 0xFB +#else +#define PSTART_BEFORE_PAGING 0xFB +#endif +#define VSTART_ENTRY 0xFA +#define VSTART_STACK_SWITCH 0xF9 +#define VSTART_BEFORE_PAGING 0xF8 +#define VSTART_EXIT 0xF7 +#define I386_INIT_ENTRY 0xF6 +#define CPU_INIT_D 0xF5 +#define PE_INIT_PLATFORM_D 0xF4 + +#define SLAVE_RSTART_ENTRY 0xEF +#define SLAVE_REAL_TO_PROT_ENTRY 0xEE +#define SLAVE_REAL_TO_PROT_EXIT 0xED +#define SLAVE_STARTPROG_ENTRY 0xEC +#define SLAVE_STARTPROG_EXIT 0xEB +#define SLAVE_PSTART_ENTRY 0xEA +#define SLAVE_PSTART_EXIT 0xE9 +#if defined(__i386__) +#define SLAVE_VSTART_ENTRY 0xE8 +#define SLAVE_VSTART_DESC_INIT 0xE7 +#define SLAVE_VSTART_STACK_SWITCH 0xE6 +#define SLAVE_VSTART_EXIT 0xE5 +#endif +#define I386_INIT_SLAVE 0xE4 + +#define PANIC_DOUBLE_FAULT 0xDF /* Double Fault exception */ +#define PANIC_MACHINE_CHECK 0xDE /* Machine-Check */ +#define MP_KDP_ENTER 0xDB /* Machine in kdp DeBugger */ +#define PANIC_HLT 0xD1 /* Die an early death */ +#define NO_64BIT 0x64 /* No 64-bit support yet */ + +#define ACPI_WAKE_START_ENTRY 0xCF +#define ACPI_WAKE_PROT_ENTRY 0xCE +#define ACPI_WAKE_PAGED_ENTRY 0xCD + +#define CPU_IA32_ENABLE_ENTRY 0xBF +#define CPU_IA32_ENABLE_EXIT 0xBE +#define ML_LOAD_DESC64_ENTRY 0xBD +#define ML_LOAD_DESC64_GDT 0xBC +#define ML_LOAD_DESC64_IDT 0xBB +#define ML_LOAD_DESC64_LDT 0xBA +#define ML_LOAD_DESC64_EXIT 0xB9 +#define CPU_IA32_DISABLE_ENTRY 0xB8 +#define CPU_IA32_DISABLE_EXIT 0xB7 #ifndef ASSEMBLER inline static void @@ -143,6 +181,11 @@ _postcode(uint8_t xx) { asm volatile("outb %0, %1" : : "a" (xx), "N" (POSTPORT)); } +inline static void +_postcode2(uint16_t xxxx) +{ + asm volatile("outw %0, %1" : : "a" (xxxx), "N" (POSTPORT)); +} #if DEBUG inline static void postcode(uint8_t xx) @@ -152,8 +195,17 @@ postcode(uint8_t xx) _postcode_delay(SPINCOUNT); #endif } +inline static void +postcode2(uint8_t xxxx) +{ + _postcode2(xxxx); +#if POSTCODE_DELAY + _postcode_delay(SPINCOUNT); +#endif +} #else -#define postcode(xx) +#define postcode(xx) do {} while(0) +#define postcode2(xxxx) do {} while(0) #endif #endif