~ubuntu-branches/debian/jessie/arcboot/jessie

« back to all changes in this revision

Viewing changes to e2fslib/dosio.h

  • Committer: Bazaar Package Importer
  • Author(s): Guido Guenther
  • Date: 2004-03-02 12:01:14 UTC
  • Revision ID: james.westby@ubuntu.com-20040302120114-0pukal9hlpt3k0l7
Tags: 0.3.8.1
correct subarch detection for IP32

Show diffs side-by-side

added added

removed removed

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