1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Workbit NinjaSCSI-32Bi/UDE PCI/CardBus SCSI Host Bus Adapter driver 4*4882a593Smuzhiyun * Basic data header 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _NSP32_H 8*4882a593Smuzhiyun #define _NSP32_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun //#define NSP32_DEBUG 9 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /* 13*4882a593Smuzhiyun * VENDOR/DEVICE ID 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun #define PCI_VENDOR_ID_IODATA 0x10fc 16*4882a593Smuzhiyun #define PCI_VENDOR_ID_WORKBIT 0x1145 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define PCI_DEVICE_ID_NINJASCSI_32BI_CBSC_II 0x0005 19*4882a593Smuzhiyun #define PCI_DEVICE_ID_NINJASCSI_32BI_KME 0xf007 20*4882a593Smuzhiyun #define PCI_DEVICE_ID_NINJASCSI_32BI_WBT 0x8007 21*4882a593Smuzhiyun #define PCI_DEVICE_ID_WORKBIT_STANDARD 0xf010 22*4882a593Smuzhiyun #define PCI_DEVICE_ID_WORKBIT_DUALEDGE 0xf011 23*4882a593Smuzhiyun #define PCI_DEVICE_ID_NINJASCSI_32BI_LOGITEC 0xf012 24*4882a593Smuzhiyun #define PCI_DEVICE_ID_NINJASCSI_32BIB_LOGITEC 0xf013 25*4882a593Smuzhiyun #define PCI_DEVICE_ID_NINJASCSI_32UDE_MELCO 0xf015 26*4882a593Smuzhiyun #define PCI_DEVICE_ID_NINJASCSI_32UDE_MELCO_II 0x8009 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* 29*4882a593Smuzhiyun * MODEL 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun enum { 32*4882a593Smuzhiyun MODEL_IODATA = 0, 33*4882a593Smuzhiyun MODEL_KME = 1, 34*4882a593Smuzhiyun MODEL_WORKBIT = 2, 35*4882a593Smuzhiyun MODEL_LOGITEC = 3, 36*4882a593Smuzhiyun MODEL_PCI_WORKBIT = 4, 37*4882a593Smuzhiyun MODEL_PCI_LOGITEC = 5, 38*4882a593Smuzhiyun MODEL_PCI_MELCO = 6, 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun static char * nsp32_model[] = { 42*4882a593Smuzhiyun "I-O DATA CBSC-II CardBus card", 43*4882a593Smuzhiyun "KME SCSI CardBus card", 44*4882a593Smuzhiyun "Workbit duo SCSI CardBus card", 45*4882a593Smuzhiyun "Logitec CardBus card with external ROM", 46*4882a593Smuzhiyun "Workbit / I-O DATA PCI card", 47*4882a593Smuzhiyun "Logitec PCI card with external ROM", 48*4882a593Smuzhiyun "Melco CardBus/PCI card with external ROM", 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* 53*4882a593Smuzhiyun * SCSI Generic Definitions 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun #define EXTENDED_SDTR_LEN 0x03 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* Little Endian */ 58*4882a593Smuzhiyun typedef u32 u32_le; 59*4882a593Smuzhiyun typedef u16 u16_le; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* 62*4882a593Smuzhiyun * BASIC Definitions 63*4882a593Smuzhiyun */ 64*4882a593Smuzhiyun #ifndef TRUE 65*4882a593Smuzhiyun # define TRUE 1 66*4882a593Smuzhiyun #endif 67*4882a593Smuzhiyun #ifndef FALSE 68*4882a593Smuzhiyun # define FALSE 0 69*4882a593Smuzhiyun #endif 70*4882a593Smuzhiyun #define ASSERT 1 71*4882a593Smuzhiyun #define NEGATE 0 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /*******************/ 75*4882a593Smuzhiyun /* normal register */ 76*4882a593Smuzhiyun /*******************/ 77*4882a593Smuzhiyun /* 78*4882a593Smuzhiyun * Don't access below register with Double Word: 79*4882a593Smuzhiyun * +00, +04, +08, +0c, +64, +80, +84, +88, +90, +c4, +c8, +cc, +d0. 80*4882a593Smuzhiyun */ 81*4882a593Smuzhiyun #define IRQ_CONTROL 0x00 /* BASE+00, W, W */ 82*4882a593Smuzhiyun #define IRQ_STATUS 0x00 /* BASE+00, W, R */ 83*4882a593Smuzhiyun # define IRQSTATUS_LATCHED_MSG BIT(0) 84*4882a593Smuzhiyun # define IRQSTATUS_LATCHED_IO BIT(1) 85*4882a593Smuzhiyun # define IRQSTATUS_LATCHED_CD BIT(2) 86*4882a593Smuzhiyun # define IRQSTATUS_LATCHED_BUS_FREE BIT(3) 87*4882a593Smuzhiyun # define IRQSTATUS_RESELECT_OCCUER BIT(4) 88*4882a593Smuzhiyun # define IRQSTATUS_PHASE_CHANGE_IRQ BIT(5) 89*4882a593Smuzhiyun # define IRQSTATUS_SCSIRESET_IRQ BIT(6) 90*4882a593Smuzhiyun # define IRQSTATUS_TIMER_IRQ BIT(7) 91*4882a593Smuzhiyun # define IRQSTATUS_FIFO_SHLD_IRQ BIT(8) 92*4882a593Smuzhiyun # define IRQSTATUS_PCI_IRQ BIT(9) 93*4882a593Smuzhiyun # define IRQSTATUS_BMCNTERR_IRQ BIT(10) 94*4882a593Smuzhiyun # define IRQSTATUS_AUTOSCSI_IRQ BIT(11) 95*4882a593Smuzhiyun # define PCI_IRQ_MASK BIT(12) 96*4882a593Smuzhiyun # define TIMER_IRQ_MASK BIT(13) 97*4882a593Smuzhiyun # define FIFO_IRQ_MASK BIT(14) 98*4882a593Smuzhiyun # define SCSI_IRQ_MASK BIT(15) 99*4882a593Smuzhiyun # define IRQ_CONTROL_ALL_IRQ_MASK (PCI_IRQ_MASK | \ 100*4882a593Smuzhiyun TIMER_IRQ_MASK | \ 101*4882a593Smuzhiyun FIFO_IRQ_MASK | \ 102*4882a593Smuzhiyun SCSI_IRQ_MASK ) 103*4882a593Smuzhiyun # define IRQSTATUS_ANY_IRQ (IRQSTATUS_RESELECT_OCCUER | \ 104*4882a593Smuzhiyun IRQSTATUS_PHASE_CHANGE_IRQ | \ 105*4882a593Smuzhiyun IRQSTATUS_SCSIRESET_IRQ | \ 106*4882a593Smuzhiyun IRQSTATUS_TIMER_IRQ | \ 107*4882a593Smuzhiyun IRQSTATUS_FIFO_SHLD_IRQ | \ 108*4882a593Smuzhiyun IRQSTATUS_PCI_IRQ | \ 109*4882a593Smuzhiyun IRQSTATUS_BMCNTERR_IRQ | \ 110*4882a593Smuzhiyun IRQSTATUS_AUTOSCSI_IRQ ) 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define TRANSFER_CONTROL 0x02 /* BASE+02, W, W */ 113*4882a593Smuzhiyun #define TRANSFER_STATUS 0x02 /* BASE+02, W, R */ 114*4882a593Smuzhiyun # define CB_MMIO_MODE BIT(0) 115*4882a593Smuzhiyun # define CB_IO_MODE BIT(1) 116*4882a593Smuzhiyun # define BM_TEST BIT(2) 117*4882a593Smuzhiyun # define BM_TEST_DIR BIT(3) 118*4882a593Smuzhiyun # define DUAL_EDGE_ENABLE BIT(4) 119*4882a593Smuzhiyun # define NO_TRANSFER_TO_HOST BIT(5) 120*4882a593Smuzhiyun # define TRANSFER_GO BIT(7) 121*4882a593Smuzhiyun # define BLIEND_MODE BIT(8) 122*4882a593Smuzhiyun # define BM_START BIT(9) 123*4882a593Smuzhiyun # define ADVANCED_BM_WRITE BIT(10) 124*4882a593Smuzhiyun # define BM_SINGLE_MODE BIT(11) 125*4882a593Smuzhiyun # define FIFO_TRUE_FULL BIT(12) 126*4882a593Smuzhiyun # define FIFO_TRUE_EMPTY BIT(13) 127*4882a593Smuzhiyun # define ALL_COUNTER_CLR BIT(14) 128*4882a593Smuzhiyun # define FIFOTEST BIT(15) 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #define INDEX_REG 0x04 /* BASE+04, Byte(R/W), Word(R) */ 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun #define TIMER_SET 0x06 /* BASE+06, W, R/W */ 133*4882a593Smuzhiyun # define TIMER_CNT_MASK (0xff) 134*4882a593Smuzhiyun # define TIMER_STOP BIT(8) 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun #define DATA_REG_LOW 0x08 /* BASE+08, LowW, R/W */ 137*4882a593Smuzhiyun #define DATA_REG_HI 0x0a /* BASE+0a, Hi-W, R/W */ 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun #define FIFO_REST_CNT 0x0c /* BASE+0c, W, R/W */ 140*4882a593Smuzhiyun # define FIFO_REST_MASK 0x1ff 141*4882a593Smuzhiyun # define FIFO_EMPTY_SHLD_FLAG BIT(14) 142*4882a593Smuzhiyun # define FIFO_FULL_SHLD_FLAG BIT(15) 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun #define SREQ_SMPL_RATE 0x0f /* BASE+0f, B, R/W */ 145*4882a593Smuzhiyun # define SREQSMPLRATE_RATE0 BIT(0) 146*4882a593Smuzhiyun # define SREQSMPLRATE_RATE1 BIT(1) 147*4882a593Smuzhiyun # define SAMPLING_ENABLE BIT(2) 148*4882a593Smuzhiyun # define SMPL_40M (0) /* 40MHz: 0-100ns/period */ 149*4882a593Smuzhiyun # define SMPL_20M (SREQSMPLRATE_RATE0) /* 20MHz: 100-200ns/period */ 150*4882a593Smuzhiyun # define SMPL_10M (SREQSMPLRATE_RATE1) /* 10Mhz: 200- ns/period */ 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun #define SCSI_BUS_CONTROL 0x10 /* BASE+10, B, R/W */ 153*4882a593Smuzhiyun # define BUSCTL_SEL BIT(0) 154*4882a593Smuzhiyun # define BUSCTL_RST BIT(1) 155*4882a593Smuzhiyun # define BUSCTL_DATAOUT_ENB BIT(2) 156*4882a593Smuzhiyun # define BUSCTL_ATN BIT(3) 157*4882a593Smuzhiyun # define BUSCTL_ACK BIT(4) 158*4882a593Smuzhiyun # define BUSCTL_BSY BIT(5) 159*4882a593Smuzhiyun # define AUTODIRECTION BIT(6) 160*4882a593Smuzhiyun # define ACKENB BIT(7) 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #define CLR_COUNTER 0x12 /* BASE+12, B, W */ 163*4882a593Smuzhiyun # define ACK_COUNTER_CLR BIT(0) 164*4882a593Smuzhiyun # define SREQ_COUNTER_CLR BIT(1) 165*4882a593Smuzhiyun # define FIFO_HOST_POINTER_CLR BIT(2) 166*4882a593Smuzhiyun # define FIFO_REST_COUNT_CLR BIT(3) 167*4882a593Smuzhiyun # define BM_COUNTER_CLR BIT(4) 168*4882a593Smuzhiyun # define SAVED_ACK_CLR BIT(5) 169*4882a593Smuzhiyun # define CLRCOUNTER_ALLMASK (ACK_COUNTER_CLR | \ 170*4882a593Smuzhiyun SREQ_COUNTER_CLR | \ 171*4882a593Smuzhiyun FIFO_HOST_POINTER_CLR | \ 172*4882a593Smuzhiyun FIFO_REST_COUNT_CLR | \ 173*4882a593Smuzhiyun BM_COUNTER_CLR | \ 174*4882a593Smuzhiyun SAVED_ACK_CLR ) 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun #define SCSI_BUS_MONITOR 0x12 /* BASE+12, B, R */ 177*4882a593Smuzhiyun # define BUSMON_MSG BIT(0) 178*4882a593Smuzhiyun # define BUSMON_IO BIT(1) 179*4882a593Smuzhiyun # define BUSMON_CD BIT(2) 180*4882a593Smuzhiyun # define BUSMON_BSY BIT(3) 181*4882a593Smuzhiyun # define BUSMON_ACK BIT(4) 182*4882a593Smuzhiyun # define BUSMON_REQ BIT(5) 183*4882a593Smuzhiyun # define BUSMON_SEL BIT(6) 184*4882a593Smuzhiyun # define BUSMON_ATN BIT(7) 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun #define COMMAND_DATA 0x14 /* BASE+14, B, R/W */ 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun #define PARITY_CONTROL 0x16 /* BASE+16, B, W */ 189*4882a593Smuzhiyun # define PARITY_CHECK_ENABLE BIT(0) 190*4882a593Smuzhiyun # define PARITY_ERROR_CLEAR BIT(1) 191*4882a593Smuzhiyun #define PARITY_STATUS 0x16 /* BASE+16, B, R */ 192*4882a593Smuzhiyun //# define PARITY_CHECK_ENABLE BIT(0) 193*4882a593Smuzhiyun # define PARITY_ERROR_NORMAL BIT(1) 194*4882a593Smuzhiyun # define PARITY_ERROR_LSB BIT(1) 195*4882a593Smuzhiyun # define PARITY_ERROR_MSB BIT(2) 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun #define RESELECT_ID 0x18 /* BASE+18, B, R */ 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun #define COMMAND_CONTROL 0x18 /* BASE+18, W, W */ 200*4882a593Smuzhiyun # define CLEAR_CDB_FIFO_POINTER BIT(0) 201*4882a593Smuzhiyun # define AUTO_COMMAND_PHASE BIT(1) 202*4882a593Smuzhiyun # define AUTOSCSI_START BIT(2) 203*4882a593Smuzhiyun # define AUTOSCSI_RESTART BIT(3) 204*4882a593Smuzhiyun # define AUTO_PARAMETER BIT(4) 205*4882a593Smuzhiyun # define AUTO_ATN BIT(5) 206*4882a593Smuzhiyun # define AUTO_MSGIN_00_OR_04 BIT(6) 207*4882a593Smuzhiyun # define AUTO_MSGIN_02 BIT(7) 208*4882a593Smuzhiyun # define AUTO_MSGIN_03 BIT(8) 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun #define SET_ARBIT 0x1a /* BASE+1a, B, W */ 211*4882a593Smuzhiyun # define ARBIT_GO BIT(0) 212*4882a593Smuzhiyun # define ARBIT_CLEAR BIT(1) 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun #define ARBIT_STATUS 0x1a /* BASE+1a, B, R */ 215*4882a593Smuzhiyun //# define ARBIT_GO BIT(0) 216*4882a593Smuzhiyun # define ARBIT_WIN BIT(1) 217*4882a593Smuzhiyun # define ARBIT_FAIL BIT(2) 218*4882a593Smuzhiyun # define AUTO_PARAMETER_VALID BIT(3) 219*4882a593Smuzhiyun # define SGT_VALID BIT(4) 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun #define SYNC_REG 0x1c /* BASE+1c, B, R/W */ 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun #define ACK_WIDTH 0x1d /* BASE+1d, B, R/W */ 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun #define SCSI_DATA_WITH_ACK 0x20 /* BASE+20, B, R/W */ 226*4882a593Smuzhiyun #define SCSI_OUT_LATCH_TARGET_ID 0x22 /* BASE+22, B, W */ 227*4882a593Smuzhiyun #define SCSI_DATA_IN 0x22 /* BASE+22, B, R */ 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun #define SCAM_CONTROL 0x24 /* BASE+24, B, W */ 230*4882a593Smuzhiyun #define SCAM_STATUS 0x24 /* BASE+24, B, R */ 231*4882a593Smuzhiyun # define SCAM_MSG BIT(0) 232*4882a593Smuzhiyun # define SCAM_IO BIT(1) 233*4882a593Smuzhiyun # define SCAM_CD BIT(2) 234*4882a593Smuzhiyun # define SCAM_BSY BIT(3) 235*4882a593Smuzhiyun # define SCAM_SEL BIT(4) 236*4882a593Smuzhiyun # define SCAM_XFEROK BIT(5) 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun #define SCAM_DATA 0x26 /* BASE+26, B, R/W */ 239*4882a593Smuzhiyun # define SD0 BIT(0) 240*4882a593Smuzhiyun # define SD1 BIT(1) 241*4882a593Smuzhiyun # define SD2 BIT(2) 242*4882a593Smuzhiyun # define SD3 BIT(3) 243*4882a593Smuzhiyun # define SD4 BIT(4) 244*4882a593Smuzhiyun # define SD5 BIT(5) 245*4882a593Smuzhiyun # define SD6 BIT(6) 246*4882a593Smuzhiyun # define SD7 BIT(7) 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun #define SACK_CNT 0x28 /* BASE+28, DW, R/W */ 249*4882a593Smuzhiyun #define SREQ_CNT 0x2c /* BASE+2c, DW, R/W */ 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun #define FIFO_DATA_LOW 0x30 /* BASE+30, B/W/DW, R/W */ 252*4882a593Smuzhiyun #define FIFO_DATA_HIGH 0x32 /* BASE+32, B/W, R/W */ 253*4882a593Smuzhiyun #define BM_START_ADR 0x34 /* BASE+34, DW, R/W */ 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define BM_CNT 0x38 /* BASE+38, DW, R/W */ 256*4882a593Smuzhiyun # define BM_COUNT_MASK 0x0001ffffUL 257*4882a593Smuzhiyun # define SGTEND BIT(31) /* Last SGT marker */ 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun #define SGT_ADR 0x3c /* BASE+3c, DW, R/W */ 260*4882a593Smuzhiyun #define WAIT_REG 0x40 /* Bi only */ 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun #define SCSI_EXECUTE_PHASE 0x40 /* BASE+40, W, R */ 263*4882a593Smuzhiyun # define COMMAND_PHASE BIT(0) 264*4882a593Smuzhiyun # define DATA_IN_PHASE BIT(1) 265*4882a593Smuzhiyun # define DATA_OUT_PHASE BIT(2) 266*4882a593Smuzhiyun # define MSGOUT_PHASE BIT(3) 267*4882a593Smuzhiyun # define STATUS_PHASE BIT(4) 268*4882a593Smuzhiyun # define ILLEGAL_PHASE BIT(5) 269*4882a593Smuzhiyun # define BUS_FREE_OCCUER BIT(6) 270*4882a593Smuzhiyun # define MSG_IN_OCCUER BIT(7) 271*4882a593Smuzhiyun # define MSG_OUT_OCCUER BIT(8) 272*4882a593Smuzhiyun # define SELECTION_TIMEOUT BIT(9) 273*4882a593Smuzhiyun # define MSGIN_00_VALID BIT(10) 274*4882a593Smuzhiyun # define MSGIN_02_VALID BIT(11) 275*4882a593Smuzhiyun # define MSGIN_03_VALID BIT(12) 276*4882a593Smuzhiyun # define MSGIN_04_VALID BIT(13) 277*4882a593Smuzhiyun # define AUTOSCSI_BUSY BIT(15) 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun #define SCSI_CSB_IN 0x42 /* BASE+42, B, R */ 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun #define SCSI_MSG_OUT 0x44 /* BASE+44, DW, R/W */ 282*4882a593Smuzhiyun # define MSGOUT_COUNT_MASK (BIT(0)|BIT(1)) 283*4882a593Smuzhiyun # define MV_VALID BIT(7) 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun #define SEL_TIME_OUT 0x48 /* BASE+48, W, R/W */ 286*4882a593Smuzhiyun #define SAVED_SACK_CNT 0x4c /* BASE+4c, DW, R */ 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun #define HTOSDATADELAY 0x50 /* BASE+50, B, R/W */ 289*4882a593Smuzhiyun #define STOHDATADELAY 0x54 /* BASE+54, B, R/W */ 290*4882a593Smuzhiyun #define ACKSUMCHECKRD 0x58 /* BASE+58, W, R */ 291*4882a593Smuzhiyun #define REQSUMCHECKRD 0x5c /* BASE+5c, W, R */ 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun /********************/ 295*4882a593Smuzhiyun /* indexed register */ 296*4882a593Smuzhiyun /********************/ 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun #define CLOCK_DIV 0x00 /* BASE+08, IDX+00, B, R/W */ 299*4882a593Smuzhiyun # define CLOCK_2 BIT(0) /* MCLK/2 */ 300*4882a593Smuzhiyun # define CLOCK_4 BIT(1) /* MCLK/4 */ 301*4882a593Smuzhiyun # define PCICLK BIT(7) /* PCICLK (33MHz) */ 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun #define TERM_PWR_CONTROL 0x01 /* BASE+08, IDX+01, B, R/W */ 304*4882a593Smuzhiyun # define BPWR BIT(0) 305*4882a593Smuzhiyun # define SENSE BIT(1) /* Read Only */ 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun #define EXT_PORT_DDR 0x02 /* BASE+08, IDX+02, B, R/W */ 308*4882a593Smuzhiyun #define EXT_PORT 0x03 /* BASE+08, IDX+03, B, R/W */ 309*4882a593Smuzhiyun # define LED_ON (0) 310*4882a593Smuzhiyun # define LED_OFF BIT(0) 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun #define IRQ_SELECT 0x04 /* BASE+08, IDX+04, W, R/W */ 313*4882a593Smuzhiyun # define IRQSELECT_RESELECT_IRQ BIT(0) 314*4882a593Smuzhiyun # define IRQSELECT_PHASE_CHANGE_IRQ BIT(1) 315*4882a593Smuzhiyun # define IRQSELECT_SCSIRESET_IRQ BIT(2) 316*4882a593Smuzhiyun # define IRQSELECT_TIMER_IRQ BIT(3) 317*4882a593Smuzhiyun # define IRQSELECT_FIFO_SHLD_IRQ BIT(4) 318*4882a593Smuzhiyun # define IRQSELECT_TARGET_ABORT_IRQ BIT(5) 319*4882a593Smuzhiyun # define IRQSELECT_MASTER_ABORT_IRQ BIT(6) 320*4882a593Smuzhiyun # define IRQSELECT_SERR_IRQ BIT(7) 321*4882a593Smuzhiyun # define IRQSELECT_PERR_IRQ BIT(8) 322*4882a593Smuzhiyun # define IRQSELECT_BMCNTERR_IRQ BIT(9) 323*4882a593Smuzhiyun # define IRQSELECT_AUTO_SCSI_SEQ_IRQ BIT(10) 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun #define OLD_SCSI_PHASE 0x05 /* BASE+08, IDX+05, B, R */ 326*4882a593Smuzhiyun # define OLD_MSG BIT(0) 327*4882a593Smuzhiyun # define OLD_IO BIT(1) 328*4882a593Smuzhiyun # define OLD_CD BIT(2) 329*4882a593Smuzhiyun # define OLD_BUSY BIT(3) 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun #define FIFO_FULL_SHLD_COUNT 0x06 /* BASE+08, IDX+06, B, R/W */ 332*4882a593Smuzhiyun #define FIFO_EMPTY_SHLD_COUNT 0x07 /* BASE+08, IDX+07, B, R/W */ 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun #define EXP_ROM_CONTROL 0x08 /* BASE+08, IDX+08, B, R/W */ /* external ROM control */ 335*4882a593Smuzhiyun # define ROM_WRITE_ENB BIT(0) 336*4882a593Smuzhiyun # define IO_ACCESS_ENB BIT(1) 337*4882a593Smuzhiyun # define ROM_ADR_CLEAR BIT(2) 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun #define EXP_ROM_ADR 0x09 /* BASE+08, IDX+09, W, R/W */ 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun #define EXP_ROM_DATA 0x0a /* BASE+08, IDX+0a, B, R/W */ 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun #define CHIP_MODE 0x0b /* BASE+08, IDX+0b, B, R */ /* NinjaSCSI-32Bi only */ 344*4882a593Smuzhiyun # define OEM0 BIT(1) /* OEM select */ /* 00=I-O DATA, 01=KME, 10=Workbit, 11=Ext ROM */ 345*4882a593Smuzhiyun # define OEM1 BIT(2) /* OEM select */ 346*4882a593Smuzhiyun # define OPTB BIT(3) /* KME mode select */ 347*4882a593Smuzhiyun # define OPTC BIT(4) /* KME mode select */ 348*4882a593Smuzhiyun # define OPTD BIT(5) /* KME mode select */ 349*4882a593Smuzhiyun # define OPTE BIT(6) /* KME mode select */ 350*4882a593Smuzhiyun # define OPTF BIT(7) /* Power management */ 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun #define MISC_WR 0x0c /* BASE+08, IDX+0c, W, R/W */ 353*4882a593Smuzhiyun #define MISC_RD 0x0c 354*4882a593Smuzhiyun # define SCSI_DIRECTION_DETECTOR_SELECT BIT(0) 355*4882a593Smuzhiyun # define SCSI2_HOST_DIRECTION_VALID BIT(1) /* Read only */ 356*4882a593Smuzhiyun # define HOST2_SCSI_DIRECTION_VALID BIT(2) /* Read only */ 357*4882a593Smuzhiyun # define DELAYED_BMSTART BIT(3) 358*4882a593Smuzhiyun # define MASTER_TERMINATION_SELECT BIT(4) 359*4882a593Smuzhiyun # define BMREQ_NEGATE_TIMING_SEL BIT(5) 360*4882a593Smuzhiyun # define AUTOSEL_TIMING_SEL BIT(6) 361*4882a593Smuzhiyun # define MISC_MABORT_MASK BIT(7) 362*4882a593Smuzhiyun # define BMSTOP_CHANGE2_NONDATA_PHASE BIT(8) 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun #define BM_CYCLE 0x0d /* BASE+08, IDX+0d, B, R/W */ 365*4882a593Smuzhiyun # define BM_CYCLE0 BIT(0) 366*4882a593Smuzhiyun # define BM_CYCLE1 BIT(1) 367*4882a593Smuzhiyun # define BM_FRAME_ASSERT_TIMING BIT(2) 368*4882a593Smuzhiyun # define BM_IRDY_ASSERT_TIMING BIT(3) 369*4882a593Smuzhiyun # define BM_SINGLE_BUS_MASTER BIT(4) 370*4882a593Smuzhiyun # define MEMRD_CMD0 BIT(5) 371*4882a593Smuzhiyun # define SGT_AUTO_PARA_MEMED_CMD BIT(6) 372*4882a593Smuzhiyun # define MEMRD_CMD1 BIT(7) 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun #define SREQ_EDGH 0x0e /* BASE+08, IDX+0e, B, W */ 376*4882a593Smuzhiyun # define SREQ_EDGH_SELECT BIT(0) 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun #define UP_CNT 0x0f /* BASE+08, IDX+0f, B, W */ 379*4882a593Smuzhiyun # define REQCNT_UP BIT(0) 380*4882a593Smuzhiyun # define ACKCNT_UP BIT(1) 381*4882a593Smuzhiyun # define BMADR_UP BIT(4) 382*4882a593Smuzhiyun # define BMCNT_UP BIT(5) 383*4882a593Smuzhiyun # define SGT_CNT_UP BIT(7) 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun #define CFG_CMD_STR 0x10 /* BASE+08, IDX+10, W, R */ 386*4882a593Smuzhiyun #define CFG_LATE_CACHE 0x11 /* BASE+08, IDX+11, W, R/W */ 387*4882a593Smuzhiyun #define CFG_BASE_ADR_1 0x12 /* BASE+08, IDX+12, W, R */ 388*4882a593Smuzhiyun #define CFG_BASE_ADR_2 0x13 /* BASE+08, IDX+13, W, R */ 389*4882a593Smuzhiyun #define CFG_INLINE 0x14 /* BASE+08, IDX+14, W, R */ 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun #define SERIAL_ROM_CTL 0x15 /* BASE+08, IDX+15, B, R */ 392*4882a593Smuzhiyun # define SCL BIT(0) 393*4882a593Smuzhiyun # define ENA BIT(1) 394*4882a593Smuzhiyun # define SDA BIT(2) 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun #define FIFO_HST_POINTER 0x16 /* BASE+08, IDX+16, B, R/W */ 397*4882a593Smuzhiyun #define SREQ_DELAY 0x17 /* BASE+08, IDX+17, B, R/W */ 398*4882a593Smuzhiyun #define SACK_DELAY 0x18 /* BASE+08, IDX+18, B, R/W */ 399*4882a593Smuzhiyun #define SREQ_NOISE_CANCEL 0x19 /* BASE+08, IDX+19, B, R/W */ 400*4882a593Smuzhiyun #define SDP_NOISE_CANCEL 0x1a /* BASE+08, IDX+1a, B, R/W */ 401*4882a593Smuzhiyun #define DELAY_TEST 0x1b /* BASE+08, IDX+1b, B, R/W */ 402*4882a593Smuzhiyun #define SD0_NOISE_CANCEL 0x20 /* BASE+08, IDX+20, B, R/W */ 403*4882a593Smuzhiyun #define SD1_NOISE_CANCEL 0x21 /* BASE+08, IDX+21, B, R/W */ 404*4882a593Smuzhiyun #define SD2_NOISE_CANCEL 0x22 /* BASE+08, IDX+22, B, R/W */ 405*4882a593Smuzhiyun #define SD3_NOISE_CANCEL 0x23 /* BASE+08, IDX+23, B, R/W */ 406*4882a593Smuzhiyun #define SD4_NOISE_CANCEL 0x24 /* BASE+08, IDX+24, B, R/W */ 407*4882a593Smuzhiyun #define SD5_NOISE_CANCEL 0x25 /* BASE+08, IDX+25, B, R/W */ 408*4882a593Smuzhiyun #define SD6_NOISE_CANCEL 0x26 /* BASE+08, IDX+26, B, R/W */ 409*4882a593Smuzhiyun #define SD7_NOISE_CANCEL 0x27 /* BASE+08, IDX+27, B, R/W */ 410*4882a593Smuzhiyun 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun /* 413*4882a593Smuzhiyun * Useful Bus Monitor status combinations. 414*4882a593Smuzhiyun */ 415*4882a593Smuzhiyun #define BUSMON_BUS_FREE 0 416*4882a593Smuzhiyun #define BUSMON_COMMAND ( BUSMON_BSY | BUSMON_CD | BUSMON_REQ ) 417*4882a593Smuzhiyun #define BUSMON_MESSAGE_IN ( BUSMON_BSY | BUSMON_MSG | BUSMON_IO | BUSMON_CD | BUSMON_REQ ) 418*4882a593Smuzhiyun #define BUSMON_MESSAGE_OUT ( BUSMON_BSY | BUSMON_MSG | BUSMON_CD | BUSMON_REQ ) 419*4882a593Smuzhiyun #define BUSMON_DATA_IN ( BUSMON_BSY | BUSMON_IO | BUSMON_REQ ) 420*4882a593Smuzhiyun #define BUSMON_DATA_OUT ( BUSMON_BSY | BUSMON_REQ ) 421*4882a593Smuzhiyun #define BUSMON_STATUS ( BUSMON_BSY | BUSMON_IO | BUSMON_CD | BUSMON_REQ ) 422*4882a593Smuzhiyun #define BUSMON_RESELECT ( BUSMON_IO | BUSMON_SEL) 423*4882a593Smuzhiyun #define BUSMON_PHASE_MASK ( BUSMON_MSG | BUSMON_IO | BUSMON_CD | BUSMON_SEL) 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun #define BUSPHASE_COMMAND ( BUSMON_COMMAND & BUSMON_PHASE_MASK ) 426*4882a593Smuzhiyun #define BUSPHASE_MESSAGE_IN ( BUSMON_MESSAGE_IN & BUSMON_PHASE_MASK ) 427*4882a593Smuzhiyun #define BUSPHASE_MESSAGE_OUT ( BUSMON_MESSAGE_OUT & BUSMON_PHASE_MASK ) 428*4882a593Smuzhiyun #define BUSPHASE_DATA_IN ( BUSMON_DATA_IN & BUSMON_PHASE_MASK ) 429*4882a593Smuzhiyun #define BUSPHASE_DATA_OUT ( BUSMON_DATA_OUT & BUSMON_PHASE_MASK ) 430*4882a593Smuzhiyun #define BUSPHASE_STATUS ( BUSMON_STATUS & BUSMON_PHASE_MASK ) 431*4882a593Smuzhiyun #define BUSPHASE_SELECT ( BUSMON_SEL | BUSMON_IO ) 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun /************************************************************************ 435*4882a593Smuzhiyun * structure for DMA/Scatter Gather list 436*4882a593Smuzhiyun */ 437*4882a593Smuzhiyun #define NSP32_SG_SIZE SG_ALL 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun typedef struct _nsp32_sgtable { 440*4882a593Smuzhiyun /* values must be little endian */ 441*4882a593Smuzhiyun u32_le addr; /* transfer address */ 442*4882a593Smuzhiyun u32_le len; /* transfer length. BIT(31) is for SGT_END mark */ 443*4882a593Smuzhiyun } __attribute__ ((packed)) nsp32_sgtable; 444*4882a593Smuzhiyun 445*4882a593Smuzhiyun typedef struct _nsp32_sglun { 446*4882a593Smuzhiyun nsp32_sgtable sgt[NSP32_SG_SIZE+1]; /* SG table */ 447*4882a593Smuzhiyun } __attribute__ ((packed)) nsp32_sglun; 448*4882a593Smuzhiyun #define NSP32_SG_TABLE_SIZE (sizeof(nsp32_sgtable) * NSP32_SG_SIZE * MAX_TARGET * MAX_LUN) 449*4882a593Smuzhiyun 450*4882a593Smuzhiyun /* Auto parameter mode memory map. */ 451*4882a593Smuzhiyun /* All values must be little endian. */ 452*4882a593Smuzhiyun typedef struct _nsp32_autoparam { 453*4882a593Smuzhiyun u8 cdb[4 * 0x10]; /* SCSI Command */ 454*4882a593Smuzhiyun u32_le msgout; /* outgoing messages */ 455*4882a593Smuzhiyun u8 syncreg; /* sync register value */ 456*4882a593Smuzhiyun u8 ackwidth; /* ack width register value */ 457*4882a593Smuzhiyun u8 target_id; /* target/host device id */ 458*4882a593Smuzhiyun u8 sample_reg; /* hazard killer sampling rate */ 459*4882a593Smuzhiyun u16_le command_control; /* command control register */ 460*4882a593Smuzhiyun u16_le transfer_control; /* transfer control register */ 461*4882a593Smuzhiyun u32_le sgt_pointer; /* SG table physical address for DMA */ 462*4882a593Smuzhiyun u32_le dummy[2]; 463*4882a593Smuzhiyun } __attribute__ ((packed)) nsp32_autoparam; /* must be packed struct */ 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun /* 466*4882a593Smuzhiyun * host data structure 467*4882a593Smuzhiyun */ 468*4882a593Smuzhiyun /* message in/out buffer */ 469*4882a593Smuzhiyun #define MSGOUTBUF_MAX 20 470*4882a593Smuzhiyun #define MSGINBUF_MAX 20 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun /* flag for trans_method */ 473*4882a593Smuzhiyun #define NSP32_TRANSFER_BUSMASTER BIT(0) 474*4882a593Smuzhiyun #define NSP32_TRANSFER_MMIO BIT(1) /* Not supported yet */ 475*4882a593Smuzhiyun #define NSP32_TRANSFER_PIO BIT(2) /* Not supported yet */ 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun /* 479*4882a593Smuzhiyun * structure for connected LUN dynamic data 480*4882a593Smuzhiyun * 481*4882a593Smuzhiyun * Note: Currently tagged queuing is disabled, each nsp32_lunt holds 482*4882a593Smuzhiyun * one SCSI command and one state. 483*4882a593Smuzhiyun */ 484*4882a593Smuzhiyun #define DISCPRIV_OK BIT(0) /* DISCPRIV Enable mode */ 485*4882a593Smuzhiyun #define MSGIN03 BIT(1) /* Auto Msg In 03 Flag */ 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun typedef struct _nsp32_lunt { 488*4882a593Smuzhiyun struct scsi_cmnd *SCpnt; /* Current Handling struct scsi_cmnd */ 489*4882a593Smuzhiyun unsigned long save_datp; /* Save Data Pointer - saved position from initial address */ 490*4882a593Smuzhiyun int msgin03; /* auto msg in 03 flag */ 491*4882a593Smuzhiyun unsigned int sg_num; /* Total number of SG entries */ 492*4882a593Smuzhiyun int cur_entry; /* Current SG entry number */ 493*4882a593Smuzhiyun nsp32_sglun *sglun; /* sg table per lun */ 494*4882a593Smuzhiyun dma_addr_t sglun_paddr; /* sglun physical address */ 495*4882a593Smuzhiyun } nsp32_lunt; 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun 498*4882a593Smuzhiyun /* 499*4882a593Smuzhiyun * SCSI TARGET/LUN definition 500*4882a593Smuzhiyun */ 501*4882a593Smuzhiyun #define NSP32_HOST_SCSIID 7 /* SCSI initiator is every time defined as 7 */ 502*4882a593Smuzhiyun #define MAX_TARGET 8 503*4882a593Smuzhiyun #define MAX_LUN 8 /* XXX: In SPI3, max number of LUN is 64. */ 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun typedef struct _nsp32_sync_table { 507*4882a593Smuzhiyun unsigned char period_num; /* period number */ 508*4882a593Smuzhiyun unsigned char ackwidth; /* ack width designated by period */ 509*4882a593Smuzhiyun unsigned char start_period; /* search range - start period */ 510*4882a593Smuzhiyun unsigned char end_period; /* search range - end period */ 511*4882a593Smuzhiyun unsigned char sample_rate; /* hazard killer parameter */ 512*4882a593Smuzhiyun } nsp32_sync_table; 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun 515*4882a593Smuzhiyun /* 516*4882a593Smuzhiyun * structure for target device static data 517*4882a593Smuzhiyun */ 518*4882a593Smuzhiyun /* flag for nsp32_target.sync_flag */ 519*4882a593Smuzhiyun #define SDTR_INITIATOR BIT(0) /* sending SDTR from initiator */ 520*4882a593Smuzhiyun #define SDTR_TARGET BIT(1) /* sending SDTR from target */ 521*4882a593Smuzhiyun #define SDTR_DONE BIT(2) /* exchanging SDTR has been processed */ 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun /* syncronous period value for nsp32_target.config_max */ 524*4882a593Smuzhiyun #define FAST5M 0x32 525*4882a593Smuzhiyun #define FAST10M 0x19 526*4882a593Smuzhiyun #define ULTRA20M 0x0c 527*4882a593Smuzhiyun 528*4882a593Smuzhiyun /* flag for nsp32_target.{sync_offset}, period */ 529*4882a593Smuzhiyun #define ASYNC_OFFSET 0 /* asynchronous transfer */ 530*4882a593Smuzhiyun #define SYNC_OFFSET 0xf /* synchronous transfer max offset */ 531*4882a593Smuzhiyun 532*4882a593Smuzhiyun /* syncreg: 533*4882a593Smuzhiyun bit:07 06 05 04 03 02 01 00 534*4882a593Smuzhiyun ---PERIOD-- ---OFFSET-- */ 535*4882a593Smuzhiyun #define TO_SYNCREG(period, offset) (((period) & 0x0f) << 4 | ((offset) & 0x0f)) 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun typedef struct _nsp32_target { 538*4882a593Smuzhiyun unsigned char syncreg; /* value for SYNCREG */ 539*4882a593Smuzhiyun unsigned char ackwidth; /* value for ACKWIDTH */ 540*4882a593Smuzhiyun unsigned char period; /* sync period (0-255) */ 541*4882a593Smuzhiyun unsigned char offset; /* sync offset (0-15) */ 542*4882a593Smuzhiyun int sync_flag; /* SDTR_*, 0 */ 543*4882a593Smuzhiyun int limit_entry; /* max speed limit entry designated 544*4882a593Smuzhiyun by EEPROM configuration */ 545*4882a593Smuzhiyun unsigned char sample_reg; /* SREQ hazard killer register */ 546*4882a593Smuzhiyun } nsp32_target; 547*4882a593Smuzhiyun 548*4882a593Smuzhiyun typedef struct _nsp32_hw_data { 549*4882a593Smuzhiyun int IrqNumber; 550*4882a593Smuzhiyun int BaseAddress; 551*4882a593Smuzhiyun int NumAddress; 552*4882a593Smuzhiyun void __iomem *MmioAddress; 553*4882a593Smuzhiyun #define NSP32_MMIO_OFFSET 0x0800 554*4882a593Smuzhiyun unsigned long MmioLength; 555*4882a593Smuzhiyun 556*4882a593Smuzhiyun struct scsi_cmnd *CurrentSC; 557*4882a593Smuzhiyun 558*4882a593Smuzhiyun struct pci_dev *Pci; 559*4882a593Smuzhiyun const struct pci_device_id *pci_devid; 560*4882a593Smuzhiyun struct Scsi_Host *Host; 561*4882a593Smuzhiyun spinlock_t Lock; 562*4882a593Smuzhiyun 563*4882a593Smuzhiyun char info_str[100]; 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun /* allocated memory region */ 566*4882a593Smuzhiyun nsp32_sglun *sg_list; /* sglist virtuxal address */ 567*4882a593Smuzhiyun dma_addr_t sg_paddr; /* physical address of hw_sg_table */ 568*4882a593Smuzhiyun nsp32_autoparam *autoparam; /* auto parameter transfer region */ 569*4882a593Smuzhiyun dma_addr_t auto_paddr; /* physical address of autoparam */ 570*4882a593Smuzhiyun int cur_entry; /* current sgt entry */ 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun /* target/LUN */ 573*4882a593Smuzhiyun nsp32_lunt *cur_lunt; /* Current connected LUN table */ 574*4882a593Smuzhiyun nsp32_lunt lunt[MAX_TARGET][MAX_LUN]; /* All LUN table */ 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun nsp32_target *cur_target; /* Current connected SCSI ID */ 577*4882a593Smuzhiyun nsp32_target target[MAX_TARGET]; /* SCSI ID */ 578*4882a593Smuzhiyun int cur_id; /* Current connected target ID */ 579*4882a593Smuzhiyun int cur_lun; /* Current connected target LUN */ 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun /* behavior setting parameters */ 582*4882a593Smuzhiyun int trans_method; /* transfer method flag */ 583*4882a593Smuzhiyun int resettime; /* Reset time */ 584*4882a593Smuzhiyun int clock; /* clock dividing flag */ 585*4882a593Smuzhiyun nsp32_sync_table *synct; /* sync_table determined by clock */ 586*4882a593Smuzhiyun int syncnum; /* the max number of synct element */ 587*4882a593Smuzhiyun 588*4882a593Smuzhiyun /* message buffer */ 589*4882a593Smuzhiyun unsigned char msgoutbuf[MSGOUTBUF_MAX]; /* msgout buffer */ 590*4882a593Smuzhiyun char msgout_len; /* msgoutbuf length */ 591*4882a593Smuzhiyun unsigned char msginbuf [MSGINBUF_MAX]; /* megin buffer */ 592*4882a593Smuzhiyun char msgin_len; /* msginbuf length */ 593*4882a593Smuzhiyun 594*4882a593Smuzhiyun } nsp32_hw_data; 595*4882a593Smuzhiyun 596*4882a593Smuzhiyun /* 597*4882a593Smuzhiyun * TIME definition 598*4882a593Smuzhiyun */ 599*4882a593Smuzhiyun #define RESET_HOLD_TIME 10000 /* reset time in us (SCSI-2 says the 600*4882a593Smuzhiyun minimum is 25us) */ 601*4882a593Smuzhiyun #define SEL_TIMEOUT_TIME 10000 /* 250ms defined in SCSI specification 602*4882a593Smuzhiyun (25.6us/1unit) */ 603*4882a593Smuzhiyun #define ARBIT_TIMEOUT_TIME 100 /* 100us */ 604*4882a593Smuzhiyun #define REQSACK_TIMEOUT_TIME 10000 /* max wait time for REQ/SACK assertion 605*4882a593Smuzhiyun or negation, 10000us == 10ms */ 606*4882a593Smuzhiyun 607*4882a593Smuzhiyun #endif /* _NSP32_H */ 608*4882a593Smuzhiyun /* end */ 609