X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/6d2010ae8f7a6078e10b361c6962983bab233e0f..bd504ef0e0b883cdd7917b73b3574eb9ce669905:/iokit/IOKit/IOMemoryDescriptor.h diff --git a/iokit/IOKit/IOMemoryDescriptor.h b/iokit/IOKit/IOMemoryDescriptor.h index 6e6961136..a44ce6f40 100644 --- a/iokit/IOKit/IOMemoryDescriptor.h +++ b/iokit/IOKit/IOMemoryDescriptor.h @@ -38,6 +38,7 @@ class IOMemoryMap; class IOMapper; +class IOService; /* * Direction of transfer, with respect to the described memory. @@ -83,7 +84,8 @@ enum { kIOMemoryAsReference = 0x00000100, kIOMemoryBufferPageable = 0x00000400, - kIOMemoryMapperNone = 0x00000800, + kIOMemoryMapperNone = 0x00000800, // Shared with Buffer MD + kIOMemoryHostOnly = 0x00001000, // Never DMA accessible #ifdef XNU_KERNEL_PRIVATE kIOMemoryRedirected = 0x00004000, kIOMemoryPreparedReadOnly = 0x00008000, @@ -116,6 +118,26 @@ enum #define IOMEMORYDESCRIPTOR_SUPPORTS_DMACOMMAND 1 +struct IODMAMapSpecification +{ + uint64_t alignment; + IOService * device; + uint32_t options; + uint8_t numAddressBits; + uint8_t resvA[3]; + uint32_t resvB[4]; +}; + +enum +{ + kIODMAMapWriteAccess = 0x00000002, + kIODMAMapPhysicallyContiguous = 0x00000010, + kIODMAMapDeviceMemory = 0x00000020, + kIODMAMapPagingPath = 0x00000040, + kIODMAMapIdentityMap = 0x00000080, +}; + + enum { kIOPreparationIDUnprepared = 0, @@ -134,19 +156,10 @@ class IOMemoryDescriptor : public OSObject OSDeclareDefaultStructors(IOMemoryDescriptor); protected: -/*! @struct ExpansionData - @discussion This structure will be used to expand the capablilties of this class in the future. - */ - struct ExpansionData { - void * devicePager; - unsigned int pagerContig:1; - unsigned int unused:31; - IOMemoryDescriptor * memory; - }; /*! @var reserved Reserved for future use. (Internal use only) */ - ExpansionData * reserved; + struct IOMemoryDescriptorReserved * reserved; protected: OSSet * _mappings; @@ -238,6 +251,18 @@ typedef IOOptionBits DMACommandOps; #endif /* !__LP64__ */ virtual uint64_t getPreparationID( void ); + void setPreparationID( void ); + +#ifdef XNU_KERNEL_PRIVATE + IOMemoryDescriptorReserved * getKernelReserved( void ); + IOReturn dmaMap( + IOMapper * mapper, + const IODMAMapSpecification * mapSpec, + uint64_t offset, + uint64_t length, + uint64_t * address, + ppnum_t * mapPages); +#endif private: OSMetaClassDeclareReservedUsed(IOMemoryDescriptor, 0); @@ -767,6 +792,11 @@ public: IOReturn userClientUnmap(); #endif /* XNU_KERNEL_PRIVATE */ + IOReturn wireRange( + uint32_t options, + mach_vm_size_t offset, + mach_vm_size_t length); + OSMetaClassDeclareReservedUnused(IOMemoryMap, 0); OSMetaClassDeclareReservedUnused(IOMemoryMap, 1); OSMetaClassDeclareReservedUnused(IOMemoryMap, 2); @@ -834,6 +864,19 @@ public: virtual uint64_t getPreparationID( void ); +#ifdef XNU_KERNEL_PRIVATE + // Internal APIs may be made virtual at some time in the future. + IOReturn wireVirtual(IODirection forDirection); + IOReturn dmaMap( + IOMapper * mapper, + const IODMAMapSpecification * mapSpec, + uint64_t offset, + uint64_t length, + uint64_t * address, + ppnum_t * mapPages); + bool initMemoryEntries(size_t size, IOMapper * mapper); +#endif + private: #ifndef __LP64__ @@ -842,8 +885,6 @@ private: virtual void unmapFromKernel(); #endif /* !__LP64__ */ - // Internal APIs may be made virtual at some time in the future. - IOReturn wireVirtual(IODirection forDirection); void *createNamedEntry(); // Internal