]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/mach/task_info.h
xnu-3247.10.11.tar.gz
[apple/xnu.git] / osfmk / mach / task_info.h
index cab9c1757a0d9a0c773c76407622b2bac2283661..3311e3c15b8f822a819bbf11d2b7ff25144a0a87 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2007, 2015 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -69,6 +69,8 @@
 #include <mach/machine/vm_types.h>
 #include <mach/time_value.h>
 #include <mach/policy.h>
+#include <mach/vm_statistics.h> /* for vm_extmod_statistics_data_t */
+#include <Availability.h>
 
 #include <sys/cdefs.h>
 
@@ -78,6 +80,7 @@
 typedef        natural_t       task_flavor_t;
 typedef        integer_t       *task_info_t;           /* varying array of int */
 
+/* Deprecated, use per structure _data_t's instead */
 #define        TASK_INFO_MAX   (1024)          /* maximum array size */
 typedef        integer_t       task_info_data_t[TASK_INFO_MAX];
 
@@ -87,6 +90,7 @@ typedef       integer_t       task_info_data_t[TASK_INFO_MAX];
 
 #pragma pack(4)
 
+/* Don't use this, use MACH_TASK_BASIC_INFO instead */
 #define TASK_BASIC_INFO_32      4       /* basic information */
 #define TASK_BASIC2_INFO_32      6
 
@@ -105,9 +109,7 @@ typedef struct task_basic_info_32       *task_basic_info_32_t;
 #define TASK_BASIC_INFO_32_COUNT   \
                 (sizeof(task_basic_info_32_data_t) / sizeof(natural_t))
 
-
-#define TASK_BASIC_INFO_64      5       /* 64-bit capable basic info */
-
+/* Don't use this, use MACH_TASK_BASIC_INFO instead */
 struct task_basic_info_64 {
         integer_t       suspend_count;  /* suspend count for task */
         mach_vm_size_t  virtual_size;   /* virtual memory size (bytes) */
@@ -120,12 +122,14 @@ struct task_basic_info_64 {
 };
 typedef struct task_basic_info_64       task_basic_info_64_data_t;
 typedef struct task_basic_info_64       *task_basic_info_64_t;
+
+#define TASK_BASIC_INFO_64      5       /* 64-bit capable basic info */
 #define TASK_BASIC_INFO_64_COUNT   \
                 (sizeof(task_basic_info_64_data_t) / sizeof(natural_t))
 
 
 /* localized structure - cannot be safely passed between tasks of differing sizes */
-
+/* Don't use this, use MACH_TASK_BASIC_INFO instead */
 struct task_basic_info {
         integer_t       suspend_count;  /* suspend count for task */
         vm_size_t       virtual_size;   /* virtual memory size (bytes) */
@@ -184,7 +188,7 @@ typedef struct task_thread_times_info       *task_thread_times_info_t;
 #define TASK_ABSOLUTETIME_INFO 1
 
 struct task_absolutetime_info {
-       uint64_t                total_user;             /* total time */
+       uint64_t                total_user;
        uint64_t                total_system;
        uint64_t                threads_user;   /* existing threads only */
        uint64_t                threads_system;
@@ -195,6 +199,20 @@ typedef struct task_absolutetime_info      *task_absolutetime_info_t;
 #define TASK_ABSOLUTETIME_INFO_COUNT   ((mach_msg_type_number_t) \
                (sizeof (task_absolutetime_info_data_t) / sizeof (natural_t)))
 
+#define TASK_KERNELMEMORY_INFO 7
+
+struct task_kernelmemory_info {
+       uint64_t                total_palloc;   /* private kernel mem alloc'ed */
+       uint64_t                total_pfree;    /* private kernel mem freed */
+       uint64_t                total_salloc;   /* shared kernel mem alloc'ed */
+       uint64_t                total_sfree;    /* shared kernel mem freed */
+};
+
+typedef struct task_kernelmemory_info  task_kernelmemory_info_data_t;
+typedef struct task_kernelmemory_info  *task_kernelmemory_info_t;
+#define TASK_KERNELMEMORY_INFO_COUNT   ((mach_msg_type_number_t) \
+               (sizeof (task_kernelmemory_info_data_t) / sizeof (natural_t)))
+
 #define TASK_SECURITY_TOKEN            13
 #define TASK_SECURITY_TOKEN_COUNT      ((mach_msg_type_number_t) \
                (sizeof(security_token_t) / sizeof(natural_t)))
@@ -217,19 +235,190 @@ typedef struct task_affinity_tag_info    *task_affinity_tag_info_t;
 #define TASK_AFFINITY_TAG_INFO_COUNT   \
                (sizeof(task_affinity_tag_info_data_t) / sizeof(natural_t))
 
-#define TASK_DYLD_INFO                 17      /* This is experimental. */
+#define TASK_DYLD_INFO                 17
 
 struct task_dyld_info {
        mach_vm_address_t       all_image_info_addr;
        mach_vm_size_t          all_image_info_size;
+       integer_t               all_image_info_format;          
 };
 typedef struct task_dyld_info  task_dyld_info_data_t;
 typedef struct task_dyld_info  *task_dyld_info_t;
 #define TASK_DYLD_INFO_COUNT   \
                (sizeof(task_dyld_info_data_t) / sizeof(natural_t))
+#define TASK_DYLD_ALL_IMAGE_INFO_32    0       /* format value */
+#define TASK_DYLD_ALL_IMAGE_INFO_64    1       /* format value */
 
-#pragma pack()
 
+#define TASK_EXTMOD_INFO                       19
+
+struct task_extmod_info {
+       unsigned char   task_uuid[16];
+       vm_extmod_statistics_data_t             extmod_statistics;
+};
+typedef struct task_extmod_info        task_extmod_info_data_t;
+typedef struct task_extmod_info        *task_extmod_info_t;
+#define TASK_EXTMOD_INFO_COUNT \
+               (sizeof(task_extmod_info_data_t) / sizeof(natural_t))
+
+
+#define MACH_TASK_BASIC_INFO     20         /* always 64-bit basic info */
+struct mach_task_basic_info {
+        mach_vm_size_t  virtual_size;       /* virtual memory size (bytes) */
+        mach_vm_size_t  resident_size;      /* resident memory size (bytes) */
+        mach_vm_size_t  resident_size_max;  /* maximum resident memory size (bytes) */
+        time_value_t    user_time;          /* total user run time for
+                                               terminated threads */
+        time_value_t    system_time;        /* total system run time for
+                                               terminated threads */
+        policy_t        policy;             /* default policy for new threads */
+        integer_t       suspend_count;      /* suspend count for task */
+};
+typedef struct mach_task_basic_info       mach_task_basic_info_data_t;
+typedef struct mach_task_basic_info       *mach_task_basic_info_t;
+#define MACH_TASK_BASIC_INFO_COUNT   \
+                (sizeof(mach_task_basic_info_data_t) / sizeof(natural_t))
+
+
+#define TASK_POWER_INFO        21
+
+struct task_power_info {
+       uint64_t                total_user;
+       uint64_t                total_system;
+       uint64_t                task_interrupt_wakeups;
+       uint64_t                task_platform_idle_wakeups;
+       uint64_t                task_timer_wakeups_bin_1;
+       uint64_t                task_timer_wakeups_bin_2;
+};
+
+typedef struct task_power_info task_power_info_data_t;
+typedef struct task_power_info *task_power_info_t;
+#define TASK_POWER_INFO_COUNT  ((mach_msg_type_number_t) \
+               (sizeof (task_power_info_data_t) / sizeof (natural_t)))
+
+
+
+#define TASK_VM_INFO           22
+#define TASK_VM_INFO_PURGEABLE 23
+struct task_vm_info {
+        mach_vm_size_t  virtual_size;      /* virtual memory size (bytes) */
+       integer_t       region_count;       /* number of memory regions */
+       integer_t       page_size;
+        mach_vm_size_t  resident_size;     /* resident memory size (bytes) */
+        mach_vm_size_t  resident_size_peak; /* peak resident size (bytes) */
+
+       mach_vm_size_t  device;
+       mach_vm_size_t  device_peak;
+       mach_vm_size_t  internal;
+       mach_vm_size_t  internal_peak;
+       mach_vm_size_t  external;
+       mach_vm_size_t  external_peak;
+       mach_vm_size_t  reusable;
+       mach_vm_size_t  reusable_peak;
+       mach_vm_size_t  purgeable_volatile_pmap;
+       mach_vm_size_t  purgeable_volatile_resident;
+       mach_vm_size_t  purgeable_volatile_virtual;
+       mach_vm_size_t  compressed;
+       mach_vm_size_t  compressed_peak;
+       mach_vm_size_t  compressed_lifetime;
+
+       /* added for rev1 */
+       mach_vm_size_t  phys_footprint;
+};
+typedef struct task_vm_info    task_vm_info_data_t;
+typedef struct task_vm_info    *task_vm_info_t;
+#define TASK_VM_INFO_COUNT     ((mach_msg_type_number_t) \
+               (sizeof (task_vm_info_data_t) / sizeof (natural_t)))
+#define TASK_VM_INFO_REV0_COUNT /* doesn't include phys_footprint */ \
+               ((mach_msg_type_number_t) \
+               (TASK_VM_INFO_COUNT - 2))
+
+typedef struct vm_purgeable_info       task_purgable_info_t;
+
+
+#define TASK_TRACE_MEMORY_INFO  24
+struct task_trace_memory_info {
+       uint64_t  user_memory_address;  /* address of start of trace memory buffer */
+       uint64_t  buffer_size;                  /* size of buffer in bytes */
+       uint64_t  mailbox_array_size;   /* size of mailbox area in bytes */
+};
+typedef struct task_trace_memory_info task_trace_memory_info_data_t;
+typedef struct task_trace_memory_info * task_trace_memory_info_t;
+#define TASK_TRACE_MEMORY_INFO_COUNT  ((mach_msg_type_number_t) \
+               (sizeof(task_trace_memory_info_data_t) / sizeof(natural_t)))
+
+#define TASK_WAIT_STATE_INFO  25    /* deprecated. */
+struct task_wait_state_info {
+       uint64_t  total_wait_state_time;        /* Time that all threads past and present have been in a wait state */
+       uint64_t  total_wait_sfi_state_time;    /* Time that threads have been in SFI wait (should be a subset of total wait state time */
+       uint32_t  _reserved[4];
+};
+typedef struct task_wait_state_info task_wait_state_info_data_t;
+typedef struct task_wait_state_info * task_wait_state_info_t;
+#define TASK_WAIT_STATE_INFO_COUNT  ((mach_msg_type_number_t) \
+               (sizeof(task_wait_state_info_data_t) / sizeof(natural_t)))
+
+#define TASK_POWER_INFO_V2     26
+
+typedef struct {
+       uint64_t                task_gpu_utilisation;
+       uint64_t                task_gpu_stat_reserved0;
+       uint64_t                task_gpu_stat_reserved1;
+       uint64_t                task_gpu_stat_reserved2;
+} gpu_energy_data;
+
+typedef gpu_energy_data *gpu_energy_data_t;
+struct task_power_info_v2 {
+       task_power_info_data_t  cpu_energy;
+       gpu_energy_data gpu_energy;
+};
+
+typedef struct task_power_info_v2      task_power_info_v2_data_t;
+typedef struct task_power_info_v2      *task_power_info_v2_t;
+#define TASK_POWER_INFO_V2_COUNT       ((mach_msg_type_number_t) \
+               (sizeof (task_power_info_v2_data_t) / sizeof (natural_t)))
+
+
+#define TASK_VM_INFO_PURGEABLE_ACCOUNT 27 /* Used for xnu purgeable vm unit tests */
+
+#ifdef PRIVATE
+struct pvm_account_info {
+       uint64_t pvm_volatile_count; /* Number of volatile bytes associated with a task */
+       uint64_t pvm_volatile_compressed_count; /* Number of volatile compressed bytes associated with a task */
+       uint64_t pvm_nonvolatile_count; /* Number of nonvolatile bytes associated with a task */
+       uint64_t pvm_nonvolatile_compressed_count; /* Number of nonvolatile compressed bytes associated with a task */
+};
+
+typedef struct pvm_account_info *pvm_account_info_t;
+typedef struct pvm_account_info pvm_account_info_data_t;
+
+#define PVM_ACCOUNT_INFO_COUNT ((mach_msg_type_number_t) \
+               (sizeof (pvm_account_info_data_t) / sizeof (natural_t)))
+#endif /* PRIVATE */
+
+#define TASK_FLAGS_INFO  28                    /* return t_flags field */
+struct task_flags_info {
+       uint32_t        flags;                          /* task flags */
+};
+typedef struct task_flags_info task_flags_info_data_t;
+typedef struct task_flags_info * task_flags_info_t;
+#define TASK_FLAGS_INFO_COUNT  ((mach_msg_type_number_t) \
+               (sizeof(task_flags_info_data_t) / sizeof (natural_t)))
+
+#define TF_LP64                 0x00000001                              /* task has 64-bit addressing */
+
+#define TASK_DEBUG_INFO_INTERNAL    29 /* Used for kernel internal development tests. */
+
+#ifdef PRIVATE
+struct task_debug_info_internal {
+       uint64_t ipc_space_size;
+};
+typedef struct task_debug_info_internal *task_debug_info_internal_t;
+typedef struct task_debug_info_internal task_debug_info_internal_data_t;
+#define TASK_DEBUG_INFO_INTERNAL_COUNT  ((mach_msg_type_number_t) \
+               (sizeof (task_debug_info_internal_data_t) / sizeof(natural_t)))
+
+#endif /* PRIVATE */
 
 /*
  * Obsolete interfaces.
@@ -241,4 +430,6 @@ typedef struct task_dyld_info       *task_dyld_info_t;
 
 #define TASK_SCHED_INFO                        14
 
+#pragma pack()
+
 #endif /* _MACH_TASK_INFO_H_ */