Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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