Annotation of XNU/iokit/IOKit/graphics/IOFramebuffer.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      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.
                     11:  * 
                     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
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1998 Apple Computer, Inc.  All rights reserved. 
                     24:  *
                     25:  * HISTORY
                     26:  * 30 Nov 98 sdouglas start cpp, from previous versions.
                     27:  */
                     28: 
                     29: #ifndef _IOKIT_IOFRAMEBUFFER_H
                     30: #define _IOKIT_IOFRAMEBUFFER_H
                     31: 
                     32: #include <IOKit/IOService.h>
                     33: #include <IOKit/graphics/IOGraphicsDevice.h>
                     34: #include <IOKit/graphics/IOFramebufferShared.h>
                     35: #include <IOKit/IOLib.h>
                     36: 
                     37: class IOFramebuffer;
                     38: class IOBufferMemoryDescriptor;
                     39: 
                     40: typedef void (*CursorBlitProc)(
                     41:                     IOFramebuffer * inst,
                     42:                     void * shmem,
                     43:                     volatile unsigned char *vramPtr,
                     44:                     unsigned int cursStart,
                     45:                     unsigned int vramRow,
                     46:                     unsigned int cursRow,
                     47:                     int width,
                     48:                     int height );
                     49: 
                     50: typedef void (*CursorRemoveProc)(
                     51:                     IOFramebuffer * inst,
                     52:                     void * shmem,
                     53:                     volatile unsigned char *vramPtr,
                     54:                     unsigned int vramRow,
                     55:                     int width,
                     56:                     int height );
                     57: 
                     58: enum {
                     59:    kTransparentEncoding        = 0,
                     60:    kInvertingEncoding
                     61: };
                     62: 
                     63: enum {
                     64:    kTransparentEncodingShift   = (kTransparentEncoding << 1),
                     65:    kTransparentEncodedPixel    = (0x01 << kTransparentEncodingShift),
                     66: 
                     67:    kInvertingEncodingShift     = (kInvertingEncoding << 1),
                     68:    kInvertingEncodedPixel      = (0x01 << kInvertingEncodingShift),
                     69: };
                     70: 
                     71: enum {
                     72:    kHardwareCursorDescriptorMajorVersion       = 0x0001,
                     73:    kHardwareCursorDescriptorMinorVersion       = 0x0000
                     74: };
                     75: 
                     76: struct IOHardwareCursorDescriptor {
                     77:    UInt16              majorVersion;
                     78:    UInt16              minorVersion;
                     79:    UInt32              height;
                     80:    UInt32              width;
                     81:    UInt32              bitDepth;
                     82:    UInt32              maskBitDepth;
                     83:    UInt32              numColors;
                     84:    UInt32 *            colorEncodings;
                     85:    UInt32              flags;
                     86:    UInt32              supportedSpecialEncodings;
                     87:    UInt32              specialEncodings[16];
                     88: };
                     89: typedef struct IOHardwareCursorDescriptor IOHardwareCursorDescriptor;
                     90: 
                     91: enum {
                     92:    kHardwareCursorInfoMajorVersion             = 0x0001,
                     93:    kHardwareCursorInfoMinorVersion             = 0x0000
                     94: };
                     95: 
                     96: struct IOHardwareCursorInfo {
                     97:    UInt16              majorVersion;
                     98:    UInt16              minorVersion;
                     99:    UInt32              cursorHeight;
                    100:    UInt32              cursorWidth;
                    101:    // nil or big enough for hardware's max colors
                    102:    IOColorEntry *      colorMap;
                    103:    UInt8 *             hardwareCursorData;
                    104:    UInt32              reserved[6];
                    105: };
                    106: typedef struct IOHardwareCursorInfo IOHardwareCursorInfo;
                    107: 
                    108: // clock & data values
                    109: enum {
                    110:     kIODDCLow                          = 0,
                    111:     kIODDCHigh                         = 1,
                    112:     kIODDCTristate                     = 2
                    113: };
                    114: // ddcBlockType constants
                    115: enum {
                    116:     // EDID block type.
                    117:     kIODDCBlockTypeEDID                        = 0
                    118: };
                    119: 
                    120: // ddcFlags constants
                    121: enum {
                    122:     // Force a new read of the EDID.
                    123:     kIODDCForceRead                    = 0x00000001,
                    124: };
                    125: 
                    126: enum {
                    127:     kDisabledInterruptState            = 0,
                    128:     kEnabledInterruptState             = 1
                    129: };
                    130: 
                    131: typedef void (*IOFBInterruptProc)( OSObject * target, void * ref );
                    132: 
                    133: 
                    134: typedef IOReturn (*IOFramebufferNotificationHandler)
                    135:        (OSObject * self, void * ref,
                    136:        IOFramebuffer * framebuffer, IOIndex event,
                    137:        void * info);
                    138: 
                    139: // IOFramebufferNotificationHandler events
                    140: enum {
                    141:     kIOFBNotifyDisplayModeWillChange   = 1,
                    142:     kIOFBNotifyDisplayModeDidChange,
                    143: };
                    144: 
                    145: 
                    146: struct StdFBShmem_t;
                    147: class IOFramebufferUserClient;
                    148: 
                    149: class IOFramebuffer : public IOGraphicsDevice
                    150: {
                    151:     friend class IOFramebufferUserClient;
                    152:     friend class IOFramebufferSharedUserClient;
                    153:     friend class IOGraphicsEngineClient;
                    154: 
                    155:     OSDeclareDefaultStructors(IOFramebuffer)
                    156: private:
                    157: 
                    158: protected:
                    159:     StdFBShmem_t *                     priv;
                    160:     int                                        shmemClientVersion;
                    161:     IOBufferMemoryDescriptor *         sharedCursor;
                    162: 
                    163:     union {
                    164:         struct {
                    165:             /* Mapping tables used in cursor drawing to 5-5-5 displays. */
                    166:             unsigned char *    _bm34To35SampleTable;
                    167:             unsigned char *    _bm35To34SampleTable;
                    168:             /* Mapping tables used in cursor drawing to 8-bit RGB displays. */
                    169:             unsigned int *     _bm256To38SampleTable;
                    170:             unsigned char *    _bm38To256SampleTable;
                    171:         }                              t;
                    172:         UInt8 *                                tables[ 4 ];
                    173:     }                                  colorConvert;
                    174:     
                    175:     /* cursor blitting vars */
                    176:     CursorBlitProc                     cursorBlitProc;
                    177:     CursorRemoveProc                   cursorRemoveProc;
                    178: 
                    179:     IOGSize                            maxCursorSize;
                    180:     volatile unsigned char *           cursorImages[ kIOFBNumCursorFrames ];
                    181:     volatile unsigned char *           cursorMasks[ kIOFBNumCursorFrames ];
                    182:     volatile unsigned char *           cursorSave;
                    183:     unsigned int                       white;
                    184: 
                    185:     Point                              nextCursorLoc;
                    186:     int                                        nextCursorFrame;
                    187:     void *                             vblInterrupt;
                    188:     semaphore_t                                vblSemaphore;
                    189: 
                    190:     /* memory ranges */
                    191:     volatile unsigned char *           frameBuffer;
                    192:     unsigned int                       totalWidth;
                    193:     unsigned int                       rowBytes;
                    194:     unsigned int                       bytesPerPixel;
                    195: 
                    196:     IOMemoryMap *                      vramMap;
                    197:     IOByteCount                                vramMapOffset;
                    198:     OSArray *                          userAccessRanges;
                    199:     OSArray *                          engineAccessRanges;
                    200:     IOBufferMemoryDescriptor  *        engineContext;
                    201:     OSSet *                            fbNotifications;
                    202: 
                    203:     class IOFramebufferUserClient *            serverConnect;
                    204:     class IOFramebufferSharedUserClient *      sharedConnect;
                    205: 
                    206:     bool                               opened;
                    207:     bool                               closed;
                    208:     bool                               clutValid;
                    209:     bool                               currentMono;
                    210:     bool                               needCursorService;
                    211:     bool                               haveVBLService;
                    212:     bool                               haveHWCursor;
                    213: 
                    214:     /* Reserved for future expansion. */
                    215:     int                                _IOFramebuffer_reserved[8];
                    216: 
                    217: 
                    218: public:
                    219:     static void initialize();
                    220: 
                    221:     virtual void disallowPowerDown ( void );
                    222:     virtual void allowPowerDown ( void );
                    223:     virtual IOReturn powerStateWillChangeTo ( IOPMPowerFlags, unsigned long, IOService* );
                    224:     virtual IOReturn powerStateDidChangeTo ( IOPMPowerFlags, unsigned long, IOService* );
                    225:     virtual IOReturn newUserClient( task_t             owningTask,
                    226:                                     void *             security_id,
                    227:                                     UInt32             type,
                    228:                                     IOUserClient **    handler );
                    229: 
                    230: 
                    231:     virtual void hideCursor( void );
                    232:     virtual void showCursor( Point * cursorLoc, int frame );
                    233:     virtual void moveCursor( Point * cursorLoc, int frame );
                    234: 
                    235:     virtual void setBrightness( int level );
                    236: 
                    237:     virtual void getBoundingRect ( Bounds ** bounds );
                    238: 
                    239:     virtual bool start( IOService * provider );
                    240: 
                    241:     virtual IOReturn open( void );
                    242:     
                    243:     virtual void close( void );
                    244: 
                    245:     virtual bool isConsoleDevice( void );
                    246: 
                    247:     virtual IOReturn setupForCurrentConfig( void );
                    248: 
                    249:     virtual bool serializeInfo( OSSerialize * s );
                    250:     virtual bool setNumber( OSDictionary * dict, const char * key,
                    251:                                UInt32 number );
                    252: 
                    253:     IONotifier * addFramebufferNotification(
                    254:             IOFramebufferNotificationHandler handler,
                    255:             OSObject * self, void * ref);
                    256: 
                    257:     virtual IODeviceMemory * getApertureRange( IOPixelAperture aperture ) = 0;
                    258:     virtual IODeviceMemory * getVRAMRange( void );
                    259: 
                    260: protected:
                    261: 
                    262:     IOReturn deliverFramebufferNotification(
                    263:                     IOIndex event, void * info = 0 );
                    264: 
                    265: #ifdef IOFRAMEBUFFER_PRIVATE
                    266: #include <IOKit/graphics/IOFramebufferPrivate.h>
                    267: #endif
                    268: 
                    269: public:
                    270: 
                    271:     virtual IOReturn enableController( void );
                    272: 
                    273:     // List of pixel formats supported, null separated,
                    274:     //  doubly null terminated.
                    275:     virtual const char * getPixelFormats( void ) = 0;
                    276: 
                    277:     // Array of supported display modes
                    278:     virtual IOItemCount getDisplayModeCount( void ) = 0;
                    279:     virtual IOReturn getDisplayModes( IODisplayModeID * allDisplayModes ) = 0;
                    280: 
                    281:     // Info about a display mode
                    282:     virtual IOReturn getInformationForDisplayMode( IODisplayModeID displayMode,
                    283:                     IODisplayModeInformation * info ) = 0;
                    284: 
                    285:     // Mask of pixel formats available in mode and depth
                    286:     virtual UInt64  getPixelFormatsForDisplayMode( IODisplayModeID displayMode,
                    287:                     IOIndex depth ) = 0;
                    288: 
                    289:     virtual IOReturn getPixelInformation(
                    290:        IODisplayModeID displayMode, IOIndex depth,
                    291:        IOPixelAperture aperture, IOPixelInformation * pixelInfo ) = 0;
                    292: 
                    293:     // Framebuffer info
                    294: 
                    295:     // Current display mode and depth
                    296:     virtual IOReturn getCurrentDisplayMode( IODisplayModeID * displayMode,
                    297:                             IOIndex * depth ) = 0;
                    298: 
                    299:     // Set display mode and depth
                    300:     virtual IOReturn setDisplayMode( IODisplayModeID displayMode,
                    301:                             IOIndex depth );
                    302: 
                    303:     // For pages
                    304:     virtual IOReturn setApertureEnable( IOPixelAperture aperture,
                    305:                    IOOptionBits enable );
                    306: 
                    307:     // Display mode and depth for startup
                    308:     virtual IOReturn setStartupDisplayMode( IODisplayModeID displayMode,
                    309:                             IOIndex depth );
                    310:     virtual IOReturn getStartupDisplayMode( IODisplayModeID * displayMode,
                    311:                             IOIndex * depth );
                    312: 
                    313:     //// CLUTs
                    314: 
                    315:     virtual IOReturn setCLUTWithEntries( IOColorEntry * colors, UInt32 index,
                    316:                 UInt32 numEntries, IOOptionBits options );
                    317: 
                    318:     //// Gamma
                    319: 
                    320:     virtual IOReturn setGammaTable( UInt32 channelCount, UInt32 dataCount,
                    321:                     UInt32 dataWidth, void * data );
                    322: 
                    323:     //// Controller attributes
                    324: 
                    325:     virtual IOReturn setAttribute( IOSelect attribute, UInt32 value );
                    326:     virtual IOReturn getAttribute( IOSelect attribute, UInt32 * value );
                    327: 
                    328:     //// Display mode timing information
                    329: 
                    330:     virtual IOReturn getTimingInfoForDisplayMode(
                    331:                IODisplayModeID displayMode, IOTimingInformation * info );
                    332: 
                    333:     //// Connections
                    334: 
                    335:     virtual IOItemCount getConnectionCount( void );
                    336: 
                    337:     virtual IOReturn setAttributeForConnection( IOIndex connectIndex,
                    338:                     IOSelect attribute, UInt32 value );
                    339:     virtual IOReturn getAttributeForConnection( IOIndex connectIndex,
                    340:                     IOSelect attribute, UInt32  * value );
                    341: 
                    342:     //// HW Cursors - straight from Marconi
                    343: 
                    344:     virtual bool convertCursorImage( void * cursorImage,
                    345:                IOHardwareCursorDescriptor * description,
                    346:                 IOHardwareCursorInfo * cursor );
                    347: 
                    348:     virtual IOReturn setCursorImage( void * cursorImage );
                    349:     virtual IOReturn setCursorState( SInt32 x, SInt32 y, bool visible );
                    350: 
                    351:     //// SW Cursors
                    352: 
                    353:     virtual void flushCursor( void );
                    354: 
                    355:     // Apple sensing
                    356: 
                    357:     virtual IOReturn getAppleSense( IOIndex connectIndex,
                    358:             UInt32 * senseType,
                    359:             UInt32 * primary,
                    360:             UInt32 * extended,
                    361:             UInt32 * displayType );
                    362: 
                    363:     virtual IOReturn connectFlags( IOIndex connectIndex,
                    364:                     IODisplayModeID displayMode, IOOptionBits * flags );
                    365: 
                    366:     //// IOLowLevelDDCSense
                    367: 
                    368:     virtual void setDDCClock( IOIndex connectIndex, UInt32 value );
                    369:     virtual void setDDCData( IOIndex connectIndex, UInt32 value );
                    370:     virtual bool readDDCClock( IOIndex connectIndex );
                    371:     virtual bool readDDCData( IOIndex connectIndex );
                    372:     virtual IOReturn enableDDCRaster( bool enable );
                    373: 
                    374:     //// IOHighLevelDDCSense
                    375: 
                    376:     virtual bool hasDDCConnect( IOIndex connectIndex );
                    377:     virtual IOReturn getDDCBlock( IOIndex connectIndex, UInt32 blockNumber,
                    378:                     IOSelect blockType, IOOptionBits options,
                    379:                     UInt8 * data, IOByteCount * length );
                    380: 
                    381:     //// Interrupts
                    382: 
                    383:     // This is driven in the opposite direction to ndrv's ie. the base class
                    384:     // registers a proc with the driver, and controls int generation with
                    385:     // setInterruptState. Clients ask for serviceType.
                    386: 
                    387:     virtual IOReturn registerForInterruptType( IOSelect interruptType,
                    388:                    IOFBInterruptProc proc, OSObject * target, void * ref,
                    389:                    void ** interruptRef );
                    390:     virtual IOReturn unregisterInterrupt( void * interruptRef );
                    391:     virtual IOReturn setInterruptState( void * interruptRef, UInt32 state );
                    392: 
                    393:     virtual IOReturn getNotificationSemaphore( IOSelect interruptType,
                    394:                                                semaphore_t * semaphore );
                    395: };
                    396: 
                    397: #endif /* ! _IOKIT_IOFRAMEBUFFER_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.