xref: /dpdk/drivers/net/ionic/ionic.h (revision fffea1aeb08985c93e2d785c1637f765d638537d)
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 
11484027bfSAndrew Boyer #include "ionic_common.h"
125ef51809SAlfredo Cardigliano #include "ionic_dev.h"
135ef51809SAlfredo Cardigliano #include "ionic_if.h"
14484027bfSAndrew Boyer #include "ionic_logs.h"
155ef51809SAlfredo Cardigliano 
165ef51809SAlfredo Cardigliano #define IONIC_DRV_NAME			"ionic"
17a5205992SAndrew Boyer #define IONIC_DRV_DESCRIPTION		"AMD Pensando Ethernet NIC Driver"
18*fffea1aeSAndrew Boyer #define IONIC_DRV_VERSION		"1.3.0-112"
195ef51809SAlfredo Cardigliano 
205ef51809SAlfredo Cardigliano /* Vendor ID */
215ef51809SAlfredo Cardigliano #define IONIC_PENSANDO_VENDOR_ID	0x1dd8
225ef51809SAlfredo Cardigliano 
235ef51809SAlfredo Cardigliano /* Device IDs */
245ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_PF		0x1002
255ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_VF		0x1003
265ef51809SAlfredo Cardigliano #define IONIC_DEV_ID_ETH_MGMT		0x1004
275ef51809SAlfredo Cardigliano 
289de21005SAndrew Boyer /* Devargs */
299de21005SAndrew Boyer #define PMD_IONIC_CMB_KVARG		"ionic_cmb"
309de21005SAndrew Boyer 
315ef51809SAlfredo Cardigliano enum ionic_mac_type {
325ef51809SAlfredo Cardigliano 	IONIC_MAC_UNKNOWN = 0,
335ef51809SAlfredo Cardigliano 	IONIC_MAC_CAPRI,
345ef51809SAlfredo Cardigliano 	IONIC_NUM_MACS
355ef51809SAlfredo Cardigliano };
365ef51809SAlfredo Cardigliano 
375ef51809SAlfredo Cardigliano struct ionic_mac_info {
385ef51809SAlfredo Cardigliano 	enum ionic_mac_type type;
395ef51809SAlfredo Cardigliano };
405ef51809SAlfredo Cardigliano 
415ef51809SAlfredo Cardigliano struct ionic_hw {
425ef51809SAlfredo Cardigliano 	struct ionic_mac_info mac;
435ef51809SAlfredo Cardigliano 	uint16_t device_id;
445ef51809SAlfredo Cardigliano 	uint16_t vendor_id;
455ef51809SAlfredo Cardigliano };
465ef51809SAlfredo Cardigliano 
478eaafff3SAndrew Boyer struct ionic_bars {
488eaafff3SAndrew Boyer 	struct ionic_dev_bar bar[IONIC_BARS_MAX];
498eaafff3SAndrew Boyer 	uint32_t num_bars;
508eaafff3SAndrew Boyer };
518eaafff3SAndrew Boyer 
525ef51809SAlfredo Cardigliano /*
535ef51809SAlfredo Cardigliano  * Structure to store private data for each driver instance (for each adapter).
545ef51809SAlfredo Cardigliano  */
555ef51809SAlfredo Cardigliano struct ionic_adapter {
565ef51809SAlfredo Cardigliano 	struct ionic_hw hw;
575ef51809SAlfredo Cardigliano 	struct ionic_dev idev;
584ae96cb8SAndrew Boyer 	const char *name;
598eaafff3SAndrew Boyer 	struct ionic_bars bars;
608eaafff3SAndrew Boyer 	const struct ionic_dev_intf *intf;
615ef51809SAlfredo Cardigliano 	struct ionic_identity	ident;
6200b65da5SAndrew Boyer 	struct ionic_lif *lif;
63669c8de6SAlfredo Cardigliano 	uint32_t max_ntxqs_per_lif;
64669c8de6SAlfredo Cardigliano 	uint32_t max_nrxqs_per_lif;
65598f6726SAlfredo Cardigliano 	uint32_t max_mac_addrs;
6627b942c8SAlfredo Cardigliano 	uint32_t link_speed;
67669c8de6SAlfredo Cardigliano 	uint32_t nintrs;
6801a6c311SAlfredo Cardigliano 	bool intrs[IONIC_INTR_CTRL_REGS_MAX];
699de21005SAndrew Boyer 	bool q_in_cmb;
7027b942c8SAlfredo Cardigliano 	bool link_up;
71eec10fb0SAlfredo Cardigliano 	char fw_version[IONIC_DEVINFO_FWVERS_BUFLEN];
728eaafff3SAndrew Boyer 	void *bus_dev;
739de21005SAndrew Boyer 	uint64_t cmb_offset;
745ef51809SAlfredo Cardigliano };
755ef51809SAlfredo Cardigliano 
76750aebd5SAndrew Boyer /** ionic_admin_ctx - Admin command context.
77750aebd5SAndrew Boyer  * @pending_work:       Flag that indicates a completion.
78750aebd5SAndrew Boyer  * @cmd:                Admin command (64B) to be copied to the queue.
79750aebd5SAndrew Boyer  * @comp:               Admin completion (16B) copied from the queue.
80750aebd5SAndrew Boyer  */
81750aebd5SAndrew Boyer struct ionic_admin_ctx {
82750aebd5SAndrew Boyer 	bool pending_work;
83750aebd5SAndrew Boyer 	union ionic_adminq_cmd cmd;
84750aebd5SAndrew Boyer 	union ionic_adminq_comp comp;
85750aebd5SAndrew Boyer };
86750aebd5SAndrew Boyer 
877bb08900SAndrew Boyer int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx);
8801a6c311SAlfredo Cardigliano int ionic_adminq_post_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx);
897bb08900SAndrew Boyer int ionic_adminq_wait(struct ionic_lif *lif, struct ionic_admin_ctx *ctx);
907bb08900SAndrew Boyer uint16_t ionic_adminq_space_avail(struct ionic_lif *lif);
91750aebd5SAndrew Boyer 
925ef51809SAlfredo Cardigliano int ionic_dev_cmd_wait_check(struct ionic_dev *idev, unsigned long max_wait);
935ef51809SAlfredo Cardigliano int ionic_setup(struct ionic_adapter *adapter);
945ef51809SAlfredo Cardigliano 
955ef51809SAlfredo Cardigliano int ionic_identify(struct ionic_adapter *adapter);
965ef51809SAlfredo Cardigliano int ionic_init(struct ionic_adapter *adapter);
975ef51809SAlfredo Cardigliano int ionic_reset(struct ionic_adapter *adapter);
985ef51809SAlfredo Cardigliano 
9923bf4ddbSAlfredo Cardigliano int ionic_port_identify(struct ionic_adapter *adapter);
10023bf4ddbSAlfredo Cardigliano int ionic_port_init(struct ionic_adapter *adapter);
10123bf4ddbSAlfredo Cardigliano int ionic_port_reset(struct ionic_adapter *adapter);
10223bf4ddbSAlfredo Cardigliano 
1035ef51809SAlfredo Cardigliano #endif /* _IONIC_H_ */
104