xref: /dpdk/drivers/net/ionic/ionic.h (revision eec10fb0ce6bbf1d00f87a491c7d89f995c911e4)
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