X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/c18c124eaa464aaaa5549e99e5a70fc9cbb50944..3e170ce000f1506b7b5d2c5c7faec85ceabb573d:/bsd/kern/kern_kpc.c diff --git a/bsd/kern/kern_kpc.c b/bsd/kern/kern_kpc.c index dde93bbce..3e3443fc3 100644 --- a/bsd/kern/kern_kpc.c +++ b/bsd/kern/kern_kpc.c @@ -53,6 +53,7 @@ #define REQ_PERIOD (10) #define REQ_ACTIONID (11) #define REQ_SW_INC (14) +#define REQ_PMU_VERSION (15) /* Type-munging casts */ typedef int (*getint_t)(void); @@ -70,11 +71,6 @@ static void *sysctl_buffer = NULL; typedef int (*setget_func_t)(int); -/* init our stuff */ -extern void kpc_arch_init(void); -extern void kpc_common_init(void); -extern void kpc_thread_init(void); /* osfmk/kern/kpc_thread.c */ - void kpc_init(void) { @@ -247,6 +243,9 @@ sysctl_kpc_get_config(uint32_t classes, void* buf) static int sysctl_kpc_set_config(uint32_t classes, void* buf) { + /* userspace cannot reconfigure the power class */ + if (classes & KPC_CLASS_POWER_MASK) + return (EPERM); return kpc_set_config( classes, buf); } @@ -259,6 +258,9 @@ sysctl_kpc_get_period(uint32_t classes, void* buf) static int sysctl_kpc_set_period(uint32_t classes, void* buf) { + /* userspace cannot reconfigure the power class */ + if (classes & KPC_CLASS_POWER_MASK) + return (EPERM); return kpc_set_period( classes, buf); } @@ -500,6 +502,10 @@ kpc_sysctl SYSCTL_HANDLER_ARGS ret = sysctl_set_int( req, (setget_func_t)kpc_set_sw_inc ); break; + case REQ_PMU_VERSION: + ret = sysctl_get_int(oidp, req, kpc_get_pmu_version()); + break; + default: ret = ENOENT; break; @@ -533,6 +539,11 @@ SYSCTL_PROC(_kpc, OID_AUTO, thread_counting, (void*)REQ_THREAD_COUNTING, sizeof(int), kpc_sysctl, "I", "Thread accumulation"); +SYSCTL_PROC(_kpc, OID_AUTO, pmu_version, + CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_ANYBODY, + (void *)REQ_PMU_VERSION, + sizeof(int), kpc_sysctl, "I", "PMU version for hardware"); + /* faux values */ SYSCTL_PROC(_kpc, OID_AUTO, config_count, CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_ANYBODY,