Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Atmel MACB Ethernet Controller driver
0004  *
0005  * Copyright (C) 2004-2006 Atmel Corporation
0006  */
0007 #ifndef _MACB_H
0008 #define _MACB_H
0009 
0010 #include <linux/clk.h>
0011 #include <linux/phylink.h>
0012 #include <linux/ptp_clock_kernel.h>
0013 #include <linux/net_tstamp.h>
0014 #include <linux/interrupt.h>
0015 #include <linux/phy/phy.h>
0016 
0017 #if defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) || defined(CONFIG_MACB_USE_HWSTAMP)
0018 #define MACB_EXT_DESC
0019 #endif
0020 
0021 #define MACB_GREGS_NBR 16
0022 #define MACB_GREGS_VERSION 2
0023 #define MACB_MAX_QUEUES 8
0024 
0025 /* MACB register offsets */
0026 #define MACB_NCR        0x0000 /* Network Control */
0027 #define MACB_NCFGR      0x0004 /* Network Config */
0028 #define MACB_NSR        0x0008 /* Network Status */
0029 #define MACB_TAR        0x000c /* AT91RM9200 only */
0030 #define MACB_TCR        0x0010 /* AT91RM9200 only */
0031 #define MACB_TSR        0x0014 /* Transmit Status */
0032 #define MACB_RBQP       0x0018 /* RX Q Base Address */
0033 #define MACB_TBQP       0x001c /* TX Q Base Address */
0034 #define MACB_RSR        0x0020 /* Receive Status */
0035 #define MACB_ISR        0x0024 /* Interrupt Status */
0036 #define MACB_IER        0x0028 /* Interrupt Enable */
0037 #define MACB_IDR        0x002c /* Interrupt Disable */
0038 #define MACB_IMR        0x0030 /* Interrupt Mask */
0039 #define MACB_MAN        0x0034 /* PHY Maintenance */
0040 #define MACB_PTR        0x0038
0041 #define MACB_PFR        0x003c
0042 #define MACB_FTO        0x0040
0043 #define MACB_SCF        0x0044
0044 #define MACB_MCF        0x0048
0045 #define MACB_FRO        0x004c
0046 #define MACB_FCSE       0x0050
0047 #define MACB_ALE        0x0054
0048 #define MACB_DTF        0x0058
0049 #define MACB_LCOL       0x005c
0050 #define MACB_EXCOL      0x0060
0051 #define MACB_TUND       0x0064
0052 #define MACB_CSE        0x0068
0053 #define MACB_RRE        0x006c
0054 #define MACB_ROVR       0x0070
0055 #define MACB_RSE        0x0074
0056 #define MACB_ELE        0x0078
0057 #define MACB_RJA        0x007c
0058 #define MACB_USF        0x0080
0059 #define MACB_STE        0x0084
0060 #define MACB_RLE        0x0088
0061 #define MACB_TPF        0x008c
0062 #define MACB_HRB        0x0090
0063 #define MACB_HRT        0x0094
0064 #define MACB_SA1B       0x0098
0065 #define MACB_SA1T       0x009c
0066 #define MACB_SA2B       0x00a0
0067 #define MACB_SA2T       0x00a4
0068 #define MACB_SA3B       0x00a8
0069 #define MACB_SA3T       0x00ac
0070 #define MACB_SA4B       0x00b0
0071 #define MACB_SA4T       0x00b4
0072 #define MACB_TID        0x00b8
0073 #define MACB_TPQ        0x00bc
0074 #define MACB_USRIO      0x00c0
0075 #define MACB_WOL        0x00c4
0076 #define MACB_MID        0x00fc
0077 #define MACB_TBQPH      0x04C8
0078 #define MACB_RBQPH      0x04D4
0079 
0080 /* GEM register offsets. */
0081 #define GEM_NCR         0x0000 /* Network Control */
0082 #define GEM_NCFGR       0x0004 /* Network Config */
0083 #define GEM_USRIO       0x000c /* User IO */
0084 #define GEM_DMACFG      0x0010 /* DMA Configuration */
0085 #define GEM_JML         0x0048 /* Jumbo Max Length */
0086 #define GEM_HS_MAC_CONFIG   0x0050 /* GEM high speed config */
0087 #define GEM_HRB         0x0080 /* Hash Bottom */
0088 #define GEM_HRT         0x0084 /* Hash Top */
0089 #define GEM_SA1B        0x0088 /* Specific1 Bottom */
0090 #define GEM_SA1T        0x008C /* Specific1 Top */
0091 #define GEM_SA2B        0x0090 /* Specific2 Bottom */
0092 #define GEM_SA2T        0x0094 /* Specific2 Top */
0093 #define GEM_SA3B        0x0098 /* Specific3 Bottom */
0094 #define GEM_SA3T        0x009C /* Specific3 Top */
0095 #define GEM_SA4B        0x00A0 /* Specific4 Bottom */
0096 #define GEM_SA4T        0x00A4 /* Specific4 Top */
0097 #define GEM_WOL         0x00b8 /* Wake on LAN */
0098 #define GEM_EFTSH       0x00e8 /* PTP Event Frame Transmitted Seconds Register 47:32 */
0099 #define GEM_EFRSH       0x00ec /* PTP Event Frame Received Seconds Register 47:32 */
0100 #define GEM_PEFTSH      0x00f0 /* PTP Peer Event Frame Transmitted Seconds Register 47:32 */
0101 #define GEM_PEFRSH      0x00f4 /* PTP Peer Event Frame Received Seconds Register 47:32 */
0102 #define GEM_OTX         0x0100 /* Octets transmitted */
0103 #define GEM_OCTTXL      0x0100 /* Octets transmitted [31:0] */
0104 #define GEM_OCTTXH      0x0104 /* Octets transmitted [47:32] */
0105 #define GEM_TXCNT       0x0108 /* Frames Transmitted counter */
0106 #define GEM_TXBCCNT     0x010c /* Broadcast Frames counter */
0107 #define GEM_TXMCCNT     0x0110 /* Multicast Frames counter */
0108 #define GEM_TXPAUSECNT      0x0114 /* Pause Frames Transmitted Counter */
0109 #define GEM_TX64CNT     0x0118 /* 64 byte Frames TX counter */
0110 #define GEM_TX65CNT     0x011c /* 65-127 byte Frames TX counter */
0111 #define GEM_TX128CNT        0x0120 /* 128-255 byte Frames TX counter */
0112 #define GEM_TX256CNT        0x0124 /* 256-511 byte Frames TX counter */
0113 #define GEM_TX512CNT        0x0128 /* 512-1023 byte Frames TX counter */
0114 #define GEM_TX1024CNT       0x012c /* 1024-1518 byte Frames TX counter */
0115 #define GEM_TX1519CNT       0x0130 /* 1519+ byte Frames TX counter */
0116 #define GEM_TXURUNCNT       0x0134 /* TX under run error counter */
0117 #define GEM_SNGLCOLLCNT     0x0138 /* Single Collision Frame Counter */
0118 #define GEM_MULTICOLLCNT    0x013c /* Multiple Collision Frame Counter */
0119 #define GEM_EXCESSCOLLCNT   0x0140 /* Excessive Collision Frame Counter */
0120 #define GEM_LATECOLLCNT     0x0144 /* Late Collision Frame Counter */
0121 #define GEM_TXDEFERCNT      0x0148 /* Deferred Transmission Frame Counter */
0122 #define GEM_TXCSENSECNT     0x014c /* Carrier Sense Error Counter */
0123 #define GEM_ORX         0x0150 /* Octets received */
0124 #define GEM_OCTRXL      0x0150 /* Octets received [31:0] */
0125 #define GEM_OCTRXH      0x0154 /* Octets received [47:32] */
0126 #define GEM_RXCNT       0x0158 /* Frames Received Counter */
0127 #define GEM_RXBROADCNT      0x015c /* Broadcast Frames Received Counter */
0128 #define GEM_RXMULTICNT      0x0160 /* Multicast Frames Received Counter */
0129 #define GEM_RXPAUSECNT      0x0164 /* Pause Frames Received Counter */
0130 #define GEM_RX64CNT     0x0168 /* 64 byte Frames RX Counter */
0131 #define GEM_RX65CNT     0x016c /* 65-127 byte Frames RX Counter */
0132 #define GEM_RX128CNT        0x0170 /* 128-255 byte Frames RX Counter */
0133 #define GEM_RX256CNT        0x0174 /* 256-511 byte Frames RX Counter */
0134 #define GEM_RX512CNT        0x0178 /* 512-1023 byte Frames RX Counter */
0135 #define GEM_RX1024CNT       0x017c /* 1024-1518 byte Frames RX Counter */
0136 #define GEM_RX1519CNT       0x0180 /* 1519+ byte Frames RX Counter */
0137 #define GEM_RXUNDRCNT       0x0184 /* Undersize Frames Received Counter */
0138 #define GEM_RXOVRCNT        0x0188 /* Oversize Frames Received Counter */
0139 #define GEM_RXJABCNT        0x018c /* Jabbers Received Counter */
0140 #define GEM_RXFCSCNT        0x0190 /* Frame Check Sequence Error Counter */
0141 #define GEM_RXLENGTHCNT     0x0194 /* Length Field Error Counter */
0142 #define GEM_RXSYMBCNT       0x0198 /* Symbol Error Counter */
0143 #define GEM_RXALIGNCNT      0x019c /* Alignment Error Counter */
0144 #define GEM_RXRESERRCNT     0x01a0 /* Receive Resource Error Counter */
0145 #define GEM_RXORCNT     0x01a4 /* Receive Overrun Counter */
0146 #define GEM_RXIPCCNT        0x01a8 /* IP header Checksum Error Counter */
0147 #define GEM_RXTCPCCNT       0x01ac /* TCP Checksum Error Counter */
0148 #define GEM_RXUDPCCNT       0x01b0 /* UDP Checksum Error Counter */
0149 #define GEM_TISUBN      0x01bc /* 1588 Timer Increment Sub-ns */
0150 #define GEM_TSH         0x01c0 /* 1588 Timer Seconds High */
0151 #define GEM_TSL         0x01d0 /* 1588 Timer Seconds Low */
0152 #define GEM_TN          0x01d4 /* 1588 Timer Nanoseconds */
0153 #define GEM_TA          0x01d8 /* 1588 Timer Adjust */
0154 #define GEM_TI          0x01dc /* 1588 Timer Increment */
0155 #define GEM_EFTSL       0x01e0 /* PTP Event Frame Tx Seconds Low */
0156 #define GEM_EFTN        0x01e4 /* PTP Event Frame Tx Nanoseconds */
0157 #define GEM_EFRSL       0x01e8 /* PTP Event Frame Rx Seconds Low */
0158 #define GEM_EFRN        0x01ec /* PTP Event Frame Rx Nanoseconds */
0159 #define GEM_PEFTSL      0x01f0 /* PTP Peer Event Frame Tx Secs Low */
0160 #define GEM_PEFTN       0x01f4 /* PTP Peer Event Frame Tx Ns */
0161 #define GEM_PEFRSL      0x01f8 /* PTP Peer Event Frame Rx Sec Low */
0162 #define GEM_PEFRN       0x01fc /* PTP Peer Event Frame Rx Ns */
0163 #define GEM_PCSCNTRL        0x0200 /* PCS Control */
0164 #define GEM_PCSSTS      0x0204 /* PCS Status */
0165 #define GEM_PCSPHYTOPID     0x0208 /* PCS PHY Top ID */
0166 #define GEM_PCSPHYBOTID     0x020c /* PCS PHY Bottom ID */
0167 #define GEM_PCSANADV        0x0210 /* PCS AN Advertisement */
0168 #define GEM_PCSANLPBASE     0x0214 /* PCS AN Link Partner Base */
0169 #define GEM_PCSANEXP        0x0218 /* PCS AN Expansion */
0170 #define GEM_PCSANNPTX       0x021c /* PCS AN Next Page TX */
0171 #define GEM_PCSANNPLP       0x0220 /* PCS AN Next Page LP */
0172 #define GEM_PCSANEXTSTS     0x023c /* PCS AN Extended Status */
0173 #define GEM_DCFG1       0x0280 /* Design Config 1 */
0174 #define GEM_DCFG2       0x0284 /* Design Config 2 */
0175 #define GEM_DCFG3       0x0288 /* Design Config 3 */
0176 #define GEM_DCFG4       0x028c /* Design Config 4 */
0177 #define GEM_DCFG5       0x0290 /* Design Config 5 */
0178 #define GEM_DCFG6       0x0294 /* Design Config 6 */
0179 #define GEM_DCFG7       0x0298 /* Design Config 7 */
0180 #define GEM_DCFG8       0x029C /* Design Config 8 */
0181 #define GEM_DCFG10      0x02A4 /* Design Config 10 */
0182 #define GEM_DCFG12      0x02AC /* Design Config 12 */
0183 #define GEM_USX_CONTROL     0x0A80 /* High speed PCS control register */
0184 #define GEM_USX_STATUS      0x0A88 /* High speed PCS status register */
0185 
0186 #define GEM_TXBDCTRL    0x04cc /* TX Buffer Descriptor control register */
0187 #define GEM_RXBDCTRL    0x04d0 /* RX Buffer Descriptor control register */
0188 
0189 /* Screener Type 2 match registers */
0190 #define GEM_SCRT2       0x540
0191 
0192 /* EtherType registers */
0193 #define GEM_ETHT        0x06E0
0194 
0195 /* Type 2 compare registers */
0196 #define GEM_T2CMPW0     0x0700
0197 #define GEM_T2CMPW1     0x0704
0198 #define T2CMP_OFST(t2idx)   (t2idx * 2)
0199 
0200 /* type 2 compare registers
0201  * each location requires 3 compare regs
0202  */
0203 #define GEM_IP4SRC_CMP(idx)     (idx * 3)
0204 #define GEM_IP4DST_CMP(idx)     (idx * 3 + 1)
0205 #define GEM_PORT_CMP(idx)       (idx * 3 + 2)
0206 
0207 /* Which screening type 2 EtherType register will be used (0 - 7) */
0208 #define SCRT2_ETHT      0
0209 
0210 #define GEM_ISR(hw_q)       (0x0400 + ((hw_q) << 2))
0211 #define GEM_TBQP(hw_q)      (0x0440 + ((hw_q) << 2))
0212 #define GEM_TBQPH(hw_q)     (0x04C8)
0213 #define GEM_RBQP(hw_q)      (0x0480 + ((hw_q) << 2))
0214 #define GEM_RBQS(hw_q)      (0x04A0 + ((hw_q) << 2))
0215 #define GEM_RBQPH(hw_q)     (0x04D4)
0216 #define GEM_IER(hw_q)       (0x0600 + ((hw_q) << 2))
0217 #define GEM_IDR(hw_q)       (0x0620 + ((hw_q) << 2))
0218 #define GEM_IMR(hw_q)       (0x0640 + ((hw_q) << 2))
0219 
0220 /* Bitfields in NCR */
0221 #define MACB_LB_OFFSET      0 /* reserved */
0222 #define MACB_LB_SIZE        1
0223 #define MACB_LLB_OFFSET     1 /* Loop back local */
0224 #define MACB_LLB_SIZE       1
0225 #define MACB_RE_OFFSET      2 /* Receive enable */
0226 #define MACB_RE_SIZE        1
0227 #define MACB_TE_OFFSET      3 /* Transmit enable */
0228 #define MACB_TE_SIZE        1
0229 #define MACB_MPE_OFFSET     4 /* Management port enable */
0230 #define MACB_MPE_SIZE       1
0231 #define MACB_CLRSTAT_OFFSET 5 /* Clear stats regs */
0232 #define MACB_CLRSTAT_SIZE   1
0233 #define MACB_INCSTAT_OFFSET 6 /* Incremental stats regs */
0234 #define MACB_INCSTAT_SIZE   1
0235 #define MACB_WESTAT_OFFSET  7 /* Write enable stats regs */
0236 #define MACB_WESTAT_SIZE    1
0237 #define MACB_BP_OFFSET      8 /* Back pressure */
0238 #define MACB_BP_SIZE        1
0239 #define MACB_TSTART_OFFSET  9 /* Start transmission */
0240 #define MACB_TSTART_SIZE    1
0241 #define MACB_THALT_OFFSET   10 /* Transmit halt */
0242 #define MACB_THALT_SIZE     1
0243 #define MACB_NCR_TPF_OFFSET 11 /* Transmit pause frame */
0244 #define MACB_NCR_TPF_SIZE   1
0245 #define MACB_TZQ_OFFSET     12 /* Transmit zero quantum pause frame */
0246 #define MACB_TZQ_SIZE       1
0247 #define MACB_SRTSM_OFFSET   15 /* Store Receive Timestamp to Memory */
0248 #define MACB_OSSMODE_OFFSET 24 /* Enable One Step Synchro Mode */
0249 #define MACB_OSSMODE_SIZE   1
0250 #define MACB_MIIONRGMII_OFFSET  28 /* MII Usage on RGMII Interface */
0251 #define MACB_MIIONRGMII_SIZE    1
0252 
0253 /* Bitfields in NCFGR */
0254 #define MACB_SPD_OFFSET     0 /* Speed */
0255 #define MACB_SPD_SIZE       1
0256 #define MACB_FD_OFFSET      1 /* Full duplex */
0257 #define MACB_FD_SIZE        1
0258 #define MACB_BIT_RATE_OFFSET    2 /* Discard non-VLAN frames */
0259 #define MACB_BIT_RATE_SIZE  1
0260 #define MACB_JFRAME_OFFSET  3 /* reserved */
0261 #define MACB_JFRAME_SIZE    1
0262 #define MACB_CAF_OFFSET     4 /* Copy all frames */
0263 #define MACB_CAF_SIZE       1
0264 #define MACB_NBC_OFFSET     5 /* No broadcast */
0265 #define MACB_NBC_SIZE       1
0266 #define MACB_NCFGR_MTI_OFFSET   6 /* Multicast hash enable */
0267 #define MACB_NCFGR_MTI_SIZE 1
0268 #define MACB_UNI_OFFSET     7 /* Unicast hash enable */
0269 #define MACB_UNI_SIZE       1
0270 #define MACB_BIG_OFFSET     8 /* Receive 1536 byte frames */
0271 #define MACB_BIG_SIZE       1
0272 #define MACB_EAE_OFFSET     9 /* External address match enable */
0273 #define MACB_EAE_SIZE       1
0274 #define MACB_CLK_OFFSET     10
0275 #define MACB_CLK_SIZE       2
0276 #define MACB_RTY_OFFSET     12 /* Retry test */
0277 #define MACB_RTY_SIZE       1
0278 #define MACB_PAE_OFFSET     13 /* Pause enable */
0279 #define MACB_PAE_SIZE       1
0280 #define MACB_RM9200_RMII_OFFSET 13 /* AT91RM9200 only */
0281 #define MACB_RM9200_RMII_SIZE   1  /* AT91RM9200 only */
0282 #define MACB_RBOF_OFFSET    14 /* Receive buffer offset */
0283 #define MACB_RBOF_SIZE      2
0284 #define MACB_RLCE_OFFSET    16 /* Length field error frame discard */
0285 #define MACB_RLCE_SIZE      1
0286 #define MACB_DRFCS_OFFSET   17 /* FCS remove */
0287 #define MACB_DRFCS_SIZE     1
0288 #define MACB_EFRHD_OFFSET   18
0289 #define MACB_EFRHD_SIZE     1
0290 #define MACB_IRXFCS_OFFSET  19
0291 #define MACB_IRXFCS_SIZE    1
0292 
0293 /* GEM specific NCR bitfields. */
0294 #define GEM_ENABLE_HS_MAC_OFFSET    31
0295 #define GEM_ENABLE_HS_MAC_SIZE      1
0296 
0297 /* GEM specific NCFGR bitfields. */
0298 #define GEM_FD_OFFSET       1 /* Full duplex */
0299 #define GEM_FD_SIZE     1
0300 #define GEM_GBE_OFFSET      10 /* Gigabit mode enable */
0301 #define GEM_GBE_SIZE        1
0302 #define GEM_PCSSEL_OFFSET   11
0303 #define GEM_PCSSEL_SIZE     1
0304 #define GEM_PAE_OFFSET      13 /* Pause enable */
0305 #define GEM_PAE_SIZE        1
0306 #define GEM_CLK_OFFSET      18 /* MDC clock division */
0307 #define GEM_CLK_SIZE        3
0308 #define GEM_DBW_OFFSET      21 /* Data bus width */
0309 #define GEM_DBW_SIZE        2
0310 #define GEM_RXCOEN_OFFSET   24
0311 #define GEM_RXCOEN_SIZE     1
0312 #define GEM_SGMIIEN_OFFSET  27
0313 #define GEM_SGMIIEN_SIZE    1
0314 
0315 
0316 /* Constants for data bus width. */
0317 #define GEM_DBW32       0 /* 32 bit AMBA AHB data bus width */
0318 #define GEM_DBW64       1 /* 64 bit AMBA AHB data bus width */
0319 #define GEM_DBW128      2 /* 128 bit AMBA AHB data bus width */
0320 
0321 /* Bitfields in DMACFG. */
0322 #define GEM_FBLDO_OFFSET    0 /* fixed burst length for DMA */
0323 #define GEM_FBLDO_SIZE      5
0324 #define GEM_ENDIA_DESC_OFFSET   6 /* endian swap mode for management descriptor access */
0325 #define GEM_ENDIA_DESC_SIZE 1
0326 #define GEM_ENDIA_PKT_OFFSET    7 /* endian swap mode for packet data access */
0327 #define GEM_ENDIA_PKT_SIZE  1
0328 #define GEM_RXBMS_OFFSET    8 /* RX packet buffer memory size select */
0329 #define GEM_RXBMS_SIZE      2
0330 #define GEM_TXPBMS_OFFSET   10 /* TX packet buffer memory size select */
0331 #define GEM_TXPBMS_SIZE     1
0332 #define GEM_TXCOEN_OFFSET   11 /* TX IP/TCP/UDP checksum gen offload */
0333 #define GEM_TXCOEN_SIZE     1
0334 #define GEM_RXBS_OFFSET     16 /* DMA receive buffer size */
0335 #define GEM_RXBS_SIZE       8
0336 #define GEM_DDRP_OFFSET     24 /* disc_when_no_ahb */
0337 #define GEM_DDRP_SIZE       1
0338 #define GEM_RXEXT_OFFSET    28 /* RX extended Buffer Descriptor mode */
0339 #define GEM_RXEXT_SIZE      1
0340 #define GEM_TXEXT_OFFSET    29 /* TX extended Buffer Descriptor mode */
0341 #define GEM_TXEXT_SIZE      1
0342 #define GEM_ADDR64_OFFSET   30 /* Address bus width - 64b or 32b */
0343 #define GEM_ADDR64_SIZE     1
0344 
0345 
0346 /* Bitfields in NSR */
0347 #define MACB_NSR_LINK_OFFSET    0 /* pcs_link_state */
0348 #define MACB_NSR_LINK_SIZE  1
0349 #define MACB_MDIO_OFFSET    1 /* status of the mdio_in pin */
0350 #define MACB_MDIO_SIZE      1
0351 #define MACB_IDLE_OFFSET    2 /* The PHY management logic is idle */
0352 #define MACB_IDLE_SIZE      1
0353 
0354 /* Bitfields in TSR */
0355 #define MACB_UBR_OFFSET     0 /* Used bit read */
0356 #define MACB_UBR_SIZE       1
0357 #define MACB_COL_OFFSET     1 /* Collision occurred */
0358 #define MACB_COL_SIZE       1
0359 #define MACB_TSR_RLE_OFFSET 2 /* Retry limit exceeded */
0360 #define MACB_TSR_RLE_SIZE   1
0361 #define MACB_TGO_OFFSET     3 /* Transmit go */
0362 #define MACB_TGO_SIZE       1
0363 #define MACB_BEX_OFFSET     4 /* TX frame corruption due to AHB error */
0364 #define MACB_BEX_SIZE       1
0365 #define MACB_RM9200_BNQ_OFFSET  4 /* AT91RM9200 only */
0366 #define MACB_RM9200_BNQ_SIZE    1 /* AT91RM9200 only */
0367 #define MACB_COMP_OFFSET    5 /* Trnasmit complete */
0368 #define MACB_COMP_SIZE      1
0369 #define MACB_UND_OFFSET     6 /* Trnasmit under run */
0370 #define MACB_UND_SIZE       1
0371 
0372 /* Bitfields in RSR */
0373 #define MACB_BNA_OFFSET     0 /* Buffer not available */
0374 #define MACB_BNA_SIZE       1
0375 #define MACB_REC_OFFSET     1 /* Frame received */
0376 #define MACB_REC_SIZE       1
0377 #define MACB_OVR_OFFSET     2 /* Receive overrun */
0378 #define MACB_OVR_SIZE       1
0379 
0380 /* Bitfields in ISR/IER/IDR/IMR */
0381 #define MACB_MFD_OFFSET     0 /* Management frame sent */
0382 #define MACB_MFD_SIZE       1
0383 #define MACB_RCOMP_OFFSET   1 /* Receive complete */
0384 #define MACB_RCOMP_SIZE     1
0385 #define MACB_RXUBR_OFFSET   2 /* RX used bit read */
0386 #define MACB_RXUBR_SIZE     1
0387 #define MACB_TXUBR_OFFSET   3 /* TX used bit read */
0388 #define MACB_TXUBR_SIZE     1
0389 #define MACB_ISR_TUND_OFFSET    4 /* Enable TX buffer under run interrupt */
0390 #define MACB_ISR_TUND_SIZE  1
0391 #define MACB_ISR_RLE_OFFSET 5 /* EN retry exceeded/late coll interrupt */
0392 #define MACB_ISR_RLE_SIZE   1
0393 #define MACB_TXERR_OFFSET   6 /* EN TX frame corrupt from error interrupt */
0394 #define MACB_TXERR_SIZE     1
0395 #define MACB_RM9200_TBRE_OFFSET 6 /* EN may send new frame interrupt (RM9200) */
0396 #define MACB_RM9200_TBRE_SIZE   1
0397 #define MACB_TCOMP_OFFSET   7 /* Enable transmit complete interrupt */
0398 #define MACB_TCOMP_SIZE     1
0399 #define MACB_ISR_LINK_OFFSET    9 /* Enable link change interrupt */
0400 #define MACB_ISR_LINK_SIZE  1
0401 #define MACB_ISR_ROVR_OFFSET    10 /* Enable receive overrun interrupt */
0402 #define MACB_ISR_ROVR_SIZE  1
0403 #define MACB_HRESP_OFFSET   11 /* Enable hrsep not OK interrupt */
0404 #define MACB_HRESP_SIZE     1
0405 #define MACB_PFR_OFFSET     12 /* Enable pause frame w/ quantum interrupt */
0406 #define MACB_PFR_SIZE       1
0407 #define MACB_PTZ_OFFSET     13 /* Enable pause time zero interrupt */
0408 #define MACB_PTZ_SIZE       1
0409 #define MACB_WOL_OFFSET     14 /* Enable wake-on-lan interrupt */
0410 #define MACB_WOL_SIZE       1
0411 #define MACB_DRQFR_OFFSET   18 /* PTP Delay Request Frame Received */
0412 #define MACB_DRQFR_SIZE     1
0413 #define MACB_SFR_OFFSET     19 /* PTP Sync Frame Received */
0414 #define MACB_SFR_SIZE       1
0415 #define MACB_DRQFT_OFFSET   20 /* PTP Delay Request Frame Transmitted */
0416 #define MACB_DRQFT_SIZE     1
0417 #define MACB_SFT_OFFSET     21 /* PTP Sync Frame Transmitted */
0418 #define MACB_SFT_SIZE       1
0419 #define MACB_PDRQFR_OFFSET  22 /* PDelay Request Frame Received */
0420 #define MACB_PDRQFR_SIZE    1
0421 #define MACB_PDRSFR_OFFSET  23 /* PDelay Response Frame Received */
0422 #define MACB_PDRSFR_SIZE    1
0423 #define MACB_PDRQFT_OFFSET  24 /* PDelay Request Frame Transmitted */
0424 #define MACB_PDRQFT_SIZE    1
0425 #define MACB_PDRSFT_OFFSET  25 /* PDelay Response Frame Transmitted */
0426 #define MACB_PDRSFT_SIZE    1
0427 #define MACB_SRI_OFFSET     26 /* TSU Seconds Register Increment */
0428 #define MACB_SRI_SIZE       1
0429 #define GEM_WOL_OFFSET      28 /* Enable wake-on-lan interrupt */
0430 #define GEM_WOL_SIZE        1
0431 
0432 /* Timer increment fields */
0433 #define MACB_TI_CNS_OFFSET  0
0434 #define MACB_TI_CNS_SIZE    8
0435 #define MACB_TI_ACNS_OFFSET 8
0436 #define MACB_TI_ACNS_SIZE   8
0437 #define MACB_TI_NIT_OFFSET  16
0438 #define MACB_TI_NIT_SIZE    8
0439 
0440 /* Bitfields in MAN */
0441 #define MACB_DATA_OFFSET    0 /* data */
0442 #define MACB_DATA_SIZE      16
0443 #define MACB_CODE_OFFSET    16 /* Must be written to 10 */
0444 #define MACB_CODE_SIZE      2
0445 #define MACB_REGA_OFFSET    18 /* Register address */
0446 #define MACB_REGA_SIZE      5
0447 #define MACB_PHYA_OFFSET    23 /* PHY address */
0448 #define MACB_PHYA_SIZE      5
0449 #define MACB_RW_OFFSET      28 /* Operation. 10 is read. 01 is write. */
0450 #define MACB_RW_SIZE        2
0451 #define MACB_SOF_OFFSET     30 /* Must be written to 1 for Clause 22 */
0452 #define MACB_SOF_SIZE       2
0453 
0454 /* Bitfields in USRIO (AVR32) */
0455 #define MACB_MII_OFFSET             0
0456 #define MACB_MII_SIZE               1
0457 #define MACB_EAM_OFFSET             1
0458 #define MACB_EAM_SIZE               1
0459 #define MACB_TX_PAUSE_OFFSET            2
0460 #define MACB_TX_PAUSE_SIZE          1
0461 #define MACB_TX_PAUSE_ZERO_OFFSET       3
0462 #define MACB_TX_PAUSE_ZERO_SIZE         1
0463 
0464 /* Bitfields in USRIO (AT91) */
0465 #define MACB_RMII_OFFSET            0
0466 #define MACB_RMII_SIZE              1
0467 #define GEM_RGMII_OFFSET            0 /* GEM gigabit mode */
0468 #define GEM_RGMII_SIZE              1
0469 #define MACB_CLKEN_OFFSET           1
0470 #define MACB_CLKEN_SIZE             1
0471 
0472 /* Bitfields in WOL */
0473 #define MACB_IP_OFFSET              0
0474 #define MACB_IP_SIZE                16
0475 #define MACB_MAG_OFFSET             16
0476 #define MACB_MAG_SIZE               1
0477 #define MACB_ARP_OFFSET             17
0478 #define MACB_ARP_SIZE               1
0479 #define MACB_SA1_OFFSET             18
0480 #define MACB_SA1_SIZE               1
0481 #define MACB_WOL_MTI_OFFSET         19
0482 #define MACB_WOL_MTI_SIZE           1
0483 
0484 /* Bitfields in MID */
0485 #define MACB_IDNUM_OFFSET           16
0486 #define MACB_IDNUM_SIZE             12
0487 #define MACB_REV_OFFSET             0
0488 #define MACB_REV_SIZE               16
0489 
0490 /* Bitfield in HS_MAC_CONFIG */
0491 #define GEM_HS_MAC_SPEED_OFFSET         0
0492 #define GEM_HS_MAC_SPEED_SIZE           3
0493 
0494 /* Bitfields in PCSCNTRL */
0495 #define GEM_PCSAUTONEG_OFFSET           12
0496 #define GEM_PCSAUTONEG_SIZE         1
0497 
0498 /* Bitfields in DCFG1. */
0499 #define GEM_IRQCOR_OFFSET           23
0500 #define GEM_IRQCOR_SIZE             1
0501 #define GEM_DBWDEF_OFFSET           25
0502 #define GEM_DBWDEF_SIZE             3
0503 #define GEM_NO_PCS_OFFSET           0
0504 #define GEM_NO_PCS_SIZE             1
0505 
0506 /* Bitfields in DCFG2. */
0507 #define GEM_RX_PKT_BUFF_OFFSET          20
0508 #define GEM_RX_PKT_BUFF_SIZE            1
0509 #define GEM_TX_PKT_BUFF_OFFSET          21
0510 #define GEM_TX_PKT_BUFF_SIZE            1
0511 
0512 
0513 /* Bitfields in DCFG5. */
0514 #define GEM_TSU_OFFSET              8
0515 #define GEM_TSU_SIZE                1
0516 
0517 /* Bitfields in DCFG6. */
0518 #define GEM_PBUF_LSO_OFFSET         27
0519 #define GEM_PBUF_LSO_SIZE           1
0520 #define GEM_DAW64_OFFSET            23
0521 #define GEM_DAW64_SIZE              1
0522 
0523 /* Bitfields in DCFG8. */
0524 #define GEM_T1SCR_OFFSET            24
0525 #define GEM_T1SCR_SIZE              8
0526 #define GEM_T2SCR_OFFSET            16
0527 #define GEM_T2SCR_SIZE              8
0528 #define GEM_SCR2ETH_OFFSET          8
0529 #define GEM_SCR2ETH_SIZE            8
0530 #define GEM_SCR2CMP_OFFSET          0
0531 #define GEM_SCR2CMP_SIZE            8
0532 
0533 /* Bitfields in DCFG10 */
0534 #define GEM_TXBD_RDBUFF_OFFSET          12
0535 #define GEM_TXBD_RDBUFF_SIZE            4
0536 #define GEM_RXBD_RDBUFF_OFFSET          8
0537 #define GEM_RXBD_RDBUFF_SIZE            4
0538 
0539 /* Bitfields in DCFG12. */
0540 #define GEM_HIGH_SPEED_OFFSET           26
0541 #define GEM_HIGH_SPEED_SIZE         1
0542 
0543 /* Bitfields in USX_CONTROL. */
0544 #define GEM_USX_CTRL_SPEED_OFFSET       14
0545 #define GEM_USX_CTRL_SPEED_SIZE         3
0546 #define GEM_SERDES_RATE_OFFSET          12
0547 #define GEM_SERDES_RATE_SIZE            2
0548 #define GEM_RX_SCR_BYPASS_OFFSET        9
0549 #define GEM_RX_SCR_BYPASS_SIZE          1
0550 #define GEM_TX_SCR_BYPASS_OFFSET        8
0551 #define GEM_TX_SCR_BYPASS_SIZE          1
0552 #define GEM_TX_EN_OFFSET            1
0553 #define GEM_TX_EN_SIZE              1
0554 #define GEM_SIGNAL_OK_OFFSET            0
0555 #define GEM_SIGNAL_OK_SIZE          1
0556 
0557 /* Bitfields in USX_STATUS. */
0558 #define GEM_USX_BLOCK_LOCK_OFFSET       0
0559 #define GEM_USX_BLOCK_LOCK_SIZE         1
0560 
0561 /* Bitfields in TISUBN */
0562 #define GEM_SUBNSINCR_OFFSET            0
0563 #define GEM_SUBNSINCRL_OFFSET           24
0564 #define GEM_SUBNSINCRL_SIZE         8
0565 #define GEM_SUBNSINCRH_OFFSET           0
0566 #define GEM_SUBNSINCRH_SIZE         16
0567 #define GEM_SUBNSINCR_SIZE          24
0568 
0569 /* Bitfields in TI */
0570 #define GEM_NSINCR_OFFSET           0
0571 #define GEM_NSINCR_SIZE             8
0572 
0573 /* Bitfields in TSH */
0574 #define GEM_TSH_OFFSET              0 /* TSU timer value (s). MSB [47:32] of seconds timer count */
0575 #define GEM_TSH_SIZE                16
0576 
0577 /* Bitfields in TSL */
0578 #define GEM_TSL_OFFSET              0 /* TSU timer value (s). LSB [31:0] of seconds timer count */
0579 #define GEM_TSL_SIZE                32
0580 
0581 /* Bitfields in TN */
0582 #define GEM_TN_OFFSET               0 /* TSU timer value (ns) */
0583 #define GEM_TN_SIZE                 30
0584 
0585 /* Bitfields in TXBDCTRL */
0586 #define GEM_TXTSMODE_OFFSET         4 /* TX Descriptor Timestamp Insertion mode */
0587 #define GEM_TXTSMODE_SIZE           2
0588 
0589 /* Bitfields in RXBDCTRL */
0590 #define GEM_RXTSMODE_OFFSET         4 /* RX Descriptor Timestamp Insertion mode */
0591 #define GEM_RXTSMODE_SIZE           2
0592 
0593 /* Bitfields in SCRT2 */
0594 #define GEM_QUEUE_OFFSET            0 /* Queue Number */
0595 #define GEM_QUEUE_SIZE              4
0596 #define GEM_VLANPR_OFFSET           4 /* VLAN Priority */
0597 #define GEM_VLANPR_SIZE             3
0598 #define GEM_VLANEN_OFFSET           8 /* VLAN Enable */
0599 #define GEM_VLANEN_SIZE             1
0600 #define GEM_ETHT2IDX_OFFSET         9 /* Index to screener type 2 EtherType register */
0601 #define GEM_ETHT2IDX_SIZE           3
0602 #define GEM_ETHTEN_OFFSET           12 /* EtherType Enable */
0603 #define GEM_ETHTEN_SIZE             1
0604 #define GEM_CMPA_OFFSET             13 /* Compare A - Index to screener type 2 Compare register */
0605 #define GEM_CMPA_SIZE               5
0606 #define GEM_CMPAEN_OFFSET           18 /* Compare A Enable */
0607 #define GEM_CMPAEN_SIZE             1
0608 #define GEM_CMPB_OFFSET             19 /* Compare B - Index to screener type 2 Compare register */
0609 #define GEM_CMPB_SIZE               5
0610 #define GEM_CMPBEN_OFFSET           24 /* Compare B Enable */
0611 #define GEM_CMPBEN_SIZE             1
0612 #define GEM_CMPC_OFFSET             25 /* Compare C - Index to screener type 2 Compare register */
0613 #define GEM_CMPC_SIZE               5
0614 #define GEM_CMPCEN_OFFSET           30 /* Compare C Enable */
0615 #define GEM_CMPCEN_SIZE             1
0616 
0617 /* Bitfields in ETHT */
0618 #define GEM_ETHTCMP_OFFSET          0 /* EtherType compare value */
0619 #define GEM_ETHTCMP_SIZE            16
0620 
0621 /* Bitfields in T2CMPW0 */
0622 #define GEM_T2CMP_OFFSET            16 /* 0xFFFF0000 compare value */
0623 #define GEM_T2CMP_SIZE              16
0624 #define GEM_T2MASK_OFFSET           0 /* 0x0000FFFF compare value or mask */
0625 #define GEM_T2MASK_SIZE             16
0626 
0627 /* Bitfields in T2CMPW1 */
0628 #define GEM_T2DISMSK_OFFSET         9 /* disable mask */
0629 #define GEM_T2DISMSK_SIZE           1
0630 #define GEM_T2CMPOFST_OFFSET            7 /* compare offset */
0631 #define GEM_T2CMPOFST_SIZE          2
0632 #define GEM_T2OFST_OFFSET           0 /* offset value */
0633 #define GEM_T2OFST_SIZE             7
0634 
0635 /* Offset for screener type 2 compare values (T2CMPOFST).
0636  * Note the offset is applied after the specified point,
0637  * e.g. GEM_T2COMPOFST_ETYPE denotes the EtherType field, so an offset
0638  * of 12 bytes from this would be the source IP address in an IP header
0639  */
0640 #define GEM_T2COMPOFST_SOF      0
0641 #define GEM_T2COMPOFST_ETYPE    1
0642 #define GEM_T2COMPOFST_IPHDR    2
0643 #define GEM_T2COMPOFST_TCPUDP   3
0644 
0645 /* offset from EtherType to IP address */
0646 #define ETYPE_SRCIP_OFFSET          12
0647 #define ETYPE_DSTIP_OFFSET          16
0648 
0649 /* offset from IP header to port */
0650 #define IPHDR_SRCPORT_OFFSET        0
0651 #define IPHDR_DSTPORT_OFFSET        2
0652 
0653 /* Transmit DMA buffer descriptor Word 1 */
0654 #define GEM_DMA_TXVALID_OFFSET      23 /* timestamp has been captured in the Buffer Descriptor */
0655 #define GEM_DMA_TXVALID_SIZE        1
0656 
0657 /* Receive DMA buffer descriptor Word 0 */
0658 #define GEM_DMA_RXVALID_OFFSET      2 /* indicates a valid timestamp in the Buffer Descriptor */
0659 #define GEM_DMA_RXVALID_SIZE        1
0660 
0661 /* DMA buffer descriptor Word 2 (32 bit addressing) or Word 4 (64 bit addressing) */
0662 #define GEM_DMA_SECL_OFFSET         30 /* Timestamp seconds[1:0]  */
0663 #define GEM_DMA_SECL_SIZE           2
0664 #define GEM_DMA_NSEC_OFFSET         0 /* Timestamp nanosecs [29:0] */
0665 #define GEM_DMA_NSEC_SIZE           30
0666 
0667 /* DMA buffer descriptor Word 3 (32 bit addressing) or Word 5 (64 bit addressing) */
0668 
0669 /* New hardware supports 12 bit precision of timestamp in DMA buffer descriptor.
0670  * Old hardware supports only 6 bit precision but it is enough for PTP.
0671  * Less accuracy is used always instead of checking hardware version.
0672  */
0673 #define GEM_DMA_SECH_OFFSET         0 /* Timestamp seconds[5:2] */
0674 #define GEM_DMA_SECH_SIZE           4
0675 #define GEM_DMA_SEC_WIDTH           (GEM_DMA_SECH_SIZE + GEM_DMA_SECL_SIZE)
0676 #define GEM_DMA_SEC_TOP             (1 << GEM_DMA_SEC_WIDTH)
0677 #define GEM_DMA_SEC_MASK            (GEM_DMA_SEC_TOP - 1)
0678 
0679 /* Bitfields in ADJ */
0680 #define GEM_ADDSUB_OFFSET           31
0681 #define GEM_ADDSUB_SIZE             1
0682 /* Constants for CLK */
0683 #define MACB_CLK_DIV8               0
0684 #define MACB_CLK_DIV16              1
0685 #define MACB_CLK_DIV32              2
0686 #define MACB_CLK_DIV64              3
0687 
0688 /* GEM specific constants for CLK. */
0689 #define GEM_CLK_DIV8                0
0690 #define GEM_CLK_DIV16               1
0691 #define GEM_CLK_DIV32               2
0692 #define GEM_CLK_DIV48               3
0693 #define GEM_CLK_DIV64               4
0694 #define GEM_CLK_DIV96               5
0695 
0696 /* Constants for MAN register */
0697 #define MACB_MAN_C22_SOF            1
0698 #define MACB_MAN_C22_WRITE          1
0699 #define MACB_MAN_C22_READ           2
0700 #define MACB_MAN_C22_CODE           2
0701 
0702 #define MACB_MAN_C45_SOF            0
0703 #define MACB_MAN_C45_ADDR           0
0704 #define MACB_MAN_C45_WRITE          1
0705 #define MACB_MAN_C45_POST_READ_INCR     2
0706 #define MACB_MAN_C45_READ           3
0707 #define MACB_MAN_C45_CODE           2
0708 
0709 /* Capability mask bits */
0710 #define MACB_CAPS_ISR_CLEAR_ON_WRITE        0x00000001
0711 #define MACB_CAPS_USRIO_HAS_CLKEN       0x00000002
0712 #define MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII 0x00000004
0713 #define MACB_CAPS_NO_GIGABIT_HALF       0x00000008
0714 #define MACB_CAPS_USRIO_DISABLED        0x00000010
0715 #define MACB_CAPS_JUMBO             0x00000020
0716 #define MACB_CAPS_GEM_HAS_PTP           0x00000040
0717 #define MACB_CAPS_BD_RD_PREFETCH        0x00000080
0718 #define MACB_CAPS_NEEDS_RSTONUBR        0x00000100
0719 #define MACB_CAPS_MIIONRGMII            0x00000200
0720 #define MACB_CAPS_NEED_TSUCLK           0x00000400
0721 #define MACB_CAPS_PCS               0x01000000
0722 #define MACB_CAPS_HIGH_SPEED            0x02000000
0723 #define MACB_CAPS_CLK_HW_CHG            0x04000000
0724 #define MACB_CAPS_MACB_IS_EMAC          0x08000000
0725 #define MACB_CAPS_FIFO_MODE         0x10000000
0726 #define MACB_CAPS_GIGABIT_MODE_AVAILABLE    0x20000000
0727 #define MACB_CAPS_SG_DISABLED           0x40000000
0728 #define MACB_CAPS_MACB_IS_GEM           0x80000000
0729 
0730 /* LSO settings */
0731 #define MACB_LSO_UFO_ENABLE         0x01
0732 #define MACB_LSO_TSO_ENABLE         0x02
0733 
0734 /* Bit manipulation macros */
0735 #define MACB_BIT(name)                  \
0736     (1 << MACB_##name##_OFFSET)
0737 #define MACB_BF(name,value)             \
0738     (((value) & ((1 << MACB_##name##_SIZE) - 1))    \
0739      << MACB_##name##_OFFSET)
0740 #define MACB_BFEXT(name,value)\
0741     (((value) >> MACB_##name##_OFFSET)      \
0742      & ((1 << MACB_##name##_SIZE) - 1))
0743 #define MACB_BFINS(name,value,old)          \
0744     (((old) & ~(((1 << MACB_##name##_SIZE) - 1) \
0745             << MACB_##name##_OFFSET))       \
0746      | MACB_BF(name,value))
0747 
0748 #define GEM_BIT(name)                   \
0749     (1 << GEM_##name##_OFFSET)
0750 #define GEM_BF(name, value)             \
0751     (((value) & ((1 << GEM_##name##_SIZE) - 1)) \
0752      << GEM_##name##_OFFSET)
0753 #define GEM_BFEXT(name, value)\
0754     (((value) >> GEM_##name##_OFFSET)       \
0755      & ((1 << GEM_##name##_SIZE) - 1))
0756 #define GEM_BFINS(name, value, old)         \
0757     (((old) & ~(((1 << GEM_##name##_SIZE) - 1)  \
0758             << GEM_##name##_OFFSET))        \
0759      | GEM_BF(name, value))
0760 
0761 /* Register access macros */
0762 #define macb_readl(port, reg)       (port)->macb_reg_readl((port), MACB_##reg)
0763 #define macb_writel(port, reg, value)   (port)->macb_reg_writel((port), MACB_##reg, (value))
0764 #define gem_readl(port, reg)        (port)->macb_reg_readl((port), GEM_##reg)
0765 #define gem_writel(port, reg, value)    (port)->macb_reg_writel((port), GEM_##reg, (value))
0766 #define queue_readl(queue, reg)     (queue)->bp->macb_reg_readl((queue)->bp, (queue)->reg)
0767 #define queue_writel(queue, reg, value) (queue)->bp->macb_reg_writel((queue)->bp, (queue)->reg, (value))
0768 #define gem_readl_n(port, reg, idx)     (port)->macb_reg_readl((port), GEM_##reg + idx * 4)
0769 #define gem_writel_n(port, reg, idx, value) (port)->macb_reg_writel((port), GEM_##reg + idx * 4, (value))
0770 
0771 #define PTP_TS_BUFFER_SIZE      128 /* must be power of 2 */
0772 
0773 /* Conditional GEM/MACB macros.  These perform the operation to the correct
0774  * register dependent on whether the device is a GEM or a MACB.  For registers
0775  * and bitfields that are common across both devices, use macb_{read,write}l
0776  * to avoid the cost of the conditional.
0777  */
0778 #define macb_or_gem_writel(__bp, __reg, __value) \
0779     ({ \
0780         if (macb_is_gem((__bp))) \
0781             gem_writel((__bp), __reg, __value); \
0782         else \
0783             macb_writel((__bp), __reg, __value); \
0784     })
0785 
0786 #define macb_or_gem_readl(__bp, __reg) \
0787     ({ \
0788         u32 __v; \
0789         if (macb_is_gem((__bp))) \
0790             __v = gem_readl((__bp), __reg); \
0791         else \
0792             __v = macb_readl((__bp), __reg); \
0793         __v; \
0794     })
0795 
0796 #define MACB_READ_NSR(bp)   macb_readl(bp, NSR)
0797 
0798 /* struct macb_dma_desc - Hardware DMA descriptor
0799  * @addr: DMA address of data buffer
0800  * @ctrl: Control and status bits
0801  */
0802 struct macb_dma_desc {
0803     u32 addr;
0804     u32 ctrl;
0805 };
0806 
0807 #ifdef MACB_EXT_DESC
0808 #define HW_DMA_CAP_32B      0
0809 #define HW_DMA_CAP_64B      (1 << 0)
0810 #define HW_DMA_CAP_PTP      (1 << 1)
0811 #define HW_DMA_CAP_64B_PTP  (HW_DMA_CAP_64B | HW_DMA_CAP_PTP)
0812 
0813 struct macb_dma_desc_64 {
0814     u32 addrh;
0815     u32 resvd;
0816 };
0817 
0818 struct macb_dma_desc_ptp {
0819     u32 ts_1;
0820     u32 ts_2;
0821 };
0822 
0823 struct gem_tx_ts {
0824     struct sk_buff *skb;
0825     struct macb_dma_desc_ptp desc_ptp;
0826 };
0827 #endif
0828 
0829 /* DMA descriptor bitfields */
0830 #define MACB_RX_USED_OFFSET         0
0831 #define MACB_RX_USED_SIZE           1
0832 #define MACB_RX_WRAP_OFFSET         1
0833 #define MACB_RX_WRAP_SIZE           1
0834 #define MACB_RX_WADDR_OFFSET            2
0835 #define MACB_RX_WADDR_SIZE          30
0836 
0837 #define MACB_RX_FRMLEN_OFFSET           0
0838 #define MACB_RX_FRMLEN_SIZE         12
0839 #define MACB_RX_OFFSET_OFFSET           12
0840 #define MACB_RX_OFFSET_SIZE         2
0841 #define MACB_RX_SOF_OFFSET          14
0842 #define MACB_RX_SOF_SIZE            1
0843 #define MACB_RX_EOF_OFFSET          15
0844 #define MACB_RX_EOF_SIZE            1
0845 #define MACB_RX_CFI_OFFSET          16
0846 #define MACB_RX_CFI_SIZE            1
0847 #define MACB_RX_VLAN_PRI_OFFSET         17
0848 #define MACB_RX_VLAN_PRI_SIZE           3
0849 #define MACB_RX_PRI_TAG_OFFSET          20
0850 #define MACB_RX_PRI_TAG_SIZE            1
0851 #define MACB_RX_VLAN_TAG_OFFSET         21
0852 #define MACB_RX_VLAN_TAG_SIZE           1
0853 #define MACB_RX_TYPEID_MATCH_OFFSET     22
0854 #define MACB_RX_TYPEID_MATCH_SIZE       1
0855 #define MACB_RX_SA4_MATCH_OFFSET        23
0856 #define MACB_RX_SA4_MATCH_SIZE          1
0857 #define MACB_RX_SA3_MATCH_OFFSET        24
0858 #define MACB_RX_SA3_MATCH_SIZE          1
0859 #define MACB_RX_SA2_MATCH_OFFSET        25
0860 #define MACB_RX_SA2_MATCH_SIZE          1
0861 #define MACB_RX_SA1_MATCH_OFFSET        26
0862 #define MACB_RX_SA1_MATCH_SIZE          1
0863 #define MACB_RX_EXT_MATCH_OFFSET        28
0864 #define MACB_RX_EXT_MATCH_SIZE          1
0865 #define MACB_RX_UHASH_MATCH_OFFSET      29
0866 #define MACB_RX_UHASH_MATCH_SIZE        1
0867 #define MACB_RX_MHASH_MATCH_OFFSET      30
0868 #define MACB_RX_MHASH_MATCH_SIZE        1
0869 #define MACB_RX_BROADCAST_OFFSET        31
0870 #define MACB_RX_BROADCAST_SIZE          1
0871 
0872 #define MACB_RX_FRMLEN_MASK         0xFFF
0873 #define MACB_RX_JFRMLEN_MASK            0x3FFF
0874 
0875 /* RX checksum offload disabled: bit 24 clear in NCFGR */
0876 #define GEM_RX_TYPEID_MATCH_OFFSET      22
0877 #define GEM_RX_TYPEID_MATCH_SIZE        2
0878 
0879 /* RX checksum offload enabled: bit 24 set in NCFGR */
0880 #define GEM_RX_CSUM_OFFSET          22
0881 #define GEM_RX_CSUM_SIZE            2
0882 
0883 #define MACB_TX_FRMLEN_OFFSET           0
0884 #define MACB_TX_FRMLEN_SIZE         11
0885 #define MACB_TX_LAST_OFFSET         15
0886 #define MACB_TX_LAST_SIZE           1
0887 #define MACB_TX_NOCRC_OFFSET            16
0888 #define MACB_TX_NOCRC_SIZE          1
0889 #define MACB_MSS_MFS_OFFSET         16
0890 #define MACB_MSS_MFS_SIZE           14
0891 #define MACB_TX_LSO_OFFSET          17
0892 #define MACB_TX_LSO_SIZE            2
0893 #define MACB_TX_TCP_SEQ_SRC_OFFSET      19
0894 #define MACB_TX_TCP_SEQ_SRC_SIZE        1
0895 #define MACB_TX_BUF_EXHAUSTED_OFFSET        27
0896 #define MACB_TX_BUF_EXHAUSTED_SIZE      1
0897 #define MACB_TX_UNDERRUN_OFFSET         28
0898 #define MACB_TX_UNDERRUN_SIZE           1
0899 #define MACB_TX_ERROR_OFFSET            29
0900 #define MACB_TX_ERROR_SIZE          1
0901 #define MACB_TX_WRAP_OFFSET         30
0902 #define MACB_TX_WRAP_SIZE           1
0903 #define MACB_TX_USED_OFFSET         31
0904 #define MACB_TX_USED_SIZE           1
0905 
0906 #define GEM_TX_FRMLEN_OFFSET            0
0907 #define GEM_TX_FRMLEN_SIZE          14
0908 
0909 /* Buffer descriptor constants */
0910 #define GEM_RX_CSUM_NONE            0
0911 #define GEM_RX_CSUM_IP_ONLY         1
0912 #define GEM_RX_CSUM_IP_TCP          2
0913 #define GEM_RX_CSUM_IP_UDP          3
0914 
0915 /* limit RX checksum offload to TCP and UDP packets */
0916 #define GEM_RX_CSUM_CHECKED_MASK        2
0917 
0918 /* Scaled PPM fraction */
0919 #define PPM_FRACTION    16
0920 
0921 /* struct macb_tx_skb - data about an skb which is being transmitted
0922  * @skb: skb currently being transmitted, only set for the last buffer
0923  *       of the frame
0924  * @mapping: DMA address of the skb's fragment buffer
0925  * @size: size of the DMA mapped buffer
0926  * @mapped_as_page: true when buffer was mapped with skb_frag_dma_map(),
0927  *                  false when buffer was mapped with dma_map_single()
0928  */
0929 struct macb_tx_skb {
0930     struct sk_buff      *skb;
0931     dma_addr_t      mapping;
0932     size_t          size;
0933     bool            mapped_as_page;
0934 };
0935 
0936 /* Hardware-collected statistics. Used when updating the network
0937  * device stats by a periodic timer.
0938  */
0939 struct macb_stats {
0940     u32 rx_pause_frames;
0941     u32 tx_ok;
0942     u32 tx_single_cols;
0943     u32 tx_multiple_cols;
0944     u32 rx_ok;
0945     u32 rx_fcs_errors;
0946     u32 rx_align_errors;
0947     u32 tx_deferred;
0948     u32 tx_late_cols;
0949     u32 tx_excessive_cols;
0950     u32 tx_underruns;
0951     u32 tx_carrier_errors;
0952     u32 rx_resource_errors;
0953     u32 rx_overruns;
0954     u32 rx_symbol_errors;
0955     u32 rx_oversize_pkts;
0956     u32 rx_jabbers;
0957     u32 rx_undersize_pkts;
0958     u32 sqe_test_errors;
0959     u32 rx_length_mismatch;
0960     u32 tx_pause_frames;
0961 };
0962 
0963 struct gem_stats {
0964     u32 tx_octets_31_0;
0965     u32 tx_octets_47_32;
0966     u32 tx_frames;
0967     u32 tx_broadcast_frames;
0968     u32 tx_multicast_frames;
0969     u32 tx_pause_frames;
0970     u32 tx_64_byte_frames;
0971     u32 tx_65_127_byte_frames;
0972     u32 tx_128_255_byte_frames;
0973     u32 tx_256_511_byte_frames;
0974     u32 tx_512_1023_byte_frames;
0975     u32 tx_1024_1518_byte_frames;
0976     u32 tx_greater_than_1518_byte_frames;
0977     u32 tx_underrun;
0978     u32 tx_single_collision_frames;
0979     u32 tx_multiple_collision_frames;
0980     u32 tx_excessive_collisions;
0981     u32 tx_late_collisions;
0982     u32 tx_deferred_frames;
0983     u32 tx_carrier_sense_errors;
0984     u32 rx_octets_31_0;
0985     u32 rx_octets_47_32;
0986     u32 rx_frames;
0987     u32 rx_broadcast_frames;
0988     u32 rx_multicast_frames;
0989     u32 rx_pause_frames;
0990     u32 rx_64_byte_frames;
0991     u32 rx_65_127_byte_frames;
0992     u32 rx_128_255_byte_frames;
0993     u32 rx_256_511_byte_frames;
0994     u32 rx_512_1023_byte_frames;
0995     u32 rx_1024_1518_byte_frames;
0996     u32 rx_greater_than_1518_byte_frames;
0997     u32 rx_undersized_frames;
0998     u32 rx_oversize_frames;
0999     u32 rx_jabbers;
1000     u32 rx_frame_check_sequence_errors;
1001     u32 rx_length_field_frame_errors;
1002     u32 rx_symbol_errors;
1003     u32 rx_alignment_errors;
1004     u32 rx_resource_errors;
1005     u32 rx_overruns;
1006     u32 rx_ip_header_checksum_errors;
1007     u32 rx_tcp_checksum_errors;
1008     u32 rx_udp_checksum_errors;
1009 };
1010 
1011 /* Describes the name and offset of an individual statistic register, as
1012  * returned by `ethtool -S`. Also describes which net_device_stats statistics
1013  * this register should contribute to.
1014  */
1015 struct gem_statistic {
1016     char stat_string[ETH_GSTRING_LEN];
1017     int offset;
1018     u32 stat_bits;
1019 };
1020 
1021 /* Bitfield defs for net_device_stat statistics */
1022 #define GEM_NDS_RXERR_OFFSET        0
1023 #define GEM_NDS_RXLENERR_OFFSET     1
1024 #define GEM_NDS_RXOVERERR_OFFSET    2
1025 #define GEM_NDS_RXCRCERR_OFFSET     3
1026 #define GEM_NDS_RXFRAMEERR_OFFSET   4
1027 #define GEM_NDS_RXFIFOERR_OFFSET    5
1028 #define GEM_NDS_TXERR_OFFSET        6
1029 #define GEM_NDS_TXABORTEDERR_OFFSET 7
1030 #define GEM_NDS_TXCARRIERERR_OFFSET 8
1031 #define GEM_NDS_TXFIFOERR_OFFSET    9
1032 #define GEM_NDS_COLLISIONS_OFFSET   10
1033 
1034 #define GEM_STAT_TITLE(name, title) GEM_STAT_TITLE_BITS(name, title, 0)
1035 #define GEM_STAT_TITLE_BITS(name, title, bits) {    \
1036     .stat_string = title,               \
1037     .offset = GEM_##name,               \
1038     .stat_bits = bits               \
1039 }
1040 
1041 /* list of gem statistic registers. The names MUST match the
1042  * corresponding GEM_* definitions.
1043  */
1044 static const struct gem_statistic gem_statistics[] = {
1045     GEM_STAT_TITLE(OCTTXL, "tx_octets"), /* OCTTXH combined with OCTTXL */
1046     GEM_STAT_TITLE(TXCNT, "tx_frames"),
1047     GEM_STAT_TITLE(TXBCCNT, "tx_broadcast_frames"),
1048     GEM_STAT_TITLE(TXMCCNT, "tx_multicast_frames"),
1049     GEM_STAT_TITLE(TXPAUSECNT, "tx_pause_frames"),
1050     GEM_STAT_TITLE(TX64CNT, "tx_64_byte_frames"),
1051     GEM_STAT_TITLE(TX65CNT, "tx_65_127_byte_frames"),
1052     GEM_STAT_TITLE(TX128CNT, "tx_128_255_byte_frames"),
1053     GEM_STAT_TITLE(TX256CNT, "tx_256_511_byte_frames"),
1054     GEM_STAT_TITLE(TX512CNT, "tx_512_1023_byte_frames"),
1055     GEM_STAT_TITLE(TX1024CNT, "tx_1024_1518_byte_frames"),
1056     GEM_STAT_TITLE(TX1519CNT, "tx_greater_than_1518_byte_frames"),
1057     GEM_STAT_TITLE_BITS(TXURUNCNT, "tx_underrun",
1058                 GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_TXFIFOERR)),
1059     GEM_STAT_TITLE_BITS(SNGLCOLLCNT, "tx_single_collision_frames",
1060                 GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_COLLISIONS)),
1061     GEM_STAT_TITLE_BITS(MULTICOLLCNT, "tx_multiple_collision_frames",
1062                 GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_COLLISIONS)),
1063     GEM_STAT_TITLE_BITS(EXCESSCOLLCNT, "tx_excessive_collisions",
1064                 GEM_BIT(NDS_TXERR)|
1065                 GEM_BIT(NDS_TXABORTEDERR)|
1066                 GEM_BIT(NDS_COLLISIONS)),
1067     GEM_STAT_TITLE_BITS(LATECOLLCNT, "tx_late_collisions",
1068                 GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_COLLISIONS)),
1069     GEM_STAT_TITLE(TXDEFERCNT, "tx_deferred_frames"),
1070     GEM_STAT_TITLE_BITS(TXCSENSECNT, "tx_carrier_sense_errors",
1071                 GEM_BIT(NDS_TXERR)|GEM_BIT(NDS_COLLISIONS)),
1072     GEM_STAT_TITLE(OCTRXL, "rx_octets"), /* OCTRXH combined with OCTRXL */
1073     GEM_STAT_TITLE(RXCNT, "rx_frames"),
1074     GEM_STAT_TITLE(RXBROADCNT, "rx_broadcast_frames"),
1075     GEM_STAT_TITLE(RXMULTICNT, "rx_multicast_frames"),
1076     GEM_STAT_TITLE(RXPAUSECNT, "rx_pause_frames"),
1077     GEM_STAT_TITLE(RX64CNT, "rx_64_byte_frames"),
1078     GEM_STAT_TITLE(RX65CNT, "rx_65_127_byte_frames"),
1079     GEM_STAT_TITLE(RX128CNT, "rx_128_255_byte_frames"),
1080     GEM_STAT_TITLE(RX256CNT, "rx_256_511_byte_frames"),
1081     GEM_STAT_TITLE(RX512CNT, "rx_512_1023_byte_frames"),
1082     GEM_STAT_TITLE(RX1024CNT, "rx_1024_1518_byte_frames"),
1083     GEM_STAT_TITLE(RX1519CNT, "rx_greater_than_1518_byte_frames"),
1084     GEM_STAT_TITLE_BITS(RXUNDRCNT, "rx_undersized_frames",
1085                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXLENERR)),
1086     GEM_STAT_TITLE_BITS(RXOVRCNT, "rx_oversize_frames",
1087                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXLENERR)),
1088     GEM_STAT_TITLE_BITS(RXJABCNT, "rx_jabbers",
1089                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXLENERR)),
1090     GEM_STAT_TITLE_BITS(RXFCSCNT, "rx_frame_check_sequence_errors",
1091                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXCRCERR)),
1092     GEM_STAT_TITLE_BITS(RXLENGTHCNT, "rx_length_field_frame_errors",
1093                 GEM_BIT(NDS_RXERR)),
1094     GEM_STAT_TITLE_BITS(RXSYMBCNT, "rx_symbol_errors",
1095                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXFRAMEERR)),
1096     GEM_STAT_TITLE_BITS(RXALIGNCNT, "rx_alignment_errors",
1097                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXOVERERR)),
1098     GEM_STAT_TITLE_BITS(RXRESERRCNT, "rx_resource_errors",
1099                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXOVERERR)),
1100     GEM_STAT_TITLE_BITS(RXORCNT, "rx_overruns",
1101                 GEM_BIT(NDS_RXERR)|GEM_BIT(NDS_RXFIFOERR)),
1102     GEM_STAT_TITLE_BITS(RXIPCCNT, "rx_ip_header_checksum_errors",
1103                 GEM_BIT(NDS_RXERR)),
1104     GEM_STAT_TITLE_BITS(RXTCPCCNT, "rx_tcp_checksum_errors",
1105                 GEM_BIT(NDS_RXERR)),
1106     GEM_STAT_TITLE_BITS(RXUDPCCNT, "rx_udp_checksum_errors",
1107                 GEM_BIT(NDS_RXERR)),
1108 };
1109 
1110 #define GEM_STATS_LEN ARRAY_SIZE(gem_statistics)
1111 
1112 #define QUEUE_STAT_TITLE(title) {   \
1113     .stat_string = title,           \
1114 }
1115 
1116 /* per queue statistics, each should be unsigned long type */
1117 struct queue_stats {
1118     union {
1119         unsigned long first;
1120         unsigned long rx_packets;
1121     };
1122     unsigned long rx_bytes;
1123     unsigned long rx_dropped;
1124     unsigned long tx_packets;
1125     unsigned long tx_bytes;
1126     unsigned long tx_dropped;
1127 };
1128 
1129 static const struct gem_statistic queue_statistics[] = {
1130         QUEUE_STAT_TITLE("rx_packets"),
1131         QUEUE_STAT_TITLE("rx_bytes"),
1132         QUEUE_STAT_TITLE("rx_dropped"),
1133         QUEUE_STAT_TITLE("tx_packets"),
1134         QUEUE_STAT_TITLE("tx_bytes"),
1135         QUEUE_STAT_TITLE("tx_dropped"),
1136 };
1137 
1138 #define QUEUE_STATS_LEN ARRAY_SIZE(queue_statistics)
1139 
1140 struct macb;
1141 struct macb_queue;
1142 
1143 struct macb_or_gem_ops {
1144     int (*mog_alloc_rx_buffers)(struct macb *bp);
1145     void    (*mog_free_rx_buffers)(struct macb *bp);
1146     void    (*mog_init_rings)(struct macb *bp);
1147     int (*mog_rx)(struct macb_queue *queue, struct napi_struct *napi,
1148               int budget);
1149 };
1150 
1151 /* MACB-PTP interface: adapt to platform needs. */
1152 struct macb_ptp_info {
1153     void (*ptp_init)(struct net_device *ndev);
1154     void (*ptp_remove)(struct net_device *ndev);
1155     s32 (*get_ptp_max_adj)(void);
1156     unsigned int (*get_tsu_rate)(struct macb *bp);
1157     int (*get_ts_info)(struct net_device *dev,
1158                struct ethtool_ts_info *info);
1159     int (*get_hwtst)(struct net_device *netdev,
1160              struct ifreq *ifr);
1161     int (*set_hwtst)(struct net_device *netdev,
1162              struct ifreq *ifr, int cmd);
1163 };
1164 
1165 struct macb_pm_data {
1166     u32 scrt2;
1167     u32 usrio;
1168 };
1169 
1170 struct macb_usrio_config {
1171     u32 mii;
1172     u32 rmii;
1173     u32 rgmii;
1174     u32 refclk;
1175     u32 hdfctlen;
1176 };
1177 
1178 struct macb_config {
1179     u32         caps;
1180     unsigned int        dma_burst_length;
1181     int (*clk_init)(struct platform_device *pdev, struct clk **pclk,
1182                 struct clk **hclk, struct clk **tx_clk,
1183                 struct clk **rx_clk, struct clk **tsu_clk);
1184     int (*init)(struct platform_device *pdev);
1185     int jumbo_max_len;
1186     const struct macb_usrio_config *usrio;
1187 };
1188 
1189 struct tsu_incr {
1190     u32 sub_ns;
1191     u32 ns;
1192 };
1193 
1194 struct macb_queue {
1195     struct macb     *bp;
1196     int         irq;
1197 
1198     unsigned int        ISR;
1199     unsigned int        IER;
1200     unsigned int        IDR;
1201     unsigned int        IMR;
1202     unsigned int        TBQP;
1203     unsigned int        TBQPH;
1204     unsigned int        RBQS;
1205     unsigned int        RBQP;
1206     unsigned int        RBQPH;
1207 
1208     /* Lock to protect tx_head and tx_tail */
1209     spinlock_t      tx_ptr_lock;
1210     unsigned int        tx_head, tx_tail;
1211     struct macb_dma_desc    *tx_ring;
1212     struct macb_tx_skb  *tx_skb;
1213     dma_addr_t      tx_ring_dma;
1214     struct work_struct  tx_error_task;
1215     bool            txubr_pending;
1216     struct napi_struct  napi_tx;
1217 
1218     dma_addr_t      rx_ring_dma;
1219     dma_addr_t      rx_buffers_dma;
1220     unsigned int        rx_tail;
1221     unsigned int        rx_prepared_head;
1222     struct macb_dma_desc    *rx_ring;
1223     struct sk_buff      **rx_skbuff;
1224     void            *rx_buffers;
1225     struct napi_struct  napi_rx;
1226     struct queue_stats stats;
1227 
1228 #ifdef CONFIG_MACB_USE_HWSTAMP
1229     struct work_struct  tx_ts_task;
1230     unsigned int        tx_ts_head, tx_ts_tail;
1231     struct gem_tx_ts    tx_timestamps[PTP_TS_BUFFER_SIZE];
1232 #endif
1233 };
1234 
1235 struct ethtool_rx_fs_item {
1236     struct ethtool_rx_flow_spec fs;
1237     struct list_head list;
1238 };
1239 
1240 struct ethtool_rx_fs_list {
1241     struct list_head list;
1242     unsigned int count;
1243 };
1244 
1245 struct macb {
1246     void __iomem        *regs;
1247     bool            native_io;
1248 
1249     /* hardware IO accessors */
1250     u32 (*macb_reg_readl)(struct macb *bp, int offset);
1251     void    (*macb_reg_writel)(struct macb *bp, int offset, u32 value);
1252 
1253     size_t          rx_buffer_size;
1254 
1255     unsigned int        rx_ring_size;
1256     unsigned int        tx_ring_size;
1257 
1258     unsigned int        num_queues;
1259     unsigned int        queue_mask;
1260     struct macb_queue   queues[MACB_MAX_QUEUES];
1261 
1262     spinlock_t      lock;
1263     struct platform_device  *pdev;
1264     struct clk      *pclk;
1265     struct clk      *hclk;
1266     struct clk      *tx_clk;
1267     struct clk      *rx_clk;
1268     struct clk      *tsu_clk;
1269     struct net_device   *dev;
1270     union {
1271         struct macb_stats   macb;
1272         struct gem_stats    gem;
1273     }           hw_stats;
1274 
1275     struct macb_or_gem_ops  macbgem_ops;
1276 
1277     struct mii_bus      *mii_bus;
1278     struct phylink      *phylink;
1279     struct phylink_config   phylink_config;
1280     struct phylink_pcs  phylink_usx_pcs;
1281     struct phylink_pcs  phylink_sgmii_pcs;
1282 
1283     u32         caps;
1284     unsigned int        dma_burst_length;
1285 
1286     phy_interface_t     phy_interface;
1287 
1288     /* AT91RM9200 transmit queue (1 on wire + 1 queued) */
1289     struct macb_tx_skb  rm9200_txq[2];
1290     unsigned int        max_tx_length;
1291 
1292     u64         ethtool_stats[GEM_STATS_LEN + QUEUE_STATS_LEN * MACB_MAX_QUEUES];
1293 
1294     unsigned int        rx_frm_len_mask;
1295     unsigned int        jumbo_max_len;
1296 
1297     u32         wol;
1298 
1299     struct macb_ptp_info    *ptp_info;  /* macb-ptp interface */
1300 
1301     struct phy      *sgmii_phy; /* for ZynqMP SGMII mode */
1302 
1303 #ifdef MACB_EXT_DESC
1304     uint8_t hw_dma_cap;
1305 #endif
1306     spinlock_t tsu_clk_lock; /* gem tsu clock locking */
1307     unsigned int tsu_rate;
1308     struct ptp_clock *ptp_clock;
1309     struct ptp_clock_info ptp_clock_info;
1310     struct tsu_incr tsu_incr;
1311     struct hwtstamp_config tstamp_config;
1312 
1313     /* RX queue filer rule set*/
1314     struct ethtool_rx_fs_list rx_fs_list;
1315     spinlock_t rx_fs_lock;
1316     unsigned int max_tuples;
1317 
1318     struct tasklet_struct   hresp_err_tasklet;
1319 
1320     int rx_bd_rd_prefetch;
1321     int tx_bd_rd_prefetch;
1322 
1323     u32 rx_intr_mask;
1324 
1325     struct macb_pm_data pm_data;
1326     const struct macb_usrio_config *usrio;
1327 };
1328 
1329 #ifdef CONFIG_MACB_USE_HWSTAMP
1330 #define GEM_TSEC_SIZE  (GEM_TSH_SIZE + GEM_TSL_SIZE)
1331 #define TSU_SEC_MAX_VAL (((u64)1 << GEM_TSEC_SIZE) - 1)
1332 #define TSU_NSEC_MAX_VAL ((1 << GEM_TN_SIZE) - 1)
1333 
1334 enum macb_bd_control {
1335     TSTAMP_DISABLED,
1336     TSTAMP_FRAME_PTP_EVENT_ONLY,
1337     TSTAMP_ALL_PTP_FRAMES,
1338     TSTAMP_ALL_FRAMES,
1339 };
1340 
1341 void gem_ptp_init(struct net_device *ndev);
1342 void gem_ptp_remove(struct net_device *ndev);
1343 int gem_ptp_txstamp(struct macb_queue *queue, struct sk_buff *skb, struct macb_dma_desc *des);
1344 void gem_ptp_rxstamp(struct macb *bp, struct sk_buff *skb, struct macb_dma_desc *desc);
1345 static inline int gem_ptp_do_txstamp(struct macb_queue *queue, struct sk_buff *skb, struct macb_dma_desc *desc)
1346 {
1347     if (queue->bp->tstamp_config.tx_type == TSTAMP_DISABLED)
1348         return -ENOTSUPP;
1349 
1350     return gem_ptp_txstamp(queue, skb, desc);
1351 }
1352 
1353 static inline void gem_ptp_do_rxstamp(struct macb *bp, struct sk_buff *skb, struct macb_dma_desc *desc)
1354 {
1355     if (bp->tstamp_config.rx_filter == TSTAMP_DISABLED)
1356         return;
1357 
1358     gem_ptp_rxstamp(bp, skb, desc);
1359 }
1360 int gem_get_hwtst(struct net_device *dev, struct ifreq *rq);
1361 int gem_set_hwtst(struct net_device *dev, struct ifreq *ifr, int cmd);
1362 #else
1363 static inline void gem_ptp_init(struct net_device *ndev) { }
1364 static inline void gem_ptp_remove(struct net_device *ndev) { }
1365 
1366 static inline int gem_ptp_do_txstamp(struct macb_queue *queue, struct sk_buff *skb, struct macb_dma_desc *desc)
1367 {
1368     return -1;
1369 }
1370 
1371 static inline void gem_ptp_do_rxstamp(struct macb *bp, struct sk_buff *skb, struct macb_dma_desc *desc) { }
1372 #endif
1373 
1374 static inline bool macb_is_gem(struct macb *bp)
1375 {
1376     return !!(bp->caps & MACB_CAPS_MACB_IS_GEM);
1377 }
1378 
1379 static inline bool gem_has_ptp(struct macb *bp)
1380 {
1381     return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
1382 }
1383 
1384 /**
1385  * struct macb_platform_data - platform data for MACB Ethernet used for PCI registration
1386  * @pclk:       platform clock
1387  * @hclk:       AHB clock
1388  */
1389 struct macb_platform_data {
1390     struct clk  *pclk;
1391     struct clk  *hclk;
1392 };
1393 
1394 #endif /* _MACB_H */