xref: /openbmc/linux/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h (revision 762f99f4f3cb41a775b5157dd761217beba65873)
12b72c9e3SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
21c1538beSJeff Kirsher /*
31c1538beSJeff Kirsher  * Copyright (C) 1999 - 2010 Intel Corporation.
41c1538beSJeff Kirsher  * Copyright (C) 2010 OKI SEMICONDUCTOR Co., LTD.
51c1538beSJeff Kirsher  *
61c1538beSJeff Kirsher  * This code was derived from the Intel e1000e Linux driver.
71c1538beSJeff Kirsher  */
81c1538beSJeff Kirsher 
91c1538beSJeff Kirsher #ifndef _PCH_GBE_H_
101c1538beSJeff Kirsher #define _PCH_GBE_H_
111c1538beSJeff Kirsher 
121c1538beSJeff Kirsher #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
131c1538beSJeff Kirsher 
141c1538beSJeff Kirsher #include <linux/mii.h>
151c1538beSJeff Kirsher #include <linux/delay.h>
161c1538beSJeff Kirsher #include <linux/pci.h>
171c1538beSJeff Kirsher #include <linux/netdevice.h>
181c1538beSJeff Kirsher #include <linux/etherdevice.h>
191c1538beSJeff Kirsher #include <linux/ethtool.h>
201c1538beSJeff Kirsher #include <linux/vmalloc.h>
211c1538beSJeff Kirsher #include <net/ip.h>
221c1538beSJeff Kirsher #include <net/tcp.h>
231c1538beSJeff Kirsher #include <net/udp.h>
241c1538beSJeff Kirsher 
251c1538beSJeff Kirsher /**
261c1538beSJeff Kirsher  * pch_gbe_regs_mac_adr - Structure holding values of mac address registers
271c1538beSJeff Kirsher  * @high	Denotes the 1st to 4th byte from the initial of MAC address
281c1538beSJeff Kirsher  * @low		Denotes the 5th to 6th byte from the initial of MAC address
291c1538beSJeff Kirsher  */
301c1538beSJeff Kirsher struct pch_gbe_regs_mac_adr {
311c1538beSJeff Kirsher 	u32 high;
321c1538beSJeff Kirsher 	u32 low;
331c1538beSJeff Kirsher };
341c1538beSJeff Kirsher /**
351c1538beSJeff Kirsher  * pch_udc_regs - Structure holding values of MAC registers
361c1538beSJeff Kirsher  */
371c1538beSJeff Kirsher struct pch_gbe_regs {
381c1538beSJeff Kirsher 	u32 INT_ST;
391c1538beSJeff Kirsher 	u32 INT_EN;
401c1538beSJeff Kirsher 	u32 MODE;
411c1538beSJeff Kirsher 	u32 RESET;
421c1538beSJeff Kirsher 	u32 TCPIP_ACC;
431c1538beSJeff Kirsher 	u32 EX_LIST;
441c1538beSJeff Kirsher 	u32 INT_ST_HOLD;
451c1538beSJeff Kirsher 	u32 PHY_INT_CTRL;
461c1538beSJeff Kirsher 	u32 MAC_RX_EN;
471c1538beSJeff Kirsher 	u32 RX_FCTRL;
481c1538beSJeff Kirsher 	u32 PAUSE_REQ;
491c1538beSJeff Kirsher 	u32 RX_MODE;
501c1538beSJeff Kirsher 	u32 TX_MODE;
511c1538beSJeff Kirsher 	u32 RX_FIFO_ST;
521c1538beSJeff Kirsher 	u32 TX_FIFO_ST;
531c1538beSJeff Kirsher 	u32 TX_FID;
541c1538beSJeff Kirsher 	u32 TX_RESULT;
551c1538beSJeff Kirsher 	u32 PAUSE_PKT1;
561c1538beSJeff Kirsher 	u32 PAUSE_PKT2;
571c1538beSJeff Kirsher 	u32 PAUSE_PKT3;
581c1538beSJeff Kirsher 	u32 PAUSE_PKT4;
591c1538beSJeff Kirsher 	u32 PAUSE_PKT5;
601c1538beSJeff Kirsher 	u32 reserve[2];
611c1538beSJeff Kirsher 	struct pch_gbe_regs_mac_adr mac_adr[16];
621c1538beSJeff Kirsher 	u32 ADDR_MASK;
631c1538beSJeff Kirsher 	u32 MIIM;
641c1538beSJeff Kirsher 	u32 MAC_ADDR_LOAD;
651c1538beSJeff Kirsher 	u32 RGMII_ST;
661c1538beSJeff Kirsher 	u32 RGMII_CTRL;
671c1538beSJeff Kirsher 	u32 reserve3[3];
681c1538beSJeff Kirsher 	u32 DMA_CTRL;
691c1538beSJeff Kirsher 	u32 reserve4[3];
701c1538beSJeff Kirsher 	u32 RX_DSC_BASE;
711c1538beSJeff Kirsher 	u32 RX_DSC_SIZE;
721c1538beSJeff Kirsher 	u32 RX_DSC_HW_P;
731c1538beSJeff Kirsher 	u32 RX_DSC_HW_P_HLD;
741c1538beSJeff Kirsher 	u32 RX_DSC_SW_P;
751c1538beSJeff Kirsher 	u32 reserve5[3];
761c1538beSJeff Kirsher 	u32 TX_DSC_BASE;
771c1538beSJeff Kirsher 	u32 TX_DSC_SIZE;
781c1538beSJeff Kirsher 	u32 TX_DSC_HW_P;
791c1538beSJeff Kirsher 	u32 TX_DSC_HW_P_HLD;
801c1538beSJeff Kirsher 	u32 TX_DSC_SW_P;
811c1538beSJeff Kirsher 	u32 reserve6[3];
821c1538beSJeff Kirsher 	u32 RX_DMA_ST;
831c1538beSJeff Kirsher 	u32 TX_DMA_ST;
841c1538beSJeff Kirsher 	u32 reserve7[2];
851c1538beSJeff Kirsher 	u32 WOL_ST;
861c1538beSJeff Kirsher 	u32 WOL_CTRL;
871c1538beSJeff Kirsher 	u32 WOL_ADDR_MASK;
881c1538beSJeff Kirsher };
891c1538beSJeff Kirsher 
901c1538beSJeff Kirsher /* Interrupt Status */
911c1538beSJeff Kirsher /* Interrupt Status Hold */
921c1538beSJeff Kirsher /* Interrupt Enable */
931c1538beSJeff Kirsher #define PCH_GBE_INT_RX_DMA_CMPLT  0x00000001 /* Receive DMA Transfer Complete */
941c1538beSJeff Kirsher #define PCH_GBE_INT_RX_VALID      0x00000002 /* MAC Normal Receive Complete */
951c1538beSJeff Kirsher #define PCH_GBE_INT_RX_FRAME_ERR  0x00000004 /* Receive frame error */
961c1538beSJeff Kirsher #define PCH_GBE_INT_RX_FIFO_ERR   0x00000008 /* Receive FIFO Overflow */
971c1538beSJeff Kirsher #define PCH_GBE_INT_RX_DMA_ERR    0x00000010 /* Receive DMA Transfer Error */
981c1538beSJeff Kirsher #define PCH_GBE_INT_RX_DSC_EMP    0x00000020 /* Receive Descriptor Empty */
991c1538beSJeff Kirsher #define PCH_GBE_INT_TX_CMPLT      0x00000100 /* MAC Transmission Complete */
1001c1538beSJeff Kirsher #define PCH_GBE_INT_TX_DMA_CMPLT  0x00000200 /* DMA Transfer Complete */
1011c1538beSJeff Kirsher #define PCH_GBE_INT_TX_FIFO_ERR   0x00000400 /* Transmission FIFO underflow. */
1021c1538beSJeff Kirsher #define PCH_GBE_INT_TX_DMA_ERR    0x00000800 /* Transmission DMA Error */
1031c1538beSJeff Kirsher #define PCH_GBE_INT_PAUSE_CMPLT   0x00001000 /* Pause Transmission complete */
1041c1538beSJeff Kirsher #define PCH_GBE_INT_MIIM_CMPLT    0x00010000 /* MIIM I/F Read completion */
1051c1538beSJeff Kirsher #define PCH_GBE_INT_PHY_INT       0x00100000 /* Interruption from PHY */
1061c1538beSJeff Kirsher #define PCH_GBE_INT_WOL_DET       0x01000000 /* Wake On LAN Event detection. */
1071c1538beSJeff Kirsher #define PCH_GBE_INT_TCPIP_ERR     0x10000000 /* TCP/IP Accelerator Error */
1081c1538beSJeff Kirsher 
1091c1538beSJeff Kirsher /* Mode */
1101c1538beSJeff Kirsher #define PCH_GBE_MODE_MII_ETHER      0x00000000  /* GIGA Ethernet Mode [MII] */
1111c1538beSJeff Kirsher #define PCH_GBE_MODE_GMII_ETHER     0x80000000  /* GIGA Ethernet Mode [GMII] */
1121c1538beSJeff Kirsher #define PCH_GBE_MODE_HALF_DUPLEX    0x00000000  /* Duplex Mode [half duplex] */
1131c1538beSJeff Kirsher #define PCH_GBE_MODE_FULL_DUPLEX    0x40000000  /* Duplex Mode [full duplex] */
1141c1538beSJeff Kirsher #define PCH_GBE_MODE_FR_BST         0x04000000  /* Frame bursting is done */
1151c1538beSJeff Kirsher 
1161c1538beSJeff Kirsher /* Reset */
1171c1538beSJeff Kirsher #define PCH_GBE_ALL_RST         0x80000000  /* All reset */
1188decf868SDavid S. Miller #define PCH_GBE_TX_RST          0x00008000  /* TX MAC, TX FIFO, TX DMA reset */
1198decf868SDavid S. Miller #define PCH_GBE_RX_RST          0x00004000  /* RX MAC, RX FIFO, RX DMA reset */
1201c1538beSJeff Kirsher 
1211c1538beSJeff Kirsher /* TCP/IP Accelerator Control */
1221c1538beSJeff Kirsher #define PCH_GBE_EX_LIST_EN      0x00000008  /* External List Enable */
1231c1538beSJeff Kirsher #define PCH_GBE_RX_TCPIPACC_OFF 0x00000004  /* RX TCP/IP ACC Disabled */
1241c1538beSJeff Kirsher #define PCH_GBE_TX_TCPIPACC_EN  0x00000002  /* TX TCP/IP ACC Enable */
1251c1538beSJeff Kirsher #define PCH_GBE_RX_TCPIPACC_EN  0x00000001  /* RX TCP/IP ACC Enable */
1261c1538beSJeff Kirsher 
1271c1538beSJeff Kirsher /* MAC RX Enable */
1281c1538beSJeff Kirsher #define PCH_GBE_MRE_MAC_RX_EN   0x00000001      /* MAC Receive Enable */
1291c1538beSJeff Kirsher 
1301c1538beSJeff Kirsher /* RX Flow Control */
1311c1538beSJeff Kirsher #define PCH_GBE_FL_CTRL_EN      0x80000000  /* Pause packet is enabled */
1321c1538beSJeff Kirsher 
1331c1538beSJeff Kirsher /* Pause Packet Request */
1341c1538beSJeff Kirsher #define PCH_GBE_PS_PKT_RQ       0x80000000  /* Pause packet Request */
1351c1538beSJeff Kirsher 
1361c1538beSJeff Kirsher /* RX Mode */
1371c1538beSJeff Kirsher #define PCH_GBE_ADD_FIL_EN      0x80000000  /* Address Filtering Enable */
1381c1538beSJeff Kirsher /* Multicast Filtering Enable */
1391c1538beSJeff Kirsher #define PCH_GBE_MLT_FIL_EN      0x40000000
1401c1538beSJeff Kirsher /* Receive Almost Empty Threshold */
1411c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_EMP_4    0x00000000      /* 4 words */
1421c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_EMP_8    0x00004000      /* 8 words */
1431c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_EMP_16   0x00008000      /* 16 words */
1441c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_EMP_32   0x0000C000      /* 32 words */
1451c1538beSJeff Kirsher /* Receive Almost Full Threshold */
1461c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_FULL_4   0x00000000      /* 4 words */
1471c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_FULL_8   0x00001000      /* 8 words */
1481c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_FULL_16  0x00002000      /* 16 words */
1491c1538beSJeff Kirsher #define PCH_GBE_RH_ALM_FULL_32  0x00003000      /* 32 words */
150*6564cfefSFlavio Suligoi /* RX FIFO Read Trigger Threshold */
1511c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_4     0x00000000      /* 4 words */
1521c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_8     0x00000200      /* 8 words */
1531c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_16    0x00000400      /* 16 words */
1541c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_32    0x00000600      /* 32 words */
1551c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_64    0x00000800      /* 64 words */
1561c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_128   0x00000A00      /* 128 words */
1571c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_256   0x00000C00      /* 256 words */
1581c1538beSJeff Kirsher #define PCH_GBE_RH_RD_TRG_512   0x00000E00      /* 512 words */
1591c1538beSJeff Kirsher 
1601c1538beSJeff Kirsher /* Receive Descriptor bit definitions */
1611c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_BCAST          0x00000400
1621c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_MCAST          0x00000200
1631c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_UCAST          0x00000100
1641c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_TCPIPOK        0x000000C0
1651c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_IPOK           0x00000080
1661c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_TCPOK          0x00000040
1671c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_IP6ERR         0x00000020
1681c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_OFLIST         0x00000010
1691c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_TYPEIP         0x00000008
1701c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_MACL           0x00000004
1711c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_PPPOE          0x00000002
1721c1538beSJeff Kirsher #define PCH_GBE_RXD_ACC_STAT_VTAGT          0x00000001
1731c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_PAUSE         0x0200
1741c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_MARBR         0x0100
1751c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_MARMLT        0x0080
1761c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_MARIND        0x0040
1771c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_MARNOTMT      0x0020
1781c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_TLONG         0x0010
1791c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_TSHRT         0x0008
1801c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_NOTOCTAL      0x0004
1811c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_NBLERR        0x0002
1821c1538beSJeff Kirsher #define PCH_GBE_RXD_GMAC_STAT_CRCERR        0x0001
1831c1538beSJeff Kirsher 
1841c1538beSJeff Kirsher /* Transmit Descriptor bit definitions */
1851c1538beSJeff Kirsher #define PCH_GBE_TXD_CTRL_TCPIP_ACC_OFF      0x0008
1861c1538beSJeff Kirsher #define PCH_GBE_TXD_CTRL_ITAG               0x0004
1871c1538beSJeff Kirsher #define PCH_GBE_TXD_CTRL_ICRC               0x0002
1881c1538beSJeff Kirsher #define PCH_GBE_TXD_CTRL_APAD               0x0001
1891c1538beSJeff Kirsher #define PCH_GBE_TXD_WORDS_SHIFT             2
1901c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_CMPLT         0x2000
1911c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_ABT           0x1000
1921c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_EXCOL         0x0800
1931c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_SNGCOL        0x0400
1941c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_MLTCOL        0x0200
1951c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_CRSER         0x0100
1961c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_TLNG          0x0080
1971c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_TSHRT         0x0040
1981c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_LTCOL         0x0020
1991c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_TFUNDFLW      0x0010
2001c1538beSJeff Kirsher #define PCH_GBE_TXD_GMAC_STAT_RTYCNT_MASK   0x000F
2011c1538beSJeff Kirsher 
2021c1538beSJeff Kirsher /* TX Mode */
2031c1538beSJeff Kirsher #define PCH_GBE_TM_NO_RTRY     0x80000000 /* No Retransmission */
2041c1538beSJeff Kirsher #define PCH_GBE_TM_LONG_PKT    0x40000000 /* Long Packt TX Enable */
2051c1538beSJeff Kirsher #define PCH_GBE_TM_ST_AND_FD   0x20000000 /* Stare and Forward */
2061c1538beSJeff Kirsher #define PCH_GBE_TM_SHORT_PKT   0x10000000 /* Short Packet TX Enable */
2071c1538beSJeff Kirsher #define PCH_GBE_TM_LTCOL_RETX  0x08000000 /* Retransmission at Late Collision */
2081c1538beSJeff Kirsher /* Frame Start Threshold */
2091c1538beSJeff Kirsher #define PCH_GBE_TM_TH_TX_STRT_4    0x00000000    /* 4 words */
2101c1538beSJeff Kirsher #define PCH_GBE_TM_TH_TX_STRT_8    0x00004000    /* 8 words */
2111c1538beSJeff Kirsher #define PCH_GBE_TM_TH_TX_STRT_16   0x00008000    /* 16 words */
2121c1538beSJeff Kirsher #define PCH_GBE_TM_TH_TX_STRT_32   0x0000C000    /* 32 words */
2131c1538beSJeff Kirsher /* Transmit Almost Empty Threshold */
2141c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_4    0x00000000    /* 4 words */
2151c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_8    0x00000800    /* 8 words */
2161c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_16   0x00001000    /* 16 words */
2171c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_32   0x00001800    /* 32 words */
2181c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_64   0x00002000    /* 64 words */
2191c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_128  0x00002800    /* 128 words */
2201c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_256  0x00003000    /* 256 words */
2211c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_EMP_512  0x00003800    /* 512 words */
2221c1538beSJeff Kirsher /* Transmit Almost Full Threshold */
2231c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_FULL_4   0x00000000    /* 4 words */
2241c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_FULL_8   0x00000200    /* 8 words */
2251c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_FULL_16  0x00000400    /* 16 words */
2261c1538beSJeff Kirsher #define PCH_GBE_TM_TH_ALM_FULL_32  0x00000600    /* 32 words */
2271c1538beSJeff Kirsher 
2281c1538beSJeff Kirsher /* RX FIFO Status */
2291c1538beSJeff Kirsher #define PCH_GBE_RF_ALM_FULL     0x80000000  /* RX FIFO is almost full. */
2301c1538beSJeff Kirsher #define PCH_GBE_RF_ALM_EMP      0x40000000  /* RX FIFO is almost empty. */
2311c1538beSJeff Kirsher #define PCH_GBE_RF_RD_TRG       0x20000000  /* Become more than RH_RD_TRG. */
2321c1538beSJeff Kirsher #define PCH_GBE_RF_STRWD        0x1FFE0000  /* The word count of RX FIFO. */
2331c1538beSJeff Kirsher #define PCH_GBE_RF_RCVING       0x00010000  /* Stored in RX FIFO. */
2341c1538beSJeff Kirsher 
2351c1538beSJeff Kirsher /* MAC Address Mask */
2361c1538beSJeff Kirsher #define PCH_GBE_BUSY                0x80000000
2371c1538beSJeff Kirsher 
2381c1538beSJeff Kirsher /* MIIM  */
2391c1538beSJeff Kirsher #define PCH_GBE_MIIM_OPER_WRITE     0x04000000
2401c1538beSJeff Kirsher #define PCH_GBE_MIIM_OPER_READ      0x00000000
2411c1538beSJeff Kirsher #define PCH_GBE_MIIM_OPER_READY     0x04000000
2421c1538beSJeff Kirsher #define PCH_GBE_MIIM_PHY_ADDR_SHIFT 21
2431c1538beSJeff Kirsher #define PCH_GBE_MIIM_REG_ADDR_SHIFT 16
2441c1538beSJeff Kirsher 
2451c1538beSJeff Kirsher /* RGMII Status */
2461c1538beSJeff Kirsher #define PCH_GBE_LINK_UP             0x80000008
2471c1538beSJeff Kirsher #define PCH_GBE_RXC_SPEED_MSK       0x00000006
2481c1538beSJeff Kirsher #define PCH_GBE_RXC_SPEED_2_5M      0x00000000    /* 2.5MHz */
2491c1538beSJeff Kirsher #define PCH_GBE_RXC_SPEED_25M       0x00000002    /* 25MHz  */
2501c1538beSJeff Kirsher #define PCH_GBE_RXC_SPEED_125M      0x00000004    /* 100MHz */
2511c1538beSJeff Kirsher #define PCH_GBE_DUPLEX_FULL         0x00000001
2521c1538beSJeff Kirsher 
2531c1538beSJeff Kirsher /* RGMII Control */
2541c1538beSJeff Kirsher #define PCH_GBE_CRS_SEL             0x00000010
2551c1538beSJeff Kirsher #define PCH_GBE_RGMII_RATE_125M     0x00000000
2561c1538beSJeff Kirsher #define PCH_GBE_RGMII_RATE_25M      0x00000008
2571c1538beSJeff Kirsher #define PCH_GBE_RGMII_RATE_2_5M     0x0000000C
2581c1538beSJeff Kirsher #define PCH_GBE_RGMII_MODE_GMII     0x00000000
2591c1538beSJeff Kirsher #define PCH_GBE_RGMII_MODE_RGMII    0x00000002
2601c1538beSJeff Kirsher #define PCH_GBE_CHIP_TYPE_EXTERNAL  0x00000000
2611c1538beSJeff Kirsher #define PCH_GBE_CHIP_TYPE_INTERNAL  0x00000001
2621c1538beSJeff Kirsher 
2631c1538beSJeff Kirsher /* DMA Control */
2641c1538beSJeff Kirsher #define PCH_GBE_RX_DMA_EN       0x00000002   /* Enables Receive DMA */
2651c1538beSJeff Kirsher #define PCH_GBE_TX_DMA_EN       0x00000001   /* Enables Transmission DMA */
2661c1538beSJeff Kirsher 
2678decf868SDavid S. Miller /* RX DMA STATUS */
2688decf868SDavid S. Miller #define PCH_GBE_IDLE_CHECK       0xFFFFFFFE
2698decf868SDavid S. Miller 
2701c1538beSJeff Kirsher /* Wake On LAN Status */
2711c1538beSJeff Kirsher #define PCH_GBE_WLS_BR          0x00000008 /* Broadcas Address */
2721c1538beSJeff Kirsher #define PCH_GBE_WLS_MLT         0x00000004 /* Multicast Address */
2731c1538beSJeff Kirsher 
2741c1538beSJeff Kirsher /* The Frame registered in Address Recognizer */
2751c1538beSJeff Kirsher #define PCH_GBE_WLS_IND         0x00000002
2761c1538beSJeff Kirsher #define PCH_GBE_WLS_MP          0x00000001 /* Magic packet Address */
2771c1538beSJeff Kirsher 
2781c1538beSJeff Kirsher /* Wake On LAN Control */
2791c1538beSJeff Kirsher #define PCH_GBE_WLC_WOL_MODE    0x00010000
2801c1538beSJeff Kirsher #define PCH_GBE_WLC_IGN_TLONG   0x00000100
2811c1538beSJeff Kirsher #define PCH_GBE_WLC_IGN_TSHRT   0x00000080
2821c1538beSJeff Kirsher #define PCH_GBE_WLC_IGN_OCTER   0x00000040
2831c1538beSJeff Kirsher #define PCH_GBE_WLC_IGN_NBLER   0x00000020
2841c1538beSJeff Kirsher #define PCH_GBE_WLC_IGN_CRCER   0x00000010
2851c1538beSJeff Kirsher #define PCH_GBE_WLC_BR          0x00000008
2861c1538beSJeff Kirsher #define PCH_GBE_WLC_MLT         0x00000004
2871c1538beSJeff Kirsher #define PCH_GBE_WLC_IND         0x00000002
2881c1538beSJeff Kirsher #define PCH_GBE_WLC_MP          0x00000001
2891c1538beSJeff Kirsher 
2901c1538beSJeff Kirsher /* Wake On LAN Address Mask */
2911c1538beSJeff Kirsher #define PCH_GBE_WLA_BUSY        0x80000000
2921c1538beSJeff Kirsher 
2931c1538beSJeff Kirsher 
2941c1538beSJeff Kirsher 
2951c1538beSJeff Kirsher /* TX/RX descriptor defines */
2961c1538beSJeff Kirsher #define PCH_GBE_MAX_TXD                     4096
2971c1538beSJeff Kirsher #define PCH_GBE_DEFAULT_TXD                  256
2981c1538beSJeff Kirsher #define PCH_GBE_MIN_TXD                        8
2991c1538beSJeff Kirsher #define PCH_GBE_MAX_RXD                     4096
3001c1538beSJeff Kirsher #define PCH_GBE_DEFAULT_RXD                  256
3011c1538beSJeff Kirsher #define PCH_GBE_MIN_RXD                        8
3021c1538beSJeff Kirsher 
3031c1538beSJeff Kirsher /* Number of Transmit and Receive Descriptors must be a multiple of 8 */
3041c1538beSJeff Kirsher #define PCH_GBE_TX_DESC_MULTIPLE               8
3051c1538beSJeff Kirsher #define PCH_GBE_RX_DESC_MULTIPLE               8
3061c1538beSJeff Kirsher 
3071c1538beSJeff Kirsher /* Read/Write operation is done through MII Management IF */
3081c1538beSJeff Kirsher #define PCH_GBE_HAL_MIIM_READ          ((u32)0x00000000)
3091c1538beSJeff Kirsher #define PCH_GBE_HAL_MIIM_WRITE         ((u32)0x04000000)
3101c1538beSJeff Kirsher 
3111c1538beSJeff Kirsher /* flow control values */
3121c1538beSJeff Kirsher #define PCH_GBE_FC_NONE			0
3131c1538beSJeff Kirsher #define PCH_GBE_FC_RX_PAUSE		1
3141c1538beSJeff Kirsher #define PCH_GBE_FC_TX_PAUSE		2
3151c1538beSJeff Kirsher #define PCH_GBE_FC_FULL			3
3161c1538beSJeff Kirsher #define PCH_GBE_FC_DEFAULT		PCH_GBE_FC_FULL
3171c1538beSJeff Kirsher 
3181c1538beSJeff Kirsher /**
3191c1538beSJeff Kirsher  * struct pch_gbe_mac_info - MAC information
3201c1538beSJeff Kirsher  * @addr[6]:		Store the MAC address
3211c1538beSJeff Kirsher  * @fc:			Mode of flow control
3221c1538beSJeff Kirsher  * @fc_autoneg:		Auto negotiation enable for flow control setting
3231c1538beSJeff Kirsher  * @tx_fc_enable:	Enable flag of Transmit flow control
3241c1538beSJeff Kirsher  * @max_frame_size:	Max transmit frame size
3251c1538beSJeff Kirsher  * @min_frame_size:	Min transmit frame size
3261c1538beSJeff Kirsher  * @autoneg:		Auto negotiation enable
3271c1538beSJeff Kirsher  * @link_speed:		Link speed
3281c1538beSJeff Kirsher  * @link_duplex:	Link duplex
3291c1538beSJeff Kirsher  */
3301c1538beSJeff Kirsher struct pch_gbe_mac_info {
3311c1538beSJeff Kirsher 	u8 addr[6];
3321c1538beSJeff Kirsher 	u8 fc;
3331c1538beSJeff Kirsher 	u8 fc_autoneg;
3341c1538beSJeff Kirsher 	u8 tx_fc_enable;
3351c1538beSJeff Kirsher 	u32 max_frame_size;
3361c1538beSJeff Kirsher 	u32 min_frame_size;
3371c1538beSJeff Kirsher 	u8 autoneg;
3381c1538beSJeff Kirsher 	u16 link_speed;
3391c1538beSJeff Kirsher 	u16 link_duplex;
3401c1538beSJeff Kirsher };
3411c1538beSJeff Kirsher 
3421c1538beSJeff Kirsher /**
3431c1538beSJeff Kirsher  * struct pch_gbe_phy_info - PHY information
3441c1538beSJeff Kirsher  * @addr:		PHY address
3451c1538beSJeff Kirsher  * @id:			PHY's identifier
3461c1538beSJeff Kirsher  * @revision:		PHY's revision
3471c1538beSJeff Kirsher  * @reset_delay_us:	HW reset delay time[us]
3481c1538beSJeff Kirsher  * @autoneg_advertised:	Autoneg advertised
3491c1538beSJeff Kirsher  */
3501c1538beSJeff Kirsher struct pch_gbe_phy_info {
3511c1538beSJeff Kirsher 	u32 addr;
3521c1538beSJeff Kirsher 	u32 id;
3531c1538beSJeff Kirsher 	u32 revision;
3541c1538beSJeff Kirsher 	u32 reset_delay_us;
3551c1538beSJeff Kirsher 	u16 autoneg_advertised;
3561c1538beSJeff Kirsher };
3571c1538beSJeff Kirsher 
3581c1538beSJeff Kirsher /*!
3591c1538beSJeff Kirsher  * @ingroup Gigabit Ether driver Layer
3601c1538beSJeff Kirsher  * @struct  pch_gbe_hw
3611c1538beSJeff Kirsher  * @brief   Hardware information
3621c1538beSJeff Kirsher  */
3631c1538beSJeff Kirsher struct pch_gbe_hw {
3641c1538beSJeff Kirsher 	void *back;
3651c1538beSJeff Kirsher 
3661c1538beSJeff Kirsher 	struct pch_gbe_regs  __iomem *reg;
3671c1538beSJeff Kirsher 	spinlock_t miim_lock;
3681c1538beSJeff Kirsher 
3691c1538beSJeff Kirsher 	struct pch_gbe_mac_info mac;
3701c1538beSJeff Kirsher 	struct pch_gbe_phy_info phy;
3711c1538beSJeff Kirsher };
3721c1538beSJeff Kirsher 
3731c1538beSJeff Kirsher /**
3741c1538beSJeff Kirsher  * struct pch_gbe_rx_desc - Receive Descriptor
3751c1538beSJeff Kirsher  * @buffer_addr:	RX Frame Buffer Address
3761c1538beSJeff Kirsher  * @tcp_ip_status:	TCP/IP Accelerator Status
3771c1538beSJeff Kirsher  * @rx_words_eob:	RX word count and Byte position
3781c1538beSJeff Kirsher  * @gbec_status:	GMAC Status
3791c1538beSJeff Kirsher  * @dma_status:		DMA Status
3801c1538beSJeff Kirsher  * @reserved1:		Reserved
3811c1538beSJeff Kirsher  * @reserved2:		Reserved
3821c1538beSJeff Kirsher  */
3831c1538beSJeff Kirsher struct pch_gbe_rx_desc {
3841c1538beSJeff Kirsher 	u32 buffer_addr;
3851c1538beSJeff Kirsher 	u32 tcp_ip_status;
3861c1538beSJeff Kirsher 	u16 rx_words_eob;
3871c1538beSJeff Kirsher 	u16 gbec_status;
3881c1538beSJeff Kirsher 	u8 dma_status;
3891c1538beSJeff Kirsher 	u8 reserved1;
3901c1538beSJeff Kirsher 	u16 reserved2;
3911c1538beSJeff Kirsher };
3921c1538beSJeff Kirsher 
3931c1538beSJeff Kirsher /**
3941c1538beSJeff Kirsher  * struct pch_gbe_tx_desc - Transmit Descriptor
3951c1538beSJeff Kirsher  * @buffer_addr:	TX Frame Buffer Address
3961c1538beSJeff Kirsher  * @length:		Data buffer length
3971c1538beSJeff Kirsher  * @reserved1:		Reserved
3981c1538beSJeff Kirsher  * @tx_words_eob:	TX word count and Byte position
3991c1538beSJeff Kirsher  * @tx_frame_ctrl:	TX Frame Control
4001c1538beSJeff Kirsher  * @dma_status:		DMA Status
4011c1538beSJeff Kirsher  * @reserved2:		Reserved
4021c1538beSJeff Kirsher  * @gbec_status:	GMAC Status
4031c1538beSJeff Kirsher  */
4041c1538beSJeff Kirsher struct pch_gbe_tx_desc {
4051c1538beSJeff Kirsher 	u32 buffer_addr;
4061c1538beSJeff Kirsher 	u16 length;
4071c1538beSJeff Kirsher 	u16 reserved1;
4081c1538beSJeff Kirsher 	u16 tx_words_eob;
4091c1538beSJeff Kirsher 	u16 tx_frame_ctrl;
4101c1538beSJeff Kirsher 	u8 dma_status;
4111c1538beSJeff Kirsher 	u8 reserved2;
4121c1538beSJeff Kirsher 	u16 gbec_status;
4131c1538beSJeff Kirsher };
4141c1538beSJeff Kirsher 
4151c1538beSJeff Kirsher 
4161c1538beSJeff Kirsher /**
4171c1538beSJeff Kirsher  * struct pch_gbe_buffer - Buffer information
4181c1538beSJeff Kirsher  * @skb:	pointer to a socket buffer
4191c1538beSJeff Kirsher  * @dma:	DMA address
4201c1538beSJeff Kirsher  * @time_stamp:	time stamp
4211c1538beSJeff Kirsher  * @length:	data size
4221c1538beSJeff Kirsher  */
4231c1538beSJeff Kirsher struct pch_gbe_buffer {
4241c1538beSJeff Kirsher 	struct sk_buff *skb;
4251c1538beSJeff Kirsher 	dma_addr_t dma;
4268decf868SDavid S. Miller 	unsigned char *rx_buffer;
4271c1538beSJeff Kirsher 	unsigned long time_stamp;
4281c1538beSJeff Kirsher 	u16 length;
4291c1538beSJeff Kirsher 	bool mapped;
4301c1538beSJeff Kirsher };
4311c1538beSJeff Kirsher 
4321c1538beSJeff Kirsher /**
4331c1538beSJeff Kirsher  * struct pch_gbe_tx_ring - tx ring information
4341c1538beSJeff Kirsher  * @desc:	pointer to the descriptor ring memory
4351c1538beSJeff Kirsher  * @dma:	physical address of the descriptor ring
4361c1538beSJeff Kirsher  * @size:	length of descriptor ring in bytes
4371c1538beSJeff Kirsher  * @count:	number of descriptors in the ring
4381c1538beSJeff Kirsher  * @next_to_use:	next descriptor to associate a buffer with
4391c1538beSJeff Kirsher  * @next_to_clean:	next descriptor to check for DD status bit
4401c1538beSJeff Kirsher  * @buffer_info:	array of buffer information structs
4411c1538beSJeff Kirsher  */
4421c1538beSJeff Kirsher struct pch_gbe_tx_ring {
4431c1538beSJeff Kirsher 	struct pch_gbe_tx_desc *desc;
4441c1538beSJeff Kirsher 	dma_addr_t dma;
4451c1538beSJeff Kirsher 	unsigned int size;
4461c1538beSJeff Kirsher 	unsigned int count;
4471c1538beSJeff Kirsher 	unsigned int next_to_use;
4481c1538beSJeff Kirsher 	unsigned int next_to_clean;
4491c1538beSJeff Kirsher 	struct pch_gbe_buffer *buffer_info;
4501c1538beSJeff Kirsher };
4511c1538beSJeff Kirsher 
4521c1538beSJeff Kirsher /**
4531c1538beSJeff Kirsher  * struct pch_gbe_rx_ring - rx ring information
4541c1538beSJeff Kirsher  * @desc:	pointer to the descriptor ring memory
4551c1538beSJeff Kirsher  * @dma:	physical address of the descriptor ring
4561c1538beSJeff Kirsher  * @size:	length of descriptor ring in bytes
4571c1538beSJeff Kirsher  * @count:	number of descriptors in the ring
4581c1538beSJeff Kirsher  * @next_to_use:	next descriptor to associate a buffer with
4591c1538beSJeff Kirsher  * @next_to_clean:	next descriptor to check for DD status bit
4601c1538beSJeff Kirsher  * @buffer_info:	array of buffer information structs
4611c1538beSJeff Kirsher  */
4621c1538beSJeff Kirsher struct pch_gbe_rx_ring {
4631c1538beSJeff Kirsher 	struct pch_gbe_rx_desc *desc;
4641c1538beSJeff Kirsher 	dma_addr_t dma;
4658decf868SDavid S. Miller 	unsigned char *rx_buff_pool;
4668decf868SDavid S. Miller 	dma_addr_t rx_buff_pool_logic;
4678decf868SDavid S. Miller 	unsigned int rx_buff_pool_size;
4681c1538beSJeff Kirsher 	unsigned int size;
4691c1538beSJeff Kirsher 	unsigned int count;
4701c1538beSJeff Kirsher 	unsigned int next_to_use;
4711c1538beSJeff Kirsher 	unsigned int next_to_clean;
4721c1538beSJeff Kirsher 	struct pch_gbe_buffer *buffer_info;
4731c1538beSJeff Kirsher };
4741c1538beSJeff Kirsher 
4751c1538beSJeff Kirsher /**
4761c1538beSJeff Kirsher  * struct pch_gbe_hw_stats - Statistics counters collected by the MAC
4771c1538beSJeff Kirsher  * @rx_packets:		    total packets received
4781c1538beSJeff Kirsher  * @tx_packets:		    total packets transmitted
4791c1538beSJeff Kirsher  * @rx_bytes:		    total bytes received
4801c1538beSJeff Kirsher  * @tx_bytes:		    total bytes transmitted
4811c1538beSJeff Kirsher  * @rx_errors:		    bad packets received
4821c1538beSJeff Kirsher  * @tx_errors:		    packet transmit problems
4831c1538beSJeff Kirsher  * @rx_dropped:		    no space in Linux buffers
4841c1538beSJeff Kirsher  * @tx_dropped:		    no space available in Linux
4851c1538beSJeff Kirsher  * @multicast:		    multicast packets received
4861c1538beSJeff Kirsher  * @collisions:		    collisions
4871c1538beSJeff Kirsher  * @rx_crc_errors:	    received packet with crc error
4881c1538beSJeff Kirsher  * @rx_frame_errors:	    received frame alignment error
4891c1538beSJeff Kirsher  * @rx_alloc_buff_failed:   allocate failure of a receive buffer
4901c1538beSJeff Kirsher  * @tx_length_errors:	    transmit length error
4911c1538beSJeff Kirsher  * @tx_aborted_errors:	    transmit aborted error
4921c1538beSJeff Kirsher  * @tx_carrier_errors:	    transmit carrier error
4931c1538beSJeff Kirsher  * @tx_timeout_count:	    Number of transmit timeout
4941c1538beSJeff Kirsher  * @tx_restart_count:	    Number of transmit restert
4951c1538beSJeff Kirsher  * @intr_rx_dsc_empty_count:	Interrupt count of receive descriptor empty
4961c1538beSJeff Kirsher  * @intr_rx_frame_err_count:	Interrupt count of receive frame error
4971c1538beSJeff Kirsher  * @intr_rx_fifo_err_count:	Interrupt count of receive FIFO error
4981c1538beSJeff Kirsher  * @intr_rx_dma_err_count:	Interrupt count of receive DMA error
4991c1538beSJeff Kirsher  * @intr_tx_fifo_err_count:	Interrupt count of transmit FIFO error
5001c1538beSJeff Kirsher  * @intr_tx_dma_err_count:	Interrupt count of transmit DMA error
5011c1538beSJeff Kirsher  * @intr_tcpip_err_count:	Interrupt count of TCP/IP Accelerator
5021c1538beSJeff Kirsher  */
5031c1538beSJeff Kirsher struct pch_gbe_hw_stats {
5041c1538beSJeff Kirsher 	u32 rx_packets;
5051c1538beSJeff Kirsher 	u32 tx_packets;
5061c1538beSJeff Kirsher 	u32 rx_bytes;
5071c1538beSJeff Kirsher 	u32 tx_bytes;
5081c1538beSJeff Kirsher 	u32 rx_errors;
5091c1538beSJeff Kirsher 	u32 tx_errors;
5101c1538beSJeff Kirsher 	u32 rx_dropped;
5111c1538beSJeff Kirsher 	u32 tx_dropped;
5121c1538beSJeff Kirsher 	u32 multicast;
5131c1538beSJeff Kirsher 	u32 collisions;
5141c1538beSJeff Kirsher 	u32 rx_crc_errors;
5151c1538beSJeff Kirsher 	u32 rx_frame_errors;
5161c1538beSJeff Kirsher 	u32 rx_alloc_buff_failed;
5171c1538beSJeff Kirsher 	u32 tx_length_errors;
5181c1538beSJeff Kirsher 	u32 tx_aborted_errors;
5191c1538beSJeff Kirsher 	u32 tx_carrier_errors;
5201c1538beSJeff Kirsher 	u32 tx_timeout_count;
5211c1538beSJeff Kirsher 	u32 tx_restart_count;
5221c1538beSJeff Kirsher 	u32 intr_rx_dsc_empty_count;
5231c1538beSJeff Kirsher 	u32 intr_rx_frame_err_count;
5241c1538beSJeff Kirsher 	u32 intr_rx_fifo_err_count;
5251c1538beSJeff Kirsher 	u32 intr_rx_dma_err_count;
5261c1538beSJeff Kirsher 	u32 intr_tx_fifo_err_count;
5271c1538beSJeff Kirsher 	u32 intr_tx_dma_err_count;
5281c1538beSJeff Kirsher 	u32 intr_tcpip_err_count;
5291c1538beSJeff Kirsher };
5301c1538beSJeff Kirsher 
5311c1538beSJeff Kirsher /**
532f1a26fdfSDarren Hart  * struct pch_gbe_privdata - PCI Device ID driver data
533f1a26fdfSDarren Hart  * @phy_tx_clk_delay:		Bool, configure the PHY TX delay in software
534f1a26fdfSDarren Hart  * @phy_disable_hibernate:	Bool, disable PHY hibernation
535f1a26fdfSDarren Hart  * @platform_init:		Platform initialization callback, called from
536f1a26fdfSDarren Hart  *				probe, prior to PHY initialization.
537f1a26fdfSDarren Hart  */
538f1a26fdfSDarren Hart struct pch_gbe_privdata {
539f1a26fdfSDarren Hart 	bool phy_tx_clk_delay;
540f1a26fdfSDarren Hart 	bool phy_disable_hibernate;
541f1a26fdfSDarren Hart 	int (*platform_init)(struct pci_dev *pdev);
542f1a26fdfSDarren Hart };
543f1a26fdfSDarren Hart 
544f1a26fdfSDarren Hart /**
5451c1538beSJeff Kirsher  * struct pch_gbe_adapter - board specific private data structure
5461c1538beSJeff Kirsher  * @stats_lock:	Spinlock structure for status
5471c1538beSJeff Kirsher  * @ethtool_lock:	Spinlock structure for ethtool
5481c1538beSJeff Kirsher  * @irq_sem:		Semaphore for interrupt
5491c1538beSJeff Kirsher  * @netdev:		Pointer of network device structure
5501c1538beSJeff Kirsher  * @pdev:		Pointer of pci device structure
5511c1538beSJeff Kirsher  * @polling_netdev:	Pointer of polling network device structure
5521c1538beSJeff Kirsher  * @napi:		NAPI structure
5531c1538beSJeff Kirsher  * @hw:			Pointer of hardware structure
5541c1538beSJeff Kirsher  * @stats:		Hardware status
5551c1538beSJeff Kirsher  * @reset_task:		Reset task
5561c1538beSJeff Kirsher  * @mii:		MII information structure
5571c1538beSJeff Kirsher  * @watchdog_timer:	Watchdog timer list
5581c1538beSJeff Kirsher  * @wake_up_evt:	Wake up event
5591c1538beSJeff Kirsher  * @config_space:	Configuration space
5601c1538beSJeff Kirsher  * @msg_enable:		Driver message level
5611c1538beSJeff Kirsher  * @led_status:		LED status
5621c1538beSJeff Kirsher  * @tx_ring:		Pointer of Tx descriptor ring structure
5631c1538beSJeff Kirsher  * @rx_ring:		Pointer of Rx descriptor ring structure
5641c1538beSJeff Kirsher  * @rx_buffer_len:	Receive buffer length
5651c1538beSJeff Kirsher  * @tx_queue_len:	Transmit queue length
566f1a26fdfSDarren Hart  * @pch_gbe_privdata:	PCI Device ID driver_data
5671c1538beSJeff Kirsher  */
5681c1538beSJeff Kirsher 
5691c1538beSJeff Kirsher struct pch_gbe_adapter {
5701c1538beSJeff Kirsher 	spinlock_t stats_lock;
5711c1538beSJeff Kirsher 	spinlock_t ethtool_lock;
5721c1538beSJeff Kirsher 	atomic_t irq_sem;
5731c1538beSJeff Kirsher 	struct net_device *netdev;
5741c1538beSJeff Kirsher 	struct pci_dev *pdev;
5752a600d97SAndy Shevchenko 	int irq;
5761c1538beSJeff Kirsher 	struct net_device *polling_netdev;
5771c1538beSJeff Kirsher 	struct napi_struct napi;
5781c1538beSJeff Kirsher 	struct pch_gbe_hw hw;
5791c1538beSJeff Kirsher 	struct pch_gbe_hw_stats stats;
5801c1538beSJeff Kirsher 	struct work_struct reset_task;
5811c1538beSJeff Kirsher 	struct mii_if_info mii;
5821c1538beSJeff Kirsher 	struct timer_list watchdog_timer;
5831c1538beSJeff Kirsher 	u32 wake_up_evt;
5841c1538beSJeff Kirsher 	u32 *config_space;
5851c1538beSJeff Kirsher 	unsigned long led_status;
5861c1538beSJeff Kirsher 	struct pch_gbe_tx_ring *tx_ring;
5871c1538beSJeff Kirsher 	struct pch_gbe_rx_ring *rx_ring;
5881c1538beSJeff Kirsher 	unsigned long rx_buffer_len;
5891c1538beSJeff Kirsher 	unsigned long tx_queue_len;
5908decf868SDavid S. Miller 	bool rx_stop_flag;
5911a0bdadbSTakahiroi Shimizu 	int hwts_tx_en;
5921a0bdadbSTakahiroi Shimizu 	int hwts_rx_en;
5931a0bdadbSTakahiroi Shimizu 	struct pci_dev *ptp_pdev;
594f1a26fdfSDarren Hart 	struct pch_gbe_privdata *pdata;
5951c1538beSJeff Kirsher };
5961c1538beSJeff Kirsher 
597453ca931SAndy Shevchenko #define pch_gbe_hw_to_adapter(hw)	container_of(hw, struct pch_gbe_adapter, hw)
598453ca931SAndy Shevchenko 
5991c1538beSJeff Kirsher /* pch_gbe_main.c */
600f4588c4dSJoe Perches int pch_gbe_up(struct pch_gbe_adapter *adapter);
601f4588c4dSJoe Perches void pch_gbe_down(struct pch_gbe_adapter *adapter);
602f4588c4dSJoe Perches void pch_gbe_reinit_locked(struct pch_gbe_adapter *adapter);
603f4588c4dSJoe Perches void pch_gbe_reset(struct pch_gbe_adapter *adapter);
604f4588c4dSJoe Perches int pch_gbe_setup_tx_resources(struct pch_gbe_adapter *adapter,
6051c1538beSJeff Kirsher 			       struct pch_gbe_tx_ring *txdr);
606f4588c4dSJoe Perches int pch_gbe_setup_rx_resources(struct pch_gbe_adapter *adapter,
6071c1538beSJeff Kirsher 			       struct pch_gbe_rx_ring *rxdr);
608f4588c4dSJoe Perches void pch_gbe_free_tx_resources(struct pch_gbe_adapter *adapter,
6091c1538beSJeff Kirsher 			       struct pch_gbe_tx_ring *tx_ring);
610f4588c4dSJoe Perches void pch_gbe_free_rx_resources(struct pch_gbe_adapter *adapter,
6111c1538beSJeff Kirsher 			       struct pch_gbe_rx_ring *rx_ring);
612f4588c4dSJoe Perches void pch_gbe_update_stats(struct pch_gbe_adapter *adapter);
6131c1538beSJeff Kirsher 
6141c1538beSJeff Kirsher /* pch_gbe_param.c */
615f4588c4dSJoe Perches void pch_gbe_check_options(struct pch_gbe_adapter *adapter);
6161c1538beSJeff Kirsher 
6171c1538beSJeff Kirsher /* pch_gbe_ethtool.c */
618f4588c4dSJoe Perches void pch_gbe_set_ethtool_ops(struct net_device *netdev);
6191c1538beSJeff Kirsher 
6201c1538beSJeff Kirsher /* pch_gbe_mac.c */
621f4588c4dSJoe Perches s32 pch_gbe_mac_force_mac_fc(struct pch_gbe_hw *hw);
622f4588c4dSJoe Perches u16 pch_gbe_mac_ctrl_miim(struct pch_gbe_hw *hw, u32 addr, u32 dir, u32 reg,
623f4588c4dSJoe Perches 			  u16 data);
6241c1538beSJeff Kirsher #endif /* _PCH_GBE_H_ */
625