1 /*
2 libparted - a library for manipulating disk partitions
3 Copyright (C) 1998 - 2001, 2005, 2007 Free Software Foundation, Inc.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 /**
20 * \addtogroup PedDevice
21 * @{
22 */
23
24 /** \file device.h */
25
26 #ifndef PED_DEVICE_H_INCLUDED
27 #define PED_DEVICE_H_INCLUDED
28
29 #include <parted/timer.h>
30
31 /** We can address 2^63 sectors */
32 typedef long long PedSector;
33
34 /** \deprecated Removal from API planned */
35 typedef enum {
36 PED_DEVICE_UNKNOWN = 0,
37 PED_DEVICE_SCSI = 1,
38 PED_DEVICE_IDE = 2,
39 PED_DEVICE_DAC960 = 3,
40 PED_DEVICE_CPQARRAY = 4,
41 PED_DEVICE_FILE = 5,
42 PED_DEVICE_ATARAID = 6,
43 PED_DEVICE_I2O = 7,
44 PED_DEVICE_UBD = 8,
45 PED_DEVICE_DASD = 9,
46 PED_DEVICE_VIODASD = 10,
47 PED_DEVICE_SX8 = 11,
48 #ifdef ENABLE_DEVICE_MAPPER
49 PED_DEVICE_DM = 12,
50 #endif
51 PED_DEVICE_XVD = 13
52 } PedDeviceType;
53
54 typedef struct _PedDevice PedDevice;
55 typedef struct _PedDeviceArchOps PedDeviceArchOps;
56 typedef struct _PedCHSGeometry PedCHSGeometry;
57
58 /**
59 * A cylinder-head-sector "old-style" geometry.
60 *
61 * A device addressed in this way has C*H*S sectors.
62 */
63 struct _PedCHSGeometry {
64 int cylinders;
65 int heads;
66 int sectors;
67 };
68
69 /** A block device - for example, /dev/hda, not /dev/hda3 */
70 struct _PedDevice {
71 PedDevice* next;
72
73 char* model; /**< \brief description of hardware
74 (manufacturer, model) */
75 char* path; /**< device /dev entry */
76
77 PedDeviceType type; /**< SCSI, IDE, etc.
78 \deprecated \sa PedDeviceType */
79 long long sector_size; /**< logical sector size */
80 long long phys_sector_size; /**< physical sector size */
81 PedSector length; /**< device length (LBA) */
82
83 int open_count; /**< the number of times this device has
84 been opened with ped_device_open(). */
85 int read_only;
86 int external_mode;
87 int dirty;
88 int boot_dirty;
89
90 PedCHSGeometry hw_geom;
91 PedCHSGeometry bios_geom;
92 short host, did;
93
94 void* arch_specific;
95 };
96
97 /**
98 * List of functions implementing architecture-specific operations.
99 */
100 struct _PedDeviceArchOps {
101 PedDevice* (*_new) (const char* path);
102 void (*destroy) (PedDevice* dev);
103 int (*is_busy) (PedDevice* dev);
104 int (*open) (PedDevice* dev);
105 int (*refresh_open) (PedDevice* dev);
106 int (*close) (PedDevice* dev);
107 int (*refresh_close) (PedDevice* dev);
108 int (*read) (const PedDevice* dev, void* buffer,
109 PedSector start, PedSector count);
110 int (*write) (PedDevice* dev, const void* buffer,
111 PedSector start, PedSector count);
112 int (*sync) (PedDevice* dev);
113 int (*sync_fast) (PedDevice* dev);
114 PedSector (*check) (PedDevice* dev, void* buffer,
115 PedSector start, PedSector count);
116 void (*probe_all) ();
117 };
118
119 extern void ped_device_probe_all ();
120 extern void ped_device_free_all ();
121
122 extern PedDevice* ped_device_get (const char* name);
123 extern PedDevice* ped_device_get_next (const PedDevice* dev);
124 extern int ped_device_is_busy (PedDevice* dev);
125 extern int ped_device_open (PedDevice* dev);
126 extern int ped_device_close (PedDevice* dev);
127 extern void ped_device_destroy (PedDevice* dev);
128 extern void ped_device_cache_remove (PedDevice* dev);
129
130 extern int ped_device_begin_external_access (PedDevice* dev);
131 extern int ped_device_end_external_access (PedDevice* dev);
132
133 extern int ped_device_read (const PedDevice* dev, void* buffer,
134 PedSector start, PedSector count);
135 extern int ped_device_write (PedDevice* dev, const void* buffer,
136 PedSector start, PedSector count);
137 extern int ped_device_sync (PedDevice* dev);
138 extern int ped_device_sync_fast (PedDevice* dev);
139 extern PedSector ped_device_check (PedDevice* dev, void* buffer,
140 PedSector start, PedSector count);
141 extern PedConstraint* ped_device_get_constraint (PedDevice* dev);
142
143 /* private stuff ;-) */
144
145 extern void _ped_device_probe (const char* path);
146
147 #endif /* PED_DEVICE_H_INCLUDED */
148
149 /** @} */
150