📄 iolicomend.h
字号:
/* iOlicomEnd.h - END-style Intel Olicom PCMCIA Ethernet interface header *//* Copyright 1997-2001 Wind River Systems, Inc. *//*modification history--------------------01g,20sep01,dat Removing ANSI errors for diab compiler01f,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#ifdef __cplusplusextern "C" {#endif#include "end.h"#include "netBufLib.h"#include "netinet/if_ether.h"/* 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -