Files
m241Neelima/vxworks-6.9/target/h/drv/end/iOlicomEnd.h
T
2026-07-30 11:19:44 +05:30

617 lines
21 KiB
C

/* iOlicomEnd.h - END-style Intel Olicom PCMCIA Ethernet interface header */
/* Copyright 1997-2001, 2010 Wind River Systems, Inc. */
/*
modification history
--------------------
01h,29apr10,pad Moved extern C statement after include statements.
01g,20sep01,dat Removing ANSI errors for diab compiler
01f,03aug00,jpd corrected length of drive name string (SPR #32276).
01e,11jun00,ham removed reference to etherLib.
01d,02sep98,jpd renamed struct type name to prevent conflict. Improved
data copying macros efficiency. Add big-endian support.
01c,02apr98,jpd made conditionally-compilable version for Brutus and PID.
01b,16feb98.jpd modified to work on Brutus, but not yet on both Brutus and PID.
01a,16dec97,rlp copied from if_oli.h
*/
#ifndef __INCiOlicomEndh
#define __INCiOlicomEndh
#include "end.h"
#include "netBufLib.h"
#include "netinet/if_ether.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Define Constants */
#define PC_SOCKET_A 0x00
#define PC_SOCKET_B 0x40
#define ATTRIBUTE_MEMORY_SLOT 0x01000
#ifndef TARGET_HAS_NO_VADEM
#define PC_INDEX ((volatile char *)(ctrlBase + 0x00))
#define PC_DATA_READ ((volatile int *) (ctrlBase + 0x01))
#define PC_DATA_WRITE ((volatile char *)(ctrlBase + 0x01))
#define MAPPED_MEMORY_BASE 0x10000 /* 64K */
#define ATTRIB_MEMORY_A MAPPED_MEMORY_BASE
#define ATTRIB_MEMORY_B ATTRIB_MEMORY_A + ATTRIBUTE_MEMORY_SLOT
#endif /* TARGET_HAS_NO_VADEM */
/*
* Define to have complete control over the PCMCIA system.
* These definitions are Access macro, I/O Registers, Control Registers,
* PCMCIA Structures and Constants.
*/
/* Macro definition for PCMCIA Access */
#ifndef I82595_REGS_CONTIGUOUS
#define PCMCIA_CALC_ADDR(x) (((((UINT)(x)) & ~0x01) << 1) | \
(((UINT)(x)) & 0x01))
#define PCMCIA_READ_RAW(x, y) (*(volatile UINT *) (PCMCIA_CALC_ADDR(x) | (y)))
#define PCMCIA_WRITE_RAW(x, y, z) (*(volatile UINT8 *) \
(PCMCIA_CALC_ADDR(x) | (y)) = (z))
#define PCMCIA_IO_WRITE(x, y) ((*(volatile UINT8 *)(x)) = (y))
#define PCMCIA_IO_READ(x) (((((UINT)(x)) & 0x01) == 0) ? \
(*(volatile UINT *)(x)) & OCT_MSK: \
(*(volatile UINT *)(x)) >> 24)
#define PCMCIA_ATTR_READ(x) (((((UINT)(x)) & ODD_MSK) == 0) ? \
PCMCIA_READ_RAW(x, (int)pDrvCtrl->pcmcia.memBaseA) & OCT_MSK :\
PCMCIA_READ_RAW(x, (int)pDrvCtrl->pcmcia.memBaseA) >> 24)
#define PCMCIA_ATTR_WRITE(x, y) PCMCIA_WRITE_RAW((x), (int) \
pDrvCtrl->pcmcia.memBaseA, (y))
/* On PID, two apparently consecutive registers cannot be read at once */
#define READ_R14_R15(val) \
{ \
val = PCMCIA_IO_READ (pDrvCtrl->pcmcia.oliAddr + I595_R14); \
val |= (PCMCIA_IO_READ (pDrvCtrl->pcmcia.oliAddr + I595_R15) << 8); \
}
#if (_BYTE_ORDER == _BIG_ENDIAN)
#define READ_PTR_R14_R15(ptr, pR14) \
{ \
*(ptr)++ = (0xFF & *((volatile UINT32 *)(pR14))); \
*(ptr)++ = (*((UINT32 *)((pR14) + 1)) >> 24); \
}
#else /* (_BYTE_ORDER == _BIG_ENDIAN) */
#define READ_PTR_R14_R15(ptr, pR14) \
{ \
*(ptr)++ = *((volatile UINT8 *)(pR14)); \
*(ptr)++ = (*((UINT32 *)((pR14) + 1)) >> 24); \
}
#endif /* _BYTE_ORDER == _BIG_ENDIAN */
#define WRITE_R14_R15(val) \
{ \
PCMCIA_IO_WRITE (pDrvCtrl->pcmcia.oliAddr + I595_R14, (val)); \
PCMCIA_IO_WRITE (pDrvCtrl->pcmcia.oliAddr + I595_R15, ((val) >> 8)); \
}
#define WRITE_PTR_R14_R15(ptr, pR14) \
{ \
*(pR14) = *(ptr)++; \
*((pR14) + 1) = *(ptr)++; \
}
#else /* I82595_REGS_CONTIGUOUS */
#define PCMCIA_CALC_ADDR(x) (x)
#define PCMCIA_IO_WRITE(x, y) ((*(volatile UINT8 *) (x)) = (y))
#define PCMCIA_IO_WRITE16(x, y) ((*(volatile UINT16 *)(x)) = (y))
#define PCMCIA_IO_READ(x) (* (volatile UINT8 *) (x))
#define PCMCIA_IO_READ16(x) (* (volatile UINT16 *)(x))
#define PCMCIA_ATTR_READ(x) (* (volatile UINT8 *) (x))
#define PCMCIA_ATTR_WRITE(x, y) ((*(volatile UINT8 *) (x)) = (y))
/* On Brutus, R14 and R15 can be read with one 16 bit operation */
#define READ_R14_R15(val) \
{ \
val = (PCMCIA_IO_READ16 (pDrvCtrl->pcmcia.oliAddr + I595_R14)); \
}
#define READ_PTR_R14_R15(ptr, pR14) \
{ \
*((UINT16 *)(ptr))++ = *((volatile UINT16 *)(pR14));\
}
#define WRITE_R14_R15(val) \
PCMCIA_IO_WRITE16 (pDrvCtrl->pcmcia.oliAddr + I595_R14, (val));
#define WRITE_PTR_R14_R15(ptr, pr14) \
*(volatile UINT16 *)(pR14) = *((UINT16 *)(ptr))++;
#endif /* !I82595_REGS_CONTIGUOUS */
/* General Setup Registers */
#define PCIDREV 0x00 /* Identification & Revision */
#define PCIFSTATUS 0x01 /* Interface Status */
#define PCPWRRSTCTL 0x02 /* Power and RESETDRV Control */
#define PCCSTATCHNG 0x04 /* Card Status Change */
#define PCADDWINEN 0x06 /* Address Window Enable */
#define PCCDGCR 0x16 /* Card Detect and General Control Register */
#define PCGLBCTL 0x1E /* Global Control Register */
#define PCINTGCTL 0x03 /* Interrupt & General Control */
#define PCSTATCHNGINT 0x05 /* Card Status Change Interrupt Configuration */
/* Definitions for fields in general setup registers */
/* Interface Status Register */
#define GSR_CD 0x0C /* Card detect - Complement of CD[2:1] pins */
#define GSR_RDY 0x20 /* Card is ready */
/* Power and RESETDRV control register */
#define GSR_CPE 0x10 /* PC card power enable */
#define GSR_PSE 0x20 /* Auto power switch enable */
#define GSR_OE 0x80 /* Output enable */
/* Interrupt & general control register */
#define GSR_DRT 0x40 /* Deactivates reset signal to the PC card */
/* Card Status Change Register */
#define GSR_CDC 0x08 /* Card detect change */
/* Card status change interrupt configuration register */
#define GSR_IRQ4 0x40 /* IRQ4 enable */
#define GSR_IRQ3 0x30 /* IRQ3 enable */
#define GSR_CDE 0x08 /* Card detect enable */
/* Address window enable register */
#define GSR_WD0 0x01 /* Enable window 0 */
/* I/O Registers */
#define PCIOCTL 0x7 /* I/O Control */
#define PCIOA0STARTL 0x08 /* I/O Addr 0 Start Low */
#define PCIOA0STARTH 0x09 /* I/O Addr 0 Start High */
#define PCIOA0STOPL 0x0A /* I/O Addr 0 Stop Low */
#define PCIOA0STOPH 0x0B /* I/O Addr 0 Stop High */
#define PCIOA1STARTL 0x0C /* I/O Addr 1 Start Low */
#define PCIOA1STARTH 0x0D /* I/O Addr 1 Start High */
#define PCIOA1STOPL 0x0E /* I/O Addr 1 Stop Low */
#define PCIOA1STOPH 0x0F /* I/O Addr 1 Stop High */
#define PCSYSA0MSTARTL 0x10 /* System Memory Addr 0 Mapping Start Low */
#define PCSYSA0MSTARTH 0x11 /* System Memory Addr 0 Mapping Start High */
#define PCSYSA0MSTOPL 0x12 /* System Memory Addr 0 Mapping Stop Low */
#define PCSYSA0MSTOPH 0x13 /* System Memory Addr 0 Mapping Stop High */
#define PCCMEMA0OFFL 0x14 /* Card Memory Offset Addr 0 Low */
#define PCCMEMA0OFFH 0x15 /* Card Memory Offset Addr 0 High */
#define PCSYSA1MSTARTL 0x18 /* System Memory Addr 1 Mapping Start Low */
#define PCSYSA1MSTARTH 0x19 /* System Memory Addr 1 Mapping Start High */
#define PCSYSA1MSTOPL 0x1A /* System Memory Addr 1 Mapping Stop Low */
#define PCSYSA1MSTOPH 0x1B /* System Memory Addr 1 Mapping Stop High */
#define PCCMEMA1OFFL 0x1C /* Card Memory Offset Addr 1 Low */
#define PCCMEMA1OFFH 0x1D /* Card Memory Offset Addr 1 High */
#define PCSYSA2MSTARTL 0x20 /* System Memory Addr 2 Mapping Start Low */
#define PCSYSA2MSTARTH 0x21 /* System Memory Addr 2 Mapping Start High */
#define PCSYSA2MSTOPL 0x22 /* System Memory Addr 2 Mapping Stop Low */
#define PCSYSA2MSTOPH 0x23 /* System Memory Addr 2 Mapping Stop High */
#define PCCMEMA2OFFL 0x24 /* Card Memory Offset Addr 2 Low */
#define PCCMEMA2OFFH 0x25 /* Card Memory Offset Addr 2 High */
#define PCSYSA3MSTARTL 0x28 /* System Memory Addr 3 Mapping Start Low */
#define PCSYSA3MSTARTH 0x29 /* System Memory Addr 3 Mapping Start High */
#define PCSYSA3MSTOPL 0x2A /* System Memory Addr 3 Mapping Stop Low */
#define PCSYSA3MSTOPH 0x2B /* System Memory Addr 3 Mapping Stop High */
#define PCCMEMA3OFFL 0x2C /* Card Memory Offset Addr 3 Low */
#define PCCMEMA3OFFH 0x2D /* Card Memory Offset Addr 3 High */
#define PCSYSA4MSTARTL 0x30 /* System Memory Addr 4 Mapping Start Low */
#define PCSYSA4MSTARTH 0x31 /* System Memory Addr 4 Mapping Start High */
#define PCSYSA4MSTOPL 0x32 /* System Memory Addr 4 Mapping Stop Low */
#define PCSYSA4MSTOPH 0x33 /* System Memory Addr 4 Mapping Stop High */
#define PCCMEMA4OFFL 0x34 /* Card Memory Offset Addr 4 Low */
#define PCCMEMA4OFFH 0x35 /* Card Memory Offset Addr 4 High */
/* Unique Registers */
#define PCCONTROL 0x38 /* Control */
#define PCACTTIM 0x39 /* Activity Timer */
#define PCMISC 0x3A /* Miscellaneous */
#define PCGPIOCON 0x3B /* GPIO Configuration */
#define PCPROGCS 0x3D /* Programmable Chip Select */
#define PCPROGCSCON 0x3E /* Programmable Chip Select
* Configuration Register */
#define PCATA 0x3F /* ATA */
/* Define PCMCIA structures */
typedef enum
{
COMMON, /* Common memory */
ATTRIBUTE /* Attribute memory */
}
MEMTYPE;
typedef struct PCMCIASocket
{
UINT pcs_attrbase;
UINT pcs_attrrange;
UINT pcs_iobase;
UINT pcs_iorange;
} PCMCIASOCKET;
/* PCMCIA Control Structure */
typedef struct pcmcia_ctrl
{
char * ioBaseA; /* I/O space base address for Card A */
char * attrBaseA; /* Attribute space base address Card A*/
char * memBaseA; /* Memory space base address Card A */
char * ioBaseB; /* I/O space base address for Card B */
char * attrBaseB; /* Attribute space base address Card B*/
char * memBaseB; /* Memory space base address Card B */
char * ctrlBase; /* Base of Vadem PCMCIA controller */
char * oliAddr; /* address of board */
char * oliAttribMem; /* Address of attribute memory */
int intLevelA; /* Interrupt level for Card A */
int intVectA; /* Interrupt vector for Card A */
int intLevelB; /* Interrupt level for Card B */
int intVectB; /* Interrupt vector for Card B */
BOOL cardPresent; /* TRUE if a card is in the slot */
UINT socket; /* Socket holding card, A or B */
PCMCIASOCKET theSocket; /* PCMCIA Socket descriptor */
} OLI_PCMCIA_CTRL;
/* Trasmit Buffer Descriptor */
typedef struct tx_bd
{
UINT16 statusMode; /* status and control */
UINT16 dataLength; /* length of data buffer in bytes */
char * dataPointer; /* points to memory data buffer */
} TX_BD;
/* Receive Buffer Descriptor */
typedef struct rx_bd
{
UINT16 statusMode; /* status and control */
UINT16 dataLength; /* length of data buffer in bytes */
char * dataPointer; /* points to memory data buffer */
} RX_BD;
/* Olicom Card Configuration registers */
#define CARDCONFREG0 0x3F8
#define CARDCONFREG1 0x3FA
/* Definitions for fields in Olicom card configuration registers */
/* Register 1 */
#define CREG1_INT_IO 0x02 /* I/O Interrupt */
/* There are four tuples that we need to read from the card */
#define CARD_FUNCID 0x21 /* Should identify the card as
an Network Adaptor */
#define CARD_FUNCE 0x22 /* Function extension tuple detailing
the Ethernet hardware address */
#define CARD_CONFIG 0x1A /* Describes card configuration registers */
#define CARD_CFT_ENTRY 0x1B /* There are several different copies of
this one tuple, which describe the
different I/O addresses accepted by the
Intel 82595 Controller */
/*
* Register layout of the Intel 82595TX chip
*
* Those ever imaginative people at Intel have no other
* names for the registers on their chip than r1, r2
* etc..
*
*/
#ifndef I82595_REGS_CONTIGUOUS
/*
* To try and optimise I/O to the chip, this structure represents
* the *real* appearance of the chip in the PID7T NISA I/O space;
* the weird wiring arrangement described in pid.h means that,
* although the chip has a sequential collection of registers, they
* appear to be grouped as two-register pairs, aligned on a word
* boundary
*/
#define I595_R0 0x00
#define I595_R1 0x01
#define I595_R2 0x04
#define I595_R3 0x05
#define I595_R4 0x08
#define I595_R5 0x09
#define I595_R6 0x0C
#define I595_R7 0x0D
#define I595_R8 0x10
#define I595_R9 0x11
#define I595_R10 0x14
#define I595_R11 0x15
#define I595_R12 0x18
#define I595_R13 0x19
#define I595_R14 0x1C
#define I595_R15 0x1D
#else
/* Normal layout */
#define I595_R0 0x00
#define I595_R1 0x01
#define I595_R2 0x02
#define I595_R3 0x03
#define I595_R4 0x04
#define I595_R5 0x05
#define I595_R6 0x06
#define I595_R7 0x07
#define I595_R8 0x08
#define I595_R9 0x09
#define I595_R10 0x0A
#define I595_R11 0x0B
#define I595_R12 0x0C
#define I595_R13 0x0D
#define I595_R14 0x0E
#define I595_R15 0x0F
#endif /* !I82595_REGS_CONTIGUOUS */
/*
* Register 0 is special, as it's the same in all banks
* Access Macro to Register 0.
*/
#define SELECTBANK(c, b)(PCMCIA_IO_WRITE((c) + I595_R0, (b) << 6))
#define RUNCMD(c, o) (PCMCIA_IO_WRITE((c) + I595_R0, \
((o) & OPCODE_MASK)))
#define ABORTCMD(c) (PCMCIA_IO_WRITE((c) + I595_R0, (1 << 5)))
/* 82595TX Command Set for register 0 */
#define CMD_MC_SETUP 0x03
#define CMD_TRANSMIT 0x04
#define CMD_TDR 0x05
#define CMD_DUMP 0x06
#define CMD_DIAGNOSE 0x07
#define CMD_RCV_ENABLE 0x08
#define CMD_RCV_DISABLE 0x0A
#define CMD_RCV_STOP 0x0B
#define CMD_ABORT 0x0D
#define CMD_RESET 0x0E
#define CMD_XMIT_RAW 0x14
#define CMD_CONT_XMIT_LIST 0x15
#define CMD_SET_TRISTATE 0x16
#define CMD_RESET_TRISTATE 0x17
#define CMD_POWER_DOWN 0x18
#define CMD_RESUME_XMIT_LIST 0x1C
#define CMD_SEL_RESET 0x1E
#define OPCODE_MASK 0x1F
/* 82595TX result codes for register 0 */
#define RESULT_INIT_DONE 0x0E
/* Definitions for fields and bits in the OLI_DEVICE */
/* I/O Bank 0 */
/* Reg 1 Interrupt/Status Register */
#define BNK0_RX_SIT 0x01 /* RX stop interrupt */
#define BNK0_RX_IT 0x02 /* RX interrupt */
#define BNK0_TX_IT 0x04 /* TX interrupt */
#define BNK0_EXE_IT 0x08 /* Execution interrupt */
#define BNK0_EXE_IDL 0x00 /* Execution state idle */
#define BNK0_EXE_BSY 0x20 /* Execution state busy */
#define BNK0_EXE_ART 0x30 /* Execution state aborting */
#define BNK0_RCV_DIS 0x00 /* Receive state disable */
#define BNK0_RCV_RDY 0x40 /* Receive state ready */
#define BNK0_RCV_ACT 0x80 /* Receive state active */
#define BNK0_RCV_STP 0xC0 /* Receive state stopping */
#define BNK0_ITS_MSK 0x0F /* All interrupts mask */
#define BNK0_EXE_MSK 0x30 /* Execution state mask */
#define BNK0_RCV_MSK 0xC0 /* Receive state mask */
#define BNK0_EXE_STE(r) ((r) & BNK0_EXE_MSK)
#define BNK0_RCV_STE(r) ((r) & BNK0_RCV_MSK)
/* Reg 3 Interrupt Mask Register */
#define BNK0_RX_SMK 0x01 /* RX stop interrupt mask */
#define BNK0_RX_MK 0x02 /* RX interrupt mask */
#define BNK0_TX_MK 0x04 /* TX interrupt mask */
#define BNK0_EXE_MK 0x08 /* Execution interrupt mask */
#define BNK0_HAR_SLT 0x10 /* 32Bit IO port/host address select */
#define BNK0_CBR_SLT 0x20 /* Current/Base register select */
/* I/O Bank 1 */
/* Reg 1 Config ISA Register/Tri-state irq lines */
#define BNK1_ISA_HBW 0x02 /* Host bus width (ISA only) */
#define BNK1_ISA_ART 0x40 /* Alternate ready timing (ISA only) */
#define BNK1_TST_EN 0x80 /* Tri-state interrupt lines */
/* I/O Bank 2 */
/* Reg 1 Control the program features of the 82595TX */
#define BNK2_TCP_DIS 0x01 /* Transmit concurrent processing disable */
#define BNK2_PCM_ISA 0x10 /* PCMCIA/ISA Select */
#define BNK2_TCH_END 0x20 /* Transmit chaining int mode */
#define BNK2_TCH_ERR 0x40 /* Transmit chaining error stop */
#define BNK2_BAD_DSC 0x80 /* Discard bad frames */
/* Reg 2 Control the program features of the 82595TX */
#define BNK2_PCS_EN 0x01 /* Promiscous mode enable */
#define BNK2_BRO_DIS 0x02 /* Disable broadcast */
#define BNK2_RX_CRC 0x04 /* RX CRC in memory */
#define BNK2_LEN_DIS 0x08 /* Length disable */
#define BNK2_SAI_EN 0x10 /* enable source address insertion */
#define BNK2_MIA_EN 0x20 /* Multi individual address enable */
#define BNK2_LP_DIS 0x00 /* Loopback disable */
#define BNK2_LP_INT 0x40 /* Internal loopback */
#define BNK2_LP_EXT 0x80 /* External loopback */
/* Reg 3 Control the program features of the 82595TX */
#define BNK2_LI_DIS 0x01 /* Link integrity disable */
#define BNK2_PC_DIS 0x02 /* disable polarity correction */
#define BNK2_TPE_AUI 0x04 /* TPE/AUI */
#define BNK2_JB_DIS 0x08 /* Jabber disable */
#define BNK2_AP_EN 0x10 /* APORT */
#define BNK2_BNC_TPE 0x20 /* BNC/TPE */
#define BNK2_TST_EN 0xC0 /* Production testing mode */
/* RCV status field*/
#define RCV_EOF 0x08 /* Reception of frame completed */
#define RCV_BOF 0x10 /* Begining of frame bit */
#define RCV_RXCPY 0x20 /* RCV copy threshold */
#define RCV_RECLM 0x40 /* RCV-DMA reclaimes location */
#define RCV_UNDRN 0x80 /* RCV data underrun */
#define RCV_COL_DCT 0x0001 /* Collision detected */
#define RCV_IA_MCH 0x0002 /* Individual address match */
#define RCV_SRT_FRM 0x0080 /* Received frame shorter than 64Bytes */
#define RCV_OVR_RUN 0x0100 /* OVERRUN */
#define RCV_ALG_ERR 0x0400 /* Alignment error */
#define RCV_CRC_ERR 0x0800 /* CRC error */
#define RCV_LEN_ERR 0x1000 /* Length error */
#define RCV_OK 0x2000 /* Frame received OK */
#define RCV_TYP_LEN 0x8000 /* Type field */
/* XMT status field*/
#define XMT_COL_MAX 0x0020 /* Failed due to max collisions */
#define XMT_HRT_BET 0x0040 /* Collision detect test passed after prev Tx */
#define XMT_LN_DEF 0x0080 /* Tx deferred due to link activity */
#define XMT_UND_RUN 0x0100 /* Underrun */
#define XMT_LST_CRS 0x0400 /* Carrier sense lost */
#define XMT_LT_COL 0x0800 /* Later collision */
#define XMT_OK 0x2000 /* Transmit OK */
#define XMT_COLL 0x8000 /* Collision on the last transmit */
#define XMT_COL_MSK 0x000F /* number collisions mask */
#define XMT_CHAIN 0x8000 /* Flag indicates a XMT chaining (16Bit) */
#define XMT_CHAIN_OCT 0x80 /* Flag indicates a XMT chaining (8Bit) */
#define TOTAL_RAM_SIZE (64 * 1024)
#define RAM_TX_BASE (0)
#define RAM_TX_SIZE (32 * 1024)
#define RAM_TX_LIMIT (RAM_TX_BASE + (RAM_TX_SIZE - 1))
#define RAM_RX_SIZE (TOTAL_RAM_SIZE - RAM_TX_SIZE)
#define RAM_RX_BASE (RAM_TX_SIZE)
#define RAM_RX_LIMIT (RAM_RX_BASE + (RAM_RX_SIZE - 1))
/*
* Macro for converting from packet byte count to length in Tx ring
* buffer which needs to include 8 bytes of header and half-word
* alignment
*/
#define COUNT_TO_LEN(x) ((x) + ((((x) & 0x01) == 0) ? 8 : 9))
/* Define Ethernet Network Driver parameters */
#define MAX_UNITS 1 /* max Olicom units */
#define DRV_NAME "oli"
#define DRV_NAME_LEN 4 /* including null terminator */
#define EADDR_LEN 6
#define OLI_BUFSIZ (ETHERMTU + SIZEOF_ETHERHEADER + EADDR_LEN)
#define OLI_SPEED 10000000
#define TX_BD_MIN 2 /* minimum number of Tx buffer descriptors */
#define TX_BD_MAX 0x14 /* maximum number of Tx buffer descriptors */
#define RX_BD_MIN 2 /* minimum number of Rx buffer descriptors */
#define TX_BD_DEFAULT 0x10 /* default number of Tx buffer descriptors */
#define RX_BD_DEFAULT 0x10 /* default number of Rx buffer descriptors */
#define OLI_MIN_FBUF 9 /* min. size of the first buffer in a frame */
#define OLI_MAX_XMT 0x600 /* max. size of the XMT block mem. structure */
#define NUM_LOAN 0x10 /* number of Rx loaner buffers in pool */
/* Define control structures */
/* typedefs */
typedef struct free_buf
{
void * pClBuf; /* pointer cluster buffer */
} FREE_BUF;
/* The definition of the driver control structure */
typedef struct end_device
{
END_OBJ endObj; /* The class we inherit from. */
int unit; /* unit number */
long flags; /* Our local flags. */
OLI_PCMCIA_CTRL pcmcia; /* PCMCIA control structure */
int ivec; /* interrupt vector */
int ilevel; /* interrupt level */
int txBdNum; /* number of transmit BD */
TX_BD * txBdBase; /* transmit BD base address */
int txBdNext; /* next transmit BD to fill */
int txBdIndexC; /* current transmit BD index */
int rxBdNum; /* number of receive BD */
RX_BD * rxBdBase; /* receive BD base address */
int rxBdNext; /* next receive BD to read */
char * pShMem; /* real ptr to shared memory */
ULONG shMemSize; /* shared memory size */
UINT8 enetAddr[EADDR_LEN]; /* ethernet address */
int offset;
CACHE_FUNCS cacheFuncs; /* cache function pointers */
FREE_BUF freeBuf[128]; /* Array of free routines. */
CL_POOL_ID clPoolId;
} END_DEVICE;
#define FLTR_FRM_SIZE 0x180 /* filter frm size 64 Multicast address */
/* Definitions for the flags field */
#define OLI_RCV_HANDLING 0x0001
#define OLI_POLLING 0x0002 /* Poll mode */
#define OLI_TX_CLEANING 0x0004
#define OLI_TX_STOP 0x0008
#define OLI_MEMOWN 0x8000 /* memory allocated by driver */
/* state of transmit BD */
#define TX_BD_READY 0x80
/* state of receive BD */
#define RX_BD_EMPTY 0x01
/* definitions of several mask */
#define OCT_MSK 0xFF /* 8-bit mask */
#define ODD_MSK 0x01 /* Odd mask */
#ifdef __cplusplus
}
#endif
#endif /* __INCiOlicomEndh */