Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | #ifndef _AHA1542_H /* $Id: aha1542.h,v 1.1 1992/07/24 06:27:38 root Exp root $ * * Header file for the adaptec 1542 driver for Linux * * $Log: aha1542.h,v $ * Revision 1.1 1992/07/24 06:27:38 root * Initial revision * * Revision 1.2 1992/07/04 18:41:49 root * Replaced distribution with current drivers * * Revision 1.3 1992/06/23 23:58:20 root * Fixes. * * Revision 1.2 1992/05/26 22:13:23 root * Changed bug that prevented DMA above first 2 mbytes. * * Revision 1.1 1992/05/22 21:00:29 root * Initial revision * * Revision 1.1 1992/04/24 18:01:50 root * Initial revision * * Revision 1.1 1992/04/02 03:23:13 drew * Initial revision * * Revision 1.3 1992/01/27 14:46:29 tthorn * *** empty log message *** * */ #include <linux/types.h> #include <linux/kdev_t.h> /* I/O Port interface 4.2 */ /* READ */ #define STATUS(base) base #define STST 0x80 /* Self Test in Progress */ #define DIAGF 0x40 /* Internal Diagnostic Failure */ #define INIT 0x20 /* Mailbox Initialization Required */ #define IDLE 0x10 /* SCSI Host Adapter Idle */ #define CDF 0x08 /* Command/Data Out Port Full */ #define DF 0x04 /* Data In Port Full */ #define INVDCMD 0x01 /* Invalid H A Command */ #define STATMASK 0xfd /* 0x02 is reserved */ #define INTRFLAGS(base) (STATUS(base)+2) #define ANYINTR 0x80 /* Any Interrupt */ #define SCRD 0x08 /* SCSI Reset Detected */ #define HACC 0x04 /* HA Command Complete */ #define MBOA 0x02 /* MBO Empty */ #define MBIF 0x01 /* MBI Full */ #define INTRMASK 0x8f /* WRITE */ #define CONTROL(base) STATUS(base) #define HRST 0x80 /* Hard Reset */ #define SRST 0x40 /* Soft Reset */ #define IRST 0x20 /* Interrupt Reset */ #define SCRST 0x10 /* SCSI Bus Reset */ /* READ/WRITE */ #define DATA(base) (STATUS(base)+1) #define CMD_NOP 0x00 /* No Operation */ #define CMD_MBINIT 0x01 /* Mailbox Initialization */ #define CMD_START_SCSI 0x02 /* Start SCSI Command */ #define CMD_INQUIRY 0x04 /* Adapter Inquiry */ #define CMD_EMBOI 0x05 /* Enable MailBox Out Interrupt */ #define CMD_BUSON_TIME 0x07 /* Set Bus-On Time */ #define CMD_BUSOFF_TIME 0x08 /* Set Bus-Off Time */ #define CMD_DMASPEED 0x09 /* Set AT Bus Transfer Speed */ #define CMD_RETDEVS 0x0a /* Return Installed Devices */ #define CMD_RETCONF 0x0b /* Return Configuration Data */ #define CMD_RETSETUP 0x0d /* Return Setup Data */ #define CMD_ECHO 0x1f /* ECHO Command Data */ #define CMD_EXTBIOS 0x28 /* Return extend bios information only 1542C */ #define CMD_MBENABLE 0x29 /* Set Mailbox Interface enable only 1542C */ /* Mailbox Definition 5.2.1 and 5.2.2 */ struct mailbox { unchar status; /* Command/Status */ unchar ccbptr[3]; /* msb, .., lsb */ }; /* This is used with scatter-gather */ struct chain { unchar datalen[3]; /* Size of this part of chain */ unchar dataptr[3]; /* Location of data */ }; /* These belong in scsi.h also */ #define any2scsi(up, p) \ (up)[0] = (((unsigned long)(p)) >> 16) ; \ (up)[1] = (((unsigned long)(p)) >> 8); \ (up)[2] = ((unsigned long)(p)); #define scsi2int(up) ( (((long)*(up)) << 16) + (((long)(up)[1]) << 8) + ((long)(up)[2]) ) #define xany2scsi(up, p) \ (up)[0] = ((long)(p)) >> 24; \ (up)[1] = ((long)(p)) >> 16; \ (up)[2] = ((long)(p)) >> 8; \ (up)[3] = ((long)(p)); #define xscsi2int(up) ( (((long)(up)[0]) << 24) + (((long)(up)[1]) << 16) \ + (((long)(up)[2]) << 8) + ((long)(up)[3]) ) #define MAX_CDB 12 #define MAX_SENSE 14 struct ccb { /* Command Control Block 5.3 */ unchar op; /* Command Control Block Operation Code */ unchar idlun; /* op=0,2:Target Id, op=1:Initiator Id */ /* Outbound data transfer, length is checked*/ /* Inbound data transfer, length is checked */ /* Logical Unit Number */ unchar cdblen; /* SCSI Command Length */ unchar rsalen; /* Request Sense Allocation Length/Disable */ unchar datalen[3]; /* Data Length (msb, .., lsb) */ unchar dataptr[3]; /* Data Pointer */ unchar linkptr[3]; /* Link Pointer */ unchar commlinkid; /* Command Linking Identifier */ unchar hastat; /* Host Adapter Status (HASTAT) */ unchar tarstat; /* Target Device Status */ unchar reserved[2]; unchar cdb[MAX_CDB+MAX_SENSE];/* SCSI Command Descriptor Block */ /* REQUEST SENSE */ }; int aha1542_detect(Scsi_Host_Template *); int aha1542_command(Scsi_Cmnd *); int aha1542_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); int aha1542_abort(Scsi_Cmnd *); int aha1542_reset(Scsi_Cmnd *, unsigned int); int aha1542_biosparam(Disk *, kdev_t, int*); #define AHA1542_MAILBOXES 8 #define AHA1542_SCATTER 16 #define AHA1542_CMDLUN 1 #ifndef NULL #define NULL 0 #endif extern struct proc_dir_entry proc_scsi_aha1542; #define AHA1542 { NULL, NULL, \ &proc_scsi_aha1542,/* proc_dir_entry */ \ NULL, \ "Adaptec 1542", \ aha1542_detect, \ NULL, \ NULL, \ aha1542_command, \ aha1542_queuecommand, \ aha1542_abort, \ aha1542_reset, \ NULL, \ aha1542_biosparam, \ AHA1542_MAILBOXES, \ 7, \ AHA1542_SCATTER, \ AHA1542_CMDLUN, \ 0, \ 1, \ ENABLE_CLUSTERING} #endif |