Chameleon

Chameleon Svn Source Tree

Root/tags/2.0/i386/include/IOKit/IOMapper.h

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
39ppnum_t IOMapperIOVMAlloc(unsigned pages);
40void IOMapperIOVMFree(ppnum_t addr, unsigned pages);
41
42ppnum_t IOMapperInsertPage(ppnum_t addr, unsigned offset, ppnum_t page);
43void IOMapperInsertPPNPages(ppnum_t addr, unsigned offset,
44 ppnum_t *pageList, unsigned pageCount);
45void IOMapperInsertUPLPages(ppnum_t addr, unsigned offset,
46 upl_page_info_t *pageList, unsigned pageCount);
47
48mach_vm_address_t IOMallocPhysical(mach_vm_size_t size, mach_vm_address_t mask);
49
50void 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
59class OSData;
60class IODMACommand;
61
62extern const OSSymbol * gIOMapperIDKey;
63
64class IOMapper : public IOService
65{
66 OSDeclareAbstractStructors(IOMapper);
67
68 // Give the platform expert access to setMapperRequired();
69 friend class IOPlatformExpert;
70
71private:
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 };
78protected:
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
93public:
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
136private:
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

Archive Download this file

Revision: 1808