/* * buslogic.h Copyright (C) 1993, 1994 David B. Gentzel * See buslogic.c for more information. */ #ifndef _BUSLOGIC_H int buslogic_detect(Scsi_Host_Template *); int buslogic_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); int buslogic_abort(Scsi_Cmnd *); const char *buslogic_info(struct Scsi_Host *); int buslogic_reset(Scsi_Cmnd *); int buslogic_biosparam(Disk *, int, int *); #define BUSLOGIC { NULL, NULL, \ "BusLogic", \ buslogic_detect, \ 0, /* no release func */ \ buslogic_info, \ 0, /* no command func */ \ buslogic_queuecommand, \ buslogic_abort, \ buslogic_reset, \ 0, /* slave_attach NYI */ \ buslogic_biosparam, \ 0, /* set by driver */ \ 0, /* set by driver */ \ 0, /* set by driver */ \ 0, /* set by driver */ \ 0, \ 0, /* set by driver */ \ ENABLE_CLUSTERING \ } #ifdef BUSLOGIC_PRIVATE_H /* ??? These don't really belong here */ #ifndef TRUE # define TRUE 1 #endif #ifndef FALSE # define FALSE 0 #endif #define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr)[0]) #define PACKED __attribute__((packed)) #define BD_ABORT 0x0001 #define BD_COMMAND 0x0002 #define BD_DETECT 0x0004 #define BD_ERRORS 0x0008 #define BD_INTERRUPT 0x0010 #define BD_IO 0x0020 #define BD_RESET 0x0040 #define BD_UNDOCUMENTED 0x0080 /* I/O Port interface */ /* READ */ #define STATUS(base) (base) #define DACT 0x80 /* Diagnostic Active */ #define DFAIL 0x40 /* Diagnostic Failure */ #define INREQ 0x20 /* Initialization Required */ #define HARDY 0x10 /* Host Adapter Ready */ #define CPRBSY 0x08 /* Command/Parameter Register Busy */ #define DIRRDY 0x04 /* Data In Register Ready */ /* 0x02 is reserved */ #define CMDINV 0x01 /* Command Invalid */ #define DATA_IN(base) (STATUS(base) + 1) #define INTERRUPT(base) (STATUS(base) + 2) #define INTV 0x80 /* Interrupt Valid */ /* 0x70 are reserved */ #define RSTS 0x08 /* SCSI Reset State */ #define CMDC 0x04 /* Command Complete */ #define MBOR 0x02 /* Mailbox Out Ready */ #define IMBL 0x01 /* Incoming Mailbox Loaded */ #define INTRMASK 0x8F /* This undocumented port returns a bitmask indicating geometry translation. */ #define GEOMETRY(base) (STATUS(base) + 3) #define GEO_GT_1GB 0x80 /* > 1GB under DOS geometry mapping */ /* 0x70 are unknown */ #define GEO_XLATION_S_D1 0x0C /* Disk 1 geometry ("S" models only) */ #define GEO_XLATION_S_D0 0x03 /* Disk 0 geometry ("S" models only) */ /* WRITE */ #define CONTROL(base) STATUS(base) #define RHARD 0x80 /* Hard Reset */ #define RSOFT 0x40 /* Soft Reset */ #define RINT 0x20 /* Interrupt Reset */ #define RSBUS 0x10 /* SCSI Bus Reset */ /* 0x0F are reserved */ #define COMMAND_PARAMETER(base) (STATUS(base) + 1) #define CMD_TSTCMDCINT 0x00 /* Test CMDC Interrupt */ #define CMD_INITMB 0x01 /* Initialize Mailbox */ #define CMD_START_SCSI 0x02 /* Start Mailbox */ #define CMD_START_BIOS 0x03 /* Start BIOS */ #define CMD_INQUIRY 0x04 /* Inquire Board ID */ #define CMD_ENBOMBRINT 0x05 /* Enable OMBR Interrupt */ #define CMD_SETSELTIMOUT 0x06 /* Set SCSI Selection Time-Out */ #define CMD_BUSON_TIME 0x07 /* Set Bus-On Time */ #define CMD_BUSOFF_TIME 0x08 /* Set Bus-Off Time */ #define CMD_BUSXFR_RATE 0x09 /* Set Bus Transfer Rate */ #define CMD_INQ_DEVICES 0x0A /* Inquire Installed Devices */ #define CMD_RETCONF 0x0B /* Return Configuration */ #define CMD_TARGET_MODE 0x0C /* Set Target Mode */ #define CMD_INQ_SETUP_INFO 0x0D /* Inquire Set-up Information */ #define CMD_WRITE_LCL_RAM 0x1A /* Write Adapter Local RAM */ #define CMD_READ_LCL_RAM 0x1B /* Read Adapter Local RAM */ #define CMD_WRITE_BM_FIFO 0x1C /* Write Bus Master Chip FIFO */ #define CMD_READ_BM_FIFO 0x1D /* Read Bus Master Chip FIFO */ #define CMD_ECHO 0x1F /* Echo Data Byte */ #define CMD_HA_DIAG 0x20 /* Host Adapter Diagnostic */ #define CMD_HA_OPTIONS 0x21 /* Host Adapter Options */ #define CMD_INITEXTMB 0x81 /* Initialize Extended Mailbox */ #define CMD_VER_NO_LAST 0x84 /* Version Number Last Byte (undocumented) */ #define CMD_VER_NO_LETTER 0x85 /* Version Number One Letter (undocumented) */ #define CMD_RET_MODEL_NO 0x8B /* Return Model Number (undocumented) */ #define CMD_INQEXTSETUP 0x8D /* Inquire Extended Set-up Information */ #define CMD_ROUND_ROBIN 0x8F /* Enable strict vs. half-assed round-robin mailbox filling (undocumented) */ #define CMD_READ_FW_LCL_RAM 0x91/* Read Firmware Local RAM (undocumented) */ #define CMD_WRITE_INQ_BUF 0x9A /* Write Inquiry Data Buffer (Target Mode Only) */ #define CMD_READ_INQ_BUF 0x9B /* Read Inquiry Data Buffer (Target Mode Only) */ #define MBX_NOT_IN_USE 0x00 #define MBX_ACTION_START 0x01 #define MBX_ACTION_ABORT 0x02 #define MBX_COMPLETION_OK 0x01 #define MBX_COMPLETION_ABORTED 0x02 #define MBX_COMPLETION_NOT_FOUND 0x03 #define MBX_COMPLETION_ERROR 0x04 /* Mailbox Definition */ struct mailbox { void *ccbptr; /* lsb, ..., msb */ unsigned char btstat; unsigned char sdstat; unsigned char reserved; unsigned char status; /* Command/Status */ }; /* This is used with scatter-gather */ struct chain { unsigned long datalen; /* Size of this part of chain */ void *dataptr; /* Location of data */ }; #define MAX_CDB 12 struct ccb { /* Command Control Block */ unsigned char op; /* Command Control Block Operation Code */ unsigned char dir; unsigned char cdblen; /* SCSI Command Length */ unsigned char rsalen; /* Request Sense Allocation Length/Disable */ unsigned long datalen; /* Data Length (msb, ..., lsb) */ void *dataptr; /* Data Pointer */ unsigned char reserved[2]; unsigned char hastat; /* Host Adapter Status (HASTAT) */ unsigned char tarstat; /* Target Device Status */ unsigned char id; unsigned char lun; unsigned char cdb[MAX_CDB]; unsigned char ccbcontrol; unsigned char commlinkid; /* Command Linking Identifier */ void *linkptr; /* Link Pointer */ void *senseptr; }; #define CCB_OP_INIT 0x00 /* Initiator CCB */ #define CCB_OP_TARG 0x01 /* Target CCB */ #define CCB_OP_INIT_SG 0x02 /* Initiator CCB with scatter-gather */ #define CCB_OP_INIT_R 0x03 /* Initiator CCB with residual data length returned */ #define CCB_OP_INIT_SG_R 0x04 /* Initiator CCB with scatter-gather and residual data length returned */ #define CCB_OP_BUS_RESET 0x81 /* SCSI bus device reset */ #endif #endif