]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/sys/proc_info.h
xnu-3789.1.32.tar.gz
[apple/xnu.git] / bsd / sys / proc_info.h
index 67842664db5f0eee98a000a23b8c2eddfb0759d9..8f22d8007aa02592bfd84a141d51e96df036cc9a 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2005-2016 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <sys/kern_control.h>
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <sys/kern_control.h>
+#include <sys/event.h>
 #include <net/if.h>
 #include <net/route.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <net/if.h>
 #include <net/route.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
+#include <mach/machine.h>
+#include <uuid/uuid.h>
+
+#ifdef PRIVATE
+#include <mach/coalition.h> /* COALITION_NUM_TYPES */
+#endif
 
 __BEGIN_DECLS
 
 
 __BEGIN_DECLS
 
@@ -95,6 +102,45 @@ struct proc_bsdshortinfo {
 };
 
 
 };
 
 
+#ifdef  PRIVATE
+struct proc_uniqidentifierinfo {
+       uint8_t                 p_uuid[16];             /* UUID of the main executable */
+       uint64_t                p_uniqueid;             /* 64 bit unique identifier for process */
+       uint64_t                p_puniqueid;            /* unique identifier for process's parent */
+       uint64_t                p_reserve2;             /* reserved for future use */
+       uint64_t                p_reserve3;             /* reserved for future use */
+       uint64_t                p_reserve4;             /* reserved for future use */
+};
+
+
+struct proc_bsdinfowithuniqid {
+       struct proc_bsdinfo             pbsd;
+       struct proc_uniqidentifierinfo  p_uniqidentifier;
+};
+
+struct proc_archinfo {
+       cpu_type_t              p_cputype;      
+       cpu_subtype_t           p_cpusubtype;
+};
+
+struct proc_pidcoalitioninfo {
+       uint64_t coalition_id[COALITION_NUM_TYPES];
+       uint64_t reserved1;
+       uint64_t reserved2;
+       uint64_t reserved3;
+};
+
+struct proc_originatorinfo {
+       uuid_t                  originator_uuid;        /* UUID of the originator process */
+       pid_t                   originator_pid;         /* pid of the originator process */
+       uint64_t                p_reserve2;
+       uint64_t                p_reserve3;
+       uint64_t                p_reserve4;
+};
+
+#endif
+
+
 /* pbi_flags values */
 #define PROC_FLAG_SYSTEM       1       /*  System process */
 #define PROC_FLAG_TRACED       2       /* process currently being traced, possibly by gdb */
 /* pbi_flags values */
 #define PROC_FLAG_SYSTEM       1       /*  System process */
 #define PROC_FLAG_TRACED       2       /* process currently being traced, possibly by gdb */
@@ -118,6 +164,15 @@ struct proc_bsdshortinfo {
 #ifdef  PRIVATE
 #define PROC_FLAG_DARWINBG     0x8000  /* process in darwin background */
 #define PROC_FLAG_EXT_DARWINBG 0x10000 /* process in darwin background - external enforcement */
 #ifdef  PRIVATE
 #define PROC_FLAG_DARWINBG     0x8000  /* process in darwin background */
 #define PROC_FLAG_EXT_DARWINBG 0x10000 /* process in darwin background - external enforcement */
+#define PROC_FLAG_IOS_APPLEDAEMON 0x20000      /* Process is apple daemon  */
+#define PROC_FLAG_DELAYIDLESLEEP 0x40000       /* Process is marked to delay idle sleep on disk IO */
+#define PROC_FLAG_IOS_IMPPROMOTION 0x80000     /* Process is daemon which receives importane donation  */
+#define PROC_FLAG_ADAPTIVE              0x100000         /* Process is adaptive */
+#define PROC_FLAG_ADAPTIVE_IMPORTANT    0x200000         /* Process is adaptive, and is currently important */
+#define PROC_FLAG_IMPORTANCE_DONOR   0x400000 /* Process is marked as an importance donor */
+#define PROC_FLAG_SUPPRESSED         0x800000 /* Process is suppressed */
+#define PROC_FLAG_APPLICATION 0x1000000        /* Process is an application */
+#define PROC_FLAG_IOS_APPLICATION PROC_FLAG_APPLICATION        /* Process is an application */
 #endif
 
 
 #endif
 
 
@@ -229,21 +284,43 @@ struct proc_workqueueinfo {
 /*
  *     workqueue state (pwq_state field)
  */
 /*
  *     workqueue state (pwq_state field)
  */
-#define WQ_EXCEEDED_CONSTRAINED_THREAD_LIMIT   0x1
-#define WQ_EXCEEDED_TOTAL_THREAD_LIMIT         0x2
-
+#define WQ_EXCEEDED_CONSTRAINED_THREAD_LIMIT 0x1
+#define WQ_EXCEEDED_TOTAL_THREAD_LIMIT 0x2
+#define WQ_FLAGS_AVAILABLE 0x4
 
 struct proc_fileinfo {
        uint32_t                fi_openflags;
        uint32_t                fi_status;      
        off_t                   fi_offset;
        int32_t                 fi_type;
 
 struct proc_fileinfo {
        uint32_t                fi_openflags;
        uint32_t                fi_status;      
        off_t                   fi_offset;
        int32_t                 fi_type;
-       int32_t                 rfu_1;  /* reserved */
+       uint32_t                fi_guardflags;
 };
 
 /* stats flags in proc_fileinfo */
 #define PROC_FP_SHARED 1       /* shared by more than one fd */
 #define PROC_FP_CLEXEC 2       /* close on exec */
 };
 
 /* stats flags in proc_fileinfo */
 #define PROC_FP_SHARED 1       /* shared by more than one fd */
 #define PROC_FP_CLEXEC 2       /* close on exec */
+#define PROC_FP_GUARDED        4       /* guarded fd */
+#define PROC_FP_CLFORK 8       /* close on fork */
+
+#define PROC_FI_GUARD_CLOSE            (1u << 0)
+#define PROC_FI_GUARD_DUP              (1u << 1)
+#define PROC_FI_GUARD_SOCKET_IPC       (1u << 2)
+#define PROC_FI_GUARD_FILEPORT         (1u << 3)
+
+struct proc_exitreasonbasicinfo {
+       uint32_t                        beri_namespace;
+       uint64_t                        beri_code;
+       uint64_t                        beri_flags;
+       uint32_t                        beri_reason_buf_size;
+} __attribute__((packed));
+
+struct proc_exitreasoninfo {
+       uint32_t                        eri_namespace;
+       uint64_t                        eri_code;
+       uint64_t                        eri_flags;
+       uint32_t                        eri_reason_buf_size;
+       uint64_t                        eri_kcd_buf;
+} __attribute__((packed));
 
 /*
  * A copy of stat64 with static sized fields.
 
 /*
  * A copy of stat64 with static sized fields.
@@ -558,8 +635,23 @@ struct kqueue_info {
        uint32_t                kq_state;
        uint32_t                rfu_1;  /* reserved */
 };
        uint32_t                kq_state;
        uint32_t                rfu_1;  /* reserved */
 };
-#define PROC_KQUEUE_SELECT     1
-#define PROC_KQUEUE_SLEEP      2
+
+/* keep in sync with KQ_* in sys/eventvar.h */
+#define PROC_KQUEUE_SELECT     0x01
+#define PROC_KQUEUE_SLEEP      0x02
+#define PROC_KQUEUE_32         0x08
+#define PROC_KQUEUE_64         0x10
+#define PROC_KQUEUE_QOS                0x20
+
+#ifdef PRIVATE
+struct kevent_extinfo {
+       struct kevent_qos_s kqext_kev;
+       uint64_t kqext_sdata;
+       int kqext_status;
+       int kqext_sfflags;
+       uint64_t kqext_reserved[2];
+};
+#endif /* PRIVATE */
 
 struct kqueue_fdinfo {
        struct proc_fileinfo    pfi;
 
 struct kqueue_fdinfo {
        struct proc_fileinfo    pfi;
@@ -586,6 +678,7 @@ struct appletalk_fdinfo {
 #define PROX_FDTYPE_KQUEUE     5
 #define PROX_FDTYPE_PIPE       6
 #define PROX_FDTYPE_FSEVENTS   7
 #define PROX_FDTYPE_KQUEUE     5
 #define PROX_FDTYPE_PIPE       6
 #define PROX_FDTYPE_FSEVENTS   7
+#define PROX_FDTYPE_NETPOLICY  9
 
 struct proc_fdinfo {
        int32_t                 proc_fd;
 
 struct proc_fdinfo {
        int32_t                 proc_fd;
@@ -597,6 +690,7 @@ struct proc_fileportinfo {
        uint32_t                proc_fdtype;
 };
 
        uint32_t                proc_fdtype;
 };
 
+
 /* Flavors for proc_pidinfo() */
 #define PROC_PIDLISTFDS                        1
 #define PROC_PIDLISTFD_SIZE            (sizeof(struct proc_fdinfo))
 /* Flavors for proc_pidinfo() */
 #define PROC_PIDLISTFDS                        1
 #define PROC_PIDLISTFD_SIZE            (sizeof(struct proc_fdinfo))
@@ -642,6 +736,45 @@ struct proc_fileportinfo {
 #define PROC_PIDLISTFILEPORTS          14
 #define PROC_PIDLISTFILEPORTS_SIZE     (sizeof(struct proc_fileportinfo))
 
 #define PROC_PIDLISTFILEPORTS          14
 #define PROC_PIDLISTFILEPORTS_SIZE     (sizeof(struct proc_fileportinfo))
 
+#define PROC_PIDTHREADID64INFO         15
+#define PROC_PIDTHREADID64INFO_SIZE    (sizeof(struct proc_threadinfo))
+
+#define PROC_PID_RUSAGE                        16
+#define PROC_PID_RUSAGE_SIZE           0
+
+#ifdef  PRIVATE
+#define PROC_PIDUNIQIDENTIFIERINFO     17
+#define PROC_PIDUNIQIDENTIFIERINFO_SIZE \
+                                       (sizeof(struct proc_uniqidentifierinfo))
+
+#define PROC_PIDT_BSDINFOWITHUNIQID    18
+#define PROC_PIDT_BSDINFOWITHUNIQID_SIZE \
+                                       (sizeof(struct proc_bsdinfowithuniqid))
+
+#define PROC_PIDARCHINFO               19
+#define PROC_PIDARCHINFO_SIZE          \
+                                       (sizeof(struct proc_archinfo))
+
+#define PROC_PIDCOALITIONINFO          20
+#define PROC_PIDCOALITIONINFO_SIZE     (sizeof(struct proc_pidcoalitioninfo))
+
+#define PROC_PIDNOTEEXIT               21
+#define PROC_PIDNOTEEXIT_SIZE          (sizeof(uint32_t))
+
+#define PROC_PIDREGIONPATHINFO2                22
+#define PROC_PIDREGIONPATHINFO2_SIZE   (sizeof(struct proc_regionwithpathinfo))
+
+#define PROC_PIDREGIONPATHINFO3                23
+#define PROC_PIDREGIONPATHINFO3_SIZE   (sizeof(struct proc_regionwithpathinfo))
+
+#define PROC_PIDEXITREASONINFO         24
+#define PROC_PIDEXITREASONINFO_SIZE    (sizeof(struct proc_exitreasoninfo))
+
+#define PROC_PIDEXITREASONBASICINFO    25
+#define PROC_PIDEXITREASONBASICINFOSIZE        (sizeof(struct proc_exitreasonbasicinfo))
+
+#endif
+
 /* Flavors for proc_pidfdinfo */
 
 #define PROC_PIDFDVNODEINFO            1
 /* Flavors for proc_pidfdinfo */
 
 #define PROC_PIDFDVNODEINFO            1
@@ -668,6 +801,13 @@ struct proc_fileportinfo {
 #define PROC_PIDFDATALKINFO            8
 #define PROC_PIDFDATALKINFO_SIZE       (sizeof(struct appletalk_fdinfo))
 
 #define PROC_PIDFDATALKINFO            8
 #define PROC_PIDFDATALKINFO_SIZE       (sizeof(struct appletalk_fdinfo))
 
+#ifdef PRIVATE
+#define PROC_PIDFDKQUEUE_EXTINFO       9
+#define PROC_PIDFDKQUEUE_EXTINFO_SIZE  (sizeof(struct kevent_extinfo))
+#define PROC_PIDFDKQUEUE_KNOTES_MAX    (1024 * 128)
+#endif /* PRIVATE */
+
+
 /* Flavors for proc_pidfileportinfo */
 
 #define PROC_PIDFILEPORTVNODEPATHINFO  2       /* out: vnode_fdinfowithpath */
 /* Flavors for proc_pidfileportinfo */
 
 #define PROC_PIDFILEPORTVNODEPATHINFO  2       /* out: vnode_fdinfowithpath */
@@ -691,6 +831,74 @@ struct proc_fileportinfo {
 
 #define PROC_SELFSET_VMRSRCOWNER       3
 
 
 #define PROC_SELFSET_VMRSRCOWNER       3
 
+#define PROC_SELFSET_DELAYIDLESLEEP    4
+
+/* used for proc_dirtycontrol */
+#define PROC_DIRTYCONTROL_TRACK         1
+#define PROC_DIRTYCONTROL_SET           2
+#define PROC_DIRTYCONTROL_GET           3
+#define PROC_DIRTYCONTROL_CLEAR         4
+
+/* proc_track_dirty() flags */
+#define PROC_DIRTY_TRACK                0x1
+#define PROC_DIRTY_ALLOW_IDLE_EXIT      0x2
+#define PROC_DIRTY_DEFER                0x4
+#define PROC_DIRTY_LAUNCH_IN_PROGRESS   0x8
+
+/* proc_get_dirty() flags */
+#define PROC_DIRTY_TRACKED              0x1
+#define PROC_DIRTY_ALLOWS_IDLE_EXIT     0x2
+#define PROC_DIRTY_IS_DIRTY             0x4
+#define PROC_DIRTY_LAUNCH_IS_IN_PROGRESS   0x8
+
+#ifdef PRIVATE
+
+/* Flavors for proc_pidoriginatorinfo */
+#define PROC_PIDORIGINATOR_UUID                0x1
+#define PROC_PIDORIGINATOR_UUID_SIZE   (sizeof(uuid_t))
+
+#define PROC_PIDORIGINATOR_BGSTATE     0x2
+#define PROC_PIDORIGINATOR_BGSTATE_SIZE (sizeof(uint32_t))
+
+#define PROC_PIDORIGINATOR_PID_UUID     0x3
+#define PROC_PIDORIGINATOR_PID_UUID_SIZE (sizeof(struct proc_originatorinfo))
+
+/* Flavors for proc_listcoalitions */
+#define LISTCOALITIONS_ALL_COALS       1
+#define LISTCOALITIONS_ALL_COALS_SIZE   (sizeof(struct procinfo_coalinfo))
+
+#define LISTCOALITIONS_SINGLE_TYPE     2
+#define LISTCOALITIONS_SINGLE_TYPE_SIZE (sizeof(struct procinfo_coalinfo))
+
+/* reasons for proc_can_use_foreground_hw */
+#define PROC_FGHW_OK                     0 /* pid may use foreground HW */
+#define PROC_FGHW_DAEMON_OK              1
+#define PROC_FGHW_DAEMON_LEADER         10 /* pid is in a daemon coalition */
+#define PROC_FGHW_LEADER_NONUI          11 /* coalition leader is in a non-focal state */
+#define PROC_FGHW_LEADER_BACKGROUND     12 /* coalition leader is in a background state */
+#define PROC_FGHW_DAEMON_NO_VOUCHER     13 /* pid is a daemon with no adopted voucher */
+#define PROC_FGHW_NO_VOUCHER_ATTR       14 /* pid has adopted a voucher with no bank/originator attribute */
+#define PROC_FGHW_NO_ORIGINATOR         15 /* pid has adopted a voucher for a process that's gone away */
+#define PROC_FGHW_ORIGINATOR_BACKGROUND 16 /* pid has adopted a voucher for an app that's in the background */
+#define PROC_FGHW_VOUCHER_ERROR         98 /* error in voucher / originator callout */
+#define PROC_FGHW_ERROR                 99 /* syscall parameter/permissions error */
+
+/* __proc_info() call numbers */
+#define PROC_INFO_CALL_LISTPIDS         0x1
+#define PROC_INFO_CALL_PIDINFO          0x2
+#define PROC_INFO_CALL_PIDFDINFO        0x3
+#define PROC_INFO_CALL_KERNMSGBUF       0x4
+#define PROC_INFO_CALL_SETCONTROL       0x5
+#define PROC_INFO_CALL_PIDFILEPORTINFO  0x6
+#define PROC_INFO_CALL_TERMINATE        0x7
+#define PROC_INFO_CALL_DIRTYCONTROL     0x8
+#define PROC_INFO_CALL_PIDRUSAGE        0x9
+#define PROC_INFO_CALL_PIDORIGINATORINFO 0xa
+#define PROC_INFO_CALL_LISTCOALITIONS   0xb
+#define PROC_INFO_CALL_CANUSEFGHW       0xc
+
+#endif /* PRIVATE */
+
 #ifdef XNU_KERNEL_PRIVATE
 #ifndef pshmnode
 struct pshmnode;
 #ifdef XNU_KERNEL_PRIVATE
 #ifndef pshmnode
 struct pshmnode;
@@ -709,7 +917,15 @@ extern int fill_pshminfo(struct pshmnode * pshm, struct pshm_info * pinfo);
 extern int fill_pseminfo(struct psemnode * psem, struct psem_info * pinfo);
 extern int fill_pipeinfo(struct pipe * cpipe, struct pipe_info * pinfo);
 extern int fill_kqueueinfo(struct kqueue * kq, struct kqueue_info * kinfo);
 extern int fill_pseminfo(struct psemnode * psem, struct psem_info * pinfo);
 extern int fill_pipeinfo(struct pipe * cpipe, struct pipe_info * pinfo);
 extern int fill_kqueueinfo(struct kqueue * kq, struct kqueue_info * kinfo);
+extern int pid_kqueue_extinfo(proc_t, struct kqueue * kq, user_addr_t buffer,
+                             uint32_t buffersize, int32_t * retval);
+extern int pid_kqueue_udatainfo(proc_t p, struct kqueue *kq, uint64_t *buf,
+                               uint32_t bufsize);
 extern int fill_procworkqueue(proc_t, struct proc_workqueueinfo *);
 extern int fill_procworkqueue(proc_t, struct proc_workqueueinfo *);
+extern boolean_t workqueue_get_pwq_exceeded(void *v, boolean_t *exceeded_total,
+                                            boolean_t *exceeded_constrained);
+extern uint32_t workqueue_get_pwq_state_kdp(void *proc);
+
 #endif /* XNU_KERNEL_PRIVATE */
 
 __END_DECLS
 #endif /* XNU_KERNEL_PRIVATE */
 
 __END_DECLS