Lines Matching refs:disk
105 los_disk *disk = NULL; in los_alloc_diskid_byname() local
122 disk = get_disk(diskID); in los_alloc_diskid_byname()
123 if ((disk != NULL) && (disk->disk_status == STAT_UNUSED)) { in los_alloc_diskid_byname()
124 disk->disk_status = STAT_UNREADY; in los_alloc_diskid_byname()
131 if ((disk == NULL) || (diskID == SYS_MAX_DISK)) { in los_alloc_diskid_byname()
136 if (disk->disk_name != NULL) { in los_alloc_diskid_byname()
137 LOS_MemFree(m_aucSysMem0, disk->disk_name); in los_alloc_diskid_byname()
138 disk->disk_name = NULL; in los_alloc_diskid_byname()
141 disk->disk_name = LOS_MemAlloc(m_aucSysMem0, (nameLen + 1)); in los_alloc_diskid_byname()
142 if (disk->disk_name == NULL) { in los_alloc_diskid_byname()
147 if (strncpy_s(disk->disk_name, (nameLen + 1), diskName, nameLen) != EOK) { in los_alloc_diskid_byname()
149 LOS_MemFree(m_aucSysMem0, disk->disk_name); in los_alloc_diskid_byname()
150 disk->disk_name = NULL; in los_alloc_diskid_byname()
154 disk->disk_name[nameLen] = '\0'; in los_alloc_diskid_byname()
162 los_disk *disk = NULL; in los_get_diskid_byname() local
177 disk = get_disk(diskID); in los_get_diskid_byname()
178 if ((disk != NULL) && (disk->disk_name != NULL) && (disk->disk_status == STAT_INUSED)) { in los_get_diskid_byname()
179 if (strlen(disk->disk_name) != diskNameLen) { in los_get_diskid_byname()
182 if (strcmp(diskName, disk->disk_name) == 0) { in los_get_diskid_byname()
187 if ((disk == NULL) || (diskID == SYS_MAX_DISK)) { in los_get_diskid_byname()
199 los_disk *disk = get_disk(diskId); in los_get_mmcdisk_bytype() local
200 if (disk == NULL) { in los_get_mmcdisk_bytype()
202 …} else if ((disk->type == type) && (strncmp(disk->disk_name, mmcDevHead, strlen(mmcDevHead)) == 0)… in los_get_mmcdisk_bytype()
203 return disk; in los_get_mmcdisk_bytype()
252 los_disk *disk = get_disk((INT32)part->disk_id); in GetFirstPartStart() local
253 firstPart = (disk == NULL) ? NULL : LOS_DL_LIST_ENTRY(disk->head.pstNext, los_part, list); in GetFirstPartStart()
257 static VOID DiskPartAddToDisk(los_disk *disk, los_part *part) in DiskPartAddToDisk() argument
259 part->disk_id = disk->disk_id; in DiskPartAddToDisk()
260 part->part_no_disk = disk->part_count; in DiskPartAddToDisk()
261 LOS_ListTailInsert(&disk->head, &part->list); in DiskPartAddToDisk()
262 disk->part_count++; in DiskPartAddToDisk()
265 static VOID DiskPartDelFromDisk(los_disk *disk, los_part *part) in DiskPartDelFromDisk() argument
268 disk->part_count--; in DiskPartDelFromDisk()
317 static INT32 DiskAddPart(los_disk *disk, UINT64 sectorStart, UINT64 sectorCount, BOOL IsValidPart) in DiskAddPart() argument
325 if ((disk == NULL) || (disk->disk_status == STAT_UNUSED) || in DiskAddPart()
326 (disk->dev == NULL)) { in DiskAddPart()
330 if ((sectorCount > disk->sector_count) || ((disk->sector_count - sectorCount) < sectorStart)) { in DiskAddPart()
335 diskDev = disk->dev; in DiskAddPart()
338 … ((disk->disk_name == NULL) ? "null" : disk->disk_name), 'p', disk->part_count); in DiskAddPart()
365 DiskPartAddToDisk(disk, part); in DiskAddPart()
366 if (disk->type == EMMC) { in DiskAddPart()
372 static INT32 DiskDivide(los_disk *disk, struct disk_divide_info *info) in DiskDivide() argument
377 disk->type = info->part[0].type; in DiskDivide()
389 ret = DiskAddPart(disk, info->part[i].sector_start, info->part[i].sector_count, TRUE); in DiskDivide()
395 ret = DiskAddPart(disk, info->part[i].sector_start, info->part[i].sector_count, TRUE); in DiskDivide()
752 INT32 DiskPartitionRegister(los_disk *disk) in DiskPartitionRegister() argument
763 parInfo.sector_size = disk->sector_size; in DiskPartitionRegister()
764 parInfo.sector_count = disk->sector_count; in DiskPartitionRegister()
765 count = DiskPartitionRecognition(disk->dev, &parInfo); in DiskPartitionRegister()
767 part = get_part(DiskAddPart(disk, 0, disk->sector_count, FALSE)); in DiskPartitionRegister()
772 PRINTK("Disk %s doesn't contain a valid partition table.\n", disk->disk_name); in DiskPartitionRegister()
780 part = get_part(DiskAddPart(disk, 0, disk->sector_count, TRUE)); in DiskPartitionRegister()
794 …part = get_part(DiskAddPart(disk, parInfo.part[i].sector_start, parInfo.part[i].sector_count, TRUE… in DiskPartitionRegister()
807 static INT32 disk_read_directly(los_disk *disk, VOID *buf, UINT64 sector, UINT32 count) in disk_read_directly() argument
810 …struct block_operations *bops = (struct block_operations *)((struct drv_data *)disk->dev->data)->o… in disk_read_directly()
814 if (LOS_IsUserAddressRange((VADDR_T)buf, count * disk->sector_size)) { in disk_read_directly()
816 UINT8 *buffer = disk->buff; in disk_read_directly()
819 result = bops->read(disk->dev, buffer, sector, cnt); in disk_read_directly()
825 if (LOS_CopyFromKernel(buf, disk->sector_size * cnt, buffer, disk->sector_size * cnt)) { in disk_read_directly()
829 buf = (UINT8 *)buf + disk->sector_size * cnt; in disk_read_directly()
833 result = bops->read(disk->dev, buf, sector, count); in disk_read_directly()
842 static INT32 disk_write_directly(los_disk *disk, const VOID *buf, UINT64 sector, UINT32 count) in disk_write_directly() argument
844 …struct block_operations *bops = (struct block_operations *)((struct drv_data *)disk->dev->data)->o… in disk_write_directly()
849 if (LOS_IsUserAddressRange((VADDR_T)buf, count * disk->sector_size)) { in disk_write_directly()
851 UINT8 *buffer = disk->buff; in disk_write_directly()
854 if (LOS_CopyToKernel(buffer, disk->sector_size * cnt, buf, disk->sector_size * cnt)) { in disk_write_directly()
858 result = bops->write(disk->dev, buffer, sector, cnt); in disk_write_directly()
864 buf = (UINT8 *)buf + disk->sector_size * cnt; in disk_write_directly()
868 result = bops->write(disk->dev, buf, sector, count); in disk_write_directly()
884 los_disk *disk = get_disk(drvID); in los_disk_read() local
890 if (disk == NULL) { in los_disk_read()
894 DISK_LOCK(&disk->disk_mutex); in los_disk_read()
896 if (disk->disk_status != STAT_INUSED) { in los_disk_read()
900 if ((count > disk->sector_count) || ((disk->sector_count - count) < sector)) { in los_disk_read()
905 if (disk->bcache != NULL) { in los_disk_read()
906 if (((UINT64)(disk->bcache->sectorSize) * count) > UINT_MAX) { in los_disk_read()
909 len = disk->bcache->sectorSize * count; in los_disk_read()
911 result = BlockCacheRead(disk->bcache, (UINT8 *)buf, &len, sector, useRead); in los_disk_read()
919 if (disk->dev == NULL) { in los_disk_read()
922 result = disk_read_directly(disk, buf, sector, count); in los_disk_read()
928 DISK_UNLOCK(&disk->disk_mutex); in los_disk_read()
932 DISK_UNLOCK(&disk->disk_mutex); in los_disk_read()
942 los_disk *disk = get_disk(drvID); in los_disk_write() local
943 if (disk == NULL || disk->dev == NULL || disk->dev->data == NULL) { in los_disk_write()
951 DISK_LOCK(&disk->disk_mutex); in los_disk_write()
953 if (disk->disk_status != STAT_INUSED) { in los_disk_write()
957 if ((count > disk->sector_count) || ((disk->sector_count - count) < sector)) { in los_disk_write()
962 if (disk->bcache != NULL) { in los_disk_write()
963 if (((UINT64)(disk->bcache->sectorSize) * count) > UINT_MAX) { in los_disk_write()
966 len = disk->bcache->sectorSize * count; in los_disk_write()
967 result = BlockCacheWrite(disk->bcache, (const UINT8 *)buf, &len, sector); in los_disk_write()
975 if (disk->dev == NULL) { in los_disk_write()
978 result = disk_write_directly(disk, buf, sector, count); in los_disk_write()
984 DISK_UNLOCK(&disk->disk_mutex); in los_disk_write()
988 DISK_UNLOCK(&disk->disk_mutex); in los_disk_write()
995 los_disk *disk = get_disk(drvID); in los_disk_ioctl() local
996 if (disk == NULL) { in los_disk_ioctl()
1000 DISK_LOCK(&disk->disk_mutex); in los_disk_ioctl()
1002 if ((disk->dev == NULL) || (disk->disk_status != STAT_INUSED)) { in los_disk_ioctl()
1007 DISK_UNLOCK(&disk->disk_mutex); in los_disk_ioctl()
1017 …struct block_operations *bops = (struct block_operations *)((struct drv_data *)disk->dev->data)->o… in los_disk_ioctl()
1019 (bops->geometry(disk->dev, &info) != 0)) { in los_disk_ioctl()
1037 DISK_UNLOCK(&disk->disk_mutex); in los_disk_ioctl()
1041 DISK_UNLOCK(&disk->disk_mutex); in los_disk_ioctl()
1048 los_disk *disk = NULL; in los_part_read() local
1055 disk = get_disk((INT32)part->disk_id); in los_part_read()
1056 if (disk == NULL) { in los_part_read()
1060 DISK_LOCK(&disk->disk_mutex); in los_part_read()
1061 if ((part->dev == NULL) || (disk->disk_status != STAT_INUSED)) { in los_part_read()
1072 if ((disk->sector_count - part->sector_start) > sector) { in los_part_read()
1093 DISK_UNLOCK(&disk->disk_mutex); in los_part_read()
1097 DISK_UNLOCK(&disk->disk_mutex); in los_part_read()
1104 los_disk *disk = NULL; in los_part_write() local
1111 disk = get_disk((INT32)part->disk_id); in los_part_write()
1112 if (disk == NULL) { in los_part_write()
1116 DISK_LOCK(&disk->disk_mutex); in los_part_write()
1117 if ((part->dev == NULL) || (disk->disk_status != STAT_INUSED)) { in los_part_write()
1128 if ((disk->sector_count - part->sector_start) > sector) { in los_part_write()
1148 DISK_UNLOCK(&disk->disk_mutex); in los_part_write()
1152 DISK_UNLOCK(&disk->disk_mutex); in los_part_write()
1162 los_disk *disk = NULL; in los_part_ioctl() local
1168 disk = get_disk((INT32)part->disk_id); in los_part_ioctl()
1169 if (disk == NULL) { in los_part_ioctl()
1173 DISK_LOCK(&disk->disk_mutex); in los_part_ioctl()
1174 if ((part->dev == NULL) || (disk->disk_status != STAT_INUSED)) { in los_part_ioctl()
1179 DISK_UNLOCK(&disk->disk_mutex); in los_part_ioctl()
1211 DISK_UNLOCK(&disk->disk_mutex); in los_part_ioctl()
1215 DISK_UNLOCK(&disk->disk_mutex); in los_part_ioctl()
1224 los_disk *disk = NULL; in los_disk_cache_clear() local
1235 disk = get_disk(part->disk_id); in los_disk_cache_clear()
1236 if (disk == NULL) { in los_disk_cache_clear()
1240 DISK_LOCK(&disk->disk_mutex); in los_disk_cache_clear()
1241 result = BcacheClearCache(disk->bcache); in los_disk_cache_clear()
1242 DISK_UNLOCK(&disk->disk_mutex); in los_disk_cache_clear()
1291 static VOID DiskCacheDeinit(los_disk *disk) in DiskCacheDeinit() argument
1293 UINT32 diskID = disk->disk_id; in DiskCacheDeinit()
1295 if (BcacheAsyncPrereadDeinit(disk->bcache) != LOS_OK) { in DiskCacheDeinit()
1299 BcacheSyncThreadDeinit(disk->bcache); in DiskCacheDeinit()
1303 BlockCacheDeinit(disk->bcache); in DiskCacheDeinit()
1304 disk->bcache = NULL; in DiskCacheDeinit()
1313 struct Vnode *blkDriver, los_disk *disk) in DiskStructInit() argument
1316 disk->disk_id = diskID; in DiskStructInit()
1317 disk->dev = blkDriver; in DiskStructInit()
1318 disk->sector_start = 0; in DiskStructInit()
1319 disk->sector_size = diskInfo->geo_sectorsize; in DiskStructInit()
1320 disk->sector_count = diskInfo->geo_nsectors; in DiskStructInit()
1324 if (disk->disk_name != NULL) { in DiskStructInit()
1325 LOS_MemFree(m_aucSysMem0, disk->disk_name); in DiskStructInit()
1326 disk->disk_name = NULL; in DiskStructInit()
1329 disk->disk_name = LOS_MemAlloc(m_aucSysMem0, (nameLen + 1)); in DiskStructInit()
1330 if (disk->disk_name == NULL) { in DiskStructInit()
1335 if (strncpy_s(disk->disk_name, (nameLen + 1), diskName, nameLen) != EOK) { in DiskStructInit()
1337 LOS_MemFree(m_aucSysMem0, disk->disk_name); in DiskStructInit()
1338 disk->disk_name = NULL; in DiskStructInit()
1341 disk->disk_name[nameLen] = '\0'; in DiskStructInit()
1342 LOS_ListInit(&disk->head); in DiskStructInit()
1345 static INT32 DiskDivideAndPartitionRegister(struct disk_divide_info *info, los_disk *disk) in DiskDivideAndPartitionRegister() argument
1350 ret = DiskDivide(disk, info); in DiskDivideAndPartitionRegister()
1356 ret = DiskPartitionRegister(disk); in DiskDivideAndPartitionRegister()
1365 static INT32 DiskDeinit(los_disk *disk) in DiskDeinit() argument
1372 if (LOS_ListEmpty(&disk->head) == FALSE) { in DiskDeinit()
1373 part = LOS_DL_LIST_ENTRY(disk->head.pstNext, los_part, list); in DiskDeinit()
1374 while (&part->list != &disk->head) { in DiskDeinit()
1375 diskName = (disk->disk_name == NULL) ? "null" : disk->disk_name; in DiskDeinit()
1377 diskName, 'p', disk->part_count - 1); in DiskDeinit()
1381 DiskPartDelFromDisk(disk, part); in DiskDeinit()
1385 part = LOS_DL_LIST_ENTRY(disk->head.pstNext, los_part, list); in DiskDeinit()
1389 DISK_LOCK(&disk->disk_mutex); in DiskDeinit()
1392 DiskCacheDeinit(disk); in DiskDeinit()
1394 if (disk->buff != NULL) { in DiskDeinit()
1395 free(disk->buff); in DiskDeinit()
1399 disk->dev = NULL; in DiskDeinit()
1400 DISK_UNLOCK(&disk->disk_mutex); in DiskDeinit()
1401 (VOID)unregister_blockdriver(disk->disk_name); in DiskDeinit()
1402 if (disk->disk_name != NULL) { in DiskDeinit()
1403 LOS_MemFree(m_aucSysMem0, disk->disk_name); in DiskDeinit()
1404 disk->disk_name = NULL; in DiskDeinit()
1406 ret = pthread_mutex_destroy(&disk->disk_mutex); in DiskDeinit()
1412 disk->disk_status = STAT_UNUSED; in DiskDeinit()
1417 static UINT32 OsDiskInitSub(const CHAR *diskName, INT32 diskID, los_disk *disk, in OsDiskInitSub() argument
1426 disk->bcache = bc; in OsDiskInitSub()
1431 (VOID)pthread_mutex_init(&disk->disk_mutex, &attr); in OsDiskInitSub()
1433 DiskStructInit(diskName, diskID, diskInfo, blkDriver, disk); in OsDiskInitSub()
1436 disk->buff = malloc(diskInfo->geo_sectorsize * DISK_DIRECT_BUFFER_SIZE); in OsDiskInitSub()
1437 if (disk->buff == NULL) { in OsDiskInitSub()
1451 los_disk *disk = get_disk(diskID); in los_disk_init() local
1454 if ((diskName == NULL) || (disk == NULL) || in los_disk_init()
1455 (disk->disk_status != STAT_UNREADY) || (strlen(diskName) > DISK_NAME)) { in los_disk_init()
1481 ret = OsDiskInitSub(diskName, diskID, disk, &diskInfo, blkDriver); in los_disk_init()
1483 (VOID)DiskDeinit(disk); in los_disk_init()
1488 if (DiskDivideAndPartitionRegister(info, disk) != ENOERR) { in los_disk_init()
1489 (VOID)DiskDeinit(disk); in los_disk_init()
1493 disk->disk_status = STAT_INUSED; in los_disk_init()
1495 disk->type = EMMC; in los_disk_init()
1497 disk->type = OTHERS; in los_disk_init()
1512 los_disk *disk = get_disk(diskID); in los_disk_deinit() local
1513 if (disk == NULL) { in los_disk_deinit()
1516 ret = ForceUmountDev(disk->dev); in los_disk_deinit()
1517 PRINTK("warning: %s lost, force umount ret = %d\n", disk->disk_name, ret); in los_disk_deinit()
1519 DISK_LOCK(&disk->disk_mutex); in los_disk_deinit()
1521 if (disk->disk_status != STAT_INUSED) { in los_disk_deinit()
1522 DISK_UNLOCK(&disk->disk_mutex); in los_disk_deinit()
1526 disk->disk_status = STAT_UNREADY; in los_disk_deinit()
1527 DISK_UNLOCK(&disk->disk_mutex); in los_disk_deinit()
1529 return DiskDeinit(disk); in los_disk_deinit()
1535 los_disk *disk = get_disk(drvID); in los_disk_sync() local
1536 if (disk == NULL) { in los_disk_sync()
1540 DISK_LOCK(&disk->disk_mutex); in los_disk_sync()
1541 if (disk->disk_status != STAT_INUSED) { in los_disk_sync()
1542 DISK_UNLOCK(&disk->disk_mutex); in los_disk_sync()
1547 if (disk->bcache != NULL) { in los_disk_sync()
1548 ret = BlockCacheSync(disk->bcache); in los_disk_sync()
1552 DISK_UNLOCK(&disk->disk_mutex); in los_disk_sync()
1563 los_disk *disk = get_disk(drvID); in los_disk_set_bcache() local
1564 if ((disk == NULL) || (sectorPerBlock == 0)) { in los_disk_set_bcache()
1577 DISK_LOCK(&disk->disk_mutex); in los_disk_set_bcache()
1579 if (disk->disk_status != STAT_INUSED) { in los_disk_set_bcache()
1583 if (disk->bcache != NULL) { in los_disk_set_bcache()
1584 ret = BlockCacheSync(disk->bcache); in los_disk_set_bcache()
1586 DISK_UNLOCK(&disk->disk_mutex); in los_disk_set_bcache()
1592 DiskCacheDeinit(disk); in los_disk_set_bcache()
1597 …bc = BlockCacheInit(disk->dev, disk->sector_size, sectorPerBlock, blockNum, disk->sector_count / s… in los_disk_set_bcache()
1600 DISK_UNLOCK(&disk->disk_mutex); in los_disk_set_bcache()
1608 disk->bcache = bc; in los_disk_set_bcache()
1610 DISK_UNLOCK(&disk->disk_mutex); in los_disk_set_bcache()
1614 DISK_UNLOCK(&disk->disk_mutex); in los_disk_set_bcache()
1621 static los_part *OsPartFind(los_disk *disk, const struct Vnode *blkDriver) in OsPartFind() argument
1625 DISK_LOCK(&disk->disk_mutex); in OsPartFind()
1626 if ((disk->disk_status != STAT_INUSED) || (LOS_ListEmpty(&disk->head) == TRUE)) { in OsPartFind()
1629 part = LOS_DL_LIST_ENTRY(disk->head.pstNext, los_part, list); in OsPartFind()
1630 if (disk->dev == blkDriver) { in OsPartFind()
1634 while (&part->list != &disk->head) { in OsPartFind()
1643 DISK_UNLOCK(&disk->disk_mutex); in OsPartFind()
1650 los_disk *disk = NULL; in los_part_find() local
1658 disk = get_disk(i); in los_part_find()
1659 if (disk == NULL) { in los_part_find()
1662 part = OsPartFind(disk, blkDriver); in los_part_find()
1694 los_disk *disk = NULL; in SetDiskPartName() local
1705 disk = get_disk((INT32)part->disk_id); in SetDiskPartName()
1706 if (disk == NULL) { in SetDiskPartName()
1710 DISK_LOCK(&disk->disk_mutex); in SetDiskPartName()
1711 if (disk->disk_status != STAT_INUSED) { in SetDiskPartName()
1727 DISK_UNLOCK(&disk->disk_mutex); in SetDiskPartName()
1731 DISK_UNLOCK(&disk->disk_mutex); in SetDiskPartName()
1791 los_disk *disk = get_disk((INT32)diskID); in EraseDiskByID() local
1792 if (disk != NULL) { in EraseDiskByID()