/* * 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; }
/* * DN_DISKINFO: disk information (R) */ LOCAL INT accDISKINFO(DrvTab *drv, T_DEVREQ *req) { sdMakeDiskInfo(drv, (DiskInfo*)req->buf); return sizeof(DiskInfo); }