Training courses

Kernel and Embedded Linux

Bootlin training courses

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

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
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
/*	$NetBSD: etsecreg.h,v 1.10 2022/05/11 14:58:00 andvar Exp $	*/
/*-
 * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Raytheon BBN Technologies Corp and Defense Advanced Research Projects
 * Agency and which was developed by Matt Thomas of 3am Software Foundry.
 *
 * This material is based upon work supported by the Defense Advanced Research
 * Projects Agency and Space and Naval Warfare Systems Center, Pacific, under
 * Contract No. N66001-09-C-2073.
 * Approved for Public Release, Distribution Unlimited
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _POWERPC_BOOKE_ETSEC_REG_H_
#define _POWERPC_BOOKE_ETSEC_REG_H_

#define	TXBD_R		0x8000		/* Ready (HW Owned) */
#define	TXBD_PADCRC	0x4000		/* B: Pad+CRC */
#define	TXBD_W		0x2000		/* B: Wrap (End of Ring) */
#define	TXBD_I		0x1000		/* B: Interrupt (IEVENT[TXB|TXF]) */
#define	TXBD_L		0x0800		/* B: Last */
#define	TXBD_TC		0x0400		/* B: Tx CRC. (Add CRC) */
#define	TXBD_PRE	0x0200		/* B: custom preamble */
#define	TXBD_DEF	TXBD_PRE	/* A: transmit deferred */
#define	TXBD_HFE	0x0080		/* B: Huge Frame Enable */
#define	TXBD_LC		TXBD_HFE	/* A: Late Coll */
#define	TXBD_CF		0x0040		/* B: Control Frame */
#define	TXBD_RL		TXBD_CF		/* A: Tx Limit */
#define	TXBD_RC		0x003c		/* A: Retry Count */
#define	TXBD_TOE	0x0002		/* B: TOE frame */
#define	TXBD_UN		TXBD_TOE	/* A: Underrun */
#define	TXBD_TR		0x0001		/* A: Truncation */
#define	TXBD_ERRORS	(TXBD_LC|TXBD_RL|TXBD_UN|TXBD_TR)

struct txbd {
	uint16_t txbd_flags;
	uint16_t txbd_len;
	uint32_t txbd_bufptr;
};

#define	TXFCB_VLN	0x8000	/* VLaN control word valid */
#define	TXFCB_IP	0x4000	/* Layer 3 header is an IP header */
#define	TXFCB_IP6	0x2000	/* IP Header is IPv6 */
#define	TXFCB_TUP	0x1000	/* Layer 4 is TCP or UDP */
#define	TXFCB_UDP	0x0800	/* UDP at layer 4 */
#define	TXFCB_CIP	0x0400	/* Checksum IP header enable */
#define	TXFCB_CTU	0x0200	/* Checksum TCP or UCP header enable */
#define	TXFCB_NPH	0x0100	/* No std Pseudo-Header checksum, use phcs */

struct txfcb {
	uint16_t txfcb_flags;
	uint8_t txfcb_l4os;	/* layer 4 hdr from start of layer 3 header */
	uint8_t txfcb_l3os;	/* layer 3 hdr from start of layer 2 header */
	uint16_t txfcb_phcs;	/* pseudo-header checksum for NPH */
	uint16_t txfcb_vlctl;	/* vlan control word for insertion for VLN */
};

#define	RXBD_E		0x8000		/* Empty (1 = Owned by ETSEC) */
#define	RXBD_RO1	0x4000		/* S/W Ownership */
#define	RXBD_W		0x2000		/* Wrap ring. */
#define	RXBD_I		0x1000		/* Interrupt IEVENT[RXB|RXF] */
#define	RXBD_L		0x0800		/* Last in frame */
#define	RXBD_F		0x0400		/* First in frame */
#define	RXBD_M		0x0100		/* Miss (promiscuous match) */
#define	RXBD_BC		0x0080		/* BroadCast match */
#define	RXBD_MC		0x0040		/* MultiCast match */
#define	RXBD_LG		0x0020		/* rx LarGe frame error */
#define	RXBD_NO		0x0010		/* Non-octet aligned frame error */
#define	RXBD_SH		0x0008		/* SHort frame */
#define	RXBD_CR		0x0004		/* rx CRc error */
#define	RXBD_OV		0x0002		/* OVerrun error */
#define	RXBD_TR		0x0001		/* TRuncation error */
#define	RXBD_ERRORS	0x003f

struct rxbd {
	uint16_t rxbd_flags;
	uint16_t rxbd_len;
	uint32_t rxbd_bufptr;
};

#define	RXFCB_VLN	0x8000	/* VLaN tag recognized */
#define	RXFCB_IP	0x4000	/* IP header found at layer 3 */
#define	RXFCB_IP6	0x2000	/* IPv6 header found */
#define	RXFCB_TUP	0x1000	/* TCP or UDP header found */
#define	RXFCB_CIP	0x0800	/* IPv4 checksum performed */
#define	RXFCB_CTU	0x0400	/* TCP or UDP checksum checked */
#define	RXFCB_EIP	0x0200	/* IPv4 header checksum error */
#define	RXFCB_ETU	0x0100	/* TCP or UDP header checksum error */
#define	RXFCB_HASH_VAL	0x0010	/* FLR_HASH value is valid */
#define	RXFCB_PERR	0x000c	/* Parse Error */
#define	RXFCB_PERR_L3	0x0008	/* L3 Parse Error */

struct rxfcb {
	uint16_t rxfcb_flags;
	uint8_t rxfcb_rq;		/* receive queue index */
	uint8_t rxfcb_pro;		/* IP Protocol received */
	uint16_t rxfcb_flr_hash;	/* filer hash value */
	uint16_t rxfcb_vlctl;		/* VLAN control field */
};

/* 0x000-0x0ff eTSEC general control/status registers */
#define	TSEC_ID		0x000	/* Controller ID register */
#define	TSEC_ID2	0x004	/* Controller ID register */
#define	IEVENT		0x010	/* Interrupt event register */
#define	IEVENT_BABR	__PPCBIT(0)	/* babbling receive error */
#define	IEVENT_RXC	__PPCBIT(1)	/* receive control interrupt */
#define	IEVENT_BSY	__PPCBIT(2)	/* busy condition interrupt */
#define	IEVENT_EBERR	__PPCBIT(3)	/* internal bus error */
#define	IEVENT_MSR0	__PPCBIT(5)	/* MIB counter overflow */
#define	IEVENT_GTSC	__PPCBIT(6)	/* graceful transmit stop complete */
#define	IEVENT_BABT	__PPCBIT(7)	/* babbing transmit error */
#define	IEVENT_TXC	__PPCBIT(8)	/* transmit control interrupt */
#define	IEVENT_TXE	__PPCBIT(9)	/* transmit error */
#define	IEVENT_TXB	__PPCBIT(10)	/* transmit buffer */
#define	IEVENT_TXF	__PPCBIT(11)	/* transmit frame interrupt */
#define	IEVENT_LC	__PPCBIT(13)	/* late collision */
#define	IEVENT_CRL	__PPCBIT(14)	/* collision retry limit */
#define	IEVENT_XFUN	__PPCBIT(15)	/* transmit fifo underrun */
#define	IEVENT_RXB	__PPCBIT(16)	/* receive buffer */
#define	IEVENT_TWK	__PPCBIT(19)	/* timer wakeup */
#define	IEVENT_MAG	__PPCBIT(20)	/* magic packet detected */
#define	IEVENT_MMRD	__PPCBIT(21)	/* MMI management read complete */
#define	IEVENT_MMWR	__PPCBIT(22)	/* MMI management write complete */
#define	IEVENT_GRSC	__PPCBIT(23)	/* graceful receive stop complete */
#define	IEVENT_RXF	__PPCBIT(24)	/* receive frame interrupt */
#define	IEVENT_FGPI	__PPCBIT(27)	/* filer generated general purpose interrupt */
#define	IEVENT_FIR	__PPCBIT(28)	/* receive queue filer is invalid */
#define	IEVENT_FIQ	__PPCBIT(29)	/* filed frame to invalid receive queue */
#define	IEVENT_DPE	__PPCBIT(30)	/* internal data parity error */
#define	IEVENT_PERR	__PPCBIT(31)	/* Receive parse error for TOE */
#define	IMASK		0x014	/* Interrupt mask register */
#define	EDIS		0x018	/* error disabled register */
#define	EMAPG		0x01c	/* group error mapping register */
#define	ECNTRL		0x020	/* ethernet control register */
#define	ECNTRL_FIFM	__PPCBIT(16)	/* FIFO mode enable */
#define	ECNTRL_CLRCNT	__PPCBIT(17)	/* Clear all MIB counters */
#define	ECNTRL_AUTOZ	__PPCBIT(18)	/* Auto zero MIB counter on read */
#define	ECNTRL_STEN	__PPCBIT(19)	/* MIB Statistics Enabled */
#define	ECNTRL_GMIIM	__PPCBIT(25)	/* GMII Interface Mode */
#define	ECNTRL_TBIM	__PPCBIT(26)	/* Ten-Bit Interface Mode */
#define	ECNTRL_RPM	__PPCBIT(27)	/* Reduced Pin Mode */
#define	ECNTRL_R100M	__PPCBIT(28)	/* RGMII/RMII 100 Mode */
#define	ECNTRL_RMM	__PPCBIT(29)	/* Reduced Pin Mode for 10/100 */
#define	ECNTRL_SGMIIM	__PPCBIT(30)	/* SGMII Interface Mode */
#define ECNTRL_DEFAULT	ECNTRL_STEN

#define	PTV		0x028	/* Pause time value register */
#define	DMACTRL		0x02c	/* DMA control register */
#define	DMACTRL_LE	__PPCBIT(16)	/* Little Endian Descriptor Mode */
#define	DMACTRL_TDSEN	__PPCBIT(24)	/* TX Data Snoop enable */
#define	DMACTRL_TBDSEN	__PPCBIT(25)	/* TxBD Data Snoop enable */
#define	DMACTRL_GRS	__PPCBIT(27)	/* graceful receive stop */
#define	DMACTRL_GTS	__PPCBIT(28)	/* graceful transmit stop */
#define	DMACTRL_TOD	__PPCBIT(29)	/* Transmi On Demand for TxBD ring 0 */
#define	DMACTRL_WWR	__PPCBIT(30)	/* Write With Response */
#define	DMACTRL_WOP	__PPCBIT(31)	/* Wait or pool for TxBD ring 0 */
#define	DMACTRL_DEFAULT	(DMACTRL_WOP|DMACTRL_WWR|DMACTRL_TDSEN|DMACTRL_TBDSEN)

#define	TBIPA		0x030	/* TBI phy address register */

/* 0x100-0x2ff eTSEC transmit control/status registers */

#define TCTRL		0x100 /* Transmit control register */
#define TCTRL_IPCSEN	__PPCBIT(17) /* IP header checksum generation enable */
#define TCTRL_TUCSEN	__PPCBIT(18) /* TCP/UDP header checksum generation enable */
#define TCTRL_VLINS	__PPCBIT(19) /* VLAN tag insertion */
#define TCTRL_THDF	__PPCBIT(29) /* Transmit half duplex */
#define TCTRL_RFC_PAUSE	__PPCBIT(27) /* receive flow control pause frame */
#define TCTRL_TFC_PAUSE	__PPCBIT(28) /* transmit flow control pause frame */
#define TCTRL_TXSCHED	__PPCBITS(29,30) /* transmit ring scheduling algorithm */
#define TCTRL_TXSCHED_SINGLE	__SHIFTIN(0,TCTRL_TXSCHED)
#define TCTRL_TXSCHED_PRIO	__SHIFTIN(1,TCTRL_TXSCHED)
#define TCTRL_TXSCHED_MWRR	__SHIFTIN(2,TCTRL_TXSCHED)

#define TSTAT		0x104 /* Transmit status register */
#define	TSTAT_THLT0	__PPCBIT(0) /* transmit halt of ring 0 */
#define	TSTAT_THLT1	__PPCBIT(1)
#define	TSTAT_THLT2	__PPCBIT(2)
#define	TSTAT_THLT3	__PPCBIT(3)
#define	TSTAT_THLT4	__PPCBIT(4)
#define	TSTAT_THLT5	__PPCBIT(5)
#define	TSTAT_THLT6	__PPCBIT(6)
#define	TSTAT_THLT7	__PPCBIT(7)
#define	TSTAT_THLTn(n)	(TSTAT_THLT0 >> (n))
#define	TSTAT_THLT	__PPCBITS(0,7)
#define	TSTAT_TXF0	__PPCBIT(16) /* transmit frame event occurred on ring 0 */
#define	TSTAT_TXF1	__PPCBIT(17)
#define	TSTAT_TXF2	__PPCBIT(18)
#define	TSTAT_TXF3	__PPCBIT(19)
#define	TSTAT_TXF4	__PPCBIT(20)
#define	TSTAT_TXF5	__PPCBIT(21)
#define	TSTAT_TXF6	__PPCBIT(22)
#define	TSTAT_TXF7	__PPCBIT(23)
#define	TSTAT_TXF	__PPCBITS(16,23)
#define	TSTAT_TXFn(n)	(TSTAT_TXF0 >> (n))
#define DFVLAN		0x108 /* Default VLAN control word [TSEC3] */
#define TXIC		0x110 /* Transmit interrupt coalescing register */
#define	TXIC_ICEN	__PPCBIT(0) /* Interrupt coalescing enable */
#define	TXIC_ICCS	__PPCBIT(1) /* Interrupt coalescing timer clock source */
#define	TXIC_ICCS_ETSEC		0         /* eTSEC Tx interface clocks */
#define	TXIC_ICCS_SYSTEM	TXIC_ICCS /* system clocks */
#define	TXIC_ICFT	__PPCBITS(3,10)
#define	TXIC_ICFT_SET(n)	__SHIFTIN((n),TXIC_ICFT)
#define	TXIC_ICTT	__PPCBITS(16,31)
#define	TXIC_ICTT_SET(n)	__SHIFTIN((n),TXIC_ICTT)
#define TQUEUE		0x114 /* Transmit queue control register [TSEC3] */
#define	TQUEUE_EN0	__PPCBIT(16) /* transmit ring enabled */
#define	TQUEUE_EN1	__PPCBIT(17)
#define	TQUEUE_EN2	__PPCBIT(18)
#define	TQUEUE_EN3	__PPCBIT(19)
#define	TQUEUE_EN4	__PPCBIT(20)
#define	TQUEUE_EN5	__PPCBIT(21)
#define	TQUEUE_EN6	__PPCBIT(22)
#define	TQUEUE_EN7	__PPCBIT(23)
#define	TQUEUE_EN	__PPCBITS(16,23)
#define	TQUEUE_ENn(n)	(TQUEUE_EN0 >> (n))
#define TR03WT		0x140 /* TxBD Rings 0-3 round-robin weightings [TSEC3] */
#define TR47WT		0x144 /* TxBD Rings 4-7 round-robin weightings [TSEC3] */
#define TBDBPH		0x180 /* Tx data buffer pointer high bits [TSEC3] */
#define TBPTR0		0x184 /* TxBD pointer for ring 0 */
#define TBPTR1		0x18C /* TxBD pointer for ring 1 [TSEC3] */
#define TBPTR2		0x194 /* TxBD pointer for ring 2 [TSEC3] */
#define TBPTR3		0x19C /* TxBD pointer for ring 3 [TSEC3] */
#define TBPTR4		0x1A4 /* TxBD pointer for ring 4 [TSEC3] */
#define TBPTR5		0x1AC /* TxBD pointer for ring 5 [TSEC3] */
#define TBPTR6		0x1B4 /* TxBD pointer for ring 6 [TSEC3] */
#define TBPTR7		0x1BC /* TxBD pointer for ring 7 [TSEC3] */
#define	TBPTRn(n)	(TBPTR0 + 8*(n))
#define TBASEH		0x200 /* TxBD base address high bits [TSEC3] */
#define TBASE0		0x204 /* TxBD base address of ring 0 */
#define TBASE1		0x20C /* TxBD base address of ring 1 [TSEC3] */
#define TBASE2		0x214 /* TxBD base address of ring 2 [TSEC3] */
#define TBASE3		0x21C /* TxBD base address of ring 3 [TSEC3] */
#define TBASE4		0x224 /* TxBD base address of ring 4 [TSEC3] */
#define TBASE5		0x22C /* TxBD base address of ring 5 [TSEC3] */
#define TBASE6		0x234 /* TxBD base address of ring 6 [TSEC3] */
#define TBASE7		0x23C /* TxBD base address of ring 7 [TSEC3] */
#define	TBASEn(n)	(TBASE0 + 8*(n))
#define TMR_TXTS1_ID	0x280 /* Tx time stamp identification tag (set 1) [TSEC3] */
#define TMR_TXTS2_ID	0x284 /* Tx time stamp identification tag (set 2) [TSEC3] */
#define TMR_TXTS1_H	0x2C0 /* Tx time stamp high (set 1) [TSEC3] */
#define TMR_TXTS1_L	0x2C4 /* Tx time stamp high (set 1) [TSEC3] */
#define TMR_TXTS2_H	0x2C8 /* Tx time stamp high (set 2) [TSEC3] */
#define TMR_TXTS2_L	0x2CC /* Tx time stamp high (set 2) [TSEC3] */

/* 0x300-0x4ff eTSEC receive control/status registers */

#define RCTRL		0x300 /* Receive control register */
#define	RCTRL_L2OFF	__PPCBITS(0,6)
#define	RCTRL_L2OFF_SET(n)	__SHIFTIN((n),RCTRL_L2OFF)
#define	RCTRL_TS	__PPCBIT(7)
#define	RCTRL_RR	__PPCBIT(10)
#define	RCTRL_PAL	__PPCBITS(11,15)
#define	RCTRL_VLEX	__PPCBIT(18)
#define	RCTRL_FILREN	__PPCBIT(19)
#define	RCTRL_FSQEN	__PPCBIT(20)
#define	RCTRL_GHTX	__PPCBIT(21)
#define	RCTRL_IPCSEN	__PPCBIT(22)
#define	RCTRL_TUCSEN	__PPCBIT(23)
#define	RCTRL_PRSDEP	__PPCBITS(24,25)
#define	RCTRL_PRSDEP_L4		__SHIFTIN(3,RCTRL_PRSDEP)
#define	RCTRL_PRSDEP_L3		__SHIFTIN(2,RCTRL_PRSDEP)
#define	RCTRL_PRSDEP_L2		__SHIFTIN(1,RCTRL_PRSDEP)
#define	RCTRL_PRSDEP_OFF	__SHIFTIN(0,RCTRL_PRSDEP)
#define	RCTRL_BC_REJ	__PPCBIT(27)
#define	RCTRL_PROM	__PPCBIT(28)
#define	RCTRL_RSF	__PPCBIT(29)
#define	RCTRL_EMEN	__PPCBIT(30)
#define	RCTRL_DEFAULT	(__SHIFTIN(2, RCTRL_PAL)|RCTRL_EMEN)
#define RSTAT		0x304 /* Receive status register */
#define	RSTAT_QHLT0	__PPCBIT(8) /* receive halt of ring 0 */
#define	RSTAT_QHLT1	__PPCBIT(9)
#define	RSTAT_QHLT2	__PPCBIT(10)
#define	RSTAT_QHLT3	__PPCBIT(11)
#define	RSTAT_QHLT4	__PPCBIT(12)
#define	RSTAT_QHLT5	__PPCBIT(13)
#define	RSTAT_QHLT6	__PPCBIT(14)
#define	RSTAT_QHLT7	__PPCBIT(15)
#define	RSTAT_QHLTn(n)	(RSTAT_QHLT0 >> (n))
#define	RSTAT_QHLT	__PPCBITS(8,15)
#define	RSTAT_RXF0	__PPCBIT(24) /* receive frame event occurred on ring 0 */
#define	RSTAT_RXF1	__PPCBIT(25)
#define	RSTAT_RXF2	__PPCBIT(26)
#define	RSTAT_RXF3	__PPCBIT(27)
#define	RSTAT_RXF4	__PPCBIT(28)
#define	RSTAT_RXF5	__PPCBIT(29)
#define	RSTAT_RXF6	__PPCBIT(30)
#define	RSTAT_RXF7	__PPCBIT(31)
#define	RSTAT_RXF	__PPCBITS(24,31)
#define	RSTAT_RXFn(n)	(RSTAT_RXF0 >> (n))
#define RXIC		0x310 /* Receive interrupt coalescing register */
#define	RXIC_ICEN	__PPCBIT(0) /* Interrupt coalescing enable */
#define	RXIC_ICCS	__PPCBIT(1) /* Interrupt coalescing timer clock source */
#define	RXIC_ICCS_ETSEC		0         /* eTSEC Rx interface clocks */
#define	RXIC_ICCS_SYSTEM	TXIC_ICCS /* system clocks */
#define	RXIC_ICFT	__PPCBITS(3,10)
#define	RXIC_ICFT_SET(n)	__SHIFTIN((n),TXIC_ICFT)
#define	RXIC_ICTT	__PPCBITS(16,31)
#define	RXIC_ICTT_SET(n)	__SHIFTIN((n),TXIC_ICTT)
#define RQUEUE		0x314 /* Receive queue control register. [TSEC3] */
#define	RQUEUE_EX0	__PPCBIT(8) /* data transferred by DMA to ring extracted according to ATTR register */
#define	RQUEUE_EX1	__PPCBIT(9)
#define	RQUEUE_EX2	__PPCBIT(10)
#define	RQUEUE_EX3	__PPCBIT(11)
#define	RQUEUE_EX4	__PPCBIT(12)
#define	RQUEUE_EX5	__PPCBIT(13)
#define	RQUEUE_EX6	__PPCBIT(14)
#define	RQUEUE_EX7	__PPCBIT(15)
#define	RQUEUE_EXn(n)	(RQUEUE_EX0 >> (n))
#define	RQUEUE_EX	__PPCBITS(8,15)
#define	RQUEUE_EN0	__PPCBIT(24) /* ring is queried for reception */
#define	RQUEUE_EN1	__PPCBIT(25)
#define	RQUEUE_EN2	__PPCBIT(26)
#define	RQUEUE_EN3	__PPCBIT(27)
#define	RQUEUE_EN4	__PPCBIT(28)
#define	RQUEUE_EN5	__PPCBIT(29)
#define	RQUEUE_EN6	__PPCBIT(30)
#define	RQUEUE_EN7	__PPCBIT(31)
#define	RQUEUE_EN	__PPCBITS(24,31)
#define	RQUEUE_ENn(n)	(RQUEUE_EN0 >> (n))
#define	RIR0		0x318	/* Ring mapping register 0 */
#define	RIR1		0x31c	/* Ring mapping register 1 */
#define	RIR2		0x320	/* Ring mapping register 2 */
#define	RIR3		0x324	/* Ring mapping register 3 */
#define	RIRn(n)		(RIR0 + 4*(n))
#define RBIFX		0x330 /* Receive bit field extract control register [TSEC3] */
#define RQFAR		0x334 /* Receive queue filing table address register [TSEC3] */
#define RQFCR		0x338 /* Receive queue filing table control register [TSEC3] */
#define RQFCR_GPI	__PPCBIT(0) /* General purpose interrupt */
#define RQFCR_HASHTBL	__PPCBITS(12,14) /* Select between filer Q value and RIR fileds. */
#define RQFCR_HASHTBL_Q	__SHIFTIN(0,RQFCR_HASHTBL)
#define RQFCR_HASHTBL_0	__SHIFTIN(1,RQFCR_HASHTBL)
#define RQFCR_HASHTBL_1	__SHIFTIN(2,RQFCR_HASHTBL)
#define RQFCR_HASHTBL_2	__SHIFTIN(3,RQFCR_HASHTBL)
#define RQFCR_HASHTBL_3	__SHIFTIN(4,RQFCR_HASHTBL)
#define RQFCR_HASH	__PPCBIT(15) /* Include parser results in hash */
#define RQFCR_QUEUE	__PPCBITS(16,21) /* Receive queue index */
#define RQFCR_QUEUE_SET(n)	__SHIFTIN((n),RQFCR_QUEUE)
#define RQFCR_CLE	__PPCBIT(22) /* Cluster entry/exit */
#define RQFCR_REJ	__PPCBIT(23) /* Reject frame */
#define RQFCR_AND	__PPCBIT(24) /* AND, in combination with CLE, REJ, and PID match */
#define RQFCR_CMP	__PPCBITS(25,26) /* Comparison operation to perform on the RQPROP entry at this index when PID > 0 */
#define RQFCR_CMP_EXACT	__SHIFTIN(0,RQFCR_CMP)
#define RQFCR_CMP_MATCH	__SHIFTIN(1,RQFCR_CMP)
#define RQFCR_CMP_NOEXACT	__SHIFTIN(2,RQFCR_CMP)
#define RQFCR_CMP_NOMATCH	__SHIFTIN(3,RQFCR_CMP)
#define RQFCR_PID	__PPCBITS(28,31)
#define RQFCR_PID_MASK	0
#define RQFCR_PID_PARSE	1
#define RQFCR_PID_ARB	2
#define RQFCR_PID_DAH	3
#define RQFCR_PID_DAL	4
#define RQFCR_PID_SAH	5
#define RQFCR_PID_SAL	6
#define RQFCR_PID_ETY	7
#define RQFCR_PID_VID	8
#define RQFCR_PID_PRI	9
#define RQFCR_PID_TOS	10
#define RQFCR_PID_L4P	11
#define RQFCR_PID_DIA	12
#define RQFCR_PID_SIA	13
#define RQFCR_PID_DPT	14
#define RQFCR_PID_SPT	15
#define RQFPR		0x33C /* Receive queue filing table property register [TSEC3] */
#define RQFPR_PID1_AR	__PPCBIT(14) /* ARP response */
#define RQFPR_PID1_ARQ	__PPCBIT(15) /* ARP request */
#define RQFPR_PID1_EBC	__PPCBIT(16) /* destination Ethernet address is to the broadcast address */
#define RQFPR_PID1_VLN	__PPCBIT(17) /* VLAN tag */
#define RQFPR_PID1_CFI	__PPCBIT(18) /* Canonical Format Indicator */
#define RQFPR_PID1_JUM	__PPCBIT(19) /* Jumbo Ethernet frame */
#define RQFPR_PID1_IPF	__PPCBIT(20) /* fragmented IPv4 or IPv6 header */
#define RQFPR_PID1_IP4	__PPCBIT(22) /* IPv4 header */
#define RQFPR_PID1_IP6	__PPCBIT(23) /* IPv6 header */
#define RQFPR_PID1_ICC	__PPCBIT(24) /* IPv4 header checksum */
#define RQFPR_PID1_ICV	__PPCBIT(25) /* IPv4 header checksum was verified correct */
#define RQFPR_PID1_TCP	__PPCBIT(26) /* TCP header */
#define RQFPR_PID1_UDP	__PPCBIT(27) /* UDP header */
#define RQFPR_PID1_PER	__PPCBIT(30) /* parse error */
#define RQFPR_PID1_EER	__PPCBIT(31) /* Ethernet framing error */
#define MRBLR		0x340 /* Maximum receive buffer length register */
#define RBDBPH		0x380 /* Rx data buffer pointer high bits [TSEC3] */
#define RBPTR0		0x384 /* RxBD pointer for ring 0 */
#define RBPTR1		0x38C /* RxBD pointer for ring 1 [TSEC3] */
#define RBPTR2		0x394 /* RxBD pointer for ring 2 [TSEC3] */
#define RBPTR3		0x39C /* RxBD pointer for ring 3 [TSEC3] */
#define RBPTR4		0x3A4 /* RxBD pointer for ring 4 [TSEC3] */
#define RBPTR5		0x3AC /* RxBD pointer for ring 5 [TSEC3] */
#define RBPTR6		0x3B4 /* RxBD pointer for ring 6 [TSEC3] */
#define RBPTR7		0x3BC /* RxBD pointer for ring 7 [TSEC3] */
#define RBPTRn(n)	(RBPTR0 + 8*(n))
#define RBASEH		0x400 /* RxBD base address high bits [TSEC3] */
#define RBASE0		0x404 /* RxBD base address of ring 0 */
#define RBASE1		0x40C /* RxBD base address of ring 1 [TSEC3] */
#define RBASE2		0x414 /* RxBD base address of ring 2 [TSEC3] */
#define RBASE3		0x41C /* RxBD base address of ring 3 [TSEC3] */
#define RBASE4		0x424 /* RxBD base address of ring 4 [TSEC3] */
#define RBASE5		0x42C /* RxBD base address of ring 5 [TSEC3] */
#define RBASE6		0x434 /* RxBD base address of ring 6 [TSEC3] */
#define RBASE7		0x43C /* RxBD base address of ring 7 [TSEC3] */
#define RBASEn(n)	(RBASE0 + 8*(n))
#define TMR_RXTS_H	0x4C0 /* Rx timer time stamp register high [TSEC3] */
#define TMR_RXTS_L	0x4C4 /* Rx timer time stamp register low [TSEC3] */

/*	0x500-0x5ff MAC registers */

#define MACCFG1		0x500 /* MAC configuration register 1 */
#define	MACCFG1_SOFT_RESET	__PPCBIT(0)
#define	MACCFG1_RESET_RX_MAC	__PPCBIT(12)
#define	MACCFG1_RESET_TX_MAC	__PPCBIT(13)
#define	MACCFG1_RESET_RX_FUNC	__PPCBIT(14)
#define	MACCFG1_RESET_TX_FUNC	__PPCBIT(15)
#define	MACCFG1_LOOPBACK	__PPCBIT(23)
#define	MACCFG1_RX_FLOW		__PPCBIT(26)
#define	MACCFG1_TX_FLOW		__PPCBIT(27)
#define	MACCFG1_SYNC_RX_EN	__PPCBIT(28)
#define	MACCFG1_RX_EN		__PPCBIT(29)
#define	MACCFG1_SYNC_TX_EN	__PPCBIT(30)
#define	MACCFG1_TX_EN		__PPCBIT(31)
#define MACCFG2		0x504 /* MAC configuration register 2 */
#define	MACCFG2_PRELEN	__PPCBITS(16,19)
#define	MACCFG2_PRELEN_DEFAULT	__SHIFTIN(7,MACCFG2_PRELEN)
#define	MACCFG2_IFMODE	__PPCBITS(22,23)
#define	MACCFG2_IFMODE_MII	__SHIFTIN(1,MACCFG2_IFMODE)
#define	MACCFG2_IFMODE_GMII	__SHIFTIN(2,MACCFG2_IFMODE)
#define	MACCFG2_PRERXEN	__PPCBIT(24)
#define	MACCFG2_PRETXEN	__PPCBIT(25)
#define	MACCFG2_HG	__PPCBIT(26)
#define	MACCFG2_LENCHK	__PPCBIT(27)
#define	MACCFG2_MPEN	__PPCBIT(28)
#define	MACCFG2_PADCRC	__PPCBIT(29)
#define	MACCFG2_CRCEN	__PPCBIT(30)
#define	MACCFG2_FD	__PPCBIT(31)
#define	MACCFG2_DEFAULT	(MACCFG2_FD|MACCFG2_PADCRC|MACCFG2_PRELEN_DEFAULT)
#define IPGIFG		0x508 /* Inter-packet/inter-frame gap register */
#define HAFDUP		0x50C /* Half-duplex control */
#define MAXFRM		0x510 /* Maximum frame length */
#define MIIMCFG		0x520 /* MII management configuration */
#define	MIIMCFG_RESET	__PPCBIT(0) /* Reset management */
#define	MIIMCFG_NOPRE	__PPCBIT(27) /* Preamble suppress */
#define MIIMCOM		0x524 /* MII management command */
#define	MIIMCOM_SCAN	__PPCBIT(30)
#define	MIIMCOM_READ	__PPCBIT(31)
#define MIIMADD		0x528 /* MII management address */
#define	MIIMADD_PHY	__PPCBITS(19,23)
#define	MIIMADD_REG	__PPCBITS(27,31)
#define MIIMCON		0x52C /* MII management control */
#define MIIMSTAT	0x530 /* MII management status */
#define MIIMIND		0x534 /* MII management indicator */
#define MIIMIND_NOTVALID __PPCBIT(29)
#define MIIMIND_SCAN	__PPCBIT(30)
#define MIIMIND_BUSY	__PPCBIT(31)
#define IFSTAT		0x53C /* Interface status */
#define MACSTNADDR1	0x540 /* MAC station address register 1 */
#define MACSTNADDR2	0x544 /* MAC station address register 2 */
#define MAC01ADDR1	0x548 /* MAC exact match address 1, part 1 [TSEC3] */
#define MAC01ADDR2	0x54C /* MAC exact match address 1, part 2 [TSEC3] */
#define MAC02ADDR1	0x550 /* MAC exact match address 2, part 1 [TSEC3] */
#define MAC02ADDR2	0x554 /* MAC exact match address 2, part 2 [TSEC3] */
#define MAC03ADDR1	0x558 /* MAC exact match address 3, part 1 [TSEC3] */
#define MAC03ADDR2	0x55C /* MAC exact match address 3, part 2 [TSEC3] */
#define MAC04ADDR1	0x560 /* MAC exact match address 4, part 1 [TSEC3] */
#define MAC04ADDR2	0x564 /* MAC exact match address 4, part 2 [TSEC3] */
#define MAC05ADDR1	0x568 /* MAC exact match address 5, part 1 [TSEC3] */
#define MAC05ADDR2	0x56C /* MAC exact match address 5, part 2 [TSEC3] */
#define MAC06ADDR1	0x570 /* MAC exact match address 6, part 1 [TSEC3] */
#define MAC06ADDR2	0x574 /* MAC exact match address 6, part 2 [TSEC3] */
#define MAC07ADDR1	0x578 /* MAC exact match address 7, part 1 [TSEC3] */
#define MAC07ADDR2	0x57C /* MAC exact match address 7, part 2 [TSEC3] */
#define MAC08ADDR1	0x580 /* MAC exact match address 8, part 1 [TSEC3] */
#define MAC08ADDR2	0x584 /* MAC exact match address 8, part 2 [TSEC3] */
#define MAC09ADDR1	0x588 /* MAC exact match address 9, part 1 [TSEC3] */
#define MAC09ADDR2	0x58C /* MAC exact match address 9, part 2 [TSEC3] */
#define MAC10ADDR1	0x590 /* MAC exact match address 10, part 1 [TSEC3] */
#define MAC10ADDR2	0x594 /* MAC exact match address 10, part 2 [TSEC3] */
#define MAC11ADDR1	0x598 /* MAC exact match address 11, part 1 [TSEC3] */
#define MAC11ADDR2	0x59C /* MAC exact match address 11, part 2 [TSEC3] */
#define MAC12ADDR1	0x5A0 /* MAC exact match address 12, part 1 [TSEC3] */
#define MAC12ADDR2	0x5A4 /* MAC exact match address 12, part 2 [TSEC3] */
#define MAC13ADDR1	0x5A8 /* MAC exact match address 13, part 1 [TSEC3] */
#define MAC13ADDR2	0x5AC /* MAC exact match address 13, part 2 [TSEC3] */
#define MAC14ADDR1	0x5B0 /* MAC exact match address 14, part 1 [TSEC3] */
#define MAC14ADDR2	0x5B4 /* MAC exact match address 14, part 2 [TSEC3] */
#define MAC15ADDR1	0x5B8 /* MAC exact match address 15, part 1 [TSEC3] */
#define MAC15ADDR2	0x5BC /* MAC exact match address 15, part 2 [TSEC3] */
#define MACnADDR1(n)	(MAC01ADDR1 + 8*(n))
#define MACnADDR2(n)	(MAC01ADDR2 + 8*(n))

/* 0x600-0x7ff RMON MIB registers */

/* eTSEC Transmit and Receive Counters */
#define TR64		0x680 /* Transmit and receive 64 byte frame counter */
#define TR127		0x684 /* Transmit and receive 65 to 127-byte frame counter */
#define TR255		0x688 /* Transmit and receive 128 to 255-byte frame counter */
#define TR511		0x68C /* Transmit and receive 256 to 511-byte frame counter */
#define TR1K		0x690 /* Transmit and receive 512 to 1023-byte frame counter */
#define TRMAX		0x694 /* Transmit and receive 1024 to 1518-byte frame counter */
#define TRMGV		0x698 /* Transmit and receive 1519 to 1522-byte good VLAN frame count */

/* eTSEC Receive Counters Registers */
#define RBYT		0x69C /* Receive byte counter */
#define RPKT		0x6A0 /* Receive packet counter */
#define RFCS		0x6A4 /* Receive FCS error counter */
#define RMCA		0x6A8 /* Receive multicast packet counter */
#define RBCA		0x6AC /* Receive broadcast packet counter */
#define RXCF		0x6B0 /* Receive control frame packet counter */
#define RXPF		0x6B4 /* Receive PAUSE frame packet counter */
#define RXUO		0x6B8 /* Receive unknown OP code counter */
#define RALN		0x6BC /* Receive alignment error counter */
#define RFLR		0x6C0 /* Receive frame length error counter */
#define RCDE		0x6C4 /* Receive code error counter */
#define RCSE		0x6C8 /* Receive carrier sense error counter */
#define RUND		0x6CC /* Receive undersize packet counter */
#define ROVR		0x6D0 /* Receive oversize packet counter */
#define RFRG		0x6D4 /* Receive fragments counter */
#define RJBR		0x6D8 /* Receive jabber counter */
#define RDRP		0x6DC /* Receive drop counter */

/* eTSEC Transmit Counters Registers */
#define TBYT		0x6E0 /* Transmit byte counter */
#define TPKT		0x6E4 /* Transmit packet counter */
#define TMCA		0x6E8 /* Transmit multicast packet counter */
#define TBCA		0x6EC /* Transmit broadcast packet counter */
#define TXPF		0x6F0 /* Transmit PAUSE control frame counter */
#define TDFR		0x6F4 /* Transmit deferral packet counter */
#define TEDF		0x6F8 /* Transmit excessive deferral packet counter */
#define TSCL		0x6FC /* Transmit single collision packet counter */
#define TMCL		0x700 /* Transmit multiple collision packet counter */
#define TLCL		0x704 /* Transmit late collision packet counter */

#define TXCL		0x708 /* Transmit excessive collision packet counter */
#define TNCL		0x70C /* Transmit total collision counter */
#define TDRP		0x714 /* Transmit drop frame counter */
#define TJBR		0x718 /* Transmit jabber frame counter */
#define TFCS		0x71C /* Transmit FCS error counter */
#define TXCF		0x720 /* Transmit control frame counter */
#define TOVR		0x724 /* Transmit oversize frame counter */
#define TUND		0x728 /* Transmit undersize frame counter */
#define TFRG		0x72C /* Transmit fragments frame counter */

/* eTSEC Counter Control and TOE Statistics Registers */
#define CAR1		0x730 /* Carry register one register 3 */
#define CAR2		0x734 /* Carry register two register 3 */
#define CAM1		0x738 /* Carry register one mask register */
#define CAM2		0x73C /* Carry register two mask register */
#define RREJ		0x740 /* Receive filter rejected packet counter [TSEC3] */

/*	0x800-0x8ff Hash table registers */

#define IGADDR0		0x800 /* Individual/group address register 0 */
#define IGADDR1		0x804 /* Individual/group address register 1 */
#define IGADDR2		0x808 /* Individual/group address register 2 */
#define IGADDR3		0x80C /* Individual/group address register 3 */
#define IGADDR4		0x810 /* Individual/group address register 4 */
#define IGADDR5		0x814 /* Individual/group address register 5 */
#define IGADDR6		0x818 /* Individual/group address register 6 */
#define IGADDR7		0x81C /* Individual/group address register 7 */
#define	IGADDR(n)	(IGADDR0 + 4*(n))

#define GADDR0		0x880 /* Group address register 0 */
#define GADDR1		0x884 /* Group address register 1 */
#define GADDR2		0x888 /* Group address register 2 */
#define GADDR3		0x88C /* Group address register 3 */
#define GADDR4		0x890 /* Group address register 4 */
#define GADDR5		0x894 /* Group address register 5 */
#define GADDR6		0x898 /* Group address register 6 */
#define GADDR7		0x89C /* Group address register 7 */
#define	GADDR(n)	(GADDR0 + 4*(n))

/* 0x900-0x9ff unused */
/* 0xa00-0xaff FIFO control/status registers */

#define FIFOCFG		0xA00 /* FIFO interface configuration register */

/* 0xb00-0xbff DMA system registers */

#define ATTR		0xBF8 /* Attribute register */
#define	ATTR_ELCWT	__PPCBITS(17,18)
#define	ATTR_ELCWT_L2	__SHIFTIN(2, ATTR_ELCWT)
#define	ATTR_BDLWT	__PPCBITS(20,21)
#define	ATTR_BDLWT_L2	__SHIFTIN(2, ATTR_BDLWT)
#define ATTR_RDSEN	__PPCBIT(24)
#define ATTR_RBDSEN	__PPCBIT(25)
#define	ATTR_DEFAULT	(ATTR_ELCWT_L2|ATTR_BDLWT_L2|ATTR_RDSEN|ATTR_RBDSEN)

#define ATTRELI		0xBFC /* Attribute extract length and extract index register [TSEC3] */
#define	ATTRELI_EL	__PPCBITS(2,12)		/* extracted length */
#define	ATTRELI_EI	__PPCBITS(18,28)	/* extracted index */
#define	ATTRELI_DEFAULT	(__SHIFTIN(72, ATTRELI_EL))

/* 0xc00-0xc3f Lossless Flow Control registers */

#define RQPRM0		0xC00 /* Receive Queue Parameters register 0 [TSEC3] */
#define RQPRM1		0xC04 /* Receive Queue Parameters register 1 [TSEC3] */
#define RQPRM2		0xC08 /* Receive Queue Parameters register 2 [TSEC3] */
#define RQPRM3		0xC0C /* Receive Queue Parameters register 3 [TSEC3] */
#define RQPRM4		0xC10 /* Receive Queue Parameters register 4 [TSEC3] */
#define RQPRM5		0xC14 /* Receive Queue Parameters register 5 [TSEC3] */
#define RQPRM6		0xC18 /* Receive Queue Parameters register 6 [TSEC3] */
#define RQPRM7		0xC1C /* Receive Queue Parameters register 7 [TSEC3] */
#define	RQPRMn(n)	(RQPRM0 + 4*(n))
#define	RQPRM_FBTHR	__PPCBITS(0,7)
#define	RQPRM_FBTHR_SET(n)	__SHIFTIN((n),RQPRM_FBTHR)
#define	RQPRM_LEN	__PPCBITS(8,31)
#define	RQPRM_LEN_SET(n)	__SHIFTIN((n),RQPRM_LEN)

#define RFBPTR0		0xC44 /* Last Free RxBD pointer for ring 0 [TSEC3] */
#define RFBPTR1		0xC4C /* Last Free RxBD pointer for ring 1 [TSEC3] */
#define RFBPTR2		0xC54 /* Last Free RxBD pointer for ring 2 [TSEC3] */
#define RFBPTR3		0xC58 /* Last Free RxBD pointer for ring 3 [TSEC3] */
#define RFBPTR4		0xC64 /* Last Free RxBD pointer for ring 4 [TSEC3] */
#define RFBPTR5		0xC6C /* Last Free RxBD pointer for ring 5 [TSEC3] */
#define RFBPTR6		0xC74 /* Last Free RxBD pointer for ring 6 [TSEC3] */
#define RFBPTR7		0xC7C /* Last Free RxBD pointer for ring 7 [TSEC3] */
#define	RFBPTRn(n)	(RFBPTR0 + 4*(n))

/* 0xc40-0xdff unused */
/* 0xe00-0xeaf 1588 Hardware Assist */

#define TMR_CTRL	0xE00 /* Timer control register [TSEC3] */
#define TMR_TEVENT	0xE04 /* time stamp event register [TSEC3] */
#define TMR_TEMASK	0xE08 /* Timer event mask register [TSEC3] */
#define TMR_PEVENT	0xE0C /* time stamp event register [TSEC3] */
#define TMR_PEMASK	0xE10 /* Timer event mask register [TSEC3] */
#define TMR_STAT	0xE14 /* time stamp status register [TSEC3] */
#define TMR_CNT_H	0xE18 /* timer counter high register [TSEC3] */
#define TMR_CNT_L	0xE1C /* timer counter low register [TSEC3] */
#define TMR_ADD		0xE20 /* Timer drift compensation addend register [TSEC3] */
#define TMR_ACC		0xE24 /* Timer accumulator register [TSEC3] */
#define TMR_PRSC	0xE28 /* timer prescale [TSEC3] */
#define TMROFF_H	0xE30 /* Timer offset high [TSEC3] */
#define TMROFF_L	0xE34 /* Timer offset low [TSEC3] */
#define TMR_ALARM1_H	0xE40 /* Timer alarm 1 high register [TSEC3] */
#define TMR_ALARM1_L	0xE44 /* Timer alarm 1 high register [TSEC3] */
#define TMR_ALARM2_H	0xE48 /* Timer alarm 2 high register [TSEC3] */
#define TMR_ALARM2_L	0xE4C /* Timer alarm 2 high register [TSEC3] */
#define TMR_FIPER1	0xE80 /* Timer fixed period interval [TSEC3] */
#define TMR_FIPER2	0xE84 /* Timer fixed period interval [TSEC3] */
#define TMR_FIPER	0xE88 /* Timer fixed period interval [TSEC3] */
#define TMR_ETTS1_H	0xEA0 /* Time stamp of general purpose external trigger [TSEC3] */
#define TMR_ETTS1_L	0xEA4 /* Time stamp of general purpose external trigger [TSEC3] */
#define TMR_ETTS2_H	0xEA8 /* Time stamp of general purpose external trigger [TSEC3] */
#define TMR_ETTS2_L	0xEAC /* Time stamp of general purpose external trigger [TSEC3] */

/* 0xeb0-0xeff Interrupt steering and coalescing */

#define ISRG0		0xeb0	/* Interrupt steering register group 0 */
#define ISRG1		0xeb4	/* Interrupt steering register group 1 */
#define ISRGn(n)	(ISRG0+4*(n))
#define ISRG_RRn(n)	__PPCBIT(n)
#define ISRG_TRn(n)	__PPCBIT(8+(n))

#define RXIC0		0xed0	/* Ring 0 Rx interrupt coalescing register */
#define RXIC1		0xed4	/* Ring 1 Rx interrupt coalescing register */
#define RXIC2		0xed8	/* Ring 2 Rx interrupt coalescing register */
#define RXIC3		0xedc	/* Ring 3 Rx interrupt coalescing register */
#define RXIC4		0xee0	/* Ring 4 Rx interrupt coalescing register */
#define RXIC5		0xee4	/* Ring 5 Rx interrupt coalescing register */
#define RXIC6		0xee8	/* Ring 6 Rx interrupt coalescing register */
#define RXIC7		0xeec	/* Ring 7 Rx interrupt coalescing register */
#define RXICn(n)	(RXIC0+4*(n))

#define TXIC0		0xf10	/* Ring 0 Tx interrupt coalescing register */
#define TXIC1		0xf14	/* Ring 1 Tx interrupt coalescing register */
#define TXIC2		0xf18	/* Ring 2 Tx interrupt coalescing register */
#define TXIC3		0xf1c	/* Ring 3 Tx interrupt coalescing register */
#define TXIC4		0xf20	/* Ring 4 Tx interrupt coalescing register */
#define TXIC5		0xf24	/* Ring 5 Tx interrupt coalescing register */
#define TXIC6		0xf28	/* Ring 6 Tx interrupt coalescing register */
#define TXIC7		0xf2c	/* Ring 7 Tx interrupt coalescing register */
#define TXICn(n)	(TXIC0+4*(n))

#endif /* _POWERPC_BOOKE_ETSECREG_H_ */