176668754SAndrew Boyer /* SPDX-License-Identifier: BSD-3-Clause 2a5205992SAndrew Boyer * Copyright 2018-2022 Advanced Micro Devices, Inc. 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 11484027bfSAndrew Boyer #include "ionic_common.h" 125ef51809SAlfredo Cardigliano #include "ionic_dev.h" 135ef51809SAlfredo Cardigliano #include "ionic_if.h" 14484027bfSAndrew Boyer #include "ionic_logs.h" 155ef51809SAlfredo Cardigliano 165ef51809SAlfredo Cardigliano #define IONIC_DRV_NAME "ionic" 17a5205992SAndrew Boyer #define IONIC_DRV_DESCRIPTION "AMD Pensando Ethernet NIC Driver" 18*fffea1aeSAndrew Boyer #define IONIC_DRV_VERSION "1.3.0-112" 195ef51809SAlfredo Cardigliano 205ef51809SAlfredo Cardigliano /* Vendor ID */ 215ef51809SAlfredo Cardigliano #define IONIC_PENSANDO_VENDOR_ID 0x1dd8 225ef51809SAlfredo Cardigliano 235ef51809SAlfredo Cardigliano /* Device IDs */ 245ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_PF 0x1002 255ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_VF 0x1003 265ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_MGMT 0x1004 275ef51809SAlfredo Cardigliano 289de21005SAndrew Boyer /* Devargs */ 299de21005SAndrew Boyer #define PMD_IONIC_CMB_KVARG "ionic_cmb" 309de21005SAndrew Boyer 315ef51809SAlfredo Cardigliano enum ionic_mac_type { 325ef51809SAlfredo Cardigliano IONIC_MAC_UNKNOWN = 0, 335ef51809SAlfredo Cardigliano IONIC_MAC_CAPRI, 345ef51809SAlfredo Cardigliano IONIC_NUM_MACS 355ef51809SAlfredo Cardigliano }; 365ef51809SAlfredo Cardigliano 375ef51809SAlfredo Cardigliano struct ionic_mac_info { 385ef51809SAlfredo Cardigliano enum ionic_mac_type type; 395ef51809SAlfredo Cardigliano }; 405ef51809SAlfredo Cardigliano 415ef51809SAlfredo Cardigliano struct ionic_hw { 425ef51809SAlfredo Cardigliano struct ionic_mac_info mac; 435ef51809SAlfredo Cardigliano uint16_t device_id; 445ef51809SAlfredo Cardigliano uint16_t vendor_id; 455ef51809SAlfredo Cardigliano }; 465ef51809SAlfredo Cardigliano 478eaafff3SAndrew Boyer struct ionic_bars { 488eaafff3SAndrew Boyer struct ionic_dev_bar bar[IONIC_BARS_MAX]; 498eaafff3SAndrew Boyer uint32_t num_bars; 508eaafff3SAndrew Boyer }; 518eaafff3SAndrew Boyer 525ef51809SAlfredo Cardigliano /* 535ef51809SAlfredo Cardigliano * Structure to store private data for each driver instance (for each adapter). 545ef51809SAlfredo Cardigliano */ 555ef51809SAlfredo Cardigliano struct ionic_adapter { 565ef51809SAlfredo Cardigliano struct ionic_hw hw; 575ef51809SAlfredo Cardigliano struct ionic_dev idev; 584ae96cb8SAndrew Boyer const char *name; 598eaafff3SAndrew Boyer struct ionic_bars bars; 608eaafff3SAndrew Boyer const struct ionic_dev_intf *intf; 615ef51809SAlfredo Cardigliano struct ionic_identity ident; 6200b65da5SAndrew Boyer struct ionic_lif *lif; 63669c8de6SAlfredo Cardigliano uint32_t max_ntxqs_per_lif; 64669c8de6SAlfredo Cardigliano uint32_t max_nrxqs_per_lif; 65598f6726SAlfredo Cardigliano uint32_t max_mac_addrs; 6627b942c8SAlfredo Cardigliano uint32_t link_speed; 67669c8de6SAlfredo Cardigliano uint32_t nintrs; 6801a6c311SAlfredo Cardigliano bool intrs[IONIC_INTR_CTRL_REGS_MAX]; 699de21005SAndrew Boyer bool q_in_cmb; 7027b942c8SAlfredo Cardigliano bool link_up; 71eec10fb0SAlfredo Cardigliano char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN]; 728eaafff3SAndrew Boyer void *bus_dev; 739de21005SAndrew Boyer uint64_t cmb_offset; 745ef51809SAlfredo Cardigliano }; 755ef51809SAlfredo Cardigliano 76750aebd5SAndrew Boyer /** ionic_admin_ctx - Admin command context. 77750aebd5SAndrew Boyer * @pending_work: Flag that indicates a completion. 78750aebd5SAndrew Boyer * @cmd: Admin command (64B) to be copied to the queue. 79750aebd5SAndrew Boyer * @comp: Admin completion (16B) copied from the queue. 80750aebd5SAndrew Boyer */ 81750aebd5SAndrew Boyer struct ionic_admin_ctx { 82750aebd5SAndrew Boyer bool pending_work; 83750aebd5SAndrew Boyer union ionic_adminq_cmd cmd; 84750aebd5SAndrew Boyer union ionic_adminq_comp comp; 85750aebd5SAndrew Boyer }; 86750aebd5SAndrew Boyer 877bb08900SAndrew Boyer int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 8801a6c311SAlfredo Cardigliano int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 897bb08900SAndrew Boyer int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 907bb08900SAndrew Boyer uint16_t ionic_adminq_space_avail(struct ionic_lif *lif); 91750aebd5SAndrew Boyer 925ef51809SAlfredo Cardigliano int ionic_dev_cmd_wait_check(struct ionic_dev *idev, unsigned long max_wait); 935ef51809SAlfredo Cardigliano int ionic_setup(struct ionic_adapter *adapter); 945ef51809SAlfredo Cardigliano 955ef51809SAlfredo Cardigliano int ionic_identify(struct ionic_adapter *adapter); 965ef51809SAlfredo Cardigliano int ionic_init(struct ionic_adapter *adapter); 975ef51809SAlfredo Cardigliano int ionic_reset(struct ionic_adapter *adapter); 985ef51809SAlfredo Cardigliano 9923bf4ddbSAlfredo Cardigliano int ionic_port_identify(struct ionic_adapter *adapter); 10023bf4ddbSAlfredo Cardigliano int ionic_port_init(struct ionic_adapter *adapter); 10123bf4ddbSAlfredo Cardigliano int ionic_port_reset(struct ionic_adapter *adapter); 10223bf4ddbSAlfredo Cardigliano 1035ef51809SAlfredo Cardigliano #endif /* _IONIC_H_ */ 104