ccmni_net.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /************************************
  2. CCMNI Memory Layout
  3. |------------------------------|
  4. | |
  5. | |
  6. | CCMNI UP-Link Memory |
  7. | (Maintained by MD) |
  8. | |
  9. |------------------------------|
  10. | CCMNI1 RX Memory |
  11. |------------------------------|
  12. | CCMNI2 RX Memory |
  13. |------------------------------|
  14. | ... |
  15. |------------------------------|
  16. | CCMNIn RX Memory |
  17. |------------------------------|
  18. | CCMNI1 - Ctrl Memory |
  19. |------------------------------|
  20. | CCMNI2 - Ctrl Memory |
  21. |------------------------------|
  22. | ... |
  23. |------------------------------|
  24. | CCMNIn - Ctrl Memory |
  25. |------------------------------|
  26. ***********************************
  27. CCMNI ctrl memory layout
  28. |------------------------------|
  29. | CCMNI1 - TX Read out |
  30. |------------------------------|
  31. | CCMNI1 - TX Avai out |
  32. |------------------------------|
  33. | CCMNI1 - TX Avai in |
  34. |------------------------------|
  35. | CCMNI1 - TX Queue len |
  36. |------------------------------|
  37. | |
  38. | |
  39. | CCMNI1 TX Queue |
  40. | |
  41. | |
  42. |------------------------------|
  43. | CCMNI1 - RX Read out |
  44. |------------------------------|
  45. | CCMNI1 - RX Avai out |
  46. |------------------------------|
  47. | CCMNI1 - RX Avai in |
  48. |------------------------------|
  49. | CCMNI1 - RX Queue len |
  50. |------------------------------|
  51. | |
  52. | |
  53. | CCMNI1 RX Queue |
  54. | |
  55. | |
  56. |------------------------------|
  57. *************************************
  58. CCMNI RX memory layout
  59. |------------------------------|
  60. | Buffer[0] 1500B + 28B |
  61. |------------------------------|
  62. | Buffer[1] 1500B + 28B |
  63. |------------------------------|
  64. | ... |
  65. |------------------------------|
  66. | Buffer[n] 1500B + 28B |
  67. |------------------------------|
  68. **********************************
  69. CCMNI ctrl Q memory layout (ring buffer)
  70. For example, ptr_n points to the start address of RX memory's Data field of Buffer[n],
  71. len_n stands for the length of RX memory's Data field of Buffer[n] (not including End Byte).
  72. |-----------------------------|
  73. | ptr_n / len_n |
  74. |-----------------------------|
  75. | ... |
  76. |-----------------------------|
  77. | ptr_1 / len_1 |
  78. |-----------------------------|
  79. | ptr_1 / len_1 |
  80. |-----------------------------|
  81. ***********************************/
  82. /****************Data buffer mem layout***************
  83. |-------------------------------------------------------------------------------|
  84. | DBG(16B) | Header(4B) | Data Field (1500B Max.) + End Byte (1B) + Blank (nB) | Footer (4B) |
  85. |-------------------------------------------------------------------------------|
  86. |----------------------------------------------------------|
  87. | DBG |
  88. |----------------------------------------------------------|
  89. | port (1B) | avail in no. (1B) | avail out no. (1B) | read out no. (1B) |
  90. |----------------------------------------------------------|
  91. ************************************************/
  92. #ifndef __CCCI_CCMNI_H__
  93. #define __CCCI_CCMNI_H__
  94. #include <linux/kernel.h>
  95. #include <linux/module.h>
  96. #include <linux/device.h>
  97. #include <linux/netdevice.h>
  98. #include <linux/etherdevice.h>
  99. #include <linux/skbuff.h>
  100. #include <linux/bitops.h>
  101. #include <linux/wakelock.h>
  102. #include <linux/spinlock.h>
  103. #include <linux/interrupt.h>
  104. #include <linux/delay.h>
  105. #include <linux/wait.h>
  106. #include <linux/dma-mapping.h>
  107. #include <linux/timer.h>
  108. #include <linux/if_ether.h>
  109. #include <linux/bitops.h>
  110. #include <linux/dma-mapping.h>
  111. #define CCCI_NETWORK 0
  112. #define CCMNI_MTU 1500
  113. #define CCMNI_CHANNEL_OFFSET 2
  114. /* #define CCMNI_MAX_CHANNELS NET_PORT_NUM */
  115. /* #define CCMNI_CHANNEL_CNT CCMNI_V2_PORT_NUM */
  116. #define IPV4_VERSION 0x40
  117. #define IPV6_VERSION 0x60
  118. /* Flags bit used for timer */
  119. #define CCMNI_RECV_ACK_PENDING (0)
  120. #define CCMNI_SEND_PENDING (1)
  121. #define CCMNI_RECV_PENDING (2)
  122. #define CCMNI_TX_QUEUE 8
  123. /* To store 256 ptr_n & len_n. Normally we use 100. */
  124. /* If current channel busy, we may use the rest by negotiating with other channels, */
  125. /* other channels may release their unused resources. */
  126. #define CCMNI_CTRL_Q_RX_SIZE (256)
  127. #define CCMNI_CTRL_Q_TX_SIZE (64)
  128. #define CCMNI_RX_ACK_BOUND (CCMNI_CTRL_Q_RX_SIZE_DEFAULT / 4)
  129. #define CCMNI_CTRL_Q_RX_SIZE_DEFAULT 100
  130. #define CCMNI_SINGLE_BUFF_SIZE (CCMNI_MTU + 28)
  131. #define CCMNI_BUFF_DATA_FIELD_SIZE (CCMNI_SINGLE_BUFF_SIZE - 24) /* 1500+1+3 */
  132. #define CCCI_CCMNI_SMEM_UL_SIZE (300 * 1024)
  133. #define CCCI_CCMNI_SMEM_DL_SIZE (300 * CCMNI_SINGLE_BUFF_SIZE)
  134. /* Used for negotiating */
  135. #define RX_BUF_RESOURCE_LOWER_BOUND (20)
  136. #define RX_BUF_RESOURCE_UPPER_BOUND (80) /* Should be more than 2*RX_BUF_RESOURCE_OCCUPY_CNT */
  137. #define RX_BUF_RESOURCE_OCCUPY_CNT (20) /* ((RX_BUF_RESOURCE_UPPER_BOUND - RX_BUF_RESOURCE_LOWER_BOUND)/2 ) */
  138. struct dbg_info_ccmni_t {
  139. unsigned port;
  140. unsigned avai_in_no;
  141. unsigned avai_out_no;
  142. unsigned read_out_no;
  143. };
  144. #define CCMNI_BUFF_DBG_INFO_SIZE (sizeof(struct dbg_info_ccmni_t))
  145. #define CCMNI_BUFF_HEADER_SIZE (4)
  146. #define CCMNI_BUFF_FOOTER_SIZE (4)
  147. #define CCMNI_BUFF_HEADER (0xE1E1E1E1)
  148. #define CCMNI_BUFF_FOOTER (0xE2E2E2E2)
  149. #define CCMNI_DATA_END (0xE3)
  150. struct q_ringbuf_ccmni_t {
  151. unsigned char *ptr;
  152. unsigned len;
  153. };
  154. struct buffer_control_ccmni_t {
  155. unsigned avai_in;
  156. unsigned avai_out;
  157. unsigned read_out;
  158. unsigned q_length; /* default 256 for Rx */
  159. };
  160. struct shared_mem_ccmni_t {
  161. struct buffer_control_ccmni_t rx_control; /* Down Llink */
  162. struct q_ringbuf_ccmni_t q_rx_ringbuff[CCMNI_CTRL_Q_RX_SIZE]; /* Down Link, default 256 */
  163. struct buffer_control_ccmni_t tx_control; /* Up Link */
  164. struct q_ringbuf_ccmni_t q_tx_ringbuff[CCMNI_CTRL_Q_TX_SIZE]; /* Up Link, default 64 */
  165. };
  166. #define CCCI_CCMNI_SMEM_SIZE (sizeof(struct shared_mem_ccmni_t))
  167. #define CCMNI_DL_CTRL_MEM_SIZE ((sizeof(struct buffer_control_ccmni_t))\
  168. + (CCMNI_CTRL_Q_RX_SIZE * (sizeof(struct q_ringbuf_ccmni_t))))
  169. #define CCMNI_UL_CTRL_MEM_SIZE ((sizeof(struct buffer_control_ccmni_t))\
  170. + (CCMNI_CTRL_Q_TX_SIZE * (sizeof(struct q_ringbuf_ccmni_t))))
  171. extern int is_mac_addr_duplicate(char *mac);
  172. extern void *ccmni_ctl_block[];
  173. #endif /* __CCCI_CCMNI_H__ */