Beispiel #1
0
FLStatus flRegisterComponents(void)
{
    /* Registering socket interface */

    flprintk(1,"flRegisterComponents: from %x to %x\n",flGetWinL(), flGetWinH());

    if (flRegisterDOCPLUSSOC(flGetWinL(), flGetWinH()) == flOK)
    { /* Register DiskOnChip socket interface */

        /* Registering MTD */
        flRegisterDOCPLUS();

        /* Registering translation layer */
        flRegisterINFTL();

        return flOK;
    }
    
    if (flRegisterDOCSOC(flGetWinL(), flGetWinH()) == flOK) { /* Register DiskOnChip socket interface */

        /* Registering MTD */
        flRegisterDOC2000();

        /* Registering translation layer */
        flRegisterINFTL();	/* Register MCP */

        /* Registering translation layer */
        flRegisterNFTL();

        return flOK;
    }
    return flAdapterNotFound;
}
Beispiel #2
0
/* Perform read or write of appropriate number of sectors from a DOC volume */
int fl_doc_write(int VOL, void *data, int block, int count)
{
	IOreq           ioreq;
	int             status=0;

	ioreq.irHandle = VOL;
	ioreq.irData = data;
	ioreq.irSectorNo = block;
	ioreq.irSectorCount = count;

#ifdef FL_FAT_FILTER
	if ((status = ffCheckBeforeWrite(&ioreq)))
		flprintk(0,"VOL: %d ffCheckBeforeWrite() status %d, block=%d count=%d\n", VOL, status, block, count);
#endif /* FL_FAT_FILTER */		
	if ((status = flAbsWrite(&ioreq)))
		flprintk(0,"VOL: %d flAbsWrite() status %d, block=%d count=%d\n", VOL, status, block, count);
	return (status);
}
Beispiel #3
0
/* Initialize M-Systems OSAK. */
int fl_doc_init()
{
	DEBUG_PRINT("fllnx version: %s\n", FLLNX_VERSION);
	if (flInit())
	{
		flprintk(0,"M-Systems DiskOnChip not found\n");
		return (-1);
	}
	return (0);
}
Beispiel #4
0
/* return 1 if volume read only)*/
int fl_protType(int VOL)
{
	IOreq           ioreq;
	int stat=0;

	ioreq.irHandle = VOL;
	stat=flIdentifyProtection(&ioreq);
	if(!stat)
	{
		if( (ioreq.irFlags&READ_PROTECTED || ioreq.irFlags&WRITE_PROTECTED) && (!(ioreq.irFlags&KEY_INSERTED)) )
		{
			flprintk(1,"fl_protType:%x: Volume protected\n", VOL);
			return 1;
		}
	}
	else
		flprintk(1,"fl_protType:%x: flIdentifyProtection returns %d\n", VOL,stat);
	return 0;
}
Beispiel #5
0
/* Perform read or write of appropriate number of sectors from a DOC volume */
int fl_doc_read(int VOL, void *data, int block, int count)
{
	IOreq ioreq;
	static int status=0;

	ioreq.irHandle = VOL;
	ioreq.irData = data;
	ioreq.irSectorNo = block;
	ioreq.irSectorCount = count;
	if ((status = flAbsRead(&ioreq)))
		flprintk(0,"%d: flAbsRead() status %d, block=%d count=%d\n", VOL, status, block, count);
	return status;
}
Beispiel #6
0
/* Get the number of sectors in the DOC volume */
int fl_doc_sectors(int VOL)
{
	IOreq           ioreq;
	int             status;

	ioreq.irHandle = VOL;
	if ((status = flSectorsInVolume(&ioreq)) != 0)
	{
		flprintk(0,"Cannot get sectors in volume: %d\n", VOL);
		return (0);
	}
	return (ioreq.irLength);
}
Beispiel #7
0
/* Dismount DOC volume */
int fl_doc_dismount(int VOL)
{
	IOreq           ioreq;
	int             status;

	ioreq.irHandle = VOL;
	if ((status = flDismountVolume(&ioreq)) != 0)
	{
		flprintk(0,"fl_doc_dismount: Cannot dismount DOC volume: %d\n", VOL);
		return (-1);
	}
	return (0);
}
Beispiel #8
0
int fl_doc_ioctl(int bdtlVolume, int cmd,unsigned long arg)
{
	unsigned char	bdkVolume=0;
	IOreq           ioreq;
	int             status;

	DEBUG_PRINT("In fl_doc_ioctl: bdtlVolume %d bdkVolume %d command %d\n",bdtlVolume,bdkVolume,cmd);

/* maybe arg doesn't correspond exactly to what irData should be, and so we have to do some unpickling */
	switch (cmd)
	{
	case FL_IOCTL_GET_INFO:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_GET_INFO;
		break;
	case FL_IOCTL_DEFRAGMENT:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_DEFRAGMENT;
		break;
	case FL_IOCTL_WRITE_PROTECT:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_WRITE_PROTECT;
		break;
	case FL_IOCTL_MOUNT_VOLUME:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_MOUNT_VOLUME;
		break;
	case FL_IOCTL_FORMAT_VOLUME:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_FORMAT_VOLUME;
		break;
	case FL_IOCTL_BDK_OPERATION:
		ioreq.irHandle = bdkVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_BDK_OPERATION;
		break;
	case FL_IOCTL_DELETE_SECTORS:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_DELETE_SECTORS;
		break;
	case FL_IOCTL_READ_SECTORS:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_READ_SECTORS;
		break;
	case FL_IOCTL_WRITE_SECTORS:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_WRITE_SECTORS;
		break;
	case FL_IOCTL_FORMAT_PHYSICAL_DRIVE:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_FORMAT_PHYSICAL_DRIVE;
		break;
	case FL_IOCTL_FORMAT_LOGICAL_DRIVE:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_FORMAT_LOGICAL_DRIVE;
		break;
	case FL_IOCTL_BDTL_HW_PROTECTION:
		ioreq.irHandle = bdtlVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_BDTL_HW_PROTECTION;
		break;
	case FL_IOCTL_BINARY_HW_PROTECTION:
		ioreq.irHandle = bdkVolume;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_BINARY_HW_PROTECTION;
		break;
	case FL_IOCTL_OTP:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_OTP;
		break;
	case FL_IOCTL_CUSTOMER_ID:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_CUSTOMER_ID;
		break;
	case FL_IOCTL_UNIQUE_ID:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_UNIQUE_ID;
		break;
	case FL_IOCTL_NUMBER_OF_PARTITIONS:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_NUMBER_OF_PARTITIONS;
		break;
	case FL_IOCTL_INQUIRE_CAPABILITIES:
		ioreq.irHandle = 0;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_INQUIRE_CAPABILITIES;
		break;
	case FL_IOCTL_SET_ENVIRONMENT_VARIABLES:
		ioreq.irHandle = 0;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_SET_ENVIRONMENT_VARIABLES;
		break;
	case FL_IOCTL_PLACE_EXB_BY_BUFFER:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_PLACE_EXB_BY_BUFFER;
		break;
	case FL_IOCTL_WRITE_IPL:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_WRITE_IPL;
		break;
	case FL_IOCTL_DEEP_POWER_DOWN_MODE:
		ioreq.irHandle = bdtlVolume&0x0f;
		ioreq.irData = (void *) arg;
		ioreq.irFlags = FL_IOCTL_DEEP_POWER_DOWN_MODE;
		break;
	case FL_IOCTL_LNX:
		{
			flInputLnxRecord*inRec=(flInputLnxRecord*)(((flIOctlRecord*)arg)->inputRecord);
			flOutputLnxRecord*outRec=(flOutputLnxRecord*)(((flIOctlRecord*)arg)->outputRecord);
			switch( inRec -> command )
			{
			case 0:	// set BKD volume
				bdkVolume=inRec->data;
				return (outRec->status=flOK);
			default:
				return (outRec->status=flBadParameter);
			}
		}
	default:
		return flBadParameter;
	}

	if ((status = flIOctl(&ioreq)))
	{
		flprintk(0,"fl: bdtlVolume: %d flIOctl() status %d, cmd=%d", bdtlVolume, status, cmd);
	}
	return (status);
}