aboutsummaryrefslogtreecommitdiff
path: root/drivers/scsi/FlashPoint.c
diff options
context:
space:
mode:
authorAlexey Dobriyan <adobriyan@gmail.com>2006-03-08 00:14:35 -0800
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-03-12 09:18:15 -0600
commit5c04a7b8981f2855869bf04c881553135445d701 (patch)
tree536192a7b3e15523e0a0aecbd629be27404f2b10 /drivers/scsi/FlashPoint.c
parent13e6851aa1e8f7db0e9f0cc8567394a9fe451357 (diff)
[SCSI] drivers/scsi/FlashPoint.c: Lindent
It's much, much more readable now. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/FlashPoint.c')
-rw-r--r--drivers/scsi/FlashPoint.c9190
1 files changed, 4490 insertions, 4700 deletions
diff --git a/drivers/scsi/FlashPoint.c b/drivers/scsi/FlashPoint.c
index 37ee2cb60d2..ce49fbcafbb 100644
--- a/drivers/scsi/FlashPoint.c
+++ b/drivers/scsi/FlashPoint.c
@@ -15,74 +15,47 @@
*/
-
#include <linux/config.h>
-
#ifndef CONFIG_SCSI_OMIT_FLASHPOINT
-
#define MAX_CARDS 8
#undef BUSTYPE_PCI
-
-
-
-
-
-
-
-
#define CRCMASK 0xA001
-
-
#define FAILURE 0xFFFFFFFFL
-
-
-
-
-
-
-
-
-
-#define BIT(x) ((unsigned char)(1<<(x))) /* single-bit mask in bit position x */
-#define BITW(x) ((unsigned short)(1<<(x))) /* single-bit mask in bit position x */
-
-
+#define BIT(x) ((unsigned char)(1<<(x))) /* single-bit mask in bit position x */
+#define BITW(x) ((unsigned short)(1<<(x))) /* single-bit mask in bit position x */
struct sccb;
-typedef void (*CALL_BK_FN)(struct sccb *);
-
+typedef void (*CALL_BK_FN) (struct sccb *);
struct sccb_mgr_info {
- unsigned long si_baseaddr;
- unsigned char si_present;
- unsigned char si_intvect;
- unsigned char si_id;
- unsigned char si_lun;
- unsigned short si_fw_revision;
- unsigned short si_per_targ_init_sync;
- unsigned short si_per_targ_fast_nego;
- unsigned short si_per_targ_ultra_nego;
- unsigned short si_per_targ_no_disc;
- unsigned short si_per_targ_wide_nego;
- unsigned short si_flags;
- unsigned char si_card_family;
- unsigned char si_bustype;
- unsigned char si_card_model[3];
- unsigned char si_relative_cardnum;
- unsigned char si_reserved[4];
- unsigned long si_OS_reserved;
- unsigned char si_XlatInfo[4];
- unsigned long si_reserved2[5];
- unsigned long si_secondary_range;
+ unsigned long si_baseaddr;
+ unsigned char si_present;
+ unsigned char si_intvect;
+ unsigned char si_id;
+ unsigned char si_lun;
+ unsigned short si_fw_revision;
+ unsigned short si_per_targ_init_sync;
+ unsigned short si_per_targ_fast_nego;
+ unsigned short si_per_targ_ultra_nego;
+ unsigned short si_per_targ_no_disc;
+ unsigned short si_per_targ_wide_nego;
+ unsigned short si_flags;
+ unsigned char si_card_family;
+ unsigned char si_bustype;
+ unsigned char si_card_model[3];
+ unsigned char si_relative_cardnum;
+ unsigned char si_reserved[4];
+ unsigned long si_OS_reserved;
+ unsigned char si_XlatInfo[4];
+ unsigned long si_reserved2[5];
+ unsigned long si_secondary_range;
};
-
-
#define SCSI_PARITY_ENA 0x0001
#define LOW_BYTE_TERM 0x0010
#define HIGH_BYTE_TERM 0x0020
@@ -95,97 +68,82 @@ struct sccb_mgr_info {
#define FLAG_SCAM_ENABLED 0x0080
#define FLAG_SCAM_LEVEL2 0x0100
-
-
-
#define HARPOON_FAMILY 0x02
-
-
/* SCCB struct used for both SCCB and UCB manager compiles!
* The UCB Manager treats the SCCB as it's 'native hardware structure'
*/
-
#pragma pack(1)
struct sccb {
- unsigned char OperationCode;
- unsigned char ControlByte;
- unsigned char CdbLength;
- unsigned char RequestSenseLength;
- unsigned long DataLength;
- unsigned long DataPointer;
- unsigned char CcbRes[2];
- unsigned char HostStatus;
- unsigned char TargetStatus;
- unsigned char TargID;
- unsigned char Lun;
- unsigned char Cdb[12];
- unsigned char CcbRes1;
- unsigned char Reserved1;
- unsigned long Reserved2;
- unsigned long SensePointer;
-
-
- CALL_BK_FN SccbCallback; /* VOID (*SccbCallback)(); */
- unsigned long SccbIOPort; /* Identifies board base port */
- unsigned char SccbStatus;
- unsigned char SCCBRes2;
- unsigned short SccbOSFlags;
-
-
- unsigned long Sccb_XferCnt; /* actual transfer count */
- unsigned long Sccb_ATC;
- unsigned long SccbVirtDataPtr; /* virtual addr for OS/2 */
- unsigned long Sccb_res1;
- unsigned short Sccb_MGRFlags;
- unsigned short Sccb_sgseg;
- unsigned char Sccb_scsimsg; /* identify msg for selection */
- unsigned char Sccb_tag;
- unsigned char Sccb_scsistat;
- unsigned char Sccb_idmsg; /* image of last msg in */
- struct sccb * Sccb_forwardlink;
- struct sccb * Sccb_backlink;
- unsigned long Sccb_savedATC;
- unsigned char Save_Cdb[6];
- unsigned char Save_CdbLen;
- unsigned char Sccb_XferState;
- unsigned long Sccb_SGoffset;
- };
-
+ unsigned char OperationCode;
+ unsigned char ControlByte;
+ unsigned char CdbLength;
+ unsigned char RequestSenseLength;
+ unsigned long DataLength;
+ unsigned long DataPointer;
+ unsigned char CcbRes[2];
+ unsigned char HostStatus;
+ unsigned char TargetStatus;
+ unsigned char TargID;
+ unsigned char Lun;
+ unsigned char Cdb[12];
+ unsigned char CcbRes1;
+ unsigned char Reserved1;
+ unsigned long Reserved2;
+ unsigned long SensePointer;
+
+ CALL_BK_FN SccbCallback; /* VOID (*SccbCallback)(); */
+ unsigned long SccbIOPort; /* Identifies board base port */
+ unsigned char SccbStatus;
+ unsigned char SCCBRes2;
+ unsigned short SccbOSFlags;
+
+ unsigned long Sccb_XferCnt; /* actual transfer count */
+ unsigned long Sccb_ATC;
+ unsigned long SccbVirtDataPtr; /* virtual addr for OS/2 */
+ unsigned long Sccb_res1;
+ unsigned short Sccb_MGRFlags;
+ unsigned short Sccb_sgseg;
+ unsigned char Sccb_scsimsg; /* identify msg for selection */
+ unsigned char Sccb_tag;
+ unsigned char Sccb_scsistat;
+ unsigned char Sccb_idmsg; /* image of last msg in */
+ struct sccb *Sccb_forwardlink;
+ struct sccb *Sccb_backlink;
+ unsigned long Sccb_savedATC;
+ unsigned char Save_Cdb[6];
+ unsigned char Save_CdbLen;
+ unsigned char Sccb_XferState;
+ unsigned long Sccb_SGoffset;
+};
#pragma pack()
-
-
#define SCATTER_GATHER_COMMAND 0x02
#define RESIDUAL_COMMAND 0x03
#define RESIDUAL_SG_COMMAND 0x04
#define RESET_COMMAND 0x81
+#define F_USE_CMD_Q 0x20 /*Inidcates TAGGED command. */
+#define TAG_TYPE_MASK 0xC0 /*Type of tag msg to send. */
+#define SCCB_DATA_XFER_OUT 0x10 /* Write */
+#define SCCB_DATA_XFER_IN 0x08 /* Read */
-#define F_USE_CMD_Q 0x20 /*Inidcates TAGGED command. */
-#define TAG_TYPE_MASK 0xC0 /*Type of tag msg to send. */
-#define SCCB_DATA_XFER_OUT 0x10 /* Write */
-#define SCCB_DATA_XFER_IN 0x08 /* Read */
-
+#define NO_AUTO_REQUEST_SENSE 0x01 /* No Request Sense Buffer */
-#define NO_AUTO_REQUEST_SENSE 0x01 /* No Request Sense Buffer */
-
-
-#define BUS_FREE_ST 0
+#define BUS_FREE_ST 0
#define SELECT_ST 1
-#define SELECT_BDR_ST 2 /* Select w\ Bus Device Reset */
-#define SELECT_SN_ST 3 /* Select w\ Sync Nego */
-#define SELECT_WN_ST 4 /* Select w\ Wide Data Nego */
-#define SELECT_Q_ST 5 /* Select w\ Tagged Q'ing */
+#define SELECT_BDR_ST 2 /* Select w\ Bus Device Reset */
+#define SELECT_SN_ST 3 /* Select w\ Sync Nego */
+#define SELECT_WN_ST 4 /* Select w\ Wide Data Nego */
+#define SELECT_Q_ST 5 /* Select w\ Tagged Q'ing */
#define COMMAND_ST 6
#define DATA_OUT_ST 7
#define DATA_IN_ST 8
#define DISCONNECT_ST 9
#define ABORT_ST 11
-
#define F_HOST_XFER_DIR 0x01
#define F_ALL_XFERRED 0x02
#define F_SG_XFER 0x04
@@ -193,49 +151,37 @@ struct sccb {
#define F_ODD_BALL_CNT 0x10
#define F_NO_DATA_YET 0x80
-
#define F_STATUSLOADED 0x01
#define F_DEV_SELECTED 0x04
-
-#define SCCB_COMPLETE 0x00 /* SCCB completed without error */
+#define SCCB_COMPLETE 0x00 /* SCCB completed without error */
#define SCCB_DATA_UNDER_RUN 0x0C
-#define SCCB_SELECTION_TIMEOUT 0x11 /* Set SCSI selection timed out */
+#define SCCB_SELECTION_TIMEOUT 0x11 /* Set SCSI selection timed out */
#define SCCB_DATA_OVER_RUN 0x12
-#define SCCB_PHASE_SEQUENCE_FAIL 0x14 /* Target bus phase sequence failure */
-
-#define SCCB_GROSS_FW_ERR 0x27 /* Major problem! */
-#define SCCB_BM_ERR 0x30 /* BusMaster error. */
-#define SCCB_PARITY_ERR 0x34 /* SCSI parity error */
-
-
-
+#define SCCB_PHASE_SEQUENCE_FAIL 0x14 /* Target bus phase sequence failure */
+#define SCCB_GROSS_FW_ERR 0x27 /* Major problem! */
+#define SCCB_BM_ERR 0x30 /* BusMaster error. */
+#define SCCB_PARITY_ERR 0x34 /* SCSI parity error */
#define SCCB_IN_PROCESS 0x00
#define SCCB_SUCCESS 0x01
#define SCCB_ABORT 0x02
#define SCCB_ERROR 0x04
-
-
#define ORION_FW_REV 3110
+#define QUEUE_DEPTH 254+1 /*1 for Normal disconnect 32 for Q'ing. */
-
-#define QUEUE_DEPTH 254+1 /*1 for Normal disconnect 32 for Q'ing. */
-
-#define MAX_MB_CARDS 4 /* Max. no of cards suppoerted on Mother Board */
-
+#define MAX_MB_CARDS 4 /* Max. no of cards suppoerted on Mother Board */
#define MAX_SCSI_TAR 16
#define MAX_LUN 32
#define LUN_MASK 0x1f
-#define SG_BUF_CNT 16 /*Number of prefetched elements. */
-
-#define SG_ELEMENT_SIZE 8 /*Eight byte per element. */
+#define SG_BUF_CNT 16 /*Number of prefetched elements. */
+#define SG_ELEMENT_SIZE 8 /*Eight byte per element. */
#define RD_HARPOON(ioport) inb((u32)ioport)
#define RDW_HARPOON(ioport) inw((u32)ioport)
@@ -244,7 +190,6 @@ struct sccb {
#define WRW_HARPOON(ioport,val) outw((u16)val, (u32)ioport)
#define WR_HARP32(ioport,offset,data) outl(data, (u32)(ioport + offset))
-
#define TAR_SYNC_MASK (BIT(7)+BIT(6))
#define SYNC_TRYING BIT(6)
#define SYNC_SUPPORTED (BIT(7)+BIT(6))
@@ -259,7 +204,6 @@ struct sccb {
#define TAR_ALLOW_DISC BIT(0)
-
#define EE_SYNC_MASK (BIT(0)+BIT(1))
#define EE_SYNC_5MB BIT(0)
#define EE_SYNC_10MB BIT(1)
@@ -267,62 +211,55 @@ struct sccb {
#define EE_WIDE_SCSI BIT(7)
-
-
-
struct sccb_mgr_tar_info {
- struct sccb * TarSelQ_Head;
- struct sccb * TarSelQ_Tail;
- unsigned char TarLUN_CA; /*Contingent Allgiance */
- unsigned char TarTagQ_Cnt;
- unsigned char TarSelQ_Cnt;
- unsigned char TarStatus;
- unsigned char TarEEValue;
- unsigned char TarSyncCtrl;
- unsigned char TarReserved[2]; /* for alignment */
- unsigned char LunDiscQ_Idx[MAX_LUN];
- unsigned char TarLUNBusy[MAX_LUN];
+ struct sccb *TarSelQ_Head;
+ struct sccb *TarSelQ_Tail;
+ unsigned char TarLUN_CA; /*Contingent Allgiance */
+ unsigned char TarTagQ_Cnt;
+ unsigned char TarSelQ_Cnt;
+ unsigned char TarStatus;
+ unsigned char TarEEValue;
+ unsigned char TarSyncCtrl;
+ unsigned char TarReserved[2]; /* for alignment */
+ unsigned char LunDiscQ_Idx[MAX_LUN];
+ unsigned char TarLUNBusy[MAX_LUN];
};
struct nvram_info {
- unsigned char niModel; /* Model No. of card */
- unsigned char niCardNo; /* Card no. */
- unsigned long niBaseAddr; /* Port Address of card */
- unsigned char niSysConf; /* Adapter Configuration byte - Byte 16 of eeprom map */
- unsigned char niScsiConf; /* SCSI Configuration byte - Byte 17 of eeprom map */
- unsigned char niScamConf; /* SCAM Configuration byte - Byte 20 of eeprom map */
- unsigned char niAdapId; /* Host Adapter ID - Byte 24 of eerpom map */
- unsigned char niSyncTbl[MAX_SCSI_TAR / 2]; /* Sync/Wide byte of targets */
- unsigned char niScamTbl[MAX_SCSI_TAR][4]; /* Compressed Scam name string of Targets */
+ unsigned char niModel; /* Model No. of card */
+ unsigned char niCardNo; /* Card no. */
+ unsigned long niBaseAddr; /* Port Address of card */
+ unsigned char niSysConf; /* Adapter Configuration byte - Byte 16 of eeprom map */
+ unsigned char niScsiConf; /* SCSI Configuration byte - Byte 17 of eeprom map */
+ unsigned char niScamConf; /* SCAM Configuration byte - Byte 20 of eeprom map */
+ unsigned char niAdapId; /* Host Adapter ID - Byte 24 of eerpom map */
+ unsigned char niSyncTbl[MAX_SCSI_TAR / 2]; /* Sync/Wide byte of targets */
+ unsigned char niScamTbl[MAX_SCSI_TAR][4]; /* Compressed Scam name string of Targets */
};
-
#define MODEL_LT 1
#define MODEL_DL 2
#define MODEL_LW 3
#define MODEL_DW 4
-
struct sccb_card {
- struct sccb * currentSCCB;
- struct sccb_mgr_info * cardInfo;
-
- unsigned long ioPort;
-
- unsigned short cmdCounter;
- unsigned char discQCount;
- unsigned char tagQ_Lst;
- unsigned char cardIndex;
- unsigned char scanIndex;
- unsigned char globalFlags;
- unsigned char ourId;
- struct nvram_info * pNvRamInfo;
- struct sccb * discQ_Tbl[QUEUE_DEPTH];
-
-};
+ struct sccb *currentSCCB;
+ struct sccb_mgr_info *cardInfo;
+ unsigned long ioPort;
+ unsigned short cmdCounter;
+ unsigned char discQCount;
+ unsigned char tagQ_Lst;
+ unsigned char cardIndex;
+ unsigned char scanIndex;
+ unsigned char globalFlags;
+ unsigned char ourId;
+ struct nvram_info *pNvRamInfo;
+ struct sccb *discQ_Tbl[QUEUE_DEPTH];
+
+};
#define F_TAG_STARTED 0x01
#define F_CONLUN_IO 0x02
@@ -333,12 +270,10 @@ struct sccb_card {
#define F_NEW_SCCB_CMD 0x40
#define F_UPDATE_EEPROM 0x80
-
#define ID_STRING_LENGTH 32
-#define TYPE_CODE0 0x63 /*Level2 Mstr (bits 7-6), */
+#define TYPE_CODE0 0x63 /*Level2 Mstr (bits 7-6), */
-
-#define SLV_TYPE_CODE0 0xA3 /*Priority Bit set (bits 7-6), */
+#define SLV_TYPE_CODE0 0xA3 /*Priority Bit set (bits 7-6), */
#define ASSIGN_ID 0x00
#define SET_P_FLAG 0x01
@@ -351,23 +286,21 @@ struct sccb_card {
#define MISC_CODE 0x14
#define CLR_P_FLAG 0x18
-
-
#define INIT_SELTD 0x01
#define LEVEL2_TAR 0x02
-
-enum scam_id_st { ID0,ID1,ID2,ID3,ID4,ID5,ID6,ID7,ID8,ID9,ID10,ID11,ID12,
- ID13,ID14,ID15,ID_UNUSED,ID_UNASSIGNED,ID_ASSIGNED,LEGACY,
- CLR_PRIORITY,NO_ID_AVAIL };
+enum scam_id_st { ID0, ID1, ID2, ID3, ID4, ID5, ID6, ID7, ID8, ID9, ID10, ID11,
+ ID12,
+ ID13, ID14, ID15, ID_UNUSED, ID_UNASSIGNED, ID_ASSIGNED, LEGACY,
+ CLR_PRIORITY, NO_ID_AVAIL
+};
typedef struct SCCBscam_info {
- unsigned char id_string[ID_STRING_LENGTH];
- enum scam_id_st state;
-
-} SCCBSCAM_INFO;
+ unsigned char id_string[ID_STRING_LENGTH];
+ enum scam_id_st state;
+} SCCBSCAM_INFO;
#define SCSI_REQUEST_SENSE 0x03
#define SCSI_READ 0x08
@@ -377,15 +310,10 @@ typedef struct SCCBscam_info {
#define SCSI_WRITE_EXTENDED 0x2A
#define SCSI_WRITE_AND_VERIFY 0x2E
-
-
#define SSGOOD 0x00
#define SSCHECK 0x02
#define SSQ_FULL 0x28
-
-
-
#define SMCMD_COMP 0x00
#define SMEXT 0x01
#define SMSAVE_DATA_PTR 0x02
@@ -403,26 +331,17 @@ typedef struct SCCBscam_info {
#define SMIDENT 0x80
#define DISC_PRIV 0x40
-
#define SMSYNC 0x01
#define SMWDTR 0x03
#define SM8BIT 0x00
#define SM16BIT 0x01
-#define SMIGNORWR 0x23 /* Ignore Wide Residue */
-
-
-
-
-
-
-
+#define SMIGNORWR 0x23 /* Ignore Wide Residue */
#define SIX_BYTE_CMD 0x06
#define TWELVE_BYTE_CMD 0x0C
#define ASYNC 0x00
-#define MAX_OFFSET 0x0F /* Maxbyteoffset for Sync Xfers */
-
+#define MAX_OFFSET 0x0F /* Maxbyteoffset for Sync Xfers */
#define EEPROM_WD_CNT 256
@@ -437,7 +356,6 @@ typedef struct SCCBscam_info {
#define SCAM_CONFIG 20
#define ADAPTER_SCSI_ID 24
-
#define IGNORE_B_SCAN 32
#define SEND_START_ENA 34
#define DEVICE_ENABLE 36
@@ -452,478 +370,385 @@ typedef struct SCCBscam_info {
#define SYNC_RATE_TBLcd 50
#define SYNC_RATE_TBLef 52
+#define EE_SCAMBASE 256
+#define SCAM_ENABLED BIT(2)
+#define SCAM_LEVEL2 BIT(3)
-#define EE_SCAMBASE 256
-
-
-
- #define SCAM_ENABLED BIT(2)
- #define SCAM_LEVEL2 BIT(3)
-
-
- #define RENEGO_ENA BITW(10)
- #define CONNIO_ENA BITW(11)
- #define GREEN_PC_ENA BITW(12)
-
+#define RENEGO_ENA BITW(10)
+#define CONNIO_ENA BITW(11)
+#define GREEN_PC_ENA BITW(12)
- #define AUTO_RATE_00 00
- #define AUTO_RATE_05 01
- #define AUTO_RATE_10 02
- #define AUTO_RATE_20 03
+#define AUTO_RATE_00 00
+#define AUTO_RATE_05 01
+#define AUTO_RATE_10 02
+#define AUTO_RATE_20 03
- #define WIDE_NEGO_BIT BIT(7)
- #define DISC_ENABLE_BIT BIT(6)
+#define WIDE_NEGO_BIT BIT(7)
+#define DISC_ENABLE_BIT BIT(6)
+#define hp_vendor_id_0 0x00 /* LSB */
+#define ORION_VEND_0 0x4B
+#define hp_vendor_id_1 0x01 /* MSB */
+#define ORION_VEND_1 0x10
- #define hp_vendor_id_0 0x00 /* LSB */
- #define ORION_VEND_0 0x4B
-
- #define hp_vendor_id_1 0x01 /* MSB */
- #define ORION_VEND_1 0x10
+#define hp_device_id_0 0x02 /* LSB */
+#define ORION_DEV_0 0x30
- #define hp_device_id_0 0x02 /* LSB */
- #define ORION_DEV_0 0x30
-
- #define hp_device_id_1 0x03 /* MSB */
- #define ORION_DEV_1 0x81
+#define hp_device_id_1 0x03 /* MSB */
+#define ORION_DEV_1 0x81
/* Sub Vendor ID and Sub Device ID only available in
- Harpoon Version 2 and higher */
-
- #define hp_sub_device_id_0 0x06 /* LSB */
-
-
-
- #define hp_semaphore 0x0C
- #define SCCB_MGR_ACTIVE BIT(0)
- #define TICKLE_ME BIT(1)
- #define SCCB_MGR_PRESENT BIT(3)
- #define BIOS_IN_USE BIT(4)
-
-
-
- #define hp_sys_ctrl 0x0F
-
- #define STOP_CLK BIT(0) /*Turn off BusMaster Clock */
- #define DRVR_RST BIT(1) /*Firmware Reset to 80C15 chip */
- #define HALT_MACH BIT(3) /*Halt State Machine */
- #define HARD_ABORT BIT(4) /*Hard Abort */
-
-
-
-
-
-
-
-
-
- #define hp_host_blk_cnt 0x13
-
- #define XFER_BLK64 0x06 /* 1 1 0 64 byte per block*/
-
- #define BM_THRESHOLD 0x40 /* PCI mode can only xfer 16 bytes*/
-
-
-
- #define hp_int_mask 0x17
-
- #define INT_CMD_COMPL BIT(0) /* DMA command complete */
- #define INT_EXT_STATUS BIT(1) /* Extended Status Set */
+ Harpoon Version 2 and higher */
+#define hp_sub_device_id_0 0x06 /* LSB */
- #define hp_xfer_cnt_lo 0x18
- #define hp_xfer_cnt_hi 0x1A
- #define hp_xfer_cmd 0x1B
+#define hp_semaphore 0x0C
+#define SCCB_MGR_ACTIVE BIT(0)
+#define TICKLE_ME BIT(1)
+#define SCCB_MGR_PRESENT BIT(3)
+#define BIOS_IN_USE BIT(4)
- #define XFER_HOST_DMA 0x00 /* 0 0 0 Transfer Host -> DMA */
- #define XFER_DMA_HOST 0x01 /* 0 0 1 Transfer DMA -> Host */
+#define hp_sys_ctrl 0x0F
+#define STOP_CLK BIT(0) /*Turn off BusMaster Clock */
+#define DRVR_RST BIT(1) /*Firmware Reset to 80C15 chip */
+#define HALT_MACH BIT(3) /*Halt State Machine */
+#define HARD_ABORT BIT(4) /*Hard Abort */
- #define XFER_HOST_AUTO 0x00 /* 0 0 Auto Transfer Size */
+#define hp_host_blk_cnt 0x13
- #define XFER_DMA_8BIT 0x20 /* 0 1 8 BIT Transfer Size */
+#define XFER_BLK64 0x06 /* 1 1 0 64 byte per block */
- #define DISABLE_INT BIT(7) /*Do not interrupt at end of cmd. */
+#define BM_THRESHOLD 0x40 /* PCI mode can only xfer 16 bytes */
- #define HOST_WRT_CMD ((DISABLE_INT + XFER_HOST_DMA + XFER_HOST_AUTO + XFER_DMA_8BIT))
- #define HOST_RD_CMD ((DISABLE_INT + XFER_DMA_HOST + XFER_HOST_AUTO + XFER_DMA_8BIT))
+#define hp_int_mask 0x17
- #define hp_host_addr_lo 0x1C
- #define hp_host_addr_hmi 0x1E
+#define INT_CMD_COMPL BIT(0) /* DMA command complete */
+#define INT_EXT_STATUS BIT(1) /* Extended Status Set */
- #define hp_ee_ctrl 0x22
+#define hp_xfer_cnt_lo 0x18
+#define hp_xfer_cnt_hi 0x1A
+#define hp_xfer_cmd 0x1B
- #define EXT_ARB_ACK BIT(7)
- #define SCSI_TERM_ENA_H BIT(6) /* SCSI high byte terminator */
- #define SEE_MS BIT(5)
- #define SEE_CS BIT(3)
- #define SEE_CLK BIT(2)
- #define SEE_DO BIT(1)
- #define SEE_DI BIT(0)
+#define XFER_HOST_DMA 0x00 /* 0 0 0 Transfer Host -> DMA */
+#define XFER_DMA_HOST 0x01 /* 0 0 1 Transfer DMA -> Host */
- #define EE_READ 0x06
- #define EE_WRITE 0x05
- #define EWEN 0x04
- #define EWEN_ADDR 0x03C0
- #define EWDS 0x04
- #define EWDS_ADDR 0x0000
+#define XFER_HOST_AUTO 0x00 /* 0 0 Auto Transfer Size */
+#define XFER_DMA_8BIT 0x20 /* 0 1 8 BIT Transfer Size */
+#define DISABLE_INT BIT(7) /*Do not interrupt at end of cmd. */
+#define HOST_WRT_CMD ((DISABLE_INT + XFER_HOST_DMA + XFER_HOST_AUTO + XFER_DMA_8BIT))
+#define HOST_RD_CMD ((DISABLE_INT + XFER_DMA_HOST + XFER_HOST_AUTO + XFER_DMA_8BIT))
+#define hp_host_addr_lo 0x1C
+#define hp_host_addr_hmi 0x1E
+#define hp_ee_ctrl 0x22
+#define EXT_ARB_ACK BIT(7)
+#define SCSI_TERM_ENA_H BIT(6) /* SCSI high byte terminator */
+#define SEE_MS BIT(5)
+#define SEE_CS BIT(3)
+#define SEE_CLK BIT(2)
+#define SEE_DO BIT(1)
+#define SEE_DI BIT(0)
- #define hp_bm_ctrl 0x26
+#define EE_READ 0x06
+#define EE_WRITE 0x05
+#define EWEN 0x04
+#define EWEN_ADDR 0x03C0
+#define EWDS 0x04
+#define EWDS_ADDR 0x0000
- #define SCSI_TERM_ENA_L BIT(0) /*Enable/Disable external terminators */
- #define FLUSH_XFER_CNTR BIT(1) /*Flush transfer counter */
- #define FORCE1_XFER BIT(5) /*Always xfer one byte in byte mode */
- #define FAST_SINGLE BIT(6) /*?? */
+#define hp_bm_ctrl 0x26
- #define BMCTRL_DEFAULT (FORCE1_XFER|FAST_SINGLE|SCSI_TERM_ENA_L)
+#define SCSI_TERM_ENA_L BIT(0) /*Enable/Disable external terminators */
+#define FLUSH_XFER_CNTR BIT(1) /*Flush transfer counter */
+#define FORCE1_XFER BIT(5) /*Always xfer one byte in byte mode */
+#define FAST_SINGLE BIT(6) /*?? */
+#define BMCTRL_DEFAULT (FORCE1_XFER|FAST_SINGLE|SCSI_TERM_ENA_L)
- #define hp_sg_addr 0x28
- #define hp_page_ctrl 0x29
+#define hp_sg_addr 0x28
+#define hp_page_ctrl 0x29
- #define SCATTER_EN BIT(0)
- #define SGRAM_ARAM BIT(1)
- #define G_INT_DISABLE BIT(3) /* Enable/Disable all Interrupts */
- #define NARROW_SCSI_CARD BIT(4) /* NARROW/WIDE SCSI config pin */
+#define SCATTER_EN BIT(0)
+#define SGRAM_ARAM BIT(1)
+#define G_INT_DISABLE BIT(3) /* Enable/Disable all Interrupts */
+#define NARROW_SCSI_CARD BIT(4) /* NARROW/WIDE SCSI config pin */
+#define hp_pci_stat_cfg 0x2D
+#define REC_MASTER_ABORT BIT(5) /*received Master abort */
+#define hp_rev_num 0x33
- #define hp_pci_stat_cfg 0x2D
+#define hp_stack_data 0x34
+#define hp_stack_addr 0x35
- #define REC_MASTER_ABORT BIT(5) /*received Master abort */
+#define hp_ext_status 0x36
-
-
-
-
-
-
-
- #define hp_rev_num 0x33
-
-
- #define hp_stack_data 0x34
- #define hp_stack_addr 0x35
-
- #define hp_ext_status 0x36
-
- #define BM_FORCE_OFF BIT(0) /*Bus Master is forced to get off */
- #define PCI_TGT_ABORT BIT(0) /*PCI bus master transaction aborted */
- #define PCI_DEV_TMOUT BIT(1) /*PCI Device Time out */
- #define CMD_ABORTED BIT(4) /*Command aborted */
- #define BM_PARITY_ERR BIT(5) /*parity error on data received */
- #define PIO_OVERRUN BIT(6) /*Slave data overrun */
- #define BM_CMD_BUSY BIT(7) /*Bus master transfer command busy */
- #define BAD_EXT_STATUS (BM_FORCE_OFF | PCI_DEV_TMOUT | CMD_ABORTED | \
+#define BM_FORCE_OFF BIT(0) /*Bus Master is forced to get off */
+#define PCI_TGT_ABORT BIT(0) /*PCI bus master transaction aborted */
+#define PCI_DEV_TMOUT BIT(1) /*PCI Device Time out */
+#define CMD_ABORTED BIT(4) /*Command aborted */
+#define BM_PARITY_ERR BIT(5) /*parity error on data received */
+#define PIO_OVERRUN BIT(6) /*Slave data overrun */
+#define BM_CMD_BUSY BIT(7) /*Bus master transfer command busy */
+#define BAD_EXT_STATUS (BM_FORCE_OFF | PCI_DEV_TMOUT | CMD_ABORTED | \
BM_PARITY_ERR | PIO_OVERRUN)
- #define hp_int_status 0x37
-
- #define EXT_STATUS_ON BIT(1) /*Extended status is valid */
- #define SCSI_INTERRUPT BIT(2) /*Global indication of a SCSI int. */
- #define INT_ASSERTED BIT(5) /* */
-
-
- #define hp_fifo_cnt 0x38
-
-
-
-
- #define hp_intena 0x40
-
- #define RESET BITW(7)
- #define PROG_HLT BITW(6)
- #define PARITY BITW(5)
- #define FIFO BITW(4)
- #define SEL BITW(3)
- #define SCAM_SEL BITW(2)
- #define RSEL BITW(1)
- #define TIMEOUT BITW(0)
- #define BUS_FREE BITW(15)
- #define XFER_CNT_0 BITW(14)
- #define PHASE BITW(13)
- #define IUNKWN BITW(12)
- #define ICMD_COMP BITW(11)
- #define ITICKLE BITW(10)
- #define IDO_STRT BITW(9)
- #define ITAR_DISC BITW(8)
- #define AUTO_INT (BITW(12)+BITW(11)+BITW(10)+BITW(9)+BITW(8))
- #define CLR_ALL_INT 0xFFFF
- #define CLR_ALL_INT_1 0xFF00
-
- #define hp_intstat 0x42
-
- #define hp_scsisig 0x44
-
- #define SCSI_SEL BIT(7)
- #define SCSI_BSY BIT(6)
- #define SCSI_REQ BIT(5)
- #define SCSI_ACK BIT(4)
- #define SCSI_ATN BIT(3)
- #define SCSI_CD BIT(2)
- #define SCSI_MSG BIT(1)
- #define SCSI_IOBIT BIT(0)
-
- #define S_SCSI_PHZ (BIT(2)+BIT(1)+BIT(0))
- #define S_MSGO_PH (BIT(2)+BIT(1) )
- #define S_MSGI_PH (BIT(2)+BIT(1)+BIT(0))
- #define S_DATAI_PH ( BIT(0))
- #define S_DATAO_PH 0x00
- #define S_ILL_PH ( BIT(1) )
-
- #define hp_scsictrl_0 0x45
+#define hp_int_status 0x37
+
+#define EXT_STATUS_ON BIT(1) /*Extended status is valid */
+#define SCSI_INTERRUPT BIT(2) /*Global indication of a SCSI int. */
+#define INT_ASSERTED BIT(5) /* */
+
+#define hp_fifo_cnt 0x38
+
+#define hp_intena 0x40
+
+#define RESET BITW(7)
+#define PROG_HLT BITW(6)
+#define PARITY BITW(5)
+#define FIFO BITW(4)
+#define SEL BITW(3)
+#define SCAM_SEL BITW(2)
+#define RSEL BITW(1)
+#define TIMEOUT BITW(0)
+#define BUS_FREE BITW(15)
+#define XFER_CNT_0 BITW(14)
+#define PHASE BITW(13)
+#define IUNKWN BITW(12)
+#define ICMD_COMP BITW(11)
+#define ITICKLE BITW(10)
+#define IDO_STRT BITW(9)
+#define ITAR_DISC BITW(8)
+#define AUTO_INT (BITW(12)+BITW(11)+BITW(10)+BITW(9)+BITW(8))
+#define CLR_ALL_INT 0xFFFF
+#define CLR_ALL_INT_1 0xFF00
+
+#define hp_intstat 0x42
+
+#define hp_scsisig 0x44
+
+#define SCSI_SEL BIT(7)
+#define SCSI_BSY BIT(6)
+#define SCSI_REQ BIT(5)
+#define SCSI_ACK BIT(4)
+#define SCSI_ATN BIT(3)
+#define SCSI_CD BIT(2)
+#define SCSI_MSG BIT(1)
+#define SCSI_IOBIT BIT(0)
+
+#define S_SCSI_PHZ (BIT(2)+BIT(1)+BIT(0))
+#define S_MSGO_PH (BIT(2)+BIT(1) )
+#define S_MSGI_PH (BIT(2)+BIT(1)+BIT(0))
+#define S_DATAI_PH ( BIT(0))
+#define S_DATAO_PH 0x00
+#define S_ILL_PH ( BIT(1) )
+
+#define hp_scsictrl_0 0x45
+
+#define SEL_TAR BIT(6)
+#define ENA_ATN BIT(4)
+#define ENA_RESEL BIT(2)
+#define SCSI_RST BIT(1)
+#define ENA_SCAM_SEL BIT(0)
- #define SEL_TAR BIT(6)
- #define ENA_ATN BIT(4)
- #define ENA_RESEL BIT(2)
- #define SCSI_RST BIT(1)
- #define ENA_SCAM_SEL BIT(0)
+#define hp_portctrl_0 0x46
+#define SCSI_PORT BIT(7)
+#define SCSI_INBIT BIT(6)
+#define DMA_PORT BIT(5)
+#define DMA_RD BIT(4)
+#define HOST_PORT BIT(3)
+#define HOST_WRT BIT(2)
+#define SCSI_BUS_EN BIT(1)
+#define START_TO BIT(0)
+#define hp_scsireset 0x47
- #define hp_portctrl_0 0x46
+#define SCSI_INI BIT(6)
+#define SCAM_EN BIT(5)
+#define DMA_RESET BIT(3)
+#define HPSCSI_RESET BIT(2)
+#define PROG_RESET BIT(1)
+#define FIFO_CLR BIT(0)
- #define SCSI_PORT BIT(7)
- #define SCSI_INBIT BIT(6)
- #define DMA_PORT BIT(5)
- #define DMA_RD BIT(4)
- #define HOST_PORT BIT(3)
- #define HOST_WRT BIT(2)
- #define SCSI_BUS_EN BIT(1)
- #define START_TO BIT(0)
+#define hp_xfercnt_0 0x48
+#define hp_xfercnt_2 0x4A
- #define hp_scsireset 0x47
+#define hp_fifodata_0 0x4C
+#define hp_addstat 0x4E
- #define SCSI_INI BIT(6)
- #define SCAM_EN BIT(5)
- #define DMA_RESET BIT(3)
- #define HPSCSI_RESET BIT(2)
- #define PROG_RESET BIT(1)
- #define FIFO_CLR BIT(0)
+#define SCAM_TIMER BIT(7)
+#define SCSI_MODE8 BIT(3)
+#define SCSI_PAR_ERR BIT(0)
- #define hp_xfercnt_0 0x48
- #define hp_xfercnt_2 0x4A
+#define hp_prgmcnt_0 0x4F
- #define hp_fifodata_0 0x4C
- #define hp_addstat 0x4E
+#define hp_selfid_0 0x50
+#define hp_selfid_1 0x51
+#define hp_arb_id 0x52
- #define SCAM_TIMER BIT(7)
- #define SCSI_MODE8 BIT(3)
- #define SCSI_PAR_ERR BIT(0)
+#define hp_select_id 0x53
- #define hp_prgmcnt_0 0x4F
+#define hp_synctarg_base 0x54
+#define hp_synctarg_12 0x54
+#define hp_synctarg_13 0x55
+#define hp_synctarg_14 0x56
+#define hp_synctarg_15 0x57
+#define hp_synctarg_8 0x58
+#define hp_synctarg_9 0x59
+#define hp_synctarg_10 0x5A
+#define hp_synctarg_11 0x5B
- #define hp_selfid_0 0x50
- #define hp_selfid_1 0x51
- #define hp_arb_id 0x52
+#define hp_synctarg_4 0x5C
+#define hp_synctarg_5 0x5D
+#define hp_synctarg_6 0x5E
+#define hp_synctarg_7 0x5F
+#define hp_synctarg_0 0x60
+#define hp_synctarg_1 0x61
+#define hp_synctarg_2 0x62
+#define hp_synctarg_3 0x63
- #define hp_select_id 0x53
+#define NARROW_SCSI BIT(4)
+#define DEFAULT_OFFSET 0x0F
+#define hp_autostart_0 0x64
+#define hp_autostart_1 0x65
+#define hp_autostart_3 0x67
- #define hp_synctarg_base 0x54
- #define hp_synctarg_12 0x54
- #define hp_synctarg_13 0x55
- #define hp_synctarg_14 0x56
- #define hp_synctarg_15 0x57
+#define AUTO_IMMED BIT(5)
+#define SELECT BIT(6)
+#define END_DATA (BIT(7)+BIT(6))
- #define hp_synctarg_8 0x58
- #define hp_synctarg_9 0x59
- #define hp_synctarg_10 0x5A
- #define hp_synctarg_11 0x5B
+#define hp_gp_reg_0 0x68
+#define hp_gp_reg_1 0x69
+#define hp_gp_reg_3 0x6B
- #define hp_synctarg_4 0x5C
- #define hp_synctarg_5 0x5D
- #define hp_synctarg_6 0x5E
- #define hp_synctarg_7 0x5F
+#define hp_seltimeout 0x6C
- #define hp_synctarg_0 0x60
- #define hp_synctarg_1 0x61
- #define hp_synctarg_2 0x62
- #define hp_synctarg_3 0x63
+#define TO_4ms 0x67 /* 3.9959ms */
- #define NARROW_SCSI BIT(4)
- #define DEFAULT_OFFSET 0x0F
+#define TO_5ms 0x03 /* 4.9152ms */
+#define TO_10ms 0x07 /* 11.xxxms */
+#define TO_250ms 0x99 /* 250.68ms */
+#define TO_290ms 0xB1 /* 289.99ms */
- #define hp_autostart_0 0x64
- #define hp_autostart_1 0x65
- #define hp_autostart_3 0x67
+#define hp_clkctrl_0 0x6D
+#define PWR_DWN BIT(6)
+#define ACTdeassert BIT(4)
+#define CLK_40MHZ (BIT(1) + BIT(0))
+#define CLKCTRL_DEFAULT (ACTdeassert | CLK_40MHZ)
- #define AUTO_IMMED BIT(5)
- #define SELECT BIT(6)
- #define END_DATA (BIT(7)+BIT(6))
+#define hp_fiforead 0x6E
+#define hp_fifowrite 0x6F
- #define hp_gp_reg_0 0x68
- #define hp_gp_reg_1 0x69
- #define hp_gp_reg_3 0x6B
+#define hp_offsetctr 0x70
+#define hp_xferstat 0x71
- #define hp_seltimeout 0x6C
+#define FIFO_EMPTY BIT(6)
+#define hp_portctrl_1 0x72
- #define TO_4ms 0x67 /* 3.9959ms */
+#define CHK_SCSI_P BIT(3)
+#define HOST_MODE8 BIT(0)
- #define TO_5ms 0x03 /* 4.9152ms */
- #define TO_10ms 0x07 /* 11.xxxms */
- #define TO_250ms 0x99 /* 250.68ms */
- #define TO_290ms 0xB1 /* 289.99ms */
+#define hp_xfer_pad 0x73
- #define hp_clkctrl_0 0x6D
+#define ID_UNLOCK BIT(3)
- #define PWR_DWN BIT(6)
- #define ACTdeassert BIT(4)
- #define CLK_40MHZ (BIT(1) + BIT(0))
+#define hp_scsidata_0 0x74