linux/drivers/net/ethernet/asix/ax88796c_main.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (c) 2010 ASIX Electronics Corporation
   4 * Copyright (c) 2020 Samsung Electronics
   5 *
   6 * ASIX AX88796C SPI Fast Ethernet Linux driver
   7 */
   8
   9#ifndef _AX88796C_MAIN_H
  10#define _AX88796C_MAIN_H
  11
  12#include <linux/netdevice.h>
  13#include <linux/mii.h>
  14
  15#include "ax88796c_spi.h"
  16
  17/* These identify the driver base version and may not be removed. */
  18#define DRV_NAME        "ax88796c"
  19#define ADP_NAME        "ASIX AX88796C SPI Ethernet Adapter"
  20
  21#define TX_QUEUE_HIGH_WATER             45      /* Tx queue high water mark */
  22#define TX_QUEUE_LOW_WATER              20      /* Tx queue low water mark */
  23
  24#define AX88796C_REGDUMP_LEN            256
  25#define AX88796C_PHY_REGDUMP_LEN        14
  26#define AX88796C_PHY_ID                 0x10
  27
  28#define TX_OVERHEAD                     8
  29#define TX_EOP_SIZE                     4
  30
  31#define AX_MCAST_FILTER_SIZE            8
  32#define AX_MAX_MCAST                    64
  33#define AX_MAX_CLK                      80000000
  34#define TX_HDR_SOP_DICF                 0x8000
  35#define TX_HDR_SOP_CPHI                 0x4000
  36#define TX_HDR_SOP_INT                  0x2000
  37#define TX_HDR_SOP_MDEQ                 0x1000
  38#define TX_HDR_SOP_PKTLEN               0x07FF
  39#define TX_HDR_SOP_SEQNUM               0xF800
  40#define TX_HDR_SOP_PKTLENBAR            0x07FF
  41
  42#define TX_HDR_SEG_FS                   0x8000
  43#define TX_HDR_SEG_LS                   0x4000
  44#define TX_HDR_SEG_SEGNUM               0x3800
  45#define TX_HDR_SEG_SEGLEN               0x0700
  46#define TX_HDR_SEG_EOFST                0xC000
  47#define TX_HDR_SEG_SOFST                0x3800
  48#define TX_HDR_SEG_SEGLENBAR            0x07FF
  49
  50#define TX_HDR_EOP_SEQNUM               0xF800
  51#define TX_HDR_EOP_PKTLEN               0x07FF
  52#define TX_HDR_EOP_SEQNUMBAR            0xF800
  53#define TX_HDR_EOP_PKTLENBAR            0x07FF
  54
  55/* Rx header fields mask */
  56#define RX_HDR1_MCBC                    0x8000
  57#define RX_HDR1_STUFF_PKT               0x4000
  58#define RX_HDR1_MII_ERR                 0x2000
  59#define RX_HDR1_CRC_ERR                 0x1000
  60#define RX_HDR1_PKT_LEN                 0x07FF
  61
  62#define RX_HDR2_SEQ_NUM                 0xF800
  63#define RX_HDR2_PKT_LEN_BAR             0x7FFF
  64
  65#define RX_HDR3_PE                      0x8000
  66#define RX_HDR3_L3_TYPE_IPV4V6          0x6000
  67#define RX_HDR3_L3_TYPE_IP              0x4000
  68#define RX_HDR3_L3_TYPE_IPV6            0x2000
  69#define RX_HDR3_L4_TYPE_ICMPV6          0x1400
  70#define RX_HDR3_L4_TYPE_TCP             0x1000
  71#define RX_HDR3_L4_TYPE_IGMP            0x0c00
  72#define RX_HDR3_L4_TYPE_ICMP            0x0800
  73#define RX_HDR3_L4_TYPE_UDP             0x0400
  74#define RX_HDR3_L3_ERR                  0x0200
  75#define RX_HDR3_L4_ERR                  0x0100
  76#define RX_HDR3_PRIORITY(x)             ((x) << 4)
  77#define RX_HDR3_STRIP                   0x0008
  78#define RX_HDR3_VLAN_ID                 0x0007
  79
  80struct ax88796c_pcpu_stats {
  81        u64_stats_t rx_packets;
  82        u64_stats_t rx_bytes;
  83        u64_stats_t tx_packets;
  84        u64_stats_t tx_bytes;
  85        struct u64_stats_sync syncp;
  86        u32 rx_dropped;
  87        u32 tx_dropped;
  88        u32 rx_frame_errors;
  89        u32 rx_crc_errors;
  90};
  91
  92struct ax88796c_device {
  93        struct spi_device       *spi;
  94        struct net_device       *ndev;
  95        struct ax88796c_pcpu_stats __percpu *stats;
  96
  97        struct work_struct      ax_work;
  98
  99        struct mutex            spi_lock; /* device access */
 100
 101        struct sk_buff_head     tx_wait_q;
 102
 103        struct axspi_data       ax_spi;
 104
 105        struct mii_bus          *mdiobus;
 106        struct phy_device       *phydev;
 107
 108        int                     msg_enable;
 109
 110        u16                     seq_num;
 111
 112        u8                      multi_filter[AX_MCAST_FILTER_SIZE];
 113
 114        int                     link;
 115        int                     speed;
 116        int                     duplex;
 117        int                     pause;
 118        int                     asym_pause;
 119        int                     flowctrl;
 120                #define AX_FC_NONE              0
 121                #define AX_FC_RX                BIT(0)
 122                #define AX_FC_TX                BIT(1)
 123                #define AX_FC_ANEG              BIT(2)
 124
 125        u32                     priv_flags;
 126                #define AX_CAP_COMP             BIT(0)
 127                #define AX_PRIV_FLAGS_MASK      (AX_CAP_COMP)
 128
 129        unsigned long           flags;
 130                #define EVENT_INTR              0
 131                #define EVENT_TX                1
 132                #define EVENT_SET_MULTI         2
 133
 134};
 135
 136#define to_ax88796c_device(ndev) ((struct ax88796c_device *)netdev_priv(ndev))
 137
 138enum skb_state {
 139        illegal = 0,
 140        tx_done,
 141        rx_done,
 142        rx_err,
 143};
 144
 145struct skb_data {
 146        enum skb_state state;
 147        size_t len;
 148};
 149
 150/* A88796C register definition */
 151        /* Definition of PAGE0 */
 152#define P0_PSR          (0x00)
 153        #define PSR_DEV_READY           BIT(7)
 154        #define PSR_RESET               (0 << 15)
 155        #define PSR_RESET_CLR           BIT(15)
 156#define P0_BOR          (0x02)
 157#define P0_FER          (0x04)
 158        #define FER_IPALM               BIT(0)
 159        #define FER_DCRC                BIT(1)
 160        #define FER_RH3M                BIT(2)
 161        #define FER_HEADERSWAP          BIT(7)
 162        #define FER_WSWAP               BIT(8)
 163        #define FER_BSWAP               BIT(9)
 164        #define FER_INTHI               BIT(10)
 165        #define FER_INTLO               (0 << 10)
 166        #define FER_IRQ_PULL            BIT(11)
 167        #define FER_RXEN                BIT(14)
 168        #define FER_TXEN                BIT(15)
 169#define P0_ISR          (0x06)
 170        #define ISR_RXPKT               BIT(0)
 171        #define ISR_MDQ                 BIT(4)
 172        #define ISR_TXT                 BIT(5)
 173        #define ISR_TXPAGES             BIT(6)
 174        #define ISR_TXERR               BIT(8)
 175        #define ISR_LINK                BIT(9)
 176#define P0_IMR          (0x08)
 177        #define IMR_RXPKT               BIT(0)
 178        #define IMR_MDQ                 BIT(4)
 179        #define IMR_TXT                 BIT(5)
 180        #define IMR_TXPAGES             BIT(6)
 181        #define IMR_TXERR               BIT(8)
 182        #define IMR_LINK                BIT(9)
 183        #define IMR_MASKALL             (0xFFFF)
 184        #define IMR_DEFAULT             (IMR_TXERR)
 185#define P0_WFCR         (0x0A)
 186        #define WFCR_PMEIND             BIT(0) /* PME indication */
 187        #define WFCR_PMETYPE            BIT(1) /* PME I/O type */
 188        #define WFCR_PMEPOL             BIT(2) /* PME polarity */
 189        #define WFCR_PMERST             BIT(3) /* Reset PME */
 190        #define WFCR_SLEEP              BIT(4) /* Enable sleep mode */
 191        #define WFCR_WAKEUP             BIT(5) /* Enable wakeup mode */
 192        #define WFCR_WAITEVENT          BIT(6) /* Reserved */
 193        #define WFCR_CLRWAKE            BIT(7) /* Clear wakeup */
 194        #define WFCR_LINKCH             BIT(8) /* Enable link change */
 195        #define WFCR_MAGICP             BIT(9) /* Enable magic packet */
 196        #define WFCR_WAKEF              BIT(10) /* Enable wakeup frame */
 197        #define WFCR_PMEEN              BIT(11) /* Enable PME pin */
 198        #define WFCR_LINKCHS            BIT(12) /* Link change status */
 199        #define WFCR_MAGICPS            BIT(13) /* Magic packet status */
 200        #define WFCR_WAKEFS             BIT(14) /* Wakeup frame status */
 201        #define WFCR_PMES               BIT(15) /* PME pin status */
 202#define P0_PSCR         (0x0C)
 203        #define PSCR_PS_MASK            (0xFFF0)
 204        #define PSCR_PS_D0              (0)
 205        #define PSCR_PS_D1              BIT(0)
 206        #define PSCR_PS_D2              BIT(1)
 207        #define PSCR_FPS                BIT(3) /* Enable fiber mode PS */
 208        #define PSCR_SWPS               BIT(4) /* Enable software */
 209                                                 /* PS control */
 210        #define PSCR_WOLPS              BIT(5) /* Enable WOL PS */
 211        #define PSCR_SWWOL              BIT(6) /* Enable software select */
 212                                                 /* WOL PS */
 213        #define PSCR_PHYOSC             BIT(7) /* Internal PHY OSC control */
 214        #define PSCR_FOFEF              BIT(8) /* Force PHY generate FEF */
 215        #define PSCR_FOF                BIT(9) /* Force PHY in fiber mode */
 216        #define PSCR_PHYPD              BIT(10) /* PHY power down. */
 217                                                  /* Active high */
 218        #define PSCR_PHYRST             BIT(11) /* PHY reset signal. */
 219                                                  /* Active low */
 220        #define PSCR_PHYCSIL            BIT(12) /* PHY cable energy detect */
 221        #define PSCR_PHYCOFF            BIT(13) /* PHY cable off */
 222        #define PSCR_PHYLINK            BIT(14) /* PHY link status */
 223        #define PSCR_EEPOK              BIT(15) /* EEPROM load complete */
 224#define P0_MACCR        (0x0E)
 225        #define MACCR_RXEN              BIT(0) /* Enable RX */
 226        #define MACCR_DUPLEX_FULL       BIT(1) /* 1: Full, 0: Half */
 227        #define MACCR_SPEED_100         BIT(2) /* 1: 100Mbps, 0: 10Mbps */
 228        #define MACCR_RXFC_ENABLE       BIT(3)
 229        #define MACCR_RXFC_MASK         0xFFF7
 230        #define MACCR_TXFC_ENABLE       BIT(4)
 231        #define MACCR_TXFC_MASK         0xFFEF
 232        #define MACCR_PSI               BIT(6) /* Software Cable-Off */
 233                                               /* Power Saving Interrupt */
 234        #define MACCR_PF                BIT(7)
 235        #define MACCR_PMM_BITS          8
 236        #define MACCR_PMM_MASK          (0x1F00)
 237        #define MACCR_PMM_RESET         BIT(8)
 238        #define MACCR_PMM_WAIT          (2 << 8)
 239        #define MACCR_PMM_READY         (3 << 8)
 240        #define MACCR_PMM_D1            (4 << 8)
 241        #define MACCR_PMM_D2            (5 << 8)
 242        #define MACCR_PMM_WAKE          (7 << 8)
 243        #define MACCR_PMM_D1_WAKE       (8 << 8)
 244        #define MACCR_PMM_D2_WAKE       (9 << 8)
 245        #define MACCR_PMM_SLEEP         (10 << 8)
 246        #define MACCR_PMM_PHY_RESET     (11 << 8)
 247        #define MACCR_PMM_SOFT_D1       (16 << 8)
 248        #define MACCR_PMM_SOFT_D2       (17 << 8)
 249#define P0_TFBFCR       (0x10)
 250        #define TFBFCR_SCHE_FREE_PAGE   0xE07F
 251        #define TFBFCR_FREE_PAGE_BITS   0x07
 252        #define TFBFCR_FREE_PAGE_LATCH  BIT(6)
 253        #define TFBFCR_SET_FREE_PAGE(x) (((x) & 0x3F) << TFBFCR_FREE_PAGE_BITS)
 254        #define TFBFCR_TX_PAGE_SET      BIT(13)
 255        #define TFBFCR_MANU_ENTX        BIT(15)
 256        #define TX_FREEBUF_MASK         0x003F
 257        #define TX_DPTSTART             0x4000
 258
 259#define P0_TSNR         (0x12)
 260        #define TXNR_TXB_ERR            BIT(5)
 261        #define TXNR_TXB_IDLE           BIT(6)
 262        #define TSNR_PKT_CNT(x)         (((x) & 0x3F) << 8)
 263        #define TXNR_TXB_REINIT         BIT(14)
 264        #define TSNR_TXB_START          BIT(15)
 265#define P0_RTDPR        (0x14)
 266#define P0_RXBCR1       (0x16)
 267        #define RXBCR1_RXB_DISCARD      BIT(14)
 268        #define RXBCR1_RXB_START        BIT(15)
 269#define P0_RXBCR2       (0x18)
 270        #define RXBCR2_PKT_MASK         (0xFF)
 271        #define RXBCR2_RXPC_MASK        (0x7F)
 272        #define RXBCR2_RXB_READY        BIT(13)
 273        #define RXBCR2_RXB_IDLE         BIT(14)
 274        #define RXBCR2_RXB_REINIT       BIT(15)
 275#define P0_RTWCR        (0x1A)
 276        #define RTWCR_RXWC_MASK         (0x3FFF)
 277        #define RTWCR_RX_LATCH          BIT(15)
 278#define P0_RCPHR        (0x1C)
 279
 280        /* Definition of PAGE1 */
 281#define P1_RPPER        (0x22)
 282        #define RPPER_RXEN              BIT(0)
 283#define P1_MRCR         (0x28)
 284#define P1_MDR          (0x2A)
 285#define P1_RMPR         (0x2C)
 286#define P1_TMPR         (0x2E)
 287#define P1_RXBSPCR      (0x30)
 288        #define RXBSPCR_STUF_WORD_CNT(x)        (((x) & 0x7000) >> 12)
 289        #define RXBSPCR_STUF_ENABLE             BIT(15)
 290#define P1_MCR          (0x32)
 291        #define MCR_SBP                 BIT(8)
 292        #define MCR_SM                  BIT(9)
 293        #define MCR_CRCENLAN            BIT(11)
 294        #define MCR_STP                 BIT(12)
 295        /* Definition of PAGE2 */
 296#define P2_CIR          (0x42)
 297#define P2_PCR          (0x44)
 298        #define PCR_POLL_EN             BIT(0)
 299        #define PCR_POLL_FLOWCTRL       BIT(1)
 300        #define PCR_POLL_BMCR           BIT(2)
 301        #define PCR_PHYID(x)            ((x) << 8)
 302#define P2_PHYSR        (0x46)
 303#define P2_MDIODR       (0x48)
 304#define P2_MDIOCR       (0x4A)
 305        #define MDIOCR_RADDR(x)         ((x) & 0x1F)
 306        #define MDIOCR_FADDR(x)         (((x) & 0x1F) << 8)
 307        #define MDIOCR_VALID            BIT(13)
 308        #define MDIOCR_READ             BIT(14)
 309        #define MDIOCR_WRITE            BIT(15)
 310#define P2_LCR0         (0x4C)
 311        #define LCR_LED0_EN             BIT(0)
 312        #define LCR_LED0_100MODE        BIT(1)
 313        #define LCR_LED0_DUPLEX         BIT(2)
 314        #define LCR_LED0_LINK           BIT(3)
 315        #define LCR_LED0_ACT            BIT(4)
 316        #define LCR_LED0_COL            BIT(5)
 317        #define LCR_LED0_10MODE         BIT(6)
 318        #define LCR_LED0_DUPCOL         BIT(7)
 319        #define LCR_LED1_EN             BIT(8)
 320        #define LCR_LED1_100MODE        BIT(9)
 321        #define LCR_LED1_DUPLEX         BIT(10)
 322        #define LCR_LED1_LINK           BIT(11)
 323        #define LCR_LED1_ACT            BIT(12)
 324        #define LCR_LED1_COL            BIT(13)
 325        #define LCR_LED1_10MODE         BIT(14)
 326        #define LCR_LED1_DUPCOL         BIT(15)
 327#define P2_LCR1         (0x4E)
 328        #define LCR_LED2_MASK           (0xFF00)
 329        #define LCR_LED2_EN             BIT(0)
 330        #define LCR_LED2_100MODE        BIT(1)
 331        #define LCR_LED2_DUPLEX         BIT(2)
 332        #define LCR_LED2_LINK           BIT(3)
 333        #define LCR_LED2_ACT            BIT(4)
 334        #define LCR_LED2_COL            BIT(5)
 335        #define LCR_LED2_10MODE         BIT(6)
 336        #define LCR_LED2_DUPCOL         BIT(7)
 337#define P2_IPGCR        (0x50)
 338#define P2_CRIR         (0x52)
 339#define P2_FLHWCR       (0x54)
 340#define P2_RXCR         (0x56)
 341        #define RXCR_PRO                BIT(0)
 342        #define RXCR_AMALL              BIT(1)
 343        #define RXCR_SEP                BIT(2)
 344        #define RXCR_AB                 BIT(3)
 345        #define RXCR_AM                 BIT(4)
 346        #define RXCR_AP                 BIT(5)
 347        #define RXCR_ARP                BIT(6)
 348#define P2_JLCR         (0x58)
 349#define P2_MPLR         (0x5C)
 350
 351        /* Definition of PAGE3 */
 352#define P3_MACASR0      (0x62)
 353        #define P3_MACASR(x)            (P3_MACASR0 + 2 * (x))
 354        #define MACASR_LOWBYTE_MASK     0x00FF
 355        #define MACASR_HIGH_BITS        0x08
 356#define P3_MACASR1      (0x64)
 357#define P3_MACASR2      (0x66)
 358#define P3_MFAR01       (0x68)
 359#define P3_MFAR_BASE    (0x68)
 360        #define P3_MFAR(x)              (P3_MFAR_BASE + 2 * (x))
 361
 362#define P3_MFAR23       (0x6A)
 363#define P3_MFAR45       (0x6C)
 364#define P3_MFAR67       (0x6E)
 365#define P3_VID0FR       (0x70)
 366#define P3_VID1FR       (0x72)
 367#define P3_EECSR        (0x74)
 368#define P3_EEDR         (0x76)
 369#define P3_EECR         (0x78)
 370        #define EECR_ADDR_MASK          (0x00FF)
 371        #define EECR_READ_ACT           BIT(8)
 372        #define EECR_WRITE_ACT          BIT(9)
 373        #define EECR_WRITE_DISABLE      BIT(10)
 374        #define EECR_WRITE_ENABLE       BIT(11)
 375        #define EECR_EE_READY           BIT(13)
 376        #define EECR_RELOAD             BIT(14)
 377        #define EECR_RESET              BIT(15)
 378#define P3_TPCR         (0x7A)
 379        #define TPCR_PATT_MASK          (0xFF)
 380        #define TPCR_RAND_PKT_EN        BIT(14)
 381        #define TPCR_FIXED_PKT_EN       BIT(15)
 382#define P3_TPLR         (0x7C)
 383        /* Definition of PAGE4 */
 384#define P4_SPICR        (0x8A)
 385        #define SPICR_RCEN              BIT(0)
 386        #define SPICR_QCEN              BIT(1)
 387        #define SPICR_RBRE              BIT(3)
 388        #define SPICR_PMM               BIT(4)
 389        #define SPICR_LOOPBACK          BIT(8)
 390        #define SPICR_CORE_RES_CLR      BIT(10)
 391        #define SPICR_SPI_RES_CLR       BIT(11)
 392#define P4_SPIISMR      (0x8C)
 393
 394#define P4_COERCR0      (0x92)
 395        #define COERCR0_RXIPCE          BIT(0)
 396        #define COERCR0_RXIPVE          BIT(1)
 397        #define COERCR0_RXV6PE          BIT(2)
 398        #define COERCR0_RXTCPE          BIT(3)
 399        #define COERCR0_RXUDPE          BIT(4)
 400        #define COERCR0_RXICMP          BIT(5)
 401        #define COERCR0_RXIGMP          BIT(6)
 402        #define COERCR0_RXICV6          BIT(7)
 403
 404        #define COERCR0_RXTCPV6         BIT(8)
 405        #define COERCR0_RXUDPV6         BIT(9)
 406        #define COERCR0_RXICMV6         BIT(10)
 407        #define COERCR0_RXIGMV6         BIT(11)
 408        #define COERCR0_RXICV6V6        BIT(12)
 409
 410        #define COERCR0_DEFAULT         (COERCR0_RXIPCE | COERCR0_RXV6PE | \
 411                                         COERCR0_RXTCPE | COERCR0_RXUDPE | \
 412                                         COERCR0_RXTCPV6 | COERCR0_RXUDPV6)
 413#define P4_COERCR1      (0x94)
 414        #define COERCR1_IPCEDP          BIT(0)
 415        #define COERCR1_IPVEDP          BIT(1)
 416        #define COERCR1_V6VEDP          BIT(2)
 417        #define COERCR1_TCPEDP          BIT(3)
 418        #define COERCR1_UDPEDP          BIT(4)
 419        #define COERCR1_ICMPDP          BIT(5)
 420        #define COERCR1_IGMPDP          BIT(6)
 421        #define COERCR1_ICV6DP          BIT(7)
 422        #define COERCR1_RX64TE          BIT(8)
 423        #define COERCR1_RXPPPE          BIT(9)
 424        #define COERCR1_TCP6DP          BIT(10)
 425        #define COERCR1_UDP6DP          BIT(11)
 426        #define COERCR1_IC6DP           BIT(12)
 427        #define COERCR1_IG6DP           BIT(13)
 428        #define COERCR1_ICV66DP         BIT(14)
 429        #define COERCR1_RPCE            BIT(15)
 430
 431        #define COERCR1_DEFAULT         (COERCR1_RXPPPE)
 432
 433#define P4_COETCR0      (0x96)
 434        #define COETCR0_TXIP            BIT(0)
 435        #define COETCR0_TXTCP           BIT(1)
 436        #define COETCR0_TXUDP           BIT(2)
 437        #define COETCR0_TXICMP          BIT(3)
 438        #define COETCR0_TXIGMP          BIT(4)
 439        #define COETCR0_TXICV6          BIT(5)
 440        #define COETCR0_TXTCPV6         BIT(8)
 441        #define COETCR0_TXUDPV6         BIT(9)
 442        #define COETCR0_TXICMV6         BIT(10)
 443        #define COETCR0_TXIGMV6         BIT(11)
 444        #define COETCR0_TXICV6V6        BIT(12)
 445
 446        #define COETCR0_DEFAULT         (COETCR0_TXIP | COETCR0_TXTCP | \
 447                                         COETCR0_TXUDP | COETCR0_TXTCPV6 | \
 448                                         COETCR0_TXUDPV6)
 449#define P4_COETCR1      (0x98)
 450        #define COETCR1_TX64TE          BIT(0)
 451        #define COETCR1_TXPPPE          BIT(1)
 452
 453#define P4_COECEDR      (0x9A)
 454#define P4_L2CECR       (0x9C)
 455
 456        /* Definition of PAGE5 */
 457#define P5_WFTR         (0xA2)
 458        #define WFTR_2MS                (0x01)
 459        #define WFTR_4MS                (0x02)
 460        #define WFTR_8MS                (0x03)
 461        #define WFTR_16MS               (0x04)
 462        #define WFTR_32MS               (0x05)
 463        #define WFTR_64MS               (0x06)
 464        #define WFTR_128MS              (0x07)
 465        #define WFTR_256MS              (0x08)
 466        #define WFTR_512MS              (0x09)
 467        #define WFTR_1024MS             (0x0A)
 468        #define WFTR_2048MS             (0x0B)
 469        #define WFTR_4096MS             (0x0C)
 470        #define WFTR_8192MS             (0x0D)
 471        #define WFTR_16384MS            (0x0E)
 472        #define WFTR_32768MS            (0x0F)
 473#define P5_WFCCR        (0xA4)
 474#define P5_WFCR03       (0xA6)
 475        #define WFCR03_F0_EN            BIT(0)
 476        #define WFCR03_F1_EN            BIT(4)
 477        #define WFCR03_F2_EN            BIT(8)
 478        #define WFCR03_F3_EN            BIT(12)
 479#define P5_WFCR47       (0xA8)
 480        #define WFCR47_F4_EN            BIT(0)
 481        #define WFCR47_F5_EN            BIT(4)
 482        #define WFCR47_F6_EN            BIT(8)
 483        #define WFCR47_F7_EN            BIT(12)
 484#define P5_WF0BMR0      (0xAA)
 485#define P5_WF0BMR1      (0xAC)
 486#define P5_WF0CR        (0xAE)
 487#define P5_WF0OBR       (0xB0)
 488#define P5_WF1BMR0      (0xB2)
 489#define P5_WF1BMR1      (0xB4)
 490#define P5_WF1CR        (0xB6)
 491#define P5_WF1OBR       (0xB8)
 492#define P5_WF2BMR0      (0xBA)
 493#define P5_WF2BMR1      (0xBC)
 494
 495        /* Definition of PAGE6 */
 496#define P6_WF2CR        (0xC2)
 497#define P6_WF2OBR       (0xC4)
 498#define P6_WF3BMR0      (0xC6)
 499#define P6_WF3BMR1      (0xC8)
 500#define P6_WF3CR        (0xCA)
 501#define P6_WF3OBR       (0xCC)
 502#define P6_WF4BMR0      (0xCE)
 503#define P6_WF4BMR1      (0xD0)
 504#define P6_WF4CR        (0xD2)
 505#define P6_WF4OBR       (0xD4)
 506#define P6_WF5BMR0      (0xD6)
 507#define P6_WF5BMR1      (0xD8)
 508#define P6_WF5CR        (0xDA)
 509#define P6_WF5OBR       (0xDC)
 510
 511/* Definition of PAGE7 */
 512#define P7_WF6BMR0      (0xE2)
 513#define P7_WF6BMR1      (0xE4)
 514#define P7_WF6CR        (0xE6)
 515#define P7_WF6OBR       (0xE8)
 516#define P7_WF7BMR0      (0xEA)
 517#define P7_WF7BMR1      (0xEC)
 518#define P7_WF7CR        (0xEE)
 519#define P7_WF7OBR       (0xF0)
 520#define P7_WFR01        (0xF2)
 521#define P7_WFR23        (0xF4)
 522#define P7_WFR45        (0xF6)
 523#define P7_WFR67        (0xF8)
 524#define P7_WFPC0        (0xFA)
 525#define P7_WFPC1        (0xFC)
 526
 527/* Tx headers structure */
 528struct tx_sop_header {
 529        /* bit 15-11: flags, bit 10-0: packet length */
 530        u16 flags_len;
 531        /* bit 15-11: sequence number, bit 11-0: packet length bar */
 532        u16 seq_lenbar;
 533};
 534
 535struct tx_segment_header {
 536        /* bit 15-14: flags, bit 13-11: segment number */
 537        /* bit 10-0: segment length */
 538        u16 flags_seqnum_seglen;
 539        /* bit 15-14: end offset, bit 13-11: start offset */
 540        /* bit 10-0: segment length bar */
 541        u16 eo_so_seglenbar;
 542};
 543
 544struct tx_eop_header {
 545        /* bit 15-11: sequence number, bit 10-0: packet length */
 546        u16 seq_len;
 547        /* bit 15-11: sequence number bar, bit 10-0: packet length bar */
 548        u16 seqbar_lenbar;
 549};
 550
 551struct tx_pkt_info {
 552        struct tx_sop_header sop;
 553        struct tx_segment_header seg;
 554        struct tx_eop_header eop;
 555        u16 pkt_len;
 556        u16 seq_num;
 557};
 558
 559/* Rx headers structure */
 560struct rx_header {
 561        u16 flags_len;
 562        u16 seq_lenbar;
 563        u16 flags;
 564};
 565
 566extern unsigned long ax88796c_no_regs_mask[];
 567
 568#endif /* #ifndef _AX88796C_MAIN_H */
 569