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

  1. /*     Copyright (c) 1994 NeXT Computer, Inc.  All rights reserved. 
  2.  *
  3.  * AMD_ChipPrivate.h - private structs and #defines for AMD_Chip category.
  4.  *
  5.  * HISTORY
  6.  * 1 Nov 94    Doug Mitchell at NeXT
  7.  *      Created. 
  8.  */
  9.  
  10. /*
  11.  * opcode groups
  12.  */
  13. #define    SCSI_OPGROUP(opcode)    ((opcode) & 0xe0)
  14.  
  15. #define    OPGROUP_0        0x00    /* six byte commands */
  16. #define    OPGROUP_1        0x20    /* ten byte commands */
  17. #define    OPGROUP_2        0x40    /* ten byte commands */
  18. #define    OPGROUP_5        0xa0    /* twelve byte commands */
  19. #define    OPGROUP_6        0xc0    /* six byte, vendor unique commands */
  20. #define    OPGROUP_7        0xe0    /* ten byte, vendor unique commands */
  21.  
  22. /*
  23.  * scsi bus phases
  24.  */
  25. #define    PHASE_DATAOUT        0x0
  26. #define    PHASE_DATAIN        0x1
  27. #define    PHASE_COMMAND        0x2
  28. #define    PHASE_STATUS        0x3
  29. #define    PHASE_MSGOUT        0x6
  30. #define    PHASE_MSGIN        0x7
  31.  
  32. /*
  33.  * message codes
  34.  */
  35. #define    MSG_CMDCMPLT        0x00    /* to host: command complete */
  36. #define MSG_EXTENDED        0x01    /* both ways: extended message */
  37. #define    MSG_SAVEPTRS        0x02    /* to host: save data pointers */
  38. #define    MSG_RESTOREPTRS        0x03    /* to host: restore pointers */
  39. #define    MSG_DISCONNECT        0x04    /* to host: disconnect */
  40. #define    MSG_IDETERR        0x05    /* to disk: initiator detected error */
  41. #define    MSG_ABORT        0x06    /* to disk: abort op, go to bus free */
  42. #define    MSG_MSGREJECT        0x07    /* both ways: last msg unimplemented */
  43. #define    MSG_NOP            0x08    /* to disk: no-op message */
  44. #define    MSG_MSGPARERR        0x09    /* to disk: parity error last 
  45.                        message */
  46. #define    MSG_LNKCMDCMPLT        0x0a    /* to host: linked command complete */
  47. #define    MSG_LNKCMDCMPLTFLAG    0x0b    /* to host: flagged linked cmd cmplt */
  48. #define    MSG_DEVICERESET        0x0c    /* to disk: reset and go to bus free */
  49. #define MSG_SIMPLE_QUEUE_TAG    0x20    /* both ways: simple queue tag */
  50. #define MSG_HEAD_QUEUE_TAG    0x21    /* to disk: head of queue tag */
  51. #define MSG_ORDERED_QUEUE_TAG    0x22    /* to disk: ordered queue tag */
  52. #define    MSG_IDENTIFYMASK    0x80    /* both ways: thread identification */
  53. #define    MSG_ID_DISCONN        0x40    /*    can disconnect/reconnect */
  54. #define    MSG_ID_LUNMASK        0x07    /*    target LUN */
  55.  
  56. /*
  57.  * Extended message codes
  58.  */
  59. #define MSG_SDTR        0x01    /* sync data transfer request */
  60. #define MSG_SDTR_LENGTH        5    /* total SDTR message length */
  61.  
  62. /*
  63.  * Delay, in ms, after SCSI reset.
  64.  */
  65. #define AMD_SCSI_RESET_DELAY    10000
  66.  
  67. /* 
  68.  * Private methods, used only by AMD_Chip module.
  69.  */
  70.  
  71. @interface AMD_SCSI(ChipPrivate)
  72.  
  73. /*
  74.  * Determine what kind of SCSI interrupt is pending, if any.
  75.  */
  76.  
  77. typedef enum { 
  78.     SINT_NONE,             /* no interrupt */
  79.     SINT_DEVICE,            /* 53C974 */
  80.     SINT_DMA,            /* DMA (not currently used) */
  81.     SINT_OTHER            /* ?? */
  82. } sintPending_t;
  83.  
  84. - (sintPending_t)scsiInterruptPending;
  85.  
  86.  
  87. /*
  88.  * Methods invoked upon interrupt. One per legal scState.
  89.  */
  90. - (void)fsmDisconnected;
  91. - (void)fsmSelecting;
  92. - (void)fsmInitiator;
  93. - (void)fsmCompleting;
  94. - (void)fsmDMAing;
  95. - (void)fsmAcceptingMsg;
  96. - (void)fsmSendingMsg;
  97. - (void)fsmSelecting;
  98. - (void)fsmGettingMsg;
  99. - (void)fsmSelecting;
  100. - (void)fsmSendingCmd;
  101.  
  102. /*
  103.  * This is is called after an interrupt leaves us as SCS_INITIATOR.
  104.  */
  105. - (void)fsmPhaseChange;
  106.  
  107. - (void)messageOut     : (unsigned char)msg;
  108.  
  109. /*
  110.  * Load syncPeriod, syncOffset for activeCmd per perTarget values.
  111.  */
  112. - (void)targetContext     : (unsigned)target;
  113.  
  114. /*
  115.  * Parse and validate 5-byte SDTR message. If valid, save in perTarget 
  116.  * and in hardware. Returns YES if valid, else NO.
  117.  * 
  118.  * Specified message buffer could be from either currMsgIn[] or 
  119.  * currMsgOut[].
  120.  */
  121. - (BOOL)parseSDTR            : (unsigned char *)sdtrMessage;
  122.  
  123. /*
  124.  * Cons up an SDTR message appropriate for both our hardware and a possible
  125.  * target-generated SDTR message. If inboundMsg is NULL, we just use
  126.  * the parameters we want.
  127.  */
  128. - (void)createSDTR        : (unsigned char *)outboundMsg    // required
  129.              inboundMsg : (unsigned char *)inboundMsg;
  130.     
  131. /*
  132.  * Disable specified mode for activeCmd's target.
  133.  */
  134.  
  135. typedef enum {
  136.     AM_CmdQueue,
  137.     AM_Sync,
  138. } AMD_Mode;    
  139.  
  140. - (void)disableMode : (AMD_Mode)mode;
  141.  
  142. @end
  143.