15ef51809SAlfredo Cardigliano /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 25ef51809SAlfredo Cardigliano * Copyright(c) 2018-2019 Pensando Systems, Inc. All rights reserved. 35ef51809SAlfredo Cardigliano */ 45ef51809SAlfredo Cardigliano 55ef51809SAlfredo Cardigliano #ifndef _IONIC_H_ 65ef51809SAlfredo Cardigliano #define _IONIC_H_ 75ef51809SAlfredo Cardigliano 85ef51809SAlfredo Cardigliano #include <stdint.h> 95ef51809SAlfredo Cardigliano #include <inttypes.h> 105ef51809SAlfredo Cardigliano 1123bf4ddbSAlfredo Cardigliano #include <rte_bus_pci.h> 1223bf4ddbSAlfredo Cardigliano 135ef51809SAlfredo Cardigliano #include "ionic_dev.h" 145ef51809SAlfredo Cardigliano #include "ionic_if.h" 155ef51809SAlfredo Cardigliano #include "ionic_osdep.h" 165ef51809SAlfredo Cardigliano 175ef51809SAlfredo Cardigliano #define IONIC_DRV_NAME "ionic" 185ef51809SAlfredo Cardigliano #define IONIC_DRV_DESCRIPTION "Pensando Ethernet NIC Driver" 195ef51809SAlfredo Cardigliano #define IONIC_DRV_VERSION "0.11.0-49" 205ef51809SAlfredo Cardigliano 215ef51809SAlfredo Cardigliano /* Vendor ID */ 225ef51809SAlfredo Cardigliano #define IONIC_PENSANDO_VENDOR_ID 0x1dd8 235ef51809SAlfredo Cardigliano 245ef51809SAlfredo Cardigliano /* Device IDs */ 255ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_PF 0x1002 265ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_VF 0x1003 275ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_MGMT 0x1004 285ef51809SAlfredo Cardigliano 295ef51809SAlfredo Cardigliano enum ionic_mac_type { 305ef51809SAlfredo Cardigliano IONIC_MAC_UNKNOWN = 0, 315ef51809SAlfredo Cardigliano IONIC_MAC_CAPRI, 325ef51809SAlfredo Cardigliano IONIC_NUM_MACS 335ef51809SAlfredo Cardigliano }; 345ef51809SAlfredo Cardigliano 355ef51809SAlfredo Cardigliano struct ionic_mac_info { 365ef51809SAlfredo Cardigliano enum ionic_mac_type type; 375ef51809SAlfredo Cardigliano }; 385ef51809SAlfredo Cardigliano 395ef51809SAlfredo Cardigliano struct ionic_hw { 405ef51809SAlfredo Cardigliano struct ionic_mac_info mac; 415ef51809SAlfredo Cardigliano uint16_t device_id; 425ef51809SAlfredo Cardigliano uint16_t vendor_id; 435ef51809SAlfredo Cardigliano }; 445ef51809SAlfredo Cardigliano 455ef51809SAlfredo Cardigliano /* 465ef51809SAlfredo Cardigliano * Structure to store private data for each driver instance (for each adapter). 475ef51809SAlfredo Cardigliano */ 485ef51809SAlfredo Cardigliano struct ionic_adapter { 495ef51809SAlfredo Cardigliano struct ionic_hw hw; 505ef51809SAlfredo Cardigliano struct ionic_dev idev; 515ef51809SAlfredo Cardigliano struct ionic_dev_bar bars[IONIC_BARS_MAX]; 525ef51809SAlfredo Cardigliano struct ionic_identity ident; 53669c8de6SAlfredo Cardigliano struct ionic_lif *lifs[IONIC_LIFS_MAX]; 545ef51809SAlfredo Cardigliano uint32_t num_bars; 55669c8de6SAlfredo Cardigliano uint32_t nlifs; 56669c8de6SAlfredo Cardigliano uint32_t max_ntxqs_per_lif; 57669c8de6SAlfredo Cardigliano uint32_t max_nrxqs_per_lif; 58598f6726SAlfredo Cardigliano uint32_t max_mac_addrs; 5927b942c8SAlfredo Cardigliano uint32_t link_speed; 60669c8de6SAlfredo Cardigliano uint32_t nintrs; 6101a6c311SAlfredo Cardigliano bool intrs[IONIC_INTR_CTRL_REGS_MAX]; 625ef51809SAlfredo Cardigliano bool is_mgmt_nic; 6327b942c8SAlfredo Cardigliano bool link_up; 64*eec10fb0SAlfredo Cardigliano char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN]; 655ef51809SAlfredo Cardigliano struct rte_pci_device *pci_dev; 665ef51809SAlfredo Cardigliano LIST_ENTRY(ionic_adapter) pci_adapters; 675ef51809SAlfredo Cardigliano }; 685ef51809SAlfredo Cardigliano 6901a6c311SAlfredo Cardigliano int ionic_adminq_check_err(struct ionic_admin_ctx *ctx, bool timeout); 7001a6c311SAlfredo Cardigliano int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 715ef51809SAlfredo Cardigliano int ionic_dev_cmd_wait_check(struct ionic_dev *idev, unsigned long max_wait); 725ef51809SAlfredo Cardigliano int ionic_setup(struct ionic_adapter *adapter); 735ef51809SAlfredo Cardigliano 745ef51809SAlfredo Cardigliano int ionic_identify(struct ionic_adapter *adapter); 755ef51809SAlfredo Cardigliano int ionic_init(struct ionic_adapter *adapter); 765ef51809SAlfredo Cardigliano int ionic_reset(struct ionic_adapter *adapter); 775ef51809SAlfredo Cardigliano 7823bf4ddbSAlfredo Cardigliano int ionic_port_identify(struct ionic_adapter *adapter); 7923bf4ddbSAlfredo Cardigliano int ionic_port_init(struct ionic_adapter *adapter); 8023bf4ddbSAlfredo Cardigliano int ionic_port_reset(struct ionic_adapter *adapter); 8123bf4ddbSAlfredo Cardigliano 825ef51809SAlfredo Cardigliano #endif /* _IONIC_H_ */ 83