]>
Commit | Line | Data |
---|---|---|
3cb6c502 TT |
1 | /* |
2 | * v1.0 | |
3 | * | |
4 | * Disk I/O include file for the ext2fs/DOS library. | |
5 | * | |
6 | * Copyright (c) 1997 Mark Habersack | |
3cb6c502 | 7 | * |
543547a5 TT |
8 | * %Begin-Header% |
9 | * This file may be redistributed under the terms of the GNU Library | |
10 | * General Public License, version 2. | |
11 | * %End-Header% | |
3cb6c502 | 12 | */ |
543547a5 | 13 | |
3cb6c502 TT |
14 | #ifndef __diskio_h |
15 | #define __diskio_h | |
16 | #ifdef __TURBOC__ | |
17 | #ifndef __LARGE__ | |
18 | # error "ext2fs/DOS library requires LARGE model!" | |
19 | #endif | |
20 | #endif | |
21 | ||
22 | #ifdef __TURBOC__ | |
23 | #include "msdos.h" | |
24 | #endif | |
25 | ||
26 | /* | |
27 | * A helper structure used in LBA => CHS conversion | |
28 | */ | |
29 | typedef struct | |
30 | { | |
31 | unsigned short cyl; /* Cylinder (or track) */ | |
32 | unsigned short head; | |
33 | unsigned short sector; | |
34 | unsigned short offset; /* Offset of byte within the sector */ | |
35 | } CHS; | |
36 | ||
37 | /* | |
38 | * All partition data we need is here | |
39 | */ | |
40 | typedef struct | |
41 | { | |
42 | char *dev; /* _Linux_ device name (like "/dev/hda1") */ | |
43 | unsigned char phys; /* Physical DOS drive number */ | |
44 | unsigned long start; /* LBA address of partition start */ | |
45 | unsigned long len; /* length of partition in sectors */ | |
46 | unsigned char pno; /* Partition number (read from *dev) */ | |
47 | ||
48 | /* This partition's drive geometry */ | |
49 | unsigned short cyls; | |
50 | unsigned short heads; | |
51 | unsigned short sects; | |
52 | } PARTITION; | |
53 | ||
54 | /* | |
55 | * PC partition table entry format | |
56 | */ | |
57 | #ifdef __DJGPP__ | |
58 | #pragma pack(1) | |
59 | #endif | |
60 | typedef struct | |
61 | { | |
62 | unsigned char active; | |
63 | unsigned char start_head; | |
64 | unsigned char start_sec; | |
65 | unsigned char start_cyl; | |
66 | unsigned char type; | |
67 | unsigned char end_head; | |
68 | unsigned char end_sec; | |
69 | unsigned char end_cyl; | |
70 | unsigned long first_sec_rel; | |
71 | unsigned long size; | |
72 | } PTABLE_ENTRY; | |
73 | #ifdef __DJGPP__ | |
74 | #pragma pack() | |
75 | #endif | |
76 | ||
77 | /* | |
78 | * INT 0x13 operation codes | |
79 | */ | |
80 | #define DISK_READ 0x02 | |
81 | #define DISK_WRITE 0x03 | |
82 | #define DISK_GET_GEOMETRY 0x08 | |
83 | #define DISK_READY 0x10 | |
84 | ||
85 | /* | |
86 | * Errors to put in _dio_error | |
87 | */ | |
88 | #define ERR_BADDEV 0x00000001L | |
89 | #define ERR_HARDWARE 0x00000002L | |
90 | #define ERR_NOTSUPP 0x00000003L | |
91 | #define ERR_NOTEXT2FS 0x00000004L | |
92 | #define ERR_EMPTYPART 0x00000005L | |
93 | #define ERR_LINUXSWAP 0x00000006L | |
94 | ||
95 | /* | |
96 | * Functions in diskio.c | |
97 | */ | |
98 | ||
99 | /* | |
100 | * Variable contains last module's error | |
101 | */ | |
102 | extern unsigned long _dio_error; | |
103 | ||
104 | /* | |
105 | * This one contains last hardware error (if _dio_error == ERR_HARDWARE) | |
106 | */ | |
107 | extern unsigned long _dio_hw_error; | |
108 | ||
109 | /* | |
110 | * Macros to check for disk hardware errors | |
111 | */ | |
112 | #define HW_OK() ((unsigned char)_dio_hw_error == 0x00) | |
113 | #define HW_BAD_CMD() ((unsigned char)_dio_hw_error == 0x01) | |
114 | #define HW_NO_ADDR_MARK() ((unsigned char)_dio_hw_error == 0x02) | |
115 | #define HW_WRITE_PROT() ((unsigned char)_dio_hw_error == 0x03) | |
116 | #define HW_NO_SECTOR() ((unsigned char)_dio_hw_error == 0x04) | |
117 | #define HW_RESET_FAIL() ((unsigned char)_dio_hw_error == 0x05) | |
118 | #define HW_DISK_CHANGED() ((unsigned char)_dio_hw_error == 0x06) | |
119 | #define HW_DRIVE_FAIL() ((unsigned char)_dio_hw_error == 0x07) | |
120 | #define HW_DMA_OVERRUN() ((unsigned char)_dio_hw_error == 0x08) | |
121 | #define HW_DMA_BOUNDARY() ((unsigned char)_dio_hw_error == 0x09) | |
122 | #define HW_BAD_SECTOR() ((unsigned char)_dio_hw_error == 0x0A) | |
123 | #define HW_BAD_TRACK() ((unsigned char)_dio_hw_error == 0x0B) | |
124 | #define HW_UNSUPP_TRACK() ((unsigned char)_dio_hw_error == 0x0C) | |
125 | #define HW_BAD_CRC_ECC() ((unsigned char)_dio_hw_error == 0x10) | |
126 | #define HW_CRC_ECC_CORR() ((unsigned char)_dio_hw_error == 0x11) | |
127 | #define HW_CONTR_FAIL() ((unsigned char)_dio_hw_error == 0x20) | |
128 | #define HW_SEEK_FAIL() ((unsigned char)_dio_hw_error == 0x40) | |
129 | #define HW_ATTACH_FAIL() ((unsigned char)_dio_hw_error == 0x80) | |
130 | #define HW_DRIVE_NREADY() ((unsigned char)_dio_hw_error == 0xAA) | |
131 | #define HW_UNDEF_ERROR() ((unsigned char)_dio_hw_error == 0xBB) | |
132 | #define HW_WRITE_FAULT() ((unsigned char)_dio_hw_error == 0xCC) | |
133 | #define HW_STATUS_ERROR() ((unsigned char)_dio_hw_error == 0xE0) | |
134 | #define HW_SENSE_FAIL() ((unsigned char)_dio_hw_error == 0xFF) | |
135 | ||
136 | ||
137 | /* | |
138 | * Open the specified partition. | |
139 | * String 'dev' must have a format: | |
140 | * | |
141 | * /dev/{sd|hd|fd}[X] | |
142 | * | |
143 | * where, | |
144 | * | |
145 | * only one of the option in curly braces can be used and X is an optional | |
146 | * partition number for the given device. If X is not specified, function | |
147 | * scans the drive's partition table in search for the first Linux ext2fs | |
148 | * partition (signature 0x83). Along the way it dives into every extended | |
149 | * partition encountered. | |
150 | * Scan ends if either (a) there are no more used partition entries, or | |
151 | * (b) there is no Xth partition. | |
152 | * | |
153 | * Routine returns 0 on success and !=0 otherwise. | |
154 | */ | |
155 | int open_partition(char *dev); | |
156 | ||
157 | #endif /* __diskio_h */ |