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