xref: /openbmc/linux/drivers/net/ethernet/ibm/emac/rgmii.h (revision 3396c782)
19aa32835SJeff Kirsher /*
23396c782SPaul Gortmaker  * drivers/net/ethernet/ibm/emac/rgmii.h
39aa32835SJeff Kirsher  *
49aa32835SJeff Kirsher  * Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
59aa32835SJeff Kirsher  *
69aa32835SJeff Kirsher  * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
79aa32835SJeff Kirsher  *                <benh@kernel.crashing.org>
89aa32835SJeff Kirsher  *
99aa32835SJeff Kirsher  * Based on the arch/ppc version of the driver:
109aa32835SJeff Kirsher  *
119aa32835SJeff Kirsher  * Based on ocp_zmii.h/ibm_emac_zmii.h
129aa32835SJeff Kirsher  * Armin Kuster akuster@mvista.com
139aa32835SJeff Kirsher  *
149aa32835SJeff Kirsher  * Copyright 2004 MontaVista Software, Inc.
159aa32835SJeff Kirsher  * Matt Porter <mporter@kernel.crashing.org>
169aa32835SJeff Kirsher  *
179aa32835SJeff Kirsher  * Copyright (c) 2004, 2005 Zultys Technologies.
189aa32835SJeff Kirsher  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
199aa32835SJeff Kirsher  *
209aa32835SJeff Kirsher  * This program is free software; you can redistribute  it and/or modify it
219aa32835SJeff Kirsher  * under  the terms of  the GNU General  Public License as published by the
229aa32835SJeff Kirsher  * Free Software Foundation;  either version 2 of the  License, or (at your
239aa32835SJeff Kirsher  * option) any later version.
249aa32835SJeff Kirsher  */
259aa32835SJeff Kirsher 
269aa32835SJeff Kirsher #ifndef __IBM_NEWEMAC_RGMII_H
279aa32835SJeff Kirsher #define __IBM_NEWEMAC_RGMII_H
289aa32835SJeff Kirsher 
299aa32835SJeff Kirsher /* RGMII bridge type */
309aa32835SJeff Kirsher #define RGMII_STANDARD		0
319aa32835SJeff Kirsher #define RGMII_AXON		1
329aa32835SJeff Kirsher 
339aa32835SJeff Kirsher /* RGMII bridge */
349aa32835SJeff Kirsher struct rgmii_regs {
359aa32835SJeff Kirsher 	u32 fer;		/* Function enable register */
369aa32835SJeff Kirsher 	u32 ssr;		/* Speed select register */
379aa32835SJeff Kirsher };
389aa32835SJeff Kirsher 
399aa32835SJeff Kirsher /* RGMII device */
409aa32835SJeff Kirsher struct rgmii_instance {
419aa32835SJeff Kirsher 	struct rgmii_regs __iomem	*base;
429aa32835SJeff Kirsher 
439aa32835SJeff Kirsher 	/* RGMII bridge flags */
449aa32835SJeff Kirsher 	int				flags;
459aa32835SJeff Kirsher #define EMAC_RGMII_FLAG_HAS_MDIO	0x00000001
469aa32835SJeff Kirsher 
479aa32835SJeff Kirsher 	/* Only one EMAC whacks us at a time */
489aa32835SJeff Kirsher 	struct mutex			lock;
499aa32835SJeff Kirsher 
509aa32835SJeff Kirsher 	/* number of EMACs using this RGMII bridge */
519aa32835SJeff Kirsher 	int				users;
529aa32835SJeff Kirsher 
539aa32835SJeff Kirsher 	/* OF device instance */
549aa32835SJeff Kirsher 	struct platform_device		*ofdev;
559aa32835SJeff Kirsher };
569aa32835SJeff Kirsher 
573b3bceefSTony Breeds #ifdef CONFIG_IBM_EMAC_RGMII
589aa32835SJeff Kirsher 
599aa32835SJeff Kirsher extern int rgmii_init(void);
609aa32835SJeff Kirsher extern void rgmii_exit(void);
619aa32835SJeff Kirsher extern int rgmii_attach(struct platform_device *ofdev, int input, int mode);
629aa32835SJeff Kirsher extern void rgmii_detach(struct platform_device *ofdev, int input);
639aa32835SJeff Kirsher extern void rgmii_get_mdio(struct platform_device *ofdev, int input);
649aa32835SJeff Kirsher extern void rgmii_put_mdio(struct platform_device *ofdev, int input);
659aa32835SJeff Kirsher extern void rgmii_set_speed(struct platform_device *ofdev, int input, int speed);
669aa32835SJeff Kirsher extern int rgmii_get_regs_len(struct platform_device *ofdev);
679aa32835SJeff Kirsher extern void *rgmii_dump_regs(struct platform_device *ofdev, void *buf);
689aa32835SJeff Kirsher 
699aa32835SJeff Kirsher #else
709aa32835SJeff Kirsher 
719aa32835SJeff Kirsher # define rgmii_init()		0
729aa32835SJeff Kirsher # define rgmii_exit()		do { } while(0)
739aa32835SJeff Kirsher # define rgmii_attach(x,y,z)	(-ENXIO)
749aa32835SJeff Kirsher # define rgmii_detach(x,y)	do { } while(0)
759aa32835SJeff Kirsher # define rgmii_get_mdio(o,i)	do { } while (0)
769aa32835SJeff Kirsher # define rgmii_put_mdio(o,i)	do { } while (0)
779aa32835SJeff Kirsher # define rgmii_set_speed(x,y,z)	do { } while(0)
789aa32835SJeff Kirsher # define rgmii_get_regs_len(x)	0
799aa32835SJeff Kirsher # define rgmii_dump_regs(x,buf)	(buf)
803b3bceefSTony Breeds #endif				/* !CONFIG_IBM_EMAC_RGMII */
819aa32835SJeff Kirsher 
829aa32835SJeff Kirsher #endif /* __IBM_NEWEMAC_RGMII_H */
83