Annotation of Examples/DriverKit/AMDPCSCSIDriver/AMDPCSCSIDriver_reloc.tproj/AMD_SCSI.h, revision 1.1

1.1     ! root        1: /*     Copyright (c) 1994 NeXT Computer, Inc.  All rights reserved. 
        !             2:  *
        !             3:  * AMD_SCSI.h - top-level API for AMD 53C974/79C974 PCI SCSI driver. 
        !             4:  *
        !             5:  * HISTORY
        !             6:  * 21 Oct 94    Doug Mitchell at NeXT
        !             7:  *      Created. 
        !             8:  */
        !             9:  
        !            10: #import <driverkit/i386/directDevice.h>
        !            11: #import <kernserv/queue.h>
        !            12: #import <driverkit/IODirectDevice.h>
        !            13: #import <driverkit/i386/IOPCIDirectDevice.h>
        !            14: #import <driverkit/i386/driverTypes.h>
        !            15: #import <driverkit/IOSCSIController.h>
        !            16: #import <driverkit/IOPower.h>
        !            17: #import "AMD_Types.h"
        !            18: 
        !            19: @interface AMD_SCSI : IOSCSIController <IOPower> 
        !            20: {
        !            21:        IOEISAPortAddress       ioBase; // base IO port addr
        !            22:        port_t          interruptPortKern;
        !            23: 
        !            24:        /*
        !            25:         * Commands are passed from exported methods to the I/O thread
        !            26:         * via commandQ, which is protected by commandLock.
        !            27:         * 
        !            28:         * Commands which are disconnected but not complete are kept
        !            29:         * in disconnectQ.
        !            30:         *
        !            31:         * Commands which have been dequeued from commandQ by the 
        !            32:         * I/O thread but which have not been started because a 
        !            33:         * command is currently active on the bus are kept in pendingQ.
        !            34:         *
        !            35:         * The currently active command, if any, is kept in activeCmd.
        !            36:         * Only commandBufs with op == CO_Execute are ever placed in
        !            37:         * activeCmd.
        !            38:         */
        !            39:        queue_head_t    disconnectQ;    
        !            40:        queue_head_t    commandQ;               
        !            41:        id              commandLock;    // NXLock; protects commandQ 
        !            42:        queue_head_t    pendingQ;               
        !            43:        commandBuf      *activeCmd;     // connected command (if any). NULL 
        !            44:                                        // implies we're disconnected. 
        !            45:                                        
        !            46:        /*
        !            47:         * Option flags, accessible via instance table or setIntValues 
        !            48:         * (DEBUG only).
        !            49:         */
        !            50:        unsigned        autoSenseEnable:1,
        !            51:                        cmdQueueEnable:1,
        !            52:                        syncModeEnable:1,
        !            53:                        fastModeEnable:1,
        !            54:                        extendTiming:1,
        !            55:                        ioThreadRunning:1,
        !            56:                        pad:26;
        !            57:        unsigned        scsiClockRate;  // in MHz
        !            58: 
        !            59:        /*
        !            60:         * Array of active I/Os counters, one counter per lun per target.
        !            61:         * If command queueing is disabled, the max value of each counter
        !            62:         * is 1. ActiveCount is the sum of all elements in activeArray.
        !            63:         */
        !            64:        unsigned char   activeArray[SCSI_NTARGETS][SCSI_NLUNS];
        !            65:        unsigned        activeCount;
        !            66:                
        !            67:        /*
        !            68:         * Hardware related variables used (mostly) in AMD_Chip.m.
        !            69:         */
        !            70:        unsigned char   saveStatus;     // saved status on interrupt
        !            71:        unsigned char   saveSeqStep;    // saved seqstep
        !            72:        unsigned char   saveIntrStatus; // saved interrupt status 
        !            73:        unsigned char   hostId;         // our SCSI ID 
        !            74:        scState_t       scState;        // SCS_DISCONNECTED, etc.
        !            75:        unsigned char   reselTarget;    // target attempting to reselect
        !            76:        unsigned char   reselLun;       // lun       ""         ""
        !            77:        
        !            78:        /*
        !            79:         * commandBuf->queueTag for next I/O. This is never zero; for
        !            80:         * metjhod calls involving a T/L/Q nexus, a queue tag of zero
        !            81:         * indicates a nontagges command.
        !            82:         */
        !            83:        unsigned char   nextQueueTag;
        !            84:        
        !            85:        /*
        !            86:         * Per-target information.
        !            87:         */
        !            88:        perTargetData   perTarget[SCSI_NTARGETS];
        !            89:        
        !            90:        /*
        !            91:         * Message in/out state machine variables.
        !            92:         * Outbound messages are placed in currMsgOut[] after asserting ATN;
        !            93:         * when we see phase == PHASE_MSGOUT, these are sent to FIFO.
        !            94:         * Inbound messages are placed in currMsgIn[] and are processed
        !            95:         * when we leave phase == PHASE_MSGIN.
        !            96:         */
        !            97:        unsigned char   currMsgOut[AMD_MSG_SIZE];
        !            98:        unsigned        currMsgOutCnt;
        !            99:        unsigned char   currMsgIn[AMD_MSG_SIZE];
        !           100:        unsigned        currMsgInCnt;
        !           101:        msgOutState_t   msgOutState;            //  MOS_WAITING, etc.
        !           102:        
        !           103:        SDTR_State_t    SDTR_State;
        !           104:        
        !           105:        unsigned        reselPending:1,
        !           106:                        pad2:31;
        !           107:        
        !           108: #ifdef DEBUG
        !           109:        /*
        !           110:         * Shadows of write-only registers.
        !           111:         */
        !           112:        unsigned char   syncOffsetShadow;
        !           113:        unsigned char   syncPeriodShadow;
        !           114: #endif DEBUG
        !           115:        /*
        !           116:         * Statistics support.
        !           117:         */
        !           118:        unsigned        maxQueueLen;
        !           119:        unsigned        queueLenTotal;
        !           120:        unsigned        totalCommands;
        !           121:        
        !           122:        vm_address_t    *mdl;           // well aligned working ptr
        !           123:        vm_address_t    *mdlFree;       // ptr we have to IOFree()
        !           124:        unsigned        mdlPhys;        // physical address of mdl
        !           125:        
        !           126:        /*
        !           127:         * host bus info.
        !           128:         */
        !           129:        BusType         busType;                // only BT_PCI for now
        !           130:        BOOL            levelIRQ;
        !           131:        unsigned char   busNumber;              // FIXME - do we need these?
        !           132:        unsigned char   deviceNumber;
        !           133:        unsigned char   functionNumber; 
        !           134: 
        !           135: }
        !           136: 
        !           137: + (BOOL)probe:deviceDescription;
        !           138: - free;
        !           139: - (sc_status_t) executeRequest         : (IOSCSIRequest *)scsiReq 
        !           140:                         buffer : (void *)buffer 
        !           141:                         client : (vm_task_t)client;
        !           142: - (sc_status_t)resetSCSIBus;
        !           143: - (void)resetStats;
        !           144: - (unsigned)numQueueSamples;
        !           145: - (unsigned)sumQueueLengths;
        !           146: - (unsigned) maxQueueLength;
        !           147: - (void)interruptOccurred;     
        !           148: - (void)timeoutOccurred;
        !           149: 
        !           150: #if    AMD_ENABLE_GET_SET
        !           151: 
        !           152: - (IOReturn)setIntValues               : (unsigned *)parameterArray
        !           153:                           forParameter : (IOParameterName)parameterName
        !           154:                                  count : (unsigned)count;
        !           155: - (IOReturn)getIntValues               : (unsigned *)parameterArray
        !           156:                           forParameter : (IOParameterName)parameterName
        !           157:                                  count : (unsigned *)count;    // in/out
        !           158: /*
        !           159:  * setIntValues parameters.
        !           160:  */
        !           161: #define AMD_AUTOSENSE          "AutoSense"
        !           162: #define AMD_CMD_QUEUE          "CmdQueue"
        !           163: #define AMD_SYNC               "Sync"
        !           164: #define AMD_FAST_SCSI          "FastSCSI"
        !           165: #define AMD_RESET_TARGETS      "ResetTargets"
        !           166: 
        !           167: #endif AMD_ENABLE_GET_SET
        !           168: 
        !           169: @end
        !           170: 
        !           171: 

unix.superglobalmegacorp.com

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