X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/6d2010ae8f7a6078e10b361c6962983bab233e0f..d9a64523371fa019c4575bb400cbbc3a50ac9903:/osfmk/i386/commpage/commpage.h diff --git a/osfmk/i386/commpage/commpage.h b/osfmk/i386/commpage/commpage.h index c8369d78d..e4a2c7ac3 100644 --- a/osfmk/i386/commpage/commpage.h +++ b/osfmk/i386/commpage/commpage.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2009 Apple Inc. All rights reserved. + * Copyright (c) 2003-2012 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -59,29 +59,17 @@ #define COMMPAGE_DESCRIPTOR_NAME(label) _commpage_ ## label -#if defined (__i386__) - -#define COMMPAGE_DESCRIPTOR_FIELD_POINTER .long -#define COMMPAGE_DESCRIPTOR_REFERENCE(label) \ - .long COMMPAGE_DESCRIPTOR_NAME(label) - -#elif defined (__x86_64__) - #define COMMPAGE_DESCRIPTOR_FIELD_POINTER .quad #define COMMPAGE_DESCRIPTOR_REFERENCE(label) \ .quad COMMPAGE_DESCRIPTOR_NAME(label) -#else -#error unsupported architecture -#endif - #define COMMPAGE_FUNCTION_START(label,codetype,alignment) \ .text ;\ .code ## codetype ;\ .align alignment, 0x90 ;\ L ## label ## : -#define COMMPAGE_DESCRIPTOR(label,address,must,cant) \ +#define COMMPAGE_DESCRIPTOR(label,address) \ L ## label ## _end: ;\ .set L ## label ## _size, L ## label ## _end - L ## label ;\ .const_data ;\ @@ -90,8 +78,6 @@ COMMPAGE_DESCRIPTOR_NAME(label) ## : ;\ COMMPAGE_DESCRIPTOR_FIELD_POINTER L ## label ;\ .long L ## label ## _size ;\ .long address ;\ - .long must ;\ - .long cant ;\ .text @@ -120,6 +106,14 @@ COMMPAGE_DESCRIPTOR_NAME(label) ## : ;\ #define UNIQUEID(name) L ## name +/* COMMPAGE_JMP(target,from,start) + * + * This macro perform a jump to another commpage routine. + * Used to return from the PFZ by jumping via a return outside the PFZ. + */ +#define COMMPAGE_JMP(target,from,start) \ + jmp L ## start - from + target + #else /* __ASSEMBLER__ */ /* Each potential commpage routine is described by one of these. @@ -131,8 +125,6 @@ typedef struct commpage_descriptor { void *code_address; // address of code uint32_t code_length; // length in bytes uint32_t commpage_address; // put at this address (_COMM_PAGE_BCOPY etc) - uint32_t musthave; // _cpu_capability bits we must have - uint32_t canthave; // _cpu_capability bits we can't have } commpage_descriptor; @@ -150,17 +142,21 @@ typedef volatile struct commpage_time_data { uint64_t gtod_sec_base; // _COMM_PAGE_GTOD_SEC_BASE } commpage_time_data; - extern char *commPagePtr32; // virt address of 32-bit commpage in kernel map extern char *commPagePtr64; // ...and of 64-bit commpage -extern void commpage_set_timestamp(uint64_t abstime, uint64_t secs); -extern void commpage_disable_timestamp( void ); +extern void commpage_set_timestamp(uint64_t abstime, uint64_t sec, uint64_t frac, uint64_t scale, uint64_t tick_per_sec); +#define commpage_disable_timestamp() commpage_set_timestamp( 0, 0, 0, 0, 0 ); extern void commpage_set_nanotime(uint64_t tsc_base, uint64_t ns_base, uint32_t scale, uint32_t shift); extern void commpage_set_memory_pressure(unsigned int pressure); extern void commpage_set_spin_count(unsigned int count); extern void commpage_sched_gen_inc(void); extern void commpage_update_active_cpus(void); +extern void commpage_update_mach_approximate_time(uint64_t abstime); +extern void commpage_update_mach_continuous_time(uint64_t sleeptime); +extern void commpage_update_boottime(uint64_t boottime_usec); +extern void commpage_update_kdebug_state(void); +extern void commpage_update_atm_diagnostic_config(uint32_t); extern uint32_t commpage_is_in_pfz32(uint32_t); extern uint32_t commpage_is_in_pfz64(addr64_t);