xref: /onnv-gate/usr/src/lib/libparted/common/include/parted/device.h (revision 9663:ace9a2ac3683)
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 
151