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 #ifndef SYM_DEFS_H
28 #define SYM_DEFS_H
29
30 #define SYM_VERSION "2.2.3"
31 #define SYM_DRIVER_NAME "sym-" SYM_VERSION
32
33
34
35
36 struct sym_chip {
37 u_short device_id;
38 u_short revision_id;
39 char *name;
40 u_char burst_max;
41 u_char offset_max;
42 u_char nr_divisor;
43 u_char lp_probe_bit;
44 u_int features;
45 #define FE_LED0 (1<<0)
46 #define FE_WIDE (1<<1)
47 #define FE_ULTRA (1<<2)
48 #define FE_ULTRA2 (1<<3)
49 #define FE_DBLR (1<<4)
50 #define FE_QUAD (1<<5)
51 #define FE_ERL (1<<6)
52 #define FE_CLSE (1<<7)
53 #define FE_WRIE (1<<8)
54 #define FE_ERMP (1<<9)
55 #define FE_BOF (1<<10)
56 #define FE_DFS (1<<11)
57 #define FE_PFEN (1<<12)
58 #define FE_LDSTR (1<<13)
59 #define FE_RAM (1<<14)
60 #define FE_VARCLK (1<<15)
61 #define FE_RAM8K (1<<16)
62 #define FE_64BIT (1<<17)
63 #define FE_IO256 (1<<18)
64 #define FE_NOPM (1<<19)
65 #define FE_LEDC (1<<20)
66 #define FE_ULTRA3 (1<<21)
67 #define FE_66MHZ (1<<22)
68 #define FE_CRC (1<<23)
69 #define FE_DIFF (1<<24)
70 #define FE_DFBC (1<<25)
71 #define FE_LCKFRQ (1<<26)
72 #define FE_C10 (1<<27)
73 #define FE_U3EN (1<<28)
74 #define FE_DAC (1<<29)
75 #define FE_ISTAT1 (1<<30)
76
77 #define FE_CACHE_SET (FE_ERL|FE_CLSE|FE_WRIE|FE_ERMP)
78 #define FE_CACHE0_SET (FE_CACHE_SET & ~FE_ERL)
79 };
80
81
82
83
84 struct sym_reg {
85 u8 nc_scntl0;
86
87 u8 nc_scntl1;
88 #define ISCON 0x10
89 #define CRST 0x08
90 #define IARB 0x02
91
92 u8 nc_scntl2;
93 #define SDU 0x80
94 #define CHM 0x40
95 #define WSS 0x08
96 #define WSR 0x01
97
98 u8 nc_scntl3;
99 #define EWS 0x08
100 #define ULTRA 0x80
101
102
103 u8 nc_scid;
104 #define RRE 0x40
105 #define SRE 0x20
106
107 u8 nc_sxfer;
108
109
110 u8 nc_sdid;
111
112 u8 nc_gpreg;
113
114 u8 nc_sfbr;
115
116 u8 nc_socl;
117 #define CREQ 0x80
118 #define CACK 0x40
119 #define CBSY 0x20
120 #define CSEL 0x10
121 #define CATN 0x08
122 #define CMSG 0x04
123 #define CC_D 0x02
124 #define CI_O 0x01
125
126 u8 nc_ssid;
127
128 u8 nc_sbcl;
129
130 u8 nc_dstat;
131 #define DFE 0x80
132 #define MDPE 0x40
133 #define BF 0x20
134 #define ABRT 0x10
135 #define SSI 0x08
136 #define SIR 0x04
137 #define IID 0x01
138
139 u8 nc_sstat0;
140 #define ILF 0x80
141 #define ORF 0x40
142 #define OLF 0x20
143 #define AIP 0x10
144 #define LOA 0x08
145 #define WOA 0x04
146 #define IRST 0x02
147 #define SDP 0x01
148
149 u8 nc_sstat1;
150 #define FF3210 0xf0
151
152 u8 nc_sstat2;
153 #define ILF1 0x80
154 #define ORF1 0x40
155 #define OLF1 0x20
156 #define DM 0x04
157 #define LDSC 0x02
158
159 u8 nc_dsa;
160 u8 nc_dsa1;
161 u8 nc_dsa2;
162 u8 nc_dsa3;
163
164 u8 nc_istat;
165 #define CABRT 0x80
166 #define SRST 0x40
167 #define SIGP 0x20
168 #define SEM 0x10
169 #define CON 0x08
170 #define INTF 0x04
171 #define SIP 0x02
172 #define DIP 0x01
173
174 u8 nc_istat1;
175 #define FLSH 0x04
176 #define SCRUN 0x02
177 #define SIRQD 0x01
178
179 u8 nc_mbox0;
180 u8 nc_mbox1;
181
182 u8 nc_ctest0;
183 u8 nc_ctest1;
184
185 u8 nc_ctest2;
186 #define CSIGP 0x40
187
188
189 u8 nc_ctest3;
190 #define FLF 0x08
191 #define CLF 0x04
192 #define FM 0x02
193 #define WRIE 0x01
194
195
196 u32 nc_temp;
197
198 u8 nc_dfifo;
199 u8 nc_ctest4;
200 #define BDIS 0x80
201 #define MPEE 0x08
202
203 u8 nc_ctest5;
204 #define DFS 0x20
205
206
207 u8 nc_ctest6;
208
209 u32 nc_dbc;
210 u32 nc_dnad;
211 u32 nc_dsp;
212 u32 nc_dsps;
213
214 u8 nc_scratcha;
215 u8 nc_scratcha1;
216 u8 nc_scratcha2;
217 u8 nc_scratcha3;
218
219 u8 nc_dmode;
220 #define BL_2 0x80
221 #define BL_1 0x40
222 #define ERL 0x08
223 #define ERMP 0x04
224 #define BOF 0x02
225
226 u8 nc_dien;
227 u8 nc_sbr;
228
229 u8 nc_dcntl;
230 #define CLSE 0x80
231 #define PFF 0x40
232 #define PFEN 0x20
233 #define SSM 0x10
234 #define IRQM 0x08
235 #define STD 0x04
236 #define IRQD 0x02
237 #define NOCOM 0x01
238
239
240 u32 nc_adder;
241
242 u16 nc_sien;
243 u16 nc_sist;
244 #define SBMC 0x1000
245 #define STO 0x0400
246 #define GEN 0x0200
247 #define HTH 0x0100
248 #define MA 0x80
249 #define CMP 0x40
250 #define SEL 0x20
251 #define RSL 0x10
252 #define SGE 0x08
253 #define UDC 0x04
254 #define RST 0x02
255 #define PAR 0x01
256
257 u8 nc_slpar;
258 u8 nc_swide;
259 u8 nc_macntl;
260 u8 nc_gpcntl;
261 u8 nc_stime0;
262 u8 nc_stime1;
263 u16 nc_respid;
264
265 u8 nc_stest0;
266
267 u8 nc_stest1;
268 #define SCLK 0x80
269 #define DBLEN 0x08
270 #define DBLSEL 0x04
271
272
273 u8 nc_stest2;
274 #define ROF 0x40
275 #define EXT 0x02
276
277 u8 nc_stest3;
278 #define TE 0x80
279 #define HSC 0x20
280 #define CSF 0x02
281
282 u16 nc_sidl;
283 u8 nc_stest4;
284 #define SMODE 0xc0
285 #define SMODE_HVD 0x40
286 #define SMODE_SE 0x80
287 #define SMODE_LVD 0xc0
288 #define LCKFRQ 0x20
289
290
291 u8 nc_53_;
292 u16 nc_sodl;
293 u8 nc_ccntl0;
294 #define ENPMJ 0x80
295 #define PMJCTL 0x40
296 #define ENNDJ 0x20
297 #define DISFC 0x10
298 #define DILS 0x02
299 #define DPR 0x01
300
301 u8 nc_ccntl1;
302 #define ZMOD 0x80
303 #define DDAC 0x08
304 #define XTIMOD 0x04
305 #define EXTIBMV 0x02
306 #define EXDBMV 0x01
307
308 u16 nc_sbdl;
309 u16 nc_5a_;
310
311 u8 nc_scr0;
312 u8 nc_scr1;
313 u8 nc_scr2;
314 u8 nc_scr3;
315
316 u8 nc_scrx[64];
317 u32 nc_mmrs;
318 u32 nc_mmws;
319 u32 nc_sfs;
320 u32 nc_drs;
321 u32 nc_sbms;
322 u32 nc_dbms;
323 u32 nc_dnad64;
324 u16 nc_scntl4;
325 #define U3EN 0x80
326 #define AIPCKEN 0x40
327
328 #define XCLKH_DT 0x08
329 #define XCLKH_ST 0x04
330 #define XCLKS_DT 0x02
331 #define XCLKS_ST 0x01
332 u8 nc_aipcntl0;
333 u8 nc_aipcntl1;
334 #define DISAIP 0x08
335 u32 nc_pmjad1;
336 u32 nc_pmjad2;
337 u8 nc_rbc;
338 u8 nc_rbc1;
339 u8 nc_rbc2;
340 u8 nc_rbc3;
341
342 u8 nc_ua;
343 u8 nc_ua1;
344 u8 nc_ua2;
345 u8 nc_ua3;
346 u32 nc_esa;
347 u8 nc_ia;
348 u8 nc_ia1;
349 u8 nc_ia2;
350 u8 nc_ia3;
351 u32 nc_sbc;
352 u32 nc_csbc;
353
354 u16 nc_crcpad;
355 u8 nc_crccntl0;
356 #define SNDCRC 0x10
357 u8 nc_crccntl1;
358 u32 nc_crcdata;
359 u32 nc_e8_;
360 u32 nc_ec_;
361 u16 nc_dfbc;
362 };
363
364
365
366
367
368
369
370
371 #define REGJ(p,r) (offsetof(struct sym_reg, p ## r))
372 #define REG(r) REGJ (nc_, r)
373
374
375
376
377
378
379
380
381 #define SCR_DATA_OUT 0x00000000
382 #define SCR_DATA_IN 0x01000000
383 #define SCR_COMMAND 0x02000000
384 #define SCR_STATUS 0x03000000
385 #define SCR_DT_DATA_OUT 0x04000000
386 #define SCR_DT_DATA_IN 0x05000000
387 #define SCR_MSG_OUT 0x06000000
388 #define SCR_MSG_IN 0x07000000
389
390 #define SCR_ILG_OUT 0x04000000
391 #define SCR_ILG_IN 0x05000000
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411 #define OPC_MOVE 0x08000000
412
413 #define SCR_MOVE_ABS(l) ((0x00000000 | OPC_MOVE) | (l))
414
415 #define SCR_MOVE_TBL (0x10000000 | OPC_MOVE)
416
417 #define SCR_CHMOV_ABS(l) ((0x00000000) | (l))
418
419 #define SCR_CHMOV_TBL (0x10000000)
420
421 #ifdef SYM_CONF_TARGET_ROLE_SUPPORT
422
423
424 #define OPC_TCHMOVE 0x08000000
425
426 #define SCR_TCHMOVE_ABS(l) ((0x20000000 | OPC_TCHMOVE) | (l))
427 #define SCR_TCHMOVE_TBL (0x30000000 | OPC_TCHMOVE)
428
429 #define SCR_TMOV_ABS(l) ((0x20000000) | (l))
430 #define SCR_TMOV_TBL (0x30000000)
431 #endif
432
433 struct sym_tblmove {
434 u32 size;
435 u32 addr;
436 };
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453 #define SCR_SEL_ABS 0x40000000
454 #define SCR_SEL_ABS_ATN 0x41000000
455 #define SCR_SEL_TBL 0x42000000
456 #define SCR_SEL_TBL_ATN 0x43000000
457
458 #ifdef SYM_CONF_TARGET_ROLE_SUPPORT
459 #define SCR_RESEL_ABS 0x40000000
460 #define SCR_RESEL_ABS_ATN 0x41000000
461 #define SCR_RESEL_TBL 0x42000000
462 #define SCR_RESEL_TBL_ATN 0x43000000
463 #endif
464
465 struct sym_tblsel {
466 u_char sel_scntl4;
467 u_char sel_sxfer;
468 u_char sel_id;
469 u_char sel_scntl3;
470 };
471
472 #define SCR_JMP_REL 0x04000000
473 #define SCR_ID(id) (((u32)(id)) << 16)
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490 #define SCR_WAIT_DISC 0x48000000
491 #define SCR_WAIT_RESEL 0x50000000
492
493 #ifdef SYM_CONF_TARGET_ROLE_SUPPORT
494 #define SCR_DISCONNECT 0x48000000
495 #endif
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510 #define SCR_SET(f) (0x58000000 | (f))
511 #define SCR_CLR(f) (0x60000000 | (f))
512
513 #define SCR_CARRY 0x00000400
514 #define SCR_TRG 0x00000200
515 #define SCR_ACK 0x00000040
516 #define SCR_ATN 0x00000008
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538 #define SCR_NO_FLUSH 0x01000000
539
540 #define SCR_COPY(n) (0xc0000000 | SCR_NO_FLUSH | (n))
541 #define SCR_COPY_F(n) (0xc0000000 | (n))
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569 #define SCR_REG_OFS(ofs) ((((ofs) & 0x7f) << 16ul) + ((ofs) & 0x80))
570
571 #define SCR_SFBR_REG(reg,op,data) \
572 (0x68000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
573
574 #define SCR_REG_SFBR(reg,op,data) \
575 (0x70000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
576
577 #define SCR_REG_REG(reg,op,data) \
578 (0x78000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
579
580
581 #define SCR_LOAD 0x00000000
582 #define SCR_SHL 0x01000000
583 #define SCR_OR 0x02000000
584 #define SCR_XOR 0x03000000
585 #define SCR_AND 0x04000000
586 #define SCR_SHR 0x05000000
587 #define SCR_ADD 0x06000000
588 #define SCR_ADDC 0x07000000
589
590 #define SCR_SFBR_DATA (0x00800000>>8ul)
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609 #define SCR_FROM_REG(reg) \
610 SCR_REG_SFBR(reg,SCR_OR,0)
611
612 #define SCR_TO_REG(reg) \
613 SCR_SFBR_REG(reg,SCR_OR,0)
614
615 #define SCR_LOAD_REG(reg,data) \
616 SCR_REG_REG(reg,SCR_LOAD,data)
617
618 #define SCR_LOAD_SFBR(data) \
619 (SCR_REG_SFBR (gpreg, SCR_LOAD, data))
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639 #define SCR_REG_OFS2(ofs) (((ofs) & 0xff) << 16ul)
640 #define SCR_NO_FLUSH2 0x02000000
641 #define SCR_DSA_REL2 0x10000000
642
643 #define SCR_LOAD_R(reg, how, n) \
644 (0xe1000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
645
646 #define SCR_STORE_R(reg, how, n) \
647 (0xe0000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
648
649 #define SCR_LOAD_ABS(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2, n)
650 #define SCR_LOAD_REL(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2, n)
651 #define SCR_LOAD_ABS_F(reg, n) SCR_LOAD_R(reg, 0, n)
652 #define SCR_LOAD_REL_F(reg, n) SCR_LOAD_R(reg, SCR_DSA_REL2, n)
653
654 #define SCR_STORE_ABS(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2, n)
655 #define SCR_STORE_REL(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2,n)
656 #define SCR_STORE_ABS_F(reg, n) SCR_STORE_R(reg, 0, n)
657 #define SCR_STORE_REL_F(reg, n) SCR_STORE_R(reg, SCR_DSA_REL2, n)
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696 #define SCR_NO_OP 0x80000000
697 #define SCR_JUMP 0x80080000
698 #define SCR_JUMP64 0x80480000
699 #define SCR_JUMPR 0x80880000
700 #define SCR_CALL 0x88080000
701 #define SCR_CALLR 0x88880000
702 #define SCR_RETURN 0x90080000
703 #define SCR_INT 0x98080000
704 #define SCR_INT_FLY 0x98180000
705
706 #define IFFALSE(arg) (0x00080000 | (arg))
707 #define IFTRUE(arg) (0x00000000 | (arg))
708
709 #define WHEN(phase) (0x00030000 | (phase))
710 #define IF(phase) (0x00020000 | (phase))
711
712 #define DATA(D) (0x00040000 | ((D) & 0xff))
713 #define MASK(D,M) (0x00040000 | (((M ^ 0xff) & 0xff) << 8ul)|((D) & 0xff))
714
715 #define CARRYSET (0x00200000)
716
717
718
719
720
721
722
723
724
725
726
727
728 #define M_COMPLETE COMMAND_COMPLETE
729 #define M_EXTENDED EXTENDED_MESSAGE
730 #define M_SAVE_DP SAVE_POINTERS
731 #define M_RESTORE_DP RESTORE_POINTERS
732 #define M_DISCONNECT DISCONNECT
733 #define M_ID_ERROR INITIATOR_ERROR
734 #define M_ABORT ABORT_TASK_SET
735 #define M_REJECT MESSAGE_REJECT
736 #define M_NOOP NOP
737 #define M_PARITY MSG_PARITY_ERROR
738 #define M_LCOMPLETE LINKED_CMD_COMPLETE
739 #define M_FCOMPLETE LINKED_FLG_CMD_COMPLETE
740 #define M_RESET TARGET_RESET
741 #define M_ABORT_TAG ABORT_TASK
742 #define M_CLEAR_QUEUE CLEAR_TASK_SET
743 #define M_INIT_REC INITIATE_RECOVERY
744 #define M_REL_REC RELEASE_RECOVERY
745 #define M_TERMINATE (0x11)
746 #define M_SIMPLE_TAG SIMPLE_QUEUE_TAG
747 #define M_HEAD_TAG HEAD_OF_QUEUE_TAG
748 #define M_ORDERED_TAG ORDERED_QUEUE_TAG
749 #define M_IGN_RESIDUE IGNORE_WIDE_RESIDUE
750
751 #define M_X_MODIFY_DP EXTENDED_MODIFY_DATA_POINTER
752 #define M_X_SYNC_REQ EXTENDED_SDTR
753 #define M_X_WIDE_REQ EXTENDED_WDTR
754 #define M_X_PPR_REQ EXTENDED_PPR
755
756
757
758
759 #define PPR_OPT_IU (0x01)
760 #define PPR_OPT_DT (0x02)
761 #define PPR_OPT_QAS (0x04)
762 #define PPR_OPT_MASK (0x07)
763
764
765
766
767
768 #define S_GOOD SAM_STAT_GOOD
769 #define S_CHECK_COND SAM_STAT_CHECK_CONDITION
770 #define S_COND_MET SAM_STAT_CONDITION_MET
771 #define S_BUSY SAM_STAT_BUSY
772 #define S_INT SAM_STAT_INTERMEDIATE
773 #define S_INT_COND_MET SAM_STAT_INTERMEDIATE_CONDITION_MET
774 #define S_CONFLICT SAM_STAT_RESERVATION_CONFLICT
775 #define S_TERMINATED SAM_STAT_COMMAND_TERMINATED
776 #define S_QUEUE_FULL SAM_STAT_TASK_SET_FULL
777 #define S_ILLEGAL (0xff)
778
779 #endif