Example #1
0
/*
 *	Device registration
 */
EXPORT	ER	sdRegistDevice(DrvTab *drv)
{
	ER		er, err;
	GDefDev		ddev;
	DiskInfo	diskinfo;

	/* Disk initialization (read in the partition information)
		Continue processing to register physical device also when error occurs */
	er = (*(drv->DiskInit))(drv);

	/* Set "DiskInfo" */
	sdMakeDiskInfo(drv, &diskinfo);

	/* Registration information */
	ddev = *GDI_ddev(drv->Gdi);
	ddev.drvatr = (drv->Spec.lockreq) ? TDA_LOCKREQ : 0;

	switch(drv->Spec.accif) {
	case MEM_ACCIF:	ddev.devatr = (drv->Spec.readonly) ?
					TDK_DISK_ROM : TDK_DISK_RAM;
			break;
	case ATA_ACCIF:	ddev.devatr = TDK_DISK_HD;
			break;
	case MMC_ACCIF:	ddev.devatr = TDK_DISK_FLA;
			break;
	default:	ddev.devatr = TDK_DISK_UNDEF;
	}

	ddev.devatr |= (drv->DrvNo & 0x3F) << 16;
	ddev.devatr |= (drv->Spec.eject) ? TD_REMOVABLE : 0;
	ddev.devatr |= (drv->Spec.readonly) ? TD_PROTECT : 0;

	ddev.blksz = drv->SecSize;
	ddev.nsub = drv->nSUnit;

	/* (Re)register the device */
	err = GRedefDevice(&ddev, drv->Gdi);
	if (err < E_OK) goto E_EXIT;
	return	er;
E_EXIT:
	return err;
}
Example #2
0
/*
 *	DN_DISKINFO: disk information (R)
 */
LOCAL	INT	accDISKINFO(DrvTab *drv, T_DEVREQ *req)
{
	sdMakeDiskInfo(drv, (DiskInfo*)req->buf);
	return sizeof(DiskInfo);
}