1/* 2 * Copyright (c) 2003-2009 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29#include <machine/cpu_capabilities.h> 30#include <machine/commpage.h> 31#include <machine/asm.h> 32#include <assym.s> 33 34/* 35 * extern void commpage_sched_gen_inc(void); 36 */ 37 .text 38 39 .globl _commpage_sched_gen_inc 40_commpage_sched_gen_inc: 41#if defined (__x86_64__) 42 FRAME 43 44 /* Increment 32-bit commpage field if present */ 45 movq _commPagePtr32(%rip),%rdx 46 testq %rdx,%rdx 47 je 1f 48 subq $(ASM_COMM_PAGE32_BASE_ADDRESS),%rdx 49 lock 50 incl ASM_COMM_PAGE_SCHED_GEN(%rdx) 51 52 /* Increment 64-bit commpage field if present */ 53 movq _commPagePtr64(%rip),%rdx 54 testq %rdx,%rdx 55 je 1f 56 subq $(ASM_COMM_PAGE32_START_ADDRESS),%rdx 57 lock 58 incl ASM_COMM_PAGE_SCHED_GEN(%rdx) 591: 60 EMARF 61 ret 62#elif defined (__i386__) 63 FRAME 64 65 /* Increment 32-bit commpage field if present */ 66 mov _commPagePtr32,%edx 67 testl %edx,%edx 68 je 1f 69 sub $(ASM_COMM_PAGE32_BASE_ADDRESS),%edx 70 lock 71 incl ASM_COMM_PAGE_SCHED_GEN(%edx) 72 73 /* Increment 64-bit commpage field if present */ 74 mov _commPagePtr64,%edx 75 testl %edx,%edx 76 je 1f 77 sub $(ASM_COMM_PAGE32_START_ADDRESS),%edx 78 lock 79 incl ASM_COMM_PAGE_SCHED_GEN(%edx) 801: 81 EMARF 82 ret 83#else 84#error unsupported architecture 85#endif 86 87/* pointers to the 32-bit commpage routine descriptors */ 88/* WARNING: these must be sorted by commpage address! */ 89 .const_data 90 .align 3 91 .globl _commpage_32_routines 92_commpage_32_routines: 93 COMMPAGE_DESCRIPTOR_REFERENCE(preempt) 94 COMMPAGE_DESCRIPTOR_REFERENCE(backoff) 95 COMMPAGE_DESCRIPTOR_REFERENCE(pfz_enqueue) 96 COMMPAGE_DESCRIPTOR_REFERENCE(pfz_dequeue) 97 COMMPAGE_DESCRIPTOR_REFERENCE(pfz_mutex_lock) 98#if defined (__i386__) 99 .long 0 100#elif defined (__x86_64__) 101 .quad 0 102#else 103#error unsupported architecture 104#endif 105 106 107/* pointers to the 64-bit commpage routine descriptors */ 108/* WARNING: these must be sorted by commpage address! */ 109 .const_data 110 .align 3 111 .globl _commpage_64_routines 112_commpage_64_routines: 113 COMMPAGE_DESCRIPTOR_REFERENCE(preempt_64) 114 COMMPAGE_DESCRIPTOR_REFERENCE(backoff_64) 115 COMMPAGE_DESCRIPTOR_REFERENCE(pfz_enqueue_64) 116 COMMPAGE_DESCRIPTOR_REFERENCE(pfz_dequeue_64) 117 COMMPAGE_DESCRIPTOR_REFERENCE(pfz_mutex_lock_64) 118#if defined (__i386__) 119 .long 0 120#elif defined (__x86_64__) 121 .quad 0 122#else 123#error unsupported architecture 124#endif 125 126