Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. /*
  2. * vxge-main.h: iPXE driver for Neterion Inc's X3100 Series 10GbE
  3. * PCIe I/O Virtualized Server Adapter.
  4. *
  5. * Copyright(c) 2002-2010 Neterion Inc.
  6. *
  7. * This software may be used and distributed according to the terms of
  8. * the GNU General Public License (GPL), incorporated herein by
  9. * reference. Drivers based on or derived from this code fall under
  10. * the GPL and must retain the authorship, copyright and license
  11. * notice.
  12. *
  13. */
  14. FILE_LICENCE(GPL2_ONLY);
  15. #ifndef VXGE_MAIN_H
  16. #define VXGE_MAIN_H
  17. #include <unistd.h>
  18. #include "vxge_traffic.h"
  19. #include "vxge_config.h"
  20. #define VXGE_DRIVER_NAME "vxge"
  21. #define VXGE_DRIVER_VENDOR "Neterion, Inc"
  22. #ifndef PCI_VENDOR_ID_S2IO
  23. #define PCI_VENDOR_ID_S2IO 0x17D5
  24. #endif
  25. #ifndef PCI_DEVICE_ID_TITAN_WIN
  26. #define PCI_DEVICE_ID_TITAN_WIN 0x5733
  27. #endif
  28. #ifndef PCI_DEVICE_ID_TITAN_UNI
  29. #define PCI_DEVICE_ID_TITAN_UNI 0x5833
  30. #endif
  31. #define VXGE_HW_TITAN1_PCI_REVISION 1
  32. #define VXGE_HW_TITAN1A_PCI_REVISION 2
  33. #define VXGE_HP_ISS_SUBSYS_VENDORID 0x103C
  34. #define VXGE_HP_ISS_SUBSYS_DEVICEID_1 0x323B
  35. #define VXGE_HP_ISS_SUBSYS_DEVICEID_2 0x323C
  36. #define VXGE_USE_DEFAULT 0xffffffff
  37. #define VXGE_HW_VPATH_MSIX_ACTIVE 4
  38. #define VXGE_ALARM_MSIX_ID 2
  39. #define VXGE_HW_RXSYNC_FREQ_CNT 4
  40. #define VXGE_LL_RX_COPY_THRESHOLD 256
  41. #define VXGE_DEF_FIFO_LENGTH 84
  42. #define NO_STEERING 0
  43. #define PORT_STEERING 0x1
  44. #define RTH_TCP_UDP_STEERING 0x2
  45. #define RTH_IPV4_STEERING 0x3
  46. #define RTH_IPV6_EX_STEERING 0x4
  47. #define RTH_BUCKET_SIZE 8
  48. #define TX_PRIORITY_STEERING 1
  49. #define TX_VLAN_STEERING 2
  50. #define TX_PORT_STEERING 3
  51. #define TX_MULTIQ_STEERING 4
  52. #define VXGE_HW_PROM_MODE_ENABLE 1
  53. #define VXGE_HW_PROM_MODE_DISABLE 0
  54. #define VXGE_HW_FW_UPGRADE_DISABLE 0
  55. #define VXGE_HW_FW_UPGRADE_ALL 1
  56. #define VXGE_HW_FW_UPGRADE_FORCE 2
  57. #define VXGE_HW_FUNC_MODE_DISABLE 0
  58. #define VXGE_TTI_BTIMER_VAL 250000
  59. #define VXGE_T1A_TTI_LTIMER_VAL 80
  60. #define VXGE_T1A_TTI_RTIMER_VAL 400
  61. #define VXGE_TTI_LTIMER_VAL 1000
  62. #define VXGE_TTI_RTIMER_VAL 0
  63. #define VXGE_RTI_BTIMER_VAL 250
  64. #define VXGE_RTI_LTIMER_VAL 100
  65. #define VXGE_RTI_RTIMER_VAL 0
  66. #define VXGE_FIFO_INDICATE_MAX_PKTS VXGE_DEF_FIFO_LENGTH
  67. #define VXGE_ISR_POLLING_CNT 8
  68. #define VXGE_MAX_CONFIG_DEV 0xFF
  69. #define VXGE_EXEC_MODE_DISABLE 0
  70. #define VXGE_EXEC_MODE_ENABLE 1
  71. #define VXGE_MAX_CONFIG_PORT 1
  72. #define VXGE_ALL_VID_DISABLE 0
  73. #define VXGE_ALL_VID_ENABLE 1
  74. #define VXGE_PAUSE_CTRL_DISABLE 0
  75. #define VXGE_PAUSE_CTRL_ENABLE 1
  76. #define TTI_TX_URANGE_A 5
  77. #define TTI_TX_URANGE_B 15
  78. #define TTI_TX_URANGE_C 40
  79. #define TTI_TX_UFC_A 5
  80. #define TTI_TX_UFC_B 40
  81. #define TTI_TX_UFC_C 60
  82. #define TTI_TX_UFC_D 100
  83. #define TTI_T1A_TX_UFC_A 30
  84. #define TTI_T1A_TX_UFC_B 80
  85. /* Slope - (max_mtu - min_mtu)/(max_mtu_ufc - min_mtu_ufc) */
  86. /* Slope - 93 */
  87. /* 60 - 9k Mtu, 140 - 1.5k mtu */
  88. #define TTI_T1A_TX_UFC_C(mtu) (60 + ((VXGE_HW_MAX_MTU - mtu)/93))
  89. /* Slope - 37 */
  90. /* 100 - 9k Mtu, 300 - 1.5k mtu */
  91. #define TTI_T1A_TX_UFC_D(mtu) (100 + ((VXGE_HW_MAX_MTU - mtu)/37))
  92. #define RTI_RX_URANGE_A 5
  93. #define RTI_RX_URANGE_B 15
  94. #define RTI_RX_URANGE_C 40
  95. #define RTI_T1A_RX_URANGE_A 1
  96. #define RTI_T1A_RX_URANGE_B 20
  97. #define RTI_T1A_RX_URANGE_C 50
  98. #define RTI_RX_UFC_A 1
  99. #define RTI_RX_UFC_B 5
  100. #define RTI_RX_UFC_C 10
  101. #define RTI_RX_UFC_D 15
  102. #define RTI_T1A_RX_UFC_B 20
  103. #define RTI_T1A_RX_UFC_C 50
  104. #define RTI_T1A_RX_UFC_D 60
  105. /*
  106. * The interrupt rate is maintained at 3k per second with the moderation
  107. * parameters for most traffics but not all. This is the maximum interrupt
  108. * count per allowed per function with INTA or per vector in the case of in a
  109. * MSI-X 10 millisecond time period. Enabled only for Titan 1A.
  110. */
  111. #define VXGE_T1A_MAX_INTERRUPT_COUNT 100
  112. #define VXGE_ENABLE_NAPI 1
  113. #define VXGE_DISABLE_NAPI 0
  114. #define VXGE_LRO_MAX_BYTES 0x4000
  115. #define VXGE_T1A_LRO_MAX_BYTES 0xC000
  116. #define VXGE_HW_MIN_VPATH_TX_BW_SUPPORT 0
  117. #define VXGE_HW_MAX_VPATH_TX_BW_SUPPORT 7
  118. /* Milli secs timer period */
  119. #define VXGE_TIMER_DELAY 10000
  120. #define VXGE_TIMER_COUNT (2 * 60)
  121. #define VXGE_LL_MAX_FRAME_SIZE(dev) ((dev)->mtu + VXGE_HW_MAC_HEADER_MAX_SIZE)
  122. #define VXGE_REG_DUMP_BUFSIZE 65000
  123. #define is_mf(function_mode) \
  124. ((function_mode == VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION) || \
  125. (function_mode == VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION_17) || \
  126. (function_mode == VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION_2) || \
  127. (function_mode == VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION_4))
  128. #define is_titan1(dev_id, rev) (((dev_id == PCI_DEVICE_ID_TITAN_UNI) || \
  129. (dev_id == PCI_DEVICE_ID_TITAN_WIN)) && \
  130. (rev == VXGE_HW_TITAN1_PCI_REVISION))
  131. /* These flags represent the devices temporary state */
  132. #define __VXGE_STATE_RESET_CARD 0x01
  133. #define __VXGE_STATE_CARD_UP 0x02
  134. #define test_bit(bit, loc) ((bit) & (loc))
  135. #define set_bit(bit, loc) do { (loc) |= (bit); } while (0);
  136. #define clear_bit(bit, loc) do { (loc) &= ~(bit); } while (0);
  137. #define msleep(n) mdelay(n)
  138. struct vxge_fifo {
  139. struct net_device *ndev;
  140. struct pci_device *pdev;
  141. struct __vxge_hw_fifo *fifoh;
  142. };
  143. struct vxge_ring {
  144. struct net_device *ndev;
  145. struct pci_device *pdev;
  146. struct __vxge_hw_ring *ringh;
  147. };
  148. struct vxge_vpath {
  149. struct vxge_fifo fifo;
  150. struct vxge_ring ring;
  151. /* Actual vpath id for this vpath in the device - 0 to 16 */
  152. int device_id;
  153. int is_open;
  154. int vp_open;
  155. u8 (macaddr)[ETH_ALEN];
  156. u8 (macmask)[ETH_ALEN];
  157. struct vxgedev *vdev;
  158. struct __vxge_hw_virtualpath *vpathh;
  159. };
  160. struct vxgedev {
  161. struct net_device *ndev;
  162. struct pci_device *pdev;
  163. struct __vxge_hw_device *devh;
  164. u8 titan1;
  165. unsigned long state;
  166. struct vxge_vpath vpath;
  167. void __iomem *bar0;
  168. int mtu;
  169. char fw_version[VXGE_HW_FW_STRLEN];
  170. };
  171. void vxge_vpath_intr_enable(struct vxgedev *vdev, int vp_id);
  172. void vxge_vpath_intr_disable(struct vxgedev *vdev, int vp_id);
  173. int vxge_reset(struct vxgedev *vdev);
  174. enum vxge_hw_status
  175. vxge_xmit_compl(struct __vxge_hw_fifo *fifo_hw,
  176. struct vxge_hw_fifo_txd *txdp, enum vxge_hw_fifo_tcode tcode);
  177. void vxge_close_vpaths(struct vxgedev *vdev);
  178. int vxge_open_vpaths(struct vxgedev *vdev);
  179. enum vxge_hw_status vxge_reset_all_vpaths(struct vxgedev *vdev);
  180. #endif