Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
/*	$NetBSD: ninjascsi32reg.h,v 1.3 2008/04/28 20:23:50 martin Exp $	*/

/*-
 * Copyright (c) 2004 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by ITOH Yasufumi.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _NJSC32REG_H_
#define _NJSC32REG_H_

/*
 * Workbit NinjaSCSI (32bit versions), Ultra Narrow SCSI3 host adapters:
 *	NJSC-32Bi	PCMCIA/CardBus dual mode device ("DuoSCSI")
 *			(CardBus mode only)
 *	NJSC-32UDE	PCI/CardBus device, DualEdge transfer support
 */

#define NJSC32_REGSIZE		128	/* size of register set */
#define NJSC32_MEMOFFSET_REG	0x800	/* offset of memory mapped register */

/*
 * Direct registers
 */
#define NJSC32_REG_IRQ			0x00	/* len=2 R/W */
# define NJSC32_IRQ_MSG			0x0001
# define NJSC32_IRQ_IO			0x0002
# define NJSC32_IRQ_CD			0x0004
# define NJSC32_IRQ_BUS_FREE		0x0008
# define NJSC32_IRQ_RESELECT		0x0010
# define NJSC32_IRQ_PHASE_CHANGE	0x0020
# define NJSC32_IRQ_SCSIRESET		0x0040
# define NJSC32_IRQ_TIMER		0x0080
# define NJSC32_IRQ_FIFO_THRESHOLD	0x0100
# define NJSC32_IRQ_PCI			0x0200
# define NJSC32_IRQ_BMCNTERR		0x0400
# define NJSC32_IRQ_AUTOSCSI		0x0800
# define NJSC32_IRQ_MASK_PCI		0x1000
# define NJSC32_IRQ_MASK_TIMER		0x2000
# define NJSC32_IRQ_MASK_FIFO		0x4000
# define NJSC32_IRQ_MASK_SCSI		0x8000

# define NJSC32_IRQ_MASK_ALL		0xf000
# define NJSC32_IRQ_INTR_PENDING	0x0ff0

#define NJSC32_REG_TRANSFER		0x02	/* len=2 R/W */
# define NJSC32_XFR_CB_MMIO_MODE	0x0001
# define NJSC32_XFR_CB_PIO_MODE		0x0002
# define NJSC32_XFR_BM_TEST		0x0004
# define NJSC32_XFR_BM_TEST_DIR		0x0008
# define NJSC32_XFR_DUALEDGE_ENABLE	0x0010	/* (UDE) */
# define NJSC32_XFR_NO_XFER_TO_HOST	0x0020	/* (UDE) */
					/* reserved */
# define NJSC32_XFR_TRANSFER_GO		0x0080
# define NJSC32_XFR_BLIND_MODE		0x0100
# define NJSC32_XFR_BM_START		0x0200
# define NJSC32_XFR_ADVANCED_BM_WRITE	0x0400
# define NJSC32_XFR_BM_SINGLE_MODE	0x0800
# define NJSC32_XFR_FIFO_FULL		0x1000	/* RO */
# define NJSC32_XFR_FIFO_EMPTY		0x2000	/* RO */
# define NJSC32_XFR_ALL_COUNT_CLR	0x4000
# define NJSC32_XFR_FIFO_TEST		0x8000

#define NJSC32_REG_INDEX		0x04	/* len=1 R/W, len=2 RO */
# define NJSC32_INDEX_GAREV(x)		((x) >> 8)
# define NJSC32_INDEX_GAREV_MIN		0x51

#define NJSC32_REG_TIMER		0x06	/* len=2 R/W */
# define NJSC32_TIMER_CNT_MASK		0x00ff
# define NJSC32_TIMER_STOP		0x0100

#define NJSC32_REG_DATA_LOW		0x08	/* len=2 R/W */
#define NJSC32_REG_DATA_HIGH		0x0a	/* len=2 R/W */

#define NJSC32_REG_FIFO_REST_CNT	0x0c	/* len=2 R/W */
# define NJSC32_FIFOCNT_MASK		0x01ff
# define NJSC32_FIFOCNT_LOW_WATER	0x4000
# define NJSC32_FIFOCNT_HIGH_WATER	0x8000

#define NJSC32_REG_SREQ_SAMPLING	0x0f	/* len=1 R/W */
# define NJSC32_SREQ_SAMPLING_RATE0	0x01
# define NJSC32_SREQ_SAMPLING_RATE1	0x02
# define NJSC32_SREQ_SAMPLING_ENABLE	0x04

# define NJSC32_SREQ_SAMPLING_1CLK	0
# define NJSC32_SREQ_SAMPLING_2CLK	NJSC32_SREQ_SAMPLING_RATE0
# define NJSC32_SREQ_SAMPLING_4CLK	NJSC32_SREQ_SAMPLING_RATE1

#define NJSC32_REG_SCSI_BUS_CONTROL	0x10	/* len=1 R/W */
# define NJSC32_SBCTL_SEL		0x01
# define NJSC32_SBCTL_RST		0x02
# define NJSC32_SBCTL_DATAOUT_ENABLE	0x04
# define NJSC32_SBCTL_ATN		0x08
# define NJSC32_SBCTL_ACK		0x10
# define NJSC32_SBCTL_BSY		0x20
# define NJSC32_SBCTL_AUTODIRECTION	0x40
# define NJSC32_SBCTL_ACK_ENABLE	0x80

#define NJSC32_REG_CLR_COUNTER		0x12	/* len=1 WO */
# define NJSC32_CLRCNT_ACK		0x01
# define NJSC32_CLRCNT_REQ		0x02
# define NJSC32_CLRCNT_FIFO_HOST_PTR	0x04
# define NJSC32_CLRCNT_FIFO_REST	0x08
# define NJSC32_CLRCNT_BM		0x10
# define NJSC32_CLRCNT_SAVED_ACK	0x20

# define NJSC32_CLCNT_ALL		0x3f

#define NJSC32_REG_SCSI_BUS_MONITOR	0x12	/* len=1 RO */
# define NJSC32_BUSMON_MSG		0x01
# define NJSC32_BUSMON_IO		0x02
# define NJSC32_BUSMON_CD		0x04
# define NJSC32_BUSMON_BSY		0x08
# define NJSC32_BUSMON_ACK		0x10
# define NJSC32_BUSMON_REQ		0x20
# define NJSC32_BUSMON_SEL		0x40
# define NJSC32_BUSMON_ATN		0x80

# define NJSC32_BUSMON_BUSFREE		0x00
# define NJSC32_BUSMON_COMMAND		(NJSC32_BUSMON_CD | \
	NJSC32_BUSMON_BSY | NJSC32_BUSMON_REQ)
# define NJSC32_BUSMON_MESSAGE_IN	(NJSC32_BUSMON_MSG | \
	NJSC32_BUSMON_BSY | NJSC32_BUSMON_IO | NJSC32_BUSMON_CD | \
	NJSC32_BUSMON_REQ)
# define NJSC32_BUSMON_MESSAGE_OUT	(NJSC32_BUSMON_MSG | \
	NJSC32_BUSMON_BSY | NJSC32_BUSMON_CD | NJSC32_BUSMON_REQ)
# define NJSC32_BUSMON_DATA_IN		(NJSC32_BUSMON_IO | \
	NJSC32_BUSMON_BSY | NJSC32_BUSMON_REQ)
# define NJSC32_BUSMON_DATA_OUT	(NJSC32_BUSMON_BSY | \
	NJSC32_BUSMON_REQ)
# define NJSC32_BUSMON_STATUS		(NJSC32_BUSMON_IO | \
	NJSC32_BUSMON_CD | NJSC32_BUSMON_BSY | NJSC32_BUSMON_REQ)
# define NJSC32_BUSMON_RESELECT	(NJSC32_BUSMON_IO | NJSC32_BUSMON_SEL)

# define NJSC32_BUSMON_PHASE_MASK	(NJSC32_BUSMON_MSG | \
	NJSC32_BUSMON_IO | NJSC32_BUSMON_BSY | NJSC32_BUSMON_CD | \
	NJSC32_BUSMON_SEL)

# define NJSC32_PHASE_BUSFREE		\
	(NJSC32_BUSMON_BUSFREE & NJSC32_BUSMON_PHASE_MASK)
# define NJSC32_PHASE_COMMAND		\
	(NJSC32_BUSMON_COMMAND & NJSC32_BUSMON_PHASE_MASK)
# define NJSC32_PHASE_MESSAGE_IN	\
	(NJSC32_BUSMON_MESSAGE_IN & NJSC32_BUSMON_PHASE_MASK)
# define NJSC32_PHASE_MESSAGE_OUT	\
	(NJSC32_BUSMON_MESSAGE_OUT & NJSC32_BUSMON_PHASE_MASK)
# define NJSC32_PHASE_DATA_IN		\
	(NJSC32_BUSMON_DATA_IN & NJSC32_BUSMON_PHASE_MASK)
# define NJSC32_PHASE_DATA_OUT		\
	(NJSC32_BUSMON_DATA_OUT & NJSC32_BUSMON_PHASE_MASK)
# define NJSC32_PHASE_STATUS		\
	(NJSC32_BUSMON_STATUS & NJSC32_BUSMON_PHASE_MASK)
# define NJSC32_PHASE_RESELECT		\
	(NJSC32_BUSMON_RESELECT & NJSC32_BUSMON_PHASE_MASK)

#define NJSC32_REG_COMMAND_DATA		0x14	/* len=1 R/W */

#define NJSC32_REG_PARITY_CONTROL	0x16	/* len=1 WO */
# define NJSC32_PARITYCTL_CHECK_ENABLE	0x01
# define NJSC32_PARITYCTL_CLEAR_ERROR	0x02

#define NJSC32_REG_PARITY_STATUS	0x16	/* len=1 RO */
# define NJSC32_PARITYSTATUS_ERROR_LSB	0x02
# define NJSC32_PARITYSTATUS_ERROR_MSB	0x04	/* (UDE) */

#define NJSC32_REG_RESELECT_ID		0x18	/* len=1 RO */

#define NJSC32_REG_COMMAND_CONTROL	0x18	/* len=2 WO */
# define NJSC32_CMD_CLEAR_CDB_FIFO_PTR	0x0001
# define NJSC32_CMD_AUTO_COMMAND_PHASE	0x0002
# define NJSC32_CMD_AUTO_SCSI_START	0x0004
# define NJSC32_CMD_AUTO_SCSI_RESTART	0x0008
# define NJSC32_CMD_AUTO_PARAMETER	0x0010	/* load parameters via DMA */
# define NJSC32_CMD_AUTO_ATN		0x0020
# define NJSC32_CMD_AUTO_MSGIN_00_04	0x0040	/* Command Complete (00)
						   or Disconnect (04) */
# define NJSC32_CMD_AUTO_MSGIN_02	0x0080	/* Save Data Pointer */
# define NJSC32_CMD_AUTO_MSGIN_03	0x0100	/* Restore Pointers */

#define NJSC32_REG_SET_ARBITRATION	0x1a	/* len=1 WO */
# define NJSC32_SETARB_GO		0x01
# define NJSC32_SETARB_CLEAR		0x02

#define NJSC32_REG_ARBITRATION_STAT	0x1a	/* len=1 RO */
# define NJSC32_ARBSTAT_WIN		0x02
# define NJSC32_ARBSTAT_FAIL		0x04
# define NJSC32_ARBSTAT_AUTOPARAM_VALID	0x08
# define NJSC32_ARBSTAT_SG_TABLE_VALID	0x10

#define NJSC32_REG_SYNC			0x1c	/* len=1 R/W */
# define NJSC32_SYNC_VAL(periodnum, syncoffset) ((periodnum)<<4 | (syncoffset))

# define NJSC32_SYNCPERIOD_ASYNC	0
# define NJSC32_SYNCOFFSET_ASYNC	0
# define NJSC32_SYNCOFFSET_MAX		15

#define NJSC32_REG_ACK_WIDTH		0x1d	/* len=1 R/W */
# define NJSC32_ACK_WIDTH_1CLK		0
# define NJSC32_ACK_WIDTH_2CLK		1
# define NJSC32_ACK_WIDTH_3CLK		2
# define NJSC32_ACK_WIDTH_4CLK		3

#define NJSC32_REG_SCSI_DATA_WITH_ACK	0x20	/* len=1 R/W */

#define NJSC32_REG_SCSI_OUT_LATCH	0x22	/* len=1 W */
#define NJSC32_REG_TARGET_ID		0x22	/* len=1 W */
#define NJSC32_REG_DATA_IN		0x22	/* len=1 R */

#define NJSC32_REG_SCAM_CONTROL		0x24	/* len=1 R/W */
# define NJSC32_SCAMCTL_MSG		0x01
# define NJSC32_SCAMCTL_IO		0x02
# define NJSC32_SCAMCTL_CD		0x04
# define NJSC32_SCAMCTL_BSY		0x08
# define NJSC32_SCAMCTL_SEL		0x10
# define NJSC32_SCAMCTL_XFEROK		0x20

#define NJSC32_REG_SCAM_DATA		0x26	/* len=1 R/W */

#define NJSC32_REG_SACK_CNT		0x28	/* len=4 R/W */

#define NJSC32_REG_SREQ_CNT		0x2c	/* len=4 R/W */

#define NJSC32_REG_FIFO_DATA		0x30	/* len=4 R/W */
#define NJSC32_REG_FIFO_ADR		0x34	/* len=4 R/W */

#define NJSC32_REG_BM_CNT		0x38	/* len=4 R/W */
# define NJSC32_BMCNT_MASK		0x0001ffff

#define NJSC32_REG_SGT_ADR		0x3c	/* len=4 R/W */

#define NJSC32_REG_EXECUTE_PHASE	0x40	/* len=2 RO */
# define NJSC32_XPHASE_COMMAND		0x0001
# define NJSC32_XPHASE_DATA_IN		0x0002
# define NJSC32_XPHASE_DATA_OUT		0x0004
# define NJSC32_XPHASE_MSGOUT		0x0008
# define NJSC32_XPHASE_STATUS		0x0010
# define NJSC32_XPHASE_ILLEGAL		0x0020
# define NJSC32_XPHASE_BUS_FREE		0x0040
# define NJSC32_XPHASE_PAUSED_MSG_IN	0x0080
# define NJSC32_XPHASE_PAUSED_MSG_OUT	0x0100
# define NJSC32_XPHASE_SEL_TIMEOUT	0x0200
# define NJSC32_XPHASE_MSGIN_00		0x0400	/* Command Complete */
# define NJSC32_XPHASE_MSGIN_02		0x0800	/* Save Data Pointer */
# define NJSC32_XPHASE_MSGIN_03		0x1000	/* Restore Pointers */
# define NJSC32_XPHASE_MSGIN_04		0x2000	/* Disconnect */
					/* reserved */
# define NJSC32_XPHASE_AUTOSCSI_BUSY	0x8000

#define NJSC32_REG_SCSI_CSB_IN		0x42	/* len=1 RO */

#define NJSC32_REG_SCSI_MSG_OUT		0x44	/* len=4 R/W */
# define NJSC32_MSGOUT_COUNT_MASK	0x00000003
# define NJSC32_MSGOUT_MAX_AUTO		3
# define NJSC32_MSGOUT_VALID		0x00000080
# define NJSC32_MSGOUT_MSG1_SHIFT	8	/* used only if cnt == 3 */
# define NJSC32_MSGOUT_MSG2_SHIFT	16	/* used if cnt == 2 or 3 */
# define NJSC32_MSGOUT_MSG3_SHIFT	24

#define NJSC32_REG_SEL_TIMEOUT		0x48	/* len=2 R/W */

#define NJSC32_REG_SAVED_ACK_CNT	0x4c	/* len=4 RO */

#define NJSC32_REG_HTOS_DATA_DELAY	0x50	/* len=1 R/W (UDE) */
# define NJSC32_HTOSDATADELAY_FACTOR	0x07
# define NJSC32_HTOSDATADELAY_DATA_SEL	0x80

#define NJSC32_REG_STOH_DATA_DELAY	0x54	/* len=1 R/W (UDE) */
#define NJSC32_REG_ACK_SUM_CHECK_RD	0x58	/* len=2 RO (UDE) */
#define NJSC32_REG_REQ_SUM_CHECK_RD	0x5c	/* len=2 RO (UDE) */

/*
 * Indexed registers
 */
#define NJSC32_IREG_CLOCK		0x00	/* len=1 R/W */
# define NJSC32_CLOCK_DIV_2		0x01	/* external 20MHz (FAST SCSI)*/
# define NJSC32_CLOCK_DIV_4		0x02	/* external 40MHz (Ultra SCSI)*/
# define NJSC32_CLOCK_PCICLK		0x80	/* PCI 33.3MHz */

#define NJSC32_IREG_TERM_PWR		0x01	/* len=1 R/W */
# define NJSC32_TERMPWR_BPWR		0x01	/* supply termination power */
# define NJSC32_TERMPWR_SENSE		0x02	/* RO */

#define NJSC32_IREG_EXT_PORT_DDR	0x02	/* len=1 R/W */
#define NJSC32_IREG_EXT_PORT		0x03	/* len=1 R/W */
# define NJSC32_EXTPORT_LED_ON		0x00
# define NJSC32_EXTPORT_LED_OFF		0x01

#define NJSC32_IREG_IRQ_SELECT		0x04	/* len=2 R/W */
# define NJSC32_IRQSEL_RESELECT		0x0001
# define NJSC32_IRQSEL_PHASE_CHANGE	0x0002
# define NJSC32_IRQSEL_SCSIRESET	0x0004
# define NJSC32_IRQSEL_TIMER		0x0008
# define NJSC32_IRQSEL_FIFO_THRESHOLD	0x0010
# define NJSC32_IRQSEL_TARGET_ABORT	0x0020
# define NJSC32_IRQSEL_MASTER_ABORT	0x0040
# define NJSC32_IRQSEL_SERR		0x0080
# define NJSC32_IRQSEL_PERR		0x0100
# define NJSC32_IRQSEL_BMCNTERR		0x0200
# define NJSC32_IRQSEL_AUTO_SCSI_SEQ	0x0400

#define NJSC32_IREG_OLD_SCSI_PHASE	0x05	/* len=1 R/W */
# define NJSC32_OLDSCSI_PHASE_MSG	0x01
# define NJSC32_OLDSCSI_PHASE_IO	0x02
# define NJSC32_OLDSCSI_PHASE_CD	0x04
# define NJSC32_OLDSCSI_PHASE_BUSY	0x08

#define NJSC32_IREG_FIFO_THRESHOLD_FULL		0x06	/* len=1 R/W */
# define NJSC32_FIFO_FULL_PIO_MMIO	0x40
# define NJSC32_FIFO_FULL_BUSMASTER	0x10
#define NJSC32_IREG_FIFO_THRESHOLD_EMPTY	0x07	/* len=1 R/W */
# define NJSC32_FIFO_EMPTY_PIO_MMIO	0x40
# define NJSC32_FIFO_EMPTY_BUSMASTER	0x60

#define NJSC32_IREG_EXP_ROM		0x08	/* len=1 R/W */
# define NJSC32_EXPROM_WRITE_ENB	0x01
# define NJSC32_EXPROM_IO_ACCESS_ENB	0x02
# define NJSC32_EXPROM_ADR_CLEAR	0x04

#define NJSC32_IREG_EXP_ROM_ADR		0x09	/* len=1 R/W */
#define NJSC32_IREG_EXP_ROM_DATA	0x0a	/* len=1 R/W */

#define NJSC32_IREG_CHIP_MODE		0x0b	/* len=1 RO (Bi only)*/
# define NJSC32_CHIPMODE_OEM_MASK	0x06
#  define NJSC32_CHIPMODE_OEM_IODATA	0x00	/* I-O DATA */
#  define NJSC32_CHIPMODE_OEM_KME	0x02	/* Kyushu Matsushita Electric */
#  define NJSC32_CHIPMODE_OEM_WORKBIT	0x04	/* Workbit */
#  define NJSC32_CHIPMODE_OEM_EXTROM	0x06
# define NJSC32_CHIPMODE_OPTB		0x08
# define NJSC32_CHIPMODE_OPTC		0x10
# define NJSC32_CHIPMODE_OPTD		0x20
# define NJSC32_CHIPMODE_OPTE		0x40
# define NJSC32_CHIPMODE_OPTF		0x80

#define NJSC32_IREG_MISC		0x0c	/* len=2 R/W */
# define NJSC32_MISC_SCSI_DIRECTION_DETECTOR_SELECT	0x0001
# define NJSC32_MISC_SCSI2HOST_DIRECTION_VALID		0x0002	/* RO */
# define NJSC32_MISC_HOST2SCSI_DIRECTION_VALID		0x0004	/* RO */
# define NJSC32_MISC_DELAYED_BMSTART			0x0008
# define NJSC32_MISC_MASTER_TERMINATION_SELECT		0x0010
# define NJSC32_MISC_BMREQ_NEGATE_TIMING_SEL		0x0020
# define NJSC32_MISC_AUTOSEL_TIMING_SEL			0x0040
# define NJSC32_MISC_MABORT_MASK			0x0080	/* (UDE) */
# define NJSC32_MISC_BMSTOP_CHANGE2_NONDATA_PHASE	0x0100	/* (UDE) */

#define NJSC32_IREG_BM			0x0d	/* len=1 R/W */
# define NJSC32_BM_CYCLE0			0x01
# define NJSC32_BM_CYCLE1			0x02
# define NJSC32_BM_FRAME_ASSERT_TIMING		0x04
# define NJSC32_BM_IRDY_ASSERT_TIMING		0x08
# define NJSC32_BM_SINGLE_MASTER		0x10
# define NJSC32_BM_MEMRD_CMD0			0x20
# define NJSC32_BM_SGT_AUTO_PARA_MEMRD_CMD	0x40
# define NJSC32_BM_MEMRD_CMD1			0x80

#define NJSC32_IREG_UP_CNT		0x0f	/* len=1 WO */
# define NJSC32_UPCNT_REQCNT		0x01
# define NJSC32_UPCNT_ACKCNT		0x02
# define NJSC32_UPCNT_BMADR		0x10
# define NJSC32_UPCNT_BMCNT		0x20
# define NJSC32_UPCNT_SGTCNT		0x80

#define NJSC32_IREG_CFG_CMD_STR		0x10	/* len=2 RO */

#define NJSC32_IREG_CFG_LATE_CACHE	0x11	/* len=2 R/W */

#define NJSC32_IREG_CFG_BASE_ADR1	0x12	/* len=2 RO */
#define NJSC32_IREG_CFG_BASE_ADR2	0x13	/* len=2 RO */

#define NJSC32_IREG_CFG_INLINE		0x14	/* len=2 RO */

#define NJSC32_IREG_SERIAL_ROM		0x15	/* len=1 R/W (UDE) */
# define NJSC32_SERIALROM_CLOCK		0x01
# define NJSC32_SERIALROM_ENABLE	0x02
# define NJSC32_SERIALROM_DATA		0x04

#define NJSC32_IREG_HST_POINTER	0x16	/* len=1 R/W */

#define NJSC32_IREG_SREQ_DELAY		0x17	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SACK_DELAY		0x18	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SREQ_NOISE_CANCEL	0x19	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SDP_NOISE_CANCEL	0x1a	/* len=1 R/W (UDE) */
#define NJSC32_IREG_DELAY_TEST		0x1b	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD0_NOISE_CANCEL	0x20	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD1_NOISE_CANCEL	0x21	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD2_NOISE_CANCEL	0x22	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD3_NOISE_CANCEL	0x23	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD4_NOISE_CANCEL	0x24	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD5_NOISE_CANCEL	0x25	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD6_NOISE_CANCEL	0x26	/* len=1 R/W (UDE) */
#define NJSC32_IREG_SD7_NOISE_CANCEL	0x27	/* len=1 R/W (UDE) */

/*
 * DMA data structure
 */

/* scatter/gather transfer table entry (8 bytes) */
struct njsc32_sgtable {
	u_int32_t	sg_addr;	/* transfer address (little endian) */
	u_int32_t	sg_len;		/* transfer length (little endian) */
#define NJSC32_SGT_ENDMARK	0x80000000
#define NJSC32_SGT_MAXSEGLEN	0x10000
};
#define NJSC32_SGT_MAXENTRY	18

/* autoparam (88 bytes) */
#define NJSC32_AUTOPARAM_CDBLEN	16
struct njsc32_autoparam {
	struct njsc32_autoparam_cdb {
		u_int8_t	cdb_data;
		u_int8_t	cdb_reserved0, cdb_reserved1, cdb_reserved2;
	} ap_cdb[NJSC32_AUTOPARAM_CDBLEN];	/* Command Descriptor Block */
	u_int32_t	ap_msgout;	/* msgout buffer (little endian) */
	u_int8_t	ap_sync;	/* NJSC32_REG_SYNC */
	u_int8_t	ap_ackwidth;	/* NJSC32_REG_ACK_WIDTH */
	u_int8_t	ap_targetid;	/* initiator and target id */
	u_int8_t	ap_sample;	/* NJSC32_REG_SREQ_SAMPLING */
	u_int16_t	ap_cmdctl;	/* command control (little endian) */
	u_int16_t	ap_xferctl;	/* transfer control (little endian) */
	u_int32_t	ap_sgtdmaaddr;	/* SG table addr (little endian) */
	u_int32_t	ap_pad[2];
};

/*
 * device specific constants
 */

#define NJSC32_NTARGET		8	/* Narrow SCSI */
#define NJSC32_NLU		8

#define NJSC32_INITIATOR_ID	7	/* fixed value? */
#define NJSC32_MAX_TARGET_ID	6	/* 0..6 */

#endif	/* _NJSC32REG_H_ */