1/* 2 * Copyright (c) 2011-2012 Apple Computer, 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 * Mach Operating System 30 * Copyright (c) 1989 Carnegie-Mellon University 31 * Copyright (c) 1988 Carnegie-Mellon University 32 * Copyright (c) 1987 Carnegie-Mellon University 33 * All rights reserved. The CMU software License Agreement specifies 34 * the terms and conditions for use and redistribution. 35 */ 36 37/* 38 * EXC_RESOURCE related macros, namespace etc. 39 */ 40 41#ifndef _EXC_RESOURCE_H_ 42#define _EXC_RESOURCE_H_ 43 44/* 45 * Generic exception code format: 46 * 47 * code: 48 * +----------------------------------------------------------+ 49 * |[63:61] type | [60:58] flavor | [57:0] type-specific data | 50 * +----------------------------------------------------------+ 51 */ 52 53 54/* EXC_RESOURCE type and flavor decoding routines */ 55#define EXC_RESOURCE_DECODE_RESOURCE_TYPE(code) \ 56 (((code) >> 61) & 0x7ULL) 57#define EXC_RESOURCE_DECODE_FLAVOR(code) \ 58 (((code) >> 58) & 0x7ULL) 59 60/* EXC_RESOURCE Types */ 61#define RESOURCE_TYPE_CPU 1 62#define RESOURCE_TYPE_WAKEUPS 2 63#define RESOURCE_TYPE_MEMORY 3 64 65/* RESOURCE_TYPE_CPU flavors */ 66#define FLAVOR_CPU_MONITOR 1 67#define FLAVOR_CPU_MONITOR_FATAL 2 68 69/* 70 * RESOURCE_TYPE_CPU exception code & subcode. 71 * 72 * This is sent by the kernel when the CPU usage monitor 73 * is tripped. [See proc_set_cpumon_params()] 74 * 75 * code: 76 * +-----------------------------------------------+ 77 * |[63:61] RESOURCE |[60:58] FLAVOR_CPU_ |[57:32] | 78 * |_TYPE_CPU |MONITOR[_FATAL] |Unused | 79 * +-----------------------------------------------+ 80 * |[31:7] Interval (sec) | [6:0] CPU limit (%)| 81 * +-----------------------------------------------+ 82 * 83 * subcode: 84 * +-----------------------------------------------+ 85 * | | [6:0] % of CPU | 86 * | | actually consumed | 87 * +-----------------------------------------------+ 88 * 89 */ 90 91/* RESOURCE_TYPE_CPU decoding macros */ 92#define EXC_RESOURCE_CPUMONITOR_DECODE_INTERVAL(code) \ 93 (((code) >> 7) & 0x1FFFFFFULL) 94#define EXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE(code) \ 95 ((code) & 0x7FULL) 96#define EXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE_OBSERVED(subcode) \ 97 ((subcode) & 0x7FULL) 98 99 100/* RESOURCE_TYPE_WAKEUPS flavors */ 101#define FLAVOR_WAKEUPS_MONITOR 1 102 103/* 104 * RESOURCE_TYPE_WAKEUPS exception code & subcode. 105 * 106 * This is sent by the kernel when the platform idle 107 * wakeups monitor is tripped. 108 * [See proc_set_wakeupsmon_params()] 109 * 110 * code: 111 * +-----------------------------------------------+ 112 * |[63:61] RESOURCE |[60:58] FLAVOR_ |[57:32] | 113 * |_TYPE_WAKEUPS |WAKEUPS_MONITOR |Unused | 114 * +-----------------------------------------------+ 115 * | [31:20] Observation | [19:0] # of wakeups | 116 * | interval (sec) | permitted (per sec) | 117 * +-----------------------------------------------+ 118 * 119 * subcode: 120 * +-----------------------------------------------+ 121 * | | [19:0] # of wakeups | 122 * | | observed (per sec) | 123 * +-----------------------------------------------+ 124 * 125 */ 126 127#define EXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_PERMITTED(code) \ 128 ((code) & 0xFFFULL) 129#define EXC_RESOURCE_CPUMONITOR_DECODE_OBSERVATION_INTERVAL(code) \ 130 (((code) >> 20) & 0xFFFFFULL) 131#define EXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_OBSERVED(subcode) \ 132 ((subcode) & 0xFFFFFULL) 133 134/* RESOURCE_TYPE_MEMORY flavors */ 135#define FLAVOR_HIGH_WATERMARK 1 136 137/* 138 * RESOURCE_TYPE_MEMORY / FLAVOR_HIGH_WATERMARK 139 * exception code & subcode. 140 * 141 * This is sent by the kernel when a task crosses its high 142 * watermark memory limit. 143 * 144 * code: 145 * +------------------------------------------------+ 146 * |[63:61] RESOURCE |[60:58] FLAVOR_HIGH_ |[57:32] | 147 * |_TYPE_MEMORY |WATERMARK |Unused | 148 * +------------------------------------------------+ 149 * | | [12:0] HWM limit (MB)| 150 * +------------------------------------------------+ 151 * 152 * subcode: 153 * +------------------------------------------------+ 154 * | unused | 155 * +------------------------------------------------+ 156 * 157 */ 158 159#define EXC_RESOURCE_HWM_DECODE_LIMIT(code) \ 160 ((code) & 0x1FFFULL) 161 162 163#ifdef KERNEL 164 165/* EXC_RESOURCE type and flavor encoding macros */ 166#define EXC_RESOURCE_ENCODE_TYPE(code, type) \ 167 ((code) |= (((uint64_t)(type) & 0x7ULL) << 61)) 168#define EXC_RESOURCE_ENCODE_FLAVOR(code, flavor) \ 169 ((code) |= (((uint64_t)(flavor) & 0x7ULL) << 58)) 170 171/* RESOURCE_TYPE_CPU::FLAVOR_CPU_MONITOR specific encoding macros */ 172#define EXC_RESOURCE_CPUMONITOR_ENCODE_INTERVAL(code, interval) \ 173 ((code) |= (((uint64_t)(interval) & 0x1FFFFFFULL) << 7)) 174#define EXC_RESOURCE_CPUMONITOR_ENCODE_PERCENTAGE(code, percentage) \ 175 ((code) |= (((uint64_t)(percentage) & 0x7FULL))) 176 177/* RESOURCE_TYPE_WAKEUPS::FLAVOR_WAKEUPS_MONITOR specific encoding macros */ 178#define EXC_RESOURCE_CPUMONITOR_ENCODE_WAKEUPS_PERMITTED(code, num) \ 179 ((code) |= ((uint64_t)(num) & 0xFFFFFULL)) 180#define EXC_RESOURCE_CPUMONITOR_ENCODE_OBSERVATION_INTERVAL(code, num) \ 181 ((code) |= (((uint64_t)(num) & 0xFFFULL) << 20)) 182#define EXC_RESOURCE_CPUMONITOR_ENCODE_WAKEUPS_OBSERVED(subcode, num) \ 183 ((subcode) |= ((uint64_t)(num) & 0xFFFFFULL)) 184 185/* RESOURCE_TYPE_MEMORY::FLAVOR_HIGH_WATERMARK specific encoding macros */ 186#define EXC_RESOURCE_HWM_ENCODE_LIMIT(code, num) \ 187 ((code) |= ((uint64_t)(num) & 0x1FFFULL)) 188 189#endif /* KERNEL */ 190 191 192#endif /* _EXC_RESOURCE_H_ */ 193