1/*- 2 * Copyright(c) 2002-2011 Exar Corp. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification are permitted provided the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * 3. Neither the name of the Exar Corporation nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31/*$FreeBSD$*/ 32 33#ifndef _VXGE_H_ 34#define _VXGE_H_ 35 36#include <dev/vxge/vxgehal/vxgehal.h> 37#include <dev/vxge/vxge-osdep.h> 38#include "vxge-firmware.h" 39 40#define VXGE_GET_PARAM(str_kenv, to, param, hardcode) { \ 41 static int __CONCAT(param, __LINE__); \ 42 if (testenv(str_kenv) == 1) \ 43 TUNABLE_INT_FETCH(str_kenv, \ 44 &__CONCAT(param, __LINE__)); \ 45 else \ 46 __CONCAT(param, __LINE__) = hardcode; \ 47 \ 48 to.param = __CONCAT(param, __LINE__); \ 49} 50 51#define VXGE_BUFFER_ALIGN(buffer_length, to) { \ 52 if (buffer_length % to) \ 53 buffer_length += \ 54 (to - (buffer_length % to)); \ 55} 56 57#define VXGE_HAL_VPATH_MSIX_ACTIVE 4 58#define VXGE_HAL_VPATH_MSIX_ALARM_ID 2 59#define VXGE_MSIX_ALARM_ID(hldev, i) \ 60 ((__hal_device_t *) hldev)->first_vp_id * \ 61 VXGE_HAL_VPATH_MSIX_ACTIVE + i; 62 63#define VXGE_DUAL_PORT_MODE 2 64#define VXGE_DUAL_PORT_MAP 0xAAAAULL 65#define VXGE_BAUDRATE 1000000000 66#define VXGE_MAX_SEGS VXGE_HAL_MAX_FIFO_FRAGS 67#define VXGE_TSO_SIZE 65600 68#define VXGE_STATS_BUFFER_SIZE 65536 69#define VXGE_PRINT_BUF_SIZE 128 70#define VXGE_PMD_INFO_LEN 24 71#define VXGE_RXD_REPLENISH_COUNT 4 72#define VXGE_TX_LOW_THRESHOLD 32 73 74/* Default configuration parameters */ 75#define VXGE_DEFAULT_USER_HARDCODED -1 76#define VXGE_DEFAULT_CONFIG_VALUE 0xFF 77#define VXGE_DEFAULT_CONFIG_ENABLE 1 78#define VXGE_DEFAULT_CONFIG_DISABLE 0 79 80#if __FreeBSD_version >= 800000 81#define VXGE_DEFAULT_CONFIG_MQ_ENABLE 1 82#else 83#define VXGE_DEFAULT_CONFIG_MQ_ENABLE 0 84#endif 85 86#define VXGE_DEFAULT_CONFIG_IFQ_MAXLEN 1024 87 88#define VXGE_DEFAULT_BR_SIZE 4096 89#define VXGE_DEFAULT_RTH_BUCKET_SIZE 8 90#define VXGE_DEFAULT_RING_BLOCK 2 91#define VXGE_DEFAULT_SUPPORTED_DEVICES 1 92#define VXGE_DEFAULT_DEVICE_POLL_MILLIS 2000 93#define VXGE_DEFAULT_FIFO_ALIGNED_FRAGS 1 94#define VXGE_DEFAULT_VPATH_PRIORITY_LOW 3 95#define VXGE_DEFAULT_VPATH_PRIORITY_HIGH 0 96#define VXGE_DEFAULT_ALL_VID_ENABLE \ 97 VXGE_HAL_VPATH_RPA_ALL_VID_ENABLE 98 99#define VXGE_DEFAULT_STRIP_VLAN_TAG \ 100 VXGE_HAL_VPATH_RPA_STRIP_VLAN_TAG_ENABLE 101 102#define VXGE_DEFAULT_TTI_BTIMER_VAL 250000 103#define VXGE_DEFAULT_TTI_LTIMER_VAL 80 104#define VXGE_DEFAULT_TTI_RTIMER_VAL 0 105 106#define VXGE_DEFAULT_RTI_BTIMER_VAL 250 107#define VXGE_DEFAULT_RTI_LTIMER_VAL 100 108#define VXGE_DEFAULT_RTI_RTIMER_VAL 0 109 110#define VXGE_TTI_RTIMER_ADAPT_VAL 10 111#define VXGE_RTI_RTIMER_ADAPT_VAL 15 112 113#define VXGE_DEFAULT_TTI_TX_URANGE_A 5 114#define VXGE_DEFAULT_TTI_TX_URANGE_B 15 115#define VXGE_DEFAULT_TTI_TX_URANGE_C 40 116 117#define VXGE_DEFAULT_RTI_RX_URANGE_A 5 118#define VXGE_DEFAULT_RTI_RX_URANGE_B 15 119#define VXGE_DEFAULT_RTI_RX_URANGE_C 40 120 121#define VXGE_DEFAULT_TTI_TX_UFC_A 1 122#define VXGE_DEFAULT_TTI_TX_UFC_B 5 123#define VXGE_DEFAULT_TTI_TX_UFC_C 15 124#define VXGE_DEFAULT_TTI_TX_UFC_D 40 125 126#define VXGE_DEFAULT_RTI_RX_UFC_A 1 127#define VXGE_DEFAULT_RTI_RX_UFC_B 20 128#define VXGE_DEFAULT_RTI_RX_UFC_C 40 129#define VXGE_DEFAULT_RTI_RX_UFC_D 100 130 131#define VXGE_MAX_RX_INTERRUPT_COUNT 100 132#define VXGE_MAX_TX_INTERRUPT_COUNT 200 133 134#define is_multi_func(func_mode) \ 135 ((func_mode == VXGE_HAL_PCIE_FUNC_MODE_MF8_VP2) || \ 136 (func_mode == VXGE_HAL_PCIE_FUNC_MODE_MF2_VP8) || \ 137 (func_mode == VXGE_HAL_PCIE_FUNC_MODE_MF4_VP4) || \ 138 (func_mode == VXGE_HAL_PCIE_FUNC_MODE_MF8P_VP2)) 139 140#define is_single_func(func_mode) \ 141 (func_mode == VXGE_HAL_PCIE_FUNC_MODE_SF1_VP17) 142 143#define VXGE_DRV_STATS(v, x) v->driver_stats.x++ 144#define VXGE_MAX_MSIX_MESSAGES (VXGE_HAL_MAX_VIRTUAL_PATHS * 2 + 2) 145 146#define VXGE_DRV_LOCK(x) mtx_lock(&(x)->mtx_drv) 147#define VXGE_DRV_UNLOCK(x) mtx_unlock(&(x)->mtx_drv) 148#define VXGE_DRV_LOCK_DESTROY(x) mtx_destroy(&(x)->mtx_drv) 149#define VXGE_DRV_LOCK_ASSERT(x) mtx_assert(&(x)->mtx_drv, MA_OWNED) 150 151#define VXGE_TX_LOCK(x) mtx_lock(&(x)->mtx_tx) 152#define VXGE_TX_TRYLOCK(x) mtx_trylock(&(x)->mtx_tx) 153#define VXGE_TX_UNLOCK(x) mtx_unlock(&(x)->mtx_tx) 154#define VXGE_TX_LOCK_DESTROY(x) mtx_destroy(&(x)->mtx_tx) 155#define VXGE_TX_LOCK_ASSERT(x) mtx_assert(&(x)->mtx_tx, MA_OWNED) 156 157const char * 158vxge_port_mode[6] = 159{ 160 "Default", 161 "Reserved", 162 "Active/Passive", 163 "Single Port", 164 "Dual Port", 165 "Disabled" 166}; 167 168const char * 169vxge_port_failure[3] = 170{ 171 "No Failover", 172 "Failover only", 173 "Failover & Failback" 174}; 175 176/* IOCTLs to identify vxge-manage requests */ 177typedef enum _vxge_query_device_info_e { 178 179 VXGE_GET_PCI_CONF = 100, 180 VXGE_GET_MRPCIM_STATS = 101, 181 VXGE_GET_DEVICE_STATS = 102, 182 VXGE_GET_DEVICE_HWINFO = 103, 183 VXGE_GET_DRIVER_STATS = 104, 184 VXGE_GET_INTR_STATS = 105, 185 VXGE_GET_VERSION = 106, 186 VXGE_GET_TCODE = 107, 187 VXGE_GET_VPATH_COUNT = 108, 188 VXGE_GET_BANDWIDTH = 109, 189 VXGE_SET_BANDWIDTH = 110, 190 VXGE_GET_PORT_MODE = 111, 191 VXGE_SET_PORT_MODE = 112 192 193} vxge_query_device_info_e; 194 195typedef enum _vxge_firmware_upgrade_e { 196 197 VXGE_FW_UPGRADE_NONE = 0, 198 VXGE_FW_UPGRADE_ALL = 1, 199 VXGE_FW_UPGRADE_FORCE = 2 200 201} vxge_firmware_upgrade_e; 202 203typedef enum _vxge_free_resources_e { 204 205 VXGE_FREE_NONE = 0, 206 VXGE_FREE_MUTEX = 1, 207 VXGE_FREE_PCI_INFO = 2, 208 VXGE_FREE_BAR0 = 3, 209 VXGE_FREE_BAR1 = 4, 210 VXGE_FREE_BAR2 = 5, 211 VXGE_FREE_ISR_RESOURCE = 6, 212 VXGE_FREE_MEDIA = 7, 213 VXGE_FREE_INTERFACE = 8, 214 VXGE_FREE_DEVICE_CONFIG = 9, 215 VXGE_FREE_TERMINATE_DEVICE = 10, 216 VXGE_FREE_TERMINATE_DRIVER = 11, 217 VXGE_DISABLE_PCI_BUSMASTER = 12, 218 VXGE_FREE_VPATH = 13, 219 VXGE_FREE_ALL = 14 220 221} vxge_free_resources_e; 222 223typedef enum _vxge_device_attributes_e { 224 225 VXGE_PRINT_DRV_VERSION = 0, 226 VXGE_PRINT_PCIE_INFO = 1, 227 VXGE_PRINT_SERIAL_NO = 2, 228 VXGE_PRINT_PART_NO = 3, 229 VXGE_PRINT_FW_VERSION = 4, 230 VXGE_PRINT_FW_DATE = 5, 231 VXGE_PRINT_FUNC_MODE = 6, 232 VXGE_PRINT_INTR_MODE = 7, 233 VXGE_PRINT_VPATH_COUNT = 8, 234 VXGE_PRINT_MTU_SIZE = 9, 235 VXGE_PRINT_LRO_MODE = 10, 236 VXGE_PRINT_RTH_MODE = 11, 237 VXGE_PRINT_TSO_MODE = 12, 238 VXGE_PRINT_PMD_PORTS_0 = 13, 239 VXGE_PRINT_PMD_PORTS_1 = 14, 240 VXGE_PRINT_ADAPTER_TYPE = 15, 241 VXGE_PRINT_PORT_MODE = 16, 242 VXGE_PRINT_PORT_FAILURE = 17, 243 VXGE_PRINT_ACTIVE_PORT = 18, 244 VXGE_PRINT_L2SWITCH_MODE = 19 245 246} vxge_device_attribute_e; 247 248typedef struct _vxge_isr_info_t { 249 250 int irq_rid; 251 void *irq_handle; 252 struct resource *irq_res; 253 254} vxge_isr_info_t; 255 256typedef struct _vxge_drv_stats_t { 257 258 u64 isr_msix; 259 260 u64 tx_xmit; 261 u64 tx_posted; 262 u64 tx_compl; 263 u64 tx_tso; 264 u64 tx_tcode; 265 u64 tx_low_dtr_cnt; 266 u64 tx_reserve_failed; 267 u64 tx_no_dma_setup; 268 u64 tx_max_frags; 269 u64 tx_again; 270 271 u64 rx_compl; 272 u64 rx_tcode; 273 u64 rx_no_buf; 274 u64 rx_map_fail; 275 u64 rx_lro_queued; 276 u64 rx_lro_flushed; 277 278} vxge_drv_stats_t; 279 280typedef struct vxge_dev_t vxge_dev_t; 281 282/* Rx descriptor private structure */ 283typedef struct _vxge_rxd_priv_t { 284 285 mbuf_t mbuf_pkt; 286 bus_size_t dma_sizes[1]; 287 bus_addr_t dma_addr[1]; 288 bus_dmamap_t dma_map; 289 290} vxge_rxd_priv_t; 291 292/* Tx descriptor private structure */ 293typedef struct _vxge_txdl_priv_t { 294 295 mbuf_t mbuf_pkt; 296 bus_dmamap_t dma_map; 297 bus_dma_segment_t dma_buffers[VXGE_MAX_SEGS]; 298 299} vxge_txdl_priv_t; 300 301typedef struct _vxge_vpath_t { 302 303 u32 vp_id; 304 u32 vp_index; 305 u32 is_open; 306 u32 lro_enable; 307 int msix_vec; 308 309 int msix_vec_alarm; 310 u32 is_configured; 311 u64 rxd_posted; 312 macaddr_t mac_addr; 313 macaddr_t mac_mask; 314 315 int tx_ticks; 316 int rx_ticks; 317 318 u32 tti_rtimer_val; 319 u32 rti_rtimer_val; 320 321 u64 tx_interrupts; 322 u64 rx_interrupts; 323 324 int tx_intr_coalesce; 325 int rx_intr_coalesce; 326 327 vxge_dev_t *vdev; 328 vxge_hal_vpath_h handle; 329 char mtx_tx_name[16]; 330 331 bus_dma_tag_t dma_tag_tx; 332 bus_dma_tag_t dma_tag_rx; 333 bus_dmamap_t extra_dma_map; 334 335 vxge_drv_stats_t driver_stats; 336 struct mtx mtx_tx; 337 struct lro_ctrl lro; 338 339#if __FreeBSD_version >= 800000 340 struct buf_ring *br; 341#endif 342 343} vxge_vpath_t; 344 345typedef struct _vxge_bw_info_t { 346 347 char query; 348 u64 func_id; 349 int priority; 350 int bandwidth; 351 352} vxge_bw_info_t; 353 354typedef struct _vxge_port_info_t { 355 356 char query; 357 int port_mode; 358 int port_failure; 359 360} vxge_port_info_t; 361 362typedef struct _vxge_device_hw_info_t { 363 364 vxge_hal_device_hw_info_t hw_info; 365 vxge_hal_xmac_nwif_dp_mode port_mode; 366 vxge_hal_xmac_nwif_behavior_on_failure port_failure; 367 368} vxge_device_hw_info_t; 369 370typedef struct _vxge_config_t { 371 372 u32 intr_mode; 373 int lro_enable; 374 int rth_enable; 375 int tso_enable; 376 int tx_steering; 377 int rth_bkt_sz; 378 int ifq_maxlen; 379 int no_of_vpath; 380 int ifq_multi; 381 int intr_coalesce; 382 int low_latency; 383 int l2_switch; 384 int port_mode; 385 int function_mode; 386 char nic_attr[20][128]; 387 388 vxge_hal_device_hw_info_t hw_info; 389 vxge_firmware_upgrade_e fw_option; 390 vxge_hal_xmac_nwif_behavior_on_failure port_failure; 391 392 vxge_bw_info_t bw_info[VXGE_HAL_MAX_FUNCTIONS]; 393 vxge_isr_info_t isr_info[VXGE_MAX_MSIX_MESSAGES]; 394 395} vxge_config_t; 396 397struct vxge_dev_t { 398 399 device_t ndev; 400 401 bool is_privilaged; 402 bool is_initialized; 403 bool is_active; 404 int intr_count; 405 bool fw_upgrade; 406 int no_of_vpath; 407 u64 active_port; 408 u32 no_of_func; 409 u32 hw_fw_version; 410 u32 max_supported_vpath; 411 int rx_mbuf_sz; 412 int if_flags; 413 int ifm_optics; 414 ifnet_t ifp; 415 416 vxge_hal_xmac_nwif_dp_mode port_mode; 417 vxge_hal_xmac_nwif_l2_switch_status l2_switch; 418 vxge_hal_xmac_nwif_behavior_on_failure port_failure; 419 420 char ndev_name[16]; 421 char mtx_drv_name[16]; 422 423 struct mtx mtx_drv; 424 struct ifmedia media; 425 426 vxge_pci_info_t *pdev; 427 vxge_hal_device_t *devh; 428 vxge_vpath_t *vpaths; 429 vxge_config_t config; 430 vxge_hal_device_config_t *device_config; 431 vxge_hal_vpath_h vpath_handles[VXGE_HAL_MAX_VIRTUAL_PATHS]; 432}; 433 434int vxge_probe(device_t); 435int vxge_attach(device_t); 436int vxge_detach(device_t); 437int vxge_shutdown(device_t); 438 439int vxge_alloc_resources(vxge_dev_t *); 440int vxge_alloc_isr_resources(vxge_dev_t *); 441int vxge_alloc_bar_resources(vxge_dev_t *, int); 442void vxge_free_resources(device_t, vxge_free_resources_e); 443void vxge_free_isr_resources(vxge_dev_t *); 444void vxge_free_bar_resources(vxge_dev_t *, int); 445 446int vxge_device_hw_info_get(vxge_dev_t *); 447int vxge_firmware_verify(vxge_dev_t *); 448 449vxge_hal_status_e 450vxge_driver_init(vxge_dev_t *); 451 452vxge_hal_status_e 453vxge_firmware_upgrade(vxge_dev_t *); 454 455vxge_hal_status_e 456vxge_func_mode_set(vxge_dev_t *); 457 458vxge_hal_status_e 459vxge_port_mode_set(vxge_dev_t *); 460 461vxge_hal_status_e 462vxge_port_behavior_on_failure_set(vxge_dev_t *); 463 464vxge_hal_status_e 465vxge_l2switch_mode_set(vxge_dev_t *); 466 467void vxge_init(void *); 468void vxge_init_locked(vxge_dev_t *); 469 470void vxge_stop(vxge_dev_t *); 471void vxge_stop_locked(vxge_dev_t *); 472 473void vxge_reset(vxge_dev_t *); 474int vxge_ifp_setup(device_t); 475int vxge_isr_setup(vxge_dev_t *); 476 477void vxge_media_init(vxge_dev_t *); 478int vxge_media_change(ifnet_t); 479void vxge_media_status(ifnet_t, struct ifmediareq *); 480 481void vxge_mutex_init(vxge_dev_t *); 482void vxge_mutex_destroy(vxge_dev_t *); 483void vxge_link_up(vxge_hal_device_h, void *); 484void vxge_link_down(vxge_hal_device_h, void *); 485void vxge_crit_error(vxge_hal_device_h, void *, vxge_hal_event_e, u64); 486 487int vxge_ioctl(ifnet_t, u_long, caddr_t); 488int vxge_ioctl_regs(vxge_dev_t *, struct ifreq *); 489int vxge_ioctl_stats(vxge_dev_t *, struct ifreq *); 490void vxge_promisc_set(vxge_dev_t *); 491 492void vxge_vpath_config(vxge_dev_t *); 493int vxge_vpath_open(vxge_dev_t *); 494void vxge_vpath_close(vxge_dev_t *); 495void vxge_vpath_reset(vxge_dev_t *); 496 497int vxge_change_mtu(vxge_dev_t *, unsigned long); 498 499u32 vxge_ring_length_get(u32); 500 501void vxge_isr_line(void *); 502int vxge_isr_filter(void *); 503void vxge_isr_msix(void *); 504void vxge_isr_msix_alarm(void *); 505 506void 507vxge_intr_coalesce_tx(vxge_vpath_t *); 508 509void 510vxge_intr_coalesce_rx(vxge_vpath_t *); 511 512vxge_hal_status_e 513vxge_msix_enable(vxge_dev_t *); 514 515vxge_hal_status_e 516vxge_rth_config(vxge_dev_t *); 517 518int vxge_dma_tags_create(vxge_vpath_t *); 519void vxge_device_hw_info_print(vxge_dev_t *); 520int vxge_driver_config(vxge_dev_t *); 521 522#if __FreeBSD_version >= 800000 523 524int 525vxge_mq_send(ifnet_t, mbuf_t); 526 527static inline int 528vxge_mq_send_locked(ifnet_t, vxge_vpath_t *, mbuf_t); 529 530void 531vxge_mq_qflush(ifnet_t); 532 533#endif 534 535void 536vxge_send(ifnet_t); 537 538static inline void 539vxge_send_locked(ifnet_t, vxge_vpath_t *); 540 541static inline int 542vxge_xmit(ifnet_t, vxge_vpath_t *, mbuf_t *); 543 544static inline int 545vxge_dma_mbuf_coalesce(bus_dma_tag_t, bus_dmamap_t, 546 mbuf_t *, bus_dma_segment_t *, int *); 547 548static inline void 549vxge_rx_checksum(vxge_hal_ring_rxd_info_t, mbuf_t); 550 551static inline void 552vxge_rx_input(ifnet_t, mbuf_t, vxge_vpath_t *); 553 554static inline vxge_hal_vpath_h 555vxge_vpath_handle_get(vxge_dev_t *, int); 556 557static inline int 558vxge_vpath_get(vxge_dev_t *, mbuf_t); 559 560void 561vxge_tso_config(vxge_dev_t *); 562 563vxge_hal_status_e 564vxge_tx_replenish(vxge_hal_vpath_h, vxge_hal_txdl_h, void *, 565 u32, void *, vxge_hal_reopen_e); 566 567vxge_hal_status_e 568vxge_tx_compl(vxge_hal_vpath_h, vxge_hal_txdl_h, void *, 569 vxge_hal_fifo_tcode_e, void *); 570 571void 572vxge_tx_term(vxge_hal_vpath_h, vxge_hal_txdl_h, void *, 573 vxge_hal_txdl_state_e, void *, vxge_hal_reopen_e); 574 575vxge_hal_status_e 576vxge_rx_replenish(vxge_hal_vpath_h, vxge_hal_rxd_h, void *, 577 u32, void *, vxge_hal_reopen_e); 578 579vxge_hal_status_e 580vxge_rx_compl(vxge_hal_vpath_h, vxge_hal_rxd_h, void *, u8, void *); 581 582void 583vxge_rx_term(vxge_hal_vpath_h, vxge_hal_rxd_h, void *, 584 vxge_hal_rxd_state_e, void *, vxge_hal_reopen_e); 585 586void 587vxge_rx_rxd_1b_get(vxge_vpath_t *, vxge_hal_rxd_h, void *); 588 589int 590vxge_rx_rxd_1b_set(vxge_vpath_t *, vxge_hal_rxd_h, void *); 591 592int 593vxge_bw_priority_config(vxge_dev_t *); 594 595vxge_hal_status_e 596vxge_bw_priority_get(vxge_dev_t *, vxge_bw_info_t *); 597 598int 599vxge_bw_priority_set(vxge_dev_t *, struct ifreq *); 600 601int 602vxge_bw_priority_update(vxge_dev_t *, u32, bool); 603 604int 605vxge_port_mode_update(vxge_dev_t *); 606 607vxge_hal_status_e 608vxge_port_mode_get(vxge_dev_t *, vxge_port_info_t *); 609 610void 611vxge_pmd_port_type_get(vxge_dev_t *, u32, char *, u8); 612 613void 614vxge_active_port_update(vxge_dev_t *); 615 616static inline void 617vxge_null_terminate(char *, size_t); 618 619#endif /* _VXGE_H_ */ 620