Annotation of XNU/iokit/Drivers/ata/drvAppleATA/AppleATAPIIX.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc.  All rights reserved. 
                      3:  *
                      4:  * AppleATAPIIX.h - ATA controller driver for Intel PIIX/PIIX3/PIIX4.
                      5:  *
                      6:  * HISTORY
                      7:  *
                      8:  */
                      9: 
                     10: #ifndef _APPLEATAPIIX_H
                     11: #define _APPLEATAPIIX_H
                     12: 
                     13: #include <IOKit/IOTimerEventSource.h>
                     14: #include <IOKit/IOMemoryCursor.h>
                     15: #include <IOKit/pci/IOPCIDevice.h>
                     16: #include <libkern/OSByteOrder.h>
                     17: 
                     18: #include "AppleATA.h"
                     19: #include "AppleATAPIIXRegs.h"
                     20: #include "AppleATAPIIXTiming.h"
                     21: 
                     22: class AppleATAPIIX : public AppleATA
                     23: {
                     24:     OSDeclareDefaultStructors( AppleATAPIIX )
                     25:     
                     26: protected:
                     27:     IOPCIDevice *            provider;     // our provider
                     28:     UInt32                   pciCFID;      // our PCI vendor/device ID
                     29:     UInt32                   channel;      // IDE channel
                     30:     UInt16                   ioCmdRange;   // command block
                     31:     UInt16                   ioCtlRange;   // control block
                     32:     UInt16                   ioBMRange;    // bus-master register block
                     33:     UInt32                   dmaReqLength; // transaction state
                     34:     bool                     dmaIsWrite;   // transaction state
                     35:     prdEntry_t *             prdTable;     // physical region descriptor table
                     36:     IOPhysicalAddress        prdTablePhys; // physical address of prdTable
                     37:     PIIXSelectedTimings      timings[2];   // drive0 and drive1 timings
                     38:     IOLittleMemoryCursor *   prdCursor;    // request -> scatter-gather list
                     39:     IOTimerEventSource *     timerEventSource;
                     40:     IOInterruptEventSource * interruptEventSource;
                     41: 
                     42:     /*
                     43:      * Internal (private) functions.
                     44:      */
                     45:     bool _getIDERanges(IOPCIDevice * provider);
                     46:     bool _getBMRange(IOPCIDevice * provider);
                     47:     bool _allocatePRDTable();
                     48:     void _deallocatePRDTable();
                     49:     bool _resetTimings();
                     50:     bool _readPCIConfigSpace(UInt8 * configSpace);
                     51:     bool _writePCIConfigSpace(UInt8 * configSpace);
                     52:     bool _selectTiming(UInt32        unit,
                     53:                        PIIXProtocol  timingProtocol,
                     54:                        UInt8 *       pciConfig);
                     55: 
                     56: public:
                     57:     /*
                     58:      * Class initializer.
                     59:      */
                     60:     static void initialize();
                     61: 
                     62:     /*
                     63:      * Returns the IDE channel for the current driver instance.
                     64:      */
                     65:     static int PIIXGetChannel(IOPCIDevice * provider);
                     66: 
                     67:     /*
                     68:      * Functions defined by our superclass that we must override.
                     69:      */
                     70:     void writeATAReg(UInt32 regIndex, UInt32 regValue);
                     71:     
                     72:     UInt32 readATAReg(UInt32 regIndex);
                     73: 
                     74:     void free();
                     75: 
                     76:     bool configure(IOService * forProvider,
                     77:                    UInt32 *    controllerDataSize);
                     78: 
                     79:     bool createWorkLoop(IOWorkLoop ** workLoop);
                     80: 
                     81:     bool provideProtocols(enum ATAProtocol * protocolsSupported);
                     82: 
                     83:     bool provideTimings(UInt32 *    numTimings,
                     84:                         ATATiming * timingsSupported);
                     85:     
                     86:     bool calculateTiming(UInt32 deviceNum, ATATiming * pTiming);
                     87: 
                     88:     bool selectTiming(UInt32            unitNum,
                     89:                       ATATimingProtocol timingProtocol);
                     90: 
                     91:     void disableControllerInterrupts();
                     92:     void enableControllerInterrupts();
                     93: 
                     94:     void ataTimer(IOTimerEventSource * sender);
                     95: 
                     96:     /*
                     97:      * Functions that must be implemented by a bus-master controller.
                     98:      */
                     99:     bool programDma(IOATACommand * cmd);
                    100:     bool startDma(IOATACommand * cmd);
                    101:     bool stopDma(IOATACommand * cmd, UInt32 * transferCount);
                    102: 
                    103:     /*
                    104:      * Miscellaneous functions.
                    105:      */
                    106:     void interruptOccurred();
                    107: };
                    108: 
                    109: #endif /* !_APPLEATAPIIX_H */

unix.superglobalmegacorp.com

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