aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/cas/if_casreg.h
blob: fda2e13b6789f86a128c6b640abf075fb743aab0 (plain) (blame)
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
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
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
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
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
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
/*-
 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
 *
 * Copyright (C) 2001 Eduardo Horvath.
 * Copyright (c) 2008 Marius Strobl <marius@FreeBSD.org>
 * All rights reserved.
 *
 * 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 AUTHOR  ``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 AUTHOR  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.
 *
 *	from: NetBSD: gemreg.h,v 1.8 2005/12/11 12:21:26 christos Exp
 *	from: FreeBSD: if_gemreg.h 174987 2007-12-30 01:32:03Z marius
 *
 * $FreeBSD$
 */

#ifndef	_IF_CASREG_H
#define	_IF_CASREG_H

/*
 * register definitions for Sun Cassini/Cassini+ and National Semiconductor
 * DP83065 Saturn Gigabit Ethernet controllers
 */

/* global resources */
#define	CAS_CAW			0x0004	/* core arbitration weight */
#define	CAS_INF_BURST		0x0008	/* infinite burst enable */
#define	CAS_STATUS		0x000c	/* interrupt status */
#define	CAS_INTMASK		0x0010	/* interrupt mask */
#define	CAS_CLEAR_ALIAS		0x0014	/* clear mask alias */
#define	CAS_STATUS_ALIAS	0x001c	/* interrupt status alias */
#define	CAS_ERROR_STATUS	0x1000	/* PCI error status */
#define	CAS_ERROR_MASK		0x1004	/* PCI error mask */
#define	CAS_BIM_CONF		0x1008	/* BIM configuration */
#define	CAS_BIM_DIAG		0x100c	/* BIM diagnostic */
#define	CAS_RESET		0x1010	/* software reset */
#define	CAS_BIM_LDEV_OEN	0x1020	/* BIM local device output enable */
#define	CAS_BIM_BUF_ADDR	0x1024	/* BIM buffer address */
#define	CAS_BIM_BUF_DATA_LO	0x1028	/* BIM buffer data low */
#define	CAS_BIM_BUF_DATA_HI	0x102c	/* BIM buffer data high */
#define	CAS_BIM_RAM_BIST	0x1030	/* BIM RAM BIST control/status */
#define	CAS_PROBE_MUX_SELECT	0x1034	/* PROBE MUX SELECT */
#define	CAS_INTMASK2		0x1038	/* interrupt mask 2 for INTB */
#define	CAS_STATUS2		0x103c	/* interrupt status 2 for INTB */
#define	CAS_CLEAR_ALIAS2	0x1040	/* clear mask alias 2 for INTB */
#define	CAS_STATUS_ALIAS2	0x1044	/* interrupt status alias 2 for INTB */
#define	CAS_INTMASK3		0x1048	/* interrupt mask 3 for INTC */
#define	CAS_STATUS3		0x104c	/* interrupt status 3 for INTC */
#define	CAS_CLEAR_ALIAS3	0x1050	/* clear mask alias 3 for INTC */
#define	CAS_STATUS_ALIAS3	0x1054	/* interrupt status alias 3 for INTC */
#define	CAS_INTMASK4		0x1058	/* interrupt mask 4 for INTD */
#define	CAS_STATUS4		0x105c	/* interrupt status 4 for INTD */
#define	CAS_CLEAR_ALIAS4	0x1060	/* clear mask alias 4 for INTD */
#define	CAS_STATUS_ALIAS4	0x1064	/* interrupt status alias 4 for INTD */
#define	CAS_SATURN_PCFG		0x106c	/* internal MACPHY pin configuration */

#define	CAS_CAW_RX_WGHT_MASK	0x00000003	/* RX DMA factor for... */
#define	CAS_CAW_RX_WGHT_SHFT	0		/* ...weighted round robin */
#define	CAS_CAW_TX_WGHT_MASK	0x0000000c	/* RX DMA factor for... */
#define	CAS_CAW_TX_WGHT_SHFT	2		/* ...weighted round robin */
#define	CAS_CAW_RR_DIS		0x00000010	/* weighted round robin dis. */

#define	CAS_INF_BURST_EN	0x00000001	/* Allow bursts > cachline. */

/*
 * shared interrupt bits for CAS_STATUS, CAS_INTMASK, CAS_CLEAR_ALIAS and
 * CAS_STATUS_ALIAS
 * Bits 0-9 of CAS_STATUS auto-clear when read.  CAS_CLEAR_ALIAS specifies
 * which of bits 0-9 auto-clear when reading CAS_STATUS_ALIAS.
 */
#define	CAS_INTR_TX_INT_ME	0x00000001	/* Frame w/ INT_ME set sent. */
#define	CAS_INTR_TX_ALL		0x00000002	/* TX frames trans. to FIFO. */
#define	CAS_INTR_TX_DONE	0x00000004	/* Any TX frame transferred. */
#define	CAS_INTR_TX_TAG_ERR	0x00000008	/* TX FIFO tag corrupted. */
#define	CAS_INTR_RX_DONE	0x00000010	/* >=1 RX frames transferred. */
#define	CAS_INTR_RX_BUF_NA	0x00000020	/* RX buffer not available */
#define	CAS_INTR_RX_TAG_ERR	0x00000040	/* RX FIFO tag corrupted. */
#define	CAS_INTR_RX_COMP_FULL	0x00000080	/* RX completion ring full */
#define	CAS_INTR_RX_BUF_AEMPTY	0x00000100	/* RX desc. ring almost empty */
#define	CAS_INTR_RX_COMP_AFULL	0x00000200	/* RX cmpl. ring almost full */
#define	CAS_INTR_RX_LEN_MMATCH	0x00000400	/* length field mismatch */
#define	CAS_INTR_SUMMARY	0x00001000	/* summary interrupt bit */
#define	CAS_INTR_PCS_INT	0x00002000	/* PCS interrupt */
#define	CAS_INTR_TX_MAC_INT	0x00004000	/* TX MAC interrupt */
#define	CAS_INTR_RX_MAC_INT	0x00008000	/* RX MAC interrupt */
#define	CAS_INTR_MAC_CTRL_INT	0x00010000	/* MAC control interrupt */
#define	CAS_INTR_MIF		0x00020000	/* MIF interrupt */
#define	CAS_INTR_PCI_ERROR_INT	0x00040000	/* PCI error interrupt */

#define	CAS_STATUS_TX_COMP3_MASK	0xfff80000	/* TX completion 3 */
#define	CAS_STATUS_TX_COMP3_SHFT	19

/* CAS_ERROR_STATUS and CAS_ERROR_MASK PCI error bits */
#define	CAS_ERROR_DTRTO		0x00000002	/* delayed trans. timeout */
#define	CAS_ERROR_OTHER		0x00000004	/* errors (see PCIR_STATUS) */
#define	CAS_ERROR_DMAW_ZERO	0x00000008	/* zero count DMA write */
#define	CAS_ERROR_DMAR_ZERO	0x00000010	/* zero count DMA read */
#define	CAS_ERROR_RTRTO		0x00000020	/* 255 retries exceeded */

#define	CAS_BIM_CONF_BD64_DIS	0x00000004	/* 64-bit mode disable */
#define	CAS_BIM_CONF_M66EN	0x00000008	/* PCI clock is 66MHz (ro). */
#define	CAS_BIM_CONF_BUS32_WIDE	0x00000010	/* PCI bus is 32-bit (ro). */
#define	CAS_BIM_CONF_DPAR_EN	0x00000020	/* parity error intr. enable */
#define	CAS_BIM_CONF_RMA_EN	0x00000040	/* master abort intr. enable */
#define	CAS_BIM_CONF_RTA_EN	0x00000080	/* target abort intr. enable */
#define	CAS_BIM_CONF_DIS_BIM	0x00000200	/* Stop PCI DMA transactions. */
#define	CAS_BIM_CONF_BIM_DIS	0x00000400	/* BIM was stopped (ro). */
#define	CAS_BIM_CONF_BLOCK_PERR	0x00000800	/* Block PERR# to PCI bus. */

#define	CAS_BIM_DIAG_BRST_SM	0x0000007f	/* burst ctrl. state machine */
#define	CAS_BIM_DIAG_MSTR_SM	0x3fffff00

#define	CAS_RESET_TX		0x00000001	/* Reset TX DMA engine. */
#define	CAS_RESET_RX		0x00000002	/* Reset RX DMA engine. */
#define	CAS_RESET_RSTOUT	0x00000004	/* Force PCI RSTOUT#. */
#define	CAS_RESET_PCS_DIS	0x00000008	/* PCS reset disable */
#define	CAS_RESET_BREQ_SM	0x00007f00	/* breq state machine */
#define	CAS_RESET_PCIARB	0x00070000	/* PCI arbitration state */
#define	CAS_RESET_RDPCI		0x00300000	/* read PCI state */
#define	CAS_RESET_RDARB		0x00c00000	/* read arbitration state */
#define	CAS_RESET_WRPCI		0x06000000	/* write PCI state */
#define	CAS_RESET_WRARB		0x38000000	/* write arbitration state */

#define	CAS_BIM_LDEV_OEN_PAD	0x00000001	/* addr. bus, RW and OE */
#define	CAS_BIM_LDEV_OEN_PROM	0x00000002	/* PROM chip select */
#define	CAS_BIM_LDEV_OEN_EXT	0x00000004	/* secondary local bus device */
#define	CAS_BIM_LDEV_OEN_SOFT_0	0x00000008	/* soft. progr. ctrl. bit 0 */
#define	CAS_BIM_LDEV_OEN_SOFT_1	0x00000010	/* soft. progr. ctrl. bit 1 */
#define	CAS_BIM_LDEV_OEN_HWRST	0x00000020	/* hw. reset (Cassini+ only) */

#define	CAS_BIM_BUF_ADDR_INDEX	0x0000003f	/* buffer entry index */
#define	CAS_BIM_BUF_ADDR_RDWR	0x00000040	/* 0: read, 1: write access */

#define	CAS_BIM_RAM_BIST_START	0x00000001	/* Start BIST on read buffer. */
#define	CAS_BIM_RAM_BIST_SUM	0x00000004	/* read buffer pass summary */
#define	CAS_BIM_RAM_BIST_LO	0x00000010	/* read buf. low bank passes */
#define	CAS_BIM_RAM_BIST_HI	0x00000020	/* read buf. high bank passes */

#define	CAS_PROBE_MUX_SELECT_LO	0x0000000f	/* P_A[7:0] */
#define	CAS_PROBE_MUX_SELECT_HI	0x000000f0	/* P_A[15:8] */
#define	CAS_PROBE_MUX_SELECT_SB	0x000000f0	/* txdma_wr address and size */
#define	CAS_PROBE_MUX_SELECT_EN	0xf0000000	/* enable probe on P_A[15:0] */

/*
 * interrupt bits for CAS_INTMASK[2-4], CAS_STATUS[2-4], CAS_CLEAR_ALIAS[2-4]
 * and CAS_STATUS_ALIAS[2-4].
 * CAS_STATUS[2-4] auto-clear when read.  CAS_CLEAR_ALIAS[2-4] specifies which
 * of bits 0-9 auto-clear when reading the corresponding CAS_STATUS_ALIAS[2-4].
 */
#define	CAS_INTRN_RX_DONE	0x00000001	/* >=1 RX frames transferred. */
#define	CAS_INTRN_RX_COMP_FULL	0x00000002	/* RX completion ring full */
#define	CAS_INTRN_RX_COMP_AFULL	0x00000004	/* RX cmpl. ring almost full */
#define	CAS_INTRN_RX_BUF_NA	0x00000008	/* RX buffer not available */
#define	CAS_INTRN_RX_BUF_AEMPTY	0x00000010	/* RX desc. ring almost empty */

/* INTn enable bit for CAS_INTMASK[2-4] */
#define	CAS_INTMASKN_EN		0x00000080	/* INT[B-D] enable */

#define	CAS_SATURN_PCFG_TLA	0x00000001	/* PHY activity LED */
#define	CAS_SATURN_PCFG_FLA	0x00000002	/* PHY 10MBit/sec LED */
#define	CAS_SATURN_PCFG_CLA	0x00000004	/* PHY 100MBit/sec LED */
#define	CAS_SATURN_PCFG_LLA	0x00000008	/* PHY 1000MBit/sec LED */
#define	CAS_SATURN_PCFG_RLA	0x00000010	/* PHY full-duplex LED */
#define	CAS_SATURN_PCFG_PDS	0x00000020	/* PHY debug mode */
#define	CAS_SATURN_PCFG_MTP	0x00000080	/* test point select */
#define	CAS_SATURN_PCFG_GMO	0x00000100	/* GMII observe */
#define	CAS_SATURN_PCFG_FSI	0x00000200	/* freeze GMII/SERDES */
#define	CAS_SATURN_PCFG_LAD	0x00000800	/* MAC LED control active low */

/* TX DMA registers */
#define	CAS_TX_CONF		0x2004	/* TX configuration */
#define	CAS_TX_FIFO_WR		0x2014	/* FIFO write pointer */
#define	CAS_TX_FIFO_SDWR	0x2018	/* FIFO shadow write pointer */
#define	CAS_TX_FIFO_RD		0x201c	/* FIFO read pointer */
#define	CAS_TX_FIFO_SDRD	0x2020	/* FIFO shadow read pointer */
#define	CAS_TX_FIFO_PKT_CNT	0x2024	/* FIFO packet counter */
#define	CAS_TX_SM1		0x2028	/* TX state machine 1 */
#define	CAS_TX_SM2		0x202c	/* TX state machine 2 */
#define	CAS_TX_DATA_PTR_LO	0x2030	/* TX data pointer low */
#define	CAS_TX_DATA_PTR_HI	0x2034	/* TX data pointer high */
#define	CAS_TX_KICK1		0x2038	/* TX kick 1 */
#define	CAS_TX_KICK2		0x203c	/* TX kick 2 */
#define	CAS_TX_KICK3		0x2040	/* TX kick 3 */
#define	CAS_TX_KICK4		0x2044	/* TX kick 4 */
#define	CAS_TX_COMP1		0x2048	/* TX completion 1 */
#define	CAS_TX_COMP2		0x204c	/* TX completion 2 */
#define	CAS_TX_COMP3		0x2050	/* TX completion 3 */
#define	CAS_TX_COMP4		0x2054	/* TX completion 4 */
#define	CAS_TX_COMPWB_BASE_LO	0x2058	/* TX completion writeback base low */
#define	CAS_TX_COMPWB_BASE_HI	0x205c	/* TX completion writeback base high */
#define	CAS_TX_DESC1_BASE_LO	0x2060	/* TX descriptor ring 1 base low */
#define	CAS_TX_DESC1_BASE_HI	0x2064	/* TX descriptor ring 1 base high */
#define	CAS_TX_DESC2_BASE_LO	0x2068	/* TX descriptor ring 2 base low */
#define	CAS_TX_DESC2_BASE_HI	0x206c	/* TX descriptor ring 2 base high */
#define	CAS_TX_DESC3_BASE_LO	0x2070	/* TX descriptor ring 2 base low */
#define	CAS_TX_DESC3_BASE_HI	0x2074	/* TX descriptor ring 2 base high */
#define	CAS_TX_DESC4_BASE_LO	0x2078	/* TX descriptor ring 2 base low */
#define	CAS_TX_DESC4_BASE_HI	0x207c	/* TX descriptor ring 2 base high */
#define	CAS_TX_MAXBURST1	0x2080	/* TX MaxBurst 1 */
#define	CAS_TX_MAXBURST2	0x2084	/* TX MaxBurst 2 */
#define	CAS_TX_MAXBURST3	0x2088	/* TX MaxBurst 3 */
#define	CAS_TX_MAXBURST4	0x208c	/* TX MaxBurst 4 */
#define	CAS_TX_FIFO_ADDR	0x2104	/* TX FIFO address */
#define	CAS_TX_FIFO_TAG		0x2108	/* TX FIFO tag */
#define	CAS_TX_FIFO_DATA_LO	0x210c	/* TX FIFO data low */
#define	CAS_TX_FIFO_DATA_HI_T1	0x2110	/* TX FIFO data highT1 */
#define	CAS_TX_FIFO_DATA_HI_T0	0x2114	/* TX FIFO data highT0 */
#define	CAS_TX_FIFO_SIZE	0x2118	/* TX FIFO size in 64 byte multiples */
#define	CAS_TX_RAM_BIST		0x211c	/* TX RAM BIST control/status */

#define	CAS_TX_CONF_TXDMA_EN	0x00000001	/* TX DMA enable */
#define	CAS_TX_CONF_FIFO_PIO	0x00000002	/* Allow TX FIFO PIO access. */
#define	CAS_TX_CONF_DESC1_MASK	0x0000003c	/* TX descriptor ring 1 size */
#define	CAS_TX_CONF_DESC1_SHFT	2
#define	CAS_TX_CONF_DESC2_MASK	0x000003c0	/* TX descriptor ring 2 size */
#define	CAS_TX_CONF_DESC2_SHFT	6
#define	CAS_TX_CONF_DESC3_MASK	0x00003c00	/* TX descriptor ring 3 size */
#define	CAS_TX_CONF_DESC3_SHFT	10
#define	CAS_TX_CONF_DESC4_MASK	0x0003c000	/* TX descriptor ring 4 size */
#define	CAS_TX_CONF_DESC4_SHFT	14
#define	CAS_TX_CONF_PACED	0x00100000	/* ALL intr. on FIFO empty */
#define	CAS_TX_CONF_RDPP_DIS	0x01000000	/* Should always be set. */
#define	CAS_TX_CONF_COMPWB_Q1	0x02000000	/* Completion writeback... */
#define	CAS_TX_CONF_COMPWB_Q2	0x04000000	/* ...happens at the end... */
#define	CAS_TX_CONF_COMPWB_Q3	0x08000000	/* ...of every packet in... */
#define	CAS_TX_CONF_COMPWB_Q4	0x10000000	/* ...queue n. */
#define	CAS_TX_CONF_PICWB_DIS	0x20000000	/* pre-intr. compl. W/B dis. */
#define	CAS_TX_CONF_CTX_MASK	0xc0000000	/* test port selection */
#define	CAS_TX_CONF_CTX_SHFT	30

#define	CAS_TX_COMPWB_ALIGN	2048		/* TX compl. W/B alignment */

#define	CAS_TX_DESC_ALIGN	2048		/* TX descriptor alignment */

/* descriptor ring size bits for both CAS_TX_CONF and CAS_RX_CONF */
#define	CAS_DESC_32		0x0		/* 32 descriptors */
#define	CAS_DESC_64		0x1		/* 64 descriptors */
#define	CAS_DESC_128		0x2		/* 128 descriptors */
#define	CAS_DESC_256		0x3		/* 256 descriptors */
#define	CAS_DESC_512		0x4		/* 512 descriptors */
#define	CAS_DESC_1K		0x5		/* 1k descriptors */
#define	CAS_DESC_2K		0x6		/* 2k descriptors */
#define	CAS_DESC_4K		0x7		/* 4k descriptors */
#define	CAS_DESC_8K		0x8		/* 8k descriptors */

#define	CAS_TX_SM1_CHAIN	0x000003ff	/* chaining state machine */
#define	CAS_TX_SM1_CKSUM	0x00000c00	/* checksum state machine */
#define	CAS_TX_SM1_TX_FIFO_LOAD	0x0003f000	/* TX FIFO load state machine */
#define	CAS_TX_SM1_TX_FIFO_UNLD	0x003c0000	/* TX FIFO unload state mach. */
#define	CAS_TX_SM1_CACHE_CTRL	0x03c00000	/* cache control state mach. */
#define	CAS_TX_SM1_CBQARB	0x03c00000	/* CBQ arbiter state machine */

#define	CAS_TX_SM2_COMPWB	0x00000007	/* compl. WB state machine */
#define	CAS_TX_SM2_SUB_LOAD	0x00000038	/* sub load state machine */
#define	CAS_TX_SM2_KICK		0x000000c0	/* kick state machine */

#define	CAS_TX_RAM_BIST_START	0x00000001	/* Start RAM BIST process. */
#define	CAS_TX_RAM_BIST_SUMMARY	0x00000002	/* All RAM okay */
#define	CAS_TX_RAM_BIST_RAM32B	0x00000004	/* RAM32B okay */
#define	CAS_TX_RAM_BIST_RAM33B	0x00000008	/* RAM33B okay */
#define	CAS_TX_RAM_BIST_RAM32A	0x00000010	/* RAM32A okay */
#define	CAS_TX_RAM_BIST_RAM33A	0x00000020	/* RAM33A okay */
#define	CAS_TX_RAM_BIST_SM	0x000001c0	/* RAM BIST state machine */

/* RX DMA registers */
#define	CAS_RX_CONF		0x4000	/* RX configuration */
#define	CAS_RX_PSZ		0x4004	/* RX page size */
#define	CAS_RX_FIFO_WR		0x4008	/* RX FIFO write pointer */
#define	CAS_RX_FIFO_RD		0x400c	/* RX FIFO read pointer */
#define	CAS_RX_IPP_WR		0x4010	/* RX IPP FIFO write pointer */
#define	CAS_RX_IPP_SDWR		0x4014	/* RX IPP FIFO shadow write pointer */
#define	CAS_RX_IPP_RD		0x4018	/* RX IPP FIFO read pointer */
#define	CAS_RX_DEBUG		0x401c	/* RX debug */
#define	CAS_RX_PTHRS		0x4020	/* RX PAUSE threshold */
#define	CAS_RX_KICK		0x4024	/* RX kick */
#define	CAS_RX_DESC_BASE_LO	0x4028	/* RX descriptor ring base low */
#define	CAS_RX_DESC_BASE_HI	0x402c	/* RX descriptor ring base high */
#define	CAS_RX_COMP_BASE_LO	0x4030	/* RX completion ring base low */
#define	CAS_RX_COMP_BASE_HI	0x4034	/* RX completion ring base high */
#define	CAS_RX_COMP		0x4038	/* RX completion */
#define	CAS_RX_COMP_HEAD	0x403c	/* RX completion head */
#define	CAS_RX_COMP_TAIL	0x4040	/* RX completion tail */
#define	CAS_RX_BLANK		0x4044	/* RX blanking for ISR read */
#define	CAS_RX_AEMPTY_THRS	0x4048	/* RX almost empty threshold */
#define	CAS_RX_RED		0x4048	/* RX random early detection enable */
#define	CAS_RX_FF		0x4050	/* RX FIFO fullness */
#define	CAS_RX_IPP_PKT_CNT	0x4054	/* RX IPP packet counter */
#define	CAS_RX_WORKING_DMA_LO	0x4058	/* RX working DMA pointer low */
#define	CAS_RX_WORKING_DMA_HI	0x405c	/* RX working DMA pointer high */
#define	CAS_RX_BIST		0x4060	/* RX BIST */
#define	CAS_RX_CTRL_FIFO_WR	0x4064	/* RX control FIFO write pointer */
#define	CAS_RX_CTRL_FIFO_RD	0x4068	/* RX control FIFO read pointer */
#define	CAS_RX_BLANK_ALIAS	0x406c	/* RX blanking for ISR read alias */
#define	CAS_RX_FIFO_ADDR	0x4080	/* RX FIFO address */
#define	CAS_RX_FIFO_TAG		0x4084	/* RX FIFO tag */
#define	CAS_RX_FIFO_DATA_LO	0x4088	/* RX FIFO data low */
#define	CAS_RX_FIFO_DATA_HI_T0	0x408c	/* RX FIFO data highT0 */
#define	CAS_RX_FIFO_DATA_HI_T1	0x4090	/* RX FIFO data highT1 */
#define	CAS_RX_CTRL_FIFO	0x4094	/* RX control FIFO and batching FIFO */
#define	CAS_RX_CTRL_FIFO_LO	0x4098	/* RX control FIFO data low */
#define	CAS_RX_CTRL_FIFO_MD	0x409c	/* RX control FIFO data mid */
#define	CAS_RX_CTRL_FIFO_HI	0x4100	/* RX control FIFO data high, flowID */
#define	CAS_RX_IPP_ADDR		0x4104	/* RX IPP FIFO address */
#define	CAS_RX_IPP_TAG		0x4108	/* RX IPP FIFO tag */
#define	CAS_RX_IPP_DATA_LO	0x410c	/* RX IPP FIFO data low */
#define	CAS_RX_IPP_DATA_HI_T0	0x4110	/* RX IPP FIFO data highT0 */
#define	CAS_RX_IPP_DATA_HI_T1	0x4114	/* RX IPP FIFO data highT1 */
#define	CAS_RX_HDR_PAGE_LO	0x4118	/* RX header page pointer low */
#define	CAS_RX_HDR_PAGE_HIGH	0x411c	/* RX header page pointer high */
#define	CAS_RX_MTU_PAGE_LO	0x4120	/* RX MTU page pointer low */
#define	CAS_RX_MTU_PAGE_HIGH	0x4124	/* RX MTU page pointer high */
#define	CAS_RX_REAS_DMA_ADDR	0x4128	/* RX reassembly DMA table address */
#define	CAS_RX_REAS_DMA_DATA_LO	0x412c	/* RX reassembly DMA table data low */
#define	CAS_RX_REAS_DMA_DATA_MD	0x4130	/* RX reassembly DMA table data mid */
#define	CAS_RX_REAS_DMA_DATA_HI	0x4134	/* RX reassembly DMA table data high */
/* The rest of the RX DMA registers are Cassini+/Saturn only. */
#define	CAS_RX_DESC2_BASE_LO	0x4200	/* RX descriptor ring 2 base low */
#define	CAS_RX_DESC2_BASE_HI	0x4204	/* RX descriptor ring 2 base high */
#define	CAS_RX_COMP2_BASE_LO	0x4208	/* RX completion ring 2 base low */
#define	CAS_RX_COMP2_BASE_HI	0x420c	/* RX completion ring 2 base high */
#define	CAS_RX_COMP3_BASE_LO	0x4210	/* RX completion ring 3 base low */
#define	CAS_RX_COMP3_BASE_HI	0x4214	/* RX completion ring 3 base high */
#define	CAS_RX_COMP4_BASE_LO	0x4218	/* RX completion ring 4 base low */
#define	CAS_RX_COMP4_BASE_HI	0x421c	/* RX completion ring 4 base high */
#define	CAS_RX_KICK2		0x4220	/* RX kick 2 */
#define	CAS_RX_COMP2		0x4224	/* RX completion 2 */
#define	CAS_RX_COMP_HEAD2	0x4228	/* RX completion head 2 */
#define	CAS_RX_COMP_TAIL2	0x422c	/* RX completion tail 2 */
#define	CAS_RX_COMP_HEAD3	0x4230	/* RX completion head 3 */
#define	CAS_RX_COMP_TAIL3	0x4234	/* RX completion tail 3 */
#define	CAS_RX_COMP_HEAD4	0x4238	/* RX completion head 4 */
#define	CAS_RX_COMP_TAIL4	0x423c	/* RX completion tail 4 */
#define	CAS_RX_AEMPTY_THRS2	0x4048	/* RX almost empty threshold 2 */

#define	CAS_RX_CONF_RXDMA_EN	0x00000001	/* RX DMA enable */
#define	CAS_RX_CONF_DESC_MASK	0x0000001e	/* RX descriptor ring size */
#define	CAS_RX_CONF_DESC_SHFT	1
#define	CAS_RX_CONF_COMP_MASK	0x000001e0	/* RX complition ring size */
#define	CAS_RX_CONF_COMP_SHFT	5
#define	CAS_RX_CONF_BATCH_DIS	0x00000200	/* descriptor batching dis. */
#define	CAS_RX_CONF_SOFF_MASK	0x00001c00	/* swivel offset */
#define	CAS_RX_CONF_SOFF_SHFT	10
/* The RX descriptor ring 2 is Cassini+/Saturn only. */
#define	CAS_RX_CONF_DESC2_MASK	0x000f0000	/* RX descriptor ring 2 size */
#define	CAS_RX_CONF_DESC2_SHFT	16

#define	CAS_RX_CONF_COMP_128	0x0		/* 128 descriptors */
#define	CAS_RX_CONF_COMP_256	0x1		/* 256 descriptors */
#define	CAS_RX_CONF_COMP_512	0x2		/* 512 descriptors */
#define	CAS_RX_CONF_COMP_1K	0x3		/* 1k descriptors */
#define	CAS_RX_CONF_COMP_2K	0x4		/* 2k descriptors */
#define	CAS_RX_CONF_COMP_4K	0x5		/* 4k descriptors */
#define	CAS_RX_CONF_COMP_8K	0x6		/* 8k descriptors */
#define	CAS_RX_CONF_COMP_16K	0x7		/* 16k descriptors */
#define	CAS_RX_CONF_COMP_32K	0x8		/* 32k descriptors */

#define	CAS_RX_PSZ_MASK		0x00000003	/* RX page size */
#define	CAS_RX_PSZ_SHFT		0
#define	CAS_RX_PSZ_MB_CNT_MASK	0x00007800	/* number of MTU buffers */
#define	CAS_RX_PSZ_MB_CNT_SHFT	11
#define	CAS_RX_PSZ_MB_STRD_MASK	0x18000000	/* MTU buffer stride */
#define	CAS_RX_PSZ_MB_STRD_SHFT	27
#define	CAS_RX_PSZ_MB_OFF_MASK	0xc0000000	/* MTU buffer offset */
#define	CAS_RX_PSZ_MB_OFF_SHFT	30

#define	CAS_RX_PSZ_2K		0x0		/* page size 2Kbyte */
#define	CAS_RX_PSZ_4K		0x1		/* page size 4Kbyte */
#define	CAS_RX_PSZ_8K		0x2		/* page size 8Kbyte */
#define	CAS_RX_PSZ_16K		0x3		/* page size 16Kbyte*/

#define	CAS_RX_PSZ_MB_STRD_1K	0x0		/* MTU buffer stride 1Kbyte */
#define	CAS_RX_PSZ_MB_STRD_2K	0x1		/* MTU buffer stride 2Kbyte */
#define	CAS_RX_PSZ_MB_STRD_4K	0x2		/* MTU buffer stride 4Kbyte */
#define	CAS_RX_PSZ_MB_STRD_8K	0x3		/* MTU buffer stride 8Kbyte */

#define	CAS_RX_PSZ_MB_OFF_0	0x0		/* MTU buf. offset 0 bytes */
#define	CAS_RX_PSZ_MB_OFF_64	0x1		/* MTU buf. offset 64 bytes */
#define	CAS_RX_PSZ_MB_OFF_96	0x2		/* MTU buf. offset 96 bytes */
#define	CAS_RX_PSZ_MB_OFF_128	0x3		/* MTU buf. offset 128 bytes */

#define	CAS_RX_DESC_ALIGN	8192		/* RX descriptor alignment */

#define	CAS_RX_COMP_ALIGN	8192		/* RX complition alignment */

/* The RX PAUSE thresholds are specified in multiples of 64 bytes. */
#define	CAS_RX_PTHRS_XOFF_MASK	0x000001ff	/* XOFF PAUSE */
#define	CAS_RX_PTHRS_XOFF_SHFT	0
#define	CAS_RX_PTHRS_XON_MASK	0x001ff000	/* XON PAUSE */
#define	CAS_RX_PTHRS_XON_SHFT	12

/*
 * CAS_RX_BLANK and CAS_RX_BLANK_ALIAS bits
 * CAS_RX_BLANK is loaded each time CAS_STATUS is read and CAS_RX_BLANK_ALIAS
 * is read each time CAS_STATUS_ALIAS is read.  The blanking time is specified
 * in multiples of 512 core ticks (which runs at 125MHz).
 */
#define	CAS_RX_BLANK_PKTS_MASK	0x000001ff	/* RX blanking packets */
#define	CAS_RX_BLANK_PKTS_SHFT	0
#define	CAS_RX_BLANK_TIME_MASK	0x3ffff000	/* RX blanking time */
#define	CAS_RX_BLANK_TIME_SHFT	12

/* CAS_RX_AEMPTY_THRS and CAS_RX_AEMPTY_THRS2 bits */
#define	CAS_RX_AEMPTY_THRS_MASK	0x00001fff	/* RX_BUF_AEMPTY threshold */
#define	CAS_RX_AEMPTY_THRS_SHFT	0
#define	CAS_RX_AEMPTY_COMP_MASK	0x0fffe000	/* RX_COMP_AFULL threshold */
#define	CAS_RX_AEMPTY_COMP_SHFT	13

/* The RX random early detection probability is in 12.5% granularity. */
#define	CAS_RX_RED_4K_6K_MASK	0x000000ff	/* 4K < FIFO threshold < 6K */
#define	CAS_RX_RED_4K_6K_SHFT	0
#define	CAS_RX_RED_6K_8K_MASK	0x0000ff00	/* 6K < FIFO threshold < 8K */
#define	CAS_RX_RED_6K_8K_SHFT	8
#define	CAS_RX_RED_8K_10K_MASK	0x00ff0000	/* 8K < FIFO threshold < 10K */
#define	CAS_RX_RED_8K_10K_SHFT	16
#define	CAS_RX_RED_10K_12K_MASK	0xff000000	/* 10K < FIFO threshold < 12K */
#define	CAS_RX_RED_10K_12K_SHFT	24

/* CAS_RX_FF_IPP_MASK and CAS_RX_FF_FIFO_MASK are in 8 bytes granularity. */
#define	CAS_RX_FF_PKT_MASK	0x000000ff	/* # of packets in RX FIFO */
#define	CAS_RX_FF_PKT_SHFT	0
#define	CAS_RX_FF_IPP_MASK	0x0007ff00	/* IPP FIFO level */
#define	CAS_RX_FF_IPP_SHFT	8
#define	CAS_RX_FF_FIFO_MASK	0x3ff80000	/* RX FIFO level */
#define	CAS_RX_FF_FIFO_SHFT	19

#define	CAS_RX_BIST_START	0x00000001	/* Start BIST process. */
#define	CAS_RX_BIST_SUMMARY	0x00000002	/* All okay */
#define	CAS_RX_BIST_SM		0x00007800	/* BIST state machine */
#define	CAS_RX_BIST_REAS_27	0x00008000	/* Reas 27 okay */
#define	CAS_RX_BIST_REAS_26B	0x00010000	/* Reas 26B okay */
#define	CAS_RX_BIST_REAS_26A	0x00020000	/* Reas 26A okay */
#define	CAS_RX_BIST_CTRL_33	0x00040000	/* Control FIFO 33 okay */
#define	CAS_RX_BIST_CTRL_32	0x00080000	/* Control FIFO 32 okay */
#define	CAS_RX_BIST_IPP_33C	0x00100000	/* IPP 33C okay */
#define	CAS_RX_BIST_IPP_32C	0x00200000	/* IPP 32C okay */
#define	CAS_RX_BIST_IPP_33B	0x00400000	/* IPP 33B okay */
#define	CAS_RX_BIST_IPP_32B	0x00800000	/* IPP 32B okay */
#define	CAS_RX_BIST_IPP_33A	0x01000000	/* IPP 33A okay */
#define	CAS_RX_BIST_IPP_32A	0x02000000	/* IPP 32A okay */
#define	CAS_RX_BIST_33C		0x04000000	/* 33C okay */
#define	CAS_RX_BIST_32C		0x08000000	/* 32C okay */
#define	CAS_RX_BIST_33B		0x10000000	/* 33B okay */
#define	CAS_RX_BIST_32B		0x20000000	/* 32B okay */
#define	CAS_RX_BIST_33A		0x40000000	/* 33A okay */
#define	CAS_RX_BIST_32A		0x80000000	/* 32A okay */

#define	CAS_RX_REAS_DMA_ADDR_LC	0x0000003f	/* reas. table location sel. */

/* header parser registers */
#define	CAS_HP_CONF		0x4140	/* HP configuration */
#define	CAS_HP_IR_ADDR		0x4144	/* HP instruction RAM address */
#define	CAS_HP_IR_DATA_LO	0x4148	/* HP instruction RAM data low */
#define	CAS_HP_IR_DATA_MD	0x414c	/* HP instruction RAM data mid */
#define	CAS_HP_IR_DATA_HI	0x4150	/* HP instruction RAM data high */
#define	CAS_HP_DR_FDB		0x4154	/* HP data RAM and flow DB address */
#define	CAS_HP_DR_DATA		0x4158	/* HP data RAM data */
#define	CAS_HP_FLOW_DB1		0x415c	/* HP flow database 1 */
#define	CAS_HP_FLOW_DB2		0x4160	/* HP flow database 2 */
#define	CAS_HP_FLOW_DB3		0x4164	/* HP flow database 3 */
#define	CAS_HP_FLOW_DB4		0x4168	/* HP flow database 4 */
#define	CAS_HP_FLOW_DB5		0x416c	/* HP flow database 5 */
#define	CAS_HP_FLOW_DB6		0x4170	/* HP flow database 6 */
#define	CAS_HP_FLOW_DB7		0x4174	/* HP flow database 7 */
#define	CAS_HP_FLOW_DB8		0x4178	/* HP flow database 8 */
#define	CAS_HP_FLOW_DB9		0x417c	/* HP flow database 9 */
#define	CAS_HP_FLOW_DB10	0x4180	/* HP flow database 10 */
#define	CAS_HP_FLOW_DB11	0x4184	/* HP flow database 11 */
#define	CAS_HP_FLOW_DB12	0x4188	/* HP flow database 12 */
#define	CAS_HP_SM		0x418c	/* HP state machine */
#define	CAS_HP_STATUS1		0x4190	/* HP status 1 */
#define	CAS_HP_STATUS2		0x4194	/* HP status 2 */
#define	CAS_HP_STATUS3		0x4198	/* HP status 3 */
#define	CAS_HP_RAM_BIST		0x419c	/* HP RAM BIST */

#define	CAS_HP_CONF_PARSE_EN	0x00000001	/* header parsing enable */
#define	CAS_HP_CONF_NCPU_MASK	0x000000fc	/* #CPUs (0x0: 64) */
#define	CAS_HP_CONF_NCPU_SHFT	2
#define	CAS_HP_CONF_SINC_DIS	0x00000100	/* SYN inc. seq. number dis. */
#define	CAS_HP_CONF_TPT_MASK	0x000ffe00	/* TCP payload threshold */
#define	CAS_HP_CONF_TPT_SHFT	9

#define	CAS_HP_DR_FDB_DR_MASK	0x0000001f	/* data RAM location sel. */
#define	CAS_HP_DR_FDB_DR_SHFT	0
#define	CAS_HP_DR_FDB_FDB_MASK	0x00003f00	/* flow DB location sel. */
#define	CAS_HP_DR_FDB_FDB_SHFT	8

#define	CAS_HP_STATUS1_OP_MASK	0x00000007	/* HRP opcode */
#define	CAS_HP_STATUS1_OP_SHFT	0
#define	CAS_HP_STATUS1_LB_MASK	0x000001f8	/* load balancing CPU number */
#define	CAS_HP_STATUS1_LB_SHFT	3
#define	CAS_HP_STATUS1_L3O_MASK	0x0000fe00	/* layer 3 offset */
#define	CAS_HP_STATUS1_L3O_SHFT	9
#define	CAS_HP_STATUS1_SAP_MASK	0xffff0000	/* ethertype */
#define	CAS_HP_STATUS1_SAP_SHFT	16

#define	CAS_HP_STATUS2_TSZ_MASK	0x0000ffff	/* TCP payload size */
#define	CAS_HP_STATUS2_TSZ_SHFT	0
#define	CAS_HP_STATUS2_TO_MASK	0x007f0000	/* TCP payload offset */
#define	CAS_HP_STATUS2_TO_SHFT	16
#define	CAS_HP_STATUS2_FID_MASK	0x1f800000	/* flow ID */
#define	CAS_HP_STATUS2_FID_SHFT	23
#define	CAS_HP_STATUS2_AR2_MASK	0xe0000000	/* accu_R2[6:4] */
#define	CAS_HP_STATUS2_AR2_SHFT	29

#define	CAS_HP_STATUS3_TCP_NCHK	0x00000001	/* TCP no payload check */
#define	CAS_HP_STATUS3_TCP_CHK	0x00000002	/* TCP payload check */
#define	CAS_HP_STATUS3_SYN_FLAG	0x00000004	/* SYN flag */
#define	CAS_HP_STATUS3_TCP_FLAG	0x00000008	/* TCP flag check */
#define	CAS_HP_STATUS3_CTRL_PF	0x00000010	/* control packet flag */
#define	CAS_HP_STATUS3_NASSIST	0x00000020	/* no assist */
#define	CAS_HP_STATUS3_MASK_PT	0x00000040	/* Mask payload threshold. */
#define	CAS_HP_STATUS3_FRC_TPC	0x00000080	/* Force TCP payload check. */
#define	CAS_HP_STATUS3_MASK_DLZ	0x00000100	/* Mask data length equal 0. */
#define	CAS_HP_STATUS3_FRC_TNPC	0x00000200	/* Force TCP no payload chk. */
#define	CAS_HP_STATUS3_JMBHS_EN	0x00000400	/* jumbo header split enable */
#define	CAS_HP_STATUS3_BWO_REAS	0x00000800	/* batching w/o reassembly */
#define	CAS_HP_STATUS3_FRC_DROP	0x00001000	/* force drop */
#define	CAS_HP_STATUS3_AR1_MASK	0x000fe000	/* accu_R1 */
#define	CAS_HP_STATUS3_AR1_SHFT	13
#define	CAS_HP_STATUS3_CSO_MASK	0x07f00000	/* checksum start offset */
#define	CAS_HP_STATUS3_CSO_SHFT	19
#define	CAS_HP_STATUS3_AR2_MASK	0xf0000000	/* accu_R2[3:0] */
#define	CAS_HP_STATUS3_AR2_SHFT	28

#define	CAS_HP_RAM_BIST_START	0x00000001	/* Start RAM BIST process. */
#define	CAS_HP_RAM_BIST_SUMMARY	0x00000002	/* all RAM okay */
#define	CAS_HP_RAM_BIST_TCPSEQ	0x00020000	/* TCP seqeunce RAM okay */
#define	CAS_HP_RAM_BIST_FID31	0x00040000	/* flow ID RAM3 bank 1 okay */
#define	CAS_HP_RAM_BIST_FID21	0x00080000	/* flow ID RAM2 bank 1 okay */
#define	CAS_HP_RAM_BIST_FID11	0x00100000	/* flow ID RAM1 bank 1 okay */
#define	CAS_HP_RAM_BIST_FID01	0x00200000	/* flow ID RAM0 bank 1 okay */
#define	CAS_HP_RAM_BIST_FID30	0x00400000	/* flow ID RAM3 bank 0 okay */
#define	CAS_HP_RAM_BIST_FID20	0x00800000	/* flow ID RAM2 bank 0 okay */
#define	CAS_HP_RAM_BIST_FID10	0x01000000	/* flow ID RAM1 bank 0 okay */
#define	CAS_HP_RAM_BIST_FID00	0x02000000	/* flow ID RAM0 bank 0 okay */
#define	CAS_HP_RAM_BIST_AGE1	0x04000000	/* aging RAM1 okay */
#define	CAS_HP_RAM_BIST_AGE0	0x08000000	/* aging RAM0 okay */
#define	CAS_HP_RAM_BIST_IR2	0x10000000	/* instruction RAM2 okay */
#define	CAS_HP_RAM_BIST_IR1	0x20000000	/* instruction RAM1 okay */
#define	CAS_HP_RAM_BIST_IR0	0x40000000	/* instruction RAM0 okay */
#define	CAS_HP_RAM_BIST_DR	0x80000000	/* data RAM okay */

/* MAC registers */
#define	CAS_MAC_TXRESET		0x6000	/* TX MAC software reset command */
#define	CAS_MAC_RXRESET		0x6004	/* RX MAC software reset command */
#define	CAS_MAC_SPC		0x6008	/* send PAUSE command */
#define	CAS_MAC_TX_STATUS	0x6010	/* TX MAC status */
#define	CAS_MAC_RX_STATUS	0x6014	/* RX MAC status */
#define	CAS_MAC_CTRL_STATUS	0x6018	/* MAC control status */
#define	CAS_MAC_TX_MASK		0x6020	/* TX MAC mask */
#define	CAS_MAC_RX_MASK		0x6024	/* RX MAC mask */
#define	CAS_MAC_CTRL_MASK	0x6028	/* MAC control mask */
#define	CAS_MAC_TX_CONF		0x6030	/* TX MAC configuration */
#define	CAS_MAC_RX_CONF		0x6034	/* RX MAC configuration */
#define	CAS_MAC_CTRL_CONF	0x6038	/* MAC control configuration */
#define	CAS_MAC_XIF_CONF	0x603c	/* XIF configuration */
#define	CAS_MAC_IPG0		0x6040	/* inter packet gap 0 */
#define	CAS_MAC_IPG1		0x6044	/* inter packet gap 1 */
#define	CAS_MAC_IPG2		0x6048	/* inter packet gap 2 */
#define	CAS_MAC_SLOT_TIME	0x604c	/* slot time */
#define	CAS_MAC_MIN_FRAME	0x6050	/* minimum frame size */
#define	CAS_MAC_MAX_BF		0x6054	/* maximum bust and frame size */
#define	CAS_MAC_PREAMBLE_LEN	0x6058	/* PA size */
#define	CAS_MAC_JAM_SIZE	0x605c	/* jam size */
#define	CAS_MAC_ATTEMPT_LIMIT	0x6060	/* attempt limit */
#define	CAS_MAC_CTRL_TYPE	0x6064	/* MAC control type */
#define	CAS_MAC_ADDR0		0x6080	/* MAC address 0 */
#define	CAS_MAC_ADDR1		0x6084	/* MAC address 1 */
#define	CAS_MAC_ADDR2		0x6088	/* MAC address 2 */
#define	CAS_MAC_ADDR3		0x608c	/* MAC address 3 */
#define	CAS_MAC_ADDR4		0x6090	/* MAC address 4 */
#define	CAS_MAC_ADDR5		0x6094	/* MAC address 5 */
#define	CAS_MAC_ADDR6		0x6098	/* MAC address 6 */
#define	CAS_MAC_ADDR7		0x609c	/* MAC address 7 */
#define	CAS_MAC_ADDR8		0x60a0	/* MAC address 8 */
#define	CAS_MAC_ADDR9		0x60a4	/* MAC address 9 */
#define	CAS_MAC_ADDR10		0x60a8	/* MAC address 10 */
#define	CAS_MAC_ADDR11		0x60ac	/* MAC address 11 */
#define	CAS_MAC_ADDR12		0x60b0	/* MAC address 12 */
#define	CAS_MAC_ADDR13		0x60b4	/* MAC address 13 */
#define	CAS_MAC_ADDR14		0x60b8	/* MAC address 14 */
#define	CAS_MAC_ADDR15		0x60bc	/* MAC address 15 */
#define	CAS_MAC_ADDR16		0x60c0	/* MAC address 16 */
#define	CAS_MAC_ADDR17		0x60c4	/* MAC address 17 */
#define	CAS_MAC_ADDR18		0x60c8	/* MAC address 18 */
#define	CAS_MAC_ADDR19		0x60cc	/* MAC address 19 */
#define	CAS_MAC_ADDR20		0x60d0	/* MAC address 20 */
#define	CAS_MAC_ADDR21		0x60d4	/* MAC address 21 */
#define	CAS_MAC_ADDR22		0x60d8	/* MAC address 22 */
#define	CAS_MAC_ADDR23		0x60dc	/* MAC address 23 */
#define	CAS_MAC_ADDR24		0x60e0	/* MAC address 24 */
#define	CAS_MAC_ADDR25		0x60e4	/* MAC address 25 */
#define	CAS_MAC_ADDR26		0x60e8	/* MAC address 26 */
#define	CAS_MAC_ADDR27		0x60ec	/* MAC address 27 */
#define	CAS_MAC_ADDR28		0x60f0	/* MAC address 28 */
#define	CAS_MAC_ADDR29		0x60f4	/* MAC address 29 */
#define	CAS_MAC_ADDR30		0x60f8	/* MAC address 30 */
#define	CAS_MAC_ADDR31		0x60fc	/* MAC address 31 */
#define	CAS_MAC_ADDR32		0x6100	/* MAC address 32 */
#define	CAS_MAC_ADDR33		0x6104	/* MAC address 33 */
#define	CAS_MAC_ADDR34		0x6108	/* MAC address 34 */
#define	CAS_MAC_ADDR35		0x610c	/* MAC address 35 */
#define	CAS_MAC_ADDR36		0x6110	/* MAC address 36 */
#define	CAS_MAC_ADDR37		0x6114	/* MAC address 37 */
#define	CAS_MAC_ADDR38		0x6118	/* MAC address 38 */
#define	CAS_MAC_ADDR39		0x611c	/* MAC address 39 */
#define	CAS_MAC_ADDR40		0x6120	/* MAC address 40 */
#define	CAS_MAC_ADDR41		0x6124	/* MAC address 41 */
#define	CAS_MAC_ADDR42		0x6128	/* MAC address 42 */
#define	CAS_MAC_ADDR43		0x612c	/* MAC address 43 */
#define	CAS_MAC_ADDR44		0x6130	/* MAC address 44 */
#define	CAS_MAC_AFILTER0	0x614c	/* address filter 0 */
#define	CAS_MAC_AFILTER1	0x6150	/* address filter 1 */
#define	CAS_MAC_AFILTER2	0x6154	/* address filter 2 */
#define	CAS_MAC_AFILTER_MASK1_2	0x6158	/* address filter 2 & 1 mask*/
#define	CAS_MAC_AFILTER_MASK0	0x615c	/* address filter 0 mask */
#define	CAS_MAC_HASH0		0x6160	/* hash table 0 */
#define	CAS_MAC_HASH1		0x6164	/* hash table 1 */
#define	CAS_MAC_HASH2		0x6168	/* hash table 2 */
#define	CAS_MAC_HASH3		0x616c	/* hash table 3 */
#define	CAS_MAC_HASH4		0x6170	/* hash table 4 */
#define	CAS_MAC_HASH5		0x6174	/* hash table 5 */
#define	CAS_MAC_HASH6		0x6178	/* hash table 6 */
#define	CAS_MAC_HASH7		0x617c	/* hash table 7 */
#define	CAS_MAC_HASH8		0x6180	/* hash table 8 */
#define	CAS_MAC_HASH9		0x6184	/* hash table 9 */
#define	CAS_MAC_HASH10		0x6188	/* hash table 10 */
#define	CAS_MAC_HASH11		0x618c	/* hash table 11 */
#define	CAS_MAC_HASH12		0x6190	/* hash table 12 */
#define	CAS_MAC_HASH13		0x6194	/* hash table 13 */
#define	CAS_MAC_HASH14		0x6198	/* hash table 14 */
#define	CAS_MAC_HASH15		0x619c	/* hash table 15 */
#define	CAS_MAC_NORM_COLL_CNT	0x61a0	/* normal collision counter */
#define	CAS_MAC_FIRST_COLL_CNT	0x61a4	/* 1st attempt suc. collision counter */
#define	CAS_MAC_EXCESS_COLL_CNT	0x61a8	/* excess collision counter */
#define	CAS_MAC_LATE_COLL_CNT	0x61ac	/* late collision counter */
#define	CAS_MAC_DEFER_TMR_CNT	0x61b0	/* defer timer */
#define	CAS_MAC_PEAK_ATTEMPTS	0x61b4	/* peak attempts */
#define	CAS_MAC_RX_FRAME_COUNT	0x61b8	/* receive frame counter */
#define	CAS_MAC_RX_LEN_ERR_CNT	0x61bc	/* length error counter */
#define	CAS_MAC_RX_ALIGN_ERR	0x61c0	/* alignment error counter */
#define	CAS_MAC_RX_CRC_ERR_CNT	0x61c4	/* FCS error counter */
#define	CAS_MAC_RX_CODE_VIOL	0x61c8	/* RX code violation error counter */
#define	CAS_MAC_RANDOM_SEED	0x61cc	/* random number seed */
#define	CAS_MAC_MAC_STATE	0x61d0	/* MAC state machine */

#define	CAS_MAC_SPC_TIME_MASK	0x0000ffff	/* PAUSE time value */
#define	CAS_MAC_SPC_TIME_SHFT	0
#define	CAS_MAC_SPC_SEND	0x00010000	/* Send PAUSE frame. */

/* CAS_MAC_TX_STATUS and CAS_MAC_TX_MASK register bits */
#define	CAS_MAC_TX_FRAME_XMTD	0x00000001	/* Frame transmitted. */
#define	CAS_MAC_TX_UNDERRUN	0x00000002	/* TX data starvation */
#define	CAS_MAC_TX_MAX_PKT_ERR	0x00000004	/* frame > CAS_MAC_MAX_FRAME */
#define	CAS_MAC_TX_NCC_EXP	0x00000008	/* normal coll. counter wrap */
#define	CAS_MAC_TX_ECC_EXP	0x00000010	/* excess coll. counter wrap */
#define	CAS_MAC_TX_LCC_EXP	0x00000020	/* late coll. counter wrap */
#define	CAS_MAC_TX_FCC_EXP	0x00000040	/* 1st coll. counter wrap */
#define	CAS_MAC_TX_DEFER_EXP	0x00000080	/* defer timer wrap */
#define	CAS_MAC_TX_PEAK_EXP	0x00000100	/* peak attempts counter wrap */

/* CAS_MAC_RX_STATUS and CAS_MAC_RX_MASK register bits */
#define	CAS_MAC_RX_FRAME_RCVD	0x00000001	/* Frame received. */
#define	CAS_MAC_RX_OVERFLOW	0x00000002	/* RX FIFO overflow */
#define	CAS_MAC_RX_FRAME_EXP	0x00000004	/* RX frame counter wrap */
#define	CAS_MAC_RX_ALIGN_EXP	0x00000008	/* alignment error cntr. wrap */
#define	CAS_MAC_RX_CRC_EXP	0x00000010	/* CRC error counter wrap */
#define	CAS_MAC_RX_LEN_EXP	0x00000020	/* length error counter wrap */
#define	CAS_MAC_RX_VIOL_EXP	0x00000040	/* code violation cntr. wrap */

/* CAS_MAC_CTRL_STATUS and CAS_MAC_CTRL_MASK register bits */
#define	CAS_MAC_CTRL_PAUSE_RCVD	0x00000001	/* PAUSE received. */
#define	CAS_MAC_CTRL_PAUSE	0x00000002	/* PAUSE state entered. */
#define	CAS_MAC_CTRL_NON_PAUSE	0x00000004	/* PAUSE state left. */

#define	CAS_MAC_CTRL_STATUS_PT_MASK	0xffff0000	/* PAUSE time */
#define	CAS_MAC_CTRL_STATUS_PT_SHFT	16

#define	CAS_MAC_TX_CONF_EN	0x00000001	/* TX enable */
#define	CAS_MAC_TX_CONF_ICARR	0x00000002	/* Ignore carrier sense. */
#define	CAS_MAC_TX_CONF_ICOLLIS	0x00000004	/* Ignore collisions. */
#define	CAS_MAC_TX_CONF_EN_IPG0	0x00000008	/* extend RX-to-TX IPG */
#define	CAS_MAC_TX_CONF_NGU	0x00000010	/* Never give up. */
#define	CAS_MAC_TX_CONF_NGUL	0x00000020	/* never give up limit */
#define	CAS_MAC_TX_CONF_NBOFF	0x00000040	/* Disable backoff algorithm. */
#define	CAS_MAC_TX_CONF_SDOWN	0x00000080	/* CSMA/CD slow down */
#define	CAS_MAC_TX_CONF_NO_FCS	0x00000100	/* Don't generate FCS. */
#define	CAS_MAC_TX_CONF_CARR	0x00000200	/* carrier extension enable */

#define	CAS_MAC_RX_CONF_EN	0x00000001	/* RX enable */
#define	CAS_MAC_RX_CONF_STRPPAD	0x00000002	/* Must not be set. */
#define	CAS_MAC_RX_CONF_STRPFCS	0x00000004	/* Strip FCS bytes. */
#define	CAS_MAC_RX_CONF_PROMISC	0x00000008	/* promiscuous mode enable */
#define	CAS_MAC_RX_CONF_PGRP	0x00000010	/* promiscuous group mode en. */
#define	CAS_MAC_RX_CONF_HFILTER	0x00000020	/* hash filter enable */
#define	CAS_MAC_RX_CONF_AFILTER	0x00000040	/* address filter enable */
#define	CAS_MAC_RX_CONF_DIS_DOE	0x00000080	/* disable discard on error */
#define	CAS_MAC_RX_CONF_CARR	0x00000100	/* carrier extension enable */

#define	CAS_MAC_CTRL_CONF_TXP	0x00000001	/* send PAUSE enable */
#define	CAS_MAC_CTRL_CONF_RXP	0x00000002	/* receive PAUSE enable */
#define	CAS_MAC_CTRL_CONF_PASSP	0x00000004	/* Pass PAUSE up to RX DMA. */

#define	CAS_MAC_XIF_CONF_TX_OE	0x00000001	/* MII TX output drivers en. */
#define	CAS_MAC_XIF_CONF_ILBK	0x00000002	/* MII internal loopback en. */
#define	CAS_MAC_XIF_CONF_NOECHO	0x00000004	/* Disable echo. */
#define	CAS_MAC_XIF_CONF_GMII	0x00000008	/* GMII (vs. MII) mode enable */
#define	CAS_MAC_XIF_CONF_BUF_OE	0x00000010	/* MII_BUF_OE enable */
#define	CAS_MAC_XIF_CONF_LNKLED	0x00000020	/* Force LINKLED# active. */
#define	CAS_MAC_XIF_CONF_FDXLED	0x00000040	/* Force FDPLXLED# active. */

/*
 * The value of CAS_MAC_SLOT_TIME specifies the PAUSE time unit and depends
 * on whether carrier extension is enabled.
 */
#define	CAS_MAC_SLOT_TIME_CARR	0x200		/* slot time for carr. ext. */
#define	CAS_MAC_SLOT_TIME_NORM	0x40		/* slot time otherwise */

#define	CAS_MAC_MAX_BF_FRM_MASK	0x00007fff	/* maximum frame size */
#define	CAS_MAC_MAX_BF_FRM_SHFT	0
#define	CAS_MAC_MAX_BF_BST_MASK	0x3fff0000	/* maximum burst size */
#define	CAS_MAC_MAX_BF_BST_SHFT	16

/*
 * MIF registers
 * The bit-bang registers use the low bit only.
 */
#define	CAS_MIF_BB_CLOCK	0x6200	/* MIF bit-bang clock */
#define	CAS_MIF_BB_DATA		0x6204	/* MIF bit-bang data */
#define	CAS_MIF_BB_OUTPUT_EN	0x6208	/* MIF bit-bang output enable */
#define	CAS_MIF_FRAME		0x620c	/* MIF frame/output */
#define	CAS_MIF_CONF		0x6210	/* MIF configuration */
#define	CAS_MIF_MASK		0x6214	/* MIF mask */
#define	CAS_MIF_STATUS		0x6218	/* MIF status */
#define	CAS_MIF_SM		0x621c	/* MIF state machine */

#define	CAS_MIF_FRAME_DATA	0x0000ffff	/* instruction payload */
#define	CAS_MIF_FRAME_TA_LSB	0x00010000	/* turn around LSB */
#define	CAS_MIF_FRAME_TA_MSB	0x00020000	/* turn around MSB */
#define	CAS_MIF_FRAME_REG_MASK	0x007c0000	/* register address */
#define	CAS_MIF_FRAME_REG_SHFT	18
#define	CAS_MIF_FRAME_PHY_MASK	0x0f800000	/* PHY address */
#define	CAS_MIF_FRAME_PHY_SHFT	23
#define	CAS_MIF_FRAME_OP_WRITE	0x10000000	/* write opcode */
#define	CAS_MIF_FRAME_OP_READ	0x20000000	/* read opcode */
#define	CAS_MIF_FRAME_OP_MASK						\
	(CAS_MIF_FRAME_OP_WRITE | CAS_MIF_FRAME_OP_READ)
#define	CAS_MIF_FRAME_ST	0x40000000	/* start of frame */
#define	CAS_MIF_FRAME_ST_MASK	0xc0000000	/* start of frame */

#define	CAS_MIF_FRAME_READ						\
	(CAS_MIF_FRAME_TA_MSB | CAS_MIF_FRAME_OP_READ | CAS_MIF_FRAME_ST)
#define	CAS_MIF_FRAME_WRITE						\
	(CAS_MIF_FRAME_TA_MSB | CAS_MIF_FRAME_OP_WRITE | CAS_MIF_FRAME_ST)

#define	CAS_MIF_CONF_PHY_SELECT	0x00000001	/* PHY select, 0: MDIO_0 */
#define	CAS_MIF_CONF_POLL_EN	0x00000002	/* polling mechanism enable */
#define	CAS_MIF_CONF_BB_MODE	0x00000004	/* bit-bang mode enable */
#define	CAS_MIF_CONF_PREG_MASK	0x000000f8	/* polled register */
#define	CAS_MIF_CONF_PREG_SHFT	3
#define	CAS_MIF_CONF_MDI0	0x00000100	/* MDIO_0 data/attached */
#define	CAS_MIF_CONF_MDI1	0x00000200	/* MDIO_1 data/attached */
#define	CAS_MIF_CONF_PPHY_MASK	0x00007c00	/* polled PHY */
#define	CAS_MIF_CONF_PPHY_SHFT	10

/* CAS_MIF_MASK and CAS_MIF_STATUS bits */
#define	CAS_MIF_POLL_STATUS_MASK	0x0000ffff	/* polling status */
#define	CAS_MIF_POLL_STATUS_SHFT	0
#define	CAS_MIF_POLL_DATA_MASK		0xffff0000	/* polling data */
#define	CAS_MIF_POLL_DATA_SHFT		8

#define	CAS_MIF_SM_CTRL_MASK	0x00000007	/* ctrl. state machine state */
#define	CAS_MIF_SM_CTRL_SHFT	0
#define	CAS_MIF_SM_EXEC_MASK	0x00000060	/* exec. state machine state */

/* PCS/Serialink registers */
#define	CAS_PCS_CTRL		0x9000	/* PCS MII control (PCS "BMCR") */
#define	CAS_PCS_STATUS		0x9004	/* PCS MII status (PCS "BMSR") */
#define	CAS_PCS_ANAR		0x9008	/* PCS MII advertisement */
#define	CAS_PCS_ANLPAR		0x900c	/* PCS MII link partner ability */
#define	CAS_PCS_CONF		0x9010	/* PCS configuration */
#define	CAS_PCS_SM		0x9014	/* PCS state machine */
#define	CAS_PCS_INTR_STATUS	0x9018	/* PCS interrupt status */
#define	CAS_PCS_DATAPATH	0x9050	/* datapath mode */
#define	CAS_PCS_SERDES_CTRL	0x9054	/* SERDES control */
#define	CAS_PCS_OUTPUT_SELECT	0x9058	/* shared output select */
#define	CAS_PCS_SERDES_STATUS	0x905c	/* SERDES state */
#define	CAS_PCS_PKT_CNT		0x9060	/* PCS packet counter */

#define	CAS_PCS_CTRL_1000M	0x00000040	/* 1000Mbps speed select */
#define	CAS_PCS_CTRL_COLL_TEST	0x00000080	/* collision test */
#define	CAS_PCS_CTRL_FDX	0x00000100	/* full-duplex, always 0 */
#define	CAS_PCS_CTRL_RANEG	0x00000200	/* restart auto-negotiation */
#define	CAS_PCS_CTRL_ISOLATE	0x00000400	/* isolate PHY from MII */
#define	CAS_PCS_CTRL_POWERDOWN	0x00000800	/* power down */
#define	CAS_PCS_CTRL_ANEG_EN	0x00001000	/* auto-negotiation enable */
#define	CAS_PCS_CTRL_10_100M	0x00002000	/* 10/100Mbps speed select */
#define	CAS_PCS_CTRL_RESET	0x00008000	/* Reset PCS. */

#define	CAS_PCS_STATUS_EXTCAP	0x00000001	/* extended capability */
#define	CAS_PCS_STATUS_JABBER	0x00000002	/* jabber condition detected */
#define	CAS_PCS_STATUS_LINK	0x00000004	/* link status */
#define	CAS_PCS_STATUS_ANEG_ABL	0x00000008	/* auto-negotiation ability */
#define	CAS_PCS_STATUS_REM_FLT	0x00000010	/* remote fault detected */
#define	CAS_PCS_STATUS_ANEG_CPT	0x00000020	/* auto-negotiate complete */
#define	CAS_PCS_STATUS_EXTENDED	0x00000100	/* extended status */

/* CAS_PCS_ANAR and CAS_PCS_ANLPAR register bits */
#define	CAS_PCS_ANEG_FDX	0x00000020	/* full-duplex */
#define	CAS_PCS_ANEG_HDX	0x00000040	/* half-duplex */
#define	CAS_PCS_ANEG_PAUSE	0x00000080	/* symmetric PAUSE */
#define	CAS_PCS_ANEG_ASM_DIR	0x00000100	/* asymmetric PAUSE */
#define	CAS_PCS_ANEG_RFLT_FAIL	0x00001000	/* remote fault - fail */
#define	CAS_PCS_ANEG_RFLT_OFF	0x00002000	/* remote fault - off-line */
#define	CAS_PCS_ANEG_RFLT_MASK						\
	(CAS_PCS_ANEG_RFLT_FAIL | CAS_PCS_ANEG_RFLT_OFF)
#define	CAS_PCS_ANEG_ACK	0x00004000	/* acknowledge */
#define	CAS_PCS_ANEG_NEXT_PAGE	0x00008000	/* next page */

#define	CAS_PCS_CONF_EN		0x00000001	/* Enable PCS. */
#define	CAS_PCS_CONF_SDO	0x00000002	/* signal detect override */
#define	CAS_PCS_CONF_SDL	0x00000004	/* signal detect active-low */
#define	CAS_PCS_CONF_JS_NORM	0x00000000	/* jitter study - normal op. */
#define	CAS_PCS_CONF_JS_HF	0x00000008	/* jitter study - HF test */
#define	CAS_PCS_CONF_JS_LF	0x00000010	/* jitter study - LF test */
#define	CAS_PCS_CONF_JS_MASK	(CAS_PCS_CONF_JS_HF | CAS_PCS_CONF_JS_LF)
#define	CAS_PCS_CONF_ANEG_TO	0x00000020	/* auto-neg. timer override */

#define	CAS_PCS_SM_TX_CTRL_MASK	0x0000000f	/* TX control state */
#define	CAS_PCS_SM_TX_CTRL_SHFT	0
#define	CAS_PCS_SM_RX_CTRL_MASK	0x000000f0	/* RX control state */
#define	CAS_PCS_SM_RX_CTRL_SHFT	4
#define	CAS_PCS_SM_WSYNC_MASK	0x00000700	/* word sync. state */
#define	CAS_PCS_SM_WSYNC_SHFT	8
#define	CAS_PCS_SM_SEQ_MASK	0x00001800	/* sequence detection state */
#define	CAS_PCS_SM_SEQ_SHFT	11
#define	CAS_PCS_SM_LINK_UP	0x00016000
#define	CAS_PCS_SM_LINK_MASK	0x0001e000	/* link configuration state */
#define	CAS_PCS_SM_LINK_SHFT	13
#define	CAS_PCS_SM_LOSS_C	0x00100000	/* link-loss due to C codes */
#define	CAS_PCS_SM_LOSS_SYNC	0x00200000	/* link-loss due to sync-loss */
#define	CAS_PCS_SM_LOS		0x00400000	/* loss of signal */
#define	CAS_PCS_SM_NLINK_BREAK	0x01000000	/* no link due to breaklink */
#define	CAS_PCS_SM_NLINK_SERDES	0x02000000	/* no link due to SERDES */
#define	CAS_PCS_SM_NLINK_C	0x04000000	/* no link due to bad C codes */
#define	CAS_PCS_SM_NLINK_SYNC	0x08000000	/* no link due to word sync. */
#define	CAS_PCS_SM_NLINK_WAIT_C	0x10000000	/* no link, waiting for ack. */
#define	CAS_PCS_SM_NLINK_NIDLE	0x20000000	/* no link due to no idle */

/*
 * CAS_PCS_INTR_STATUS has no corresponding mask register.  It can only
 * be masked with CAS_INTR_PCS_INT.
 */
#define	CAS_PCS_INTR_LINK	0x00000004	/* link status change */

#define	CAS_PCS_DATAPATH_MII	0x00000001	/* GMII/MII and MAC loopback */
#define	CAS_PCS_DATAPATH_SERDES	0x00000002	/* SERDES via 10-bit */

#define	CAS_PCS_SERDES_CTRL_LBK	0x00000001	/* loopback at 10-bit enable */
#define	CAS_PCS_SERDES_CTRL_ESD	0x00000002	/* En. sync char. detection. */
#define	CAS_PCS_SERDES_CTRL_LR	0x00000004	/* Lock to reference clock. */

#define	CAS_PCS_SERDES_STATUS_T	0x00000000	/* Undergoing test. */
#define	CAS_PCS_SERDES_STATUS_L	0x00000001	/* Waiting 500us w/ lockrefn. */
#define	CAS_PCS_SERDES_STATUS_C	0x00000002	/* Waiting for comma detect. */
#define	CAS_PCS_SERDES_STATUS_S	0x00000003	/* Receive data is sync. */

#define	CAS_PCS_PKT_CNT_TX_MASK	0x000007ff	/* TX packets */
#define	CAS_PCS_PKT_CNT_TX_SHFT	0
#define	CAS_PCS_PKT_CNT_RX_MASK	0x07ff0000	/* RX packets */
#define	CAS_PCS_PKT_CNT_RX_SHFT	16

/*
 * PCI expansion ROM runtime access
 * Cassinis and Saturn map a 1MB space for the PCI expansion ROM as the
 * second half of the first register bank, although they only support up
 * to 64KB ROMs.
 */
#define	CAS_PCI_ROM_OFFSET	0x100000
#define	CAS_PCI_ROM_SIZE	0x10000

/* secondary local bus device */
#define	CAS_SEC_LBDEV_OFFSET	0x180000
#define	CAS_SEC_LBDE_SIZE	0x7ffff

/* wired PHY addresses */
#define	CAS_PHYAD_INTERNAL	1
#define	CAS_PHYAD_EXTERNAL	0

/* wired RX FIFO size in bytes */
#define	CAS_RX_FIFO_SIZE	16 * 1024

/*
 * descriptor ring structures
 */
struct cas_desc {
	uint64_t	cd_flags;
	uint64_t	cd_buf_ptr;
};

/*
 * transmit flags
 * CAS_TD_CKSUM_START_MASK, CAS_TD_CKSUM_STUFF_MASK, CAS_TD_CKSUM_EN and
 * CAS_TD_INT_ME only need to be set in 1st descriptor of a frame.
 */
#define	CAS_TD_BUF_LEN_MASK	0x0000000000003fffULL	/* buffer length */
#define	CAS_TD_BUF_LEN_SHFT	0
#define	CAS_TD_CKSUM_START_MASK	0x00000000001f8000ULL	/* checksum start... */
#define	CAS_TD_CKSUM_START_SHFT	15			/* ...offset */
#define	CAS_TD_CKSUM_STUFF_MASK	0x000000001fe00000ULL	/* checksum stuff... */
#define	CAS_TD_CKSUM_STUFF_SHFT	21			/* ...offset */
#define	CAS_TD_CKSUM_EN		0x0000000020000000ULL	/* checksum enable */
#define	CAS_TD_END_OF_FRAME	0x0000000040000000ULL	/* last desc. of pkt. */
#define	CAS_TD_START_OF_FRAME	0x0000000080000000ULL	/* 1st desc. of pkt. */
#define	CAS_TD_INT_ME		0x0000000100000000ULL	/* intr. when in FIFO */
#define	CAS_TD_NO_CRC		0x0000000200000000ULL	/* Don't insert CRC. */

/* receive flags */
#define	CAS_RD_BUF_INDEX_MASK	0x0000000000003fffULL	/* data buffer index */
#define	CAS_RD_BUF_INDEX_SHFT	0

/*
 * receive completion ring structure
 */
struct cas_rx_comp {
	uint64_t	crc_word1;
	uint64_t	crc_word2;
	uint64_t	crc_word3;
	uint64_t	crc_word4;
};

#define	CAS_RC1_DATA_SIZE_MASK	0x0000000007ffe000ULL	/* pkt. data length */
#define	CAS_RC1_DATA_SIZE_SHFT	13
#define	CAS_RC1_DATA_OFF_MASK	0x000001fff8000000ULL	/* data buffer offset */
#define	CAS_RC1_DATA_OFF_SHFT	27
#define	CAS_RC1_DATA_INDEX_MASK	0x007ffe0000000000ULL	/* data buffer index */
#define	CAS_RC1_DATA_INDEX_SHFT	41
#define	CAS_RC1_SKIP_MASK	0x0180000000000000ULL	/* entries to skip */
#define	CAS_RC1_SKIP_SHFT	55
#define	CAS_RC1_RELEASE_NEXT	0x0200000000000000ULL	/* last in reas. buf. */
#define	CAS_RC1_SPLIT_PKT	0x0400000000000000ULL	/* used 2 reas. buf. */
#define	CAS_RC1_RELEASE_FLOW	0x0800000000000000ULL	/* last pkt. of flow */
#define	CAS_RC1_RELEASE_DATA	0x1000000000000000ULL	/* reas. buf. full */
#define	CAS_RC1_RELEASE_HDR	0x2000000000000000ULL	/* header buf. full */
#define	CAS_RC1_TYPE_HW		0x0000000000000000ULL	/* owned by hardware */
#define	CAS_RC1_TYPE_RSFB	0x4000000000000000ULL	/* stale flow buf... */
#define	CAS_RC1_TYPE_RNRP	0x8000000000000000ULL	/* non-reas. pkt... */
#define	CAS_RC1_TYPE_RFP	0xc000000000000000ULL	/* flow packet... */
#define	CAS_RC1_TYPE_MASK	CAS_RC1_TYPE_RFP	/* ...release */
#define	CAS_RC1_TYPE_SHFT	62

#define	CAS_RC2_NEXT_INDEX_MASK	0x00000007ffe00000ULL	/* next buf. of pkt. */
#define	CAS_RC2_NEXT_INDEX_SHFT	21
#define	CAS_RC2_HDR_SIZE_MASK	0x00000ff800000000ULL	/* header length */
#define	CAS_RC2_HDR_SIZE_SHFT	35
#define	CAS_RC2_HDR_OFF_MASK	0x0003f00000000000ULL	/* header buf. offset */
#define	CAS_RC2_HDR_OFF_SHFT	44
#define	CAS_RC2_HDR_INDEX_MASK	0xfffc000000000000ULL	/* header buf. index */
#define	CAS_RC2_HDR_INDEX_SHFT	50

#define	CAS_RC3_SMALL_PKT	0x0000000000000001ULL	/* pkt. <= 256 - SOFF */
#define	CAS_RC3_JUMBO_PKT	0x0000000000000002ULL	/* pkt. > 1522 bytes */
#define	CAS_RC3_JMBHS_EN	0x0000000000000004ULL	/* jmb. hdr. spl. en. */
#define	CAS_RC3_CSO_MASK	0x000000000007f000ULL	/* checksum start... */
#define	CAS_RC3_CSO_SHFT	12			/* ...offset */
#define	CAS_RC3_FLOWID_MASK	0x0000000001f80000ULL	/* flow ID of pkt. */
#define	CAS_RC3_FLOWID_SHFT	19
#define	CAS_RC3_OP_MASK		0x000000000e000000ULL	/* opcode */
#define	CAS_RC3_OP_SHFT		25
#define	CAS_RC3_FRC_FLAG	0x0000000010000000ULL	/* op. 2 batch. lkhd. */
#define	CAS_RC3_NASSIST		0x0000000020000000ULL	/* no assist */
#define	CAS_RC3_LB_MASK		0x000001f800000000ULL	/* load balancing key */
#define	CAS_RC3_LB_SHFT		35
#define	CAS_RC3_L3HO_MASK	0x0000fe0000000000ULL	/* layer 3 hdr. off. */
#define	CAS_RC3_L3HO_SHFT	41
#define	CAS_RC3_PLUS_ENC_PKT	0x0000020000000000ULL	/* IPsec AH/ESP pkt. */
#define	CAS_RC3_PLUS_L3HO_MASK	0x0000fc0000000000ULL	/* layer 3 hdr. off. */
#define	CAS_RC3_PLUS_L3HO_SHFT	42
#define	CAS_RC3_SAP_MASK	0xffff000000000000ULL	/* ethertype */
#define	CAS_RC3_SAP_SHFT	48

#define	CAS_RC4_TCP_CSUM_MASK	0x000000000000ffffULL	/* TCP checksum */
#define	CAS_RC4_TCP_CSUM_SHFT	0
#define	CAS_RC4_PKT_LEN_MASK	0x000000003fff0000ULL	/* entire pkt. length */
#define	CAS_RC4_PKT_LEN_SHFT	16
#define	CAS_RC4_PAM_MASK	0x00000003c0000000ULL	/* mcast. addr. match */
#define	CAS_RC4_PAM_SHFT	30
#define	CAS_RC4_ZERO		0x0000080000000000ULL	/* owned by software */
#define	CAS_RC4_HASH_VAL_MASK	0x0ffff00000000000ULL	/* mcast. addr. hash */
#define	CAS_RC4_HASH_VAL_SHFT	44
#define	CAS_RC4_HASH_PASS	0x1000000000000000ULL	/* passed hash filter */
#define	CAS_RC4_BAD		0x4000000000000000ULL	/* CRC error */
#define	CAS_RC4_LEN_MMATCH	0x8000000000000000ULL	/* length field mism. */

#define	CAS_GET(reg, bits)	(((reg) & (bits ## _MASK)) >> (bits ## _SHFT))
#define	CAS_SET(val, bits)	(((val) << (bits ## _SHFT)) & (bits ## _MASK))

#endif