162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#include "lan966x_main.h" 462306a36Sopenharmony_ci 562306a36Sopenharmony_cienum lan966x_dcb_apptrust_values { 662306a36Sopenharmony_ci LAN966X_DCB_APPTRUST_EMPTY, 762306a36Sopenharmony_ci LAN966X_DCB_APPTRUST_DSCP, 862306a36Sopenharmony_ci LAN966X_DCB_APPTRUST_PCP, 962306a36Sopenharmony_ci LAN966X_DCB_APPTRUST_DSCP_PCP, 1062306a36Sopenharmony_ci __LAN966X_DCB_APPTRUST_MAX 1162306a36Sopenharmony_ci}; 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistatic const struct lan966x_dcb_apptrust { 1462306a36Sopenharmony_ci u8 selectors[IEEE_8021QAZ_APP_SEL_MAX + 1]; 1562306a36Sopenharmony_ci int nselectors; 1662306a36Sopenharmony_ci} *lan966x_port_apptrust[NUM_PHYS_PORTS]; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistatic const char *lan966x_dcb_apptrust_names[__LAN966X_DCB_APPTRUST_MAX] = { 1962306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_EMPTY] = "empty", 2062306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_DSCP] = "dscp", 2162306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_PCP] = "pcp", 2262306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_DSCP_PCP] = "dscp pcp" 2362306a36Sopenharmony_ci}; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* Lan966x supported apptrust policies */ 2662306a36Sopenharmony_cistatic const struct lan966x_dcb_apptrust 2762306a36Sopenharmony_ci lan966x_dcb_apptrust_policies[__LAN966X_DCB_APPTRUST_MAX] = { 2862306a36Sopenharmony_ci /* Empty *must* be first */ 2962306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_EMPTY] = { { 0 }, 0 }, 3062306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_DSCP] = { { IEEE_8021QAZ_APP_SEL_DSCP }, 1 }, 3162306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_PCP] = { { DCB_APP_SEL_PCP }, 1 }, 3262306a36Sopenharmony_ci [LAN966X_DCB_APPTRUST_DSCP_PCP] = { { IEEE_8021QAZ_APP_SEL_DSCP, 3362306a36Sopenharmony_ci DCB_APP_SEL_PCP }, 2 }, 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistatic bool lan966x_dcb_apptrust_contains(int portno, u8 selector) 3762306a36Sopenharmony_ci{ 3862306a36Sopenharmony_ci const struct lan966x_dcb_apptrust *conf = lan966x_port_apptrust[portno]; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci for (int i = 0; i < conf->nselectors; i++) 4162306a36Sopenharmony_ci if (conf->selectors[i] == selector) 4262306a36Sopenharmony_ci return true; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci return false; 4562306a36Sopenharmony_ci} 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistatic void lan966x_dcb_app_update(struct net_device *dev) 4862306a36Sopenharmony_ci{ 4962306a36Sopenharmony_ci struct dcb_ieee_app_prio_map dscp_rewr_map = {0}; 5062306a36Sopenharmony_ci struct dcb_rewr_prio_pcp_map pcp_rewr_map = {0}; 5162306a36Sopenharmony_ci struct lan966x_port *port = netdev_priv(dev); 5262306a36Sopenharmony_ci struct lan966x_port_qos qos = {0}; 5362306a36Sopenharmony_ci struct dcb_app app_itr; 5462306a36Sopenharmony_ci bool dscp_rewr = false; 5562306a36Sopenharmony_ci bool pcp_rewr = false; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci /* Get pcp ingress mapping */ 5862306a36Sopenharmony_ci for (int i = 0; i < ARRAY_SIZE(qos.pcp.map); i++) { 5962306a36Sopenharmony_ci app_itr.selector = DCB_APP_SEL_PCP; 6062306a36Sopenharmony_ci app_itr.protocol = i; 6162306a36Sopenharmony_ci qos.pcp.map[i] = dcb_getapp(dev, &app_itr); 6262306a36Sopenharmony_ci } 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci /* Get dscp ingress mapping */ 6562306a36Sopenharmony_ci for (int i = 0; i < ARRAY_SIZE(qos.dscp.map); i++) { 6662306a36Sopenharmony_ci app_itr.selector = IEEE_8021QAZ_APP_SEL_DSCP; 6762306a36Sopenharmony_ci app_itr.protocol = i; 6862306a36Sopenharmony_ci qos.dscp.map[i] = dcb_getapp(dev, &app_itr); 6962306a36Sopenharmony_ci } 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci /* Get default prio */ 7262306a36Sopenharmony_ci qos.default_prio = dcb_ieee_getapp_default_prio_mask(dev); 7362306a36Sopenharmony_ci if (qos.default_prio) 7462306a36Sopenharmony_ci qos.default_prio = fls(qos.default_prio) - 1; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci /* Get pcp rewrite mapping */ 7762306a36Sopenharmony_ci dcb_getrewr_prio_pcp_mask_map(dev, &pcp_rewr_map); 7862306a36Sopenharmony_ci for (int i = 0; i < ARRAY_SIZE(pcp_rewr_map.map); i++) { 7962306a36Sopenharmony_ci if (!pcp_rewr_map.map[i]) 8062306a36Sopenharmony_ci continue; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci pcp_rewr = true; 8362306a36Sopenharmony_ci qos.pcp_rewr.map[i] = fls(pcp_rewr_map.map[i]) - 1; 8462306a36Sopenharmony_ci } 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci /* Get dscp rewrite mapping */ 8762306a36Sopenharmony_ci dcb_getrewr_prio_dscp_mask_map(dev, &dscp_rewr_map); 8862306a36Sopenharmony_ci for (int i = 0; i < ARRAY_SIZE(dscp_rewr_map.map); i++) { 8962306a36Sopenharmony_ci if (!dscp_rewr_map.map[i]) 9062306a36Sopenharmony_ci continue; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci dscp_rewr = true; 9362306a36Sopenharmony_ci qos.dscp_rewr.map[i] = fls64(dscp_rewr_map.map[i]) - 1; 9462306a36Sopenharmony_ci } 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci /* Enable use of pcp for queue classification */ 9762306a36Sopenharmony_ci if (lan966x_dcb_apptrust_contains(port->chip_port, DCB_APP_SEL_PCP)) { 9862306a36Sopenharmony_ci qos.pcp.enable = true; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci if (pcp_rewr) 10162306a36Sopenharmony_ci qos.pcp_rewr.enable = true; 10262306a36Sopenharmony_ci } 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci /* Enable use of dscp for queue classification */ 10562306a36Sopenharmony_ci if (lan966x_dcb_apptrust_contains(port->chip_port, IEEE_8021QAZ_APP_SEL_DSCP)) { 10662306a36Sopenharmony_ci qos.dscp.enable = true; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci if (dscp_rewr) 10962306a36Sopenharmony_ci qos.dscp_rewr.enable = true; 11062306a36Sopenharmony_ci } 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci lan966x_port_qos_set(port, &qos); 11362306a36Sopenharmony_ci} 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci/* DSCP mapping is global for all ports, so set and delete app entries are 11662306a36Sopenharmony_ci * replicated for each port. 11762306a36Sopenharmony_ci */ 11862306a36Sopenharmony_cistatic int lan966x_dcb_ieee_dscp_setdel(struct net_device *dev, 11962306a36Sopenharmony_ci struct dcb_app *app, 12062306a36Sopenharmony_ci int (*setdel)(struct net_device *, 12162306a36Sopenharmony_ci struct dcb_app *)) 12262306a36Sopenharmony_ci{ 12362306a36Sopenharmony_ci struct lan966x_port *port = netdev_priv(dev); 12462306a36Sopenharmony_ci struct lan966x *lan966x = port->lan966x; 12562306a36Sopenharmony_ci int err; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci for (int i = 0; i < NUM_PHYS_PORTS; i++) { 12862306a36Sopenharmony_ci port = lan966x->ports[i]; 12962306a36Sopenharmony_ci if (!port) 13062306a36Sopenharmony_ci continue; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci err = setdel(port->dev, app); 13362306a36Sopenharmony_ci if (err) 13462306a36Sopenharmony_ci return err; 13562306a36Sopenharmony_ci } 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci return 0; 13862306a36Sopenharmony_ci} 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_cistatic int lan966x_dcb_app_validate(struct net_device *dev, 14162306a36Sopenharmony_ci const struct dcb_app *app) 14262306a36Sopenharmony_ci{ 14362306a36Sopenharmony_ci int err = 0; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci switch (app->selector) { 14662306a36Sopenharmony_ci /* Default priority checks */ 14762306a36Sopenharmony_ci case IEEE_8021QAZ_APP_SEL_ETHERTYPE: 14862306a36Sopenharmony_ci if (app->protocol) 14962306a36Sopenharmony_ci err = -EINVAL; 15062306a36Sopenharmony_ci else if (app->priority >= NUM_PRIO_QUEUES) 15162306a36Sopenharmony_ci err = -ERANGE; 15262306a36Sopenharmony_ci break; 15362306a36Sopenharmony_ci /* Dscp checks */ 15462306a36Sopenharmony_ci case IEEE_8021QAZ_APP_SEL_DSCP: 15562306a36Sopenharmony_ci if (app->protocol >= LAN966X_PORT_QOS_DSCP_COUNT) 15662306a36Sopenharmony_ci err = -EINVAL; 15762306a36Sopenharmony_ci else if (app->priority >= NUM_PRIO_QUEUES) 15862306a36Sopenharmony_ci err = -ERANGE; 15962306a36Sopenharmony_ci break; 16062306a36Sopenharmony_ci /* Pcp checks */ 16162306a36Sopenharmony_ci case DCB_APP_SEL_PCP: 16262306a36Sopenharmony_ci if (app->protocol >= LAN966X_PORT_QOS_PCP_DEI_COUNT) 16362306a36Sopenharmony_ci err = -EINVAL; 16462306a36Sopenharmony_ci else if (app->priority >= NUM_PRIO_QUEUES) 16562306a36Sopenharmony_ci err = -ERANGE; 16662306a36Sopenharmony_ci break; 16762306a36Sopenharmony_ci default: 16862306a36Sopenharmony_ci err = -EINVAL; 16962306a36Sopenharmony_ci break; 17062306a36Sopenharmony_ci } 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci if (err) 17362306a36Sopenharmony_ci netdev_err(dev, "Invalid entry: %d:%d\n", app->protocol, 17462306a36Sopenharmony_ci app->priority); 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci return err; 17762306a36Sopenharmony_ci} 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_cistatic int lan966x_dcb_ieee_delapp(struct net_device *dev, struct dcb_app *app) 18062306a36Sopenharmony_ci{ 18162306a36Sopenharmony_ci int err; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP) 18462306a36Sopenharmony_ci err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_ieee_delapp); 18562306a36Sopenharmony_ci else 18662306a36Sopenharmony_ci err = dcb_ieee_delapp(dev, app); 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci if (err) 18962306a36Sopenharmony_ci return err; 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci lan966x_dcb_app_update(dev); 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci return 0; 19462306a36Sopenharmony_ci} 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_cistatic int lan966x_dcb_ieee_setapp(struct net_device *dev, struct dcb_app *app) 19762306a36Sopenharmony_ci{ 19862306a36Sopenharmony_ci struct dcb_app app_itr; 19962306a36Sopenharmony_ci int err; 20062306a36Sopenharmony_ci u8 prio; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci err = lan966x_dcb_app_validate(dev, app); 20362306a36Sopenharmony_ci if (err) 20462306a36Sopenharmony_ci return err; 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci /* Delete current mapping, if it exists */ 20762306a36Sopenharmony_ci prio = dcb_getapp(dev, app); 20862306a36Sopenharmony_ci if (prio) { 20962306a36Sopenharmony_ci app_itr = *app; 21062306a36Sopenharmony_ci app_itr.priority = prio; 21162306a36Sopenharmony_ci lan966x_dcb_ieee_delapp(dev, &app_itr); 21262306a36Sopenharmony_ci } 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP) 21562306a36Sopenharmony_ci err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_ieee_setapp); 21662306a36Sopenharmony_ci else 21762306a36Sopenharmony_ci err = dcb_ieee_setapp(dev, app); 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci if (err) 22062306a36Sopenharmony_ci return err; 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci lan966x_dcb_app_update(dev); 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci return 0; 22562306a36Sopenharmony_ci} 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_cistatic int lan966x_dcb_apptrust_validate(struct net_device *dev, 22862306a36Sopenharmony_ci u8 *selectors, 22962306a36Sopenharmony_ci int nselectors) 23062306a36Sopenharmony_ci{ 23162306a36Sopenharmony_ci for (int i = 0; i < ARRAY_SIZE(lan966x_dcb_apptrust_policies); i++) { 23262306a36Sopenharmony_ci bool match; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci if (lan966x_dcb_apptrust_policies[i].nselectors != nselectors) 23562306a36Sopenharmony_ci continue; 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci match = true; 23862306a36Sopenharmony_ci for (int j = 0; j < nselectors; j++) { 23962306a36Sopenharmony_ci if (lan966x_dcb_apptrust_policies[i].selectors[j] != 24062306a36Sopenharmony_ci *(selectors + j)) { 24162306a36Sopenharmony_ci match = false; 24262306a36Sopenharmony_ci break; 24362306a36Sopenharmony_ci } 24462306a36Sopenharmony_ci } 24562306a36Sopenharmony_ci if (match) 24662306a36Sopenharmony_ci return i; 24762306a36Sopenharmony_ci } 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ci netdev_err(dev, "Valid apptrust configurations are:\n"); 25062306a36Sopenharmony_ci for (int i = 0; i < ARRAY_SIZE(lan966x_dcb_apptrust_names); i++) 25162306a36Sopenharmony_ci pr_info("order: %s\n", lan966x_dcb_apptrust_names[i]); 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_ci return -EOPNOTSUPP; 25462306a36Sopenharmony_ci} 25562306a36Sopenharmony_ci 25662306a36Sopenharmony_cistatic int lan966x_dcb_setapptrust(struct net_device *dev, 25762306a36Sopenharmony_ci u8 *selectors, 25862306a36Sopenharmony_ci int nselectors) 25962306a36Sopenharmony_ci{ 26062306a36Sopenharmony_ci struct lan966x_port *port = netdev_priv(dev); 26162306a36Sopenharmony_ci int idx; 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ci idx = lan966x_dcb_apptrust_validate(dev, selectors, nselectors); 26462306a36Sopenharmony_ci if (idx < 0) 26562306a36Sopenharmony_ci return idx; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci lan966x_port_apptrust[port->chip_port] = &lan966x_dcb_apptrust_policies[idx]; 26862306a36Sopenharmony_ci lan966x_dcb_app_update(dev); 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci return 0; 27162306a36Sopenharmony_ci} 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_cistatic int lan966x_dcb_getapptrust(struct net_device *dev, u8 *selectors, 27462306a36Sopenharmony_ci int *nselectors) 27562306a36Sopenharmony_ci{ 27662306a36Sopenharmony_ci struct lan966x_port *port = netdev_priv(dev); 27762306a36Sopenharmony_ci const struct lan966x_dcb_apptrust *trust; 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci trust = lan966x_port_apptrust[port->chip_port]; 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ci memcpy(selectors, trust->selectors, trust->nselectors); 28262306a36Sopenharmony_ci *nselectors = trust->nselectors; 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci return 0; 28562306a36Sopenharmony_ci} 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_cistatic int lan966x_dcb_delrewr(struct net_device *dev, struct dcb_app *app) 28862306a36Sopenharmony_ci{ 28962306a36Sopenharmony_ci int err; 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP) 29262306a36Sopenharmony_ci err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_delrewr); 29362306a36Sopenharmony_ci else 29462306a36Sopenharmony_ci err = dcb_delrewr(dev, app); 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci if (err < 0) 29762306a36Sopenharmony_ci return err; 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci lan966x_dcb_app_update(dev); 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci return 0; 30262306a36Sopenharmony_ci} 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_cistatic int lan966x_dcb_setrewr(struct net_device *dev, struct dcb_app *app) 30562306a36Sopenharmony_ci{ 30662306a36Sopenharmony_ci struct dcb_app app_itr; 30762306a36Sopenharmony_ci u16 proto; 30862306a36Sopenharmony_ci int err; 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci err = lan966x_dcb_app_validate(dev, app); 31162306a36Sopenharmony_ci if (err) 31262306a36Sopenharmony_ci goto out; 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci /* Delete current mapping, if it exists. */ 31562306a36Sopenharmony_ci proto = dcb_getrewr(dev, app); 31662306a36Sopenharmony_ci if (proto) { 31762306a36Sopenharmony_ci app_itr = *app; 31862306a36Sopenharmony_ci app_itr.protocol = proto; 31962306a36Sopenharmony_ci lan966x_dcb_delrewr(dev, &app_itr); 32062306a36Sopenharmony_ci } 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP) 32362306a36Sopenharmony_ci err = lan966x_dcb_ieee_dscp_setdel(dev, app, dcb_setrewr); 32462306a36Sopenharmony_ci else 32562306a36Sopenharmony_ci err = dcb_setrewr(dev, app); 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_ci if (err) 32862306a36Sopenharmony_ci goto out; 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci lan966x_dcb_app_update(dev); 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ciout: 33362306a36Sopenharmony_ci return err; 33462306a36Sopenharmony_ci} 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_cistatic const struct dcbnl_rtnl_ops lan966x_dcbnl_ops = { 33762306a36Sopenharmony_ci .ieee_setapp = lan966x_dcb_ieee_setapp, 33862306a36Sopenharmony_ci .ieee_delapp = lan966x_dcb_ieee_delapp, 33962306a36Sopenharmony_ci .dcbnl_setapptrust = lan966x_dcb_setapptrust, 34062306a36Sopenharmony_ci .dcbnl_getapptrust = lan966x_dcb_getapptrust, 34162306a36Sopenharmony_ci .dcbnl_setrewr = lan966x_dcb_setrewr, 34262306a36Sopenharmony_ci .dcbnl_delrewr = lan966x_dcb_delrewr, 34362306a36Sopenharmony_ci}; 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_civoid lan966x_dcb_init(struct lan966x *lan966x) 34662306a36Sopenharmony_ci{ 34762306a36Sopenharmony_ci for (int p = 0; p < lan966x->num_phys_ports; ++p) { 34862306a36Sopenharmony_ci struct lan966x_port *port; 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci port = lan966x->ports[p]; 35162306a36Sopenharmony_ci if (!port) 35262306a36Sopenharmony_ci continue; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci port->dev->dcbnl_ops = &lan966x_dcbnl_ops; 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci lan966x_port_apptrust[port->chip_port] = 35762306a36Sopenharmony_ci &lan966x_dcb_apptrust_policies[LAN966X_DCB_APPTRUST_DSCP_PCP]; 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci /* Enable DSCP classification based on classified QoS class and 36062306a36Sopenharmony_ci * DP, for all DSCP values, for all ports. 36162306a36Sopenharmony_ci */ 36262306a36Sopenharmony_ci lan966x_port_qos_dscp_rewr_mode_set(port, 36362306a36Sopenharmony_ci LAN966X_PORT_QOS_REWR_DSCP_ALL); 36462306a36Sopenharmony_ci } 36562306a36Sopenharmony_ci} 366