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