summaryrefslogtreecommitdiffstats
path: root/sys/dev/trm/trm.h
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2003-02-20 03:21:34 +0000
committercognet <cognet@FreeBSD.org>2003-02-20 03:21:34 +0000
commitb2dfc0f868321e1038a6b7d8a984dea305af38db (patch)
tree76d44c8de3c0c5b634c2100593df51c54548d13c /sys/dev/trm/trm.h
parent78e7b5f0c627b0eaddebab0af4773e0356c27b3b (diff)
downloadFreeBSD-src-b2dfc0f868321e1038a6b7d8a984dea305af38db.zip
FreeBSD-src-b2dfc0f868321e1038a6b7d8a984dea305af38db.tar.gz
Merge diff between rev 1.08 and rev 1.11 of Tekram driver, this notably add
support for Tekram DC395U2W cards. Add a fix submitted by joerg@ to correctly report some errors to CAM. Use bus_dma instead of the remaining vtophys().
Diffstat (limited to 'sys/dev/trm/trm.h')
-rw-r--r--sys/dev/trm/trm.h131
1 files changed, 69 insertions, 62 deletions
diff --git a/sys/dev/trm/trm.h b/sys/dev/trm/trm.h
index 1013db3..ba3fc44 100644
--- a/sys/dev/trm/trm.h
+++ b/sys/dev/trm/trm.h
@@ -75,8 +75,8 @@ struct trm_target_info {
/*;----------------------Segment Entry------------------------------------*/
typedef struct _SGentry {
- u_long address;
- u_long length;
+ u_int32_t address;
+ u_int32_t length;
} SGentry, *PSEG;
/*
*-----------------------------------------------------------------------
@@ -84,14 +84,14 @@ typedef struct _SGentry {
*-----------------------------------------------------------------------
*/
-#define MAX_ADAPTER_NUM 4
-#define MAX_DEVICES 16
-#define MAX_SG_LISTENTRY 32
-#define MAX_TARGETS 16
-#define MAX_TAGS_CMD_QUEUE 32 /* MAX_CMD_QUEUE 20*/
-#define MAX_CMD_PER_LUN 32
-#define MAX_SRB_CNT MAX_CMD_PER_LUN*4
-#define MAX_START_JOB MAX_CMD_PER_LUN*4
+#define TRM_MAX_ADAPTER_NUM 4
+#define TRM_MAX_DEVICES 16
+#define TRM_MAX_SG_LISTENTRY 32
+#define TRM_MAX_TARGETS 16
+#define TRM_MAX_TAGS_CMD_QUEUE 256 /* MAX_CMD_QUEUE 20*/
+#define TRM_MAX_CMD_PER_LUN 32
+#define TRM_MAX_SRB_CNT 256
+#define TRM_MAX_START_JOB 256
#define TRM_NSEG (btoc(MAXPHYS) + 1)
#define TRM_MAXTRANSFER_SIZE 0xFFFFFF /* restricted by 24 bit counter */
#define PAGELEN 4096
@@ -142,19 +142,23 @@ struct _SRB {
u_int8_t CmdBlock[12];
u_long Segment0[2];
u_long Segment1[2];
- u_long PhysSRB;
struct _SRB *pNextSRB;
struct _DCB *pSRBDCB;
- SGentry SegmentX[MAX_SG_LISTENTRY];
SGentry SgSenseTemp;
+
+ PSEG pSRBSGL; /* scatter gather list */
+
+ u_int32_t SRBSGPhyAddr; /* a segment starting address */
+ u_int32_t SRBTotalXferLength;
+
/*
* CAM ccb
*/
- union ccb *pccb;
+ union ccb *pccb;
+ bus_dma_tag_t parent_dmat;
+ bus_dma_tag_t sg_dmat;
+ bus_dmamap_t sg_dmamap;
bus_dmamap_t dmamap;
- PSEG SRBSGListPointer; /* scatter gather list */
- u_long SRBTotalXferLength;
- u_long SRBSGPhyAddr; /* a segment starting address */
u_int16_t SRBState;
u_int8_t * pMsgPtr;
@@ -170,8 +174,6 @@ struct _SRB {
u_int8_t SRBStatus;
u_int8_t RetryCnt;
- /* b0-AutoReqSense,b6-Read,b7-write */
- /* b4-settimeout,b5-Residual valid */
u_int8_t SRBFlag;
u_int8_t ScsiCmdLen;
u_int8_t ScsiPhase;
@@ -186,25 +188,19 @@ typedef struct _SRB TRM_SRB, *PSRB;
*/
struct _DCB
{
- struct _DCB *pNextDCB;
- struct _ACB *pDCBACB;
-
PSRB pWaitingSRB;
- PSRB pWaitLastSRB;
+ PSRB pWaitingLastSRB;
PSRB pGoingSRB;
PSRB pGoingLastSRB;
PSRB pActiveSRB;
- PSRB RevSRB;
-
- u_long TagMask;
u_int16_t GoingSRBCnt;
- u_int16_t WaitSRBCnt;
+ u_int16_t MaxActiveCommandCnt;
- u_int8_t TargetID; /*; SCSI Target ID (SCSI Only) */
- u_int8_t TargetLUN; /*; SCSI Log. Unit (SCSI Only) */
+ u_int8_t TargetID; /*; SCSI Target ID (SCSI Only) */
+ u_int8_t TargetLUN; /*; SCSI Log. Unit (SCSI Only) */
u_int8_t DCBFlag;
u_int8_t DevType;
@@ -213,14 +209,14 @@ struct _DCB
u_int8_t SyncPeriod; /* for reg. */
u_int8_t SyncOffset; /* for reg. and nego.(low nibble) */
- struct trm_target_info tinfo; /* 10 bytes */
-
- u_int16_t MaxCommand;
u_int8_t DevMode;
u_int8_t AdpMode;
u_int8_t IdentifyMsg;
- u_int8_t Reserved[3]; /*for dword alignment */
+ u_int8_t DCBstatus; /* DCB status */
+ /*u_int8_t Reserved[3]; for dword alignment */
+ struct trm_target_info tinfo; /* 10 bytes */
+ struct _DCB *pNextDCB;
};
typedef struct _DCB TRM_DCB, *PDCB;
@@ -231,11 +227,18 @@ typedef struct _DCB TRM_DCB, *PDCB;
*/
struct _ACB
{
+ device_t dev;
+
bus_space_tag_t tag;
bus_space_handle_t bsh;
+ bus_dma_tag_t parent_dmat;
bus_dma_tag_t buffer_dmat; /* dmat for buffer I/O */
- struct _ACB *pNextACB;
-
+ bus_dma_tag_t srb_dmat;
+ bus_dma_tag_t sense_dmat; /* dmat for sense buffer */
+ bus_dmamap_t sense_dmamap;
+ bus_dmamap_t srb_dmamap;
+ bus_addr_t sense_busaddr;
+ struct scsi_sense_data *sense_buffers;
struct resource *iores, *irq;
void *ih;
/*
@@ -244,27 +247,20 @@ struct _ACB
struct cam_sim *psim;
struct cam_path *ppath;
- TRM_SRB SRB_array[MAX_SRB_CNT]; /* */
-
- TRM_SRB TmpSRB;
-
- PSRB pTmpSRB;
- PSRB RevSRB;
+ TRM_SRB TmpSRB;
+ TRM_DCB DCBarray[16][8];
+ u_int32_t srb_physbase;
+
PSRB pFreeSRB;
PDCB pActiveDCB;
PDCB pLinkDCB;
PDCB pDCBRunRobin;
- PDCB pDCB[16][8];
-
u_int16_t max_id;
u_int16_t max_lun;
- u_int16_t IOPortBase;
- u_int16_t AdapterUnit; /*; nth Adapter this driver */
-
u_int8_t msgin123[4];
u_int8_t scan_devices[16][8];
@@ -276,7 +272,8 @@ struct _ACB
u_int8_t TagMaxNum;
u_int8_t Config;
- u_int8_t Reserved[2]; /* for dword alignment */
+ u_int8_t AdaptType;
+ u_int8_t AdapterUnit; /* nth Adapter this driver */
};
typedef struct _ACB TRM_ACB, *PACB;
/*
@@ -323,6 +320,11 @@ typedef struct _ACB TRM_ACB, *PACB;
#define ABORT_DEV_ 0x00000001
/*
+ * ---DCB status
+ */
+#define DS_IN_QUEUE 0x00000001
+
+/*
* ---SRB status
*/
#define SRB_OK 0x00000001
@@ -414,12 +416,12 @@ typedef struct _ACB TRM_ACB, *PACB;
#define MSG_LINK_CMD_COMPL 0x0A
#define MSG_LINK_CMD_COMPL_FLG 0x0B
#define MSG_BUS_RESET 0x0C
-#define MSG_ABORT_TAG 0x0D
+/* #define MSG_ABORT_TAG 0x0D */
#define MSG_SIMPLE_QTAG 0x20
#define MSG_HEAD_QTAG 0x21
#define MSG_ORDER_QTAG 0x22
#define MSG_IGNOREWIDE 0x23
-#define MSG_IDENTIFY 0x80
+/* #define MSG_IDENTIFY 0x80 */
#define MSG_HOST_ID 0xC0
/* bus wide length */
#define MSG_EXT_WDTR_BUS_8_BIT 0x00
@@ -716,6 +718,7 @@ typedef struct _EEprom {
#define ACTIVE_NEGPLUS 0x10 /* Enhance active negation */
#define FILTER_DISABLE 0x08 /* Disable SCSI data filter */
#define ACTIVE_NEG 0x02 /* Enable active negation */
+#define ACTIVE_HISLEW 0x01 /* Enable high slew rate (3/6 ns) */
/*
***************************************
*/
@@ -778,19 +781,23 @@ typedef struct _EEprom {
/*
***************************************
*/
-#define TRMREG_SCSI_TCR0 0x9C /* SCSI Target Control 0 (R/W) */
+#define TRMREG_SCSI_TCR00 0x9C /* SCSI Target Control 0 (R/W) */
/* ######### */
-#define TCR0_WIDE_NEGO_DONE 0x8000 /* Wide nego done */
-#define TCR0_SYNC_NEGO_DONE 0x4000 /* Synchronous nego done*/
-#define TCR0_ENABLE_LVDS 0x2000 /* Enable LVDS synchronous*/
-#define TCR0_ENABLE_WIDE 0x1000 /* Enable WIDE synchronous*/
-#define TCR0_ENABLE_ALT 0x0800 /* Enable alternate synchronous */
-#define TCR0_PERIOD_MASK 0x0700 /* Transfer rate */
-
-#define TCR0_DO_WIDE_NEGO 0x0080 /* Do wide NEGO */
-#define TCR0_DO_SYNC_NEGO 0x0040 /* Do sync NEGO */
-#define TCR0_DISCONNECT_EN 0x0020 /* Disconnection enable */
-#define TCR0_OFFSET_MASK 0x001F /* Offset number */
+#define TCR0_DO_WIDE_NEGO 0x80 /* Do wide NEGO */
+#define TCR0_DO_SYNC_NEGO 0x40 /* Do sync NEGO */
+#define TCR0_DISCONNECT_EN 0x20 /* Disconnection enable */
+#define TCR0_OFFSET_MASK 0x1F /* Offset number */
+/*
+ ***************************************
+ */
+#define TRMREG_SCSI_TCR01 0x9D /* SCSI Target Control 0 (R/W) */
+/* ######### */
+#define TCR0_ENABLE_LVDS 0xF8 /* LVD */
+#define TCR0_ENABLE_WIDE 0xF9 /* SE */
+/*
+****************************************
+*/
+
/*
***************************************
*/
@@ -932,7 +939,7 @@ typedef struct NVRAM_STRUC {
u_int8_t NvramVendorID[2]; /*5,6 Vendor ID */
u_int8_t NvramDeviceID[2]; /*7,8 Device ID */
u_int8_t NvramReserved; /*9 Reserved */
- NVRAMTARGETTYPE NvramTarget[MAX_TARGETS];/* *10,11,12,13
+ NVRAMTARGETTYPE NvramTarget[TRM_MAX_TARGETS];/* *10,11,12,13
*14,15,16,17 * ....
* ....
*70,71,72,73
@@ -956,7 +963,7 @@ typedef struct NVRAM_STRUC {
#define NO_SEEK 0x00000010
#define LUN_CHECK 0x00000020
-/* Nvram Adapter Cfg bits definition */
+/* Nvram Adapter NvramChannelCfg bits definition */
#define NAC_SCANLUN 0x20 /* Include LUN as BIOS device*/
#define NAC_POWERON_SCSI_RESET 0x04 /* Power on reset enable */
#define NAC_GREATER_1G 0x02 /* > 1G support enable */
OpenPOWER on IntegriCloud