brintos

brintos / linux-shallow public Read only

0
0
Text · 4.3 KiB · 607c4ff Raw
178 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2/* Microchip Sparx5 Switch driver3 *4 * Copyright (c) 2021 Microchip Technology Inc. and its subsidiaries.5 */6 7#ifndef __SPARX5_PORT_H__8#define __SPARX5_PORT_H__9 10#include "sparx5_main.h"11 12/* Port PCP rewrite mode */13#define SPARX5_PORT_REW_TAG_CTRL_CLASSIFIED 014#define SPARX5_PORT_REW_TAG_CTRL_DEFAULT 115#define SPARX5_PORT_REW_TAG_CTRL_MAPPED  216 17/* Port DSCP rewrite mode */18#define SPARX5_PORT_REW_DSCP_NONE 019#define SPARX5_PORT_REW_DSCP_IF_ZERO 120#define SPARX5_PORT_REW_DSCP_SELECTED  221#define SPARX5_PORT_REW_DSCP_ALL 322 23static inline bool sparx5_port_is_2g5(int portno)24{25	return portno >= 16 && portno <= 47;26}27 28static inline bool sparx5_port_is_5g(int portno)29{30	return portno <= 11 || portno == 64;31}32 33static inline bool sparx5_port_is_10g(int portno)34{35	return (portno >= 12 && portno <= 15) || (portno >= 48 && portno <= 55);36}37 38static inline bool sparx5_port_is_25g(int portno)39{40	return portno >= 56 && portno <= 63;41}42 43static inline u32 sparx5_to_high_dev(int port)44{45	if (sparx5_port_is_5g(port))46		return TARGET_DEV5G;47	if (sparx5_port_is_10g(port))48		return TARGET_DEV10G;49	return TARGET_DEV25G;50}51 52static inline u32 sparx5_to_pcs_dev(int port)53{54	if (sparx5_port_is_5g(port))55		return TARGET_PCS5G_BR;56	if (sparx5_port_is_10g(port))57		return TARGET_PCS10G_BR;58	return TARGET_PCS25G_BR;59}60 61static inline int sparx5_port_dev_index(int port)62{63	if (sparx5_port_is_2g5(port))64		return port;65	if (sparx5_port_is_5g(port))66		return (port <= 11 ? port : 12);67	if (sparx5_port_is_10g(port))68		return (port >= 12 && port <= 15) ?69			port - 12 : port - 44;70	return (port - 56);71}72 73int sparx5_port_init(struct sparx5 *sparx5,74		     struct sparx5_port *spx5_port,75		     struct sparx5_port_config *conf);76 77int sparx5_port_config(struct sparx5 *sparx5,78		       struct sparx5_port *spx5_port,79		       struct sparx5_port_config *conf);80 81int sparx5_port_pcs_set(struct sparx5 *sparx5,82			struct sparx5_port *port,83			struct sparx5_port_config *conf);84 85int sparx5_serdes_set(struct sparx5 *sparx5,86		      struct sparx5_port *spx5_port,87		      struct sparx5_port_config *conf);88 89struct sparx5_port_status {90	bool link;91	bool link_down;92	int  speed;93	bool an_complete;94	int  duplex;95	int  pause;96};97 98int sparx5_get_port_status(struct sparx5 *sparx5,99			   struct sparx5_port *port,100			   struct sparx5_port_status *status);101 102void sparx5_port_enable(struct sparx5_port *port, bool enable);103int sparx5_port_fwd_urg(struct sparx5 *sparx5, u32 speed);104 105#define SPARX5_PORT_QOS_PCP_COUNT 8106#define SPARX5_PORT_QOS_DEI_COUNT 8107#define SPARX5_PORT_QOS_PCP_DEI_COUNT \108	(SPARX5_PORT_QOS_PCP_COUNT + SPARX5_PORT_QOS_DEI_COUNT)109struct sparx5_port_qos_pcp_map {110	u8 map[SPARX5_PORT_QOS_PCP_DEI_COUNT];111};112 113struct sparx5_port_qos_pcp_rewr_map {114	u16 map[SPX5_PRIOS];115};116 117#define SPARX5_PORT_QOS_DP_NUM 4118struct sparx5_port_qos_dscp_rewr_map {119	u16 map[SPX5_PRIOS * SPARX5_PORT_QOS_DP_NUM];120};121 122#define SPARX5_PORT_QOS_DSCP_COUNT 64123struct sparx5_port_qos_dscp_map {124	u8 map[SPARX5_PORT_QOS_DSCP_COUNT];125};126 127struct sparx5_port_qos_pcp {128	struct sparx5_port_qos_pcp_map map;129	bool qos_enable;130	bool dp_enable;131};132 133struct sparx5_port_qos_pcp_rewr {134	struct sparx5_port_qos_pcp_rewr_map map;135	bool enable;136};137 138struct sparx5_port_qos_dscp {139	struct sparx5_port_qos_dscp_map map;140	bool qos_enable;141	bool dp_enable;142};143 144struct sparx5_port_qos_dscp_rewr {145	struct sparx5_port_qos_dscp_rewr_map map;146	bool enable;147};148 149struct sparx5_port_qos {150	struct sparx5_port_qos_pcp pcp;151	struct sparx5_port_qos_pcp_rewr pcp_rewr;152	struct sparx5_port_qos_dscp dscp;153	struct sparx5_port_qos_dscp_rewr dscp_rewr;154	u8 default_prio;155};156 157int sparx5_port_qos_set(struct sparx5_port *port, struct sparx5_port_qos *qos);158 159int sparx5_port_qos_pcp_set(const struct sparx5_port *port,160			    struct sparx5_port_qos_pcp *qos);161 162int sparx5_port_qos_pcp_rewr_set(const struct sparx5_port *port,163				 struct sparx5_port_qos_pcp_rewr *qos);164 165int sparx5_port_qos_dscp_set(const struct sparx5_port *port,166			     struct sparx5_port_qos_dscp *qos);167 168void sparx5_port_qos_dscp_rewr_mode_set(const struct sparx5_port *port,169					int mode);170 171int sparx5_port_qos_dscp_rewr_set(const struct sparx5_port *port,172				  struct sparx5_port_qos_dscp_rewr *qos);173 174int sparx5_port_qos_default_set(const struct sparx5_port *port,175				const struct sparx5_port_qos *qos);176 177#endif	/* __SPARX5_PORT_H__ */178