xref: /aosp_15_r20/external/ethtool/fec_8xx.c (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /*
2*1b481fc3SMaciej Żenczykowski  * Copyright (C) 2004 Intracom S.A.
3*1b481fc3SMaciej Żenczykowski  * Pantelis Antoniou <[email protected]>
4*1b481fc3SMaciej Żenczykowski  */
5*1b481fc3SMaciej Żenczykowski 
6*1b481fc3SMaciej Żenczykowski #include <stdio.h>
7*1b481fc3SMaciej Żenczykowski #include <stdint.h>
8*1b481fc3SMaciej Żenczykowski #include <stddef.h>
9*1b481fc3SMaciej Żenczykowski 
10*1b481fc3SMaciej Żenczykowski #include "internal.h"
11*1b481fc3SMaciej Żenczykowski 
12*1b481fc3SMaciej Żenczykowski struct fec {
13*1b481fc3SMaciej Żenczykowski 	uint32_t	addr_low;	/* lower 32 bits of station address	*/
14*1b481fc3SMaciej Żenczykowski 	uint32_t	addr_high;	/* upper 16 bits of station address||0  */
15*1b481fc3SMaciej Żenczykowski 	uint32_t	hash_table_high;/* upper 32-bits of hash table		*/
16*1b481fc3SMaciej Żenczykowski 	uint32_t	hash_table_low;	/* lower 32-bits of hash table		*/
17*1b481fc3SMaciej Żenczykowski 	uint32_t	r_des_start;	/* beginning of Rx descriptor ring	*/
18*1b481fc3SMaciej Żenczykowski 	uint32_t	x_des_start;	/* beginning of Tx descriptor ring	*/
19*1b481fc3SMaciej Żenczykowski 	uint32_t	r_buff_size;	/* Rx buffer size			*/
20*1b481fc3SMaciej Żenczykowski 	uint32_t	res2[9];	/* reserved				*/
21*1b481fc3SMaciej Żenczykowski 	uint32_t	ecntrl;		/* ethernet control register		*/
22*1b481fc3SMaciej Żenczykowski 	uint32_t	ievent;		/* interrupt event register		*/
23*1b481fc3SMaciej Żenczykowski 	uint32_t	imask;		/* interrupt mask register		*/
24*1b481fc3SMaciej Żenczykowski 	uint32_t	ivec;		/* interrupt level and vector status	*/
25*1b481fc3SMaciej Żenczykowski 	uint32_t	r_des_active;	/* Rx ring updated flag			*/
26*1b481fc3SMaciej Żenczykowski 	uint32_t	x_des_active;	/* Tx ring updated flag			*/
27*1b481fc3SMaciej Żenczykowski 	uint32_t	res3[10];	/* reserved				*/
28*1b481fc3SMaciej Żenczykowski 	uint32_t	mii_data;	/* MII data register			*/
29*1b481fc3SMaciej Żenczykowski 	uint32_t	mii_speed;	/* MII speed control register		*/
30*1b481fc3SMaciej Żenczykowski 	uint32_t	res4[17];	/* reserved				*/
31*1b481fc3SMaciej Żenczykowski 	uint32_t	r_bound;	/* end of RAM (read-only)		*/
32*1b481fc3SMaciej Żenczykowski 	uint32_t	r_fstart;	/* Rx FIFO start address		*/
33*1b481fc3SMaciej Żenczykowski 	uint32_t	res5[6];	/* reserved				*/
34*1b481fc3SMaciej Żenczykowski 	uint32_t	x_fstart;	/* Tx FIFO start address		*/
35*1b481fc3SMaciej Żenczykowski 	uint32_t	res6[17];	/* reserved				*/
36*1b481fc3SMaciej Żenczykowski 	uint32_t	fun_code;	/* fec SDMA function code		*/
37*1b481fc3SMaciej Żenczykowski 	uint32_t	res7[3];	/* reserved				*/
38*1b481fc3SMaciej Żenczykowski 	uint32_t	r_cntrl;	/* Rx control register			*/
39*1b481fc3SMaciej Żenczykowski 	uint32_t	r_hash;		/* Rx hash register			*/
40*1b481fc3SMaciej Żenczykowski 	uint32_t	res8[14];	/* reserved				*/
41*1b481fc3SMaciej Żenczykowski 	uint32_t	x_cntrl;	/* Tx control register			*/
42*1b481fc3SMaciej Żenczykowski 	uint32_t	res9[0x1e];	/* reserved				*/
43*1b481fc3SMaciej Żenczykowski };
44*1b481fc3SMaciej Żenczykowski 
45*1b481fc3SMaciej Żenczykowski #define DUMP_REG(f, x)	fprintf(stdout, \
46*1b481fc3SMaciej Żenczykowski 			"0x%04lx: %-16s 0x%08x\n", \
47*1b481fc3SMaciej Żenczykowski 				(unsigned long)(offsetof(struct fec, x)), \
48*1b481fc3SMaciej Żenczykowski 				#x, f->x)
49*1b481fc3SMaciej Żenczykowski 
fec_8xx_dump_regs(struct ethtool_drvinfo * info __maybe_unused,struct ethtool_regs * regs)50*1b481fc3SMaciej Żenczykowski int fec_8xx_dump_regs(struct ethtool_drvinfo *info __maybe_unused,
51*1b481fc3SMaciej Żenczykowski 		      struct ethtool_regs *regs)
52*1b481fc3SMaciej Żenczykowski {
53*1b481fc3SMaciej Żenczykowski 	struct fec *f = (struct fec *)regs->data;
54*1b481fc3SMaciej Żenczykowski 
55*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "Descriptor Registers\n");
56*1b481fc3SMaciej Żenczykowski 	fprintf(stdout, "---------------------\n");
57*1b481fc3SMaciej Żenczykowski 
58*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, addr_low);
59*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, addr_high);
60*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, hash_table_high);
61*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, hash_table_low);
62*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, r_des_start);
63*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, x_des_start);
64*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, r_buff_size);
65*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, ecntrl);
66*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, ievent);
67*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, imask);
68*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, ivec);
69*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, r_des_active);
70*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, x_des_active);
71*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, mii_data);
72*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, mii_speed);
73*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, r_bound);
74*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, r_fstart);
75*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, x_fstart);
76*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, fun_code);
77*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, r_cntrl);
78*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, r_hash);
79*1b481fc3SMaciej Żenczykowski 	DUMP_REG(f, x_cntrl);
80*1b481fc3SMaciej Żenczykowski 
81*1b481fc3SMaciej Żenczykowski 	return 0;
82*1b481fc3SMaciej Żenczykowski }
83