This is xnu-11215.1.10. See this file in:
/*
 * Copyright (c) 2015-2022 Apple, Inc. All rights reserved.
 *
 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
 *
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. The rights granted to you under the License
 * may not be used to create, or enable the creation or redistribution of,
 * unlawful or unlicensed copies of an Apple operating system, or to
 * circumvent, violate, or enable the circumvention or violation of, any
 * terms of an Apple operating system software license agreement.
 *
 * Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this file.
 *
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 *
 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
 */
#ifndef __IOSKYWALKSUPPORT_H
#define __IOSKYWALKSUPPORT_H

#ifdef KERNEL_PRIVATE
#include <sys/cdefs.h>
#include <IOKit/IOReturn.h>

#ifdef __cplusplus
class IOMemoryDescriptor;
typedef IOMemoryDescriptor *        IOSKMemoryRef;
class IOSKArena;
typedef IOSKArena *                 IOSKArenaRef;
class IOSKRegion;
typedef IOSKRegion *                IOSKRegionRef;
class IOSKMapper;
typedef IOSKMapper *                IOSKMapperRef;
#define IOSK_CONSUMED LIBKERN_CONSUMED
#else /* !__cplusplus */
typedef struct IOMemoryDescriptor * IOSKMemoryRef;
typedef struct IOSKArena *          IOSKArenaRef;
typedef struct IOSKRegion *         IOSKRegionRef;
typedef struct IOSKMapper *         IOSKMapperRef;
#define IOSK_CONSUMED
#endif /* !__cplusplus */

typedef IOSKMemoryRef   IOSKMemoryDescriptor;

#if defined(__x86_64__) && defined(__cplusplus)
const OSSymbol *  IOSKCopyKextIdentifierWithAddress( vm_address_t address );
#endif

#ifdef XNU_KERNEL_PRIVATE
#ifdef __cplusplus
class IOMemoryMap;
typedef IOMemoryMap *               IOSKMemoryMapRef;
#else /* !__cplusplus */
typedef struct IOMemoryMap *        IOSKMemoryMapRef;
#endif /* !__cplusplus */

typedef IOSKMemoryRef   IOSKMemoryArrayRef;
typedef IOSKMemoryRef   IOSKMemoryBufferRef;
typedef uint32_t        IOSKSize;
typedef uint32_t        IOSKIndex;
typedef uint32_t        IOSKCount;
typedef uint32_t        IOSKOffset;

typedef struct {
	boolean_t user_writable;        /* writable by user task */
	boolean_t kernel_writable;      /* writable by kernel task */
	boolean_t iodir_in;             /* direction: device-to-host */
	boolean_t iodir_out;            /* direction: host-to-device */
	boolean_t purgeable;            /* purgeable (not wired) */
	boolean_t inhibitCache;         /* cache-inhibit */
	boolean_t physcontig;           /* physically contiguous */
	boolean_t puredata;             /* data only, no pointers */
	boolean_t threadSafe;           /* thread safe */
} IOSKMemoryBufferSpec;

typedef struct {
	boolean_t noRedirect;
} IOSKRegionSpec;

__BEGIN_DECLS

IOSKMemoryBufferRef IOSKMemoryBufferCreate( mach_vm_size_t capacity,
    const IOSKMemoryBufferSpec * spec,
    mach_vm_address_t * kvaddr );

IOSKMemoryArrayRef  IOSKMemoryArrayCreate( const IOSKMemoryRef refs[__counted_by(count)],
    uint32_t count );

void                IOSKMemoryDestroy( IOSK_CONSUMED IOSKMemoryRef reference );

IOSKMemoryMapRef    IOSKMemoryMapToTask( IOSKMemoryRef reference,
    task_t intoTask,
    mach_vm_address_t * mapAddr,
    mach_vm_size_t * mapSize );

IOSKMemoryMapRef    IOSKMemoryMapToKernelTask( IOSKMemoryRef reference,
    mach_vm_address_t * mapAddr,
    mach_vm_size_t * mapSize );

void                IOSKMemoryMapDestroy(
	IOSK_CONSUMED IOSKMemoryMapRef reference );

IOReturn            IOSKMemoryReclaim( IOSKMemoryRef reference );
IOReturn            IOSKMemoryDiscard( IOSKMemoryRef reference );

IOReturn            IOSKMemoryWire( IOSKMemoryRef reference );
IOReturn            IOSKMemoryUnwire( IOSKMemoryRef reference );

IOSKArenaRef
IOSKArenaCreate( IOSKRegionRef * regionList, IOSKCount regionCount );

void
IOSKArenaDestroy( IOSK_CONSUMED IOSKArenaRef arena );

void
IOSKArenaRedirect( IOSKArenaRef arena );

IOSKRegionRef
IOSKRegionCreate( const IOSKRegionSpec * regionSpec,
    IOSKSize segmentSize, IOSKCount segmentCount );

void
IOSKRegionDestroy( IOSK_CONSUMED IOSKRegionRef region );

IOReturn
IOSKRegionSetBuffer( IOSKRegionRef region, IOSKIndex segmentIndex,
    IOSKMemoryBufferRef buffer );

void
IOSKRegionClearBuffer( IOSKRegionRef region, IOSKIndex segmentIndex );

void
IOSKRegionClearBufferDebug( IOSKRegionRef region, IOSKIndex segmentIndex,
    IOSKMemoryBufferRef * prevBufferRef );

IOSKMapperRef
IOSKMapperCreate( IOSKArenaRef arena, task_t task );

void
IOSKMapperDestroy( IOSK_CONSUMED IOSKMapperRef mapper );

void
IOSKMapperRedirect( IOSKMapperRef mapper );

IOReturn
IOSKMapperGetAddress( IOSKMapperRef mapper,
    mach_vm_address_t * address, mach_vm_size_t * size );

boolean_t
IOSKBufferIsWired( IOSKMemoryBufferRef buffer );

__END_DECLS
#endif /* XNU_KERNEL_PRIVATE */
#endif /* KERNEL_PRIVATE */
#endif /* __IOSKYWALKSUPPORT_H */