freebsd-src/sys/dev/vxge/vxgehal/vxgehal-virtualpath.h
George V. Neville-Neil 548d35fd69 Exar driver for X3100 10GbE Server/Storage adapters
Features: Jumbo frames (up to 9600), LRO (Large Receive Offload),
          TSO (TCP segmentation offload), RTH (Receive Traffic Hash).

Submitted by: Sriram Rapuru at Exar
MFC after:	2 weeks
2011-04-28 14:33:15 +00:00

426 lines
11 KiB
C

/*-
* Copyright(c) 2002-2011 Exar Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification are permitted provided the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the Exar Corporation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*$FreeBSD$*/
#ifndef VXGE_HAL_VIRTUALPATH_H
#define VXGE_HAL_VIRTUALPATH_H
__EXTERN_BEGIN_DECLS
struct __hal_device_t;
/*
* struct __hal_virtualpath_t - Virtual Path
*
* @vp_id: Virtual path id
* @vp_open: This flag specifies if vxge_hal_vp_open is called from LL Driver
* @hldev: Hal device
* @vp_config: Virtual Path Config
* @vp_reg: VPATH Register map address in BAR0
* @vpmgmt_reg: VPATH_MGMT register map address
* @is_first_vpath: 1 if this first vpath in this vfunc, 0 otherwise
* @promisc_en: Promisc mode state flag.
* @min_bandwidth: Guaranteed Band Width in Mbps
* @max_bandwidth: Maximum Band Width in Mbps
* @max_mtu: Max mtu that can be supported
* @sess_grps_available: The mask of available session groups for this vpath
* @bmap_root_assigned: The bitmap root for this vpath
* @vsport_choices: The mask of vsports that are available for this vpath
* @vsport_number: vsport attached to this vpath
* @sess_grp_start: Session oid start
* @sess_grp_end: session oid end
* @max_kdfc_db: Maximum kernel mode doorbells
* @max_nofl_db: Maximum non offload doorbells
* @max_ofl_db: Maximum offload doorbells
* @max_msg_db: Maximum message doorbells
* @rxd_mem_size: Maximum RxD memory size
* @tx_intr_num: Interrupt Number associated with the TX
* @rx_intr_num: Interrupt Number associated with the RX
* @einta_intr_num: Interrupt Number associated with Emulated MSIX DeAssert IntA
* @bmap_intr_num: Interrupt Number associated with the bitmap
* @nce_oid_db: NCE ID database
* @session_oid_db: Session Object Id database
* @active_lros: Active LRO session list
* @active_lro_count: Active LRO count
* @free_lros: Free LRO session list
* @free_lro_count: Free LRO count
* @lro_lock: LRO session lists' lock
* @sqs: List of send queues
* @sq_lock: Lock for operations on sqs
* @srqs: List of SRQs
* @srq_lock: Lock for operations on srqs
* @srq_oid_db: DRQ object id database
* @cqrqs: CQRQs
* @cqrq_lock: Lock for operations on cqrqs
* @cqrq_oid_db: CQRQ object id database
* @umqh: UP Message Queue
* @dmqh: Down Message Queue
* @umq_dmq_ir: The adapter will overwrite and update this location as Messages
* are read from DMQ and written into UMQ.
* @umq_dmq_ir_reg_entry: Reg entry of umq_dmq_ir_t
* @ringh: Ring Queue
* @fifoh: FIFO Queue
* @vpath_handles: Virtual Path handles list
* @vpath_handles_lock: Lock for operations on Virtual Path handles list
* @stats_block: Memory for DMAing stats
* @stats: Vpath statistics
*
* Virtual path structure to encapsulate the data related to a virtual path.
* Virtual paths are allocated by the HAL upon getting configuration from the
* driver and inserted into the list of virtual paths.
*/
typedef struct __hal_virtualpath_t {
u32 vp_id;
u32 vp_open;
#define VXGE_HAL_VP_NOT_OPEN 0
#define VXGE_HAL_VP_OPEN 1
struct __hal_device_t *hldev;
vxge_hal_vp_config_t *vp_config;
vxge_hal_vpath_reg_t *vp_reg;
vxge_hal_vpmgmt_reg_t *vpmgmt_reg;
__hal_non_offload_db_wrapper_t *nofl_db;
__hal_messaging_db_wrapper_t *msg_db;
u32 is_first_vpath;
u32 promisc_en;
#define VXGE_HAL_VP_PROMISC_ENABLE 1
#define VXGE_HAL_VP_PROMISC_DISABLE 0
u32 min_bandwidth;
u32 max_bandwidth;
u32 max_mtu;
u64 sess_grps_available;
u32 bmap_root_assigned;
u32 vsport_choices;
u32 vsport_number;
u32 sess_grp_start;
u32 sess_grp_end;
u32 max_kdfc_db;
u32 max_nofl_db;
u32 max_ofl_db;
u32 max_msg_db;
u32 rxd_mem_size;
u32 tx_intr_num;
u32 rx_intr_num;
u32 einta_intr_num;
u32 bmap_intr_num;
u64 tim_tti_cfg1_saved;
u64 tim_tti_cfg3_saved;
u64 tim_rti_cfg1_saved;
u64 tim_rti_cfg3_saved;
vxge_hal_ring_h ringh;
vxge_hal_fifo_h fifoh;
vxge_list_t vpath_handles;
spinlock_t vpath_handles_lock;
__hal_blockpool_entry_t *stats_block;
vxge_hal_vpath_stats_hw_info_t *hw_stats;
vxge_hal_vpath_stats_hw_info_t *hw_stats_sav;
vxge_hal_vpath_stats_sw_info_t *sw_stats;
} __hal_virtualpath_t;
/*
* struct __hal_vpath_handle_t - List item to store callback information
* @item: List head to keep the item in linked list
* @vpath: Virtual path to which this item belongs
* @cb_fn: Callback function to be called
* @client_handle: Client handle to be returned with the callback
*
* This structure is used to store the callback information.
*/
typedef struct __hal_vpath_handle_t {
vxge_list_t item;
__hal_virtualpath_t *vpath;
vxge_hal_vpath_callback_f cb_fn;
vxge_hal_client_h client_handle;
} __hal_vpath_handle_t;
#define VXGE_HAL_VIRTUAL_PATH_HANDLE(vpath) \
((vxge_hal_vpath_h)(vpath)->vpath_handles.next)
#define VXGE_HAL_VPATH_STATS_PIO_READ(offset) { \
status = __hal_vpath_stats_access(vpath, \
VXGE_HAL_STATS_OP_READ, \
offset, \
&val64); \
if (status != VXGE_HAL_OK) { \
vxge_hal_trace_log_stats("<== %s:%s:%d Result: %d", \
__FILE__, __func__, __LINE__, status); \
return (status); \
} \
}
vxge_hal_status_e
__hal_vpath_size_quantum_set(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_mgmt_read(
struct __hal_device_t *hldev,
__hal_virtualpath_t *vpath);
vxge_hal_status_e
__hal_vpath_pci_read(
struct __hal_device_t *hldev,
u32 vp_id,
u32 offset,
u32 length,
void *val);
vxge_hal_status_e
__hal_vpath_reset_check(
__hal_virtualpath_t *vpath);
vxge_hal_status_e
__hal_vpath_fw_memo_get(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
vxge_hal_vpath_reg_t *vpath_reg,
u32 action,
u64 param_index,
u64 *data0,
u64 *data1);
vxge_hal_status_e
__hal_vpath_fw_flash_ver_get(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
vxge_hal_vpath_reg_t *vpath_reg,
vxge_hal_device_version_t *fw_version,
vxge_hal_device_date_t *fw_date,
vxge_hal_device_version_t *flash_version,
vxge_hal_device_date_t *flash_date);
vxge_hal_status_e
__hal_vpath_card_info_get(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
vxge_hal_vpath_reg_t *vpath_reg,
u8 *serial_number,
u8 *part_number,
u8 *product_description);
vxge_hal_status_e
__hal_vpath_pmd_info_get(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
vxge_hal_vpath_reg_t *vpath_reg,
u32 *ports,
vxge_hal_device_pmd_info_t *pmd_port0,
vxge_hal_device_pmd_info_t *pmd_port1);
u64
__hal_vpath_pci_func_mode_get(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
vxge_hal_vpath_reg_t *vpath_reg);
vxge_hal_device_lag_mode_e
__hal_vpath_lag_mode_get(
__hal_virtualpath_t *vpath);
u64
__hal_vpath_vpath_map_get(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
u32 vh,
u32 func,
vxge_hal_vpath_reg_t *vpath_reg);
vxge_hal_status_e
__hal_vpath_fw_upgrade(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
vxge_hal_vpath_reg_t *vpath_reg,
u8 *buffer,
u32 length);
vxge_hal_status_e
__hal_vpath_pcie_func_mode_set(
struct __hal_device_t *hldev,
u32 vp_id,
u32 func_mode);
vxge_hal_status_e
__hal_vpath_flick_link_led(
struct __hal_device_t *hldev,
u32 vp_id,
u32 port,
u32 on_off);
vxge_hal_status_e
__hal_vpath_udp_rth_set(
struct __hal_device_t *hldev,
u32 vp_id,
u32 on_off);
vxge_hal_status_e
__hal_vpath_rts_table_get(
vxge_hal_vpath_h vpath_handle,
u32 action,
u32 rts_table,
u32 offset,
u64 *data1,
u64 *data2);
vxge_hal_status_e
__hal_vpath_rts_table_set(
vxge_hal_vpath_h vpath_handle,
u32 action,
u32 rts_table,
u32 offset,
u64 data1,
u64 data2);
vxge_hal_status_e
__hal_vpath_hw_reset(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_sw_reset(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_prc_configure(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_kdfc_configure(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_mac_configure(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_tim_configure(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_hw_initialize(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vp_initialize(
vxge_hal_device_h devh,
u32 vp_id,
vxge_hal_vp_config_t *config);
void
__hal_vp_terminate(
vxge_hal_device_h devh,
u32 vp_id);
vxge_hal_status_e
__hal_vpath_hw_addr_get(
pci_dev_h pdev,
pci_reg_h regh0,
u32 vp_id,
vxge_hal_vpath_reg_t *vpath_reg,
macaddr_t macaddr,
macaddr_t macaddr_mask);
vxge_hal_status_e
__hal_vpath_intr_enable(
__hal_virtualpath_t *vpath);
vxge_hal_status_e
__hal_vpath_intr_disable(
__hal_virtualpath_t *vpath);
vxge_hal_device_link_state_e
__hal_vpath_link_state_test(
__hal_virtualpath_t *vpath);
vxge_hal_device_link_state_e
__hal_vpath_link_state_poll(
__hal_virtualpath_t *vpath);
vxge_hal_device_data_rate_e
__hal_vpath_data_rate_poll(
__hal_virtualpath_t *vpath);
vxge_hal_status_e
__hal_vpath_alarm_process(
__hal_virtualpath_t *vpath,
u32 skip_alarms);
vxge_hal_status_e
__hal_vpath_stats_access(
__hal_virtualpath_t *vpath,
u32 operation,
u32 offset,
u64 *stat);
vxge_hal_status_e
__hal_vpath_xmac_tx_stats_get(
__hal_virtualpath_t *vpath,
vxge_hal_xmac_vpath_tx_stats_t *vpath_tx_stats);
vxge_hal_status_e
__hal_vpath_xmac_rx_stats_get(
__hal_virtualpath_t *vpath,
vxge_hal_xmac_vpath_rx_stats_t *vpath_rx_stats);
vxge_hal_status_e
__hal_vpath_hw_stats_get(
__hal_virtualpath_t *vpath,
vxge_hal_vpath_stats_hw_info_t *hw_stats);
__EXTERN_END_DECLS
#endif /* VXGE_HAL_VIRTUALPATH_H */