1b790b554SNishad Kamdar /* SPDX-License-Identifier: GPL-2.0 */ 2b790b554SNishad Kamdar /* Copyright (c) 2019, Vladimir Oltean <olteanv@gmail.com> 3317ab5b8SVladimir Oltean */ 4317ab5b8SVladimir Oltean #ifndef _SJA1105_TAS_H 5317ab5b8SVladimir Oltean #define _SJA1105_TAS_H 6317ab5b8SVladimir Oltean 7317ab5b8SVladimir Oltean #include <net/pkt_sched.h> 8317ab5b8SVladimir Oltean 9317ab5b8SVladimir Oltean #if IS_ENABLED(CONFIG_NET_DSA_SJA1105_TAS) 10317ab5b8SVladimir Oltean 11*86db36a3SVladimir Oltean enum sja1105_tas_state { 12*86db36a3SVladimir Oltean SJA1105_TAS_STATE_DISABLED, 13*86db36a3SVladimir Oltean SJA1105_TAS_STATE_ENABLED_NOT_RUNNING, 14*86db36a3SVladimir Oltean SJA1105_TAS_STATE_RUNNING, 15*86db36a3SVladimir Oltean }; 16*86db36a3SVladimir Oltean 17*86db36a3SVladimir Oltean enum sja1105_ptp_op { 18*86db36a3SVladimir Oltean SJA1105_PTP_NONE, 19*86db36a3SVladimir Oltean SJA1105_PTP_CLOCKSTEP, 20*86db36a3SVladimir Oltean SJA1105_PTP_ADJUSTFREQ, 21*86db36a3SVladimir Oltean }; 22*86db36a3SVladimir Oltean 23317ab5b8SVladimir Oltean struct sja1105_tas_data { 24317ab5b8SVladimir Oltean struct tc_taprio_qopt_offload *offload[SJA1105_NUM_PORTS]; 25*86db36a3SVladimir Oltean enum sja1105_tas_state state; 26*86db36a3SVladimir Oltean enum sja1105_ptp_op last_op; 27*86db36a3SVladimir Oltean struct work_struct tas_work; 28*86db36a3SVladimir Oltean s64 earliest_base_time; 29*86db36a3SVladimir Oltean s64 oper_base_time; 30*86db36a3SVladimir Oltean u64 max_cycle_time; 31*86db36a3SVladimir Oltean bool enabled; 32317ab5b8SVladimir Oltean }; 33317ab5b8SVladimir Oltean 34317ab5b8SVladimir Oltean int sja1105_setup_tc_taprio(struct dsa_switch *ds, int port, 35317ab5b8SVladimir Oltean struct tc_taprio_qopt_offload *admin); 36317ab5b8SVladimir Oltean 37317ab5b8SVladimir Oltean void sja1105_tas_setup(struct dsa_switch *ds); 38317ab5b8SVladimir Oltean 39317ab5b8SVladimir Oltean void sja1105_tas_teardown(struct dsa_switch *ds); 40317ab5b8SVladimir Oltean 41*86db36a3SVladimir Oltean void sja1105_tas_clockstep(struct dsa_switch *ds); 42*86db36a3SVladimir Oltean 43*86db36a3SVladimir Oltean void sja1105_tas_adjfreq(struct dsa_switch *ds); 44*86db36a3SVladimir Oltean 45317ab5b8SVladimir Oltean #else 46317ab5b8SVladimir Oltean 47317ab5b8SVladimir Oltean /* C doesn't allow empty structures, bah! */ 48317ab5b8SVladimir Oltean struct sja1105_tas_data { 49317ab5b8SVladimir Oltean u8 dummy; 50317ab5b8SVladimir Oltean }; 51317ab5b8SVladimir Oltean 52317ab5b8SVladimir Oltean static inline int sja1105_setup_tc_taprio(struct dsa_switch *ds, int port, 53317ab5b8SVladimir Oltean struct tc_taprio_qopt_offload *admin) 54317ab5b8SVladimir Oltean { 55317ab5b8SVladimir Oltean return -EOPNOTSUPP; 56317ab5b8SVladimir Oltean } 57317ab5b8SVladimir Oltean 58317ab5b8SVladimir Oltean static inline void sja1105_tas_setup(struct dsa_switch *ds) { } 59317ab5b8SVladimir Oltean 60317ab5b8SVladimir Oltean static inline void sja1105_tas_teardown(struct dsa_switch *ds) { } 61317ab5b8SVladimir Oltean 62*86db36a3SVladimir Oltean static inline void sja1105_tas_clockstep(struct dsa_switch *ds) { } 63*86db36a3SVladimir Oltean 64*86db36a3SVladimir Oltean static inline void sja1105_tas_adjfreq(struct dsa_switch *ds) { } 65*86db36a3SVladimir Oltean 66317ab5b8SVladimir Oltean #endif /* IS_ENABLED(CONFIG_NET_DSA_SJA1105_TAS) */ 67317ab5b8SVladimir Oltean 68317ab5b8SVladimir Oltean #endif /* _SJA1105_TAS_H */ 69