]>
Commit | Line | Data |
---|---|---|
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 |
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 | ||
501ef306 VK |
39 | enum { |
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 |
52 | enum { |
53 | PRESTERA_PORT_TCVR_COPPER, | |
54 | PRESTERA_PORT_TCVR_SFP, | |
55 | ||
56 | PRESTERA_PORT_TCVR_MAX | |
57 | }; | |
58 | ||
501ef306 VK |
59 | enum { |
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 |
67 | enum { |
68 | PRESTERA_PORT_DUPLEX_HALF, | |
69 | PRESTERA_PORT_DUPLEX_FULL, | |
70 | }; | |
71 | ||
501ef306 VK |
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); | |
a97d3c69 VK |
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); | |
501ef306 VK |
107 | int prestera_hw_port_autoneg_set(const struct prestera_port *port, |
108 | bool autoneg, u64 link_modes, u8 fec); | |
a97d3c69 VK |
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); | |
501ef306 VK |
111 | int prestera_hw_port_stats_get(const struct prestera_port *port, |
112 | struct prestera_port_stats *stats); | |
a97d3c69 VK |
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); | |
501ef306 VK |
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_ */ |