/* 10G controller driver for Samsung SoCs
 *
 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com
 *
 * Author: Siva Reddy Kallam <siva.kallam@samsung.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __SXGBE_COMMON_H__
#define __SXGBE_COMMON_H__

/* forward references */
struct sxgbe_desc_ops;
struct sxgbe_dma_ops;
struct sxgbe_mtl_ops;

#define SXGBE_RESOURCE_NAME	"sam_sxgbeeth"
#define DRV_MODULE_VERSION	"November_2013"

/* MAX HW feature words */
#define SXGBE_HW_WORDS 3

#define SXGBE_RX_COE_NONE	0

/* CSR Frequency Access Defines*/
#define SXGBE_CSR_F_150M	150000000
#define SXGBE_CSR_F_250M	250000000
#define SXGBE_CSR_F_300M	300000000
#define SXGBE_CSR_F_350M	350000000
#define SXGBE_CSR_F_400M	400000000
#define SXGBE_CSR_F_500M	500000000

/* pause time */
#define SXGBE_PAUSE_TIME 0x200

/* tx queues */
#define SXGBE_TX_QUEUES   8
#define SXGBE_RX_QUEUES   16

/* Calculated based how much time does it take to fill 256KB Rx memory
 * at 10Gb speed at 156MHz clock rate and considered little less then
 * the actual value.
 */
#define SXGBE_MAX_DMA_RIWT	0x70
#define SXGBE_MIN_DMA_RIWT	0x01

/* Tx coalesce parameters */
#define SXGBE_COAL_TX_TIMER	40000
#define SXGBE_MAX_COAL_TX_TICK	100000
#define SXGBE_TX_MAX_FRAMES	512
#define SXGBE_TX_FRAMES	128

/* SXGBE TX FIFO is 8K, Rx FIFO is 16K */
#define BUF_SIZE_16KiB 16384
#define BUF_SIZE_8KiB 8192
#define BUF_SIZE_4KiB 4096
#define BUF_SIZE_2KiB 2048

#define SXGBE_DEFAULT_LIT_LS	0x3E8
#define SXGBE_DEFAULT_TWT_LS	0x0

/* Flow Control defines */
#define SXGBE_FLOW_OFF		0
#define SXGBE_FLOW_RX		1
#define SXGBE_FLOW_TX		2
#define SXGBE_FLOW_AUTO		(SXGBE_FLOW_TX | SXGBE_FLOW_RX)

#define SF_DMA_MODE 1		/* DMA STORE-AND-FORWARD Operation Mode */

/* errors */
#define RX_GMII_ERR		0x01
#define RX_WATCHDOG_ERR		0x02
#define RX_CRC_ERR		0x03
#define RX_GAINT_ERR		0x04
#define RX_IP_HDR_ERR		0x05
#define RX_PAYLOAD_ERR		0x06
#define RX_OVERFLOW_ERR		0x07

/* pkt type */
#define RX_LEN_PKT		0x00
#define RX_MACCTL_PKT		0x01
#define RX_DCBCTL_PKT		0x02
#define RX_ARP_PKT		0x03
#define RX_OAM_PKT		0x04
#define RX_UNTAG_PKT		0x05
#define RX_OTHER_PKT		0x07
#define RX_SVLAN_PKT		0x08
#define RX_CVLAN_PKT		0x09
#define RX_DVLAN_OCVLAN_ICVLAN_PKT		0x0A
#define RX_DVLAN_OSVLAN_ISVLAN_PKT		0x0B
#define RX_DVLAN_OSVLAN_ICVLAN_PKT		0x0C
#define RX_DVLAN_OCVLAN_ISVLAN_PKT		0x0D

#define RX_NOT_IP_PKT		0x00
#define RX_IPV4_TCP_PKT		0x01
#define RX_IPV4_UDP_PKT		0x02
#define RX_IPV4_ICMP_PKT	0x03
#define RX_IPV4_UNKNOWN_PKT	0x07
#define RX_IPV6_TCP_PKT		0x09
#define RX_IPV6_UDP_PKT		0x0A
#define RX_IPV6_ICMP_PKT	0x0B
#define RX_IPV6_UNKNOWN_PKT	0x0F

#define RX_NO_PTP		0x00
#define RX_PTP_SYNC		0x01
#define RX_PTP_FOLLOW_UP	0x02
#define RX_PTP_DELAY_REQ	0x03
#define RX_PTP_DELAY_RESP	0x04
#define RX_PTP_PDELAY_REQ	0x05
#define RX_PTP_PDELAY_RESP	0x06
#define RX_PTP_PDELAY_FOLLOW_UP	0x07
#define RX_PTP_ANNOUNCE		0x08
#define RX_PTP_MGMT		0x09
#define RX_PTP_SIGNAL		0x0A
#define RX_PTP_RESV_MSG		0x0F

/* EEE-LPI mode  flags*/
#define TX_ENTRY_LPI_MODE	0x10
#define TX_EXIT_LPI_MODE	0x20
#define RX_ENTRY_LPI_MODE	0x40
#define RX_EXIT_LPI_MODE	0x80

/* EEE-LPI Interrupt status flag */
#define LPI_INT_STATUS		BIT(5)

/* EEE-LPI Default timer values */
#define LPI_LINK_STATUS_TIMER	0x3E8
#define LPI_MAC_WAIT_TIMER	0x00

/* EEE-LPI Control and status definitions */
#define LPI_CTRL_STATUS_TXA	BIT(19)
#define LPI_CTRL_STATUS_PLSDIS	BIT(18)
#define LPI_CTRL_STATUS_PLS	BIT(17)
#define LPI_CTRL_STATUS_LPIEN	BIT(16)
#define LPI_CTRL_STATUS_TXRSTP	BIT(11)
#define LPI_CTRL_STATUS_RXRSTP	BIT(10)
#define LPI_CTRL_STATUS_RLPIST	BIT(9)
#define LPI_CTRL_STATUS_TLPIST	BIT(8)
#define LPI_CTRL_STATUS_RLPIEX	BIT(3)
#define LPI_CTRL_STATUS_RLPIEN	BIT(2)
#define LPI_CTRL_STATUS_TLPIEX	BIT(1)
#define LPI_CTRL_STATUS_TLPIEN	BIT(0)

enum dma_irq_status {
	tx_hard_error	= BIT(0),
	tx_bump_tc	= BIT(1),
	handle_tx	= BIT(2),
	rx_hard_error	= BIT(3),
	rx_bump_tc	= BIT(4),
	handle_rx	= BIT(5),
};

#define NETIF_F_HW_VLAN_ALL     (NETIF_F_HW_VLAN_CTAG_RX |	\
				 NETIF_F_HW_VLAN_STAG_RX |	\
				 NETIF_F_HW_VLAN_CTAG_TX |	\
				 NETIF_F_HW_VLAN_STAG_TX |	\
				 NETIF_F_HW_VLAN_CTAG_FILTER |	\
				 NETIF_F_HW_VLAN_STAG_FILTER)

/* MMC control defines */
#define SXGBE_MMC_CTRL_CNT_FRZ  0x00000008

/* SXGBE HW ADDR regs */
#define SXGBE_ADDR_HIGH(reg)    (((reg > 15) ? 0x00000800 : 0x00000040) + \
				 (reg * 8))
#define SXGBE_ADDR_LOW(reg)     (((reg > 15) ? 0x00000804 : 0x00000044) + \
				 (reg * 8))
#define SXGBE_MAX_PERFECT_ADDRESSES 32 /* Maximum unicast perfect filtering */
#define SXGBE_FRAME_FILTER       0x00000004      /* Frame Filter */

/* SXGBE Frame Filter defines */
#define SXGBE_FRAME_FILTER_PR    0x00000001      /* Promiscuous Mode */
#define SXGBE_FRAME_FILTER_HUC   0x00000002      /* Hash Unicast */
#define SXGBE_FRAME_FILTER_HMC   0x00000004      /* Hash Multicast */
#define SXGBE_FRAME_FILTER_DAIF  0x00000008      /* DA Inverse Filtering */
#define SXGBE_FRAME_FILTER_PM    0x00000010      /* Pass all multicast */
#define SXGBE_FRAME_FILTER_DBF   0x00000020      /* Disable Broadcast frames */
#define SXGBE_FRAME_FILTER_SAIF  0x00000100      /* Inverse Filtering */
#define SXGBE_FRAME_FILTER_SAF   0x00000200      /* Source Address Filter */
#define SXGBE_FRAME_FILTER_HPF   0x00000400      /* Hash or perfect Filter */
#define SXGBE_FRAME_FILTER_RA    0x80000000      /* Receive all mode */

#define SXGBE_HASH_TABLE_SIZE    64
#define SXGBE_HASH_HIGH          0x00000008      /* Multicast Hash Table High */
#define SXGBE_HASH_LOW           0x0000000c      /* Multicast Hash Table Low */

#define SXGBE_HI_REG_AE          0x80000000

/* Minimum and maximum MTU */
#define MIN_MTU         68
#define MAX_MTU         9000

#define SXGBE_FOR_EACH_QUEUE(max_queues, queue_num)			\
	for (queue_num = 0; queue_num < max_queues; queue_num++)

#define DRV_VERSION "1.0.0"

#define SXGBE_MAX_RX_CHANNELS	16
#define SXGBE_MAX_TX_CHANNELS	16

#define START_MAC_REG_OFFSET	0x0000
#define MAX_MAC_REG_OFFSET	0x0DFC
#define START_MTL_REG_OFFSET	0x1000
#define MAX_MTL_REG_OFFSET	0x18FC
#define START_DMA_REG_OFFSET	0x3000
#define MAX_DMA_REG_OFFSET	0x38FC

#define REG_SPACE_SIZE		0x2000

/* sxgbe statistics counters */
struct sxgbe_extra_stats {
	/* TX/RX IRQ events */
	unsigned long tx_underflow_irq;
	unsigned long tx_process_stopped_irq;
	unsigned long tx_ctxt_desc_err;
	unsigned long tx_threshold;
	unsigned long rx_threshold;
	unsigned long tx_pkt_n;
	unsigned long rx_pkt_n;
	unsigned long normal_irq_n;
	unsigned long tx_normal_irq_n;
	unsigned long rx_normal_irq_n;
	unsigned long napi_poll;
	unsigned long tx_clean;
	unsigned long tx_reset_ic_bit;
	unsigned long rx_process_stopped_irq;
	unsigned long rx_underflow_irq;

	/* Bus access errors */
	unsigned long fatal_bus_error_irq;
	unsigned long tx_read_transfer_err;
	unsigned long tx_write_transfer_err;
	unsigned long tx_desc_access_err;
	unsigned long tx_buffer_access_err;
	unsigned long tx_data_transfer_err;
	unsigned long rx_read_transfer_err;
	unsigned long rx_write_transfer_err;
	unsigned long rx_desc_access_err;
	unsigned long rx_buffer_access_err;
	unsigned long rx_data_transfer_err;

	/* EEE-LPI stats */
	unsigned long tx_lpi_entry_n;
	unsigned long tx_lpi_exit_n;
	unsigned long rx_lpi_entry_n;
	unsigned long rx_lpi_exit_n;
	unsigned long eee_wakeup_error_n;

	/* RX specific */
	/* L2 error */
	unsigned long rx_code_gmii_err;
	unsigned long rx_watchdog_err;
	unsigned long rx_crc_err;
	unsigned long rx_gaint_pkt_err;
	unsigned long ip_hdr_err;
	unsigned long ip_payload_err;
	unsigned long overflow_error;

	/* L2 Pkt type */
	unsigned long len_pkt;
	unsigned long mac_ctl_pkt;
	unsigned long dcb_ctl_pkt;
	unsigned long arp_pkt;
	unsigned long oam_pkt;
	unsigned long untag_okt;
	unsigned long other_pkt;
	unsigned long svlan_tag_pkt;
	unsigned long cvlan_tag_pkt;
	unsigned long dvlan_ocvlan_icvlan_pkt;
	unsigned long dvlan_osvlan_isvlan_pkt;
	unsigned long dvlan_osvlan_icvlan_pkt;
	unsigned long dvan_ocvlan_icvlan_pkt;

	/* L3/L4 Pkt type */
	unsigned long not_ip_pkt;
	unsigned long ip4_tcp_pkt;
	unsigned long ip4_udp_pkt;
	unsigned long ip4_icmp_pkt;
	unsigned long ip4_unknown_pkt;
	unsigned long ip6_tcp_pkt;
	unsigned long ip6_udp_pkt;
	unsigned long ip6_icmp_pkt;
	unsigned long ip6_unknown_pkt;

	/* Filter specific */
	unsigned long vlan_filter_match;
	unsigned long sa_filter_fail;
	unsigned long da_filter_fail;
	unsigned long hash_filter_pass;
	unsigned long l3_filter_match;
	unsigned long l4_filter_match;

	/* RX context specific */
	unsigned long timestamp_dropped;
	unsigned long rx_msg_type_no_ptp;
	unsigned long rx_ptp_type_sync;
	unsigned long rx_ptp_type_follow_up;
	unsigned long rx_ptp_type_delay_req;
	unsigned long rx_ptp_type_delay_resp;
	unsigned long rx_ptp_type_pdelay_req;
	unsigned long rx_ptp_type_pdelay_resp;
	unsigned long rx_ptp_type_pdelay_follow_up;
	unsigned long rx_ptp_announce;
	unsigned long rx_ptp_mgmt;
	unsigned long rx_ptp_signal;
	unsigned long rx_ptp_resv_msg_type;
};

struct mac_link {
	int port;
	int duplex;
	int speed;
};

struct mii_regs {
	unsigned int addr;	/* MII Address */
	unsigned int data;	/* MII Data */
};

struct sxgbe_core_ops {
	/* MAC core initialization */
	void (*core_init)(void __iomem *ioaddr);
	/* Dump MAC registers */
	void (*dump_regs)(void __iomem *ioaddr);
	/* Handle extra events on specific interrupts hw dependent */
	int (*host_irq_status)(void __iomem *ioaddr,
			       struct sxgbe_extra_stats *x);
	/* Set power management mode (e.g. magic frame) */
	void (*pmt)(void __iomem *ioaddr, unsigned long mode);
	/* Set/Get Unicast MAC addresses */
	void (*set_umac_addr)(void __iomem *ioaddr, unsigned char *addr,
			      unsigned int reg_n);
	void (*get_umac_addr)(void __iomem *ioaddr, unsigned char *addr,
			      unsigned int reg_n);
	void (*enable_rx)(void __iomem *ioaddr, bool enable);
	void (*enable_tx)(void __iomem *ioaddr, bool enable);

	/* controller version specific operations */
	int (*get_controller_version)(void __iomem *ioaddr);

	/* If supported then get the optional core features */
	unsigned int (*get_hw_feature)(void __iomem *ioaddr,
				       unsigned char feature_index);
	/* adjust SXGBE speed */
	void (*set_speed)(void __iomem *ioaddr, unsigned char speed);

	/* EEE-LPI specific operations */
	void (*set_eee_mode)(void __iomem *ioaddr);
	void (*reset_eee_mode)(void __iomem *ioaddr);
	void (*set_eee_timer)(void __iomem *ioaddr, const int ls,
			      const int tw);
	void (*set_eee_pls)(void __iomem *ioaddr, const int link);

	/* Enable disable checksum offload operations */
	void (*enable_rx_csum)(void __iomem *ioaddr);
	void (*disable_rx_csum)(void __iomem *ioaddr);
	void (*enable_rxqueue)(void __iomem *ioaddr, int queue_num);
	void (*disable_rxqueue)(void __iomem *ioaddr, int queue_num);
};

const struct sxgbe_core_ops *sxgbe_get_core_ops(void);

struct sxgbe_ops {
	const struct sxgbe_core_ops *mac;
	const struct sxgbe_desc_ops *desc;
	const struct sxgbe_dma_ops *dma;
	const struct sxgbe_mtl_ops *mtl;
	struct mii_regs mii;	/* MII register Addresses */
	struct mac_link link;
	unsigned int ctrl_uid;
	unsigned int ctrl_id;
};

/* SXGBE private data structures */
struct sxgbe_tx_queue {
	unsigned int irq_no;
	struct sxgbe_priv_data *priv_ptr;
	struct sxgbe_tx_norm_desc *dma_tx;
	dma_addr_t dma_tx_phy;
	dma_addr_t *tx_skbuff_dma;
	struct sk_buff **tx_skbuff;
	struct timer_list txtimer;
	spinlock_t tx_lock;	/* lock for tx queues */
	unsigned int cur_tx;
	unsigned int dirty_tx;
	u32 tx_count_frames;
	u32 tx_coal_frames;
	u32 tx_coal_timer;
	int hwts_tx_en;
	u16 prev_mss;
	u8 queue_no;
};

struct sxgbe_rx_queue {
	struct sxgbe_priv_data *priv_ptr;
	struct sxgbe_rx_norm_desc *dma_rx;
	struct sk_buff **rx_skbuff;
	unsigned int cur_rx;
	unsigned int dirty_rx;
	unsigned int irq_no;
	u32 rx_riwt;
	dma_addr_t *rx_skbuff_dma;
	dma_addr_t dma_rx_phy;
	u8 queue_no;
};

/* SXGBE HW capabilities */
struct sxgbe_hw_features {
	/****** CAP [0] *******/
	unsigned int pmt_remote_wake_up;
	unsigned int pmt_magic_frame;
	/* IEEE 1588-2008 */
	unsigned int atime_stamp;

	unsigned int eee;

	unsigned int tx_csum_offload;
	unsigned int rx_csum_offload;
	unsigned int multi_macaddr;
	unsigned int tstamp_srcselect;
	unsigned int sa_vlan_insert;

	/****** CAP [1] *******/
	unsigned int rxfifo_size;
	unsigned int txfifo_size;
	unsigned int atstmap_hword;
	unsigned int dcb_enable;
	unsigned int splithead_enable;
	unsigned int tcpseg_offload;
	unsigned int debug_mem;
	unsigned int rss_enable;
	unsigned int hash_tsize;
	unsigned int l3l4_filer_size;

	/* This value is in bytes and
	 * as mentioned in HW features
	 * of SXGBE data book
	 */
	unsigned int rx_mtl_qsize;
	unsigned int tx_mtl_qsize;

	/****** CAP [2] *******/
	/* TX and RX number of channels */
	unsigned int rx_mtl_queues;
	unsigned int tx_mtl_queues;
	unsigned int rx_dma_channels;
	unsigned int tx_dma_channels;
	unsigned int pps_output_count;
	unsigned int aux_input_count;
};

struct sxgbe_priv_data {
	/* DMA descriptos */
	struct sxgbe_tx_queue *txq[SXGBE_TX_QUEUES];
	struct sxgbe_rx_queue *rxq[SXGBE_RX_QUEUES];
	u8 cur_rx_qnum;

	unsigned int dma_tx_size;
	unsigned int dma_rx_size;
	unsigned int dma_buf_sz;
	u32 rx_riwt;

	struct napi_struct napi;

	void __iomem *ioaddr;
	struct net_device *dev;
	struct device *device;
	struct sxgbe_ops *hw;	/* sxgbe specific ops */
	int no_csum_insertion;
	int irq;
	int rxcsum_insertion;
	spinlock_t stats_lock;	/* lock for tx/rx statatics */

	struct phy_device *phydev;
	int oldlink;
	int speed;
	int oldduplex;
	struct mii_bus *mii;
	int mii_irq[PHY_MAX_ADDR];
	u8 rx_pause;
	u8 tx_pause;

	struct sxgbe_extra_stats xstats;
	struct sxgbe_plat_data *plat;
	struct sxgbe_hw_features hw_cap;

	u32 msg_enable;

	struct clk *sxgbe_clk;
	int clk_csr;
	unsigned int mode;
	unsigned int default_addend;

	/* advanced time stamp support */
	u32 adv_ts;
	int use_riwt;
	struct ptp_clock *ptp_clock;

	/* tc control */
	int tx_tc;
	int rx_tc;
	/* EEE-LPI specific members */
	struct timer_list eee_ctrl_timer;
	bool tx_path_in_lpi_mode;
	int lpi_irq;
	int eee_enabled;
	int eee_active;
	int tx_lpi_timer;
};

/* Function prototypes */
struct sxgbe_priv_data *sxgbe_drv_probe(struct device *device,
					struct sxgbe_plat_data *plat_dat,
					void __iomem *addr);
int sxgbe_drv_remove(struct net_device *ndev);
void sxgbe_set_ethtool_ops(struct net_device *netdev);
int sxgbe_mdio_unregister(struct net_device *ndev);
int sxgbe_mdio_register(struct net_device *ndev);
int sxgbe_register_platform(void);
void sxgbe_unregister_platform(void);

#ifdef CONFIG_PM
int sxgbe_suspend(struct net_device *ndev);
int sxgbe_resume(struct net_device *ndev);
int sxgbe_freeze(struct net_device *ndev);
int sxgbe_restore(struct net_device *ndev);
#endif /* CONFIG_PM */

const struct sxgbe_mtl_ops *sxgbe_get_mtl_ops(void);

void sxgbe_disable_eee_mode(struct sxgbe_priv_data * const priv);
bool sxgbe_eee_init(struct sxgbe_priv_data * const priv);
#endif /* __SXGBE_COMMON_H__ */
