!C99Shell v. 1.0 pre-release build #13!

Software: Apache/2.0.54 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.54 OpenSSL/0.9.7l DAV/2 FrontPage/5.0.2.2635 PHP/4.4.0 mod_gzip/2.0.26.1a 

uname -a: Linux snow.he.net 4.4.276-v2-mono-1 #1 SMP Wed Jul 21 11:21:17 PDT 2021 i686 

uid=99(nobody) gid=98(nobody) groups=98(nobody) 

Safe-mode: OFF (not secure)

/usr/src/linux-2.4.18-xfs-1.1/drivers/net/   drwxr-xr-x
Free 318.34 GB of 458.09 GB (69.49%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     gmac.h (30.6 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 * Definitions for the GMAC ethernet chip, used in the
 * Apple G4 powermac.
 */


/* 
 * GMAC register definitions
 * 
 * Note: We encode the register size the same way Apple does. I didn't copy
 *       Apple's source as-is to avoid licence issues however. That's really
 *       painful to re-define all those registers ...
 *       The constants themselves were partially found in OF code, in Sun
 *       GEM driver and in Apple's Darwin GMAC driver
 */

#define REG_SZ_8            0x00000000
#define REG_SZ_16            0x40000000
#define REG_SZ_32            0x80000000
#define REG_MASK            0x0FFFFFFF

    /*
     * Global registers
     */

/* -- 0x0004    RW    Global configuration
 * d: 0x00000042
 */
#define GM_GCONF            (0x0004 | REG_SZ_16)
#define GM_GCONF_BURST_SZ        0x0001        /* 1: 64 bytes/burst, 0: infinite */
#define GM_GCONF_TXDMA_LIMIT_MASK    0x003e        /* 5-1: No of 64 bytes transfers */
#define GM_GCONF_TXDMA_LIMIT_SHIFT    1
#define GM_GCONF_RXDMA_LIMIT_MASK    0x07c0        /* 10-6: No of 64 bytes transfers */
#define GM_GCONF_RXDMA_LIMIT_SHIFT    6

/* -- 0x000C    R-C    Global Interrupt status. 
 * d: 0x00000000    bits 0-6 cleared on read (C)
 */
#define GM_IRQ_STATUS            (0x000c | REG_SZ_32)
#define GM_IRQ_TX_INT_ME        0x00000001    /* C Frame with INT_ME bit set in fifo */
#define GM_IRQ_TX_ALL            0x00000002    /* C TX descriptor ring empty */
#define GM_IRQ_TX_DONE            0x00000004    /* C moved from host to TX fifo */
#define GM_IRQ_RX_DONE            0x00000010    /* C moved from RX fifo to host */
#define GM_IRQ_RX_NO_BUF        0x00000020    /* C No RX buffer available */
#define GM_IRQ_RX_TAG_ERR        0x00000040    /* C RX tag error */
#define GM_IRQ_PCS            0x00002000    /* PCS interrupt ? */
#define GM_IRQ_MAC_TX            0x00004000    /* MAC tx register set */
#define GM_IRQ_MAC_RX            0x00008000    /* MAC rx register set  */
#define GM_IRQ_MAC_CTRL            0x00010000    /* MAC control register set  */
#define GM_IRQ_MIF            0x00020000    /* MIF status register set */
#define GM_IRQ_BUS_ERROR        0x00040000    /* Bus error status register set */
#define GM_IRQ_TX_COMP            0xfff80000    /* TX completion mask */
    
/* -- 0x0010    RW    Interrupt mask. 
 * d: 0xFFFFFFFF
 */
#define GM_IRQ_MASK            (0x0010 | REG_SZ_32)

/* -- 0x0014    WO    Interrupt ack.
 *             Ack. "high" interrupts
 */
#define GM_IRQ_ACK            (0x0014 | REG_SZ_32)

/* -- 0x001C    WO    Alias of status register (no auto-clear of "low" interrupts)
 */
#define GM_IRQ_ALT_STAT            (0x001C | REG_SZ_32)

/* -- 0x1000    R-C    PCI Error status register
 */
#define GM_PCI_ERR_STAT            (0x1000 | REG_SZ_8)
#define GM_PCI_ERR_BAD_ACK        0x01        /* Bad Ack64 */
#define GM_PCI_ERR_TIMEOUT        0x02        /* Transaction timeout */
#define GM_PCI_ERR_OTHER        0x04        /* Any other PCI error */
    
/* -- 0x1004    RW    PCI Error mask register
 * d: 0xFFFFFFFF
 */
#define GM_PCI_ERR_MASK            (0x1004 | REG_SZ_8)

/* -- 0x1008    RW    BIF Configuration
 * d: 0x00000000
 */
#define GM_BIF_CFG            (0x1008 | REG_SZ_8)
#define    GM_BIF_CFG_SLOWCLK        0x01        /* for parity error timing */
#define    GM_BIF_CFG_HOST_64        0x02        /* 64-bit host */
#define    GM_BIF_CFG_B64D_DIS        0x04        /* no 64-bit wide data cycle */
#define    GM_BIF_CFG_M66EN        0x08        /* Read-only: sense if configured for 66MHz */
    
/* -- 0x100C    RW    BIF Diagnostic ???
 */
#define GM_BIF_DIAG            (0x100C | REG_SZ_32)
#define GM_BIF_DIAG_BURST_STATE        0x007F0000
#define GM_BIF_DIAG_STATE_MACH        0xFF000000

/* -- 0x1010    RW    Software reset
 *            Lower two bits reset TX and RX, both reset whole gmac. They come back
 *            to 0 when reset is complete.
 *            bit 2 force RSTOUT# pin when set (PHY reset)
 */
#define GM_RESET            (0x1010 | REG_SZ_8)
#define    GM_RESET_TX            0x01
#define    GM_RESET_RX            0x02
#define    GM_RESET_RSTOUT            0x04        /* PHY reset */


    /*
     * Tx DMA Registers
     */

/* -- 0x2000    RW    Tx Kick
 * d: 0x00000000    Written by the host with the last tx descriptor number +1 to send
 */
#define GM_TX_KICK            (0x2000 | REG_SZ_16)

/* -- 0x2004    RW    Tx configuration
 * d: 0x118010        Controls operation of Tx DMA channel
 */

#define GM_TX_CONF            (0x2004 | REG_SZ_32)
#define    GM_TX_CONF_DMA_EN        0x00000001    /* Tx DMA enable */
#define    GM_TX_CONF_RING_SZ_MASK        0x0000001e    /* Tx desc ring size */
#define GM_TX_CONF_RING_SZ_SHIFT    1        /* Tx desc ring size shift */
#define GM_TX_CONF_FIFO_PIO        0x00000020    /* Tx fifo PIO select ??? */
#define    GM_TX_CONF_FIFO_THR_MASK    0x001ffc00    /* Tx fifo threshold */
#define GM_TX_CONF_FIFO_THR_SHIFT    10        /* Tx fifo threshold shift */
#define GM_TX_CONF_FIFO_THR_DEFAULT    0x7ff        /* Tx fifo threshold default */
#define    GM_TX_CONF_PACED_MODE        0x00100000    /* 1: tx_all irq after last descriptor */
                            /* 0: tx_all irq when tx fifo empty */
#define    GM_TX_RING_SZ_32        (0 << 1)
#define    GM_TX_RING_SZ_64        (1 << 1)
#define    GM_TX_RING_SZ_128        (2 << 1)
#define    GM_TX_RING_SZ_256        (3 << 1)
#define    GM_TX_RING_SZ_512        (4 << 1)
#define    GM_TX_RING_SZ_1024        (5 << 1)
#define    GM_TX_RING_SZ_2048        (6 << 1)
#define    GM_TX_RING_SZ_4086        (7 << 1)
#define    GM_TX_RING_SZ_8192        (8 << 1)

/* -- 0x2008    RW    Tx descriptor ring base low
 * -- 0x200C    RW    Tx descriptor ring base high
 *
 * Base of tx ring, must be 2k aligned
 */
#define GM_TX_DESC_LO            (0x2008 | REG_SZ_32)
#define GM_TX_DESC_HI            (0x200C | REG_SZ_32)
 
/* -- 0x2100    RW    Tx Completion
 * d: 0x00000000    Written by the gmac with the last tx descriptor number +1 sent
 */
#define GM_TX_COMP            (0x2100 | REG_SZ_16)


    /*
     * Rx DMA registers
     */


/* -- 0x4000    RW    Rx configuration
 * d: 0x1000010        Controls operation of Rx DMA channel
 */

#define GM_RX_CONF            (0x4000 | REG_SZ_32)
#define    GM_RX_CONF_DMA_EN        0x00000001    /* Rx DMA enable */
#define    GM_RX_CONF_RING_SZ_MASK        0x0000001e    /* Rx desc ring size */
#define GM_RX_CONF_RING_SZ_SHIFT    1
#define    GM_RX_CONF_BATCH_DIS        0x00000020    /* Rx batch disable */
#define    GM_RX_CONF_FBYTE_OFF_MASK    0x00001c00    /* First byte offset (10-12) */
#define GM_RX_CONF_FBYTE_OFF_SHIFT    10
#define    GM_RX_CONF_CHK_START_MASK    0x000FE000    /* Checksum start offset */
#define GM_RX_CONF_CHK_START_SHIFT    13
#define    GM_RX_CONF_DMA_THR_MASK        0x07000000    /* Rx DMA threshold */
#define GM_RX_CONF_DMA_THR_SHIFT    24        /* Rx DMA threshold shift */
#define GM_RX_CONF_DMA_THR_DEFAULT    1        /* Rx DMA threshold default */

#define    GM_RX_RING_SZ_32        (0 << 1)
#define    GM_RX_RING_SZ_64        (1 << 1)
#define    GM_RX_RING_SZ_128        (2 << 1)
#define    GM_RX_RING_SZ_256        (3 << 1)
#define    GM_RX_RING_SZ_512        (4 << 1)
#define    GM_RX_RING_SZ_1024        (5 << 1)
#define    GM_RX_RING_SZ_2048        (6 << 1)
#define    GM_RX_RING_SZ_4086        (7 << 1)
#define    GM_RX_RING_SZ_8192        (8 << 1)

/* -- 0x4004    RW    Rx descriptor ring base low
 * -- 0x4008    RW    Rx descriptor ring base high
 *
 * Base of rx ring
 */
#define GM_RX_DESC_LO            (0x4004 | REG_SZ_32)
#define GM_RX_DESC_HI            (0x4008 | REG_SZ_32)

/* -- 0x4020    RW    Rx pause threshold
 * d: 0x000000f8    
 *
 * Two PAUSE thresholds are used to define when PAUSE flow control frames are
 * emitted by GEM. The granularity of these thresholds is in 64 byte increments.
 * XOFF PAUSE frames use the pause_time value pre-programmed in the
 * Send PAUSE MAC Register.
 * XON PAUSE frames use a pause_time of 0.
 */
#define GM_RX_PTH            (0x4020 | REG_SZ_32)
            /*
             * 0-8: XOFF PAUSE emitted when RX FIFO
             * occupancy rises above this value (times 64 bytes)
             */
#define    GM_RX_PTH_OFF_MASK        0x000001ff
#define GM_RX_PTH_OFF_SHIFT        0
            /*
             * 12-20: XON PAUSE emitted when RX FIFO
             * occupancy falls below this value (times 64 bytes)
             */
#define    GM_RX_PTH_ON_MASK        0x001ff000
#define    GM_RX_PTH_ON_SHIFT        12

#define GM_RX_PTH_UNITS            64

/* -- 0x4100    RW    Rx Kick
 * d: 0x00000000    The last valid RX descriptor is the one right before the value of the
 *                      register. Initially set to 0 on reset. RX descriptors must be posted
 *                      in multiples of 4. The first descriptor should be cache-line aligned
 *                      for best performance.
 */
#define GM_RX_KICK            (0x4100 | REG_SZ_16)

/* -- 0x4104    RW    Rx Completion
 * d: 0x00000000    All descriptors upto but excluding the register value are ready to be
 *                      processed by the host.
 */
#define GM_RX_COMP            (0x4104 | REG_SZ_16)
 
/* -- 0x4108    RW    Rx Blanking
 * d: 0x00000000    Written by the gmac with the last tx descriptor number +1 sent
 *
 * Defines the values used for receive interrupt blanking.
 * For INTR_TIME field, every count is 2048 PCI clock time. For 66 Mhz, each
 * count is about 15 ns.
 */
#define GM_RX_BLANK            (0x4108 | REG_SZ_32)
            /*
             * 0-8:no.of pkts to be recvd since the last RX_DONE
             * interrupt, before a new interrupt
             */
#define    GM_RX_BLANK_INTR_PACKETS_MASK    0x000001ff
#define    GM_RX_BLANK_INTR_PACKETS_SHIFT    0
            /*
             * 12-19 : no. of clocks to be counted since the last
             * RX_DONE interrupt, before a new interrupt
             */
#define    GM_RX_BLANK_INTR_TIME_MASK    0x000ff000
#define    GM_RX_BLANK_INTR_TIME_SHIFT    12

#define GM_RX_BLANK_UNITS        2048

/* -- 0x4120    RO    Rx fifo size
 *
 * This 11-bit RO register indicates the size, in 64-byte multiples, of the
 * RX FIFO. Software should use it to properly configure the PAUSE thresholds.
 * The value read is 0x140, indicating a 20kbyte RX FIFO.
 * -------------------------------------------------------------------------
 */
#define GM_RX_FIFO_SIZE            (0x4120 | REG_SZ_16)
#define GM_RZ_FIFO_SIZE_UNITS        64


    /*
     * MAC regisers
     */

/* -- 0x6000        MAC Tx reset control
 */
#define GM_MAC_TX_RESET            (0x6000 | REG_SZ_8)
#define GM_MAC_TX_RESET_NOW        0x01

/* -- 0x6004        MAC Rx reset control
 */
#define GM_MAC_RX_RESET            (0x6004 | REG_SZ_8)
#define GM_MAC_RX_RESET_NOW        0x01

/* -- 0x6008        Send Pause command register
 */
#define GM_MAC_SND_PAUSE        (0x6008 | REG_SZ_32)
#define GM_MAC_SND_PAUSE_TIME_MASK    0x0000ffff
#define GM_MAC_SND_PAUSE_TIME_SHIFT    0
#define GM_MAC_SND_PAUSE_NOW        0x00010000
#define GM_MAC_SND_PAUSE_DEFAULT    0x00001bf0

/* -- 0x6010        MAC transmit status
 */
#define GM_MAC_TX_STATUS        (0x6010 | REG_SZ_16)
#define GM_MAC_TX_STAT_SENT        0x0001
#define GM_MAC_TX_STAT_UNDERRUN        0x0002
#define GM_MAC_TX_STAT_MAX_PKT_ERR    0x0004
#define GM_MAC_TX_STAT_NORM_COLL_OVF    0x0008
#define GM_MAC_TX_STAT_EXCS_COLL_OVF    0x0010
#define GM_MAC_TX_STAT_LATE_COLL_OVF    0x0020
#define GM_MAC_TX_STAT_FIRS_COLL_OVF    0x0040
#define GM_MAC_TX_STAT_DEFER_TIMER_OVF    0x0080
#define GM_MAC_TX_STAT_PEAK_ATTMP_OVF    0x0100

/* -- 0x6014        MAC receive status
 */
#define GM_MAC_RX_STATUS        (0x6014 | REG_SZ_16)
#define GM_MAC_RX_STAT_RECEIVED        0x0001
#define GM_MAC_RX_STAT_FIFO_OVF        0x0002
#define GM_MAC_RX_STAT_FRAME_CTR_OVF    0x0004
#define GM_MAC_RX_STAT_ALIGN_ERR_OVF    0x0008
#define GM_MAC_RX_STAT_CRC_ERR_OVF    0x0010
#define GM_MAC_RX_STAT_LEN_ERR_OVF    0x0020
#define GM_MAC_RX_STAT_CODE_ERR_OVF    0x0040

/* -- 0x6018        MAC control & status
 */
#define GM_MAC_CTRLSTAT            (0x6018 | REG_SZ_32)
#define GM_MAC_CTRLSTAT_PAUSE_RCVD    0x00000001
#define GM_MAC_CTRLSTAT_PAUSE_STATE    0x00000002
#define GM_MAC_CTRLSTAT_PAUSE_NOT    0x00000004
#define GM_MAC_CTRLSTAT_PAUSE_TIM_MASK    0xffff0000
#define GM_MAC_CTRLSTAT_PAUSE_TIM_SHIFT    16

/* -- 0x6020        MAC Tx mask
 *             Same bits as MAC Tx status
 */
#define GM_MAC_TX_MASK            (0x6020 | REG_SZ_16)

/* -- 0x6024        MAC Rx mask
 *             Same bits as MAC Rx status
 */
#define GM_MAC_RX_MASK            (0x6024 | REG_SZ_16)

/* -- 0x6028        MAC Control/Status mask
 *             Same bits as MAC control/status low order byte
 */
#define GM_MAC_CTRLSTAT_MASK        (0x6024 | REG_SZ_8)

/* -- 0x6030        MAC Tx configuration
 */
#define GM_MAC_TX_CONFIG        (0x6030 | REG_SZ_16)
#define GM_MAC_TX_CONF_ENABLE        0x0001
#define GM_MAC_TX_CONF_IGNORE_CARRIER    0x0002
#define GM_MAC_TX_CONF_IGNORE_COLL    0x0004
#define GM_MAC_TX_CONF_ENABLE_IPG0    0x0008
#define GM_MAC_TX_CONF_DONT_GIVEUP    0x0010
#define GM_MAC_TX_CONF_DONT_GIVEUP_NLMT    0x0020
#define GM_MAC_TX_CONF_NO_BACKOFF    0x0040
#define GM_MAC_TX_CONF_SLOWDOWN        0x0080
#define GM_MAC_TX_CONF_NO_FCS        0x0100
#define GM_MAC_TX_CONF_CARRIER_EXT    0x0200

/* -- 0x6034        MAC Rx configuration
 */
#define GM_MAC_RX_CONFIG        (0x6034 | REG_SZ_16)
#define GM_MAC_RX_CONF_ENABLE        0x0001
#define GM_MAC_RX_CONF_STRIP_PAD    0x0002
#define GM_MAC_RX_CONF_STIP_FCS        0x0004
#define GM_MAC_RX_CONF_RX_ALL        0x0008
#define GM_MAC_RX_CONF_RX_ALL_MULTI    0x0010
#define GM_MAC_RX_CONF_HASH_ENABLE    0x0020
#define GM_MAC_RX_CONF_ADDR_FLTR_ENABLE    0x0040
#define GM_MAC_RX_CONF_PASS_ERROR_FRAM    0x0080
#define GM_MAC_RX_CONF_CARRIER_EXT    0x0100

/* -- 0x6038        MAC control configuration
 */
#define GM_MAC_CTRL_CONFIG        (0x6038 | REG_SZ_8)
#define GM_MAC_CTRL_CONF_SND_PAUSE_EN    0x01
#define GM_MAC_CTRL_CONF_RCV_PAUSE_EN    0x02
#define GM_MAC_CTRL_CONF_PASS_CTRL_FRAM    0x04

/* -- 0x603c        MAC XIF configuration */
#define GM_MAC_XIF_CONFIG        (0x603c | REG_SZ_8)
#define GM_MAC_XIF_CONF_TX_MII_OUT_EN    0x01
#define GM_MAC_XIF_CONF_MII_INT_LOOP    0x02
#define GM_MAC_XIF_CONF_DISABLE_ECHO    0x04
#define GM_MAC_XIF_CONF_GMII_MODE    0x08
#define GM_MAC_XIF_CONF_MII_BUFFER_EN    0x10
#define GM_MAC_XIF_CONF_LINK_LED    0x20
#define GM_MAC_XIF_CONF_FULL_DPLX_LED    0x40

/* -- 0x6040        MAC inter-packet GAP 0
 */
#define GM_MAC_INTR_PKT_GAP0        (0x6040 | REG_SZ_8)
#define GM_MAC_INTR_PKT_GAP0_DEFAULT    0x00

/* -- 0x6044        MAC inter-packet GAP 1
 */
#define GM_MAC_INTR_PKT_GAP1        (0x6044 | REG_SZ_8)
#define GM_MAC_INTR_PKT_GAP1_DEFAULT    0x08

/* -- 0x6048        MAC inter-packet GAP 2
 */
#define GM_MAC_INTR_PKT_GAP2        (0x6048 | REG_SZ_8)
#define GM_MAC_INTR_PKT_GAP2_DEFAULT    0x04

/* -- 604c        MAC slot time
 */
#define GM_MAC_SLOT_TIME        (0x604C | REG_SZ_16)
#define GM_MAC_SLOT_TIME_DEFAULT    0x0040

/* -- 6050        MAC minimum frame size
 */
#define GM_MAC_MIN_FRAME_SIZE        (0x6050 | REG_SZ_16)
#define GM_MAC_MIN_FRAME_SIZE_DEFAULT    0x0040

/* -- 6054        MAC maximum frame size
 */
#define GM_MAC_MAX_FRAME_SIZE        (0x6054 | REG_SZ_16)
#define GM_MAC_MAX_FRAME_SIZE_DEFAULT    0x05ee
#define GM_MAC_MAX_FRAME_SIZE_ALIGN    0x5f0

/* -- 6058        MAC preamble length
 */
#define GM_MAC_PREAMBLE_LEN        (0x6058 | REG_SZ_16)
#define GM_MAC_PREAMBLE_LEN_DEFAULT    0x0007

/* -- 605c        MAC jam size
 */
#define GM_MAC_JAM_SIZE            (0x605c | REG_SZ_8)
#define GM_MAC_JAM_SIZE_DEFAULT        0x04

/* -- 6060        MAC attempt limit
 */
#define GM_MAC_ATTEMPT_LIMIT        (0x6060 | REG_SZ_8)
#define GM_MAC_ATTEMPT_LIMIT_DEFAULT    0x10

/* -- 6064        MAC control type
 */
#define GM_MAC_CONTROL_TYPE        (0x6064 | REG_SZ_16)
#define GM_MAC_CONTROL_TYPE_DEFAULT    0x8808

/* -- 6080        MAC address 15..0
 * -- 6084        MAC address 16..31
 * -- 6088        MAC address 32..47
 */
#define GM_MAC_ADDR_NORMAL0        (0x6080 | REG_SZ_16)
#define GM_MAC_ADDR_NORMAL1        (0x6084 | REG_SZ_16)
#define GM_MAC_ADDR_NORMAL2        (0x6088 | REG_SZ_16)

/* -- 608c        MAC alternate address 15..0
 * -- 6090        MAC alternate address 16..31
 * -- 6094        MAC alternate address 32..47
 */
#define GM_MAC_ADDR_ALT0        (0x608c | REG_SZ_16)
#define GM_MAC_ADDR_ALT1        (0x6090 | REG_SZ_16)
#define GM_MAC_ADDR_ALT2        (0x6094 | REG_SZ_16)

/* -- 6098        MAC control address 15..0
 * -- 609c        MAC control address 16..31
 * -- 60a0        MAC control address 32..47
 */
#define GM_MAC_ADDR_CTRL0        (0x6098 | REG_SZ_16)
#define GM_MAC_ADDR_CTRL1        (0x609c | REG_SZ_16)
#define GM_MAC_ADDR_CTRL2        (0x60a0 | REG_SZ_16)

/* -- 60a4        MAC address filter (0_0)
 * -- 60a8        MAC address filter (0_1)
 * -- 60ac        MAC address filter (0_2)
 */
#define GM_MAC_ADDR_FILTER0        (0x60a4 | REG_SZ_16)
#define GM_MAC_ADDR_FILTER1        (0x60a8 | REG_SZ_16)
#define GM_MAC_ADDR_FILTER2        (0x60ac | REG_SZ_16)

/* -- 60b0        MAC address filter mask 1,2
 */
#define GM_MAC_ADDR_FILTER_MASK1_2    (0x60b0 | REG_SZ_8)

/* -- 60b4        MAC address filter mask 0
 */
#define GM_MAC_ADDR_FILTER_MASK0    (0x60b4 | REG_SZ_16)

/* -- [60c0 .. 60fc]    MAC hash table
 */
#define GM_MAC_ADDR_FILTER_HASH0    (0x60c0 | REG_SZ_16)

/* -- 6100        MAC normal collision counter
 */
#define GM_MAC_COLLISION_CTR        (0x6100 | REG_SZ_16)

/* -- 6104        MAC 1st successful collision counter
 */
#define GM_MAC_FIRST_COLLISION_CTR    (0x6104 | REG_SZ_16)

/* -- 6108        MAC excess collision counter
 */
#define GM_MAC_EXCS_COLLISION_CTR    (0x6108 | REG_SZ_16)

/* -- 610c        MAC late collision counter
 */
#define GM_MAC_LATE_COLLISION_CTR    (0x610c | REG_SZ_16)

/* -- 6110        MAC defer timer counter
 */
#define GM_MAC_DEFER_TIMER_COUNTER    (0x6110 | REG_SZ_16)

/* -- 6114        MAC peak attempts
 */
#define GM_MAC_PEAK_ATTEMPTS        (0x6114 | REG_SZ_16)

/* -- 6118        MAC Rx frame counter
 */
#define GM_MAC_RX_FRAME_CTR        (0x6118 | REG_SZ_16)

/* -- 611c        MAC Rx length error counter
 */
#define GM_MAC_RX_LEN_ERR_CTR        (0x611c | REG_SZ_16)

/* -- 6120        MAC Rx alignment error counter
 */
#define GM_MAC_RX_ALIGN_ERR_CTR        (0x6120 | REG_SZ_16)

/* -- 6124        MAC Rx CRC error counter
 */
#define GM_MAC_RX_CRC_ERR_CTR        (0x6124 | REG_SZ_16)

/* -- 6128        MAC Rx code violation error counter
 */
#define GM_MAC_RX_CODE_VIOLATION_CTR    (0x6128 | REG_SZ_16)

/* -- 6130        MAC random number seed
 */
#define GM_MAC_RANDOM_SEED        (0x6130 | REG_SZ_16)

/* -- 6134        MAC state machine
 */
#define GM_MAC_STATE_MACHINE        (0x6134 | REG_SZ_8)


    /*
     * MIF registers
     */


/* -- 0x6200    RW    MIF bit bang clock
 */
#define GM_MIF_BB_CLOCK            (0x6200 | REG_SZ_8)

/* -- 0x6204    RW    MIF bit bang data
 */
#define GM_MIF_BB_DATA            (0x6204 | REG_SZ_8)

/* -- 0x6208    RW    MIF bit bang output enable
 */
#define GM_MIF_BB_OUT_ENABLE        (0x6208 | REG_SZ_8)

/* -- 0x620c    RW    MIF frame control & data
 */
#define GM_MIF_FRAME_CTL_DATA        (0x620c | REG_SZ_32)
#define GM_MIF_FRAME_START_MASK        0xc0000000
#define GM_MIF_FRAME_START_SHIFT    30
#define GM_MIF_FRAME_OPCODE_MASK    0x30000000
#define GM_MIF_FRAME_OPCODE_SHIFT    28
#define GM_MIF_FRAME_PHY_ADDR_MASK    0x0f800000
#define GM_MIF_FRAME_PHY_ADDR_SHIFT    23
#define GM_MIF_FRAME_REG_ADDR_MASK    0x007c0000
#define GM_MIF_FRAME_REG_ADDR_SHIFT    18
#define GM_MIF_FRAME_TURNAROUND_HI    0x00020000
#define GM_MIF_FRAME_TURNAROUND_LO    0x00010000
#define GM_MIF_FRAME_DATA_MASK        0x0000ffff
#define GM_MIF_FRAME_DATA_SHIFT        0

/* -- 0x6210    RW    MIF config reg
 */
#define GM_MIF_CFG            (0x6210 | REG_SZ_16)
#define    GM_MIF_CFGPS            0x00000001    /* PHY Select */
#define    GM_MIF_CFGPE            0x00000002    /* Poll Enable */
#define    GM_MIF_CFGBB            0x00000004    /* Bit Bang Enable */
#define    GM_MIF_CFGPR_MASK        0x000000f8    /* Poll Register address */
#define    GM_MIF_CFGPR_SHIFT        3
#define    GM_MIF_CFGM0            0x00000100    /* MDIO_0 Data / MDIO_0 attached */
#define    GM_MIF_CFGM1            0x00000200    /* MDIO_1 Data / MDIO_1 attached */
#define    GM_MIF_CFGPD_MASK        0x00007c00    /* Poll Device PHY address */
#define    GM_MIF_CFGPD_SHIFT        10

#define    GM_MIF_POLL_DELAY        200

#define    GM_INTERNAL_PHYAD        1        /* PHY address for int. transceiver */
#define    GM_EXTERNAL_PHYAD        0        /* PHY address for ext. transceiver */

/* -- 0x6214    RW    MIF interrupt mask reg
 *            same as basic/status Register
 */
#define GM_MIF_IRQ_MASK            (0x6214 | REG_SZ_16)

/* -- 0x6218    RW    MIF basic/status reg
 *            The Basic portion of this register indicates the last
 *            value of the register read indicated in the POLL REG field
 *            of the Configuration Register.
 *            The Status portion indicates bit(s) that have changed.
 *            The MIF Mask register is corresponding to this register in
 *            terms of the bit(s) that need to be masked for generating
 *            interrupt on the MIF Interrupt Bit of the Global Status Rgister.
 */
#define GM_MIF_STATUS            (0x6218 | REG_SZ_32)

#define    GM_MIF_STATUS_MASK        0x0000ffff    /* 0-15 : Status */
#define    GM_MIF_BASIC_MASK        0xffff0000    /* 16-31 : Basic register */

    /*
     * PCS link registers
     */

/* -- 0x9000    RW    PCS mii control reg
 */
#define GM_PCS_CONTROL            (0x9000 | REG_SZ_16)

/* -- 0x9004    RW    PCS mii status reg
 */
#define GM_PCS_STATUS            (0x9004 | REG_SZ_16)

/* -- 0x9008    RW    PCS mii advertisement
 */
#define GM_PCS_ADVERTISEMENT        (0x9008 | REG_SZ_16)

/* -- 0x900c    RW    PCS mii LP ability
 */
#define GM_PCS_ABILITY            (0x900c | REG_SZ_16)

/* -- 0x9010    RW    PCS config
 */
#define GM_PCS_CONFIG            (0x9010 | REG_SZ_8)

/* -- 0x9014    RW    PCS state machine
 */
#define GM_PCS_STATE_MACHINE        (0x9014 | REG_SZ_32)

/* -- 0x9018    RW    PCS interrupt status
 */
#define GM_PCS_IRQ_STATUS        (0x9018 | REG_SZ_8)

/* -- 0x9050    RW    PCS datapath mode
 */
#define GM_PCS_DATAPATH_MODE        (0x9050 | REG_SZ_8)
#define GM_PCS_DATAPATH_INTERNAL    0x01    /* Internal serial link */
#define GM_PCS_DATAPATH_SERDES        0x02    /* 10-bit Serdes interface */
#define GM_PCS_DATAPATH_MII        0x04    /* Select mii/gmii mode */
#define GM_PCS_DATAPATH_GMII_OUT    0x08    /* serial mode only, copy data to gmii */

/* -- 0x9054    RW    PCS serdes control
 */
#define GM_PCS_SERDES_CTRL        (0x9054 | REG_SZ_8)

/* -- 0x9058    RW    PCS serdes output select
 */
#define GM_PCS_SERDES_SELECT        (0x9058 | REG_SZ_8)

/* -- 0x905c    RW    PCS serdes state
 */
#define GM_PCS_SERDES_STATE        (0x905c | REG_SZ_8)


    /*
     * PHY registers
     */

/*
 * Standard PHY registers (from de4x5.h)
 */
#define MII_CR       0x00          /* MII Management Control Register */
#define MII_SR       0x01          /* MII Management Status Register */
#define MII_ID0      0x02          /* PHY Identifier Register 0 */
#define MII_ID1      0x03          /* PHY Identifier Register 1 */
#define MII_ANA      0x04          /* Auto Negotiation Advertisement */
#define MII_ANLPA    0x05          /* Auto Negotiation Link Partner Ability */
#define MII_ANE      0x06          /* Auto Negotiation Expansion */
#define MII_ANP      0x07          /* Auto Negotiation Next Page TX */

/*
** MII Management Control Register
*/
#define MII_CR_RST     0x8000         /* RESET the PHY chip */
#define MII_CR_LPBK     0x4000         /* Loopback enable */
#define MII_CR_SPD      0x2000         /* 0: 10Mb/s; 1: 100Mb/s */
#define MII_CR_10       0x0000         /* Set 10Mb/s */
#define MII_CR_100      0x2000         /* Set 100Mb/s */
#define MII_CR_ASSE     0x1000         /* Auto Speed Select Enable */
#define MII_CR_PD       0x0800         /* Power Down */
#define MII_CR_ISOL     0x0400         /* Isolate Mode */
#define MII_CR_RAN      0x0200         /* Restart Auto Negotiation */
#define MII_CR_FDM      0x0100         /* Full Duplex Mode */
#define MII_CR_CTE      0x0080         /* Collision Test Enable */
#define MII_CR_SPEEDSEL2 0x0040        /* Speed selection 2 on BCM */
/*
** MII Management Status Register
*/
#define MII_SR_T4C  0x8000         /* 100BASE-T4 capable */
#define MII_SR_TXFD 0x4000         /* 100BASE-TX Full Duplex capable */
#define MII_SR_TXHD 0x2000         /* 100BASE-TX Half Duplex capable */
#define MII_SR_TFD  0x1000         /* 10BASE-T Full Duplex capable */
#define MII_SR_THD  0x0800         /* 10BASE-T Half Duplex capable */
#define MII_SR_ASSC 0x0020         /* Auto Speed Selection Complete*/
#define MII_SR_RFD  0x0010         /* Remote Fault Detected */
#define MII_SR_ANC  0x0008         /* Auto Negotiation capable */
#define MII_SR_LKS  0x0004         /* Link Status */
#define MII_SR_JABD 0x0002         /* Jabber Detect */
#define MII_SR_XC   0x0001         /* Extended Capabilities */

/*
** MII Management Auto Negotiation Advertisement Register
*/
#define MII_ANA_TAF  0x03e0        /* Technology Ability Field */
#define MII_ANA_T4AM 0x0200        /* T4 Technology Ability Mask */
#define MII_ANA_TXAM 0x0180        /* TX Technology Ability Mask */
#define MII_ANA_FDAM 0x0140        /* Full Duplex Technology Ability Mask */
#define MII_ANA_HDAM 0x02a0        /* Half Duplex Technology Ability Mask */
#define MII_ANA_100M 0x0380        /* 100Mb Technology Ability Mask */
#define MII_ANA_10M  0x0060        /* 10Mb Technology Ability Mask */
#define MII_ANA_CSMA 0x0001        /* CSMA-CD Capable */

/*
** MII Management Auto Negotiation Remote End Register
*/
#define MII_ANLPA_NP   0x8000      /* Next Page (Enable) */
#define MII_ANLPA_ACK  0x4000      /* Remote Acknowledge */
#define MII_ANLPA_RF   0x2000      /* Remote Fault */
#define MII_ANLPA_TAF  0x03e0      /* Technology Ability Field */
#define MII_ANLPA_T4AM 0x0200      /* T4 Technology Ability Mask */
#define MII_ANLPA_TXAM 0x0180      /* TX Technology Ability Mask */
#define MII_ANLPA_FDAM 0x0140      /* Full Duplex Technology Ability Mask */
#define MII_ANLPA_HDAM 0x02a0      /* Half Duplex Technology Ability Mask */
#define MII_ANLPA_100M 0x0380      /* 100Mb Technology Ability Mask */
#define MII_ANLPA_10M  0x0060      /* 10Mb Technology Ability Mask */
#define MII_ANLPA_CSMA 0x0001      /* CSMA-CD Capable */
#define MII_ANLPA_PAUS 0x0400 

/* Generic PHYs
 * 
 * These GENERIC values assumes that the PHY devices follow 802.3u and
 * allow parallel detection to set the link partner ability register.
 * Detection of 100Base-TX [H/F Duplex] and 100Base-T4 is supported.
 */

/*
 * Model-specific PHY registers
 *
 * Note: Only the BCM5201 is described here for now. I'll add the 5400 once
 *       I see a machine using it in real world.
 */

/* Supported PHYs (phy_type field ) */
#define PHY_B5400    0x5400
#define PHY_B5401    0x5401
#define PHY_B5411    0x5411
#define PHY_B5201    0x5201
#define PHY_B5221    0x5221
#define PHY_LXT971    0x0971
#define PHY_UNKNOWN    0

/* Identification (for multi-PHY) */
#define MII_BCM5201_OUI                         0x001018
#define MII_BCM5201_MODEL                       0x21
#define MII_BCM5201_REV                         0x01
#define MII_BCM5201_ID                          ((MII_BCM5201_OUI << 10) | (MII_BCM5201_MODEL << 4))
#define MII_BCM5201_MASK                        0xfffffff0
#define MII_BCM5221_OUI                         0x001018
#define MII_BCM5221_MODEL                       0x1e
#define MII_BCM5221_REV                         0x00
#define MII_BCM5221_ID                          ((MII_BCM5221_OUI << 10) | (MII_BCM5221_MODEL << 4))
#define MII_BCM5221_MASK                        0xfffffff0
#define MII_BCM5400_OUI                         0x000818
#define MII_BCM5400_MODEL                       0x04
#define MII_BCM5400_REV                         0x01
#define MII_BCM5400_ID                          ((MII_BCM5400_OUI << 10) | (MII_BCM5400_MODEL << 4))
#define MII_BCM5400_MASK                        0xfffffff0
#define MII_BCM5401_OUI                         0x000818
#define MII_BCM5401_MODEL                       0x05
#define MII_BCM5401_REV                         0x01
#define MII_BCM5401_ID                          ((MII_BCM5401_OUI << 10) | (MII_BCM5401_MODEL << 4))
#define MII_BCM5401_MASK                        0xfffffff0
#define MII_BCM5411_OUI                         0x000818
#define MII_BCM5411_MODEL                       0x07
#define MII_BCM5411_REV                         0x01
#define MII_BCM5411_ID                          ((MII_BCM5411_OUI << 10) | (MII_BCM5411_MODEL << 4))
#define MII_BCM5411_MASK                        0xfffffff0
#define MII_LXT971_OUI                          0x0004de
#define MII_LXT971_MODEL                        0x0e
#define MII_LXT971_REV                          0x00
#define MII_LXT971_ID                           ((MII_LXT971_OUI << 10) | (MII_LXT971_MODEL << 4))
#define MII_LXT971_MASK                         0xfffffff0

/* BCM5201 AUX STATUS register */
#define MII_BCM5201_AUXCTLSTATUS        0x18
#define MII_BCM5201_AUXCTLSTATUS_DUPLEX        0x0001
#define MII_BCM5201_AUXCTLSTATUS_SPEED        0x0002

/* MII BCM5201 MULTIPHY interrupt register */
#define MII_BCM5201_INTERRUPT            0x1A
#define MII_BCM5201_INTERRUPT_INTENABLE        0x4000

#define MII_BCM5201_AUXMODE2            0x1B
#define MII_BCM5201_AUXMODE2_LOWPOWER        0x0008

#define MII_BCM5201_MULTIPHY                    0x1E

/* MII BCM5201 MULTIPHY register bits */
#define MII_BCM5201_MULTIPHY_SERIALMODE         0x0002
#define MII_BCM5201_MULTIPHY_SUPERISOLATE       0x0008

/* MII BCM5400 1000-BASET Control register */
#define MII_BCM5400_GB_CONTROL            0x09
#define MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP    0x0200

/* MII BCM5400 AUXCONTROL register */
#define MII_BCM5400_AUXCONTROL                  0x18
#define MII_BCM5400_AUXCONTROL_PWR10BASET       0x0004

/* MII BCM5400 AUXSTATUS register */
#define MII_BCM5400_AUXSTATUS                   0x19
#define MII_BCM5400_AUXSTATUS_LINKMODE_MASK     0x0700
#define MII_BCM5400_AUXSTATUS_LINKMODE_SHIFT    8  

/* MII LXT971 STATUS2 register */
#define MII_LXT971_STATUS2            0x11
#define MII_LXT971_STATUS2_SPEED        0x4000
#define MII_LXT971_STATUS2_LINK            0x0400
#define MII_LXT971_STATUS2_FULLDUPLEX        0x0200
#define MII_LXT971_STATUS2_AUTONEG_COMPLETE    0x0080


    /*
     * DMA descriptors
     */


/* 
 * Descriptor counts and buffer sizes
 */
#define NTX            64        /* must be power of 2 */
#define NTX_CONF        GM_TX_RING_SZ_64
#define NRX            64        /* must be power of 2 */
#define NRX_CONF        GM_RX_RING_SZ_64
#define RX_COPY_THRESHOLD    256
#define GMAC_BUFFER_ALIGN    32        /* Align on a cache line */
#define RX_BUF_ALLOC_SIZE    (ETH_FRAME_LEN + GMAC_BUFFER_ALIGN + 2)
#define RX_OFFSET        2

/*
 * Definitions of Rx and Tx descriptors
 */

struct gmac_dma_desc {
    unsigned int    size;        /* data size and OWN bit */
    unsigned int    flags;        /* flags */
    unsigned int    lo_addr;    /* phys addr, low 32 bits */
    unsigned int    hi_addr;
};

/*
 * Rx bits
 */
 
/* Bits in size */
#define RX_SZ_OWN        0x80000000    /* 1 = owned by chip */
#define RX_SZ_MASK        0x7FFF0000
#define RX_SZ_SHIFT        16
#define RX_SZ_CKSUM_MASK    0x0000FFFF

/* Bits in flags */
#define RX_FL_CRC_ERROR        0x40000000
#define RX_FL_ALT_ADDR        0x20000000    /* Packet rcv. from alt MAC address */

/* 
 * Tx bits
 */

/* Bits in size */
#define TX_SZ_MASK        0x00007FFF
#define TX_SZ_CRC_MASK        0x00FF8000
#define TX_SZ_CRC_STUFF        0x1F000000
#define TX_SZ_CRC_ENABLE    0x20000000
#define TX_SZ_EOP        0x40000000
#define TX_SZ_SOP        0x80000000
/* Bits in flags */
#define TX_FL_INTERRUPT        0x00000001
#define TX_FL_NO_CRC        0x00000002

    /*
     * Other stuffs
     */
     
struct gmac {
    volatile unsigned int        *regs;    /* hardware registers, virtual addr */
    struct net_device        *dev;
    struct device_node        *of_node;
    unsigned long            tx_desc_page;    /* page for DMA descriptors */
    unsigned long            rx_desc_page;    /* page for DMA descriptors */
    volatile struct            gmac_dma_desc *rxring;
    struct sk_buff            *rx_buff[NRX];
    int                next_rx;
    volatile struct    gmac_dma_desc    *txring;
    struct sk_buff            *tx_buff[NTX];
    int                next_tx;
    int                tx_gone;
    int                phy_addr;
    unsigned int            phy_id;
    int                phy_type;
    int                phy_status;    /* Cached PHY status */
    int                full_duplex;    /* Current set to full duplex */
    int                gigabit;    /* Current set to 1000BT */
    struct net_device_stats        stats;
    u8                pci_bus;
    u8                pci_devfn;
    spinlock_t            lock;
    int                opened;
    int                sleeping;
    struct net_device        *next_gmac;
};


/* Register access macros. We hope the preprocessor will be smart enough
 * to optimize them into one single access instruction
 */
#define GM_OUT(reg, v)        (((reg) & REG_SZ_32) ? out_le32(gm->regs + \
                    (((reg) & REG_MASK)>>2), (v))  \
                : (((reg) & REG_SZ_16) ? out_le16((volatile u16 *) \
                    (gm->regs + (((reg) & REG_MASK)>>2)), (v))  \
                : out_8((volatile u8 *)(gm->regs + \
                    (((reg) & REG_MASK)>>2)), (v))))
#define GM_IN(reg)        (((reg) & REG_SZ_32) ? in_le32(gm->regs + \
                    (((reg) & REG_MASK)>>2))  \
                : (((reg) & REG_SZ_16) ? in_le16((volatile u16 *) \
                    (gm->regs + (((reg) & REG_MASK)>>2)))  \
                : in_8((volatile u8 *)(gm->regs + \
                    (((reg) & REG_MASK)>>2)))))
#define GM_BIS(r, v)        GM_OUT((r), GM_IN(r) | (v))
#define GM_BIC(r, v)        GM_OUT((r), GM_IN(r) & ~(v))

/* Wrapper to alloc_skb to test various alignements */
#define GMAC_ALIGNED_RX_SKB_ADDR(addr) \
        ((((unsigned long)(addr) + GMAC_BUFFER_ALIGN - 1) & \
        ~(GMAC_BUFFER_ALIGN - 1)) - (unsigned long)(addr))
        
static inline struct sk_buff *
gmac_alloc_skb(unsigned int length, int gfp_flags)
{
    struct sk_buff *skb;

    skb = alloc_skb(length + GMAC_BUFFER_ALIGN, gfp_flags);
    if(skb) {
        int offset = GMAC_ALIGNED_RX_SKB_ADDR(skb->data);

        if(offset)
            skb_reserve(skb, offset);
    }
    return skb;
}


:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0064 ]--