⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 if_8139.h

📁 eCos操作系统源码
💻 H
字号:
#ifndef CYGONCE_DEVS_ETH_REALTEK_8139_INFO_H#define CYGONCE_DEVS_ETH_REALTEK_8139_INFO_H/*==========================================================================////        8139_info.h//////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):     Eric Doenges// Contributors:  Chris Nimmers, Gary Thomas, Andy Dyer// Date:          2003-07-09// Description:////####DESCRIPTIONEND####*/#include <pkgconf/devs_eth_rltk_8139.h>/* * Used to define all vendor/device ID combinations we know about to find * the chip. */typedef struct {  cyg_uint16 vendor_id;  cyg_uint16 device_id;  void *data;} pci_identifier_t;#define PCI_ANY_ID (0xFFFF)/* * Valid receive buffer sizes are 8k+16, 16k+16, 32k+16, or 64k+16. * For the last case, WRAP mode should not be enabled. Since we do not * currently want to support unwrapped mode, do not use 64k+16 at this * point. The buffer length is set via the configuration mechanism. */#if (CYGNUM_DEVS_ETH_RLTK_8139_RX_BUF_LEN_IDX < 0) |\    (CYGNUM_DEVS_ETH_RLTK_8139_RX_BUF_LEN_IDX > 2)#error "The receive ring size index must be in the range of 0 to 2"#endif#define RX_BUF_LEN      (8192 << (CYGNUM_DEVS_ETH_RLTK_8139_RX_BUF_LEN_IDX))#define RX_BUF_PAD      16#define RX_BUF_WRAP_PAD 2048 /* spare padding to handle lack of packet wrap */#define RX_BUF_TOT_LEN  (RX_BUF_LEN + RX_BUF_PAD + RX_BUF_WRAP_PAD)/* Number of Tx descriptor registers. */#define NUM_TX_DESC     4/* * Max supported ethernet frame size. The 8139 cannot transmit packets more * than 1792 bytes long. Also, since transmit buffers must be 32-bit * aligned, MAX_ETH_FRAME_SIZE should always be a multiple of 4. */#define MIN_ETH_FRAME_SIZE      60      /* without FCS */#define MAX_ETH_FRAME_SIZE      1536    /* is this with/without FCS ? *//* Size of the Tx buffers. */#define TX_BUF_SIZE     MAX_ETH_FRAME_SIZE#define TX_BUF_TOT_LEN  (TX_BUF_SIZE * NUM_TX_DESC)/* Rx buffer level before first PCI transfer ('5' is 512 bytes) */#define RX_FIFO_THRESH	5/* * Maximum PCI rx and tx bursts. This value ranges from '0' (16 bytes) * to '7' (unlimited), with MXDMA = 2^(4 + 'value'). */#define RX_DMA_BURST		6#define TX_DMA_BURST		6/* * Device driver private data */typedef struct {  /* Device number. Used for actually finding the device */  cyg_uint32 device_num;  /* Receive buffer ring area */  cyg_uint8 *rx_ring;  /* Transmit buffer area */  cyg_uint8 *tx_buffer;  /* PCI device ID */  cyg_pci_device_id pci_device_id;  /* Address for memory mapped I/O */  cyg_uint32 base_address;  /* Our current MAC address */  unsigned char mac[6];  /* tx FIFO threshold. */  cyg_uint8 tx_threshold;  /* This is the first free descriptor. */  int tx_free_desc;  /* This is the number of currently free descriptors */  int tx_num_free_desc;  /* Keys to match _send calls with the tx_done callback */  unsigned long tx_desc_key[NUM_TX_DESC];  /*   * This is used to (temporarily) store the address of the current   * received packet. We save it here to avoid having to calculate it   * several times.   */  cyg_uint8 *rx_current;  cyg_uint32 rx_size;  /* Interrupt handling stuff */  cyg_vector_t  vector;  cyg_handle_t  interrupt_handle;  cyg_interrupt interrupt;} Rltk8139_t;/* * Register offsets and bit definitions. These use the names in the 8139 * data sheet, not those found e.g. in the Linux driver for the 8139. */enum {  IDR0    =  0x0, /* mac address, seemingly in big-endian order */  IDR1    =  0x1,  IDR2    =  0x2,  IDR3    =  0x3,  IDR4    =  0x4,  IDR5    =  0x5,  MAR0    =  0x8, /* multicast registers (0-7) */  MAR1    =  0x9,  MAR2    =  0xA,  MAR3    =  0xB,  MAR4    =  0xC,  MAR5    =  0xD,  MAR6    =  0xE,  MAR7    =  0xF,  TSD0    = 0x10, /* L, transmit status of descriptor 0 */  TSD1    = 0x14,  TSD2    = 0x18,  TSD3    = 0x1C,  TSAD0   = 0x20, /* L, transmit start address of descriptor 0 */  TSAD1   = 0x24,  TSAD2   = 0x28,  TSAD3   = 0x2C,  RBSTART = 0x30, /* L, receive buffer start address */  ERBCR   = 0x34, /* W, early receive byte count register */  ERSR    = 0x36, /* B, early receive status register */  CR      = 0x37, /* B, command register */  CAPR    = 0x38, /* W, current address of packet read */  CBR     = 0x3A, /* W, current buffer address */  IMR     = 0x3C, /* W, interrupt mask register */  ISR     = 0x3E, /* W, interrupt status register */  TCR     = 0x40, /* L, transmit configuration register */  RCR     = 0x44, /* L, receive configuration register */  TCTR    = 0x48, /* L, timer count register */  MPC     = 0x4C, /* L, missed packet counter */  CR9346  = 0x50, /* B, 93C46 (serial eeprom) command register */  CONFIG0 = 0x51, /* B, configuration register 0 */  CONFIG1 = 0x52, /* B, configuration register 1 */  TIMERINT= 0x54, /* L, timer interrupt register */  MSR     = 0x58, /* B, media status register */  CONFIG3 = 0x59, /* B, configuration register 0 */  CONFIG4 = 0x5A, /* B, configuration register 1 */  MULINT  = 0x5C, /* W, multiple interrupt select */  RERID   = 0x5E, /* B, PCI revision ID; should be 0x10 */  TSAD    = 0x60, /* W, transmit status of all descriptors */  BMCR    = 0x62, /* W, basic mode control register */  BMSR    = 0x64, /* W, basic mode status register */  ANAR    = 0x66, /* W, auto-negotiation advertisement register */  ANLPAR  = 0x68, /* W, auto-negotiation link partner register */  ANER    = 0x6A, /* W, auto-negotiation expansion register */  DIS     = 0x6C, /* W, disconnect counter */  FCSC    = 0x6E, /* W, false carrier sense counter */  NWAYTR  = 0x70, /* W, N-way test register */  REC     = 0x72, /* W, RX_ER counter */  CSCR    = 0x74, /* W, CS configuration register */  PHY1_PARM = 0x78, /* L, PHY parameter 1 */  TW_PARM = 0x7C, /* L, twister parameter */  PHY2_PARM = 0x80, /* B, PHY parameter 2 */  CRC0    = 0x84, /* B, power management CRC register for wakeup frame 0 */  CRC1    = 0x85, /* B, power management CRC register for wakeup frame 1 */  CRC2    = 0x86, /* B, power management CRC register for wakeup frame 2 */  CRC3    = 0x87, /* B, power management CRC register for wakeup frame 3 */  CRC4    = 0x88, /* B, power management CRC register for wakeup frame 4 */  CRC5    = 0x89, /* B, power management CRC register for wakeup frame 5 */  CRC6    = 0x8A, /* B, power management CRC register for wakeup frame 6 */  CRC7    = 0x8B, /* B, power management CRC register for wakeup frame 7 */  WAKEUP0 = 0x8C, /* Q, power management wakeup frame 0 (64 bits) */  WAKEUP1 = 0x94, /* Q, power management wakeup frame 1 (64 bits) */  WAKEUP2 = 0x9C, /* Q, power management wakeup frame 2 (64 bits) */  WAKEUP3 = 0xA4, /* Q, power management wakeup frame 3 (64 bits) */  WAKEUP4 = 0xAC, /* Q, power management wakeup frame 4 (64 bits) */  WAKEUP5 = 0xB4, /* Q, power management wakeup frame 5 (64 bits) */  WAKEUP6 = 0xBC, /* Q, power management wakeup frame 6 (64 bits) */  WAKEUP7 = 0xC4, /* Q, power management wakeup frame 7 (64 bits) */  LSBCRC0 = 0xCC, /* B, LSB of mask byte of wakeup frame 0 offset 12 to 75 */  LSBCRC1 = 0xCD, /* B, LSB of mask byte of wakeup frame 1 offset 12 to 75 */  LSBCRC2 = 0xCE, /* B, LSB of mask byte of wakeup frame 2 offset 12 to 75 */  LSBCRC3 = 0xCF, /* B, LSB of mask byte of wakeup frame 3 offset 12 to 75 */  LSBCRC4 = 0xD0, /* B, LSB of mask byte of wakeup frame 4 offset 12 to 75 */  LSBCRC5 = 0xD1, /* B, LSB of mask byte of wakeup frame 5 offset 12 to 75 */  LSBCRC6 = 0xD2, /* B, LSB of mask byte of wakeup frame 6 offset 12 to 75 */  LSBCRC7 = 0xD3, /* B, LSB of mask byte of wakeup frame 7 offset 12 to 75 */  FLASH   = 0xD4, /* L, flash memory read/write register */  CONFIG5 = 0xD8, /* B, configuration register #5 */  FER     = 0xF0, /* L, function event register (CardBus only) */  FEMR    = 0xF4, /* L, function event mask register (CardBus only) */  FPSR    = 0xF8, /* L, function present state register (CardBus only) */  FFER    = 0xFC  /* L, function force event register (CardBus only) */};/* Receive status register in Rx packet header */enum {  MAR  = (1<<15), /* multicast address received */  PAM  = (1<<14), /* physical address matched */  BAR  = (1<<13), /* broadcast address received */  ISE  = (1<<5),  /* invalid symbol error */  RUNT = (1<<4),  /* runt packet (<64 bytes) received */  LONG = (1<<3),  /* long packet (>4K bytes) received */  CRC  = (1<<2),  /* CRC error */  FAE  = (1<<1),  /* frame alignment error */  ROK  = (1<<0)   /* receive OK */};/* Transmit status register */enum {  CRS    = (1<<31), /* carrier sense lost */  TABT   = (1<<30), /* transmit abort */  OWC    = (1<<29), /* out of window collision */  CDH    = (1<<28), /* CD heart beat */  NCC_SHIFT = 24,  NCC    = (0xF<<24), /* number of collision count */  ERTXTH_SHIFT = 16,  ERTXTH = (0x1F<<16), /* early tx threshold, in multiples of 32 bytes */  TOK    = (1<<15), /* transmission OK */  TUN    = (1<<14), /* transmit FIFO underrun */  OWN    = (1<<13), /* own */  SIZE   = 0xFFF    /* descriptor size */};/* Command register */enum {  RST  = (1<<4),  /* reset */  RE   = (1<<3),  /* receiver enable */  TE   = (1<<2),  /* transmitter enable */  BUFE = (1<<0)   /* buffer empty */};/* Transmit configuration register */enum {  CLRABT = (1<<0) /* clear abort */};/* Receive configuration register */enum {  ERTH_SHIFT = 24,      /* Early Rx threshold bits (4) */  MULERINT   = (1<<17), /* multiple early interrupt */  RER8       = (1<<16), /* ? */  RXFTH_SHIFT= 13,      /* Rx FIFO threshold */  RBLEN_SHIFT= 11,      /* Rx buffer length */  MXDMA_SHIFT= 8,       /* max DMA burst size per Rx DMA burst */  WRAP       = (1<<7),  /* WRAP mode */  SEL9356    = (1<<6),  /* EEPROM select */  AER        = (1<<5),  /* accept error packets */  AR         = (1<<4),  /* accept runt packets */  AB         = (1<<3),  /* accept broadcast packets */  AM         = (1<<2),  /* accept multicast packets */  APM        = (1<<1),  /* accept physical match packets (our MAC) */  AAP        = (1<<0),  /* accept physical address packets (any MAC) */};/* TSAD (transmit status of all descriptors */enum {  TOK3  = (1<<15),  TOK2  = (1<<14),  TOK1  = (1<<13),  TOK0  = (1<<12),  TUN3  = (1<<11),  TUN2  = (1<<10),  TUN1  = (1<<9),  TUN0  = (1<<8),  TABT3 = (1<<7),  TABT2 = (1<<6),  TABT1 = (1<<5),  TABT0 = (1<<4),  OWN3  = (1<<3),  OWN2  = (1<<2),  OWN1  = (1<<1),  OWN0  = (1<<0)};/* Interrupt mask/status register */enum {  IR_SERR    = (1<<15), /* system error interrupt */  IR_TIMEOUT = (1<<14), /* time out interrupt */  IR_LENCHG  = (1<<13), /* cable length change interrupt */  IR_FOVW    = (1<<6),  /* Rx FIFO overflow */  IR_FUN     = (1<<5),  /* Packet underrun or link change interrupt */  IR_RXOVW   = (1<<4),  /* Rx buffer overflow */  IR_TER     = (1<<3),  /* transmit error interrupt */  IR_TOK     = (1<<2),  /* transmit OK interrupt */  IR_RER     = (1<<1),  /* receive error interrupt */  IR_ROK     = (1<<0)   /* receive OK interrupt */};/* Packet header bits */enum {  HDR_MAR  = (1<<15), /* multicast address received */  HDR_PAM  = (1<<14), /* physical address matched */  HDR_BAR  = (1<<13), /* broadcast address matched */  HDR_ISE  = (1<<5),  /* invalid symbol error */  HDR_RUNT = (1<<4),  /* runt packet received (packet < 64 bytes) */  HDR_LONG = (1<<3),  /* long packet (>4k) */  HDR_CRC  = (1<<2),  /* CRC error */  HDR_FAE  = (1<<1),  /* frame alignment error */  HDR_ROK  = (1<<0)   /* receive OK */};/* * Define some options to use */#define TXCFG ((0x3 << 24) | (TX_DMA_BURST << MXDMA_SHIFT))#define RXCFG ((RX_FIFO_THRESH << RXFTH_SHIFT) |\               (RX_BUF_LEN_IDX << RBLEN_SHIFT) |\               (RX_DMA_BURST << MXDMA_SHIFT) |\               WRAP | AB | APM)#endif /* ifndef CYGONCE_DEVS_ETH_REALTEK_8139_INFO_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -