rgmii.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * drivers/net/ethernet/ibm/emac/rgmii.h
  3. *
  4. * Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
  5. *
  6. * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
  7. * <benh@kernel.crashing.org>
  8. *
  9. * Based on the arch/ppc version of the driver:
  10. *
  11. * Based on ocp_zmii.h/ibm_emac_zmii.h
  12. * Armin Kuster akuster@mvista.com
  13. *
  14. * Copyright 2004 MontaVista Software, Inc.
  15. * Matt Porter <mporter@kernel.crashing.org>
  16. *
  17. * Copyright (c) 2004, 2005 Zultys Technologies.
  18. * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  19. *
  20. * This program is free software; you can redistribute it and/or modify it
  21. * under the terms of the GNU General Public License as published by the
  22. * Free Software Foundation; either version 2 of the License, or (at your
  23. * option) any later version.
  24. */
  25. #ifndef __IBM_NEWEMAC_RGMII_H
  26. #define __IBM_NEWEMAC_RGMII_H
  27. /* RGMII bridge type */
  28. #define RGMII_STANDARD 0
  29. #define RGMII_AXON 1
  30. /* RGMII bridge */
  31. struct rgmii_regs {
  32. u32 fer; /* Function enable register */
  33. u32 ssr; /* Speed select register */
  34. };
  35. /* RGMII device */
  36. struct rgmii_instance {
  37. struct rgmii_regs __iomem *base;
  38. /* RGMII bridge flags */
  39. int flags;
  40. #define EMAC_RGMII_FLAG_HAS_MDIO 0x00000001
  41. /* Only one EMAC whacks us at a time */
  42. struct mutex lock;
  43. /* number of EMACs using this RGMII bridge */
  44. int users;
  45. /* OF device instance */
  46. struct platform_device *ofdev;
  47. };
  48. #ifdef CONFIG_IBM_EMAC_RGMII
  49. int rgmii_init(void);
  50. void rgmii_exit(void);
  51. int rgmii_attach(struct platform_device *ofdev, int input, int mode);
  52. void rgmii_detach(struct platform_device *ofdev, int input);
  53. void rgmii_get_mdio(struct platform_device *ofdev, int input);
  54. void rgmii_put_mdio(struct platform_device *ofdev, int input);
  55. void rgmii_set_speed(struct platform_device *ofdev, int input, int speed);
  56. int rgmii_get_regs_len(struct platform_device *ofdev);
  57. void *rgmii_dump_regs(struct platform_device *ofdev, void *buf);
  58. #else
  59. # define rgmii_init() 0
  60. # define rgmii_exit() do { } while(0)
  61. # define rgmii_attach(x,y,z) (-ENXIO)
  62. # define rgmii_detach(x,y) do { } while(0)
  63. # define rgmii_get_mdio(o,i) do { } while (0)
  64. # define rgmii_put_mdio(o,i) do { } while (0)
  65. # define rgmii_set_speed(x,y,z) do { } while(0)
  66. # define rgmii_get_regs_len(x) 0
  67. # define rgmii_dump_regs(x,buf) (buf)
  68. #endif /* !CONFIG_IBM_EMAC_RGMII */
  69. #endif /* __IBM_NEWEMAC_RGMII_H */