1/* 2 * Copyright 2003-2007, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _FSSH_DISK_DEVICE_MANAGER_H 6#define _FSSH_DISK_DEVICE_MANAGER_H 7 8 9#include "fssh_disk_device_defs.h" 10#include "fssh_drivers.h" 11 12 13#ifdef __cplusplus 14extern "C" { 15#endif 16 17// C API partition representation 18// Fields marked [sys] are set by the system and are not to be changed by 19// the disk system modules. 20typedef struct fssh_partition_data { 21 fssh_partition_id id; // [sys] 22 fssh_off_t offset; 23 fssh_off_t size; 24 fssh_off_t content_size; 25 uint32_t block_size; 26 int32_t child_count; 27 int32_t index; // [sys] 28 uint32_t status; 29 uint32_t flags; 30 fssh_dev_t volume; // [sys] 31 void *mount_cookie; // [sys] 32 char *name; // max: B_OS_NAME_LENGTH 33 char *content_name; // 34 char *type; // 35 const char *content_type; // [sys] 36 char *parameters; 37 char *content_parameters; 38 void *cookie; 39 void *content_cookie; 40} fssh_partition_data; 41 42// C API disk device representation 43typedef struct fssh_disk_device_data { 44 fssh_partition_id id; // equal to that of the root partition 45 uint32_t flags; 46 char *path; 47 fssh_device_geometry geometry; 48} fssh_disk_device_data; 49 50// C API partitionable space representation 51typedef struct fssh_partitionable_space_data { 52 fssh_off_t offset; 53 fssh_off_t size; 54} fssh_partitionable_space_data; 55 56// operations on partitions 57enum { 58 FSSH_B_PARTITION_DEFRAGMENT, 59 FSSH_B_PARTITION_REPAIR, 60 FSSH_B_PARTITION_RESIZE, 61 FSSH_B_PARTITION_RESIZE_CHILD, 62 FSSH_B_PARTITION_MOVE, 63 FSSH_B_PARTITION_MOVE_CHILD, 64 FSSH_B_PARTITION_SET_NAME, 65 FSSH_B_PARTITION_SET_CONTENT_NAME, 66 FSSH_B_PARTITION_SET_TYPE, 67 FSSH_B_PARTITION_SET_PARAMETERS, 68 FSSH_B_PARTITION_SET_CONTENT_PARAMETERS, 69 FSSH_B_PARTITION_INITIALIZE, 70 FSSH_B_PARTITION_CREATE_CHILD, 71 FSSH_B_PARTITION_DELETE_CHILD, 72}; 73 74// disk device job cancel status 75enum { 76 FSSH_B_DISK_DEVICE_JOB_CONTINUE, 77 FSSH_B_DISK_DEVICE_JOB_CANCEL, 78 FSSH_B_DISK_DEVICE_JOB_REVERSE, 79}; 80 81// disk device locking 82fssh_disk_device_data* fssh_write_lock_disk_device( 83 fssh_partition_id partitionID); 84void fssh_write_unlock_disk_device( 85 fssh_partition_id partitionID); 86fssh_disk_device_data* fssh_read_lock_disk_device( 87 fssh_partition_id partitionID); 88void fssh_read_unlock_disk_device( 89 fssh_partition_id partitionID); 90 // parameter is the ID of any partition on the device 91 92// getting disk devices/partitions by path 93// (no locking required) 94int32_t fssh_find_disk_device(const char *path); 95int32_t fssh_find_partition(const char *path); 96 97// disk device/partition read access 98// (read lock required) 99fssh_disk_device_data* fssh_get_disk_device(fssh_partition_id partitionID); 100fssh_partition_data* fssh_get_partition(fssh_partition_id partitionID); 101fssh_partition_data* fssh_get_parent_partition( 102 fssh_partition_id partitionID); 103fssh_partition_data* fssh_get_child_partition(fssh_partition_id partitionID, 104 int32_t index); 105 106// partition write access 107// (write lock required) 108fssh_partition_data* fssh_create_child_partition( 109 fssh_partition_id partitionID, int32_t index, 110 fssh_partition_id childID); 111 // childID is an optional input parameter -- -1 to be ignored 112bool fssh_delete_partition(fssh_partition_id partitionID); 113void fssh_partition_modified(fssh_partition_id partitionID); 114 // tells the disk device manager, that the parition has been modified 115 116fssh_status_t fssh_scan_partition(fssh_partition_id partitionID); 117 // Service method for disks systems: Synchronously scans the partition. 118 // Device must not be locked. 119 120// disk systems 121fssh_disk_system_id fssh_find_disk_system(const char *name); 122 123// jobs 124bool fssh_update_disk_device_job_progress(fssh_disk_job_id jobID, 125 float progress); 126bool fssh_update_disk_device_job_extra_progress(fssh_disk_job_id jobID, 127 const char *info); 128bool fssh_set_disk_device_job_error_message(fssh_disk_job_id jobID, 129 const char *message); 130uint32_t fssh_update_disk_device_job_interrupt_properties( 131 fssh_disk_job_id jobID, uint32_t interruptProperties); 132 // returns one of B_DISK_DEVICE_JOB_{CONTINUE,CANCEL,REVERSE} 133 134#ifdef __cplusplus 135} 136#endif 137 138#endif // _FSSH_DISK_DEVICE_MANAGER_H 139