10696d608SHuy Nguyen /* 20696d608SHuy Nguyen * Copyright (c) 2018, Mellanox Technologies. All rights reserved. 30696d608SHuy Nguyen * 40696d608SHuy Nguyen * This software is available to you under a choice of one of two 50696d608SHuy Nguyen * licenses. You may choose to be licensed under the terms of the GNU 60696d608SHuy Nguyen * General Public License (GPL) Version 2, available from the file 70696d608SHuy Nguyen * COPYING in the main directory of this source tree, or the 80696d608SHuy Nguyen * OpenIB.org BSD license below: 90696d608SHuy Nguyen * 100696d608SHuy Nguyen * Redistribution and use in source and binary forms, with or 110696d608SHuy Nguyen * without modification, are permitted provided that the following 120696d608SHuy Nguyen * conditions are met: 130696d608SHuy Nguyen * 140696d608SHuy Nguyen * - Redistributions of source code must retain the above 150696d608SHuy Nguyen * copyright notice, this list of conditions and the following 160696d608SHuy Nguyen * disclaimer. 170696d608SHuy Nguyen * 180696d608SHuy Nguyen * - Redistributions in binary form must reproduce the above 190696d608SHuy Nguyen * copyright notice, this list of conditions and the following 200696d608SHuy Nguyen * disclaimer in the documentation and/or other materials 210696d608SHuy Nguyen * provided with the distribution. 220696d608SHuy Nguyen * 230696d608SHuy Nguyen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 240696d608SHuy Nguyen * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 250696d608SHuy Nguyen * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 260696d608SHuy Nguyen * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 270696d608SHuy Nguyen * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 280696d608SHuy Nguyen * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 290696d608SHuy Nguyen * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 300696d608SHuy Nguyen * SOFTWARE. 310696d608SHuy Nguyen */ 320696d608SHuy Nguyen #ifndef __MLX5_EN_PORT_BUFFER_H__ 330696d608SHuy Nguyen #define __MLX5_EN_PORT_BUFFER_H__ 340696d608SHuy Nguyen 350696d608SHuy Nguyen #include "en.h" 360696d608SHuy Nguyen #include "port.h" 370696d608SHuy Nguyen 38*81fe2be0SMaher Sanalla #define MLX5E_MAX_NETWORK_BUFFER 8 39*81fe2be0SMaher Sanalla #define MLX5E_TOTAL_BUFFERS 10 400696d608SHuy Nguyen #define MLX5E_DEFAULT_CABLE_LEN 7 /* 7 meters */ 410696d608SHuy Nguyen 420696d608SHuy Nguyen #define MLX5_BUFFER_SUPPORTED(mdev) (MLX5_CAP_GEN(mdev, pcam_reg) && \ 430696d608SHuy Nguyen MLX5_CAP_PCAM_REG(mdev, pbmc) && \ 440696d608SHuy Nguyen MLX5_CAP_PCAM_REG(mdev, pptb)) 450696d608SHuy Nguyen 460696d608SHuy Nguyen enum { 470696d608SHuy Nguyen MLX5E_PORT_BUFFER_CABLE_LEN = BIT(0), 480696d608SHuy Nguyen MLX5E_PORT_BUFFER_PFC = BIT(1), 490696d608SHuy Nguyen MLX5E_PORT_BUFFER_PRIO2BUFFER = BIT(2), 500696d608SHuy Nguyen MLX5E_PORT_BUFFER_SIZE = BIT(3), 510696d608SHuy Nguyen }; 520696d608SHuy Nguyen 530696d608SHuy Nguyen struct mlx5e_bufferx_reg { 540696d608SHuy Nguyen u8 lossy; 550696d608SHuy Nguyen u8 epsb; 560696d608SHuy Nguyen u32 size; 570696d608SHuy Nguyen u32 xoff; 580696d608SHuy Nguyen u32 xon; 590696d608SHuy Nguyen }; 600696d608SHuy Nguyen 610696d608SHuy Nguyen struct mlx5e_port_buffer { 620696d608SHuy Nguyen u32 port_buffer_size; 630696d608SHuy Nguyen u32 spare_buffer_size; 64*81fe2be0SMaher Sanalla u32 headroom_size; /* Buffers 0-7 */ 65*81fe2be0SMaher Sanalla u32 internal_buffers_size; /* Buffers 8-9 */ 66*81fe2be0SMaher Sanalla struct mlx5e_bufferx_reg buffer[MLX5E_MAX_NETWORK_BUFFER]; 670696d608SHuy Nguyen }; 680696d608SHuy Nguyen 690696d608SHuy Nguyen int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv, 700696d608SHuy Nguyen u32 change, unsigned int mtu, 710696d608SHuy Nguyen struct ieee_pfc *pfc, 720696d608SHuy Nguyen u32 *buffer_size, 730696d608SHuy Nguyen u8 *prio2buffer); 740696d608SHuy Nguyen 750696d608SHuy Nguyen int mlx5e_port_query_buffer(struct mlx5e_priv *priv, 760696d608SHuy Nguyen struct mlx5e_port_buffer *port_buffer); 770696d608SHuy Nguyen #endif 78