xref: /openbmc/linux/drivers/net/ethernet/ibm/emac/rgmii.h (revision 2874c5fd)
12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
29aa32835SJeff Kirsher /*
33396c782SPaul Gortmaker  * drivers/net/ethernet/ibm/emac/rgmii.h
49aa32835SJeff Kirsher  *
59aa32835SJeff Kirsher  * Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
69aa32835SJeff Kirsher  *
79aa32835SJeff Kirsher  * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
89aa32835SJeff Kirsher  *                <benh@kernel.crashing.org>
99aa32835SJeff Kirsher  *
109aa32835SJeff Kirsher  * Based on the arch/ppc version of the driver:
119aa32835SJeff Kirsher  *
129aa32835SJeff Kirsher  * Based on ocp_zmii.h/ibm_emac_zmii.h
139aa32835SJeff Kirsher  * Armin Kuster akuster@mvista.com
149aa32835SJeff Kirsher  *
159aa32835SJeff Kirsher  * Copyright 2004 MontaVista Software, Inc.
169aa32835SJeff Kirsher  * Matt Porter <mporter@kernel.crashing.org>
179aa32835SJeff Kirsher  *
189aa32835SJeff Kirsher  * Copyright (c) 2004, 2005 Zultys Technologies.
199aa32835SJeff Kirsher  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
209aa32835SJeff Kirsher  */
219aa32835SJeff Kirsher 
229aa32835SJeff Kirsher #ifndef __IBM_NEWEMAC_RGMII_H
239aa32835SJeff Kirsher #define __IBM_NEWEMAC_RGMII_H
249aa32835SJeff Kirsher 
259aa32835SJeff Kirsher /* RGMII bridge type */
269aa32835SJeff Kirsher #define RGMII_STANDARD		0
279aa32835SJeff Kirsher #define RGMII_AXON		1
289aa32835SJeff Kirsher 
299aa32835SJeff Kirsher /* RGMII bridge */
309aa32835SJeff Kirsher struct rgmii_regs {
319aa32835SJeff Kirsher 	u32 fer;		/* Function enable register */
329aa32835SJeff Kirsher 	u32 ssr;		/* Speed select register */
339aa32835SJeff Kirsher };
349aa32835SJeff Kirsher 
359aa32835SJeff Kirsher /* RGMII device */
369aa32835SJeff Kirsher struct rgmii_instance {
379aa32835SJeff Kirsher 	struct rgmii_regs __iomem	*base;
389aa32835SJeff Kirsher 
399aa32835SJeff Kirsher 	/* RGMII bridge flags */
409aa32835SJeff Kirsher 	int				flags;
419aa32835SJeff Kirsher #define EMAC_RGMII_FLAG_HAS_MDIO	0x00000001
429aa32835SJeff Kirsher 
439aa32835SJeff Kirsher 	/* Only one EMAC whacks us at a time */
449aa32835SJeff Kirsher 	struct mutex			lock;
459aa32835SJeff Kirsher 
469aa32835SJeff Kirsher 	/* number of EMACs using this RGMII bridge */
479aa32835SJeff Kirsher 	int				users;
489aa32835SJeff Kirsher 
499aa32835SJeff Kirsher 	/* OF device instance */
509aa32835SJeff Kirsher 	struct platform_device		*ofdev;
519aa32835SJeff Kirsher };
529aa32835SJeff Kirsher 
533b3bceefSTony Breeds #ifdef CONFIG_IBM_EMAC_RGMII
549aa32835SJeff Kirsher 
55d4cb2ee1SJoe Perches int rgmii_init(void);
56d4cb2ee1SJoe Perches void rgmii_exit(void);
57d4cb2ee1SJoe Perches int rgmii_attach(struct platform_device *ofdev, int input, int mode);
58d4cb2ee1SJoe Perches void rgmii_detach(struct platform_device *ofdev, int input);
59d4cb2ee1SJoe Perches void rgmii_get_mdio(struct platform_device *ofdev, int input);
60d4cb2ee1SJoe Perches void rgmii_put_mdio(struct platform_device *ofdev, int input);
61d4cb2ee1SJoe Perches void rgmii_set_speed(struct platform_device *ofdev, int input, int speed);
62d4cb2ee1SJoe Perches int rgmii_get_regs_len(struct platform_device *ofdev);
63d4cb2ee1SJoe Perches void *rgmii_dump_regs(struct platform_device *ofdev, void *buf);
649aa32835SJeff Kirsher 
659aa32835SJeff Kirsher #else
669aa32835SJeff Kirsher 
679aa32835SJeff Kirsher # define rgmii_init()		0
689aa32835SJeff Kirsher # define rgmii_exit()		do { } while(0)
699aa32835SJeff Kirsher # define rgmii_attach(x,y,z)	(-ENXIO)
709aa32835SJeff Kirsher # define rgmii_detach(x,y)	do { } while(0)
719aa32835SJeff Kirsher # define rgmii_get_mdio(o,i)	do { } while (0)
729aa32835SJeff Kirsher # define rgmii_put_mdio(o,i)	do { } while (0)
739aa32835SJeff Kirsher # define rgmii_set_speed(x,y,z)	do { } while(0)
749aa32835SJeff Kirsher # define rgmii_get_regs_len(x)	0
759aa32835SJeff Kirsher # define rgmii_dump_regs(x,buf)	(buf)
763b3bceefSTony Breeds #endif				/* !CONFIG_IBM_EMAC_RGMII */
779aa32835SJeff Kirsher 
789aa32835SJeff Kirsher #endif /* __IBM_NEWEMAC_RGMII_H */
79