IOKitKernelInternal.h [plain text]
#ifndef _IOKIT_KERNELINTERNAL_H
#define _IOKIT_KERNELINTERNAL_H
#include <sys/cdefs.h>
__BEGIN_DECLS
#include <vm/vm_pageout.h>
#include <mach/memory_object_types.h>
#include <device/device_port.h>
#if (KDEBUG_LEVEL >= KDEBUG_LEVEL_STANDARD)
#define IOServiceTrace(csc, a, b, c, d) do { \
if(kIOTraceIOService & gIOKitDebug) { \
KERNEL_DEBUG_CONSTANT(IODBG_IOSERVICE(csc), a, b, c, d, 0); \
} \
} while(0)
#else
#define IOServiceTrace(csc, a, b, c, d) do { \
(void)a; \
(void)b; \
(void)c; \
(void)d; \
} while (0)
#endif
typedef kern_return_t (*IOIteratePageableMapsCallback)(vm_map_t map, void * ref);
void IOLibInit(void);
kern_return_t IOIteratePageableMaps(vm_size_t size,
IOIteratePageableMapsCallback callback, void * ref);
vm_map_t IOPageableMapForAddress(uintptr_t address);
kern_return_t
IOMemoryDescriptorMapMemEntry(vm_map_t * map, ipc_port_t entry, IOOptionBits options, bool pageable,
mach_vm_size_t offset, mach_vm_address_t * address, mach_vm_size_t length);
kern_return_t
IOMemoryDescriptorMapCopy(vm_map_t * map,
IOOptionBits options,
mach_vm_size_t offset,
mach_vm_address_t * address, mach_vm_size_t length);
mach_vm_address_t
IOKernelAllocateWithPhysicalRestrict(mach_vm_size_t size, mach_vm_address_t maxPhys,
mach_vm_size_t alignment, bool contiguous);
void
IOKernelFreePhysical(mach_vm_address_t address, mach_vm_size_t size);
extern vm_size_t debug_iomallocpageable_size;
extern kern_return_t IOMapPages(vm_map_t map, mach_vm_address_t va, mach_vm_address_t pa,
mach_vm_size_t length, unsigned int mapFlags);
extern kern_return_t IOUnmapPages(vm_map_t map, mach_vm_address_t va, mach_vm_size_t length);
extern kern_return_t IOProtectCacheMode(vm_map_t map, mach_vm_address_t va,
mach_vm_size_t length, unsigned int mapFlags);
extern ppnum_t IOGetLastPageNumber(void);
extern ppnum_t gIOLastPage;
extern IOSimpleLock * gIOPageAllocLock;
extern queue_head_t gIOPageAllocList;
extern void bcopy_phys(addr64_t from, addr64_t to, vm_size_t size);
__END_DECLS
enum {
kIOMDWalkSegments = 0x01000000,
kIOMDFirstSegment = 1 | kIOMDWalkSegments,
kIOMDGetCharacteristics = 0x02000000,
kIOMDGetCharacteristicsMapped = 1 | kIOMDGetCharacteristics,
kIOMDDMAActive = 0x03000000,
kIOMDSetDMAActive = 1 | kIOMDDMAActive,
kIOMDSetDMAInactive = kIOMDDMAActive,
kIOMDAddDMAMapSpec = 0x04000000,
kIOMDDMAMap = 0x05000000,
kIOMDDMACommandOperationMask = 0xFF000000,
};
struct IOMDDMACharacteristics {
UInt64 fLength;
UInt32 fSGCount;
UInt32 fPages;
UInt32 fPageAlign;
ppnum_t fHighestPage;
IODirection fDirection;
UInt8 fIsPrepared;
};
struct IOMDDMAWalkSegmentArgs {
UInt64 fOffset; UInt64 fIOVMAddr, fLength; UInt8 fMapped; };
typedef UInt8 IOMDDMAWalkSegmentState[128];
struct IOMDDMAMapArgs {
IOMapper * fMapper;
IODMAMapSpecification fMapSpec;
uint64_t fOffset;
uint64_t fLength;
uint64_t fAlloc;
ppnum_t fAllocCount;
};
struct IODMACommandInternal
{
IOMDDMAWalkSegmentState fState;
IOMDDMACharacteristics fMDSummary;
UInt64 fPreparedOffset;
UInt64 fPreparedLength;
UInt32 fSourceAlignMask;
UInt8 fCursor;
UInt8 fCheckAddressing;
UInt8 fIterateOnly;
UInt8 fMisaligned;
UInt8 fMapContig;
UInt8 fPrepared;
UInt8 fDoubleBuffer;
UInt8 fNewMD;
UInt8 fLocalMapper;
vm_page_t fCopyPageAlloc;
vm_page_t fCopyNext;
vm_page_t fNextRemapPage;
ppnum_t fCopyPageCount;
addr64_t fLocalMapperPageAlloc;
ppnum_t fLocalMapperPageCount;
class IOBufferMemoryDescriptor * fCopyMD;
IOService * fDevice;
IOReturn fStatus;
UInt64 fActualByteCount;
};
struct IOMemoryDescriptorDevicePager {
void * devicePager;
unsigned int pagerContig:1;
unsigned int unused:31;
IOMemoryDescriptor * memory;
};
struct IOMemoryDescriptorReserved {
IOMemoryDescriptorDevicePager dp;
uint64_t preparationID;
uint64_t kernReserved[4];
};
extern "C" struct timeval gIOLastSleepTime;
extern "C" struct timeval gIOLastWakeTime;
extern clock_sec_t gIOConsoleLockTime;
extern "C" void IOKitResetTime( void );
extern "C" void IOKitInitializeTime( void );
extern "C" OSString * IOCopyLogNameForPID(int pid);
#if defined(__i386__) || defined(__x86_64__)
extern "C" void IOSetKeyStoreData(IOMemoryDescriptor * data);
#endif
void IOScreenLockTimeUpdate(clock_sec_t secs);
#endif