1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2018-2022 Advanced Micro Devices, Inc. 3 */ 4 5 #ifndef _IONIC_H_ 6 #define _IONIC_H_ 7 8 #include <stdint.h> 9 #include <inttypes.h> 10 11 #include "ionic_common.h" 12 #include "ionic_dev.h" 13 #include "ionic_if.h" 14 #include "ionic_logs.h" 15 16 #define IONIC_DRV_NAME "ionic" 17 #define IONIC_DRV_DESCRIPTION "AMD Pensando Ethernet NIC Driver" 18 #define IONIC_DRV_VERSION "1.3.0-112" 19 20 /* Vendor ID */ 21 #define IONIC_PENSANDO_VENDOR_ID 0x1dd8 22 23 /* Device IDs */ 24 #define IONIC_DEV_ID_ETH_PF 0x1002 25 #define IONIC_DEV_ID_ETH_VF 0x1003 26 #define IONIC_DEV_ID_ETH_MGMT 0x1004 27 28 /* Devargs */ 29 #define PMD_IONIC_CMB_KVARG "ionic_cmb" 30 31 enum ionic_mac_type { 32 IONIC_MAC_UNKNOWN = 0, 33 IONIC_MAC_CAPRI, 34 IONIC_NUM_MACS 35 }; 36 37 struct ionic_mac_info { 38 enum ionic_mac_type type; 39 }; 40 41 struct ionic_hw { 42 struct ionic_mac_info mac; 43 uint16_t device_id; 44 uint16_t vendor_id; 45 }; 46 47 struct ionic_bars { 48 struct ionic_dev_bar bar[IONIC_BARS_MAX]; 49 uint32_t num_bars; 50 }; 51 52 /* 53 * Structure to store private data for each driver instance (for each adapter). 54 */ 55 struct ionic_adapter { 56 struct ionic_hw hw; 57 struct ionic_dev idev; 58 const char *name; 59 struct ionic_bars bars; 60 const struct ionic_dev_intf *intf; 61 struct ionic_identity ident; 62 struct ionic_lif *lif; 63 uint32_t max_ntxqs_per_lif; 64 uint32_t max_nrxqs_per_lif; 65 uint32_t max_mac_addrs; 66 uint32_t link_speed; 67 uint32_t nintrs; 68 bool intrs[IONIC_INTR_CTRL_REGS_MAX]; 69 bool q_in_cmb; 70 bool link_up; 71 char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN]; 72 void *bus_dev; 73 uint64_t cmb_offset; 74 }; 75 76 /** ionic_admin_ctx - Admin command context. 77 * @pending_work: Flag that indicates a completion. 78 * @cmd: Admin command (64B) to be copied to the queue. 79 * @comp: Admin completion (16B) copied from the queue. 80 */ 81 struct ionic_admin_ctx { 82 bool pending_work; 83 union ionic_adminq_cmd cmd; 84 union ionic_adminq_comp comp; 85 }; 86 87 int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 88 int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 89 int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx); 90 uint16_t ionic_adminq_space_avail(struct ionic_lif *lif); 91 92 int ionic_dev_cmd_wait_check(struct ionic_dev *idev, unsigned long max_wait); 93 int ionic_setup(struct ionic_adapter *adapter); 94 95 int ionic_identify(struct ionic_adapter *adapter); 96 int ionic_init(struct ionic_adapter *adapter); 97 int ionic_reset(struct ionic_adapter *adapter); 98 99 int ionic_port_identify(struct ionic_adapter *adapter); 100 int ionic_port_init(struct ionic_adapter *adapter); 101 int ionic_port_reset(struct ionic_adapter *adapter); 102 103 #endif /* _IONIC_H_ */ 104