]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/sys/process_policy.h
xnu-3248.40.184.tar.gz
[apple/xnu.git] / bsd / sys / process_policy.h
index 19f3c26177b47ba4dcbbabf15dc98f86ac85d939..4aec9e13ea6604978cb7964ba5be0bc18515db41 100644 (file)
 #include <sys/types.h>
 #include <stdint.h>
 
+#ifndef XNU_KERNEL_PRIVATE
+#include <TargetConditionals.h>
+#endif
+
 __BEGIN_DECLS
 
 /* defns of scope */
@@ -52,6 +56,8 @@ __BEGIN_DECLS
 #define PROC_POLICY_ACTION_GET         11      /* get the policy attributes */
 #define PROC_POLICY_ACTION_ADD         12      /* add a policy attribute */
 #define PROC_POLICY_ACTION_REMOVE      13      /* remove a policy attribute */
+#define PROC_POLICY_ACTION_HOLD         14      /* hold an importance boost assertion */
+#define PROC_POLICY_ACTION_DROP         15      /* drop an importance boost assertion */
 
 /* policies */
 #define PROC_POLICY NONE               0
@@ -61,6 +67,7 @@ __BEGIN_DECLS
 #define PROC_POLICY_RESOURCE_USAGE     4       /* behavior on resource consumption */
 #define PROC_POLICY_RESERVED           5       /* behavior on resource consumption */
 #define PROC_POLICY_APPTYPE            6       /* behavior on resource consumption */
+#define PROC_POLICY_BOOST               7       /* importance boost/drop */
 
 /* sub policies for background policy */
 #define PROC_POLICY_BG_NONE            0       /* none */
@@ -68,11 +75,7 @@ __BEGIN_DECLS
 #define PROC_POLICY_BG_DISKTHROTTLE    2       /* disk accesses throttled */
 #define PROC_POLICY_BG_NETTHROTTLE     4       /* network accesses throttled */
 #define PROC_POLICY_BG_GPUDENY         8       /* no access to GPU */
-#if CONFIG_EMBEDDED
-#define PROC_POLICY_BG_ALL            0x0F
-#else /* CONFIG_EMBEDDED */
 #define PROC_POLICY_BG_ALL            0x07
-#endif /* CONFIG_EMBEDDED */
 #define PROC_POLICY_BG_DEFAULT         PROC_POLICY_BG_ALL
 
 /* sub policies for hardware */
@@ -85,28 +88,29 @@ __BEGIN_DECLS
 /* attribute values for disk hardware access, bit different as it should reflect IOPOL_XXX */
 #define PROC_POLICY_DISKACC_NONE       0
 #define PROC_POLICY_DISKACC_NORMAL     1       /* normal access to the disk */
+#define PROC_POLICY_DISKACC_FULLACCESS 1       /* normal access to the disk */
 #define PROC_POLICY_DISKACC_PASSIVE    2       /* treat the I/Os as passive */
 #define PROC_POLICY_DISKACC_THROTTLE   3       /* throttle the disk IOs */
-#define PROC_POLICY_DISKACC_DEFAULT    0
+#define PROC_POLICY_DISKACC_DEFAULT    PROC_POLICY_DISKACC_FULLACCESS
 
 /* attribute values for GPU hardware access */
 #define PROC_POLICY_GPUACC_NONE        0
 #define PROC_POLICY_GPUACC_FULLACCESS  0       /* complete access to the GPU */
 #define PROC_POLICY_GPUACC_DENYACCESS  1       /* deny any access to the GPU */
-#define PROC_POLICY_GPUACC_DEFAULT     0       /*  default is complete access */
+#define PROC_POLICY_GPUACC_DEFAULT     PROC_POLICY_GPUACC_FULLACCESS /*  default is complete access */
 
 /* atrribute values for  network hardware access */
 #define PROC_POLICY_NETACC_NONE        0
-#define PROC_POLICY_NETACC_NORMAL      0       /* complete access to the network */
+#define PROC_POLICY_NETACC_FULLACCESS  0       /* complete access to the network */
 #define PROC_POLICY_NETACC_THROTTLE    1       /* throttle access to network */
-#define PROC_POLICY_NETACC_DEFAULT     0       /*  default is complete access */
+#define PROC_POLICY_NETACC_DEFAULT     PROC_POLICY_NETACC_FULLACCESS /*  default is complete access */
 
 /* atrribute values for  network hardware access */
 #define PROC_POLICY_CPUACC_NONE                0
-#define PROC_POLICY_CPUACC_ALL         0       /* access to all avialable cpus */
+#define PROC_POLICY_CPUACC_FULLACCESS  0       /* access to all avialable cpus */
 #define PROC_POLICY_CPUACC_ONE         1       /* access to only one available cpu */
 #define PROC_POLICY_CPUACC_LLCACHE     2       /* access to only one last level cache */
-#define PROC_POLICY_CPUACC_DEFAULT     0       /*  default is access to all cpus */
+#define PROC_POLICY_CPUACC_DEFAULT     PROC_POLICY_CPUACC_FULLACCESS /*  default is access to all cpus */
 
 
 /* System Resource management (ie usage and starvation related) definitions */
@@ -124,22 +128,21 @@ __BEGIN_DECLS
 #define PROC_POLICY_RUSAGE_NETWORK     5       /* amount of network usage */
 #define PROC_POLICY_RUSAGE_POWER       6       /* amount of power/battery consumption */
 
-/* attribute values for the resource usage and low resource */
+/* attribute values for the resource usage and low resource - MUST match corresponding task definitions */
 #define PROC_POLICY_RSRCACT_NONE       0
 #define PROC_POLICY_RSRCACT_THROTTLE   1       /* throttle on resource condition */
 #define PROC_POLICY_RSRCACT_SUSPEND    2       /* suspend on resource condition */
 #define PROC_POLICY_RSRCACT_TERMINATE  3       /* kill on resource condition */
-#define PROC_POLICY_RSRCACT_NOTIFY     4       /* send kqueue notification */
-
+#define PROC_POLICY_RSRCACT_NOTIFY_KQ  4       /* send kqueue notification */
+#define PROC_POLICY_RSRCACT_NOTIFY_EXC 5       /* send exception */
 
-/* type of resource for kqueue notifiction */
-#define PROC_POLICY_RSRTYPE_CPU                1
-#define PROC_POLICY_RSRTYPE_WIREDMEM   2
-#define PROC_POLICY_RSRTYPE_VIRTUALMEM 4
-#define PROC_POLICY_RSRTYPE_DISK       8
-#define PROC_POLICY_RSRTYPE_NETWORK    0x010
-#define PROC_POLICY_RSRTYPE_POWER      0x20
+#define        PROC_POLICY_CPUMON_DISABLE      0xFF    /* Disable CPU usage monitor */
+#define        PROC_POLICY_CPUMON_DEFAULTS     0xFE    /* Set default CPU usage monitor params */
 
+/* sub policies for importance boost/drop */
+#define PROC_POLICY_IMP_IMPORTANT       1       /* Important-level boost */
+#define PROC_POLICY_IMP_STANDARD        2       /* Standard-level boost */
+#define PROC_POLICY_IMP_DONATION        3       /* Mark a task as an importance source */
 
 typedef struct proc_policy_attribute {
        uint32_t        ppattr_attribute;  /* the policy attribute to be modified or returned */
@@ -160,12 +163,16 @@ typedef struct proc_policy_cpuusage_attr {
 
 
 /* sub policies for PROC_POLICY_APPTYPE */
-#define PROC_POLICY_OSX_APPTYPE_NONE            0
-#define PROC_POLICY_OSX_APPTYPE_TAL             1      /* TAL based launched */
-#define PROC_POLICY_OSX_APPTYPE_WIDGET          2      /* for dashboard client */
-#define PROC_POLICY_OSX_APPTYPE_DASHCLIENT      2      /* rename to move away from widget */
-#define PROC_POLICY_IOS_APPTYPE                 3      /* ios specific handling */
-#define PROC_POLICY_IOS_NONUITYPE               4      /* ios non graphics type */
+#define        PROC_POLICY_APPTYPE_NONE        0       /* does nothing.. */
+#define        PROC_POLICY_APPTYPE_MODIFY      1       /* sets the app to various lifecycle states */
+
+/* exported apptypes for PROC_POLICY_APPTYPE */
+#define PROC_POLICY_OSX_APPTYPE_TAL             1       /* TAL-launched app */
+
+#define PROC_POLICY_OSX_APPTYPE_DASHCLIENT      2       /* Dashboard client (deprecated) */
+#define PROC_POLICY_IOS_DONATEIMP               6       /* donates priority imp (deprecated) */
+#define PROC_POLICY_IOS_HOLDIMP                 7       /* hold importance assertion (deprecated) */
+#define PROC_POLICY_IOS_DROPIMP                 8       /* drop importance assertion (deprecated) */
 
 #ifndef KERNEL
 int process_policy(int scope, int action, int policy, int policy_subtype, proc_policy_attribute_t * attrp, pid_t target_pid, uint64_t target_threadid);