1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 2*2d9fd380Sjfb8856606 * Copyright(c) 2018-2019 Pensando Systems, Inc. All rights reserved. 3*2d9fd380Sjfb8856606 */ 4*2d9fd380Sjfb8856606 5*2d9fd380Sjfb8856606 #ifndef _IONIC_H_ 6*2d9fd380Sjfb8856606 #define _IONIC_H_ 7*2d9fd380Sjfb8856606 8*2d9fd380Sjfb8856606 #include <stdint.h> 9*2d9fd380Sjfb8856606 #include <inttypes.h> 10*2d9fd380Sjfb8856606 11*2d9fd380Sjfb8856606 #include <rte_bus_pci.h> 12*2d9fd380Sjfb8856606 13*2d9fd380Sjfb8856606 #include "ionic_dev.h" 14*2d9fd380Sjfb8856606 #include "ionic_if.h" 15*2d9fd380Sjfb8856606 #include "ionic_osdep.h" 16*2d9fd380Sjfb8856606 17*2d9fd380Sjfb8856606 #define IONIC_DRV_NAME "ionic" 18*2d9fd380Sjfb8856606 #define IONIC_DRV_DESCRIPTION "Pensando Ethernet NIC Driver" 19*2d9fd380Sjfb8856606 #define IONIC_DRV_VERSION "0.11.0-49" 20*2d9fd380Sjfb8856606 21*2d9fd380Sjfb8856606 /* Vendor ID */ 22*2d9fd380Sjfb8856606 #define IONIC_PENSANDO_VENDOR_ID 0x1dd8 23*2d9fd380Sjfb8856606 24*2d9fd380Sjfb8856606 /* Device IDs */ 25*2d9fd380Sjfb8856606 #define IONIC_DEV_ID_ETH_PF 0x1002 26*2d9fd380Sjfb8856606 #define IONIC_DEV_ID_ETH_VF 0x1003 27*2d9fd380Sjfb8856606 #define IONIC_DEV_ID_ETH_MGMT 0x1004 28*2d9fd380Sjfb8856606 29*2d9fd380Sjfb8856606 enum ionic_mac_type { 30*2d9fd380Sjfb8856606 IONIC_MAC_UNKNOWN = 0, 31*2d9fd380Sjfb8856606 IONIC_MAC_CAPRI, 32*2d9fd380Sjfb8856606 IONIC_NUM_MACS 33*2d9fd380Sjfb8856606 }; 34*2d9fd380Sjfb8856606 35*2d9fd380Sjfb8856606 struct ionic_mac_info { 36*2d9fd380Sjfb8856606 enum ionic_mac_type type; 37*2d9fd380Sjfb8856606 }; 38*2d9fd380Sjfb8856606 39*2d9fd380Sjfb8856606 struct ionic_hw { 40*2d9fd380Sjfb8856606 struct ionic_mac_info mac; 41*2d9fd380Sjfb8856606 uint16_t device_id; 42*2d9fd380Sjfb8856606 uint16_t vendor_id; 43*2d9fd380Sjfb8856606 }; 44*2d9fd380Sjfb8856606 45*2d9fd380Sjfb8856606 /* 46*2d9fd380Sjfb8856606 * Structure to store private data for each driver instance (for each adapter). 47*2d9fd380Sjfb8856606 */ 48*2d9fd380Sjfb8856606 struct ionic_adapter { 49*2d9fd380Sjfb8856606 struct ionic_hw hw; 50*2d9fd380Sjfb8856606 struct ionic_dev idev; 51*2d9fd380Sjfb8856606 struct ionic_dev_bar bars[IONIC_BARS_MAX]; 52*2d9fd380Sjfb8856606 struct ionic_identity ident; 53*2d9fd380Sjfb8856606 struct ionic_lif *lifs[IONIC_LIFS_MAX]; 54*2d9fd380Sjfb8856606 uint32_t num_bars; 55*2d9fd380Sjfb8856606 uint32_t nlifs; 56*2d9fd380Sjfb8856606 uint32_t max_ntxqs_per_lif; 57*2d9fd380Sjfb8856606 uint32_t max_nrxqs_per_lif; 58*2d9fd380Sjfb8856606 uint32_t max_mac_addrs; 59*2d9fd380Sjfb8856606 uint32_t link_speed; 60*2d9fd380Sjfb8856606 uint32_t nintrs; 61*2d9fd380Sjfb8856606 bool intrs[IONIC_INTR_CTRL_REGS_MAX]; 62*2d9fd380Sjfb8856606 bool is_mgmt_nic; 63*2d9fd380Sjfb8856606 bool link_up; 64*2d9fd380Sjfb8856606 char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN]; 65*2d9fd380Sjfb8856606 struct rte_pci_device *pci_dev; 66*2d9fd380Sjfb8856606 LIST_ENTRY(ionic_adapter) pci_adapters; 67*2d9fd380Sjfb8856606 }; 68*2d9fd380Sjfb8856606 69*2d9fd380Sjfb8856606 int ionic_adminq_check_err(struct ionic_admin_ctx *ctx, bool timeout); 70*2d9fd380Sjfb8856606 int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 71*2d9fd380Sjfb8856606 int ionic_dev_cmd_wait_check(struct ionic_dev *idev, unsigned long max_wait); 72*2d9fd380Sjfb8856606 int ionic_setup(struct ionic_adapter *adapter); 73*2d9fd380Sjfb8856606 74*2d9fd380Sjfb8856606 int ionic_identify(struct ionic_adapter *adapter); 75*2d9fd380Sjfb8856606 int ionic_init(struct ionic_adapter *adapter); 76*2d9fd380Sjfb8856606 int ionic_reset(struct ionic_adapter *adapter); 77*2d9fd380Sjfb8856606 78*2d9fd380Sjfb8856606 int ionic_port_identify(struct ionic_adapter *adapter); 79*2d9fd380Sjfb8856606 int ionic_port_init(struct ionic_adapter *adapter); 80*2d9fd380Sjfb8856606 int ionic_port_reset(struct ionic_adapter *adapter); 81*2d9fd380Sjfb8856606 82*2d9fd380Sjfb8856606 #endif /* _IONIC_H_ */ 83