FreeBSD/Linux Kernel Cross Reference
sys/dev/trm/trm.h
1 /*-
2 * File Name : trm.h
3 *
4 * Tekram DC395U/UW/F ,DC315/U
5 * PCI SCSI Bus Master Host Adapter Device Driver
6 * (SCSI chip set used Tekram ASIC TRM-S1040)
7 *
8 * (C)Copyright 1995-2001 Tekram Technology Co.,Ltd.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote products
19 * derived from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 * $FreeBSD: releng/11.2/sys/dev/trm/trm.h 331722 2018-03-29 02:50:57Z eadler $
33 */
34
35 #ifndef trm_H
36 #define trm_H
37
38 /* SCSI CAM */
39
40 #define TRM_TRANS_CUR 0x01 /* Modify current neogtiation status */
41 #define TRM_TRANS_ACTIVE 0x03 /* Assume this is the active target */
42 #define TRM_TRANS_GOAL 0x04 /* Modify negotiation goal */
43 #define TRM_TRANS_USER 0x08 /* Modify user negotiation settings */
44
45 struct trm_transinfo {
46 u_int8_t width;
47 u_int8_t period;
48 u_int8_t offset;
49 };
50
51 struct trm_target_info {
52 u_int8_t disc_tag; /* bits define..... */
53 #define TRM_CUR_DISCENB 0x01 /* current setting disconnect enable */
54 #define TRM_CUR_TAGENB 0x02 /* current setting tag command Q enable */
55 #define TRM_USR_DISCENB 0x04 /* user adapter device setting disconnect enable */
56 #define TRM_USR_TAGENB 0x08 /* user adapter device setting tag command Q enable*/
57 struct trm_transinfo current; /* info of current */
58 struct trm_transinfo goal; /* info of after negotiating */
59 struct trm_transinfo user; /* info of user adapter device setting */
60 };
61 /*
62 * SCSI CAM **
63 */
64
65 /*
66 * bus_dma_segment_t
67 *
68 * Describes a single contiguous DMA transaction. Values
69 * are suitable for programming into DMA registers.
70 *
71 *typedef struct bus_dma_segment
72 *{
73 * bus_addr_t ds_addr; // DMA address
74 * bus_size_t ds_len; // length of transfer
75 *} bus_dma_segment_t;
76 */
77
78 /*;----------------------Segment Entry------------------------------------*/
79 typedef struct _SGentry {
80 u_int32_t address;
81 u_int32_t length;
82 } SGentry, *PSEG;
83 /*
84 *-----------------------------------------------------------------------
85 * feature of chip set MAX value
86 *-----------------------------------------------------------------------
87 */
88
89 #define TRM_MAX_ADAPTER_NUM 4
90 #define TRM_MAX_DEVICES 16
91 #define TRM_MAX_SG_LISTENTRY 32
92 #define TRM_MAX_TARGETS 16
93 #define TRM_MAX_TAGS_CMD_QUEUE 256 /* MAX_CMD_QUEUE 20*/
94 #define TRM_MAX_CMD_PER_LUN 32
95 #define TRM_MAX_SRB_CNT 256
96 #define TRM_MAX_START_JOB 256
97 #define TRM_MAXPHYS (128 * 1024)
98 #define TRM_NSEG (btoc(TRM_MAXPHYS) + 1)
99 #define TRM_MAXTRANSFER_SIZE 0xFFFFFF /* restricted by 24 bit counter */
100 #define PAGELEN 4096
101
102 #define SEL_TIMEOUT 153 /* 250 ms selection timeout (@ 40MHz) */
103
104 /*
105 * CAM ccb
106 * Union of all CCB types for kernel space allocation. This union should
107 * never be used for manipulating CCBs - its only use is for the allocation
108 * and deallocation of raw CCB space and is the return type of xpt_ccb_alloc
109 * and the argument to xpt_ccb_free.
110 *
111 *union ccb {
112 * struct ccb_hdr ccb_h; // For convenience
113 * struct ccb_scsiio csio;
114 * struct ccb_getdev cgd;
115 * struct ccb_getdevlist cgdl;
116 * struct ccb_pathinq cpi;
117 * struct ccb_relsim crs;
118 * struct ccb_setasync csa;
119 * struct ccb_setdev csd;
120 * struct ccb_dev_match cdm;
121 * struct ccb_trans_settings cts;
122 * struct ccb_calc_geometry ccg;
123 * struct ccb_abort cab;
124 * struct ccb_resetbus crb;
125 * struct ccb_resetdev crd;
126 * struct ccb_termio tio;
127 * struct ccb_accept_tio atio;
128 * struct ccb_scsiio ctio;
129 * struct ccb_en_lun cel;
130 * struct ccb_immed_notify cin;
131 * struct ccb_notify_ack cna;
132 * struct ccb_eng_inq cei;
133 * struct ccb_eng_exec cee;
134 * struct ccb_rescan crcn;
135 * struct ccb_debug cdbg;
136 * };
137 */
138
139 /*
140 *-----------------------------------------------------------------------
141 * SCSI Request Block
142 *-----------------------------------------------------------------------
143 */
144 struct _SRB {
145 u_int8_t CmdBlock[12];
146 u_long Segment0[2];
147 u_long Segment1[2];
148 struct _SRB *pNextSRB;
149 struct _DCB *pSRBDCB;
150 SGentry SgSenseTemp;
151
152 PSEG pSRBSGL; /* scatter gather list */
153
154 u_int32_t SRBSGPhyAddr; /* a segment starting address */
155 u_int32_t SRBTotalXferLength;
156
157 /*
158 * CAM ccb
159 */
160 union ccb *pccb;
161 bus_dmamap_t sg_dmamap;
162 bus_dmamap_t dmamap;
163 u_int16_t SRBState;
164 u_int8_t * pMsgPtr;
165
166 u_int8_t SRBSGCount;
167 u_int8_t SRBSGIndex;
168 u_int8_t MsgInBuf[6];
169 u_int8_t MsgOutBuf[6];
170
171 u_int8_t AdaptStatus;
172 u_int8_t TargetStatus;
173 u_int8_t MsgCnt;
174 u_int8_t TagNumber;
175
176 u_int8_t SRBStatus;
177 u_int8_t RetryCnt;
178 u_int8_t SRBFlag;
179 u_int8_t ScsiCmdLen;
180 u_int8_t ScsiPhase;
181 u_int8_t Reserved[3]; /*;for dword alignment */
182 };
183 typedef struct _SRB TRM_SRB, *PSRB;
184
185 /*
186 *-----------------------------------------------------------------------
187 * Device Control Block
188 *-----------------------------------------------------------------------
189 */
190 struct _DCB
191 {
192 PSRB pWaitingSRB;
193 PSRB pWaitingLastSRB;
194
195 PSRB pGoingSRB;
196 PSRB pGoingLastSRB;
197
198 PSRB pActiveSRB;
199
200 u_int16_t GoingSRBCnt;
201 u_int16_t MaxActiveCommandCnt;
202
203 u_int8_t TargetID; /*; SCSI Target ID (SCSI Only) */
204 u_int8_t TargetLUN; /*; SCSI Log. Unit (SCSI Only) */
205 u_int8_t DCBFlag;
206 u_int8_t DevType;
207
208 u_int8_t SyncMode; /* mode ? (1 sync):(0 async) */
209 u_int8_t MaxNegoPeriod; /* for nego. */
210 u_int8_t SyncPeriod; /* for reg. */
211 u_int8_t SyncOffset; /* for reg. and nego.(low nibble) */
212
213 u_int8_t DevMode;
214 u_int8_t AdpMode;
215
216 u_int8_t IdentifyMsg;
217 u_int8_t DCBstatus; /* DCB status */
218 /*u_int8_t Reserved[3]; for dword alignment */
219 struct trm_target_info tinfo; /* 10 bytes */
220 struct _DCB *pNextDCB;
221 };
222 typedef struct _DCB TRM_DCB, *PDCB;
223
224 /*
225 *-----------------------------------------------------------------------
226 * Adapter Control Block
227 *-----------------------------------------------------------------------
228 */
229 struct _ACB
230 {
231 device_t dev;
232
233 bus_space_tag_t tag;
234 bus_space_handle_t bsh;
235 bus_dma_tag_t parent_dmat;
236 bus_dma_tag_t buffer_dmat; /* dmat for buffer I/O */
237 bus_dma_tag_t srb_dmat;
238 bus_dma_tag_t sense_dmat; /* dmat for sense buffer */
239 bus_dma_tag_t sg_dmat;
240 bus_dmamap_t sense_dmamap;
241 bus_dmamap_t srb_dmamap;
242 bus_addr_t sense_busaddr;
243 struct scsi_sense_data *sense_buffers;
244 struct resource *iores, *irq;
245 void *ih;
246 /*
247 * CAM SIM/XPT
248 */
249 struct cam_sim *psim;
250 struct cam_path *ppath;
251
252 TRM_SRB TmpSRB;
253 TRM_DCB DCBarray[16][8];
254
255 u_int32_t srb_physbase;
256
257 PSRB pFreeSRB;
258 PDCB pActiveDCB;
259
260 PDCB pLinkDCB;
261 PDCB pDCBRunRobin;
262
263 u_int16_t max_id;
264 u_int16_t max_lun;
265
266 u_int8_t msgin123[4];
267
268 u_int8_t scan_devices[16][8];
269
270 u_int8_t AdaptSCSIID; /*; Adapter SCSI Target ID */
271 u_int8_t AdaptSCSILUN; /*; Adapter SCSI LUN */
272 u_int8_t DeviceCnt;
273 u_int8_t ACBFlag;
274
275 u_int8_t TagMaxNum;
276 u_int8_t Config;
277 u_int8_t AdaptType;
278 u_int8_t AdapterUnit; /* nth Adapter this driver */
279 };
280 typedef struct _ACB TRM_ACB, *PACB;
281 /*
282 * ----SRB State machine definition
283 */
284 #define SRB_FREE 0x0000
285 #define SRB_WAIT 0x0001
286 #define SRB_READY 0x0002
287 #define SRB_MSGOUT 0x0004 /*arbitration+msg_out 1st byte*/
288 #define SRB_MSGIN 0x0008
289 #define SRB_EXTEND_MSGIN 0x0010
290 #define SRB_COMMAND 0x0020
291 #define SRB_START_ 0x0040 /*arbitration+msg_out+command_out*/
292 #define SRB_DISCONNECT 0x0080
293 #define SRB_DATA_XFER 0x0100
294 #define SRB_XFERPAD 0x0200
295 #define SRB_STATUS 0x0400
296 #define SRB_COMPLETED 0x0800
297 #define SRB_ABORT_SENT 0x1000
298 #define SRB_DO_SYNC_NEGO 0x2000
299 #define SRB_DO_WIDE_NEGO 0x4000
300 #define SRB_UNEXPECT_RESEL 0x8000
301 /*
302 *
303 * ACB Config
304 *
305 */
306 #define HCC_WIDE_CARD 0x20
307 #define HCC_SCSI_RESET 0x10
308 #define HCC_PARITY 0x08
309 #define HCC_AUTOTERM 0x04
310 #define HCC_LOW8TERM 0x02
311 #define HCC_UP8TERM 0x01
312 /*
313 * ---ACB Flag
314 */
315 #define RESET_DEV 0x00000001
316 #define RESET_DETECT 0x00000002
317 #define RESET_DONE 0x00000004
318
319 /*
320 * ---DCB Flag
321 */
322 #define ABORT_DEV_ 0x00000001
323
324 /*
325 * ---DCB status
326 */
327 #define DS_IN_QUEUE 0x00000001
328
329 /*
330 * ---SRB status
331 */
332 #define SRB_OK 0x00000001
333 #define ABORTION 0x00000002
334 #define OVER_RUN 0x00000004
335 #define UNDER_RUN 0x00000008
336 #define PARITY_ERROR 0x00000010
337 #define SRB_ERROR 0x00000020
338
339 /*
340 * ---SRB Flag
341 */
342 #define DATAOUT 0x00000080
343 #define DATAIN 0x00000040
344 #define RESIDUAL_VALID 0x00000020
345 #define ENABLE_TIMER 0x00000010
346 #define RESET_DEV0 0x00000004
347 #define ABORT_DEV 0x00000002
348 #define AUTO_REQSENSE 0x00000001
349
350 /*
351 * ---Adapter status
352 */
353 #define H_STATUS_GOOD 0x00
354 #define H_SEL_TIMEOUT 0x11
355 #define H_OVER_UNDER_RUN 0x12
356 #define H_UNEXP_BUS_FREE 0x13
357 #define H_TARGET_PHASE_F 0x14
358 #define H_INVALID_CCB_OP 0x16
359 #define H_LINK_CCB_BAD 0x17
360 #define H_BAD_TARGET_DIR 0x18
361 #define H_DUPLICATE_CCB 0x19
362 #define H_BAD_CCB_OR_SG 0x1A
363 #define H_ABORT 0x0FF
364
365 /*
366 * ---SCSI Status byte codes
367 */
368 #define SCSI_STAT_GOOD 0x00 /*; Good status */
369 #define SCSI_STAT_CHECKCOND 0x02 /*; SCSI Check Condition */
370 #define SCSI_STAT_CONDMET 0x04 /*; Condition Met */
371 #define SCSI_STAT_BUSY 0x08 /*; Target busy status */
372 #define SCSI_STAT_INTER 0x10 /*; Intermediate status */
373 #define SCSI_STAT_INTERCONDMET 0x14 /*; Intermediate condition met */
374 #define SCSI_STAT_RESCONFLICT 0x18 /*; Reservation conflict */
375 #define SCSI_STAT_CMDTERM 0x22 /*; Command Terminated */
376 #define SCSI_STAT_QUEUEFULL 0x28 /*; Queue Full */
377 #define SCSI_STAT_UNEXP_BUS_F 0xFD /*; Unexpect Bus Free */
378 #define SCSI_STAT_BUS_RST_DETECT 0xFE /*; Scsi Bus Reset detected */
379 #define SCSI_STAT_SEL_TIMEOUT 0xFF /*; Selection Time out */
380
381 /*
382 * ---Sync_Mode
383 */
384 #define SYNC_WIDE_TAG_ATNT_DISABLE 0x00000000
385 #define SYNC_NEGO_ENABLE 0x00000001
386 #define SYNC_NEGO_DONE 0x00000002
387 #define WIDE_NEGO_ENABLE 0x00000004
388 #define WIDE_NEGO_DONE 0x00000008
389 #define EN_TAG_QUEUING 0x00000010
390 #define EN_ATN_STOP 0x00000020
391
392 #define SYNC_NEGO_OFFSET 15
393 /*
394 * ---SCSI bus phase
395 */
396 #define SCSI_DATA_OUT_ 0
397 #define SCSI_DATA_IN_ 1
398 #define SCSI_COMMAND 2
399 #define SCSI_STATUS_ 3
400 #define SCSI_NOP0 4
401 #define SCSI_NOP1 5
402 #define SCSI_MSG_OUT 6
403 #define SCSI_MSG_IN 7
404
405 /*
406 * ----SCSI MSG u_int8_t
407 */
408 #define MSG_COMPLETE 0x00
409 #define MSG_EXTENDED 0x01
410 #define MSG_SAVE_PTR 0x02
411 #define MSG_RESTORE_PTR 0x03
412 #define MSG_DISCONNECT 0x04
413 #define MSG_INITIATOR_ERROR 0x05
414 #define MSG_ABORT 0x06
415 #define MSG_REJECT_ 0x07
416 #define MSG_NOP 0x08
417 #define MSG_PARITY_ERROR 0x09
418 #define MSG_LINK_CMD_COMPL 0x0A
419 #define MSG_LINK_CMD_COMPL_FLG 0x0B
420 #define MSG_BUS_RESET 0x0C
421 /* #define MSG_ABORT_TAG 0x0D */
422 #define MSG_SIMPLE_QTAG 0x20
423 #define MSG_HEAD_QTAG 0x21
424 #define MSG_ORDER_QTAG 0x22
425 #define MSG_IGNOREWIDE 0x23
426 /* #define MSG_IDENTIFY 0x80 */
427 #define MSG_HOST_ID 0xC0
428 /* bus wide length */
429 #define MSG_EXT_WDTR_BUS_8_BIT 0x00
430 #define MSG_EXT_WDTR_BUS_16_BIT 0x01
431 #define MSG_EXT_WDTR_BUS_32_BIT 0x02
432 /*
433 * ----SCSI STATUS u_int8_t
434 */
435 #define STATUS_GOOD 0x00
436 #define CHECK_CONDITION_ 0x02
437 #define STATUS_BUSY 0x08
438 #define STATUS_INTERMEDIATE 0x10
439 #define RESERVE_CONFLICT 0x18
440
441 /*
442 * ---- cmd->result
443 */
444 #define STATUS_MASK_ 0xFF
445 #define MSG_MASK 0xFF00
446 #define RETURN_MASK 0xFF0000
447
448 /*
449 * Inquiry Data format
450 */
451
452 typedef struct _SCSIInqData { /* INQ */
453
454 u_int8_t DevType; /* Periph Qualifier & Periph Dev Type */
455 u_int8_t RMB_TypeMod; /* rem media bit & Dev Type Modifier */
456 u_int8_t Vers; /* ISO, ECMA, & ANSI versions */
457 u_int8_t RDF; /* AEN, TRMIOP, & response data format*/
458 u_int8_t AddLen; /* length of additional data */
459 u_int8_t Res1; /* reserved */
460 u_int8_t Res2; /* reserved */
461 u_int8_t Flags; /* RelADr,Wbus32,Wbus16,Sync,etc. */
462 u_int8_t VendorID[8]; /* Vendor Identification */
463 u_int8_t ProductID[16]; /* Product Identification */
464 u_int8_t ProductRev[4]; /* Product Revision */
465 } SCSI_INQDATA, *PSCSI_INQDATA;
466
467
468 /*
469 * Inquiry byte 0 masks
470 */
471 #define SCSI_DEVTYPE 0x1F /* Peripheral Device Type */
472 #define SCSI_PERIPHQUAL 0xE0 /* Peripheral Qualifier */
473 /*
474 * Inquiry byte 1 mask
475 */
476 #define SCSI_REMOVABLE_MEDIA 0x80 /* Removable Media bit (1=removable) */
477 /*
478 * Peripheral Device Type definitions
479 */
480 #define SCSI_DASD 0x00 /* Direct-access Device */
481 #define SCSI_SEQACESS 0x01 /* Sequential-access device */
482 #define SCSI_PRINTER 0x02 /* Printer device */
483 #define SCSI_PROCESSOR 0x03 /* Processor device */
484 #define SCSI_WRITEONCE 0x04 /* Write-once device */
485 #define SCSI_CDROM 0x05 /* CD-ROM device */
486 #define SCSI_SCANNER 0x06 /* Scanner device */
487 #define SCSI_OPTICAL 0x07 /* Optical memory device */
488 #define SCSI_MEDCHGR 0x08 /* Medium changer device */
489 #define SCSI_COMM 0x09 /* Communications device */
490 #define SCSI_NODEV 0x1F /* Unknown or no device type */
491 /*
492 * Inquiry flag definitions (Inq data byte 7)
493 */
494 #define SCSI_INQ_RELADR 0x80 /* device supports relative addressing*/
495 #define SCSI_INQ_WBUS32 0x40 /* device supports 32 bit data xfers */
496 #define SCSI_INQ_WBUS16 0x20 /* device supports 16 bit data xfers */
497 #define SCSI_INQ_SYNC 0x10 /* device supports synchronous xfer */
498 #define SCSI_INQ_LINKED 0x08 /* device supports linked commands */
499 #define SCSI_INQ_CMDQUEUE 0x02 /* device supports command queueing */
500 #define SCSI_INQ_SFTRE 0x01 /* device supports soft resets */
501 /*
502 *==========================================================
503 * EEPROM byte offset
504 *==========================================================
505 */
506 typedef struct _EEprom {
507 u_int8_t EE_MODE1;
508 u_int8_t EE_SPEED;
509 u_int8_t xx1;
510 u_int8_t xx2;
511 } EEprom, *PEEprom;
512
513 #define EE_ADAPT_SCSI_ID 64
514 #define EE_MODE2 65
515 #define EE_DELAY 66
516 #define EE_TAG_CMD_NUM 67
517
518 /*
519 * EE_MODE1 bits definition
520 */
521 #define PARITY_CHK_ 0x00000001
522 #define SYNC_NEGO_ 0x00000002
523 #define EN_DISCONNECT_ 0x00000004
524 #define SEND_START_ 0x00000008
525 #define TAG_QUEUING_ 0x00000010
526
527 /*
528 * EE_MODE2 bits definition
529 */
530 #define MORE2_DRV 0x00000001
531 #define GREATER_1G 0x00000002
532 #define RST_SCSI_BUS 0x00000004
533 #define ACTIVE_NEGATION 0x00000008
534 #define NO_SEEK 0x00000010
535 #define LUN_CHECK 0x00000020
536
537 #define ENABLE_CE 0x01
538 #define DISABLE_CE 0x00
539 #define EEPROM_READ 0x80
540
541 /*
542 * The PCI configuration register offset for TRM_S1040
543 * Registers bit Definition
544 */
545 #define TRMREG_ID 0x00 /* Vendor and Device ID */
546 #define TRMREG_COMMAND 0x04 /* PCI command register */
547 #define TRMREG_IOBASE 0x10 /* I/O Space base address */
548 #define TRMREG_ROMBASE 0x30 /* Expansion ROM Base Address */
549 #define TRMREG_INTLINE 0x3C /* Interrupt line */
550
551 /*
552 *
553 * The SCSI register offset for TRM_S1040
554 *
555 */
556 #define TRMREG_SCSI_STATUS 0x80 /* SCSI Status (R) */
557 /* ######### */
558 #define COMMANDPHASEDONE 0x2000 /* SCSI command phase done */
559 #define SCSIXFERDONE 0x0800 /* SCSI SCSI transfer done */
560 #define SCSIXFERCNT_2_ZERO 0x0100 /* SCSI SCSI transfer count to zero*/
561 #define SCSIINTERRUPT 0x0080 /* SCSI interrupt pending */
562 #define COMMANDABORT 0x0040 /* SCSI command abort */
563 #define SEQUENCERACTIVE 0x0020 /* SCSI sequencer active */
564 #define PHASEMISMATCH 0x0010 /* SCSI phase mismatch */
565 #define PARITYERROR 0x0008 /* SCSI parity error */
566
567 #define PHASEMASK 0x0007 /* Phase MSG/CD/IO */
568 #define PH_DATA_OUT 0x00 /* Data out phase */
569 #define PH_DATA_IN 0x01 /* Data in phase */
570 #define PH_COMMAND 0x02 /* Command phase */
571 #define PH_STATUS 0x03 /* Status phase */
572 #define PH_BUS_FREE 0x05 /* Invalid phase used as bus free */
573 #define PH_MSG_OUT 0x06 /* Message out phase */
574 #define PH_MSG_IN 0x07 /* Message in phase */
575
576 #define TRMREG_SCSI_CONTROL 0x80 /* SCSI Control (W) */
577 /* ######### */
578 #define DO_CLRATN 0x0400 /* Clear ATN */
579 #define DO_SETATN 0x0200 /* Set ATN */
580 #define DO_CMDABORT 0x0100 /* Abort SCSI command */
581 #define DO_RSTMODULE 0x0010 /* Reset SCSI chip */
582 #define DO_RSTSCSI 0x0008 /* Reset SCSI bus */
583 #define DO_CLRFIFO 0x0004 /* Clear SCSI transfer FIFO */
584 #define DO_DATALATCH 0x0002 /* Enable SCSI bus data latch */
585 #define DO_HWRESELECT 0x0001 /* Enable hardware reselection */
586 #define TRMREG_SCSI_FIFOCNT 0x82 /* SCSI FIFO Counter 5bits(R) */
587 #define TRMREG_SCSI_SIGNAL 0x83 /* SCSI low level signal (R/W) */
588 #define TRMREG_SCSI_INTSTATUS 0x84 /* SCSI Interrupt Status (R) */
589 /* ######### */
590 #define INT_SCAM 0x80 /* SCAM selection interrupt */
591 #define INT_SELECT 0x40 /* Selection interrupt */
592 #define INT_SELTIMEOUT 0x20 /* Selection timeout interrupt */
593 #define INT_DISCONNECT 0x10 /* Bus disconnected interrupt */
594 #define INT_RESELECTED 0x08 /* Reselected interrupt */
595 #define INT_SCSIRESET 0x04 /* SCSI reset detected interrupt*/
596 #define INT_BUSSERVICE 0x02 /* Bus service interrupt */
597 #define INT_CMDDONE 0x01 /* SCSI command done interrupt */
598 #define TRMREG_SCSI_OFFSET 0x84 /* SCSI Offset Count (W) */
599 /*
600 * Bit Name Definition
601 * 07-05 0 RSVD Reversed. Always 0.
602 * 04 0 OFFSET4 Reversed for LVDS. Always 0.
603 * 03-00 0 OFFSET[03:00] Offset number from 0 to 15
604 */
605 #define TRMREG_SCSI_SYNC 0x85 /* SCSI Synchronous Control (R/W)*/
606 /* ######### */
607 #define LVDS_SYNC 0x20 /* Enable LVDS synchronous */
608 #define WIDE_SYNC 0x10 /* Enable WIDE synchronous */
609 #define ALT_SYNC 0x08 /* Enable Fast-20 alternate synchronous */
610 /*
611 * SYNCM 7 6 5 4 3 2 1 0
612 * Name RSVD RSVD LVDS WIDE ALTPERD PERIOD2 PERIOD1 PERIOD0
613 * Default 0 0 0 0 0 0 0 0
614 *
615 *
616 * Bit Name Definition
617 * 07-06 0 RSVD Reversed. Always read 0
618 * 05 0 LVDS Reversed. Always read 0
619 * 04 0 WIDE/WSCSI Enable wide (16-bits) SCSI transfer.
620 * 03 0 ALTPERD/ALTPD Alternate (Sync./Period) mode.
621 *
622 * @@ When this bit is set,
623 * the synchronous period bits 2:0
624 * in the Synchronous Mode register
625 * are used to transfer data
626 * at the Fast-20 rate.
627 * @@ When this bit is reset,
628 * the synchronous period bits 2:0
629 * in the Synchronous Mode Register
630 * are used to transfer data
631 * at the Fast-40 rate.
632 *
633 * 02-00 0 PERIOD[2:0]/SXPD[02:00] Synchronous SCSI Transfer Rate.
634 * These 3 bits specify
635 * the Synchronous SCSI Transfer Rate
636 * for Fast-20 and Fast-10.
637 * These bits are also reset
638 * by a SCSI Bus reset.
639 *
640 * For Fast-10 bit ALTPD = 0 and LVDS = 0
641 * and 0x00000004,0x00000002,0x00000001 is defined as follows :
642 *
643 * 000 100ns, 10.0 Mbytes/s
644 * 001 150ns, 6.6 Mbytes/s
645 * 010 200ns, 5.0 Mbytes/s
646 * 011 250ns, 4.0 Mbytes/s
647 * 100 300ns, 3.3 Mbytes/s
648 * 101 350ns, 2.8 Mbytes/s
649 * 110 400ns, 2.5 Mbytes/s
650 * 111 450ns, 2.2 Mbytes/s
651 *
652 * For Fast-20 bit ALTPD = 1 and LVDS = 0
653 * and 0x00000004,0x00000002,0x00000001 is defined as follows :
654 *
655 * 000 50ns, 20.0 Mbytes/s
656 * 001 75ns, 13.3 Mbytes/s
657 * 010 100ns, 10.0 Mbytes/s
658 * 011 125ns, 8.0 Mbytes/s
659 * 100 150ns, 6.6 Mbytes/s
660 * 101 175ns, 5.7 Mbytes/s
661 * 110 200ns, 5.0 Mbytes/s
662 * 111 250ns, 4.0 Mbytes/s
663 *
664 * For Fast-40 bit ALTPD = 0 and LVDS = 1
665 * and 0x00000004,0x00000002,0x00000001 is defined as follows :
666 *
667 * 000 25ns, 40.0 Mbytes/s
668 * 001 50ns, 20.0 Mbytes/s
669 * 010 75ns, 13.3 Mbytes/s
670 * 011 100ns, 10.0 Mbytes/s
671 * 100 125ns, 8.0 Mbytes/s
672 * 101 150ns, 6.6 Mbytes/s
673 * 110 175ns, 5.7 Mbytes/s
674 * 111 200ns, 5.0 Mbytes/s
675 */
676
677 /*
678 ***************************************
679 */
680 #define TRMREG_SCSI_TARGETID 0x86 /* SCSI Target ID (R/W) */
681 /*
682 ***************************************
683 */
684 #define TRMREG_SCSI_IDMSG 0x87 /* SCSI Identify Message (R) */
685 /*
686 ***************************************
687 */
688 #define TRMREG_SCSI_HOSTID 0x87 /* SCSI Host ID (W) */
689 /*
690 ***************************************
691 */
692 #define TRMREG_SCSI_COUNTER 0x88 /* SCSI Transfer Counter 24bits(R/W)*/
693 /*
694 ***************************************
695 */
696 #define TRMREG_SCSI_INTEN 0x8C /* SCSI Interrupt Enable (R/W) */
697 /* ######### */
698 #define EN_SCAM 0x80 /* Enable SCAM selection interrupt*/
699 #define EN_SELECT 0x40 /* Enable selection interrupt */
700 #define EN_SELTIMEOUT 0x20 /* Enable selection timeout interrupt*/
701 #define EN_DISCONNECT 0x10 /* Enable bus disconnected interrupt*/
702 #define EN_RESELECTED 0x08 /* Enable reselected interrupt */
703 #define EN_SCSIRESET 0x04 /* Enable SCSI reset detected interrupt*/
704 #define EN_BUSSERVICE 0x02 /* Enable bus service interrupt */
705 #define EN_CMDDONE 0x01 /* Enable SCSI command done interrupt*/
706 /*
707 ***************************************
708 */
709 #define TRMREG_SCSI_CONFIG0 0x8D /* SCSI Configuration 0 (R/W) */
710 /* ######### */
711 #define PHASELATCH 0x40 /* Enable phase latch */
712 #define INITIATOR 0x20 /* Enable initiator mode */
713 #define PARITYCHECK 0x10 /* Enable parity check */
714 #define BLOCKRST 0x01 /* Disable SCSI reset1 */
715 /*
716 ***************************************
717 */
718 #define TRMREG_SCSI_CONFIG1 0x8E /* SCSI Configuration 1 (R/W) */
719 /* ######### */
720 #define ACTIVE_NEGPLUS 0x10 /* Enhance active negation */
721 #define FILTER_DISABLE 0x08 /* Disable SCSI data filter */
722 #define ACTIVE_NEG 0x02 /* Enable active negation */
723 #define ACTIVE_HISLEW 0x01 /* Enable high slew rate (3/6 ns) */
724 /*
725 ***************************************
726 */
727 #define TRMREG_SCSI_CONFIG2 0x8F /* SCSI Configuration 2 (R/W) */
728 /*
729 ***************************************
730 */
731 #define TRMREG_SCSI_COMMAND 0x90 /* SCSI Command (R/W) */
732 /* ######### */
733 #define SCMD_COMP 0x12 /* Command complete */
734 #define SCMD_SEL_ATN 0x60 /* Selection with ATN */
735 #define SCMD_SEL_ATN3 0x64 /* Selection with ATN3 */
736 #define SCMD_SEL_ATNSTOP 0xB8 /* Selection with ATN and Stop */
737 #define SCMD_FIFO_OUT 0xC0 /* SCSI FIFO transfer out */
738 #define SCMD_DMA_OUT 0xC1 /* SCSI DMA transfer out */
739 #define SCMD_FIFO_IN 0xC2 /* SCSI FIFO transfer in */
740 #define SCMD_DMA_IN 0xC3 /* SCSI DMA transfer in */
741 #define SCMD_MSGACCEPT 0xD8 /* Message accept */
742 /*
743 * Code Command Description
744 *
745 * 02 Enable reselection with FIFO
746 * 40 Select without ATN with FIFO
747 * 60 Select with ATN with FIFO
748 * 64 Select with ATN3 with FIFO
749 * A0 Select with ATN and stop with FIFO
750 * C0 Transfer information out with FIFO
751 * C1 Transfer information out with DMA
752 * C2 Transfer information in with FIFO
753 * C3 Transfer information in with DMA
754 * 12 Initiator command complete with FIFO
755 * 50 Initiator transfer information out sequence without ATN with FIFO
756 * 70 Initiator transfer information out sequence with ATN with FIFO
757 * 74 Initiator transfer information out sequence with ATN3 with FIFO
758 * 52 Initiator transfer information in sequence without ATN with FIFO
759 * 72 Initiator transfer information in sequence with ATN with FIFO
760 * 76 Initiator transfer information in sequence with ATN3 with FIFO
761 * 90 Initiator transfer information out command complete with FIFO
762 * 92 Initiator transfer information in command complete with FIFO
763 * D2 Enable selection
764 * 08 Reselection
765 * 48 Disconnect command with FIFO
766 * 88 Terminate command with FIFO
767 * C8 Target command complete with FIFO
768 * 18 SCAM Arbitration/ Selection
769 * 5A Enable reselection
770 * 98 Select without ATN with FIFO
771 * B8 Select with ATN with FIFO
772 * D8 Message Accepted
773 * 58 NOP
774 */
775 /*
776 ***************************************
777 */
778 #define TRMREG_SCSI_TIMEOUT 0x91 /* SCSI Time Out Value (R/W) */
779 /*
780 ***************************************
781 */
782 #define TRMREG_SCSI_FIFO 0x98 /* SCSI FIFO (R/W) */
783 /*
784 ***************************************
785 */
786 #define TRMREG_SCSI_TCR00 0x9C /* SCSI Target Control 0 (R/W) */
787 /* ######### */
788 #define TCR0_DO_WIDE_NEGO 0x80 /* Do wide NEGO */
789 #define TCR0_DO_SYNC_NEGO 0x40 /* Do sync NEGO */
790 #define TCR0_DISCONNECT_EN 0x20 /* Disconnection enable */
791 #define TCR0_OFFSET_MASK 0x1F /* Offset number */
792 /*
793 ***************************************
794 */
795 #define TRMREG_SCSI_TCR01 0x9D /* SCSI Target Control 0 (R/W) */
796 /* ######### */
797 #define TCR0_ENABLE_LVDS 0xF8 /* LVD */
798 #define TCR0_ENABLE_WIDE 0xF9 /* SE */
799 /*
800 ****************************************
801 */
802
803 /*
804 ***************************************
805 */
806 #define TRMREG_SCSI_TCR1 0x9E /* SCSI Target Control 1 (R/W) */
807 /* ######### */
808 #define MAXTAG_MASK 0x7F00 /* Maximum tags (127) */
809 #define NON_TAG_BUSY 0x0080 /* Non tag command active */
810 #define ACTTAG_MASK 0x007F /* Active tags */
811 /*
812 *
813 * The DMA register offset for TRM_S1040
814 *
815 */
816 #define TRMREG_DMA_COMMAND 0xA0 /* DMA Command (R/W) */
817 /* ######### */
818 #define XFERDATAIN 0x0103 /* Transfer data in */
819 #define XFERDATAOUT 0x0102 /* Transfer data out */
820 /*
821 ***************************************
822 */
823 #define TRMREG_DMA_FIFOCNT 0xA1 /* DMA FIFO Counter (R) */
824 /*
825 ***************************************
826 */
827 #define TRMREG_DMA_CONTROL 0xA1 /* DMA Control (W) */
828 /* ######### */
829 #define STOPDMAXFER 0x08 /* Stop DMA transfer */
830 #define ABORTXFER 0x04 /* Abort DMA transfer */
831 #define CLRXFIFO 0x02 /* Clear DMA transfer FIFO */
832 #define STARTDMAXFER 0x01 /* Start DMA transfer */
833 /*
834 ***************************************
835 */
836 #define TRMREG_DMA_STATUS 0xA3 /* DMA Interrupt Status (R/W) */
837 /* ######### */
838 #define XFERPENDING 0x80 /* Transfer pending */
839 #define DMAXFERCOMP 0x02 /* Bus Master XFER Complete status */
840 #define SCSICOMP 0x01 /* SCSI complete interrupt */
841 /*
842 ***************************************
843 */
844 #define TRMREG_DMA_INTEN 0xA4 /* DMA Interrupt Enable (R/W)*/
845 /* ######### */
846 #define EN_SCSIINTR 0x01 /* Enable SCSI complete interrupt */
847 /*
848 ***************************************
849 */
850 #define TRMREG_DMA_CONFIG 0xA6 /* DMA Configuration (R/W) */
851 /* ######### */
852 #define DMA_ENHANCE 0x8000 /* Enable DMA enhance feature */
853 /*
854 ***************************************
855 */
856 #define TRMREG_DMA_XCNT 0xA8 /* DMA Transfer Counter (R/W)*/
857 /*
858 ***************************************
859 */
860 #define TRMREG_DMA_CXCNT 0xAC /* DMA Current Transfer Counter (R) */
861 /*
862 ***************************************
863 */
864 #define TRMREG_DMA_XLOWADDR 0xB0 /* DMA Transfer Physical Low Address */
865 /*
866 ***************************************
867 */
868 #define TRMREG_DMA_XHIGHADDR 0xB4 /* DMA Transfer Physical High Address */
869
870 /*
871 *
872 * The general register offset for TRM_S1040
873 *
874 */
875 #define TRMREG_GEN_CONTROL 0xD4 /* Global Control */
876 /* ######### */
877 #define EN_EEPROM 0x10 /* Enable EEPROM programming */
878 #define AUTOTERM 0x04 /* Enable Auto SCSI terminator */
879 #define LOW8TERM 0x02 /* Enable Lower 8 bit SCSI terminator */
880 #define UP8TERM 0x01 /* Enable Upper 8 bit SCSI terminator */
881 /*
882 ***************************************
883 */
884 #define TRMREG_GEN_STATUS 0xD5 /* Global Status */
885 /* ######### */
886 #define GTIMEOUT 0x80 /* Global timer reach 0 */
887 #define CON5068 0x10 /* External 50/68 pin connected */
888 #define CON68 0x08 /* Internal 68 pin connected */
889 #define CON50 0x04 /* Internal 50 pin connected */
890 #define WIDESCSI 0x02 /* Wide SCSI card */
891 /*
892 ***************************************
893 */
894 #define TRMREG_GEN_NVRAM 0xD6 /* Serial NON-VOLATILE RAM port */
895 /* ######### */
896 #define NVR_BITOUT 0x08 /* Serial data out */
897 #define NVR_BITIN 0x04 /* Serial data in */
898 #define NVR_CLOCK 0x02 /* Serial clock */
899 #define NVR_SELECT 0x01 /* Serial select */
900 /*
901 ***************************************
902 */
903 #define TRMREG_GEN_EDATA 0xD7 /* Parallel EEPROM data port */
904 /*
905 ***************************************
906 */
907 #define TRMREG_GEN_EADDRESS 0xD8 /* Parallel EEPROM address */
908 /*
909 ***************************************
910 */
911 #define TRMREG_GEN_TIMER 0xDB /* Global timer */
912
913 /*
914 * The SEEPROM structure for TRM_S1040
915 */
916 typedef struct NVRAM_TARGET_STRUCT
917 {
918 u_int8_t NvmTarCfg0; /* Target configuration byte 0 */
919 u_int8_t NvmTarPeriod; /* Target period */
920 u_int8_t NvmTarCfg2; /* Target configuration byte 2 */
921 u_int8_t NvmTarCfg3; /* Target configuration byte 3 */
922 } NVRAMTARGETTYPE;
923 /* NvmTarCfg0: Target configuration byte 0 :..pDCB->DevMode */
924 #define NTC_DO_WIDE_NEGO 0x20 /* Wide negotiate */
925 #define NTC_DO_TAG_QUEUING 0x10 /* Enable SCSI tag queuing */
926 #define NTC_DO_SEND_START 0x08 /* Send start command SPINUP*/
927 #define NTC_DO_DISCONNECT 0x04 /* Enable SCSI disconnect */
928 #define NTC_DO_SYNC_NEGO 0x02 /* Sync negotiation */
929 #define NTC_DO_PARITY_CHK 0x01 /* (it should define at NAC )
930 Parity check enable */
931
932 /*
933 *
934 *
935 *
936 */
937 typedef struct NVRAM_STRUC {
938 u_int8_t NvramSubVendorID[2]; /*0,1 Sub Vendor ID */
939 u_int8_t NvramSubSysID[2]; /*2,3 Sub System ID*/
940 u_int8_t NvramSubClass; /*4 Sub Class */
941 u_int8_t NvramVendorID[2]; /*5,6 Vendor ID */
942 u_int8_t NvramDeviceID[2]; /*7,8 Device ID */
943 u_int8_t NvramReserved; /*9 Reserved */
944 NVRAMTARGETTYPE NvramTarget[TRM_MAX_TARGETS];/* *10,11,12,13
945 *14,15,16,17 * ....
946 * ....
947 *70,71,72,73
948 */
949 u_int8_t NvramScsiId; /*74 Host Adapter SCSI ID */
950 u_int8_t NvramChannelCfg; /*75 Channel configuration */
951 u_int8_t NvramDelayTime; /*76 Power on delay time */
952 u_int8_t NvramMaxTag; /*77 Maximum tags */
953 u_int8_t NvramReserved0; /*78 */
954 u_int8_t NvramBootTarget; /*79 */
955 u_int8_t NvramBootLun; /*80 */
956 u_int8_t NvramReserved1; /*81 */
957 u_int16_t Reserved[22]; /*82,..125 */
958 u_int16_t NvramCheckSum; /*126,127*/
959 } NVRAMTYPE,*PNVRAMTYPE;
960 /* Nvram Initiater bits definition */
961 #define MORE2_DRV 0x00000001
962 #define GREATER_1G 0x00000002
963 #define RST_SCSI_BUS 0x00000004
964 #define ACTIVE_NEGATION 0x00000008
965 #define NO_SEEK 0x00000010
966 #define LUN_CHECK 0x00000020
967
968 /* Nvram Adapter NvramChannelCfg bits definition */
969 #define NAC_SCANLUN 0x20 /* Include LUN as BIOS device*/
970 #define NAC_POWERON_SCSI_RESET 0x04 /* Power on reset enable */
971 #define NAC_GREATER_1G 0x02 /* > 1G support enable */
972 #define NAC_GT2DRIVES 0x01 /* Support more than 2 drives*/
973 /*
974 *#define NAC_DO_PARITY_CHK 0x08 // Parity check enable
975 */
976
977 #endif /* trm_H */
Cache object: efd3c79bf1584f86e8914aeadf1ae097
|