xref: /dpdk/drivers/net/ionic/ionic.h (revision 9de21005e201af6ba8dc3836c09384e0b40b4a89)
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 
115ef51809SAlfredo Cardigliano #include "ionic_dev.h"
125ef51809SAlfredo Cardigliano #include "ionic_if.h"
135ef51809SAlfredo Cardigliano #include "ionic_osdep.h"
145ef51809SAlfredo Cardigliano 
155ef51809SAlfredo Cardigliano #define IONIC_DRV_NAME			"ionic"
16a5205992SAndrew Boyer #define IONIC_DRV_DESCRIPTION		"AMD Pensando Ethernet NIC Driver"
175ef51809SAlfredo Cardigliano #define IONIC_DRV_VERSION		"0.11.0-49"
185ef51809SAlfredo Cardigliano 
195ef51809SAlfredo Cardigliano /* Vendor ID */
205ef51809SAlfredo Cardigliano #define IONIC_PENSANDO_VENDOR_ID	0x1dd8
215ef51809SAlfredo Cardigliano 
225ef51809SAlfredo Cardigliano /* Device IDs */
235ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_PF		0x1002
245ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_VF		0x1003
255ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_MGMT		0x1004
265ef51809SAlfredo Cardigliano 
27*9de21005SAndrew Boyer /* Devargs */
28*9de21005SAndrew Boyer #define PMD_IONIC_CMB_KVARG		"ionic_cmb"
29*9de21005SAndrew Boyer 
305ef51809SAlfredo Cardigliano enum ionic_mac_type {
315ef51809SAlfredo Cardigliano 	IONIC_MAC_UNKNOWN = 0,
325ef51809SAlfredo Cardigliano 	IONIC_MAC_CAPRI,
335ef51809SAlfredo Cardigliano 	IONIC_NUM_MACS
345ef51809SAlfredo Cardigliano };
355ef51809SAlfredo Cardigliano 
365ef51809SAlfredo Cardigliano struct ionic_mac_info {
375ef51809SAlfredo Cardigliano 	enum ionic_mac_type type;
385ef51809SAlfredo Cardigliano };
395ef51809SAlfredo Cardigliano 
405ef51809SAlfredo Cardigliano struct ionic_hw {
415ef51809SAlfredo Cardigliano 	struct ionic_mac_info mac;
425ef51809SAlfredo Cardigliano 	uint16_t device_id;
435ef51809SAlfredo Cardigliano 	uint16_t vendor_id;
445ef51809SAlfredo Cardigliano };
455ef51809SAlfredo Cardigliano 
468eaafff3SAndrew Boyer struct ionic_bars {
478eaafff3SAndrew Boyer 	struct ionic_dev_bar bar[IONIC_BARS_MAX];
488eaafff3SAndrew Boyer 	uint32_t num_bars;
498eaafff3SAndrew Boyer };
508eaafff3SAndrew Boyer 
515ef51809SAlfredo Cardigliano /*
525ef51809SAlfredo Cardigliano  * Structure to store private data for each driver instance (for each adapter).
535ef51809SAlfredo Cardigliano  */
545ef51809SAlfredo Cardigliano struct ionic_adapter {
555ef51809SAlfredo Cardigliano 	struct ionic_hw hw;
565ef51809SAlfredo Cardigliano 	struct ionic_dev idev;
574ae96cb8SAndrew Boyer 	const char *name;
588eaafff3SAndrew Boyer 	struct ionic_bars bars;
598eaafff3SAndrew Boyer 	const struct ionic_dev_intf *intf;
605ef51809SAlfredo Cardigliano 	struct ionic_identity	ident;
6100b65da5SAndrew Boyer 	struct ionic_lif *lif;
62669c8de6SAlfredo Cardigliano 	uint32_t max_ntxqs_per_lif;
63669c8de6SAlfredo Cardigliano 	uint32_t max_nrxqs_per_lif;
64598f6726SAlfredo Cardigliano 	uint32_t max_mac_addrs;
6527b942c8SAlfredo Cardigliano 	uint32_t link_speed;
66669c8de6SAlfredo Cardigliano 	uint32_t nintrs;
6701a6c311SAlfredo Cardigliano 	bool intrs[IONIC_INTR_CTRL_REGS_MAX];
68*9de21005SAndrew Boyer 	bool q_in_cmb;
6927b942c8SAlfredo Cardigliano 	bool link_up;
70eec10fb0SAlfredo Cardigliano 	char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN];
718eaafff3SAndrew Boyer 	void *bus_dev;
72*9de21005SAndrew Boyer 	uint64_t cmb_offset;
735ef51809SAlfredo Cardigliano };
745ef51809SAlfredo Cardigliano 
75750aebd5SAndrew Boyer /** ionic_admin_ctx - Admin command context.
76750aebd5SAndrew Boyer  * @pending_work:       Flag that indicates a completion.
77750aebd5SAndrew Boyer  * @cmd:                Admin command (64B) to be copied to the queue.
78750aebd5SAndrew Boyer  * @comp:               Admin completion (16B) copied from the queue.
79750aebd5SAndrew Boyer  */
80750aebd5SAndrew Boyer struct ionic_admin_ctx {
81750aebd5SAndrew Boyer 	bool pending_work;
82750aebd5SAndrew Boyer 	union ionic_adminq_cmd cmd;
83750aebd5SAndrew Boyer 	union ionic_adminq_comp comp;
84750aebd5SAndrew Boyer };
85750aebd5SAndrew Boyer 
8601a6c311SAlfredo Cardigliano int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx);
87750aebd5SAndrew Boyer 
885ef51809SAlfredo Cardigliano int ionic_dev_cmd_wait_check(struct ionic_dev *idev, unsigned long max_wait);
895ef51809SAlfredo Cardigliano int ionic_setup(struct ionic_adapter *adapter);
905ef51809SAlfredo Cardigliano 
915ef51809SAlfredo Cardigliano int ionic_identify(struct ionic_adapter *adapter);
925ef51809SAlfredo Cardigliano int ionic_init(struct ionic_adapter *adapter);
935ef51809SAlfredo Cardigliano int ionic_reset(struct ionic_adapter *adapter);
945ef51809SAlfredo Cardigliano 
9523bf4ddbSAlfredo Cardigliano int ionic_port_identify(struct ionic_adapter *adapter);
9623bf4ddbSAlfredo Cardigliano int ionic_port_init(struct ionic_adapter *adapter);
9723bf4ddbSAlfredo Cardigliano int ionic_port_reset(struct ionic_adapter *adapter);
9823bf4ddbSAlfredo Cardigliano 
995ef51809SAlfredo Cardigliano #endif /* _IONIC_H_ */
100