xref: /xnu-12377.61.12/bsd/sys/disk_private.h (revision 4d495c6e23c53686cf65f45067f79024cf5dcee8)
1*4d495c6eSApple OSS Distributions /*
2*4d495c6eSApple OSS Distributions  * Copyright (c) 2025 Apple Computer, Inc. All rights reserved.
3*4d495c6eSApple OSS Distributions  *
4*4d495c6eSApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*4d495c6eSApple OSS Distributions  *
6*4d495c6eSApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*4d495c6eSApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*4d495c6eSApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*4d495c6eSApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*4d495c6eSApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*4d495c6eSApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*4d495c6eSApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*4d495c6eSApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*4d495c6eSApple OSS Distributions  *
15*4d495c6eSApple OSS Distributions  * Please obtain a copy of the License at
16*4d495c6eSApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*4d495c6eSApple OSS Distributions  *
18*4d495c6eSApple OSS Distributions  * The Original Code and all software distributed under the License are
19*4d495c6eSApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*4d495c6eSApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*4d495c6eSApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*4d495c6eSApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*4d495c6eSApple OSS Distributions  * Please see the License for the specific language governing rights and
24*4d495c6eSApple OSS Distributions  * limitations under the License.
25*4d495c6eSApple OSS Distributions  *
26*4d495c6eSApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*4d495c6eSApple OSS Distributions  */
28*4d495c6eSApple OSS Distributions 
29*4d495c6eSApple OSS Distributions #ifndef _SYS_DISK_PRIVATE_H_
30*4d495c6eSApple OSS Distributions #define _SYS_DISK_PRIVATE_H_
31*4d495c6eSApple OSS Distributions 
32*4d495c6eSApple OSS Distributions #include <sys/disk.h>
33*4d495c6eSApple OSS Distributions 
34*4d495c6eSApple OSS Distributions #ifdef XNU_KERNEL_PRIVATE
35*4d495c6eSApple OSS Distributions #include <mach/boolean.h>
36*4d495c6eSApple OSS Distributions #endif /* XNU_KERNEL_PRIVATE */
37*4d495c6eSApple OSS Distributions 
38*4d495c6eSApple OSS Distributions #ifdef KERNEL
39*4d495c6eSApple OSS Distributions 
40*4d495c6eSApple OSS Distributions /* Definitions of option bits for dk_unmap_t */
41*4d495c6eSApple OSS Distributions #define _DK_UNMAP_INITIALIZE                   0x00000100
42*4d495c6eSApple OSS Distributions 
43*4d495c6eSApple OSS Distributions #ifdef XNU_KERNEL_PRIVATE
44*4d495c6eSApple OSS Distributions typedef struct{
45*4d495c6eSApple OSS Distributions 	boolean_t mi_mdev; /* Is this a memdev device? */
46*4d495c6eSApple OSS Distributions 	boolean_t mi_phys; /* Physical memory? */
47*4d495c6eSApple OSS Distributions 	uint32_t mi_base; /* Base page number of the device? */
48*4d495c6eSApple OSS Distributions 	uint64_t mi_size; /* Size of the device (in ) */
49*4d495c6eSApple OSS Distributions } dk_memdev_info_t;
50*4d495c6eSApple OSS Distributions 
51*4d495c6eSApple OSS Distributions typedef dk_memdev_info_t memdev_info_t;
52*4d495c6eSApple OSS Distributions 
53*4d495c6eSApple OSS Distributions #define DKIOCGETMEMDEVINFO                    _IOR('d', 90, dk_memdev_info_t)
54*4d495c6eSApple OSS Distributions #endif /* XNU_KERNEL_PRIVATE */
55*4d495c6eSApple OSS Distributions typedef struct _dk_cs_pin {
56*4d495c6eSApple OSS Distributions 	dk_extent_t     cp_extent;
57*4d495c6eSApple OSS Distributions 	int64_t         cp_flags;
58*4d495c6eSApple OSS Distributions } _dk_cs_pin_t;
59*4d495c6eSApple OSS Distributions /* The following are modifiers to _DKIOCCSPINEXTENT/cp_flags operation */
60*4d495c6eSApple OSS Distributions #define _DKIOCCSPINTOFASTMEDIA          (0)                     /* Pin extent to the fast (SSD) media             */
61*4d495c6eSApple OSS Distributions #define _DKIOCCSPINFORHIBERNATION       (1 << 0)        /* Pin of hibernation file, content not preserved */
62*4d495c6eSApple OSS Distributions #define _DKIOCCSPINDISCARDDENYLIST      (1 << 1)        /* Hibernation complete/error, stop denylist-ing  */
63*4d495c6eSApple OSS Distributions #define _DKIOCCSPINTOSLOWMEDIA          (1 << 2)        /* Pin extent to the slow (HDD) media             */
64*4d495c6eSApple OSS Distributions #define _DKIOCCSTEMPORARYPIN            (1 << 3)        /* Relocate, but do not pin, to indicated media   */
65*4d495c6eSApple OSS Distributions #define _DKIOCCSHIBERNATEIMGSIZE        (1 << 4)        /* Anticipate/Max size of the upcoming hibernate  */
66*4d495c6eSApple OSS Distributions #define _DKIOCCSPINFORSWAPFILE          (1 << 5)        /* Pin of swap file, content not preserved        */
67*4d495c6eSApple OSS Distributions 
68*4d495c6eSApple OSS Distributions #define _DKIOCCSSETLVNAME                     _IOW('d', 198, char[256])
69*4d495c6eSApple OSS Distributions #define _DKIOCCSPINEXTENT                     _IOW('d', 199, _dk_cs_pin_t)
70*4d495c6eSApple OSS Distributions #define _DKIOCCSUNPINEXTENT                   _IOW('d', 200, _dk_cs_pin_t)
71*4d495c6eSApple OSS Distributions #define _DKIOCGETMIGRATIONUNITBYTESIZE        _IOR('d', 201, uint32_t)
72*4d495c6eSApple OSS Distributions 
73*4d495c6eSApple OSS Distributions typedef struct _dk_cs_map {
74*4d495c6eSApple OSS Distributions 	dk_extent_t     cm_extent;
75*4d495c6eSApple OSS Distributions 	uint64_t        cm_bytes_mapped;
76*4d495c6eSApple OSS Distributions } _dk_cs_map_t;
77*4d495c6eSApple OSS Distributions 
78*4d495c6eSApple OSS Distributions typedef struct _dk_cs_unmap {
79*4d495c6eSApple OSS Distributions 	dk_extent_t                  *extents;
80*4d495c6eSApple OSS Distributions 	uint32_t                     extentsCount;
81*4d495c6eSApple OSS Distributions 	uint32_t                     options;
82*4d495c6eSApple OSS Distributions } _dk_cs_unmap_t;
83*4d495c6eSApple OSS Distributions 
84*4d495c6eSApple OSS Distributions #define _DKIOCCSMAP                           _IOWR('d', 202, _dk_cs_map_t)
85*4d495c6eSApple OSS Distributions // No longer used: _DKIOCCSSETFSVNODE (203) & _DKIOCCSGETFREEBYTES (204)
86*4d495c6eSApple OSS Distributions #define _DKIOCCSUNMAP                         _IOWR('d', 205, _dk_cs_unmap_t)
87*4d495c6eSApple OSS Distributions 
88*4d495c6eSApple OSS Distributions typedef enum {
89*4d495c6eSApple OSS Distributions 	DK_APFS_ONE_DEVICE = 1,
90*4d495c6eSApple OSS Distributions 	DK_APFS_FUSION
91*4d495c6eSApple OSS Distributions } dk_apfs_flavour_t;
92*4d495c6eSApple OSS Distributions 
93*4d495c6eSApple OSS Distributions #define DKIOCGETAPFSFLAVOUR     _IOR('d', 91, dk_apfs_flavour_t)
94*4d495c6eSApple OSS Distributions 
95*4d495c6eSApple OSS Distributions // Extent's offset and length returned in bytes
96*4d495c6eSApple OSS Distributions typedef struct dk_apfs_wbc_range {
97*4d495c6eSApple OSS Distributions 	dev_t dev;              // Physical device for extents
98*4d495c6eSApple OSS Distributions 	uint32_t count;         // Number of extents
99*4d495c6eSApple OSS Distributions 	dk_extent_t extents[2]; // Addresses are relative to device we return
100*4d495c6eSApple OSS Distributions } dk_apfs_wbc_range_t;
101*4d495c6eSApple OSS Distributions 
102*4d495c6eSApple OSS Distributions #define DKIOCAPFSGETWBCRANGE           _IOR('d', 92, dk_apfs_wbc_range_t)
103*4d495c6eSApple OSS Distributions #define DKIOCAPFSRELEASEWBCRANGE       _IO('d', 93)
104*4d495c6eSApple OSS Distributions 
105*4d495c6eSApple OSS Distributions #define DKIOCGETMAXSWAPWRITE           _IOR('d', 94, uint64_t)
106*4d495c6eSApple OSS Distributions 
107*4d495c6eSApple OSS Distributions #endif /* KERNEL */
108*4d495c6eSApple OSS Distributions 
109*4d495c6eSApple OSS Distributions #define _DKIOCSETSTATIC                       _IO('d', 84)
110*4d495c6eSApple OSS Distributions 
111*4d495c6eSApple OSS Distributions #endif  /* _SYS_DISK_PRIVATE_H_ */
112