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

📄 pccardlib.c

📁 VXWORKS源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* pccardLib.c - PC CARD enabler library *//* Copyright 1984-1996 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01k,21jun00,rsh  upgrade to dosFs 2.001o,31aug99,jkf  changed from cbio.h to cbioLib.h01n,03nov98,lrn  cleanup warnings01m,06oct98,lrn  merge DosFs 2.0 changes into T2.0, DosFs 2.0 API for TFFS01l,17sep98,lrn  reworked DosFs 2.0 support and memory leak issues01k,13jul98,lrn  DosFs 2.0 - can not delete a DOS device01j,19jan98,hdn  added a check to see if the socket is registered.01i,11dec97,hdn  added TFFS support for flash PC card.01h,19mar97,hdn  deleted a line that writes 0 to the ELT's address config reg.01g,16jan97,hdn  initialized pcmciaCtrl.01f,17nov96,jdi  doc: tweaks.01e,08nov96,dgp  doc: final formatting01d,28mar96,jdi  doc: cleaned up language and format.01c,08mar96,hdn  added more descriptions.01b,22feb96,hdn  cleaned up01a,19oct95,hdn  written.*//*DESCRIPTIONThis library provides generic facilities for enabling PC CARD.Each PC card device driver needs to provide an enabler routine anda CSC interrupt handler.  The enabler routine must be in the`pccardEnabler' structure.Each PC card driver has its own resource structure, `xxResources'.  TheATA PC card driver resource structure is `ataResources' insysLib, which also supports a local IDE disk.The resource structure has a PC card common resource structure inthe first member.  Other members are device-driver dependent resources.The PCMCIA chip initialization routines tcicInit() and pcicInit() areincluded in the PCMCIA chip table `pcmciaAdapter'.This table is scanned when the PCMCIA library is initialized.  If theinitialization routine finds the PCMCIA chip, it registers all functionpointers of the PCMCIA_CHIP structure.A memory window defined in `pcmciaMemwin' is used to accessthe CIS of a PC card through the routines in cisLib.SEE ALSOpcmciaLib, cisLib, tcic, pcic*//* LINTLIBRARY */#include "private/funcBindP.h"#include "drv/pcmcia/pcmciaLib.h"#include "drv/pcmcia/cisLib.h"#include "drv/pcmcia/pcic.h"#include "drv/pcmcia/tcic.h"#include "drv/pcmcia/sramDrv.h"#include "drv/hdisk/ataDrv.h"#include "cbioLib.h"#include "dcacheCbio.h"#include "dpartCbio.h"#ifdef	INCLUDE_ELT#include "net/if.h"#include "netinet/if_ether.h"#include "drv/netif/if_elt.h"#endif	/* INCLUDE_ELT */#ifdef	INCLUDE_TFFS#include "tffs/tffsDrv.h"#endif	/* INCLUDE_TFFS *//* defines */#define ELT_PCMCIA_ID0		0x0101	/* manufacturer code */#define ELT_PCMCIA_ID1_562	0x0562	/* manufacturer info for 3C562 */#define ELT_PCMCIA_ID1_589	0x0589	/* manufacturer info for 3C589B *//* XXX it should go in pc386/pc.h */#define TFFS0_MEM_START		0xd8000	/* mem start addr for TFFS in sock 0 */#define TFFS0_MEM_STOP		0xd9fff	/* mem stop addr for TFFS in sock 0 */#define TFFS1_MEM_START		0xda000	/* mem start addr for TFFS in sock 1 */#define TFFS1_MEM_STOP		0xdbfff	/* mem stop addr for TFFS in sock 1 *//* externs */IMPORT BOOL pcmciaDebug;/* dont use partition table decoder unless ATA is included */#define	USE_PARTITIONS	FALSE#ifdef	INCLUDE_ELTIMPORT ELT_CTRL		*pEltCtrl [];LOCAL STATUS	pccardEltCscIntr  (int sock, int csc);#endif	/* INCLUDE_ELT */#ifdef	INCLUDE_ATAIMPORT ATA_CTRL		ataCtrl [ATA_MAX_CTRLS];LOCAL STATUS	pccardAtaCscIntr  (int sock, int csc);#undef	USE_PARTITIONS#define	USE_PARTITIONS	TRUE#endif	/* INCLUDE_ATA */#ifdef	INCLUDE_SRAMIMPORT SRAM_CTRL	sramCtrl;IMPORT int		sramResourceNumEnt;LOCAL STATUS	pccardSramCscIntr (int sock, int csc);#endif	/* INCLUDE_SRAM */#ifdef	INCLUDE_TFFSIMPORT char		pcDriveNo [];LOCAL STATUS	pccardTffsCscIntr (int sock, int csc);#endif	/* INCLUDE_TFFS *//* globals */PCMCIA_CTRL pcmciaCtrl = {PCMCIA_SOCKS, PCMCIA_MEMBASE} ;PCMCIA_MEMWIN pcmciaMemwin [] =    {    {0, 0, 0, CIS_MEM_START, CIS_MEM_STOP, 0},	/* CIS extraction */    {0, 0, 0, CIS_REG_START, CIS_REG_STOP, 0},	/* config registers */    };PCMCIA_ADAPTER pcmciaAdapter [] =    {    {PCMCIA_PCIC, PCIC_BASE_ADR, PCIC_INT_VEC, PCIC_INT_LVL, pcicInit, NULL},    {PCMCIA_TCIC, TCIC_BASE_ADR, TCIC_INT_VEC, TCIC_INT_LVL, tcicInit, NULL}    };#ifdef	INCLUDE_ELTELT_RESOURCE eltResources[] =    {    {     {     5, 0,     {ELT0_IO_START, 0}, {ELT0_IO_STOP, 0}, 0,     0, 0, 0, 0, 0     },     ELT0_INT_VEC, ELT0_INT_LVL, ELT0_NRF, ELT0_CONFIG    },    {     {     5, 0,     {ELT1_IO_START, 0}, {ELT1_IO_STOP, 0}, 0,     0, 0, 0, 0, 0     },     ELT1_INT_VEC, ELT1_INT_LVL, ELT1_NRF, ELT1_CONFIG    }    };#endif	/* INCLUDE_ELT */#ifdef	INCLUDE_SRAMSRAM_RESOURCE sramResources[] =    {    {     {     5, 0,     {0, 0}, {0, 0}, 0,     SRAM0_MEM_START, SRAM0_MEM_STOP, 1, 0x0, SRAM0_MEM_LENGTH     }    },    {     {     5, 0,     {0, 0}, {0, 0}, 0,     SRAM1_MEM_START, SRAM1_MEM_STOP, 1, 0x0, SRAM1_MEM_LENGTH     }    },    {     {     5, 0,     {0, 0}, {0, 0}, 0,     SRAM2_MEM_START, SRAM2_MEM_STOP, 1, 0x0, SRAM2_MEM_LENGTH     }    },    {     {     5, 0,     {0, 0}, {0, 0}, 0,     SRAM3_MEM_START, SRAM3_MEM_STOP, 1, 0x0, SRAM3_MEM_LENGTH     }    }    };#endif	/* INCLUDE_SRAM */#ifdef	INCLUDE_TFFSTFFS_RESOURCE tffsResources[] =    {    {     {     5 /* vcc */, 0 /* vpp */,     {0, 0}, {0, 0}, 0,     TFFS0_MEM_START, TFFS0_MEM_STOP, 2 /* extra wait state */,     0x0 /* offset card address */, 0x0 /* size of the memory */     }    },    {     {     5 /* vcc */, 0 /* vpp */,     {0, 0}, {0, 0}, 0,     TFFS1_MEM_START, TFFS1_MEM_STOP, 2 /* extra wait state */,     0x0 /* offset card address */, 0x0 /* size of the memory */     }    }    };#endif	/* INCLUDE_TFFS */PCCARD_ENABLER pccardEnabler [] =    {#ifdef	INCLUDE_ELT    {     PCCARD_LAN_ELT, (void *)eltResources, NELEMENTS(eltResources),     (FUNCPTR)pccardEltEnabler, NULL    },#endif	/* INCLUDE_ELT */#ifdef	INCLUDE_ATA    {     PCCARD_ATA, (void *)ataResources, NELEMENTS(ataResources),     (FUNCPTR)pccardAtaEnabler, NULL    },#endif	/* INCLUDE_ATA */#ifdef	INCLUDE_TFFS    {     PCCARD_FLASH, (void *)tffsResources, NELEMENTS(tffsResources),     (FUNCPTR)pccardTffsEnabler, NULL    },#endif	/* INCLUDE_TFFS */#ifdef	INCLUDE_SRAM    {     PCCARD_SRAM, (void *)sramResources, NELEMENTS(sramResources),     (FUNCPTR)pccardSramEnabler, NULL    }#endif	/* INCLUDE_SRAM */    };int pcmciaAdapterNumEnt = NELEMENTS (pcmciaAdapter);int pccardEnablerNumEnt = NELEMENTS (pccardEnabler);/* locals */#ifdef	INCLUDE_SRAMLOCAL int sramSizeTable [] = {512, 2000, 8000, 32000,			      128000, 512000, 2000000, 0};#endif	/* INCLUDE_SRAM */#ifdef INCLUDE_DOSFS#define ATA_CACHE_SIZE	(128*1024)#define SRAM_CACHE_SIZE	(2*1024)#define TFFS_CACHE_SIZE	(32*1024)CBIO_DEV_ID sockCbioDevs[ PCIC_MAX_SOCKS * NELEMENTS (pcmciaAdapter) ];char * sockDevNames[ PCIC_MAX_SOCKS * NELEMENTS (pcmciaAdapter) ] =		 { "/card0", "/card1", "/card2", "/card3",    	     	   "/card4", "/card5", "/card6", "/card7", NULL };#endif /* INCLUDE_DOSFS */#ifdef INCLUDE_ATA#endif#ifdef INCLUDE_SRAM#endif#ifdef INCLUDE_ELT#endif#ifdef INCLUDE_TFFS#endif/********************************************************************************* pccardMount - mount a DOS file system** This routine mounts a DOS file system.** RETURNS: OK or ERROR.*/STATUS pccardMount    (    int	 sock,			/* socket number */    char *pName			/* name of a device */    )    {    printErr( "This function is discontinued\n" );    return ERROR;#if FALSE    PCMCIA_CTRL *pCtrl		= &pcmciaCtrl;    PCMCIA_CHIP *pChip		= &pCtrl->chip;    PCMCIA_CARD *pCard		= &pCtrl->card[sock];    DOS_VOL_DESC *pDos		= pCard->pDos;    if ((!pChip->installed) || (!pCard->installed) || (sock >= pChip->socks))        return (ERROR);    if (pDos != NULL)	{	iosDevDelete (&pDos->dosvd_devHdr);	free ((char *)pDos);	return (ERROR);	}    pCard->pDos = dosFsDevInit (pName, pCard->pBlkDev, NULL);    if (pCard->pDos == NULL)	return (ERROR);    return (OK);#endif /* FALSE */    }/********************************************************************************* pccardMkfs - initialize a device and mount a DOS file system** This routine initializes a device and mounts a DOS file system.** RETURNS: OK or ERROR.*/STATUS pccardMkfs    (    int	 sock,			/* socket number */    char *pName			/* name of a device */    )    {    printErr( "This function is discontinued. Use dosFsVolFormat()\n" );    return ERROR;#if FALSE    PCMCIA_CTRL *pCtrl		= &pcmciaCtrl;    PCMCIA_CHIP *pChip		= &pCtrl->chip;    PCMCIA_CARD *pCard		= &pCtrl->card[sock];    DOS_VOL_DESC *pDos		= pCard->pDos;    if ((!pChip->installed) || (!pCard->installed) || (sock >= pChip->socks))        return (ERROR);    if (pDos != NULL)	{	iosDevDelete (&pDos->dosvd_devHdr);	free ((char *)pDos);	return (ERROR);	}    pCard->pDos = dosFsMkfs (pName, pCard->pBlkDev);    if (pCard->pDos == NULL)	return (ERROR);    return (OK);#endif /* FALSE */    }#ifdef INCLUDE_DOSFS/********************************************************************************* pccardDosDevCreate - create DOSFS device for on PCMCIA socket.** This routine creates a DOS FS device for PCMCIA socket # <sock>* with predefined name based on socket number.  The device will use* device driver pointed by <pBlkDev> to access device on the low level.** If DOS device already exists, only low level driver is changed to* reflect the new devices physical parameters.** RETURNS: STATUS.*/LOCAL STATUS pccardDosDevCreate    (    int		sock,    void *	pBlkDev,    int		cacheSize,    BOOL	partitions    )    {    void * subDev = NULL ;    void * masterCbio ;    IMPORT STATUS usrFdiskPartRead();    STATUS stat;    /* create cache of appropriate size and DOS device on top of it */    if ( sockCbioDevs[ sock ] == NULL )    	{    	sockCbioDevs[ sock ] =    	    	dcacheDevCreate(pBlkDev, 0, cacheSize,    	    	    	    	 sockDevNames[ sock ] );    	if( sockCbioDevs[ sock ] == NULL )    	    {    	    printErr ("Error during dcacheDevCreate: %p\n",    	    	      (void *)errno );    	    return (ERROR);    	    }   	if ( partitions )	    {    	    masterCbio = dpartDevCreate(sockCbioDevs[ sock ] ,			 1, (FUNCPTR) usrFdiskPartRead );    	    if( masterCbio == NULL)            	{	    	printErr ("Error creating partition manager: %x\n", errno);            	return (ERROR);            	}	    subDev = (void *) dpartPartGet(masterCbio,0);	    }	else	    {	    subDev = sockCbioDevs[ sock ];	    }    	return dosFsDevCreate( sockDevNames[ sock ],    	    	    	       subDev, 0,0 );

⌨️ 快捷键说明

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