162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/* 10G controller driver for Samsung SoCs
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2013 Samsung Electronics Co., Ltd.
562306a36Sopenharmony_ci *		http://www.samsung.com
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Author: Siva Reddy Kallam <siva.kallam@samsung.com>
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci#ifndef __SXGBE_MTL_H__
1062306a36Sopenharmony_ci#define __SXGBE_MTL_H__
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define SXGBE_MTL_OPMODE_ESTMASK	0x3
1362306a36Sopenharmony_ci#define SXGBE_MTL_OPMODE_RAAMASK	0x1
1462306a36Sopenharmony_ci#define SXGBE_MTL_FCMASK		0x7
1562306a36Sopenharmony_ci#define SXGBE_MTL_TX_FIFO_DIV		256
1662306a36Sopenharmony_ci#define SXGBE_MTL_RX_FIFO_DIV		256
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define SXGBE_MTL_RXQ_OP_FEP		BIT(4)
1962306a36Sopenharmony_ci#define SXGBE_MTL_RXQ_OP_FUP		BIT(3)
2062306a36Sopenharmony_ci#define SXGBE_MTL_ENABLE_FC		0x80
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define ETS_WRR				0xFFFFFF9F
2362306a36Sopenharmony_ci#define ETS_RST				0xFFFFFF9F
2462306a36Sopenharmony_ci#define ETS_WFQ				0x00000020
2562306a36Sopenharmony_ci#define ETS_DWRR			0x00000040
2662306a36Sopenharmony_ci#define RAA_SP				0xFFFFFFFB
2762306a36Sopenharmony_ci#define RAA_WSP				0x00000004
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define RX_QUEUE_DYNAMIC		0x80808080
3062306a36Sopenharmony_ci#define RX_FC_ACTIVE			8
3162306a36Sopenharmony_ci#define RX_FC_DEACTIVE			13
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cienum ttc_control {
3462306a36Sopenharmony_ci	MTL_CONTROL_TTC_64 = 0x00000000,
3562306a36Sopenharmony_ci	MTL_CONTROL_TTC_96 = 0x00000020,
3662306a36Sopenharmony_ci	MTL_CONTROL_TTC_128 = 0x00000030,
3762306a36Sopenharmony_ci	MTL_CONTROL_TTC_192 = 0x00000040,
3862306a36Sopenharmony_ci	MTL_CONTROL_TTC_256 = 0x00000050,
3962306a36Sopenharmony_ci	MTL_CONTROL_TTC_384 = 0x00000060,
4062306a36Sopenharmony_ci	MTL_CONTROL_TTC_512 = 0x00000070,
4162306a36Sopenharmony_ci};
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cienum rtc_control {
4462306a36Sopenharmony_ci	MTL_CONTROL_RTC_64 = 0x00000000,
4562306a36Sopenharmony_ci	MTL_CONTROL_RTC_96 = 0x00000002,
4662306a36Sopenharmony_ci	MTL_CONTROL_RTC_128 = 0x00000003,
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cienum flow_control_th {
5062306a36Sopenharmony_ci	MTL_FC_FULL_1K = 0x00000000,
5162306a36Sopenharmony_ci	MTL_FC_FULL_2K = 0x00000001,
5262306a36Sopenharmony_ci	MTL_FC_FULL_4K = 0x00000002,
5362306a36Sopenharmony_ci	MTL_FC_FULL_5K = 0x00000003,
5462306a36Sopenharmony_ci	MTL_FC_FULL_6K = 0x00000004,
5562306a36Sopenharmony_ci	MTL_FC_FULL_8K = 0x00000005,
5662306a36Sopenharmony_ci	MTL_FC_FULL_16K = 0x00000006,
5762306a36Sopenharmony_ci	MTL_FC_FULL_24K = 0x00000007,
5862306a36Sopenharmony_ci};
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistruct sxgbe_mtl_ops {
6162306a36Sopenharmony_ci	void (*mtl_init)(void __iomem *ioaddr, unsigned int etsalg,
6262306a36Sopenharmony_ci			 unsigned int raa);
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci	void (*mtl_set_txfifosize)(void __iomem *ioaddr, int queue_num,
6562306a36Sopenharmony_ci				   int mtl_fifo);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	void (*mtl_set_rxfifosize)(void __iomem *ioaddr, int queue_num,
6862306a36Sopenharmony_ci				   int queue_fifo);
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	void (*mtl_enable_txqueue)(void __iomem *ioaddr, int queue_num);
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	void (*mtl_disable_txqueue)(void __iomem *ioaddr, int queue_num);
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci	void (*set_tx_mtl_mode)(void __iomem *ioaddr, int queue_num,
7562306a36Sopenharmony_ci				int tx_mode);
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci	void (*set_rx_mtl_mode)(void __iomem *ioaddr, int queue_num,
7862306a36Sopenharmony_ci				int rx_mode);
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci	void (*mtl_dynamic_dma_rxqueue)(void __iomem *ioaddr);
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci	void (*mtl_fc_active)(void __iomem *ioaddr, int queue_num,
8362306a36Sopenharmony_ci			      int threshold);
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci	void (*mtl_fc_deactive)(void __iomem *ioaddr, int queue_num,
8662306a36Sopenharmony_ci				int threshold);
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	void (*mtl_fc_enable)(void __iomem *ioaddr, int queue_num);
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci	void (*mtl_fep_enable)(void __iomem *ioaddr, int queue_num);
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci	void (*mtl_fep_disable)(void __iomem *ioaddr, int queue_num);
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci	void (*mtl_fup_enable)(void __iomem *ioaddr, int queue_num);
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci	void (*mtl_fup_disable)(void __iomem *ioaddr, int queue_num);
9762306a36Sopenharmony_ci};
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciconst struct sxgbe_mtl_ops *sxgbe_get_mtl_ops(void);
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci#endif /* __SXGBE_MTL_H__ */
102