Annotation of qemu/roms/ipxe/src/drivers/net/pcnet32.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2010 Andrei Faur <[email protected]>
                      3:  *
                      4:  * This program is free software; you can redistribute it and/or
                      5:  * modify it under the terms of the GNU General Public License as
                      6:  * published by the Free Software Foundation; either version 2 of the
                      7:  * License, or any later version.
                      8:  *
                      9:  * This program is distributed in the hope that it will be useful, but
                     10:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     11:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     12:  * General Public License for more details.
                     13:  *
                     14:  * You should have received a copy of the GNU General Public License
                     15:  * along with this program; if not, write to the Free Software
                     16:  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     17:  *
                     18:  */
                     19: 
                     20: FILE_LICENCE ( GPL2_OR_LATER );
                     21: 
                     22: #ifndef _PCNET32_H_
                     23: #define _PCNET32_H_
                     24: 
                     25: #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
                     26: 
                     27: /*
                     28:  * Set the number of Tx and Rx buffers, using Log_2(# buffers).
                     29:  * Set default values to 16 Tx buffers and 32 Rx buffers.
                     30:  */
                     31: #define PCNET32_LOG_TX_BUFFERS         4
                     32: #define PCNET32_LOG_RX_BUFFERS         5
                     33: 
                     34: /* Maximum number of descriptor rings is 512 */
                     35: #define PCNET32_LOG_MAX_TX_BUFFERS     9
                     36: #define PCNET32_LOG_MAX_RX_BUFFERS     9
                     37: 
                     38: #define TX_RING_SIZE           ( 1 << ( PCNET32_LOG_TX_BUFFERS ) )
                     39: #define TX_MAX_RING_SIZE       ( 1 << ( PCNET32_LOG_MAX_TX_BUFFERS ) )
                     40: 
                     41: #define RX_RING_SIZE           ( 1 << ( PCNET32_LOG_RX_BUFFERS ) )
                     42: #define RX_MAX_RING_SIZE       ( 1 << ( PCNET32_LOG_MAX_RX_BUFFERS ) )
                     43: 
                     44: #define RX_RING_BYTES          ( RX_RING_SIZE * sizeof(struct pcnet32_rx_desc ) )
                     45: #define TX_RING_BYTES          ( TX_RING_SIZE * sizeof(struct pcnet32_tx_desc ) )
                     46: 
                     47: #define PKT_BUF_SIZE   1536
                     48: 
                     49: #define RX_RING_ALIGN          16
                     50: #define TX_RING_ALIGN          16
                     51: 
                     52: #define INIT_BLOCK_ALIGN       32
                     53: 
                     54: #define PCNET32_WIO_RDP                0x10
                     55: #define PCNET32_WIO_RAP                0x12
                     56: #define PCNET32_WIO_RESET      0x14
                     57: #define PCNET32_WIO_BDP                0x16
                     58: 
                     59: #define PCNET32_DWIO_RDP       0x10
                     60: #define PCNET32_DWIO_RAP       0x14
                     61: #define PCNET32_DWIO_RESET     0x18
                     62: #define PCNET32_DWIO_BDP       0x1C
                     63: 
                     64: #define PCNET32_PORT_AUI       0x00
                     65: #define PCNET32_PORT_10BT      0x01
                     66: #define PCNET32_PORT_GPSI      0x02
                     67: #define PCNET32_PORT_MII       0x03
                     68: 
                     69: #define PCNET32_PORT_PORTSEL   0x03
                     70: #define PCNET32_PORT_ASEL      0x04
                     71: #define PCNET32_PORT_100       0x40
                     72: #define PCNET32_PORT_FD                0x80
                     73: 
                     74: #define PCNET32_SWSTYLE_LANCE  0x00
                     75: #define PCNET32_SWSTYLE_ILACC  0x01
                     76: #define PCNET32_SWSTYLE_PCNET32        0x02
                     77: 
                     78: #define PCNET32_MAX_PHYS       32
                     79: 
                     80: #ifndef PCI_VENDOR_ID_AT
                     81: #define PCI_VENDOR_ID_AT       0x1259
                     82: #endif
                     83: 
                     84: #ifndef PCI_SUBDEVICE_ID_AT_2700FX
                     85: #define PCI_SUBDEVICE_ID_AT_2700FX     0x2701
                     86: #endif
                     87: 
                     88: #ifndef PCI_SUBDEVICE_ID_AT_2701FX
                     89: #define PCI_SUBDEVICE_ID_AT_2701FX     0x2703
                     90: #endif
                     91: 
                     92: struct pcnet32_rx_desc {
                     93:        u32 base;
                     94:        s16 buf_length;
                     95:        s16 status;
                     96:        u32 msg_length;
                     97:        u32 reserved;
                     98: };
                     99: 
                    100: struct pcnet32_tx_desc {
                    101:        u32 base;
                    102:        s16 length;
                    103:        s16 status;
                    104:        u32 misc;
                    105:        u32 reserved;
                    106: };
                    107: 
                    108: struct pcnet32_init_block {
                    109:        u16 mode;
                    110:        u16 tlen_rlen;
                    111:        u8 phys_addr[6];
                    112:        u16 reserved;
                    113:        u32 filter[2];
                    114:        u32 rx_ring;
                    115:        u32 tx_ring;
                    116: };
                    117: 
                    118: struct pcnet32_access {
                    119:        u16 ( *read_csr ) ( unsigned long, int );
                    120:        void ( *write_csr ) ( unsigned long, int, u16 );
                    121:        u16 ( *read_bcr ) ( unsigned long, int );
                    122:        void ( *write_bcr ) ( unsigned long, int, u16 );
                    123:        u16 ( *read_rap ) ( unsigned long );
                    124:        void ( *write_rap ) ( unsigned long, u16 );
                    125:        void ( *reset ) ( unsigned long );
                    126: };
                    127: 
                    128: struct pcnet32_private {
                    129:        struct pcnet32_init_block init_block __attribute__((aligned(32)));
                    130:        struct pci_device *pci_dev;
                    131:        struct net_device *netdev;
                    132: 
                    133:        struct io_buffer *rx_iobuf[RX_RING_SIZE];
                    134:        struct io_buffer *tx_iobuf[TX_RING_SIZE];
                    135: 
                    136:        struct pcnet32_rx_desc *rx_base;
                    137:        struct pcnet32_tx_desc *tx_base;
                    138:        uint32_t rx_curr;
                    139:        uint32_t tx_curr;
                    140:        uint32_t tx_tail;
                    141:        uint32_t tx_fill_ctr;
                    142: 
                    143:        struct pcnet32_access *a;
                    144:        int options;
                    145:        unsigned int    mii:1,
                    146:                        full_duplex:1;
                    147: 
                    148:        unsigned short chip_version;
                    149: 
                    150:        char irq_enabled;
                    151: };
                    152: 
                    153: enum pcnet32_desc_status_bit {
                    154:        DescOwn         = (1 << 15),
                    155:        StartOfPacket   = (1 << 9),
                    156:        EndOfPacket     = (1 << 8)
                    157: };
                    158: 
                    159: enum pcnet32_register_content {
                    160:        /* CSR0 bits - Controller status register */
                    161:        RxInt           = (1 << 10),
                    162:        TxInt           = (1 << 9),
                    163:        InitDone        = (1 << 8),
                    164:        IntFlag         = (1 << 7),
                    165:        IntEnable       = (1 << 6),
                    166:        TxDemand        = (1 << 3),
                    167:        Stop            = (1 << 2),
                    168:        Strt            = (1 << 1),
                    169:        Init            = (1 << 0),
                    170: 
                    171:        /* CSR3 bits - Controller status register */
                    172:        BablMask        = (1 << 14),
                    173:        MissFrameMask   = (1 << 12),
                    174:        MemErrMask      = (1 << 11),
                    175:        RxIntMask       = (1 << 10),
                    176:        TxIntMask       = (1 << 9),
                    177:        InitDoneMask    = (1 << 8)
                    178: 
                    179: };
                    180: 
                    181: #endif /* _PCNET32_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.