fs_enet_pd.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /*
  2. * Platform information definitions for the
  3. * universal Freescale Ethernet driver.
  4. *
  5. * Copyright (c) 2003 Intracom S.A.
  6. * by Pantelis Antoniou <panto@intracom.gr>
  7. *
  8. * 2005 (c) MontaVista Software, Inc.
  9. * Vitaly Bordug <vbordug@ru.mvista.com>
  10. *
  11. * This file is licensed under the terms of the GNU General Public License
  12. * version 2. This program is licensed "as is" without any warranty of any
  13. * kind, whether express or implied.
  14. */
  15. #ifndef FS_ENET_PD_H
  16. #define FS_ENET_PD_H
  17. #include <linux/clk.h>
  18. #include <linux/string.h>
  19. #include <linux/of_mdio.h>
  20. #include <linux/if_ether.h>
  21. #include <asm/types.h>
  22. #define FS_ENET_NAME "fs_enet"
  23. enum fs_id {
  24. fsid_fec1,
  25. fsid_fec2,
  26. fsid_fcc1,
  27. fsid_fcc2,
  28. fsid_fcc3,
  29. fsid_scc1,
  30. fsid_scc2,
  31. fsid_scc3,
  32. fsid_scc4,
  33. };
  34. #define FS_MAX_INDEX 9
  35. static inline int fs_get_fec_index(enum fs_id id)
  36. {
  37. if (id >= fsid_fec1 && id <= fsid_fec2)
  38. return id - fsid_fec1;
  39. return -1;
  40. }
  41. static inline int fs_get_fcc_index(enum fs_id id)
  42. {
  43. if (id >= fsid_fcc1 && id <= fsid_fcc3)
  44. return id - fsid_fcc1;
  45. return -1;
  46. }
  47. static inline int fs_get_scc_index(enum fs_id id)
  48. {
  49. if (id >= fsid_scc1 && id <= fsid_scc4)
  50. return id - fsid_scc1;
  51. return -1;
  52. }
  53. static inline int fs_fec_index2id(int index)
  54. {
  55. int id = fsid_fec1 + index - 1;
  56. if (id >= fsid_fec1 && id <= fsid_fec2)
  57. return id;
  58. return FS_MAX_INDEX;
  59. }
  60. static inline int fs_fcc_index2id(int index)
  61. {
  62. int id = fsid_fcc1 + index - 1;
  63. if (id >= fsid_fcc1 && id <= fsid_fcc3)
  64. return id;
  65. return FS_MAX_INDEX;
  66. }
  67. static inline int fs_scc_index2id(int index)
  68. {
  69. int id = fsid_scc1 + index - 1;
  70. if (id >= fsid_scc1 && id <= fsid_scc4)
  71. return id;
  72. return FS_MAX_INDEX;
  73. }
  74. enum fs_mii_method {
  75. fsmii_fixed,
  76. fsmii_fec,
  77. fsmii_bitbang,
  78. };
  79. enum fs_ioport {
  80. fsiop_porta,
  81. fsiop_portb,
  82. fsiop_portc,
  83. fsiop_portd,
  84. fsiop_porte,
  85. };
  86. struct fs_mii_bit {
  87. u32 offset;
  88. u8 bit;
  89. u8 polarity;
  90. };
  91. struct fs_mii_bb_platform_info {
  92. struct fs_mii_bit mdio_dir;
  93. struct fs_mii_bit mdio_dat;
  94. struct fs_mii_bit mdc_dat;
  95. int delay; /* delay in us */
  96. int irq[32]; /* irqs per phy's */
  97. };
  98. struct fs_platform_info {
  99. void(*init_ioports)(struct fs_platform_info *);
  100. /* device specific information */
  101. int fs_no; /* controller index */
  102. char fs_type[4]; /* controller type */
  103. u32 cp_page; /* CPM page */
  104. u32 cp_block; /* CPM sblock */
  105. u32 cp_command; /* CPM page/sblock/mcn */
  106. u32 clk_trx; /* some stuff for pins & mux configuration*/
  107. u32 clk_rx;
  108. u32 clk_tx;
  109. u32 clk_route;
  110. u32 clk_mask;
  111. u32 mem_offset;
  112. u32 dpram_offset;
  113. u32 fcc_regs_c;
  114. u32 device_flags;
  115. struct device_node *phy_node;
  116. const struct fs_mii_bus_info *bus_info;
  117. int rx_ring, tx_ring; /* number of buffers on rx */
  118. __u8 macaddr[ETH_ALEN]; /* mac address */
  119. int rx_copybreak; /* limit we copy small frames */
  120. int napi_weight; /* NAPI weight */
  121. int use_rmii; /* use RMII mode */
  122. int has_phy; /* if the network is phy container as well...*/
  123. struct clk *clk_per; /* 'per' clock for register access */
  124. };
  125. struct fs_mii_fec_platform_info {
  126. u32 irq[32];
  127. u32 mii_speed;
  128. };
  129. static inline int fs_get_id(struct fs_platform_info *fpi)
  130. {
  131. if(strstr(fpi->fs_type, "SCC"))
  132. return fs_scc_index2id(fpi->fs_no);
  133. if(strstr(fpi->fs_type, "FCC"))
  134. return fs_fcc_index2id(fpi->fs_no);
  135. if(strstr(fpi->fs_type, "FEC"))
  136. return fs_fec_index2id(fpi->fs_no);
  137. return fpi->fs_no;
  138. }
  139. #endif