brintos

brintos / linux-shallow public Read only

0
0
Text · 3.8 KiB · 6348363 Raw
144 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2// Copyright (c) 2021 Hisilicon Limited.3 4#ifndef __HCLGE_PTP_H5#define __HCLGE_PTP_H6 7#include <linux/ptp_clock_kernel.h>8#include <linux/net_tstamp.h>9#include <linux/types.h>10 11struct hclge_dev;12struct ifreq;13 14#define HCLGE_PTP_REG_OFFSET	0x2900015 16#define HCLGE_PTP_TX_TS_SEQID_REG	0x017#define HCLGE_PTP_TX_TS_NSEC_REG	0x418#define HCLGE_PTP_TX_TS_NSEC_MASK	GENMASK(29, 0)19#define HCLGE_PTP_TX_TS_SEC_L_REG	0x820#define HCLGE_PTP_TX_TS_SEC_H_REG	0xC21#define HCLGE_PTP_TX_TS_SEC_H_MASK	GENMASK(15, 0)22#define HCLGE_PTP_TX_TS_CNT_REG		0x3023 24#define HCLGE_PTP_TIME_SEC_H_REG	0x5025#define HCLGE_PTP_TIME_SEC_H_MASK	GENMASK(15, 0)26#define HCLGE_PTP_TIME_SEC_L_REG	0x5427#define HCLGE_PTP_TIME_NSEC_REG		0x5828#define HCLGE_PTP_TIME_NSEC_MASK	GENMASK(29, 0)29#define HCLGE_PTP_TIME_NSEC_NEG		BIT(31)30#define HCLGE_PTP_TIME_SYNC_REG		0x5C31#define HCLGE_PTP_TIME_SYNC_EN		BIT(0)32#define HCLGE_PTP_TIME_ADJ_REG		0x6033#define HCLGE_PTP_TIME_ADJ_EN		BIT(0)34#define HCLGE_PTP_CYCLE_QUO_REG		0x6435#define HCLGE_PTP_CYCLE_QUO_MASK	GENMASK(7, 0)36#define HCLGE_PTP_CYCLE_DEN_REG		0x6837#define HCLGE_PTP_CYCLE_NUM_REG		0x6C38#define HCLGE_PTP_CYCLE_CFG_REG		0x7039#define HCLGE_PTP_CYCLE_ADJ_EN		BIT(0)40#define HCLGE_PTP_CUR_TIME_SEC_H_REG	0x7441#define HCLGE_PTP_CUR_TIME_SEC_L_REG	0x7842#define HCLGE_PTP_CUR_TIME_NSEC_REG	0x7C43 44#define HCLGE_PTP_CYCLE_ADJ_MAX		50000000045#define HCLGE_PTP_SEC_H_OFFSET		32u46#define HCLGE_PTP_SEC_L_MASK		GENMASK(31, 0)47 48#define HCLGE_PTP_FLAG_EN		049#define HCLGE_PTP_FLAG_TX_EN		150#define HCLGE_PTP_FLAG_RX_EN		251 52struct hclge_ptp_cycle {53	u32 quo;54	u32 numer;55	u32 den;56};57 58struct hclge_ptp {59	struct hclge_dev *hdev;60	struct ptp_clock *clock;61	struct sk_buff *tx_skb;62	unsigned long flags;63	void __iomem *io_base;64	struct ptp_clock_info info;65	struct hwtstamp_config ts_cfg;66	spinlock_t lock;	/* protects ptp registers */67	u32 ptp_cfg;68	u32 last_tx_seqid;69	struct hclge_ptp_cycle cycle;70	unsigned long tx_start;71	unsigned long tx_cnt;72	unsigned long tx_skipped;73	unsigned long tx_cleaned;74	unsigned long last_rx;75	unsigned long rx_cnt;76	unsigned long tx_timeout;77};78 79struct hclge_ptp_int_cmd {80#define HCLGE_PTP_INT_EN_B	BIT(0)81 82	u8 int_en;83	u8 rsvd[23];84};85 86enum hclge_ptp_udp_type {87	HCLGE_PTP_UDP_NOT_TYPE,88	HCLGE_PTP_UDP_P13F_TYPE,89	HCLGE_PTP_UDP_P140_TYPE,90	HCLGE_PTP_UDP_FULL_TYPE,91};92 93enum hclge_ptp_msg_type {94	HCLGE_PTP_MSG_TYPE_V2_L2,95	HCLGE_PTP_MSG_TYPE_V2,96	HCLGE_PTP_MSG_TYPE_V2_EVENT,97};98 99enum hclge_ptp_msg0_type {100	HCLGE_PTP_MSG0_V2_DELAY_REQ = 1,101	HCLGE_PTP_MSG0_V2_PDELAY_REQ,102	HCLGE_PTP_MSG0_V2_DELAY_RESP,103	HCLGE_PTP_MSG0_V2_EVENT = 0xF,104};105 106#define HCLGE_PTP_MSG1_V2_DEFAULT	1107 108struct hclge_ptp_cfg_cmd {109#define HCLGE_PTP_EN_B			BIT(0)110#define HCLGE_PTP_TX_EN_B		BIT(1)111#define HCLGE_PTP_RX_EN_B		BIT(2)112#define HCLGE_PTP_UDP_EN_SHIFT		3113#define HCLGE_PTP_UDP_EN_MASK		GENMASK(4, 3)114#define HCLGE_PTP_MSG_TYPE_SHIFT	8115#define HCLGE_PTP_MSG_TYPE_MASK		GENMASK(9, 8)116#define HCLGE_PTP_MSG1_SHIFT		16117#define HCLGE_PTP_MSG1_MASK		GENMASK(19, 16)118#define HCLGE_PTP_MSG0_SHIFT		24119#define HCLGE_PTP_MSG0_MASK		GENMASK(27, 24)120 121	__le32 cfg;122	u8 rsvd[20];123};124 125static inline struct hclge_dev *hclge_ptp_get_hdev(struct ptp_clock_info *info)126{127	struct hclge_ptp *ptp = container_of(info, struct hclge_ptp, info);128 129	return ptp->hdev;130}131 132bool hclge_ptp_set_tx_info(struct hnae3_handle *handle, struct sk_buff *skb);133void hclge_ptp_clean_tx_hwts(struct hclge_dev *hdev);134void hclge_ptp_get_rx_hwts(struct hnae3_handle *handle, struct sk_buff *skb,135			   u32 nsec, u32 sec);136int hclge_ptp_get_cfg(struct hclge_dev *hdev, struct ifreq *ifr);137int hclge_ptp_set_cfg(struct hclge_dev *hdev, struct ifreq *ifr);138int hclge_ptp_init(struct hclge_dev *hdev);139void hclge_ptp_uninit(struct hclge_dev *hdev);140int hclge_ptp_get_ts_info(struct hnae3_handle *handle,141			  struct kernel_ethtool_ts_info *info);142int hclge_ptp_cfg_qry(struct hclge_dev *hdev, u32 *cfg);143#endif144