]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - drivers/net/ethernet/marvell/prestera/prestera_hw.h
net: marvell: prestera: Add ethtool interface support
[mirror_ubuntu-jammy-kernel.git] / drivers / net / ethernet / marvell / prestera / prestera_hw.h
CommitLineData
501ef306
VK
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
a97d3c69
VK
9enum {
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
501ef306
VK
39enum {
40 PRESTERA_PORT_TYPE_NONE,
41 PRESTERA_PORT_TYPE_TP,
a97d3c69
VK
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,
501ef306
VK
48
49 PRESTERA_PORT_TYPE_MAX
50};
51
a97d3c69
VK
52enum {
53 PRESTERA_PORT_TCVR_COPPER,
54 PRESTERA_PORT_TCVR_SFP,
55
56 PRESTERA_PORT_TCVR_MAX
57};
58
501ef306
VK
59enum {
60 PRESTERA_PORT_FEC_OFF,
a97d3c69
VK
61 PRESTERA_PORT_FEC_BASER,
62 PRESTERA_PORT_FEC_RS,
501ef306
VK
63
64 PRESTERA_PORT_FEC_MAX
65};
66
a97d3c69
VK
67enum {
68 PRESTERA_PORT_DUPLEX_HALF,
69 PRESTERA_PORT_DUPLEX_FULL,
70};
71
501ef306
VK
72struct prestera_switch;
73struct prestera_port;
74struct prestera_port_stats;
75struct prestera_port_caps;
76enum prestera_event_type;
77struct prestera_event;
78
79typedef void (*prestera_event_cb_t)
80 (struct prestera_switch *sw, struct prestera_event *evt, void *arg);
81
82struct prestera_rxtx_params;
83
84/* Switch API */
85int prestera_hw_switch_init(struct prestera_switch *sw);
86void prestera_hw_switch_fini(struct prestera_switch *sw);
87int prestera_hw_switch_mac_set(struct prestera_switch *sw, const char *mac);
88
89/* Port API */
90int prestera_hw_port_info_get(const struct prestera_port *port,
91 u32 *dev_id, u32 *hw_id, u16 *fp_id);
92int prestera_hw_port_state_set(const struct prestera_port *port,
93 bool admin_state);
94int prestera_hw_port_mtu_set(const struct prestera_port *port, u32 mtu);
95int prestera_hw_port_mtu_get(const struct prestera_port *port, u32 *mtu);
96int prestera_hw_port_mac_set(const struct prestera_port *port, const char *mac);
97int prestera_hw_port_mac_get(const struct prestera_port *port, char *mac);
98int prestera_hw_port_cap_get(const struct prestera_port *port,
99 struct prestera_port_caps *caps);
a97d3c69
VK
100int prestera_hw_port_remote_cap_get(const struct prestera_port *port,
101 u64 *link_mode_bitmap);
102int prestera_hw_port_remote_fc_get(const struct prestera_port *port,
103 bool *pause, bool *asym_pause);
104int prestera_hw_port_type_get(const struct prestera_port *port, u8 *type);
105int prestera_hw_port_fec_get(const struct prestera_port *port, u8 *fec);
106int prestera_hw_port_fec_set(const struct prestera_port *port, u8 fec);
501ef306
VK
107int prestera_hw_port_autoneg_set(const struct prestera_port *port,
108 bool autoneg, u64 link_modes, u8 fec);
a97d3c69
VK
109int prestera_hw_port_autoneg_restart(struct prestera_port *port);
110int prestera_hw_port_duplex_get(const struct prestera_port *port, u8 *duplex);
501ef306
VK
111int prestera_hw_port_stats_get(const struct prestera_port *port,
112 struct prestera_port_stats *stats);
a97d3c69
VK
113int prestera_hw_port_link_mode_set(const struct prestera_port *port, u32 mode);
114int prestera_hw_port_link_mode_get(const struct prestera_port *port, u32 *mode);
115int prestera_hw_port_mdix_get(const struct prestera_port *port, u8 *status,
116 u8 *admin_mode);
117int prestera_hw_port_mdix_set(const struct prestera_port *port, u8 mode);
118int prestera_hw_port_speed_get(const struct prestera_port *port, u32 *speed);
501ef306
VK
119
120/* Event handlers */
121int prestera_hw_event_handler_register(struct prestera_switch *sw,
122 enum prestera_event_type type,
123 prestera_event_cb_t fn,
124 void *arg);
125void 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 */
130int prestera_hw_rxtx_init(struct prestera_switch *sw,
131 struct prestera_rxtx_params *params);
132int prestera_hw_rxtx_port_init(struct prestera_port *port);
133
134#endif /* _PRESTERA_HW_H_ */