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