aha1740.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _AHA1740_H
  2. /* $Id$
  3.  *
  4.  * Header file for the adaptec 1740 driver for Linux
  5.  *
  6.  * With minor revisions 3/31/93
  7.  * Written and (C) 1992,1993 Brad McLean.  See aha1740.c
  8.  * for more info
  9.  *
  10.  */
  11. #include <linux/types.h>
  12. #include <linux/kdev_t.h>
  13. /* Eisa Enhanced mode operation - slot locating and addressing */
  14. #define MINEISA 1   /* I don't have an EISA Spec to know these ranges, so I */
  15. #define MAXEISA 8   /* Just took my machine's specifications.  Adjust to fit.*/
  16.     /* I just saw an ad, and bumped this from 6 to 8 */
  17. #define SLOTBASE(x) ((x << 12) + 0xc80)
  18. #define SLOTSIZE 0x5c
  19. /* EISA configuration registers & values */
  20. #define HID0(base) (base + 0x0)
  21. #define HID1(base) (base + 0x1)
  22. #define HID2(base) (base + 0x2)
  23. #define HID3(base) (base + 0x3)
  24. #define EBCNTRL(base) (base + 0x4)
  25. #define PORTADR(base) (base + 0x40)
  26. #define BIOSADR(base) (base + 0x41)
  27. #define INTDEF(base) (base + 0x42)
  28. #define SCSIDEF(base) (base + 0x43)
  29. #define BUSDEF(base) (base + 0x44)
  30. #define RESV0(base) (base + 0x45)
  31. #define RESV1(base) (base + 0x46)
  32. #define RESV2(base) (base + 0x47)
  33. #define HID_MFG "ADP"
  34. #define HID_PRD 0
  35. #define HID_REV 2
  36. #define EBCNTRL_VALUE 1
  37. #define PORTADDR_ENH 0x80
  38. /* READ */
  39. #define G2INTST(base) (base + 0x56)
  40. #define G2STAT(base) (base + 0x57)
  41. #define MBOXIN0(base) (base + 0x58)
  42. #define MBOXIN1(base) (base + 0x59)
  43. #define MBOXIN2(base) (base + 0x5a)
  44. #define MBOXIN3(base) (base + 0x5b)
  45. #define G2STAT2(base) (base + 0x5c)
  46. #define G2INTST_MASK 0xf0 /* isolate the status */
  47. #define G2INTST_CCBGOOD 0x10 /* CCB Completed */
  48. #define G2INTST_CCBRETRY 0x50 /* CCB Completed with a retry */
  49. #define G2INTST_HARDFAIL 0x70 /* Adapter Hardware Failure */
  50. #define G2INTST_CMDGOOD 0xa0 /* Immediate command success */
  51. #define G2INTST_CCBERROR 0xc0 /* CCB Completed with error */
  52. #define G2INTST_ASNEVENT 0xd0 /* Asynchronous Event Notification */
  53. #define G2INTST_CMDERROR 0xe0 /* Immediate command error */
  54. #define G2STAT_MBXOUT 4 /* Mailbox Out Empty Bit */
  55. #define G2STAT_INTPEND 2 /* Interrupt Pending Bit */
  56. #define G2STAT_BUSY 1 /* Busy Bit (attention pending) */
  57. #define G2STAT2_READY 0 /* Host Ready Bit */
  58. /* WRITE (and ReadBack) */
  59. #define MBOXOUT0(base) (base + 0x50)
  60. #define MBOXOUT1(base) (base + 0x51)
  61. #define MBOXOUT2(base) (base + 0x52)
  62. #define MBOXOUT3(base) (base + 0x53)
  63. #define ATTN(base) (base + 0x54)
  64. #define G2CNTRL(base) (base + 0x55)
  65. #define ATTN_IMMED 0x10 /* Immediate Command */
  66. #define ATTN_START 0x40 /* Start CCB */
  67. #define ATTN_ABORT 0x50 /* Abort CCB */
  68. #define G2CNTRL_HRST 0x80 /* Hard Reset */
  69. #define G2CNTRL_IRST 0x40 /* Clear EISA Interrupt */
  70. #define G2CNTRL_HRDY 0x20 /* Sets HOST ready */
  71. /* This is used with scatter-gather */
  72. struct aha1740_chain {
  73.   u32  dataptr; /* Location of data */
  74.   u32  datalen; /* Size of this part of chain */
  75. };
  76. /* These belong in scsi.h */
  77. #define any2scsi(up, p)
  78. (up)[0] = (((unsigned long)(p)) >> 16)  ;
  79. (up)[1] = (((unsigned long)(p)) >> 8);
  80. (up)[2] = ((unsigned long)(p));
  81. #define scsi2int(up) ( (((long)*(up)) << 16) + (((long)(up)[1]) << 8) + ((long)(up)[2]) )
  82. #define xany2scsi(up, p)
  83. (up)[0] = ((long)(p)) >> 24;
  84. (up)[1] = ((long)(p)) >> 16;
  85. (up)[2] = ((long)(p)) >> 8;
  86. (up)[3] = ((long)(p));
  87. #define xscsi2int(up) ( (((long)(up)[0]) << 24) + (((long)(up)[1]) << 16) 
  88.       + (((long)(up)[2]) <<  8) +  ((long)(up)[3]) )
  89. #define MAX_CDB 12
  90. #define MAX_SENSE 14
  91. #define MAX_STATUS 32
  92. struct ecb { /* Enhanced Control Block 6.1 */
  93.   u16 cmdw; /* Command Word */
  94.   /* Flag Word 1 */
  95.   u16 cne:1, /* Control Block Chaining */
  96. :6, di:1, /* Disable Interrupt */
  97. :2, ses:1, /* Suppress Underrun error */
  98. :1, sg:1, /* Scatter/Gather */
  99. :1, dsb:1, /* Disable Status Block */
  100. ars:1; /* Automatic Request Sense */
  101.   /* Flag Word 2 */
  102.   u16 lun:3, /* Logical Unit */
  103. tag:1, /* Tagged Queuing */
  104. tt:2, /* Tag Type */
  105. nd:1, /* No Disconnect */
  106. :1, dat:1, /* Data transfer - check direction */
  107. dir:1, /* Direction of transfer 1 = datain */
  108. st:1, /* Suppress Transfer */
  109. chk:1, /* Calculate Checksum */
  110. :2, rec:1, :1; /* Error Recovery */
  111.   u16 nil0; /* nothing */
  112.   u32 dataptr; /* Data or Scatter List ptr */
  113.   u32 datalen; /* Data or Scatter List len */
  114.   u32 statusptr; /* Status Block ptr */
  115.   u32 linkptr; /* Chain Address */
  116.   u32 nil1; /* nothing */
  117.   u32 senseptr; /* Sense Info Pointer */
  118.   u8 senselen; /* Sense Length */
  119.   u8 cdblen; /* CDB Length */
  120.   u16 datacheck; /* Data checksum */
  121.   u8 cdb[MAX_CDB]; /* CDB area */
  122. /* Hardware defined portion ends here, rest is driver defined */
  123.   u8 sense[MAX_SENSE]; /* Sense area */ 
  124.   u8 status[MAX_STATUS]; /* Status area */
  125.   Scsi_Cmnd *SCpnt; /* Link to the SCSI Command Block */
  126.   void (*done)(Scsi_Cmnd *); /* Completion Function */
  127. };
  128. #define AHA1740CMD_NOP  0x00 /* No OP */
  129. #define AHA1740CMD_INIT  0x01 /* Initiator SCSI Command */
  130. #define AHA1740CMD_DIAG  0x05 /* Run Diagnostic Command */
  131. #define AHA1740CMD_SCSI  0x06 /* Initialize SCSI */
  132. #define AHA1740CMD_SENSE 0x08 /* Read Sense Information */
  133. #define AHA1740CMD_DOWN  0x09 /* Download Firmware (yeah, I bet!) */
  134. #define AHA1740CMD_RINQ  0x0a /* Read Host Adapter Inquiry Data */
  135. #define AHA1740CMD_TARG  0x10 /* Target SCSI Command */
  136. int aha1740_detect(Scsi_Host_Template *);
  137. int aha1740_command(Scsi_Cmnd *);
  138. int aha1740_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
  139. int aha1740_abort(Scsi_Cmnd *);
  140. int aha1740_reset(Scsi_Cmnd *, unsigned int);
  141. int aha1740_biosparam(Disk *, kdev_t, int*);
  142. int aha1740_proc_info(char *buffer, char **start, off_t offset,
  143.                                int length, int hostno, int inout);
  144. #define AHA1740_ECBS 32
  145. #define AHA1740_SCATTER 16
  146. #define AHA1740_CMDLUN 1
  147. #ifndef NULL
  148. #define NULL 0
  149. #endif
  150. #define AHA1740 {  proc_name:      "aha1740",
  151.    proc_info:      aha1740_proc_info,                 
  152.    name:           "Adaptec 174x (EISA)",
  153.    detect:         aha1740_detect,
  154.    command:        aha1740_command,
  155.    queuecommand:   aha1740_queuecommand,
  156.    abort:          aha1740_abort,
  157.    reset:          aha1740_reset,
  158.    bios_param:     aha1740_biosparam,                   
  159.    can_queue:      AHA1740_ECBS, 
  160.    this_id:        7, 
  161.    sg_tablesize:   AHA1740_SCATTER, 
  162.    cmd_per_lun:    AHA1740_CMDLUN, 
  163.    use_clustering: ENABLE_CLUSTERING}
  164. #endif