Root/
Source at commit 1808 created 12 years 4 months ago. By blackosx, Revise layout of package installer 'Welcome' file so it looks cleaner. Change the copyright notice to begin from 2009 as seen in the Chameleon 2.0 r431 installer. Should this date be set earlier? | |
---|---|
1 | /*␊ |
2 | * Copyright (c) 1998-2003 Apple Computer, Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_OSREFERENCE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * This file contains Original Code and/or Modifications of Original Code␊ |
7 | * as defined in and that are subject to the Apple Public Source License␊ |
8 | * Version 2.0 (the 'License'). You may not use this file except in␊ |
9 | * compliance with the License. The rights granted to you under the License␊ |
10 | * may not be used to create, or enable the creation or redistribution of,␊ |
11 | * unlawful or unlicensed copies of an Apple operating system, or to␊ |
12 | * circumvent, violate, or enable the circumvention or violation of, any␊ |
13 | * terms of an Apple operating system software license agreement.␊ |
14 | * ␊ |
15 | * Please obtain a copy of the License at␊ |
16 | * http://www.opensource.apple.com/apsl/ and read it before using this file.␊ |
17 | * ␊ |
18 | * The Original Code and all software distributed under the License are␊ |
19 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
22 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.␊ |
23 | * Please see the License for the specific language governing rights and␊ |
24 | * limitations under the License.␊ |
25 | * ␊ |
26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@␊ |
27 | */␊ |
28 | ␊ |
29 | #ifndef __IOKIT_IOMAPPER_H␊ |
30 | #define __IOKIT_IOMAPPER_H␊ |
31 | ␊ |
32 | #include <sys/cdefs.h>␊ |
33 | ␊ |
34 | __BEGIN_DECLS␊ |
35 | #include <IOKit/IOTypes.h>␊ |
36 | #include <mach/vm_types.h>␊ |
37 | ␊ |
38 | // These are C accessors to the system mapper for non-IOKit clients␊ |
39 | ppnum_t IOMapperIOVMAlloc(unsigned pages);␊ |
40 | void IOMapperIOVMFree(ppnum_t addr, unsigned pages);␊ |
41 | ␊ |
42 | ppnum_t IOMapperInsertPage(ppnum_t addr, unsigned offset, ppnum_t page);␊ |
43 | void IOMapperInsertPPNPages(ppnum_t addr, unsigned offset,␊ |
44 | ppnum_t *pageList, unsigned pageCount);␊ |
45 | void IOMapperInsertUPLPages(ppnum_t addr, unsigned offset,␊ |
46 | upl_page_info_t *pageList, unsigned pageCount);␊ |
47 | ␊ |
48 | mach_vm_address_t IOMallocPhysical(mach_vm_size_t size, mach_vm_address_t mask);␊ |
49 | ␊ |
50 | void IOFreePhysical(mach_vm_address_t address, mach_vm_size_t size);␊ |
51 | ␊ |
52 | __END_DECLS␊ |
53 | ␊ |
54 | #if __cplusplus␊ |
55 | ␊ |
56 | #include <IOKit/IOService.h>␊ |
57 | #include <IOKit/IOMemoryDescriptor.h>␊ |
58 | ␊ |
59 | class OSData;␊ |
60 | class IODMACommand;␊ |
61 | ␊ |
62 | extern const OSSymbol * gIOMapperIDKey;␊ |
63 | ␊ |
64 | class IOMapper : public IOService␊ |
65 | {␊ |
66 | OSDeclareAbstractStructors(IOMapper);␊ |
67 | ␊ |
68 | // Give the platform expert access to setMapperRequired();␊ |
69 | friend class IOPlatformExpert;␊ |
70 | ␊ |
71 | private:␊ |
72 | enum SystemMapperState {␊ |
73 | kNoMapper = 0,␊ |
74 | kUnknown = 1,␊ |
75 | kHasMapper = 2,␉// Any other value is pointer to a live mapper␊ |
76 | kWaitMask = 3,␊ |
77 | };␊ |
78 | protected:␊ |
79 | void *fTable;␊ |
80 | ppnum_t fTablePhys;␊ |
81 | IOItemCount fTableSize;␊ |
82 | OSData *fTableHandle;␊ |
83 | bool fIsSystem;␊ |
84 | ␊ |
85 | ␊ |
86 | static void setMapperRequired(bool hasMapper);␊ |
87 | static void waitForSystemMapper();␊ |
88 | ␊ |
89 | virtual bool initHardware(IOService *provider) = 0;␊ |
90 | ␊ |
91 | virtual bool allocTable(IOByteCount size);␊ |
92 | ␊ |
93 | public:␊ |
94 | virtual bool start(IOService *provider);␊ |
95 | virtual void free();␊ |
96 | ␊ |
97 | // Static routines capable of allocating tables that are physically␊ |
98 | // contiguous in real memory space.␊ |
99 | static OSData * NewARTTable(IOByteCount size,␊ |
100 | void ** virtAddrP, ppnum_t *physAddrP);␊ |
101 | static void FreeARTTable(OSData *handle, IOByteCount size);␊ |
102 | ␊ |
103 | ␊ |
104 | // To get access to the system mapper IOMapper::gSystem ␊ |
105 | static IOMapper *gSystem;␊ |
106 | ␊ |
107 | virtual ppnum_t iovmAlloc(IOItemCount pages) = 0;␊ |
108 | virtual void iovmFree(ppnum_t addr, IOItemCount pages) = 0;␊ |
109 | ␊ |
110 | virtual void iovmInsert(ppnum_t addr, IOItemCount offset, ppnum_t page) = 0;␊ |
111 | virtual void iovmInsert(ppnum_t addr, IOItemCount offset,␊ |
112 | ppnum_t *pageList, IOItemCount pageCount);␊ |
113 | virtual void iovmInsert(ppnum_t addr, IOItemCount offset,␊ |
114 | upl_page_info_t *pageList, IOItemCount pageCount);␊ |
115 | ␊ |
116 | static void checkForSystemMapper()␊ |
117 | { if ((uintptr_t) gSystem & kWaitMask) waitForSystemMapper(); };␊ |
118 | ␊ |
119 | static IOMapper * copyMapperForDevice(IOService * device);␊ |
120 | ␊ |
121 | ␉␊ |
122 | // Function will panic if the given address is not found in a valid␊ |
123 | // iovm mapping.␊ |
124 | virtual addr64_t mapAddr(IOPhysicalAddress addr) = 0;␊ |
125 | ␊ |
126 | // Get the address mask to or into an address to bypass this mapper␊ |
127 | virtual bool getBypassMask(addr64_t *maskP) const;␊ |
128 | ␊ |
129 | virtual ppnum_t iovmAllocDMACommand(IODMACommand * command, IOItemCount pageCount);␊ |
130 | virtual void iovmFreeDMACommand(IODMACommand * command, ppnum_t addr, IOItemCount pageCount);␊ |
131 | ␊ |
132 | OSMetaClassDeclareReservedUsed(IOMapper, 0);␊ |
133 | OSMetaClassDeclareReservedUsed(IOMapper, 1);␊ |
134 | OSMetaClassDeclareReservedUsed(IOMapper, 2);␊ |
135 | ␊ |
136 | private:␊ |
137 | OSMetaClassDeclareReservedUnused(IOMapper, 3);␊ |
138 | OSMetaClassDeclareReservedUnused(IOMapper, 4);␊ |
139 | OSMetaClassDeclareReservedUnused(IOMapper, 5);␊ |
140 | OSMetaClassDeclareReservedUnused(IOMapper, 6);␊ |
141 | OSMetaClassDeclareReservedUnused(IOMapper, 7);␊ |
142 | OSMetaClassDeclareReservedUnused(IOMapper, 8);␊ |
143 | OSMetaClassDeclareReservedUnused(IOMapper, 9);␊ |
144 | OSMetaClassDeclareReservedUnused(IOMapper, 10);␊ |
145 | OSMetaClassDeclareReservedUnused(IOMapper, 11);␊ |
146 | OSMetaClassDeclareReservedUnused(IOMapper, 12);␊ |
147 | OSMetaClassDeclareReservedUnused(IOMapper, 13);␊ |
148 | OSMetaClassDeclareReservedUnused(IOMapper, 14);␊ |
149 | OSMetaClassDeclareReservedUnused(IOMapper, 15);␊ |
150 | };␊ |
151 | ␊ |
152 | #endif /* __cplusplus */␊ |
153 | ␊ |
154 | #endif /* !__IOKIT_IOMAPPER_H */␊ |
155 |