vnic_dev.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright 2008 Cisco Systems, Inc. All rights reserved.
  4. * Copyright 2007 Nuova Systems, Inc. All rights reserved.
  5. */
  6. #ifndef _VNIC_DEV_H_
  7. #define _VNIC_DEV_H_
  8. #include "vnic_resource.h"
  9. #include "vnic_devcmd.h"
  10. /*
  11. * These defines avoid symbol clash between fnic and enic (Cisco 10G Eth
  12. * Driver) when both are built with CONFIG options =y
  13. */
  14. #define vnic_dev_priv fnic_dev_priv
  15. #define vnic_dev_get_res_count fnic_dev_get_res_count
  16. #define vnic_dev_get_res fnic_dev_get_res
  17. #define vnic_dev_desc_ring_size fnic_dev_desc_ring_siz
  18. #define vnic_dev_clear_desc_ring fnic_dev_clear_desc_ring
  19. #define vnic_dev_alloc_desc_ring fnic_dev_alloc_desc_ring
  20. #define vnic_dev_free_desc_ring fnic_dev_free_desc_ring
  21. #define vnic_dev_cmd fnic_dev_cmd
  22. #define vnic_dev_fw_info fnic_dev_fw_info
  23. #define vnic_dev_spec fnic_dev_spec
  24. #define vnic_dev_stats_clear fnic_dev_stats_clear
  25. #define vnic_dev_cmd_init fnic_dev_cmd_init
  26. #define vnic_dev_stats_dump fnic_dev_stats_dump
  27. #define vnic_dev_hang_notify fnic_dev_hang_notify
  28. #define vnic_dev_packet_filter fnic_dev_packet_filter
  29. #define vnic_dev_add_addr fnic_dev_add_addr
  30. #define vnic_dev_del_addr fnic_dev_del_addr
  31. #define vnic_dev_mac_addr fnic_dev_mac_addr
  32. #define vnic_dev_notify_set fnic_dev_notify_set
  33. #define vnic_dev_notify_unset fnic_dev_notify_unset
  34. #define vnic_dev_link_status fnic_dev_link_status
  35. #define vnic_dev_port_speed fnic_dev_port_speed
  36. #define vnic_dev_msg_lvl fnic_dev_msg_lvl
  37. #define vnic_dev_mtu fnic_dev_mtu
  38. #define vnic_dev_link_down_cnt fnic_dev_link_down_cnt
  39. #define vnic_dev_close fnic_dev_close
  40. #define vnic_dev_enable fnic_dev_enable
  41. #define vnic_dev_disable fnic_dev_disable
  42. #define vnic_dev_open fnic_dev_open
  43. #define vnic_dev_open_done fnic_dev_open_done
  44. #define vnic_dev_init fnic_dev_init
  45. #define vnic_dev_soft_reset fnic_dev_soft_reset
  46. #define vnic_dev_soft_reset_done fnic_dev_soft_reset_done
  47. #define vnic_dev_set_intr_mode fnic_dev_set_intr_mode
  48. #define vnic_dev_get_intr_mode fnic_dev_get_intr_mode
  49. #define vnic_dev_unregister fnic_dev_unregister
  50. #define vnic_dev_register fnic_dev_register
  51. #ifndef VNIC_PADDR_TARGET
  52. #define VNIC_PADDR_TARGET 0x0000000000000000ULL
  53. #endif
  54. #ifndef readq
  55. static inline u64 readq(void __iomem *reg)
  56. {
  57. return ((u64)readl(reg + 0x4UL) << 32) | (u64)readl(reg);
  58. }
  59. static inline void writeq(u64 val, void __iomem *reg)
  60. {
  61. writel(val & 0xffffffff, reg);
  62. writel(val >> 32, reg + 0x4UL);
  63. }
  64. #endif
  65. enum vnic_dev_intr_mode {
  66. VNIC_DEV_INTR_MODE_UNKNOWN,
  67. VNIC_DEV_INTR_MODE_INTX,
  68. VNIC_DEV_INTR_MODE_MSI,
  69. VNIC_DEV_INTR_MODE_MSIX,
  70. };
  71. struct vnic_dev_bar {
  72. void __iomem *vaddr;
  73. dma_addr_t bus_addr;
  74. unsigned long len;
  75. };
  76. struct vnic_dev_ring {
  77. void *descs;
  78. size_t size;
  79. dma_addr_t base_addr;
  80. size_t base_align;
  81. void *descs_unaligned;
  82. size_t size_unaligned;
  83. dma_addr_t base_addr_unaligned;
  84. unsigned int desc_size;
  85. unsigned int desc_count;
  86. unsigned int desc_avail;
  87. };
  88. struct vnic_dev;
  89. struct vnic_stats;
  90. void *vnic_dev_priv(struct vnic_dev *vdev);
  91. unsigned int vnic_dev_get_res_count(struct vnic_dev *vdev,
  92. enum vnic_res_type type);
  93. void __iomem *vnic_dev_get_res(struct vnic_dev *vdev, enum vnic_res_type type,
  94. unsigned int index);
  95. unsigned int vnic_dev_desc_ring_size(struct vnic_dev_ring *ring,
  96. unsigned int desc_count,
  97. unsigned int desc_size);
  98. void vnic_dev_clear_desc_ring(struct vnic_dev_ring *ring);
  99. int vnic_dev_alloc_desc_ring(struct vnic_dev *vdev, struct vnic_dev_ring *ring,
  100. unsigned int desc_count, unsigned int desc_size);
  101. void vnic_dev_free_desc_ring(struct vnic_dev *vdev,
  102. struct vnic_dev_ring *ring);
  103. int vnic_dev_cmd(struct vnic_dev *vdev, enum vnic_devcmd_cmd cmd,
  104. u64 *a0, u64 *a1, int wait);
  105. int vnic_dev_fw_info(struct vnic_dev *vdev,
  106. struct vnic_devcmd_fw_info **fw_info);
  107. int vnic_dev_spec(struct vnic_dev *vdev, unsigned int offset,
  108. unsigned int size, void *value);
  109. int vnic_dev_stats_clear(struct vnic_dev *vdev);
  110. int vnic_dev_cmd_init(struct vnic_dev *vdev);
  111. int vnic_dev_stats_dump(struct vnic_dev *vdev, struct vnic_stats **stats);
  112. int vnic_dev_hang_notify(struct vnic_dev *vdev);
  113. void vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
  114. int broadcast, int promisc, int allmulti);
  115. void vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr);
  116. void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr);
  117. int vnic_dev_mac_addr(struct vnic_dev *vdev, u8 *mac_addr);
  118. int vnic_dev_notify_set(struct vnic_dev *vdev, u16 intr);
  119. void vnic_dev_notify_unset(struct vnic_dev *vdev);
  120. int vnic_dev_link_status(struct vnic_dev *vdev);
  121. u32 vnic_dev_port_speed(struct vnic_dev *vdev);
  122. u32 vnic_dev_msg_lvl(struct vnic_dev *vdev);
  123. u32 vnic_dev_mtu(struct vnic_dev *vdev);
  124. u32 vnic_dev_link_down_cnt(struct vnic_dev *vdev);
  125. int vnic_dev_close(struct vnic_dev *vdev);
  126. int vnic_dev_enable(struct vnic_dev *vdev);
  127. int vnic_dev_disable(struct vnic_dev *vdev);
  128. int vnic_dev_open(struct vnic_dev *vdev, int arg);
  129. int vnic_dev_open_done(struct vnic_dev *vdev, int *done);
  130. int vnic_dev_init(struct vnic_dev *vdev, int arg);
  131. u16 vnic_dev_set_default_vlan(struct vnic_dev *vdev,
  132. u16 new_default_vlan);
  133. int vnic_dev_soft_reset(struct vnic_dev *vdev, int arg);
  134. int vnic_dev_soft_reset_done(struct vnic_dev *vdev, int *done);
  135. void vnic_dev_set_intr_mode(struct vnic_dev *vdev,
  136. enum vnic_dev_intr_mode intr_mode);
  137. enum vnic_dev_intr_mode vnic_dev_get_intr_mode(struct vnic_dev *vdev);
  138. void vnic_dev_unregister(struct vnic_dev *vdev);
  139. struct vnic_dev *vnic_dev_register(struct vnic_dev *vdev,
  140. void *priv, struct pci_dev *pdev,
  141. struct vnic_dev_bar *bar);
  142. #endif /* _VNIC_DEV_H_ */