synopGMAC_plat.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2017-08-24 chinesebear first version
  9. * 2020-08-10 lizhirui porting to ls2k
  10. */
  11. #ifndef SYNOP_GMAC_PLAT_H
  12. #define SYNOP_GMAC_PLAT_H 1
  13. /* sw
  14. #include <linux/kernel.h>
  15. #include <asm/io.h>
  16. #include <linux/gfp.h>
  17. #include <linux/slab.h>
  18. #include <linux/pci.h>
  19. */
  20. #include "synopGMAC_types.h"
  21. #include "synopGMAC_debug.h"
  22. //#include "mii.h"
  23. //#include "GMAC_Pmon.h"
  24. //#include "synopGMAC_Host.h"
  25. #include <rtthread.h>
  26. #include <stdint.h>
  27. #include "mips_addrspace.h"
  28. //sw: copy the type define into here
  29. #define IOCTL_READ_REGISTER SIOCDEVPRIVATE+1
  30. #define IOCTL_WRITE_REGISTER SIOCDEVPRIVATE+2
  31. #define IOCTL_READ_IPSTRUCT SIOCDEVPRIVATE+3
  32. #define IOCTL_READ_RXDESC SIOCDEVPRIVATE+4
  33. #define IOCTL_READ_TXDESC SIOCDEVPRIVATE+5
  34. #define IOCTL_POWER_DOWN SIOCDEVPRIVATE+6
  35. #define SYNOP_GMAC0 1
  36. typedef int bool;
  37. //typedef unsigned long dma_addr_t;
  38. #define KUSEG_ADDR 0x0
  39. #define CACHED_MEMORY_ADDR KSEG0BASE
  40. #define UNCACHED_MEMORY_ADDR KSEG0BASE
  41. #define KSEG2_ADDR KSEG2BASE
  42. #define MAX_MEM_ADDR KSEG3BASE
  43. #define RESERVED_ADDR KSEG3BASE
  44. #define CACHED_TO_PHYS(x) ((uint64_t)(x) - CACHED_MEMORY_ADDR)
  45. #define PHYS_TO_CACHED(x) ((uint64_t)(x) + CACHED_MEMORY_ADDR)
  46. #define UNCACHED_TO_PHYS(x) ((uint64_t)(x) - UNCACHED_MEMORY_ADDR)
  47. #define PHYS_TO_UNCACHED(x) ((uint64_t)(x) + UNCACHED_MEMORY_ADDR)
  48. #define VA_TO_CINDEX(x) (PHYS_TO_CACHED(UNCACHED_TO_PHYS(x)))
  49. #define CACHED_TO_UNCACHED(x) (PHYS_TO_UNCACHED(CACHED_TO_PHYS(x)))
  50. #define VA_TO_PA(x) CACHED_TO_PHYS(x)
  51. /* sw
  52. #define TR0(fmt, args...) printk(KERN_CRIT "SynopGMAC: " fmt, ##args)
  53. #ifdef DEBUG
  54. #undef TR
  55. # define TR(fmt, args...) printk(KERN_CRIT "SynopGMAC: " fmt, ##args)
  56. #else
  57. # define TR(fmt, args...) // not debugging: nothing
  58. #endif
  59. */
  60. /*
  61. #define TR0(fmt, args...) printf("SynopGMAC: " fmt, ##args)
  62. */
  63. /*
  64. #ifdef DEBUG
  65. #undef TR
  66. # define TR(fmt, args...) printf("SynopGMAC: " fmt, ##args)
  67. #else
  68. //# define TR(fmt, args...) // not debugging: nothing
  69. #define TR(fmt, args...) printf("SynopGMAC: " fmt, ##args)
  70. #endif
  71. */
  72. //sw: nothing to display
  73. #define TR0(fmt, args...) //rt_kprintf(fmt, ##args)
  74. #define TR(fmt, args...) //rt_kprintf(fmt, ##args)
  75. //typedef int bool;
  76. enum synopGMAC_boolean
  77. {
  78. false = 0,
  79. true = 1
  80. };
  81. #define DEFAULT_DELAY_VARIABLE 10
  82. #define DEFAULT_LOOP_VARIABLE 10000
  83. /* There are platform related endian conversions
  84. *
  85. */
  86. #define LE32_TO_CPU __le32_to_cpu
  87. #define BE32_TO_CPU __be32_to_cpu
  88. #define CPU_TO_LE32 __cpu_to_le32
  89. /* Error Codes */
  90. #define ESYNOPGMACNOERR 0
  91. #define ESYNOPGMACNOMEM 1
  92. #define ESYNOPGMACPHYERR 2
  93. #define ESYNOPGMACBUSY 3
  94. struct Network_interface_data
  95. {
  96. u32 unit;
  97. u64 addr;
  98. u32 data;
  99. };
  100. /**
  101. * These are the wrapper function prototypes for OS/platform related routines
  102. */
  103. void * plat_alloc_memory(u32 );
  104. void plat_free_memory(void *);
  105. //void * plat_alloc_consistent_dmaable_memory(struct pci_dev *, u32, u32 *);
  106. //void plat_free_consistent_dmaable_memory (struct pci_dev *, u32, void *, u32);
  107. void plat_delay(u32);
  108. /**
  109. * The Low level function to read register contents from Hardware.
  110. *
  111. * @param[in] pointer to the base of register map
  112. * @param[in] Offset from the base
  113. * \return Returns the register contents
  114. */
  115. static u32 synopGMACReadReg(u64 RegBase, u32 RegOffset)
  116. {
  117. u64 addr;
  118. u32 data;
  119. addr = RegBase + (u32)RegOffset;
  120. data = *(volatile u32 *)addr;
  121. #if SYNOP_REG_DEBUG
  122. TR("%s RegBase = 0x%08x RegOffset = 0x%08x RegData = 0x%08x\n", __FUNCTION__, (u32)RegBase, RegOffset, data );
  123. #endif
  124. // rt_kprintf("%s RegBase = 0x%08x RegOffset = 0x%08x RegData = 0x%08x\n", __FUNCTION__, (u32)RegBase, RegOffset, data );
  125. return data;
  126. }
  127. /**
  128. * The Low level function to write to a register in Hardware.
  129. *
  130. * @param[in] pointer to the base of register map
  131. * @param[in] Offset from the base
  132. * @param[in] Data to be written
  133. * \return void
  134. */
  135. static void synopGMACWriteReg(u64 RegBase, u32 RegOffset, u32 RegData )
  136. {
  137. u64 addr;
  138. addr = RegBase + (u32)RegOffset;
  139. // rt_kprintf("%s RegBase = 0x%08x RegOffset = 0x%08x RegData = 0x%08x\n", __FUNCTION__,(u32) RegBase, RegOffset, RegData );
  140. #if SYNOP_REG_DEBUG
  141. TR("%s RegBase = 0x%p RegOffset = 0x%08x RegData = 0x%08x\n", __FUNCTION__,(u32) RegBase, RegOffset, RegData );
  142. #endif
  143. *(volatile u32 *)addr = RegData;
  144. /*if(addr == 0xbfe1100c)
  145. DEBUG_MES("regdata = %08x\n", RegData);*/
  146. return;
  147. }
  148. /**
  149. * The Low level function to set bits of a register in Hardware.
  150. *
  151. * @param[in] pointer to the base of register map
  152. * @param[in] Offset from the base
  153. * @param[in] Bit mask to set bits to logical 1
  154. * \return void
  155. */
  156. static void synopGMACSetBits(u64 RegBase, u32 RegOffset, u32 BitPos)
  157. {
  158. //u64 addr = (u64)RegBase + (u64)RegOffset;
  159. u32 data;
  160. data = synopGMACReadReg(RegBase, RegOffset);
  161. data |= BitPos;
  162. synopGMACWriteReg(RegBase, RegOffset, data);
  163. // writel(data,(void *)addr);
  164. #if SYNOP_REG_DEBUG
  165. TR("%s !!!!!!!!!!!!! RegOffset = 0x%08x RegData = 0x%08x\n", __FUNCTION__, RegOffset, data );
  166. #endif
  167. return;
  168. }
  169. /**
  170. * The Low level function to clear bits of a register in Hardware.
  171. *
  172. * @param[in] pointer to the base of register map
  173. * @param[in] Offset from the base
  174. * @param[in] Bit mask to clear bits to logical 0
  175. * \return void
  176. */
  177. static void synopGMACClearBits(u64 RegBase, u32 RegOffset, u32 BitPos)
  178. {
  179. u32 data;
  180. data = synopGMACReadReg(RegBase, RegOffset);
  181. data &= (~BitPos);
  182. synopGMACWriteReg(RegBase, RegOffset, data);
  183. #if SYNOP_REG_DEBUG
  184. TR("%s !!!!!!!!!!!!! RegOffset = 0x%08x RegData = 0x%08x\n", __FUNCTION__, RegOffset, data );
  185. #endif
  186. return;
  187. }
  188. /**
  189. * The Low level function to Check the setting of the bits.
  190. *
  191. * @param[in] pointer to the base of register map
  192. * @param[in] Offset from the base
  193. * @param[in] Bit mask to set bits to logical 1
  194. * \return returns TRUE if set to '1' returns FALSE if set to '0'. Result undefined there are no bit set in the BitPos argument.
  195. *
  196. */
  197. static bool synopGMACCheckBits(u64 RegBase, u32 RegOffset, u32 BitPos)
  198. {
  199. u32 data;
  200. data = synopGMACReadReg(RegBase, RegOffset);
  201. data &= BitPos;
  202. if(data)
  203. {
  204. return true;
  205. }
  206. else
  207. {
  208. return false;
  209. }
  210. }
  211. #endif