예제 #1
0
파일: flashFsLib.c 프로젝트: ariavie/bcm
/*
 * Disable disk cache
 */
STATUS
flashFsDisableDcache(void)
{
    if (flashFsVerbose)
        printf("flashFsDisableDcache\n");

    /* Disable disk cache - Hack */
    taskDelete(dcacheUpdTaskId);
    dcacheUpdTaskId = 0;

#if 0
    CBIO_DEV_ID dcacheHandle;
    void *devHandle;
    char fullname[20];

    /* Set the disk cache sync delay to 0 */
    devHandle = iosDevFind("flash:", &fullname);
    dcacheHandle = *(CBIO_DEV_ID*)((int)devHandle + 24);   /* FIXME */
    if (flashFsVerbose) {
        printf("dcacheDevTune - devHandle=0x%x, dcacheHandle=0x%x\n",
                (int)devHandle, (int)dcacheHandle);
    }
    if (dcacheDevTune(dcacheHandle, 0, 0, 0, 0) != OK) {
        printf("flashFsDisableDcache: dcacheDevTune failed\n");
        return ERROR;
    }

    dcacheDevDisable(dcacheHandle);   /* only for dosFS 2.2 */
#endif

    /* dcacheShow(dcacheHandle, 0); */

    return OK;
}
예제 #2
0
파일: mprCmd.c 프로젝트: embedthis/mpr-3
static void vxCmdDestructor(MprCmd *cmd)
{
    MprCmdFile      *files;
    int             i;

    if (cmd->startCond) {
        semDelete(cmd->startCond);
    }
    if (cmd->exitCond) {
        semDelete(cmd->exitCond);
    }
    files = cmd->files;
    for (i = 0; i < MPR_CMD_MAX_PIPE; i++) {
        if (files[i].name) {
            DEV_HDR *dev;
#if _WRS_VXWORKS_MAJOR >= 6
            cchar   *tail;
#else
            char    *tail;
#endif
            if ((dev = iosDevFind(files[i].name, &tail)) != NULL) {
                iosDevDelete(dev);
            }
        }
    }
}
예제 #3
0
파일: pipe.c 프로젝트: Ga-vin/libsylixos
/*********************************************************************************************************
** 函数名称: API_PipeDevDelete
** 功能描述: 删除一个管道设备
** 输 入  : 
**           pcName                        管道名称
**           bForce                        强制删除
** 输 出  : ERROR
** 全局变量: 
** 调用模块: 
                                           API 函数
*********************************************************************************************************/
LW_API 
INT  API_PipeDevDelete (PCHAR  pcName, BOOL  bForce)
{
    REGISTER PLW_PIPE_DEV        p_pipedev;
             PCHAR               pcTail = LW_NULL;
    
    if (LW_CPU_GET_CUR_NESTING()) {
        _DebugHandle(__ERRORMESSAGE_LEVEL, "called from ISR.\r\n");
        _ErrorHandle(ERROR_KERNEL_IN_ISR);
        return  (PX_ERROR);
    }
    
    if (_G_iPipeDrvNum <= 0) {
        _DebugHandle(__ERRORMESSAGE_LEVEL, "no driver.\r\n");
        _ErrorHandle(ERROR_IO_NO_DRIVER);
        return  (PX_ERROR);
    }
    
    p_pipedev = (PLW_PIPE_DEV)iosDevFind(pcName, &pcTail);
    if ((p_pipedev == LW_NULL) || (pcName == pcTail)) {
        _DebugHandle(__ERRORMESSAGE_LEVEL, "device not found.\r\n");
        _ErrorHandle(ERROR_IOS_DEVICE_NOT_FOUND);
        return  (PX_ERROR);
    }
    
    if (bForce == LW_FALSE) {
        if (LW_DEV_GET_USE_COUNT(&p_pipedev->PIPEDEV_devhdrHdr)) {
            _DebugHandle(__ERRORMESSAGE_LEVEL, "too many open files.\r\n");
            _ErrorHandle(EBUSY);
            return  (PX_ERROR);
        }
        if (SEL_WAKE_UP_LIST_LEN(&p_pipedev->PIPEDEV_selwulList) > 0) {
            errno = EBUSY;
            return  (PX_ERROR);
        }
    }
    
    iosDevFileAbnormal(&p_pipedev->PIPEDEV_devhdrHdr);
    iosDevDelete(&p_pipedev->PIPEDEV_devhdrHdr);

    SEL_WAKE_UP_LIST_TERM(&p_pipedev->PIPEDEV_selwulList);
    
    API_SemaphoreBDelete(&p_pipedev->PIPEDEV_hWriteLock);
    API_MsgQueueDelete(&p_pipedev->PIPEDEV_hMsgQueue);

    __SHEAP_FREE((PVOID)p_pipedev);
    
    return  (ERROR_NONE);
}
예제 #4
0
파일: can.c 프로젝트: Ga-vin/libsylixos
/*********************************************************************************************************
** 函数名称: API_CanDevRemove
** 功能描述: 移除一个 CAN 设备
** 输 入  :
**           pcName           需要移除的 CAN 设备
**           bForce           模式选择
** 输 出  : ERROR_NONE or PX_ERROR
** 全局变量:
** 调用模块:
**                                            API 函数
*********************************************************************************************************/
LW_API
INT  API_CanDevRemove (PCHAR     pcName, BOOL  bForce)
{
    __PCAN_PORT         pDevHdr;
    PCHAR               pcTail = LW_NULL;

    if (LW_CPU_GET_CUR_NESTING()) {
        _DebugHandle(__ERRORMESSAGE_LEVEL, "called from ISR.\r\n");
        _ErrorHandle(ERROR_KERNEL_IN_ISR);
        return  (PX_ERROR);
    }

    if (_G_iCanDrvNum <= 0) {
        _DebugHandle(__ERRORMESSAGE_LEVEL, "no driver.\r\n");
        _ErrorHandle(ERROR_IO_NO_DRIVER);
        return  (PX_ERROR);
    }

    pDevHdr = (__PCAN_PORT)iosDevFind(pcName, &pcTail);
    if ((pDevHdr == LW_NULL) || (pcName == pcTail)) {
        _DebugHandle(__ERRORMESSAGE_LEVEL, "device not found.\r\n");
        _ErrorHandle(ERROR_IOS_DEVICE_NOT_FOUND);
        return  (PX_ERROR);
    }

    if (bForce == LW_FALSE) {
        if (LW_DEV_GET_USE_COUNT(&pDevHdr->CANPORT_can.CAN_devhdr)) {
            _DebugHandle(__ERRORMESSAGE_LEVEL, "too many open files.\r\n");
            _ErrorHandle(EBUSY);
            return  (PX_ERROR);
        }
        if (SEL_WAKE_UP_LIST_LEN(&pDevHdr->CANPORT_can.CAN_selwulList) > 0) {
            errno = EBUSY;
            return  (PX_ERROR);
        }
    }

    iosDevFileAbnormal(&pDevHdr->CANPORT_can.CAN_devhdr);
    iosDevDelete(&pDevHdr->CANPORT_can.CAN_devhdr);

    SEL_WAKE_UP_LIST_TERM(&pDevHdr->CANPORT_can.CAN_selwulList);

    __canDevDelete(&pDevHdr->CANPORT_can);

    __SHEAP_FREE((PVOID)pDevHdr);

    return  (ERROR_NONE);
}
예제 #5
0
파일: driver.c 프로젝트: hermixy/driver
int devDelete(char* devName)
{
	myDev * i = first;
	char * pNameTail;
	myDev * dev = (myDev*) iosDevFind (devName,&pNameTail);
	if ((*pNameTail)!='\0' || dev==NULL)
	//If pNameTail is not '\0', either we don't have an exact match
	//or we have no match at all
	{
		errnoSet(UNKNOWN_DEVICE);
		semGive(semMAdmin);
		return -1;
	}
	if(semMAdmin==0)
	{
		errnoSet(NOT_INSTALLED);
		return -1;
	}
	if(semTake(semMAdmin,WAIT_FOREVER)==-1)
	{
		errnoSet(SEM_ERR);
		return -1;
	}
	
	if (dev->openned != 0)
	{
		//There are still openned file descriptors on this device,
		//we can't delete it, give back semaphores and leave.
		semGive(dev->semMData);
		errnoSet(OPENNED_DEV);
		semGive(semMAdmin);
		return -1;
	}
	iosDevDelete((DEV_HDR*)dev); //This only prevents further oppenings. 
	//Find and delete the device in device list :
	if (dev==first)
	{
		first=dev->next;
	} else {
		for (i=first;i->next!=dev;i=i->next);
		i->next=dev->next;
	}
	semTake(dev->semMData,WAIT_FOREVER); //Let pending ops on this dev finish
	semDelete(dev->semMData); //We don't need to release it to delete it
	free(dev);
	semGive(semMAdmin);
	return 0;
}
예제 #6
0
파일: cmd.c 프로젝트: embedthis/mpr
static void resetCmd(MprCmd *cmd, bool finalizing)
{
    MprCmdFile      *files;
    int             i;

    assert(cmd);
    files = cmd->files;
    for (i = 0; i < MPR_CMD_MAX_PIPE; i++) {
        if (cmd->handlers[i]) {
            mprDestroyWaitHandler(cmd->handlers[i]);
            cmd->handlers[i] = 0;
        }
        if (files[i].clientFd >= 0) {
            close(files[i].clientFd);
            files[i].clientFd = -1;
        }
        if (files[i].fd >= 0) {
            close(files[i].fd);
            files[i].fd = -1;
        }
#if VXWORKS
        if (files[i].name) {
            DEV_HDR *dev;
            cchar   *tail;
            if ((dev = iosDevFind(files[i].name, &tail)) != NULL) {
                iosDevDelete(dev);
            }
        }
#endif
    }
    cmd->eofCount = 0;
    cmd->complete = 0;
    cmd->status = -1;

    if (cmd->pid && (!(cmd->flags & MPR_CMD_DETACH) || finalizing)) {
        mprStopCmd(cmd, -1);
        reapCmd(cmd, finalizing);
        cmd->pid = 0;
    }
    if (cmd->signal) {
        mprRemoveSignalHandler(cmd->signal);
        cmd->signal = 0;
    }
}
예제 #7
0
파일: nfsd.c 프로젝트: netdebug/vxnfsd
fhstatus       *
mountproc_mnt_1(dirpath * dirpathp, struct svc_req * reqp)
{
	static fhstatus fhstatus;
	DEV_HDR        *dev_hdrp;
	char           *dummy;
	vxfh_t         *vxfhp;

	nfsd_debug("mount mnt\n");
	bzero(&fhstatus, sizeof(fhstatus));

	/*
	 * we only export filesystem device at the root. currently no config
	 * file is used. all rt11 and msdos filesystem devices are exported.
	 * no security & option support either.
	 */
	if ((dev_hdrp = iosDevFind(*dirpathp, &dummy)) == NULL) {
		fhstatus.fhs_status = errnoGet();
		return (&fhstatus);
	}
	if (dev_hdrp->drvNum == rt11FsDrvNum) {
		fhstatus.fhs_status = NFS_OK;
		vxfhp = (vxfh_t *) & (fhstatus.fhstatus_u.fhs_fhandle);
		vxfhp->type = rt11FsDrvNum;
		strcpy(vxfhp->opaque, (char *) (*dirpathp));

		if (nfsd_debug_on)
			d(vxfhp, sizeof(*vxfhp));

		return (&fhstatus);
	}
	if (dev_hdrp->drvNum == dosFsDrvNum) {
		vxfhp = (vxfh_t *) & (fhstatus.fhstatus_u.fhs_fhandle);

		if (newfh(vxfhp, *dirpathp) == ERROR) {
			fhstatus.fhs_status = NFSERR_NODEV;
			return (&fhstatus);
		}
		fhstatus.fhs_status = NFS_OK;
		return (&fhstatus);
	}
	fhstatus.fhs_status = NFSERR_NODEV;
	return (&fhstatus);
}
예제 #8
0
static char_t *getAbsolutePath(char_t *path)
{
	char_t	*tail;
	char_t	*dev;

/*
 *	Determine if path is relative or absolute.  If relative, prepend
 *	the current working directory to the name.  Otherwise, use it.
 *	Note the getcwd call below must not be ggetcwd or else we go into
 *	an infinite loop
 */
	if (iosDevFind(path, &tail) != NULL && path != tail) {
		return bstrdup(B_L, path);
	}
	dev = balloc(B_L, LF_PATHSIZE);
	getcwd(dev, LF_PATHSIZE);
	strcat(dev, "/");
	strcat(dev, path);
	return dev;
}
예제 #9
0
파일: osdep.c 프로젝트: Eric--Zhou/goahead
/*
    Get absolute path.  In VxWorks, functions like chdir, ioctl for mkdir and ioctl for rmdir, require an absolute path.
    This function will take the path argument and convert it to an absolute path.  It is the caller's responsibility to
    deallocate the returned string. 
 */
static char *getAbsolutePath(char *path)
{
#if _WRS_VXWORKS_MAJOR >= 6
    const char  *tail;
#else
    char        *tail;
#endif
    char  *dev;

    /*
        Determine if path is relative or absolute.  If relative, prepend the current working directory to the name.
        Otherwise, use it.  Note the getcwd call below must not be getcwd or else we go into an infinite loop
    */
    if (iosDevFind(path, &tail) != NULL && path != tail) {
        return sclone(path);
    }
    dev = walloc(ME_GOAHEAD_LIMIT_FILENAME);
    getcwd(dev, ME_GOAHEAD_LIMIT_FILENAME);
    strcat(dev, "/");
    strcat(dev, path);
    return dev;
}
예제 #10
0
파일: nfsd.c 프로젝트: netdebug/vxnfsd
statfsres      *
nfsproc_statfs_2(nfs_fh * fhp, struct svc_req * reqp)
{
	static statfsres statfsres;
	vxfh_t         *vxfhp;
	char           *pathp, *dummy;
	DEV_HDR        *devhdrp;
	RT_VOL_DESC    *rt11devp;
	DOS_VOL_DESC   *dosdevp;
	BLK_DEV        *blkp;

	nfsd_debug("statfs\n");

	bzero(&statfsres, sizeof(statfsres));

	vxfhp = (vxfh_t *) fhp;

	if ((pathp = fh2path(vxfhp)) == NULL) {
		statfsres.status = errnoGet();
		nfsd_debugno();
		return (&statfsres);
	}
	if ((devhdrp = iosDevFind(pathp, &dummy)) == NULL) {
		statfsres.status = errnoGet();
		nfsd_debugno();
		return (&statfsres);
	}
	if (vxfhp->type == rt11FsDrvNum) {
		rt11devp = (RT_VOL_DESC *) devhdrp;
		statfsres.statfsres_u.reply.tsize = nfsd_optimal_tsize;
		statfsres.statfsres_u.reply.bsize = RT_BYTES_PER_BLOCK;
		statfsres.statfsres_u.reply.blocks = rt11devp->vd_nblocks;

		/*
		 * XXX - bogus  vlaues -- make it look like all blocks are
		 * available since there's no easy way to tell
		 */
		statfsres.statfsres_u.reply.bfree = rt11devp->vd_nblocks;
		statfsres.statfsres_u.reply.bavail = rt11devp->vd_nblocks;
	} else if (vxfhp->type == dosFsDrvNum) {
		dosdevp = (DOS_VOL_DESC *) devhdrp;
		blkp = dosdevp->dosvd_pBlkDev;
		statfsres.statfsres_u.reply.tsize = nfsd_optimal_tsize;
		statfsres.statfsres_u.reply.bsize = blkp->bd_bytesPerBlk;
		statfsres.statfsres_u.reply.blocks = blkp->bd_nBlocks;

		/*
		 * XXX - bogus  vlaues -- make it look like all blocks are
		 * available since there's no easy way to tell
		 */
		statfsres.statfsres_u.reply.bfree = blkp->bd_nBlocks;
		statfsres.statfsres_u.reply.bavail = blkp->bd_nBlocks;
		/*
		 * save this info for later
		 */
		msdog_bytes_per_block = blkp->bd_nBlocks;
	}
	statfsres.status = NFS_OK;

	return (&statfsres);
}