xref: /linux/drivers/net/ethernet/marvell/octeontx2/af/cgx.h (revision fe8ecccc10b3adc071de05ca7af728ca1a4ac9aa)
1 /* SPDX-License-Identifier: GPL-2.0
2  * Marvell OcteonTx2 CGX driver
3  *
4  * Copyright (C) 2018 Marvell International Ltd.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 
11 #ifndef CGX_H
12 #define CGX_H
13 
14 #include "cgx_fw_if.h"
15 
16  /* PCI device IDs */
17 #define	PCI_DEVID_OCTEONTX2_CGX		0xA059
18 
19 /* PCI BAR nos */
20 #define PCI_CFG_REG_BAR_NUM		0
21 
22 #define MAX_CGX				3
23 #define MAX_LMAC_PER_CGX		4
24 #define CGX_OFFSET(x)			((x) * MAX_LMAC_PER_CGX)
25 
26 /* Registers */
27 #define CGXX_CMRX_INT			0x040
28 #define  FW_CGX_INT				BIT_ULL(1)
29 #define CGXX_CMRX_INT_ENA_W1S		0x058
30 #define CGXX_CMRX_RX_ID_MAP		0x060
31 #define CGXX_CMRX_RX_LMACS		0x128
32 #define CGXX_SCRATCH0_REG		0x1050
33 #define CGXX_SCRATCH1_REG		0x1058
34 #define CGX_CONST			0x2000
35 
36 #define CGX_COMMAND_REG			CGXX_SCRATCH1_REG
37 #define CGX_EVENT_REG			CGXX_SCRATCH0_REG
38 #define CGX_CMD_TIMEOUT			2200 /* msecs */
39 
40 #define CGX_NVEC			37
41 #define CGX_LMAC_FWI			0
42 
43 struct cgx_link_event {
44 	struct cgx_lnk_sts lstat;
45 	u8 cgx_id;
46 	u8 lmac_id;
47 };
48 
49 /**
50  * struct cgx_event_cb
51  * @notify_link_chg:	callback for link change notification
52  * @data:	data passed to callback function
53  */
54 struct cgx_event_cb {
55 	int (*notify_link_chg)(struct cgx_link_event *event, void *data);
56 	void *data;
57 };
58 
59 extern struct pci_driver cgx_driver;
60 
61 int cgx_get_cgx_cnt(void);
62 int cgx_get_lmac_cnt(void *cgxd);
63 void *cgx_get_pdata(int cgx_id);
64 int cgx_lmac_evh_register(struct cgx_event_cb *cb, void *cgxd, int lmac_id);
65 #endif /* CGX_H */
66