fs_enet_pd.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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/string.h>
  18. #include <asm/types.h>
  19. #define FS_ENET_NAME "fs_enet"
  20. enum fs_id {
  21. fsid_fec1,
  22. fsid_fec2,
  23. fsid_fcc1,
  24. fsid_fcc2,
  25. fsid_fcc3,
  26. fsid_scc1,
  27. fsid_scc2,
  28. fsid_scc3,
  29. fsid_scc4,
  30. };
  31. #define FS_MAX_INDEX 9
  32. static inline int fs_get_fec_index(enum fs_id id)
  33. {
  34. if (id >= fsid_fec1 && id <= fsid_fec2)
  35. return id - fsid_fec1;
  36. return -1;
  37. }
  38. static inline int fs_get_fcc_index(enum fs_id id)
  39. {
  40. if (id >= fsid_fcc1 && id <= fsid_fcc3)
  41. return id - fsid_fcc1;
  42. return -1;
  43. }
  44. static inline int fs_get_scc_index(enum fs_id id)
  45. {
  46. if (id >= fsid_scc1 && id <= fsid_scc4)
  47. return id - fsid_scc1;
  48. return -1;
  49. }
  50. static inline int fs_fec_index2id(int index)
  51. {
  52. int id = fsid_fec1 + index - 1;
  53. if (id >= fsid_fec1 && id <= fsid_fec2)
  54. return id;
  55. return FS_MAX_INDEX;
  56. }
  57. static inline int fs_fcc_index2id(int index)
  58. {
  59. int id = fsid_fcc1 + index - 1;
  60. if (id >= fsid_fcc1 && id <= fsid_fcc3)
  61. return id;
  62. return FS_MAX_INDEX;
  63. }
  64. static inline int fs_scc_index2id(int index)
  65. {
  66. int id = fsid_scc1 + index - 1;
  67. if (id >= fsid_scc1 && id <= fsid_scc4)
  68. return id;
  69. return FS_MAX_INDEX;
  70. }
  71. enum fs_mii_method {
  72. fsmii_fixed,
  73. fsmii_fec,
  74. fsmii_bitbang,
  75. };
  76. enum fs_ioport {
  77. fsiop_porta,
  78. fsiop_portb,
  79. fsiop_portc,
  80. fsiop_portd,
  81. fsiop_porte,
  82. };
  83. struct fs_mii_bit {
  84. u32 offset;
  85. u8 bit;
  86. u8 polarity;
  87. };
  88. struct fs_mii_bb_platform_info {
  89. struct fs_mii_bit mdio_dir;
  90. struct fs_mii_bit mdio_dat;
  91. struct fs_mii_bit mdc_dat;
  92. int delay; /* delay in us */
  93. int irq[32]; /* irqs per phy's */
  94. };
  95. struct fs_platform_info {
  96. void(*init_ioports)(struct fs_platform_info *);
  97. /* device specific information */
  98. int fs_no; /* controller index */
  99. char fs_type[4]; /* controller type */
  100. u32 cp_page; /* CPM page */
  101. u32 cp_block; /* CPM sblock */
  102. u32 cp_command; /* CPM page/sblock/mcn */
  103. u32 clk_trx; /* some stuff for pins & mux configuration*/
  104. u32 clk_rx;
  105. u32 clk_tx;
  106. u32 clk_route;
  107. u32 clk_mask;
  108. u32 mem_offset;
  109. u32 dpram_offset;
  110. u32 fcc_regs_c;
  111. u32 device_flags;
  112. int phy_addr; /* the phy address (-1 no phy) */
  113. #ifdef CONFIG_PPC_CPM_NEW_BINDING
  114. char bus_id[16];
  115. #else
  116. const char* bus_id;
  117. #endif
  118. int phy_irq; /* the phy irq (if it exists) */
  119. const struct fs_mii_bus_info *bus_info;
  120. int rx_ring, tx_ring; /* number of buffers on rx */
  121. __u8 macaddr[6]; /* mac address */
  122. int rx_copybreak; /* limit we copy small frames */
  123. int use_napi; /* use NAPI */
  124. int napi_weight; /* NAPI weight */
  125. int use_rmii; /* use RMII mode */
  126. int has_phy; /* if the network is phy container as well...*/
  127. };
  128. struct fs_mii_fec_platform_info {
  129. u32 irq[32];
  130. u32 mii_speed;
  131. };
  132. static inline int fs_get_id(struct fs_platform_info *fpi)
  133. {
  134. if(strstr(fpi->fs_type, "SCC"))
  135. return fs_scc_index2id(fpi->fs_no);
  136. if(strstr(fpi->fs_type, "FCC"))
  137. return fs_fcc_index2id(fpi->fs_no);
  138. if(strstr(fpi->fs_type, "FEC"))
  139. return fs_fec_index2id(fpi->fs_no);
  140. return fpi->fs_no;
  141. }
  142. #endif