a2a7a6d72d32abfa8e841cebc45eb11c6d3a59de
[linux-2.6-microblaze.git] / drivers / net / ethernet / marvell / octeontx2 / af / cgx.h
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 */