/* * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * The contents of this file constitute Original Code as defined in and * are subject to the Apple Public Source License Version 1.1 (the * "License"). You may not use this file except in compliance with the * License. Please obtain a copy of the License at * http://www.apple.com/publicsource and read it before using this file. * * This Original Code and all software distributed under the License are * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the * License for the specific language governing rights and limitations * under the License. * * @APPLE_LICENSE_HEADER_END@ */ /* * Copyright (c) 1998 Apple Computer, Inc. All rights reserved. * * HISTORY * 30 Nov 98 sdouglas start cpp, from previous versions. */ #ifndef _IOKIT_IOFRAMEBUFFER_H #define _IOKIT_IOFRAMEBUFFER_H #include #include #include #include class IOFramebuffer; class IOBufferMemoryDescriptor; typedef void (*CursorBlitProc)( IOFramebuffer * inst, void * shmem, volatile unsigned char *vramPtr, unsigned int cursStart, unsigned int vramRow, unsigned int cursRow, int width, int height ); typedef void (*CursorRemoveProc)( IOFramebuffer * inst, void * shmem, volatile unsigned char *vramPtr, unsigned int vramRow, int width, int height ); enum { kTransparentEncoding = 0, kInvertingEncoding }; enum { kTransparentEncodingShift = (kTransparentEncoding << 1), kTransparentEncodedPixel = (0x01 << kTransparentEncodingShift), kInvertingEncodingShift = (kInvertingEncoding << 1), kInvertingEncodedPixel = (0x01 << kInvertingEncodingShift), }; enum { kHardwareCursorDescriptorMajorVersion = 0x0001, kHardwareCursorDescriptorMinorVersion = 0x0000 }; struct IOHardwareCursorDescriptor { UInt16 majorVersion; UInt16 minorVersion; UInt32 height; UInt32 width; UInt32 bitDepth; UInt32 maskBitDepth; UInt32 numColors; UInt32 * colorEncodings; UInt32 flags; UInt32 supportedSpecialEncodings; UInt32 specialEncodings[16]; }; typedef struct IOHardwareCursorDescriptor IOHardwareCursorDescriptor; enum { kHardwareCursorInfoMajorVersion = 0x0001, kHardwareCursorInfoMinorVersion = 0x0000 }; struct IOHardwareCursorInfo { UInt16 majorVersion; UInt16 minorVersion; UInt32 cursorHeight; UInt32 cursorWidth; // nil or big enough for hardware's max colors IOColorEntry * colorMap; UInt8 * hardwareCursorData; UInt32 reserved[6]; }; typedef struct IOHardwareCursorInfo IOHardwareCursorInfo; // clock & data values enum { kIODDCLow = 0, kIODDCHigh = 1, kIODDCTristate = 2 }; // ddcBlockType constants enum { // EDID block type. kIODDCBlockTypeEDID = 0 }; // ddcFlags constants enum { // Force a new read of the EDID. kIODDCForceRead = 0x00000001, }; enum { kDisabledInterruptState = 0, kEnabledInterruptState = 1 }; typedef void (*IOFBInterruptProc)( OSObject * target, void * ref ); typedef IOReturn (*IOFramebufferNotificationHandler) (OSObject * self, void * ref, IOFramebuffer * framebuffer, IOIndex event, void * info); // IOFramebufferNotificationHandler events enum { kIOFBNotifyDisplayModeWillChange = 1, kIOFBNotifyDisplayModeDidChange, kIOFBNotifyWillSleep, kIOFBNotifyDidWake, }; struct StdFBShmem_t; class IOFramebufferUserClient; class IOFramebuffer : public IOGraphicsDevice { friend class IOFramebufferUserClient; friend class IOFramebufferSharedUserClient; friend class IOGraphicsEngineClient; OSDeclareDefaultStructors(IOFramebuffer) protected: /*! @struct ExpansionData @discussion This structure will be used to expand the capablilties of this class in the future. */ struct ExpansionData { }; /*! @var reserved Reserved for future use. (Internal use only) */ ExpansionData * reserved; private: protected: StdFBShmem_t * priv; int shmemClientVersion; IOBufferMemoryDescriptor * sharedCursor; union { struct { /* Mapping tables used in cursor drawing to 5-5-5 displays. */ unsigned char * _bm34To35SampleTable; unsigned char * _bm35To34SampleTable; /* Mapping tables used in cursor drawing to 8-bit RGB displays. */ unsigned int * _bm256To38SampleTable; unsigned char * _bm38To256SampleTable; } t; UInt8 * tables[ 4 ]; } colorConvert; /* cursor blitting vars */ CursorBlitProc cursorBlitProc; CursorRemoveProc cursorRemoveProc; IOGSize maxCursorSize; volatile unsigned char * cursorImages[ kIOFBNumCursorFrames ]; volatile unsigned char * cursorMasks[ kIOFBNumCursorFrames ]; volatile unsigned char * cursorSave; unsigned int white; Point nextCursorLoc; int nextCursorFrame; void * vblInterrupt; semaphore_t vblSemaphore; /* memory ranges */ volatile unsigned char * frameBuffer; unsigned int totalWidth; unsigned int rowBytes; unsigned int bytesPerPixel; IOMemoryMap * vramMap; IOByteCount vramMapOffset; OSArray * userAccessRanges; OSArray * engineAccessRanges; IOBufferMemoryDescriptor * engineContext; OSSet * fbNotifications; class IOFramebufferUserClient * serverConnect; class IOFramebufferSharedUserClient * sharedConnect; bool opened; bool closed; bool clutValid; bool currentMono; bool needCursorService; bool haveVBLService; bool haveHWCursor; bool hwCursorLoaded; void * pmRef; /* Reserved for future expansion. */ int _IOFramebuffer_reserved[7]; private: OSMetaClassDeclareReservedUnused(IOFramebuffer, 0); OSMetaClassDeclareReservedUnused(IOFramebuffer, 1); OSMetaClassDeclareReservedUnused(IOFramebuffer, 2); OSMetaClassDeclareReservedUnused(IOFramebuffer, 3); OSMetaClassDeclareReservedUnused(IOFramebuffer, 4); OSMetaClassDeclareReservedUnused(IOFramebuffer, 5); OSMetaClassDeclareReservedUnused(IOFramebuffer, 6); OSMetaClassDeclareReservedUnused(IOFramebuffer, 7); OSMetaClassDeclareReservedUnused(IOFramebuffer, 8); OSMetaClassDeclareReservedUnused(IOFramebuffer, 9); OSMetaClassDeclareReservedUnused(IOFramebuffer, 10); OSMetaClassDeclareReservedUnused(IOFramebuffer, 11); OSMetaClassDeclareReservedUnused(IOFramebuffer, 12); OSMetaClassDeclareReservedUnused(IOFramebuffer, 13); OSMetaClassDeclareReservedUnused(IOFramebuffer, 14); OSMetaClassDeclareReservedUnused(IOFramebuffer, 15); OSMetaClassDeclareReservedUnused(IOFramebuffer, 16); OSMetaClassDeclareReservedUnused(IOFramebuffer, 17); OSMetaClassDeclareReservedUnused(IOFramebuffer, 18); OSMetaClassDeclareReservedUnused(IOFramebuffer, 19); OSMetaClassDeclareReservedUnused(IOFramebuffer, 20); OSMetaClassDeclareReservedUnused(IOFramebuffer, 21); OSMetaClassDeclareReservedUnused(IOFramebuffer, 22); OSMetaClassDeclareReservedUnused(IOFramebuffer, 23); OSMetaClassDeclareReservedUnused(IOFramebuffer, 24); OSMetaClassDeclareReservedUnused(IOFramebuffer, 25); OSMetaClassDeclareReservedUnused(IOFramebuffer, 26); OSMetaClassDeclareReservedUnused(IOFramebuffer, 27); OSMetaClassDeclareReservedUnused(IOFramebuffer, 28); OSMetaClassDeclareReservedUnused(IOFramebuffer, 29); OSMetaClassDeclareReservedUnused(IOFramebuffer, 30); OSMetaClassDeclareReservedUnused(IOFramebuffer, 31); public: static void initialize(); virtual IOReturn powerStateWillChangeTo ( IOPMPowerFlags, unsigned long, IOService* ); virtual IOReturn powerStateDidChangeTo ( IOPMPowerFlags, unsigned long, IOService* ); virtual IOReturn setPowerState( unsigned long powerStateOrdinal, IOService * device); virtual IOReturn newUserClient( task_t owningTask, void * security_id, UInt32 type, IOUserClient ** handler ); virtual void hideCursor( void ); virtual void showCursor( Point * cursorLoc, int frame ); virtual void moveCursor( Point * cursorLoc, int frame ); // virtual void resetCursor( void ); virtual void getVBLTime( AbsoluteTime * time, AbsoluteTime * delta ); virtual void getBoundingRect ( Bounds ** bounds ); virtual bool start( IOService * provider ); virtual IOReturn open( void ); virtual void close( void ); virtual bool isConsoleDevice( void ); virtual IOReturn setupForCurrentConfig( void ); virtual bool serializeInfo( OSSerialize * s ); virtual bool setNumber( OSDictionary * dict, const char * key, UInt32 number ); IONotifier * addFramebufferNotification( IOFramebufferNotificationHandler handler, OSObject * self, void * ref); virtual IODeviceMemory * getApertureRange( IOPixelAperture aperture ) = 0; virtual IODeviceMemory * getVRAMRange( void ); protected: IOReturn deliverFramebufferNotification( IOIndex event, void * info = 0 ); #ifdef IOFRAMEBUFFER_PRIVATE #include #endif public: virtual IOReturn enableController( void ); // List of pixel formats supported, null separated, // doubly null terminated. virtual const char * getPixelFormats( void ) = 0; // Array of supported display modes virtual IOItemCount getDisplayModeCount( void ) = 0; virtual IOReturn getDisplayModes( IODisplayModeID * allDisplayModes ) = 0; // Info about a display mode virtual IOReturn getInformationForDisplayMode( IODisplayModeID displayMode, IODisplayModeInformation * info ) = 0; // Mask of pixel formats available in mode and depth virtual UInt64 getPixelFormatsForDisplayMode( IODisplayModeID displayMode, IOIndex depth ) = 0; virtual IOReturn getPixelInformation( IODisplayModeID displayMode, IOIndex depth, IOPixelAperture aperture, IOPixelInformation * pixelInfo ) = 0; // Framebuffer info // Current display mode and depth virtual IOReturn getCurrentDisplayMode( IODisplayModeID * displayMode, IOIndex * depth ) = 0; // Set display mode and depth virtual IOReturn setDisplayMode( IODisplayModeID displayMode, IOIndex depth ); // For pages virtual IOReturn setApertureEnable( IOPixelAperture aperture, IOOptionBits enable ); // Display mode and depth for startup virtual IOReturn setStartupDisplayMode( IODisplayModeID displayMode, IOIndex depth ); virtual IOReturn getStartupDisplayMode( IODisplayModeID * displayMode, IOIndex * depth ); //// CLUTs virtual IOReturn setCLUTWithEntries( IOColorEntry * colors, UInt32 index, UInt32 numEntries, IOOptionBits options ); //// Gamma virtual IOReturn setGammaTable( UInt32 channelCount, UInt32 dataCount, UInt32 dataWidth, void * data ); //// Controller attributes virtual IOReturn setAttribute( IOSelect attribute, UInt32 value ); virtual IOReturn getAttribute( IOSelect attribute, UInt32 * value ); //// Display mode timing information virtual IOReturn getTimingInfoForDisplayMode( IODisplayModeID displayMode, IOTimingInformation * info ); //// Detailed timing information virtual IOReturn validateDetailedTiming( void * description, IOByteCount descripSize ); virtual IOReturn setDetailedTimings( OSArray * array ); //// Connections virtual IOItemCount getConnectionCount( void ); virtual IOReturn setAttributeForConnection( IOIndex connectIndex, IOSelect attribute, UInt32 value ); virtual IOReturn getAttributeForConnection( IOIndex connectIndex, IOSelect attribute, UInt32 * value ); //// HW Cursors virtual bool convertCursorImage( void * cursorImage, IOHardwareCursorDescriptor * description, IOHardwareCursorInfo * cursor ); virtual IOReturn setCursorImage( void * cursorImage ); virtual IOReturn setCursorState( SInt32 x, SInt32 y, bool visible ); //// SW Cursors virtual void flushCursor( void ); // Apple sensing virtual IOReturn getAppleSense( IOIndex connectIndex, UInt32 * senseType, UInt32 * primary, UInt32 * extended, UInt32 * displayType ); virtual IOReturn connectFlags( IOIndex connectIndex, IODisplayModeID displayMode, IOOptionBits * flags ); //// IOLowLevelDDCSense virtual void setDDCClock( IOIndex connectIndex, UInt32 value ); virtual void setDDCData( IOIndex connectIndex, UInt32 value ); virtual bool readDDCClock( IOIndex connectIndex ); virtual bool readDDCData( IOIndex connectIndex ); virtual IOReturn enableDDCRaster( bool enable ); //// IOHighLevelDDCSense virtual bool hasDDCConnect( IOIndex connectIndex ); virtual IOReturn getDDCBlock( IOIndex connectIndex, UInt32 blockNumber, IOSelect blockType, IOOptionBits options, UInt8 * data, IOByteCount * length ); //// Interrupts // This is driven in the opposite direction to ndrv's ie. the base class // registers a proc with the driver, and controls int generation with // setInterruptState. Clients ask for serviceType. virtual IOReturn registerForInterruptType( IOSelect interruptType, IOFBInterruptProc proc, OSObject * target, void * ref, void ** interruptRef ); virtual IOReturn unregisterInterrupt( void * interruptRef ); virtual IOReturn setInterruptState( void * interruptRef, UInt32 state ); virtual IOReturn getNotificationSemaphore( IOSelect interruptType, semaphore_t * semaphore ); }; #endif /* ! _IOKIT_IOFRAMEBUFFER_H */