2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
20 * @APPLE_LICENSE_HEADER_END@
23 * Copyright (c) 1997-1998 Apple Computer, Inc.
28 * sdouglas 22 Oct 97 - first checked in.
29 * sdouglas 24 Jul 98 - start IOKit.
30 * sdouglas 15 Dec 98 - cpp.
34 #ifndef _IOKIT_IONDRVFRAMEBUFFER_H
35 #define _IOKIT_IONDRVFRAMEBUFFER_H
37 #include <IOKit/graphics/IOFramebuffer.h>
38 #include <IOKit/ndrvsupport/IOMacOSVideo.h>
39 #include <IOKit/ndrvsupport/IONDRVSupport.h>
42 #define kIONDRVDisableKey "AAPL,disable-ndrv"
45 class IONDRVFramebuffer
: public IOFramebuffer
47 OSDeclareDefaultStructors(IONDRVFramebuffer
)
50 /*! @struct ExpansionData
51 @discussion This structure will be used to expand the capablilties of this class in the future.
53 struct ExpansionData
{ };
56 Reserved for future use. (Internal use only) */
57 ExpansionData
* reserved
;
64 // current configuration
65 IODisplayModeID currentDisplayMode
;
70 IOPhysicalAddress physicalFramebuffer
;
71 IODeviceMemory
* vramRange
;
76 VDClutBehavior lastClutSetting
;
77 UInt8 platformDeepSleep
;
83 OSArray
* detailedTimings
;
84 UInt32 detailedTimingsSeed
;
85 UInt32
* detailedTimingsCurrent
;
87 IODeviceMemory
* vramMemory
;
89 VDResolutionInfoRec cachedVDResolution
;
91 struct _VSLService
* vslServices
;
94 UInt8 shouldDoI2CPower
;
97 UInt32 __reservedA
[31];
100 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 0);
101 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 1);
102 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 2);
103 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 3);
104 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 4);
105 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 5);
106 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 6);
107 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 7);
108 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 8);
109 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 9);
110 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 10);
111 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 11);
112 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 12);
113 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 13);
114 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 14);
115 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 15);
116 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 16);
117 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 17);
118 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 18);
119 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 19);
120 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 20);
121 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 21);
122 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 22);
123 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 23);
124 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 24);
125 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 25);
126 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 26);
127 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 27);
128 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 28);
129 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 29);
130 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 30);
131 OSMetaClassDeclareReservedUnused(IONDRVFramebuffer
, 31);
135 void initForPM ( void );
136 IOReturn
setPowerState( unsigned long, IOService
* );
137 unsigned long maxCapabilityForDomainState( IOPMPowerFlags
);
138 unsigned long initialPowerStateForDomainState( IOPMPowerFlags
);
139 unsigned long powerStateForDomainState( IOPMPowerFlags
);
141 virtual IOReturn
checkDriver( void );
142 virtual UInt32
iterateAllModes( IODisplayModeID
* displayModeIDs
);
143 virtual IOReturn
getResInfoForMode( IODisplayModeID modeID
,
144 IODisplayModeInformation
* theInfo
);
145 virtual IOReturn
getResInfoForArbMode( IODisplayModeID modeID
,
146 IODisplayModeInformation
* theInfo
);
147 virtual IOReturn
validateDisplayMode(
148 IODisplayModeID mode
, IOOptionBits flags
,
149 VDDetailedTimingRec
** detailed
);
150 virtual IOReturn
setDetailedTiming(
151 IODisplayModeID mode
, IOOptionBits options
,
152 void * description
, IOByteCount descripSize
);
153 virtual void getCurrentConfiguration( void );
154 static const IOTVector
* _undefinedSymbolHandler( void * self
,
155 const char * libraryName
, const char * symbolName
);
156 void displayI2CPower( bool enable
);
157 static bool _videoJackStateChangeHandler( void * target
, void * ref
,
158 IOService
* resourceService
);
161 virtual IOReturn
doControl( UInt32 code
, void * params
);
162 virtual IOReturn
doStatus( UInt32 code
, void * params
);
166 virtual IOService
* probe( IOService
* provider
,
169 virtual bool start( IOService
* provider
);
171 virtual void free( void );
173 virtual IOReturn
setProperties( OSObject
* properties
);
175 virtual IOReturn
enableController( void );
177 virtual IODeviceMemory
* makeSubRange( IOPhysicalAddress start
,
178 IOPhysicalLength length
);
179 virtual IODeviceMemory
* getApertureRange( IOPixelAperture aperture
);
180 virtual IODeviceMemory
* getVRAMRange( void );
182 virtual IODeviceMemory
* findVRAM( void );
184 virtual bool isConsoleDevice( void );
186 virtual const IOTVector
* undefinedSymbolHandler( const char * libraryName
,
187 const char * symbolName
);
189 virtual const char * getPixelFormats( void );
191 // Array of supported display modes
192 virtual IOItemCount
getDisplayModeCount( void );
193 virtual IOReturn
getDisplayModes( IODisplayModeID
* allDisplayModes
);
195 // Info about a display mode
196 virtual IOReturn
getInformationForDisplayMode( IODisplayModeID displayMode
,
197 IODisplayModeInformation
* info
);
199 // Mask of pixel formats available in mode and depth
200 virtual UInt64
getPixelFormatsForDisplayMode( IODisplayModeID displayMode
,
203 virtual IOReturn
getPixelInformation(
204 IODisplayModeID displayMode
, IOIndex depth
,
205 IOPixelAperture aperture
, IOPixelInformation
* pixelInfo
);
209 // Current display mode and depth
210 virtual IOReturn
getCurrentDisplayMode( IODisplayModeID
* displayMode
,
213 // Set display mode and depth
214 virtual IOReturn
setDisplayMode( IODisplayModeID displayMode
,
218 virtual IOReturn
setApertureEnable( IOPixelAperture aperture
,
219 IOOptionBits enable
);
221 virtual IOReturn
setStartupDisplayMode( IODisplayModeID displayMode
,
223 virtual IOReturn
getStartupDisplayMode( IODisplayModeID
* displayMode
,
228 virtual IOReturn
setCLUTWithEntries( IOColorEntry
* colors
, UInt32 index
,
229 UInt32 numEntries
, IOOptionBits options
);
233 virtual IOReturn
setGammaTable( UInt32 channelCount
, UInt32 dataCount
,
234 UInt32 dataWidth
, void * data
);
236 //// Display mode timing information
238 virtual IOReturn
getTimingInfoForDisplayMode( IODisplayModeID displayMode
,
239 IOTimingInformation
* info
);
241 //// Detailed timing information
243 virtual IOReturn
validateDetailedTiming(
244 void * description
, IOByteCount descripSize
);
246 virtual IOReturn
setDetailedTimings( OSArray
* array
);
248 //// Controller attributes
250 virtual IOReturn
getAttribute( IOSelect attribute
, UInt32
* value
);
254 virtual IOItemCount
getConnectionCount( void );
256 virtual IOReturn
getAttributeForConnection( IOIndex connectIndex
,
257 IOSelect attribute
, UInt32
* value
);
259 virtual IOReturn
setAttributeForConnection( IOIndex connectIndex
,
260 IOSelect attribute
, UInt32 info
);
264 virtual IOReturn
getAppleSense( IOIndex connectIndex
,
268 UInt32
* displayType
);
270 virtual IOReturn
connectFlags( IOIndex connectIndex
,
271 IODisplayModeID displayMode
, IOOptionBits
* flags
);
273 //// IOHighLevelDDCSense
275 virtual bool hasDDCConnect( IOIndex connectIndex
);
276 virtual IOReturn
getDDCBlock( IOIndex connectIndex
, UInt32 blockNumber
,
277 IOSelect blockType
, IOOptionBits options
,
278 UInt8
* data
, IOByteCount
* length
);
282 virtual IOReturn
registerForInterruptType( IOSelect interruptType
,
283 IOFBInterruptProc proc
, OSObject
* target
, void * ref
,
284 void ** interruptRef
);
285 virtual IOReturn
unregisterInterrupt( void * interruptRef
);
286 virtual IOReturn
setInterruptState( void * interruptRef
, UInt32 state
);
290 virtual IOReturn
setCursorImage( void * cursorImage
);
291 virtual IOReturn
setCursorState( SInt32 x
, SInt32 y
, bool visible
);
295 static OSStatus
VSLNewInterruptService(
298 _VSLService
** serviceID
);
299 static OSStatus
VSLDisposeInterruptService( _VSLService
* serviceID
);
300 static OSStatus
VSLDoInterruptService( _VSLService
* serviceID
);
301 static Boolean
VSLPrepareCursorForHardwareCursor(
303 IOHardwareCursorDescriptor
* hwDesc
,
304 IOHardwareCursorInfo
* hwCursorInfo
);
307 #endif /* ! _IOKIT_IONDRVFRAMEBUFFER_H */