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