Annotation of Examples/DriverKit/AMDPCSCSIDriver/AMDPCSCSIDriver_reloc.tproj/AMD_SCSI.h, revision 1.1.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.