home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer) / NeXT_Developer-3.3.iso / NextDeveloper / Examples / DriverKit / AMDPCSCSIDriver / AMDPCSCSIDriver_reloc.tproj / AMD_SCSI.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-10  |  4.6 KB  |  172 lines

  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.  
  172.