164 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/* Atlantic Network Driver3 *4 * Copyright (C) 2014-2019 aQuantia Corporation5 * Copyright (C) 2019-2020 Marvell International Ltd.6 */7 8/* File aq_ptp.h: Declaration of PTP functions.9 */10#ifndef AQ_PTP_H11#define AQ_PTP_H12 13#include <linux/net_tstamp.h>14 15#include "aq_ring.h"16 17#define PTP_8TC_RING_IDX 818#define PTP_4TC_RING_IDX 1619#define PTP_HWST_RING_IDX 3120 21/* Index must to be 8 (8 TCs) or 16 (4 TCs).22 * It depends from Traffic Class mode.23 */24static inline unsigned int aq_ptp_ring_idx(const enum aq_tc_mode tc_mode)25{26 if (tc_mode == AQ_TC_MODE_8TCS)27 return PTP_8TC_RING_IDX;28 29 return PTP_4TC_RING_IDX;30}31 32#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)33 34/* Common functions */35int aq_ptp_init(struct aq_nic_s *aq_nic, unsigned int idx_vec);36 37void aq_ptp_unregister(struct aq_nic_s *aq_nic);38void aq_ptp_free(struct aq_nic_s *aq_nic);39 40int aq_ptp_irq_alloc(struct aq_nic_s *aq_nic);41void aq_ptp_irq_free(struct aq_nic_s *aq_nic);42 43int aq_ptp_ring_alloc(struct aq_nic_s *aq_nic);44void aq_ptp_ring_free(struct aq_nic_s *aq_nic);45 46int aq_ptp_ring_init(struct aq_nic_s *aq_nic);47int aq_ptp_ring_start(struct aq_nic_s *aq_nic);48void aq_ptp_ring_stop(struct aq_nic_s *aq_nic);49void aq_ptp_ring_deinit(struct aq_nic_s *aq_nic);50 51void aq_ptp_service_task(struct aq_nic_s *aq_nic);52 53void aq_ptp_tm_offset_set(struct aq_nic_s *aq_nic, unsigned int mbps);54 55void aq_ptp_clock_init(struct aq_nic_s *aq_nic);56 57/* Traffic processing functions */58int aq_ptp_xmit(struct aq_nic_s *aq_nic, struct sk_buff *skb);59void aq_ptp_tx_hwtstamp(struct aq_nic_s *aq_nic, u64 timestamp);60 61/* Must be to check available of PTP before call */62void aq_ptp_hwtstamp_config_get(struct aq_ptp_s *aq_ptp,63 struct hwtstamp_config *config);64int aq_ptp_hwtstamp_config_set(struct aq_ptp_s *aq_ptp,65 struct hwtstamp_config *config);66 67/* Return either ring is belong to PTP or not*/68bool aq_ptp_ring(struct aq_nic_s *aq_nic, struct aq_ring_s *ring);69 70u16 aq_ptp_extract_ts(struct aq_nic_s *aq_nic, struct skb_shared_hwtstamps *shhwtstamps, u8 *p,71 unsigned int len);72 73struct ptp_clock *aq_ptp_get_ptp_clock(struct aq_ptp_s *aq_ptp);74 75int aq_ptp_link_change(struct aq_nic_s *aq_nic);76 77/* PTP ring statistics */78int aq_ptp_get_ring_cnt(struct aq_nic_s *aq_nic, const enum atl_ring_type ring_type);79u64 *aq_ptp_get_stats(struct aq_nic_s *aq_nic, u64 *data);80 81#else82 83static inline int aq_ptp_init(struct aq_nic_s *aq_nic, unsigned int idx_vec)84{85 return 0;86}87 88static inline void aq_ptp_unregister(struct aq_nic_s *aq_nic) {}89 90static inline void aq_ptp_free(struct aq_nic_s *aq_nic)91{92}93 94static inline int aq_ptp_irq_alloc(struct aq_nic_s *aq_nic)95{96 return 0;97}98 99static inline void aq_ptp_irq_free(struct aq_nic_s *aq_nic)100{101}102 103static inline int aq_ptp_ring_alloc(struct aq_nic_s *aq_nic)104{105 return 0;106}107 108static inline void aq_ptp_ring_free(struct aq_nic_s *aq_nic) {}109 110static inline int aq_ptp_ring_init(struct aq_nic_s *aq_nic)111{112 return 0;113}114 115static inline int aq_ptp_ring_start(struct aq_nic_s *aq_nic)116{117 return 0;118}119 120static inline void aq_ptp_ring_stop(struct aq_nic_s *aq_nic) {}121static inline void aq_ptp_ring_deinit(struct aq_nic_s *aq_nic) {}122static inline void aq_ptp_service_task(struct aq_nic_s *aq_nic) {}123static inline void aq_ptp_tm_offset_set(struct aq_nic_s *aq_nic,124 unsigned int mbps) {}125static inline void aq_ptp_clock_init(struct aq_nic_s *aq_nic) {}126static inline int aq_ptp_xmit(struct aq_nic_s *aq_nic, struct sk_buff *skb)127{128 return -EOPNOTSUPP;129}130 131static inline void aq_ptp_tx_hwtstamp(struct aq_nic_s *aq_nic, u64 timestamp) {}132static inline void aq_ptp_hwtstamp_config_get(struct aq_ptp_s *aq_ptp,133 struct hwtstamp_config *config) {}134static inline int aq_ptp_hwtstamp_config_set(struct aq_ptp_s *aq_ptp,135 struct hwtstamp_config *config)136{137 return 0;138}139 140static inline bool aq_ptp_ring(struct aq_nic_s *aq_nic, struct aq_ring_s *ring)141{142 return false;143}144 145static inline u16 aq_ptp_extract_ts(struct aq_nic_s *aq_nic,146 struct skb_shared_hwtstamps *shhwtstamps, u8 *p,147 unsigned int len)148{149 return 0;150}151 152static inline struct ptp_clock *aq_ptp_get_ptp_clock(struct aq_ptp_s *aq_ptp)153{154 return NULL;155}156 157static inline int aq_ptp_link_change(struct aq_nic_s *aq_nic)158{159 return 0;160}161#endif162 163#endif /* AQ_PTP_H */164