X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/21362eb3e66fd2c787aee132bce100a44d71a99c..9d749ea394c01276fa19e397e70f46858e849c76:/osfmk/mach/vm_region.h

diff --git a/osfmk/mach/vm_region.h b/osfmk/mach/vm_region.h
index 3326507d5..22744725a 100644
--- a/osfmk/mach/vm_region.h
+++ b/osfmk/mach/vm_region.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2005 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2016 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -50,9 +50,12 @@
 
 #include <sys/cdefs.h>
 
-#if __DARWIN_ALIGN_POWER
-#pragma options align=power
-#endif
+#pragma pack(4)
+
+// LP64todo: all the current tools are 32bit, obviously never worked for 64b
+// so probably should be a real 32b ID vs. ptr.
+// Current users just check for equality
+typedef uint32_t vm32_object_id_t;
 
 /*
  *	Types defined:
@@ -114,8 +117,6 @@ typedef struct vm_region_basic_info		 vm_region_basic_info_data_t;
 #define VM_REGION_BASIC_INFO_COUNT ((mach_msg_type_number_t) \
 	(sizeof(vm_region_basic_info_data_t)/sizeof(int)))
 
-#define VM_REGION_EXTENDED_INFO	11
-
 #define SM_COW             1
 #define SM_PRIVATE         2
 #define SM_EMPTY           3
@@ -123,6 +124,7 @@ typedef struct vm_region_basic_info		 vm_region_basic_info_data_t;
 #define SM_TRUESHARED      5
 #define SM_PRIVATE_ALIASED 6
 #define SM_SHARED_ALIASED  7
+#define SM_LARGE_PAGE      8
 
 /* 
  * For submap info,  the SM flags above are overlayed when a submap
@@ -132,7 +134,9 @@ typedef struct vm_region_basic_info		 vm_region_basic_info_data_t;
  * back.
  */
 
-struct vm_region_extended_info {
+#ifdef MACH_KERNEL_PRIVATE
+#define VM_REGION_EXTENDED_INFO__legacy	11
+struct vm_region_extended_info__legacy {
 	vm_prot_t		protection;
         unsigned int            user_tag;
         unsigned int            pages_resident;
@@ -143,13 +147,42 @@ struct vm_region_extended_info {
         unsigned short          shadow_depth;
         unsigned char           external_pager;
         unsigned char           share_mode;
+	/*
+	 * XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
+	 *  DO NOT EXTEND THIS DATA STRUCTURE.
+	 *  IT IS NOW ABANDONED AND REPLACED WITH vm_region_extended_info BELOW.
+	 * XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
+	 */
 };
+#define VM_REGION_EXTENDED_INFO_COUNT__legacy		    \
+	((mach_msg_type_number_t)			    \
+	 (sizeof (struct vm_region_extended_info__legacy) / \
+	  sizeof (natural_t)))
+#endif /* MACH_KERNEL_PRIVATE */
 
+
+
+#define VM_REGION_EXTENDED_INFO	13
+struct vm_region_extended_info {
+	vm_prot_t		protection;
+        unsigned int            user_tag;
+        unsigned int            pages_resident;
+        unsigned int            pages_shared_now_private;
+        unsigned int            pages_swapped_out;
+        unsigned int            pages_dirtied;
+        unsigned int            ref_count;
+        unsigned short          shadow_depth;
+        unsigned char           external_pager;
+        unsigned char           share_mode;
+	unsigned int		pages_reusable;
+};
 typedef struct vm_region_extended_info		*vm_region_extended_info_t;
 typedef struct vm_region_extended_info		 vm_region_extended_info_data_t;
+#define VM_REGION_EXTENDED_INFO_COUNT			\
+	((mach_msg_type_number_t)			\
+	 (sizeof (vm_region_extended_info_data_t) / sizeof (natural_t)))
+
 
-#define VM_REGION_EXTENDED_INFO_COUNT	((mach_msg_type_number_t) \
-	(sizeof(vm_region_extended_info_data_t)/sizeof(int)))
 
 
 #define VM_REGION_TOP_INFO	12
@@ -165,8 +198,9 @@ struct vm_region_top_info {
 typedef struct vm_region_top_info		*vm_region_top_info_t;
 typedef struct vm_region_top_info		 vm_region_top_info_data_t;
 
-#define VM_REGION_TOP_INFO_COUNT ((mach_msg_type_number_t) \
-	(sizeof(vm_region_top_info_data_t)/sizeof(int)))
+#define VM_REGION_TOP_INFO_COUNT					\
+	((mach_msg_type_number_t)					\
+	 (sizeof(vm_region_top_info_data_t) / sizeof(natural_t)))
 
 
 
@@ -206,15 +240,16 @@ struct vm_region_submap_info {
         unsigned char           share_mode;	/* see enumeration */
 	boolean_t		is_submap;	/* submap vs obj */
 	vm_behavior_t		behavior;	/* access behavior hint */
-	vm_offset_t		object_id;	/* obj/map name, not a handle */
+	vm32_object_id_t	object_id;	/* obj/map name, not a handle */
 	unsigned short		user_wired_count; 
 };
 
 typedef struct vm_region_submap_info		*vm_region_submap_info_t;
 typedef struct vm_region_submap_info		 vm_region_submap_info_data_t;
 
-#define VM_REGION_SUBMAP_INFO_COUNT ((mach_msg_type_number_t) \
-	(sizeof(vm_region_submap_info_data_t)/sizeof(int)))
+#define VM_REGION_SUBMAP_INFO_COUNT					\
+	((mach_msg_type_number_t)					\
+	 (sizeof(vm_region_submap_info_data_t) / sizeof(natural_t)))
 
 struct vm_region_submap_info_64 {
 	vm_prot_t		protection;     /* present access protection */
@@ -232,15 +267,54 @@ struct vm_region_submap_info_64 {
         unsigned char           share_mode;	/* see enumeration */
 	boolean_t		is_submap;	/* submap vs obj */
 	vm_behavior_t		behavior;	/* access behavior hint */
-	vm_offset_t		object_id;	/* obj/map name, not a handle */
-	unsigned short		user_wired_count; 
+	vm32_object_id_t	object_id;	/* obj/map name, not a handle */
+	unsigned short		user_wired_count;
+	unsigned int		pages_reusable;
 };
 
 typedef struct vm_region_submap_info_64		*vm_region_submap_info_64_t;
 typedef struct vm_region_submap_info_64		 vm_region_submap_info_data_64_t;
 
-#define VM_REGION_SUBMAP_INFO_COUNT_64		((mach_msg_type_number_t) \
-	(sizeof(vm_region_submap_info_data_64_t)/sizeof(int)))
+#define VM_REGION_SUBMAP_INFO_V1_SIZE	\
+	(sizeof (vm_region_submap_info_data_64_t))
+#define VM_REGION_SUBMAP_INFO_V0_SIZE	\
+	(VM_REGION_SUBMAP_INFO_V1_SIZE - \
+	 sizeof (unsigned int) /* pages_reusable */)
+
+#define VM_REGION_SUBMAP_INFO_V1_COUNT_64 \
+	((mach_msg_type_number_t) \
+	 (VM_REGION_SUBMAP_INFO_V1_SIZE / sizeof (natural_t)))
+#define VM_REGION_SUBMAP_INFO_V0_COUNT_64 \
+	((mach_msg_type_number_t) \
+	 (VM_REGION_SUBMAP_INFO_V0_SIZE / sizeof (natural_t)))
+
+/* set this to the latest version */
+#define VM_REGION_SUBMAP_INFO_COUNT_64		VM_REGION_SUBMAP_INFO_V1_COUNT_64
+
+struct vm_region_submap_short_info_64 {
+	vm_prot_t		protection;     /* present access protection */
+	vm_prot_t		max_protection; /* max avail through vm_prot */
+	vm_inherit_t		inheritance;/* behavior of map/obj on fork */
+	memory_object_offset_t	offset;		/* offset into object/map */
+        unsigned int            user_tag;	/* user tag on map entry */
+        unsigned int            ref_count;	 /* obj/map mappers, etc */
+        unsigned short          shadow_depth; 	/* only for obj */
+        unsigned char           external_pager;  /* only for obj */
+        unsigned char           share_mode;	/* see enumeration */
+	boolean_t		is_submap;	/* submap vs obj */
+	vm_behavior_t		behavior;	/* access behavior hint */
+	vm32_object_id_t	object_id;	/* obj/map name, not a handle */
+	unsigned short		user_wired_count; 
+};
+
+typedef struct vm_region_submap_short_info_64	*vm_region_submap_short_info_64_t;
+typedef struct vm_region_submap_short_info_64	 vm_region_submap_short_info_data_64_t;
+
+#define VM_REGION_SUBMAP_SHORT_INFO_COUNT_64				\
+	((mach_msg_type_number_t)					\
+	 (sizeof (vm_region_submap_short_info_data_64_t) / sizeof (natural_t)))
+
+
 
 struct mach_vm_read_entry {
 	mach_vm_address_t address;
@@ -252,13 +326,44 @@ struct vm_read_entry {
 	vm_size_t	size;
 };
 
+#ifdef VM32_SUPPORT
+struct vm32_read_entry {
+	vm32_address_t	address;
+	vm32_size_t	size;
+};
+#endif
+
+
 #define VM_MAP_ENTRY_MAX  (256)
 
 typedef struct mach_vm_read_entry	mach_vm_read_entry_t[VM_MAP_ENTRY_MAX];
 typedef struct vm_read_entry		vm_read_entry_t[VM_MAP_ENTRY_MAX];
-
-#if __DARWIN_ALIGN_POWER
-#pragma options align=reset
+#ifdef VM32_SUPPORT
+typedef struct vm32_read_entry		vm32_read_entry_t[VM_MAP_ENTRY_MAX];
 #endif
 
+#pragma pack()
+
+
+#define VM_PAGE_INFO_MAX 
+typedef int *vm_page_info_t;
+typedef int vm_page_info_data_t[VM_PAGE_INFO_MAX];
+typedef int vm_page_info_flavor_t;
+
+#define VM_PAGE_INFO_BASIC		1
+struct vm_page_info_basic {
+	int			disposition;
+	int			ref_count;
+	vm_object_id_t		object_id;
+	memory_object_offset_t	offset;
+	int			depth;
+	int			__pad; /* pad to 64-bit boundary */
+};
+typedef struct vm_page_info_basic		*vm_page_info_basic_t;
+typedef struct vm_page_info_basic		vm_page_info_basic_data_t;
+
+#define VM_PAGE_INFO_BASIC_COUNT	((mach_msg_type_number_t) \
+	(sizeof(vm_page_info_basic_data_t)/sizeof(int)))
+
+
 #endif	/*_MACH_VM_REGION_H_*/