Lines Matching refs:disk

18 static void blk_remove_all(struct rt_blk_disk *disk)  in blk_remove_all()  argument
23 rt_list_for_each_entry_safe(blk, blk_next, &disk->part_nodes, list) in blk_remove_all()
31 struct rt_blk_disk *disk = to_blk_disk(dev); in blk_open() local
33 if (disk->read_only && (oflag & RT_DEVICE_OFLAG_WRONLY)) in blk_open()
50 struct rt_blk_disk *disk = to_blk_disk(dev); in blk_read() local
52 rt_sem_take(&disk->usr_lock, RT_WAITING_FOREVER); in blk_read()
54 res = disk->ops->read(disk, sector, buffer, sector_count); in blk_read()
56 rt_sem_release(&disk->usr_lock); in blk_read()
65 struct rt_blk_disk *disk = to_blk_disk(dev); in blk_write() local
67 if (!disk->read_only) in blk_write()
69 rt_sem_take(&disk->usr_lock, RT_WAITING_FOREVER); in blk_write()
71 res = disk->ops->write(disk, sector, buffer, sector_count); in blk_write()
73 rt_sem_release(&disk->usr_lock); in blk_write()
84 struct rt_blk_disk *disk = to_blk_disk(dev); in blk_parallel_read() local
86 return disk->ops->read(disk, sector, buffer, sector_count); in blk_parallel_read()
92 struct rt_blk_disk *disk = to_blk_disk(dev); in blk_parallel_write() local
94 if (!disk->read_only) in blk_parallel_write()
96 return disk->ops->write(disk, sector, buffer, sector_count); in blk_parallel_write()
105 struct rt_blk_disk *disk = to_blk_disk(dev); in blk_control() local
112 err = disk->ops->getgeome(disk, args); in blk_control()
122 if (disk->ops->sync) in blk_control()
124 rt_sem_take(&disk->usr_lock, RT_WAITING_FOREVER); in blk_control()
126 spin_lock(&disk->lock); in blk_control()
128 err = disk->ops->sync(disk); in blk_control()
130 spin_unlock(&disk->lock); in blk_control()
132 rt_sem_release(&disk->usr_lock); in blk_control()
141 if (disk->ops->erase) in blk_control()
143 rt_sem_take(&disk->usr_lock, RT_WAITING_FOREVER); in blk_control()
145 spin_lock(&disk->lock); in blk_control()
147 if (disk->parent.ref_count != 1) in blk_control()
153 blk_remove_all(disk); in blk_control()
155 err = disk->ops->erase(disk); in blk_control()
158 spin_unlock(&disk->lock); in blk_control()
160 rt_sem_release(&disk->usr_lock); in blk_control()
169 if (disk->ops->autorefresh) in blk_control()
171 err = disk->ops->autorefresh(disk, !!args); in blk_control()
194 if (disk->ops->control) in blk_control()
196 err = disk->ops->control(disk, RT_NULL, cmd, args); in blk_control()
228 rt_err_t rt_hw_blk_disk_register(struct rt_blk_disk *disk) in rt_hw_blk_disk_register() argument
237 if (!disk || !disk->ops) in rt_hw_blk_disk_register()
243 if (!disk->ida) in rt_hw_blk_disk_register()
250 if (disk->parent.parent.name[0] == '\0') in rt_hw_blk_disk_register()
252 if (disk->parent.parent.name) in rt_hw_blk_disk_register()
259 if ((device_id = rt_dm_ida_alloc(disk->ida)) < 0) in rt_hw_blk_disk_register()
265 disk->__magic = RT_BLK_DISK_MAGIC; in rt_hw_blk_disk_register()
266 disk_name = to_disk_name(disk); in rt_hw_blk_disk_register()
268 err = rt_sem_init(&disk->usr_lock, disk_name, 1, RT_IPC_FLAG_PRIO); in rt_hw_blk_disk_register()
273 rt_dm_ida_free(disk->ida, device_id); in rt_hw_blk_disk_register()
281 rt_list_init(&disk->part_nodes); in rt_hw_blk_disk_register()
282 rt_spin_lock_init(&disk->lock); in rt_hw_blk_disk_register()
284 disk->parent.type = RT_Device_Class_Block; in rt_hw_blk_disk_register()
286 if (disk->parallel_io) in rt_hw_blk_disk_register()
288 disk->parent.ops = &blk_parallel_ops; in rt_hw_blk_disk_register()
292 disk->parent.ops = &blk_ops; in rt_hw_blk_disk_register()
295 disk->parent.open = blk_open; in rt_hw_blk_disk_register()
296 disk->parent.close = blk_close; in rt_hw_blk_disk_register()
298 if (disk->parallel_io) in rt_hw_blk_disk_register()
300 disk->parent.read = blk_parallel_read; in rt_hw_blk_disk_register()
301 disk->parent.write = blk_parallel_write; in rt_hw_blk_disk_register()
305 disk->parent.read = blk_read; in rt_hw_blk_disk_register()
306 disk->parent.write = blk_write; in rt_hw_blk_disk_register()
308 disk->parent.control = blk_control; in rt_hw_blk_disk_register()
311 if (!disk->ops->write) in rt_hw_blk_disk_register()
313 disk->read_only = RT_TRUE; in rt_hw_blk_disk_register()
316 if (!disk->read_only) in rt_hw_blk_disk_register()
322 disk->parent.master_id = disk->ida->master_id; in rt_hw_blk_disk_register()
323 disk->parent.device_id = device_id; in rt_hw_blk_disk_register()
325 device_set_blk_fops(&disk->parent); in rt_hw_blk_disk_register()
327 err = rt_device_register(&disk->parent, disk_name, flags); in rt_hw_blk_disk_register()
331 rt_sem_detach(&disk->usr_lock); in rt_hw_blk_disk_register()
335 rt_blk_disk_probe_partition(disk); in rt_hw_blk_disk_register()
340 rt_err_t rt_hw_blk_disk_unregister(struct rt_blk_disk *disk) in rt_hw_blk_disk_unregister() argument
344 if (!disk) in rt_hw_blk_disk_unregister()
349 spin_lock(&disk->lock); in rt_hw_blk_disk_unregister()
351 if (disk->parent.ref_count > 0) in rt_hw_blk_disk_unregister()
358 if (disk->ops->sync) in rt_hw_blk_disk_unregister()
360 err = disk->ops->sync(disk); in rt_hw_blk_disk_unregister()
364 LOG_E("%s: Sync error = %s", to_disk_name(disk), rt_strerror(err)); in rt_hw_blk_disk_unregister()
370 rt_sem_detach(&disk->usr_lock); in rt_hw_blk_disk_unregister()
372 blk_remove_all(disk); in rt_hw_blk_disk_unregister()
375 rt_dm_ida_free(disk->ida, disk->parent.device_id); in rt_hw_blk_disk_unregister()
378 err = rt_device_unregister(&disk->parent); in rt_hw_blk_disk_unregister()
381 spin_unlock(&disk->lock); in rt_hw_blk_disk_unregister()
386 rt_ssize_t rt_blk_disk_get_capacity(struct rt_blk_disk *disk) in rt_blk_disk_get_capacity() argument
391 if (!disk) in rt_blk_disk_get_capacity()
396 res = disk->ops->getgeome(disk, &geometry); in rt_blk_disk_get_capacity()
406 rt_ssize_t rt_blk_disk_get_logical_block_size(struct rt_blk_disk *disk) in rt_blk_disk_get_logical_block_size() argument
411 if (!disk) in rt_blk_disk_get_logical_block_size()
416 res = disk->ops->getgeome(disk, &geometry); in rt_blk_disk_get_logical_block_size()
432 struct rt_blk_disk *disk; in blk_dfs_mnt_table() local
447 disk = to_blk_disk(dev); in blk_dfs_mnt_table()
449 if (disk->__magic != RT_BLK_DISK_MAGIC) in blk_dfs_mnt_table()
454 if (disk->max_partitions == RT_BLK_PARTITION_NONE) in blk_dfs_mnt_table()
456 dfs_mount_device(&disk->parent); in blk_dfs_mnt_table()
460 rt_list_for_each_entry(blk_dev, &disk->part_nodes, list) in blk_dfs_mnt_table()
508 struct rt_blk_disk *disk; in list_blk() local
526 disk = to_blk_disk(dev); in list_blk()
528 if (disk->__magic != RT_BLK_DISK_MAGIC) in list_blk()
533 if (disk->ops->getgeome(disk, &geome)) in list_blk()
541 RT_NAME_MAX, to_disk_name(disk), in list_blk()
543 disk->parent.master_id, disk->parent.device_id, in list_blk()
547 disk->removable, cap, minor, size_name, disk->read_only, in list_blk()
548 disk->max_partitions != RT_BLK_PARTITION_NONE ? "\b" : in list_blk()
549 (dfs_filesystem_get_mounted_path(&disk->parent) ? : "\b")); in list_blk()
551 rt_list_for_each_entry(blk_dev, &disk->part_nodes, list) in list_blk()
556 blk_dev->list.next != &disk->part_nodes ? '|' : '`', in list_blk()
563 disk->removable, cap, minor, size_name, disk->read_only, in list_blk()