net: marvell: prestera: Add ethtool interface support
[linux-2.6-microblaze.git] / drivers / net / ethernet / marvell / prestera / prestera_hw.h
1 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2 /* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved. */
3
4 #ifndef _PRESTERA_HW_H_
5 #define _PRESTERA_HW_H_
6
7 #include <linux/types.h>
8
9 enum {
10         PRESTERA_LINK_MODE_10baseT_Half,
11         PRESTERA_LINK_MODE_10baseT_Full,
12         PRESTERA_LINK_MODE_100baseT_Half,
13         PRESTERA_LINK_MODE_100baseT_Full,
14         PRESTERA_LINK_MODE_1000baseT_Half,
15         PRESTERA_LINK_MODE_1000baseT_Full,
16         PRESTERA_LINK_MODE_1000baseX_Full,
17         PRESTERA_LINK_MODE_1000baseKX_Full,
18         PRESTERA_LINK_MODE_2500baseX_Full,
19         PRESTERA_LINK_MODE_10GbaseKR_Full,
20         PRESTERA_LINK_MODE_10GbaseSR_Full,
21         PRESTERA_LINK_MODE_10GbaseLR_Full,
22         PRESTERA_LINK_MODE_20GbaseKR2_Full,
23         PRESTERA_LINK_MODE_25GbaseCR_Full,
24         PRESTERA_LINK_MODE_25GbaseKR_Full,
25         PRESTERA_LINK_MODE_25GbaseSR_Full,
26         PRESTERA_LINK_MODE_40GbaseKR4_Full,
27         PRESTERA_LINK_MODE_40GbaseCR4_Full,
28         PRESTERA_LINK_MODE_40GbaseSR4_Full,
29         PRESTERA_LINK_MODE_50GbaseCR2_Full,
30         PRESTERA_LINK_MODE_50GbaseKR2_Full,
31         PRESTERA_LINK_MODE_50GbaseSR2_Full,
32         PRESTERA_LINK_MODE_100GbaseKR4_Full,
33         PRESTERA_LINK_MODE_100GbaseSR4_Full,
34         PRESTERA_LINK_MODE_100GbaseCR4_Full,
35
36         PRESTERA_LINK_MODE_MAX
37 };
38
39 enum {
40         PRESTERA_PORT_TYPE_NONE,
41         PRESTERA_PORT_TYPE_TP,
42         PRESTERA_PORT_TYPE_AUI,
43         PRESTERA_PORT_TYPE_MII,
44         PRESTERA_PORT_TYPE_FIBRE,
45         PRESTERA_PORT_TYPE_BNC,
46         PRESTERA_PORT_TYPE_DA,
47         PRESTERA_PORT_TYPE_OTHER,
48
49         PRESTERA_PORT_TYPE_MAX
50 };
51
52 enum {
53         PRESTERA_PORT_TCVR_COPPER,
54         PRESTERA_PORT_TCVR_SFP,
55
56         PRESTERA_PORT_TCVR_MAX
57 };
58
59 enum {
60         PRESTERA_PORT_FEC_OFF,
61         PRESTERA_PORT_FEC_BASER,
62         PRESTERA_PORT_FEC_RS,
63
64         PRESTERA_PORT_FEC_MAX
65 };
66
67 enum {
68         PRESTERA_PORT_DUPLEX_HALF,
69         PRESTERA_PORT_DUPLEX_FULL,
70 };
71
72 struct prestera_switch;
73 struct prestera_port;
74 struct prestera_port_stats;
75 struct prestera_port_caps;
76 enum prestera_event_type;
77 struct prestera_event;
78
79 typedef void (*prestera_event_cb_t)
80         (struct prestera_switch *sw, struct prestera_event *evt, void *arg);
81
82 struct prestera_rxtx_params;
83
84 /* Switch API */
85 int prestera_hw_switch_init(struct prestera_switch *sw);
86 void prestera_hw_switch_fini(struct prestera_switch *sw);
87 int prestera_hw_switch_mac_set(struct prestera_switch *sw, const char *mac);
88
89 /* Port API */
90 int prestera_hw_port_info_get(const struct prestera_port *port,
91                               u32 *dev_id, u32 *hw_id, u16 *fp_id);
92 int prestera_hw_port_state_set(const struct prestera_port *port,
93                                bool admin_state);
94 int prestera_hw_port_mtu_set(const struct prestera_port *port, u32 mtu);
95 int prestera_hw_port_mtu_get(const struct prestera_port *port, u32 *mtu);
96 int prestera_hw_port_mac_set(const struct prestera_port *port, const char *mac);
97 int prestera_hw_port_mac_get(const struct prestera_port *port, char *mac);
98 int prestera_hw_port_cap_get(const struct prestera_port *port,
99                              struct prestera_port_caps *caps);
100 int prestera_hw_port_remote_cap_get(const struct prestera_port *port,
101                                     u64 *link_mode_bitmap);
102 int prestera_hw_port_remote_fc_get(const struct prestera_port *port,
103                                    bool *pause, bool *asym_pause);
104 int prestera_hw_port_type_get(const struct prestera_port *port, u8 *type);
105 int prestera_hw_port_fec_get(const struct prestera_port *port, u8 *fec);
106 int prestera_hw_port_fec_set(const struct prestera_port *port, u8 fec);
107 int prestera_hw_port_autoneg_set(const struct prestera_port *port,
108                                  bool autoneg, u64 link_modes, u8 fec);
109 int prestera_hw_port_autoneg_restart(struct prestera_port *port);
110 int prestera_hw_port_duplex_get(const struct prestera_port *port, u8 *duplex);
111 int prestera_hw_port_stats_get(const struct prestera_port *port,
112                                struct prestera_port_stats *stats);
113 int prestera_hw_port_link_mode_set(const struct prestera_port *port, u32 mode);
114 int prestera_hw_port_link_mode_get(const struct prestera_port *port, u32 *mode);
115 int prestera_hw_port_mdix_get(const struct prestera_port *port, u8 *status,
116                               u8 *admin_mode);
117 int prestera_hw_port_mdix_set(const struct prestera_port *port, u8 mode);
118 int prestera_hw_port_speed_get(const struct prestera_port *port, u32 *speed);
119
120 /* Event handlers */
121 int prestera_hw_event_handler_register(struct prestera_switch *sw,
122                                        enum prestera_event_type type,
123                                        prestera_event_cb_t fn,
124                                        void *arg);
125 void prestera_hw_event_handler_unregister(struct prestera_switch *sw,
126                                           enum prestera_event_type type,
127                                           prestera_event_cb_t fn);
128
129 /* RX/TX */
130 int prestera_hw_rxtx_init(struct prestera_switch *sw,
131                           struct prestera_rxtx_params *params);
132 int prestera_hw_rxtx_port_init(struct prestera_port *port);
133
134 #endif /* _PRESTERA_HW_H_ */