#ifndef NODNIC_PORT_H_ #define NODNIC_PORT_H_ /* * Copyright (C) 2015 Mellanox Technologies Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ FILE_LICENCE ( GPL2_OR_LATER ); #include "mlx_nodnic_data_structures.h" #define NODNIC_PORT_MAC_FILTERS_OFFSET 0x10 typedef enum { nodnic_port_option_link_type = 0, nodnic_port_option_mac_low, nodnic_port_option_mac_high, nodnic_port_option_log_cq_size, nodnic_port_option_reset_needed, nodnic_port_option_mac_filters_en, nodnic_port_option_port_state, nodnic_port_option_network_en, nodnic_port_option_dma_en, nodnic_port_option_eq_addr_low, nodnic_port_option_eq_addr_high, nodnic_port_option_cq_addr_low, nodnic_port_option_cq_addr_high, nodnic_port_option_port_management_change_event, nodnic_port_option_port_promisc_en, nodnic_port_option_arm_cq, nodnic_port_option_port_promisc_multicast_en, #ifdef DEVICE_CX3 nodnic_port_option_crspace_en, #endif nodnic_port_option_send_ring0_uar_index, nodnic_port_option_send_ring1_uar_index, nodnic_port_option_cq_n_index, }nodnic_port_option; struct nodnic_port_data_entry{ nodnic_port_option option; mlx_uint32 offset; mlx_uint8 align; mlx_uint32 mask; }; struct nodnic_qp_data_entry{ nodnic_queue_pair_type type; mlx_uint32 send_offset; mlx_uint32 recv_offset; }; typedef enum { nodnic_port_state_down = 0, nodnic_port_state_initialize, nodnic_port_state_armed, nodnic_port_state_active, }nodnic_port_state; mlx_status nodnic_port_get_state( IN nodnic_port_priv *port_priv, OUT nodnic_port_state *state ); mlx_status nodnic_port_get_type( IN nodnic_port_priv *port_priv, OUT nodnic_port_type *type ); mlx_status nodnic_port_query( IN nodnic_port_priv *port_priv, IN nodnic_port_option option, OUT mlx_uint32 *out ); mlx_status nodnic_port_set( IN nodnic_port_priv *port_priv, IN nodnic_port_option option, IN mlx_uint32 in ); mlx_status nodnic_port_create_cq( IN nodnic_port_priv *port_priv, IN mlx_size cq_size, OUT nodnic_cq **cq ); mlx_status nodnic_port_destroy_cq( IN nodnic_port_priv *port_priv, IN nodnic_cq *cq ); mlx_status nodnic_port_create_qp( IN nodnic_port_priv *port_priv, IN nodnic_queue_pair_type type, IN mlx_size send_wq_size, IN mlx_uint32 send_wqe_num, IN mlx_size receive_wq_size, IN mlx_uint32 recv_wqe_num, OUT nodnic_qp **qp ); mlx_status nodnic_port_destroy_qp( IN nodnic_port_priv *port_priv, IN nodnic_queue_pair_type type, IN nodnic_qp *qp ); mlx_status nodnic_port_get_qpn( IN nodnic_port_priv *port_priv, IN struct nodnic_ring *ring, OUT mlx_uint32 *qpn ); mlx_status nodnic_port_update_ring_doorbell( IN nodnic_port_priv *port_priv, IN struct nodnic_ring *ring, IN mlx_uint16 index ); mlx_status nodnic_port_get_cq_size( IN nodnic_port_priv *port_priv, OUT mlx_uint64 *cq_size ); mlx_status nodnic_port_allocate_eq( IN nodnic_port_priv *port_priv, IN mlx_uint8 log_eq_size ); mlx_status nodnic_port_free_eq( IN nodnic_port_priv *port_priv ); mlx_status nodnic_port_add_mac_filter( IN nodnic_port_priv *port_priv, IN mlx_mac_address mac ); mlx_status nodnic_port_remove_mac_filter( IN nodnic_port_priv *port_priv, IN mlx_mac_address mac ); mlx_status nodnic_port_add_mgid_filter( IN nodnic_port_priv *port_priv, IN mlx_mac_address mac ); mlx_status nodnic_port_remove_mgid_filter( IN nodnic_port_priv *port_priv, IN mlx_mac_address mac ); mlx_status nodnic_port_thin_init( IN nodnic_device_priv *device_priv, IN nodnic_port_priv *port_priv, IN mlx_uint8 port_index ); mlx_status nodnic_port_set_promisc( IN nodnic_port_priv *port_priv, IN mlx_boolean value ); mlx_status nodnic_port_set_promisc_multicast( IN nodnic_port_priv *port_priv, IN mlx_boolean value ); mlx_status nodnic_port_init( IN nodnic_port_priv *port_priv ); mlx_status nodnic_port_close( IN nodnic_port_priv *port_priv ); mlx_status nodnic_port_enable_dma( IN nodnic_port_priv *port_priv ); mlx_status nodnic_port_disable_dma( IN nodnic_port_priv *port_priv ); mlx_status nodnic_port_read_reset_needed( IN nodnic_port_priv *port_priv, OUT mlx_boolean *reset_needed ); mlx_status nodnic_port_read_port_management_change_event( IN nodnic_port_priv *port_priv, OUT mlx_boolean *change_event ); mlx_status nodnic_port_set_send_uar_offset( IN nodnic_port_priv *port_priv ); mlx_status nodnic_port_update_tx_db_func( IN nodnic_device_priv *device_priv, IN nodnic_port_priv *port_priv ); #endif /* STUB_NODNIC_PORT_H_ */