cregit-Linux how code gets into the kernel

Release 4.10 drivers/net/ethernet/qualcomm/emac/emac.h

/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#ifndef _EMAC_H_

#define _EMAC_H_

#include <linux/irqreturn.h>
#include <linux/netdevice.h>
#include <linux/clk.h>
#include <linux/platform_device.h>
#include "emac-mac.h"
#include "emac-phy.h"

/* EMAC base register offsets */

#define EMAC_DMA_MAS_CTRL                                     0x001400

#define EMAC_IRQ_MOD_TIM_INIT                                 0x001408

#define EMAC_BLK_IDLE_STS                                     0x00140c

#define EMAC_PHY_LINK_DELAY                                   0x00141c

#define EMAC_SYS_ALIV_CTRL                                    0x001434

#define EMAC_MAC_IPGIFG_CTRL                                  0x001484

#define EMAC_MAC_STA_ADDR0                                    0x001488

#define EMAC_MAC_STA_ADDR1                                    0x00148c

#define EMAC_HASH_TAB_REG0                                    0x001490

#define EMAC_HASH_TAB_REG1                                    0x001494

#define EMAC_MAC_HALF_DPLX_CTRL                               0x001498

#define EMAC_MAX_FRAM_LEN_CTRL                                0x00149c

#define EMAC_INT_STATUS                                       0x001600

#define EMAC_INT_MASK                                         0x001604

#define EMAC_RXMAC_STATC_REG0                                 0x001700

#define EMAC_RXMAC_STATC_REG22                                0x001758

#define EMAC_TXMAC_STATC_REG0                                 0x001760

#define EMAC_TXMAC_STATC_REG24                                0x0017c0

#define EMAC_CORE_HW_VERSION                                  0x001974

#define EMAC_IDT_TABLE0                                       0x001b00

#define EMAC_RXMAC_STATC_REG23                                0x001bc8

#define EMAC_RXMAC_STATC_REG24                                0x001bcc

#define EMAC_TXMAC_STATC_REG25                                0x001bd0

#define EMAC_INT1_MASK                                        0x001bf0

#define EMAC_INT1_STATUS                                      0x001bf4

#define EMAC_INT2_MASK                                        0x001bf8

#define EMAC_INT2_STATUS                                      0x001bfc

#define EMAC_INT3_MASK                                        0x001c00

#define EMAC_INT3_STATUS                                      0x001c04

/* EMAC_DMA_MAS_CTRL */

#define DEV_ID_NUM_BMSK                                     0x7f000000

#define DEV_ID_NUM_SHFT                                             24

#define DEV_REV_NUM_BMSK                                      0xff0000

#define DEV_REV_NUM_SHFT                                            16

#define INT_RD_CLR_EN                                           0x4000

#define IRQ_MODERATOR2_EN                                        0x800

#define IRQ_MODERATOR_EN                                         0x400

#define LPW_CLK_SEL                                               0x80

#define LPW_STATE                                                 0x20

#define LPW_MODE                                                  0x10

#define SOFT_RST                                                   0x1

/* EMAC_IRQ_MOD_TIM_INIT */

#define IRQ_MODERATOR2_INIT_BMSK                            0xffff0000

#define IRQ_MODERATOR2_INIT_SHFT                                    16

#define IRQ_MODERATOR_INIT_BMSK                                 0xffff

#define IRQ_MODERATOR_INIT_SHFT                                      0

/* EMAC_INT_STATUS */

#define DIS_INT                                                BIT(31)

#define PTP_INT                                                BIT(30)

#define RFD4_UR_INT                                            BIT(29)

#define TX_PKT_INT3                                            BIT(26)

#define TX_PKT_INT2                                            BIT(25)

#define TX_PKT_INT1                                            BIT(24)

#define RX_PKT_INT3                                            BIT(19)

#define RX_PKT_INT2                                            BIT(18)

#define RX_PKT_INT1                                            BIT(17)

#define RX_PKT_INT0                                            BIT(16)

#define TX_PKT_INT                                             BIT(15)

#define TXQ_TO_INT                                             BIT(14)

#define GPHY_WAKEUP_INT                                        BIT(13)

#define GPHY_LINK_DOWN_INT                                     BIT(12)

#define GPHY_LINK_UP_INT                                       BIT(11)

#define DMAW_TO_INT                                            BIT(10)

#define DMAR_TO_INT                                             BIT(9)

#define TXF_UR_INT                                              BIT(8)

#define RFD3_UR_INT                                             BIT(7)

#define RFD2_UR_INT                                             BIT(6)

#define RFD1_UR_INT                                             BIT(5)

#define RFD0_UR_INT                                             BIT(4)

#define RXF_OF_INT                                              BIT(3)

#define SW_MAN_INT                                              BIT(2)

/* EMAC_MAILBOX_6 */

#define RFD2_PROC_IDX_BMSK                                   0xfff0000

#define RFD2_PROC_IDX_SHFT                                          16

#define RFD2_PROD_IDX_BMSK                                       0xfff

#define RFD2_PROD_IDX_SHFT                                           0

/* EMAC_CORE_HW_VERSION */

#define MAJOR_BMSK                                          0xf0000000

#define MAJOR_SHFT                                                  28

#define MINOR_BMSK                                           0xfff0000

#define MINOR_SHFT                                                  16

#define STEP_BMSK                                               0xffff

#define STEP_SHFT                                                    0

/* EMAC_EMAC_WRAPPER_CSR1 */

#define TX_INDX_FIFO_SYNC_RST                                  BIT(23)

#define TX_TS_FIFO_SYNC_RST                                    BIT(22)

#define RX_TS_FIFO2_SYNC_RST                                   BIT(21)

#define RX_TS_FIFO1_SYNC_RST                                   BIT(20)

#define TX_TS_ENABLE                                           BIT(16)

#define DIS_1588_CLKS                                          BIT(11)

#define FREQ_MODE                                               BIT(9)

#define ENABLE_RRD_TIMESTAMP                                    BIT(3)

/* EMAC_EMAC_WRAPPER_CSR2 */

#define HDRIVE_BMSK                                             0x3000

#define HDRIVE_SHFT                                                 12

#define SLB_EN                                                  BIT(9)

#define PLB_EN                                                  BIT(8)

#define WOL_EN                                                  BIT(3)

#define PHY_RESET                                               BIT(0)


#define EMAC_DEV_ID                                             0x0040

/* SGMII v2 per lane registers */

#define SGMII_LN_RSM_START             0x029C

/* SGMII v2 PHY common registers */

#define SGMII_PHY_CMN_CTRL            0x0408

#define SGMII_PHY_CMN_RESET_CTRL      0x0410

/* SGMII v2 PHY registers per lane */

#define SGMII_PHY_LN_OFFSET          0x0400

#define SGMII_PHY_LN_LANE_STATUS     0x00DC

#define SGMII_PHY_LN_BIST_GEN0       0x008C

#define SGMII_PHY_LN_BIST_GEN1       0x0090

#define SGMII_PHY_LN_BIST_GEN2       0x0094

#define SGMII_PHY_LN_BIST_GEN3       0x0098

#define SGMII_PHY_LN_CDR_CTRL1       0x005C


enum emac_clk_id {
	
EMAC_CLK_AXI,
	
EMAC_CLK_CFG_AHB,
	
EMAC_CLK_HIGH_SPEED,
	
EMAC_CLK_MDIO,
	
EMAC_CLK_TX,
	
EMAC_CLK_RX,
	
EMAC_CLK_SYS,
	
EMAC_CLK_CNT
};


#define EMAC_LINK_SPEED_UNKNOWN                                    0x0

#define EMAC_LINK_SPEED_10_HALF                                 BIT(0)

#define EMAC_LINK_SPEED_10_FULL                                 BIT(1)

#define EMAC_LINK_SPEED_100_HALF                                BIT(2)

#define EMAC_LINK_SPEED_100_FULL                                BIT(3)

#define EMAC_LINK_SPEED_1GB_FULL                                BIT(5)


#define EMAC_MAX_SETUP_LNK_CYCLE                                   100

/* Wake On Lan */

#define EMAC_WOL_PHY                     0x00000001 
/* PHY Status Change */

#define EMAC_WOL_MAGIC                   0x00000002 
/* Magic Packet */


struct emac_stats {
	/* rx */
	
u64 rx_ok;              /* good packets */
	
u64 rx_bcast;           /* good broadcast packets */
	
u64 rx_mcast;           /* good multicast packets */
	
u64 rx_pause;           /* pause packet */
	
u64 rx_ctrl;            /* control packets other than pause frame. */
	
u64 rx_fcs_err;         /* packets with bad FCS. */
	
u64 rx_len_err;         /* packets with length mismatch */
	
u64 rx_byte_cnt;        /* good bytes count (without FCS) */
	
u64 rx_runt;            /* runt packets */
	
u64 rx_frag;            /* fragment count */
	
u64 rx_sz_64;	        /* packets that are 64 bytes */
	
u64 rx_sz_65_127;       /* packets that are 65-127 bytes */
	
u64 rx_sz_128_255;      /* packets that are 128-255 bytes */
	
u64 rx_sz_256_511;      /* packets that are 256-511 bytes */
	
u64 rx_sz_512_1023;     /* packets that are 512-1023 bytes */
	
u64 rx_sz_1024_1518;    /* packets that are 1024-1518 bytes */
	
u64 rx_sz_1519_max;     /* packets that are 1519-MTU bytes*/
	
u64 rx_sz_ov;           /* packets that are >MTU bytes (truncated) */
	
u64 rx_rxf_ov;          /* packets dropped due to RX FIFO overflow */
	
u64 rx_align_err;       /* alignment errors */
	
u64 rx_bcast_byte_cnt;  /* broadcast packets byte count (without FCS) */
	
u64 rx_mcast_byte_cnt;  /* multicast packets byte count (without FCS) */
	
u64 rx_err_addr;        /* packets dropped due to address filtering */
	
u64 rx_crc_align;       /* CRC align errors */
	
u64 rx_jabbers;         /* jabbers */

	/* tx */
	
u64 tx_ok;              /* good packets */
	
u64 tx_bcast;           /* good broadcast packets */
	
u64 tx_mcast;           /* good multicast packets */
	
u64 tx_pause;           /* pause packets */
	
u64 tx_exc_defer;       /* packets with excessive deferral */
	
u64 tx_ctrl;            /* control packets other than pause frame */
	
u64 tx_defer;           /* packets that are deferred. */
	
u64 tx_byte_cnt;        /* good bytes count (without FCS) */
	
u64 tx_sz_64;           /* packets that are 64 bytes */
	
u64 tx_sz_65_127;       /* packets that are 65-127 bytes */
	
u64 tx_sz_128_255;      /* packets that are 128-255 bytes */
	
u64 tx_sz_256_511;      /* packets that are 256-511 bytes */
	
u64 tx_sz_512_1023;     /* packets that are 512-1023 bytes */
	
u64 tx_sz_1024_1518;    /* packets that are 1024-1518 bytes */
	
u64 tx_sz_1519_max;     /* packets that are 1519-MTU bytes */
	
u64 tx_1_col;           /* packets single prior collision */
	
u64 tx_2_col;           /* packets with multiple prior collisions */
	
u64 tx_late_col;        /* packets with late collisions */
	
u64 tx_abort_col;       /* packets aborted due to excess collisions */
	
u64 tx_underrun;        /* packets aborted due to FIFO underrun */
	
u64 tx_rd_eop;          /* count of reads beyond EOP */
	
u64 tx_len_err;         /* packets with length mismatch */
	
u64 tx_trunc;           /* packets truncated due to size >MTU */
	
u64 tx_bcast_byte;      /* broadcast packets byte count (without FCS) */
	
u64 tx_mcast_byte;      /* multicast packets byte count (without FCS) */
	
u64 tx_col;             /* collisions */

	
spinlock_t lock;	/* prevent multiple simultaneous readers */
};

/* RSS hstype Definitions */

#define EMAC_RSS_HSTYP_IPV4_EN				    0x00000001

#define EMAC_RSS_HSTYP_TCP4_EN				    0x00000002

#define EMAC_RSS_HSTYP_IPV6_EN				    0x00000004

#define EMAC_RSS_HSTYP_TCP6_EN				    0x00000008

#define EMAC_RSS_HSTYP_ALL_EN (\
                EMAC_RSS_HSTYP_IPV4_EN   |\
                EMAC_RSS_HSTYP_TCP4_EN   |\
                EMAC_RSS_HSTYP_IPV6_EN   |\
                EMAC_RSS_HSTYP_TCP6_EN)


#define EMAC_VLAN_TO_TAG(_vlan, _tag) \
		(_tag =  ((((_vlan) >> 8) & 0xFF) | (((_vlan) & 0xFF) << 8)))


#define EMAC_TAG_TO_VLAN(_tag, _vlan) \
		(_vlan = ((((_tag) >> 8) & 0xFF) | (((_tag) & 0xFF) << 8)))


#define EMAC_DEF_RX_BUF_SIZE					  1536

#define EMAC_MAX_JUMBO_PKT_SIZE				    (9 * 1024)

#define EMAC_MAX_TX_OFFLOAD_THRESH			    (9 * 1024)


#define EMAC_MAX_ETH_FRAME_SIZE		       EMAC_MAX_JUMBO_PKT_SIZE

#define EMAC_MIN_ETH_FRAME_SIZE					    68


#define EMAC_DEF_TX_QUEUES					     1

#define EMAC_DEF_RX_QUEUES					     1


#define EMAC_MIN_TX_DESCS					   128

#define EMAC_MIN_RX_DESCS					   128


#define EMAC_MAX_TX_DESCS					 16383

#define EMAC_MAX_RX_DESCS					  2047


#define EMAC_DEF_TX_DESCS					   512

#define EMAC_DEF_RX_DESCS					   256


#define EMAC_DEF_RX_IRQ_MOD					   250

#define EMAC_DEF_TX_IRQ_MOD					   250


#define EMAC_WATCHDOG_TIME				      (5 * HZ)

/* by default check link every 4 seconds */

#define EMAC_TRY_LINK_TIMEOUT				      (4 * HZ)

/* emac_irq per-device (per-adapter) irq properties.
 * @irq:        irq number.
 * @mask        mask to use over status register.
 */

struct emac_irq {
	
unsigned int	irq;
	
u32		mask;
};

/* The device's main data structure */

struct emac_adapter {
	
struct net_device		*netdev;
	
struct mii_bus			*mii_bus;
	
struct phy_device		*phydev;

	
void __iomem			*base;
	
void __iomem			*csr;

	
struct emac_phy			phy;
	
struct emac_stats		stats;

	
struct emac_irq			irq;
	
struct clk			*clk[EMAC_CLK_CNT];

	/* All Descriptor memory */
	
struct emac_ring_header		ring_header;
	
struct emac_tx_queue		tx_q;
	
struct emac_rx_queue		rx_q;
	
unsigned int			tx_desc_cnt;
	
unsigned int			rx_desc_cnt;
	
unsigned int			rrd_size; /* in quad words */
	
unsigned int			rfd_size; /* in quad words */
	
unsigned int			tpd_size; /* in quad words */

	
unsigned int			rxbuf_size;

	/* Ring parameter */
	
u8				tpd_burst;
	
u8				rfd_burst;
	
unsigned int			dmaw_dly_cnt;
	
unsigned int			dmar_dly_cnt;
	
enum emac_dma_req_block		dmar_block;
	
enum emac_dma_req_block		dmaw_block;
	
enum emac_dma_order		dma_order;

	
u32				irq_mod;
	
u32				preamble;

	
struct work_struct		work_thread;

	
u16				msg_enable;

	
struct mutex			reset_lock;
};

int emac_reinit_locked(struct emac_adapter *adpt);
void emac_reg_update32(void __iomem *addr, u32 mask, u32 val);
irqreturn_t emac_isr(int irq, void *data);

#endif /* _EMAC_H_ */

Overall Contributors

PersonTokensPropCommitsCommitProp
timur tabitimur tabi1018100.00%1100.00%
Total1018100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.