fw_qos.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*
  2. * Copyright (c) 2004, 2005 Topspin Communications. All rights reserved.
  3. * Copyright (c) 2005, 2006, 2007, 2008 Mellanox Technologies.
  4. * All rights reserved.
  5. *
  6. * This software is available to you under a choice of one of two
  7. * licenses. You may choose to be licensed under the terms of the GNU
  8. * General Public License (GPL) Version 2, available from the file
  9. * COPYING in the main directory of this source tree, or the
  10. * OpenIB.org BSD license below:
  11. *
  12. * Redistribution and use in source and binary forms, with or
  13. * without modification, are permitted provided that the following
  14. * conditions are met:
  15. *
  16. * - Redistributions of source code must retain the above
  17. * copyright notice, this list of conditions and the following
  18. * disclaimer.
  19. *
  20. * - Redistributions in binary form must reproduce the above
  21. * copyright notice, this list of conditions and the following
  22. * disclaimer in the documentation and/or other materials
  23. * provided with the distribution.
  24. *
  25. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  26. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  27. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  28. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  29. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  30. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  31. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  32. * SOFTWARE.
  33. */
  34. #ifndef MLX4_FW_QOS_H
  35. #define MLX4_FW_QOS_H
  36. #include <linux/mlx4/cmd.h>
  37. #include <linux/mlx4/device.h>
  38. #define MLX4_NUM_UP 8
  39. #define MLX4_NUM_TC 8
  40. /* Default supported priorities for VPP allocation */
  41. #define MLX4_DEFAULT_QOS_PRIO (0)
  42. /* Derived from FW feature definition, 0 is the default vport fo all QPs */
  43. #define MLX4_VPP_DEFAULT_VPORT (0)
  44. struct mlx4_vport_qos_param {
  45. u32 bw_share;
  46. u32 max_avg_bw;
  47. u8 enable;
  48. };
  49. /**
  50. * mlx4_SET_PORT_PRIO2TC - This routine maps user priorities to traffic
  51. * classes of a given port and device.
  52. *
  53. * @dev: mlx4_dev.
  54. * @port: Physical port number.
  55. * @prio2tc: Array of TC associated with each priorities.
  56. *
  57. * Returns 0 on success or a negative mlx4_core errno code.
  58. **/
  59. int mlx4_SET_PORT_PRIO2TC(struct mlx4_dev *dev, u8 port, u8 *prio2tc);
  60. /**
  61. * mlx4_SET_PORT_SCHEDULER - This routine configures the arbitration between
  62. * traffic classes (ETS) and configured rate limit for traffic classes.
  63. * tc_tx_bw, pg and ratelimit are arrays where each index represents a TC.
  64. * The description for those parameters below refers to a single TC.
  65. *
  66. * @dev: mlx4_dev.
  67. * @port: Physical port number.
  68. * @tc_tx_bw: The percentage of the bandwidth allocated for traffic class
  69. * within a TC group. The sum of the bw_percentage of all the traffic
  70. * classes within a TC group must equal 100% for correct operation.
  71. * @pg: The TC group the traffic class is associated with.
  72. * @ratelimit: The maximal bandwidth allowed for the use by this traffic class.
  73. *
  74. * Returns 0 on success or a negative mlx4_core errno code.
  75. **/
  76. int mlx4_SET_PORT_SCHEDULER(struct mlx4_dev *dev, u8 port, u8 *tc_tx_bw,
  77. u8 *pg, u16 *ratelimit);
  78. /**
  79. * mlx4_ALLOCATE_VPP_get - Query port VPP available resources and allocation.
  80. * Before distribution of VPPs to priorities, only available_vpp is returned.
  81. * After initialization it returns the distribution of VPPs among priorities.
  82. *
  83. * @dev: mlx4_dev.
  84. * @port: Physical port number.
  85. * @available_vpp: Pointer to variable where number of available VPPs is stored
  86. * @vpp_p_up: Distribution of VPPs to priorities is stored in this array
  87. *
  88. * Returns 0 on success or a negative mlx4_core errno code.
  89. **/
  90. int mlx4_ALLOCATE_VPP_get(struct mlx4_dev *dev, u8 port,
  91. u16 *available_vpp, u8 *vpp_p_up);
  92. /**
  93. * mlx4_ALLOCATE_VPP_set - Distribution of VPPs among differnt priorities.
  94. * The total number of VPPs assigned to all for a port must not exceed
  95. * the value reported by available_vpp in mlx4_ALLOCATE_VPP_get.
  96. * VPP allocation is allowed only after the port type has been set,
  97. * and while no QPs are open for this port.
  98. *
  99. * @dev: mlx4_dev.
  100. * @port: Physical port number.
  101. * @vpp_p_up: Allocation of VPPs to different priorities.
  102. *
  103. * Returns 0 on success or a negative mlx4_core errno code.
  104. **/
  105. int mlx4_ALLOCATE_VPP_set(struct mlx4_dev *dev, u8 port, u8 *vpp_p_up);
  106. /**
  107. * mlx4_SET_VPORT_QOS_get - Query QoS proporties of a Vport.
  108. * Each priority allowed for the Vport is assigned with a share of the BW,
  109. * and a BW limitation. This commands query the current QoS values.
  110. *
  111. * @dev: mlx4_dev.
  112. * @port: Physical port number.
  113. * @vport: Vport id.
  114. * @out_param: Array of mlx4_vport_qos_param that will contain the values.
  115. *
  116. * Returns 0 on success or a negative mlx4_core errno code.
  117. **/
  118. int mlx4_SET_VPORT_QOS_get(struct mlx4_dev *dev, u8 port, u8 vport,
  119. struct mlx4_vport_qos_param *out_param);
  120. /**
  121. * mlx4_SET_VPORT_QOS_set - Set QoS proporties of a Vport.
  122. * QoS parameters can be modified at any time, but must be initialized
  123. * before any QP is associated with the VPort.
  124. *
  125. * @dev: mlx4_dev.
  126. * @port: Physical port number.
  127. * @vport: Vport id.
  128. * @out_param: Array of mlx4_vport_qos_param which holds the requested values.
  129. *
  130. * Returns 0 on success or a negative mlx4_core errno code.
  131. **/
  132. int mlx4_SET_VPORT_QOS_set(struct mlx4_dev *dev, u8 port, u8 vport,
  133. struct mlx4_vport_qos_param *in_param);
  134. #endif /* MLX4_FW_QOS_H */