Chameleon

Chameleon Svn Source Tree

Root/branches/rewrite/i386/include/IOKit/ppc/IODBDMA.h

Source at commit 1146 created 12 years 11 months ago.
By azimutz, Sync with trunk (r1145). Add nVidia dev id's, 0DF4 for "GeForce GT 450M" (issue 99) and 1251 for "GeForce GTX 560M" (thanks to oSxFr33k for testing).
1/*
2 * Copyright (c) 1998-2000 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 * Copyright (c) 1997 Apple Computer, Inc.
30 *
31 *
32 * HISTORY
33 *
34 * Simon Douglas 10 Nov 97
35 * - first checked in, mostly from MacOS DBDMA.i, machdep/ppc/dbdma.h
36 *but use byte reverse ops.
37 */
38
39#ifndef _IODBDMA_H_
40#define _IODBDMA_H_
41
42#include <IOKit/IOTypes.h>
43#include <libkern/OSByteOrder.h>
44
45
46/* DBDMA definitions */
47
48struct IODBDMAChannelRegisters {
49 volatile unsigned long channelControl;
50 volatile unsigned long channelStatus;
51 volatile unsigned long commandPtrHi;/* implementation optional*/
52 volatile unsigned long commandPtrLo;
53 volatile unsigned long interruptSelect;/* implementation optional*/
54 volatile unsigned long branchSelect;/* implementation optional*/
55 volatile unsigned long waitSelect;/* implementation optional*/
56 volatile unsigned long transferModes;/* implementation optional*/
57 volatile unsigned long data2PtrHi;/* implementation optional*/
58 volatile unsigned long data2PtrLo;/* implementation optional*/
59
60 volatile unsigned long reserved1;
61 volatile unsigned long addressHi;/* implementation optional*/
62 volatile unsigned long reserved2[4];
63 volatile unsigned long unimplemented[16];
64
65/* This structure must remain fully padded to 256 bytes.*/
66 volatile unsigned long undefined[32];
67};
68typedef struct IODBDMAChannelRegisters IODBDMAChannelRegisters;
69
70/* These constants define the DB-DMA channel control words and status flags.*/
71
72enum {
73kdbdmaRun= 0x00008000,
74kdbdmaPause= 0x00004000,
75kdbdmaFlush= 0x00002000,
76kdbdmaWake= 0x00001000,
77kdbdmaDead= 0x00000800,
78kdbdmaActive= 0x00000400,
79kdbdmaBt= 0x00000100,
80kdbdmaS7= 0x00000080,
81kdbdmaS6= 0x00000040,
82kdbdmaS5= 0x00000020,
83kdbdmaS4= 0x00000010,
84kdbdmaS3= 0x00000008,
85kdbdmaS2= 0x00000004,
86kdbdmaS1= 0x00000002,
87kdbdmaS0= 0x00000001
88};
89
90
91#defineIOSetDBDMAChannelControlBits(mask)( ((mask) | (mask) << 16) )
92#defineIOClearDBDMAChannelControlBits(mask)( (mask) << 16)
93
94
95/* This structure defines the DB-DMA channel command descriptor.*/
96
97/*
98 *** WARNING:Endian-ness issues must be considered when performing load/store! ***
99*/
100
101struct IODBDMADescriptor {
102unsigned long operation; /* cmd || key || i || b || w || reqCount*/
103unsigned long address;
104volatile unsigned long cmdDep;
105volatile unsigned long result; /* xferStatus || resCount*/
106};
107typedef struct IODBDMADescriptor IODBDMADescriptor;
108
109/* These constants define the DB-DMA channel command operations and modifiers.*/
110
111
112enum {
113/* Command.cmd operations*/
114kdbdmaOutputMore= 0,
115kdbdmaOutputLast= 1,
116kdbdmaInputMore= 2,
117kdbdmaInputLast= 3,
118kdbdmaStoreQuad= 4,
119kdbdmaLoadQuad= 5,
120kdbdmaNop= 6,
121kdbdmaStop= 7
122};
123
124
125enum {
126/* Command.key modifiers (choose one for INPUT, OUTPUT, LOAD, and STORE)*/
127kdbdmaKeyStream0= 0,/* default modifier*/
128kdbdmaKeyStream1= 1,
129kdbdmaKeyStream2= 2,
130kdbdmaKeyStream3= 3,
131kdbdmaKeyRegs= 5,
132kdbdmaKeySystem= 6,
133kdbdmaKeyDevice= 7,
134
135kdbdmaIntNever= 0,/* default modifier*/
136kdbdmaIntIfTrue= 1,
137kdbdmaIntIfFalse= 2,
138kdbdmaIntAlways= 3,
139
140kdbdmaBranchNever= 0,/* default modifier*/
141kdbdmaBranchIfTrue= 1,
142kdbdmaBranchIfFalse= 2,
143kdbdmaBranchAlways= 3,
144
145kdbdmaWaitNever= 0,/* default modifier*/
146kdbdmaWaitIfTrue= 1,
147kdbdmaWaitIfFalse= 2,
148kdbdmaWaitAlways= 3,
149
150kdbdmaCommandMask= (long)0xFFFF0000,
151kdbdmaReqCountMask= 0x0000FFFF
152};
153
154
155/* These constants define the DB-DMA channel command results.*/
156
157enum {
158/* result masks*/
159kdbdmaStatusRun= kdbdmaRun << 16,
160kdbdmaStatusPause= kdbdmaPause << 16,
161kdbdmaStatusFlush= kdbdmaFlush << 16,
162kdbdmaStatusWake= kdbdmaWake << 16,
163kdbdmaStatusDead= kdbdmaDead << 16,
164kdbdmaStatusActive= kdbdmaActive << 16,
165kdbdmaStatusBt= kdbdmaBt << 16,
166kdbdmaStatusS7= kdbdmaS7 << 16,
167kdbdmaStatusS6= kdbdmaS6 << 16,
168kdbdmaStatusS5= kdbdmaS5 << 16,
169kdbdmaStatusS4= kdbdmaS4 << 16,
170kdbdmaStatusS3= kdbdmaS3 << 16,
171kdbdmaStatusS2= kdbdmaS2 << 16,
172kdbdmaStatusS1= kdbdmaS1 << 16,
173kdbdmaStatusS0= kdbdmaS0 << 16,
174kdbdmaResCountMask= 0x0000FFFF,
175kdbdmaXferStatusMask= 0xFFFF0000
176};
177
178
179/* These macros are are IODBDMAChannelRegisters accessor functions. */
180
181#define IOSetDBDMAChannelRegister(registerSetPtr,field,value)\
182OSWriteSwapInt32(registerSetPtr,offsetof(IODBDMAChannelRegisters,field),value)
183
184#define IOGetDBDMAChannelRegister(registerSetPtr, field)\
185OSReadSwapInt32(registerSetPtr,offsetof(IODBDMAChannelRegisters, field))
186
187
188/* void IOSetDBDMAChannelControl (IODBDMAChannelRegisters *registerSetPtr, unsigned long ctlValue); */
189
190#define IOSetDBDMAChannelControl(registerSetPtr,ctlValue)\
191do {\
192 eieio();\
193 IOSetDBDMAChannelRegister(registerSetPtr,channelControl,ctlValue);\
194 eieio();\
195} while(0)
196
197/* unsigned long IOGetDBDMAChannelStatus (IODBDMAChannelRegisters *registerSetPtr); */
198
199#define IOGetDBDMAChannelStatus(registerSetPtr)\
200IOGetDBDMAChannelRegister(registerSetPtr,channelStatus)
201
202/* unsigned long IOGetDBDMACommandPtr (IODBDMAChannelRegisters *registerSetPtr); */
203
204#define IOGetDBDMACommandPtr(registerSetPtr)\
205IOGetDBDMAChannelRegister(registerSetPtr,commandPtrLo)
206
207/* void IOSetDBDMACommandPtr (IODBDMAChannelRegisters *registerSetPtr, unsigned long cclPtr); */
208
209#define IOSetDBDMACommandPtr(registerSetPtr,cclPtr)\
210do {\
211 IOSetDBDMAChannelRegister(registerSetPtr,commandPtrHi,0);\
212 eieio();\
213 IOSetDBDMAChannelRegister(registerSetPtr,commandPtrLo,cclPtr);\
214 eieio();\
215} while(0)
216
217
218/* unsigned long IOGetDBDMAInterruptSelect (IODBDMAChannelRegisters *registerSetPtr); */
219
220#define IOGetDBDMAInterruptSelect(registerSetPtr)\
221 IOGetDBDMAChannelRegister(registerSetPtr,interruptSelect)
222
223/* void IOSetDBDMAInterruptSelect (IODBDMAChannelRegisters *registerSetPtr, unsigned long intSelValue); */
224
225#define IOSetDBDMAInterruptSelect(registerSetPtr,intSelValue) \
226do { \
227 IOSetDBDMAChannelRegister(registerSetPtr,interruptSelect,intSelValue); \
228 eieio(); \
229} while(0)
230
231/* unsigned long IOGetDBDMABranchSelect (IODBDMAChannelRegisters *registerSetPtr); */
232
233#define IOGetDBDMABranchSelect(registerSetPtr)\
234IOGetDBDMAChannelRegister(registerSetPtr,branchSelect)
235
236/* void IOSetDBDMABranchSelect (IODBDMAChannelRegisters *registerSetPtr, unsigned long braSelValue); */
237
238#define IOSetDBDMABranchSelect(registerSetPtr,braSelValue)\
239do {\
240 IOSetDBDMAChannelRegister(registerSetPtr,branchSelect,braSelValue);\
241 eieio();\
242} while(0)
243
244/* unsigned long IOGetDBDMAWaitSelect (IODBDMAChannelRegisters *registerSetPtr); */
245
246#define IOGetDBDMAWaitSelect(registerSetPtr)\
247IOGetDBDMAChannelRegister(registerSetPtr,waitSelect)
248
249/* void IOSetDBDMAWaitSelect (IODBDMAChannelRegisters *registerSetPtr, unsigned long waitSelValue); */
250
251#define IOSetDBDMAWaitSelect(registerSetPtr,waitSelValue)\
252do {\
253 IOSetDBDMAChannelRegister(registerSetPtr,waitSelect,waitSelValue);\
254 eieio();\
255} while(0)
256
257
258/* These macros are IODBDMADescriptor accessor functions. */
259
260#define IOSetDBDMADescriptor(descPtr,field,value)\
261OSWriteSwapInt32( descPtr, offsetof( IODBDMADescriptor, field), value)
262
263#define IOGetDBDMADescriptor(descPtr,field)\
264OSReadSwapInt32( descPtr, offsetof( IODBDMADescriptor, field))
265
266#defineIOMakeDBDMAOperation(cmd,key,interrupt,branch,wait,count)\
267 ( ((cmd) << 28) | ((key) << 24) | ((interrupt) << 20)\
268 | ((branch) << 18) | ( (wait) << 16) | (count) )
269
270/* void IOMakeDBDMADescriptor (IODBDMADescriptor *descPtr,
271unsigned long cmd,
272unsigned long key,
273unsigned long interrupt,
274unsigned long branch,
275unsigned long wait,
276unsigned long count,
277unsigned long addr); */
278
279#define IOMakeDBDMADescriptor(descPtr,cmd,key,interrupt,branch,wait,count,addr)\
280do { \
281 IOSetDBDMADescriptor(descPtr, address, addr); \
282 IOSetDBDMADescriptor(descPtr, cmdDep, 0); \
283 IOSetDBDMADescriptor(descPtr, result, 0); \
284 eieio(); \
285 IOSetDBDMADescriptor(descPtr, operation, \
286 IOMakeDBDMAOperation(cmd,key,interrupt,branch,wait,count)); \
287 eieio(); \
288} while(0)
289
290/* void IOMakeDBDMADescriptorDep (IODBDMADescriptor *descPtr,
291unsigned long cmd,
292unsigned long key,
293unsigned long interrupt,
294unsigned long branch,
295unsigned long wait,
296unsigned long count,
297unsigned long addr,
298unsigned long dep); */
299
300#define IOMakeDBDMADescriptorDep(descPtr,cmd,key,interrupt,branch,wait,count,addr,dep) \
301do { \
302 IOSetDBDMADescriptor(descPtr, address, addr); \
303 IOSetDBDMADescriptor(descPtr, cmdDep, dep); \
304 IOSetDBDMADescriptor(descPtr, result, 0); \
305 eieio(); \
306 IOSetDBDMADescriptor(descPtr, operation, \
307 IOMakeDBDMAOperation(cmd, key, interrupt, branch, wait, count)); \
308 eieio(); \
309} while(0)
310
311/*Field accessors - NOTE: unsynchronized */
312
313/* unsigned long IOGetDBDMAOperation (IODBDMADescriptor *descPtr) */
314
315#define IOGetCCOperation(descPtr)\
316IOGetDBDMADescriptor(descPtr,operation)
317
318/* void IOSetCCOperation (IODBDMADescriptor *descPtr, unsigned long operationValue) */
319
320#define IOSetCCOperation(descPtr,operationValue)\
321IOSetDBDMADescriptor(descPtr,operation,operationValue)
322
323/* unsigned long IOGetCCAddress (IODBDMADescriptor *descPtr) */
324
325#define IOGetCCAddress(descPtr)\
326IOGetDBDMADescriptor(descPtr,address)
327
328/* void IOSetCCAddress (IODBDMADescriptor *descPtr, unsigned long addressValue) */
329
330#define IOSetCCAddress(descPtr,addressValue)\
331IOSetDBDMADescriptor(descPtr,address, addressValue)
332
333/* unsigned long IOGetCCCmdDep (IODBDMADescriptor *descPtr) */
334
335#define IOGetCCCmdDep(descPtr)\
336IOGetDBDMADescriptor(descPtr,cmdDep)
337
338/* void IOSetCCCmdDep (IODBDMADescriptor *descPtr, unsigned long cmdDepValue) */
339
340#define IOSetCCCmdDep(descPtr,cmdDepValue)\
341IOSetDBDMADescriptor(descPtr,cmdDep,cmdDepValue)
342
343/* unsigned long IOGetCCResult (IODBDMADescriptor *descPtr) */
344
345#define IOGetCCResult(descPtr)\
346IOGetDBDMADescriptor(descPtr,result)
347
348/* void IOSetCCResult (IODBDMADescriptor *descPtr, unsigned long resultValue) */
349
350#define IOSetCCResult(descPtr,resultValue)\
351IOSetDBDMADescriptor(descPtr,result,resultValue)
352
353
354/* DBDMA routines */
355
356extern voidIODBDMAStart( volatile IODBDMAChannelRegisters *registerSetPtr, volatile IODBDMADescriptor *physicalDescPtr);
357extern voidIODBDMAStop( volatile IODBDMAChannelRegisters *registerSetPtr);
358extern voidIODBDMAFlush( volatile IODBDMAChannelRegisters *registerSetPtr);
359extern voidIODBDMAReset( volatile IODBDMAChannelRegisters *registerSetPtr);
360extern voidIODBDMAContinue( volatile IODBDMAChannelRegisters *registerSetPtr);
361extern voidIODBDMAPause( volatile IODBDMAChannelRegisters *registerSetPtr);
362
363extern IOReturnIOAllocatePhysicallyContiguousMemory( unsigned int size, unsigned int options,
364 IOVirtualAddress * logical, IOPhysicalAddress * physical );
365extern IOReturn IOFreePhysicallyContiguousMemory( IOVirtualAddress * logical, unsigned int size);
366
367#endif /* !defined(_IODBDMA_H_) */
368

Archive Download this file

Revision: 1146