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