|
|
1.1 ! root 1: #ifndef _WD7000FASST_H ! 2: ! 3: /* $Id: 7000fasst.h,v 1.1 1992/07/24 06:27:38 root Exp root $ ! 4: * ! 5: * Header file for the WD 7000-FASST driver for Linux ! 6: * ! 7: * $Log: 7000fasst.h,v $ ! 8: * Revision 1.1 1992/07/24 06:27:38 root ! 9: * Initial revision ! 10: * ! 11: * Revision 1.1 1992/07/05 08:32:32 root ! 12: * Initial revision ! 13: * ! 14: * Revision 1.1 1992/05/15 18:38:05 root ! 15: * Initial revision ! 16: * ! 17: * Revision 1.1 1992/04/02 03:23:13 drew ! 18: * Initial revision ! 19: * ! 20: * Revision 1.3 1992/01/27 14:46:29 tthorn ! 21: * *** empty log message *** ! 22: * ! 23: */ ! 24: ! 25: #include <linux/types.h> ! 26: ! 27: #undef STATMASK ! 28: #undef CONTROL ! 29: ! 30: #define io_base 0x350 ! 31: #define intr_chan 15 ! 32: #define dma_chan 6 ! 33: #define OGMB_CNT 8 ! 34: #define ICMB_CNT 8 ! 35: ! 36: /* I/O Port interface 4.2 */ ! 37: /* READ */ ! 38: #define ASC_STAT io_base ! 39: #define INT_IM 0x80 /* Interrupt Image Flag */ ! 40: #define CMD_RDY 0x40 /* Command Port Ready */ ! 41: #define CMD_REJ 0x20 /* Command Port Byte Rejected */ ! 42: #define ASC_INI 0x10 /* ASC Initialized Flag */ ! 43: #define STATMASK 0xf0 /* The lower 4 Bytes are reserved */ ! 44: ! 45: /* This register saves two purposes ! 46: * Diagnostics error ! 47: * Interrupt Status ! 48: */ ! 49: #define INTR_STAT ASC_STAT+1 ! 50: #define ANYINTR 0x80 /* Mailbox Service possible/required */ ! 51: #define IMB 0x40 /* 1 Incoming / 0 Outgoing */ ! 52: #define MBMASK 0x3f ! 53: /* if MSB is zero, the content of the lower ones keeps Diagnostic State * ! 54: * 00 Power-on, no diagnostics executed ! 55: * 01 No diagnostic Error Occured ! 56: * 02 RAM Failed ! 57: * 03 FIFO R/W Failed ! 58: * ... ! 59: */ ! 60: ! 61: /* WRITE */ ! 62: #define COMMAND ASC_STAT ! 63: ! 64: #define INTR_ACK ASC_STAT+1 ! 65: ! 66: ! 67: #define CONTROL ASC_STAT+2 ! 68: #define INT_EN 0x08 /* Interrupt Enable */ ! 69: #define DMA_EN 0x04 /* DMA Enable */ ! 70: #define SCSI_RES 0x02 /* SCSI Reset */ ! 71: #define ASC_RES 0x01 /* ASC Reset */ ! 72: ! 73: /* The DMA-Controller */ ! 74: #define DMA_MODE_REG 0xd6 ! 75: #define DMA_MASK_REG 0xd4 ! 76: #define S_DMA_MSK 0x04 ! 77: #define DMA_CH 0x02 ! 78: #define CASCADE 0xc0 ! 79: ! 80: /* Mailbox Definition 5.3 */ ! 81: ! 82: /* These belong in scsi.h also */ ! 83: #undef any2scsi ! 84: #define any2scsi(up, p) \ ! 85: (up)[0] = (((long)(p)) >> 16); \ ! 86: (up)[1] = ((long)(p)) >> 8; \ ! 87: (up)[2] = ((long)(p)); ! 88: ! 89: #define scsi2int(up) ( (((long)*(up)) << 16) + (((long)(up)[1]) << 8) + ((long)(up)[2]) ) ! 90: ! 91: #define xany2scsi(up, p) \ ! 92: (up)[0] = ((long)(p)) >> 24; \ ! 93: (up)[1] = ((long)(p)) >> 16; \ ! 94: (up)[2] = ((long)(p)) >> 8; \ ! 95: (up)[3] = ((long)(p)); ! 96: ! 97: #define xscsi2int(up) ( (((long)(up)[0]) << 24) + (((long)(up)[1]) << 16) \ ! 98: + (((long)(up)[2]) << 8) + ((long)(up)[3]) ) ! 99: ! 100: #define MAX_CDB 12 ! 101: #define MAX_SENSE 14 ! 102: ! 103: struct scb { /* Command Control Block 5.4.1 */ ! 104: unchar op; /* Command Control Block Operation Code */ ! 105: unchar idlun; /* op=0,2:Target Id, op=1:Initiator Id */ ! 106: /* Outbound data transfer, length is checked*/ ! 107: /* Inbound data transfer, length is checked */ ! 108: /* Logical Unit Number */ ! 109: unchar scbdata[12]; /* SCSI Command Block */ ! 110: unchar sretstat; /* SCSI Return Status */ ! 111: unchar vue; /* Vendor Unique Error Code */ ! 112: unchar maxdata[3]; /* Maximum Data Transfer Length */ ! 113: unchar dataptr[3]; /* SCSI Data Block Pointer */ ! 114: unchar linkptr[3]; /* Next Command Link Pointer */ ! 115: unchar direc; /* Transfer Direction */ ! 116: unchar reserved2[6]; /* SCSI Command Descriptor Block */ ! 117: /* REQUEST SENSE */ ! 118: }; ! 119: ! 120: int wd7000fasst_detect(int); ! 121: int wd7000fasst_command(unsigned char target, const void *cmnd, void *buff, int bufflen); ! 122: int wd7000fasst_queuecommand(unchar target, const void *cmnd, void *buff, int bufflen, void (*done)(int,int)); ! 123: int wd7000fasst_abort(int); ! 124: char *wd7000fasst_info(void); ! 125: int wd7000fasst_reset(void); ! 126: ! 127: #ifndef NULL ! 128: #define NULL 0 ! 129: #endif ! 130: ! 131: #define WD7000FASST {"Western Digital 7000FASST", wd7000fasst_detect, \ ! 132: wd7000fasst_info, wd7000fasst_command, \ ! 133: wd7000fasst_queuecommand, \ ! 134: wd7000fasst_abort, \ ! 135: wd7000fasst_reset, \ ! 136: 1, 7, 0} ! 137: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.