18127224cSIvan Khoronzhuk /* SPDX-License-Identifier: GPL-2.0 */ 28127224cSIvan Khoronzhuk /* Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/ 38127224cSIvan Khoronzhuk */ 48127224cSIvan Khoronzhuk 58127224cSIvan Khoronzhuk #ifndef AM65_CPSW_QOS_H_ 68127224cSIvan Khoronzhuk #define AM65_CPSW_QOS_H_ 78127224cSIvan Khoronzhuk 88127224cSIvan Khoronzhuk #include <linux/netdevice.h> 98127224cSIvan Khoronzhuk #include <net/pkt_sched.h> 108127224cSIvan Khoronzhuk 11*5c8560c4SGrygorii Strashko struct am65_cpsw_common; 12*5c8560c4SGrygorii Strashko 138127224cSIvan Khoronzhuk struct am65_cpsw_est { 148127224cSIvan Khoronzhuk int buf; 158127224cSIvan Khoronzhuk /* has to be the last one */ 168127224cSIvan Khoronzhuk struct tc_taprio_qopt_offload taprio; 178127224cSIvan Khoronzhuk }; 188127224cSIvan Khoronzhuk 195ec836beSGrygorii Strashko struct am65_cpsw_ale_ratelimit { 205ec836beSGrygorii Strashko unsigned long cookie; 215ec836beSGrygorii Strashko u64 rate_packet_ps; 225ec836beSGrygorii Strashko }; 235ec836beSGrygorii Strashko 248127224cSIvan Khoronzhuk struct am65_cpsw_qos { 258127224cSIvan Khoronzhuk struct am65_cpsw_est *est_admin; 268127224cSIvan Khoronzhuk struct am65_cpsw_est *est_oper; 278127224cSIvan Khoronzhuk ktime_t link_down_time; 288127224cSIvan Khoronzhuk int link_speed; 295ec836beSGrygorii Strashko 305ec836beSGrygorii Strashko struct am65_cpsw_ale_ratelimit ale_bc_ratelimit; 315ec836beSGrygorii Strashko struct am65_cpsw_ale_ratelimit ale_mc_ratelimit; 328127224cSIvan Khoronzhuk }; 338127224cSIvan Khoronzhuk 348127224cSIvan Khoronzhuk int am65_cpsw_qos_ndo_setup_tc(struct net_device *ndev, enum tc_setup_type type, 358127224cSIvan Khoronzhuk void *type_data); 368127224cSIvan Khoronzhuk void am65_cpsw_qos_link_up(struct net_device *ndev, int link_speed); 378127224cSIvan Khoronzhuk void am65_cpsw_qos_link_down(struct net_device *ndev); 38*5c8560c4SGrygorii Strashko int am65_cpsw_qos_ndo_tx_p0_set_maxrate(struct net_device *ndev, int queue, u32 rate_mbps); 39*5c8560c4SGrygorii Strashko void am65_cpsw_qos_tx_p0_rate_init(struct am65_cpsw_common *common); 408127224cSIvan Khoronzhuk 418127224cSIvan Khoronzhuk #endif /* AM65_CPSW_QOS_H_ */ 42