Add externs to avoid multiple definitions, and then add missing definitions.
[rrq/maintain_lilo.git] / src / probe.h
1 /* probe.h  -  BIOS probe utility
2  * 
3  * Copyright 1999-2005 John Coffman
4  * Copyright 2009-2015 Joachim Wiedorn
5  * All rights reserved.
6  * 
7  * Licensed under the terms contained in the file 'COPYING'
8  * in the source directory.
9  */
10
11 #ifndef __PROBE_H_
12 #define __PROBE_H_
13
14
15 struct disk_geom {
16    unsigned int n_total_blocks;
17    int n_sect;
18    int n_head;
19    int n_cyl;
20    char type;
21    char EDD_flags;
22    char EDD_rev;
23    char n_disks;
24    struct partition *pt;
25    int serial_no;               /* added at PROBE_VERSION==4 */
26 };
27
28 #if 0
29 /* structure used by int 0x13, AH=0x48 */
30
31 struct disk_param {
32    short size;
33    short flags;
34    unsigned int n_cyl;
35    unsigned int n_head;
36    unsigned int n_sect;
37    int64_t n_sectors;
38    short n_byte;
39    unsigned int edd_config_ptr;
40 };
41 #endif
42
43
44 #define EDD_DMA_BOUNDARY_TRANSP  01
45 #define EDD_PARAM_GEOM_VALID     02
46
47
48 /* the following structures are created by the biosdata.S codes */
49
50 typedef
51 struct Equip {
52    unsigned short equipment;
53    unsigned short mem;
54 #if PROBE_VERSION >= 5
55    unsigned short boot_dx;
56 #endif
57 } equip_t;
58
59
60 /* BD_GET_VIDEO >= 1 */
61 typedef
62 struct Video1 {
63    struct {
64       unsigned char  al;
65       unsigned char  ah;
66       unsigned char  bl;
67       unsigned char  bh;
68    } vid0F;
69 } video_t1;
70
71
72 /* BD_GET_VIDEO >= 2  */
73 typedef
74 struct Video2 {
75    struct {
76       unsigned short ax;
77       unsigned char  bl;
78       unsigned char  bh;
79    } vid12;
80    struct {
81       unsigned char  al;
82       unsigned char  ah;
83       unsigned short bx;
84    } vid1A;
85 } video_t2;
86
87 /* BD_GET_VIDEO >=2 extension for PROBE_VERSION 5 */
88 typedef
89 struct Video25 {
90    struct {
91       unsigned short ax;
92       unsigned short cx;
93       unsigned short dx;
94       unsigned short bp;
95    } vid36;
96 } video_t25;
97
98
99 /* BD_GET_VIDEO >= 3  */
100 typedef
101 struct Video3 {
102    struct {
103       unsigned short ax;
104                char  sig[4];
105    } vid4F00;
106    struct {
107       unsigned short ax;
108       unsigned short bits;
109    } vid101;
110    struct {
111       unsigned short ax;
112       unsigned short bits;
113    } vid103;
114 } video_t3;
115
116
117 typedef
118 struct Video {
119    unsigned short equipment;
120    unsigned short mem;
121
122 /* BD_GET_VIDEO >= 1 */
123    struct {
124       unsigned char  al;
125       unsigned char  ah;
126       unsigned char  bl;
127       unsigned char  bh;
128    } vid0F;
129
130 /* BD_GET_VIDEO >= 2  */
131    struct {
132       unsigned short ax;
133       unsigned char  bl;
134       unsigned char  bh;
135    } vid12;
136    struct {
137       unsigned char  al;
138       unsigned char  ah;
139       unsigned short bx;
140    } vid1A;
141
142
143 /* BD_GET_VIDEO >= 3  */
144    struct {
145       unsigned short ax;
146       unsigned char  sig[4];
147    } vid4F00;
148    struct {
149       unsigned short ax;
150       unsigned short bits;
151    } vid101;
152    struct {
153       unsigned short ax;
154       unsigned short bits;
155    } vid103;
156 } video_t;
157
158
159 typedef
160 struct Floppy {
161    struct {
162       unsigned char  ah;                /* AL and AH were swapped */
163       unsigned char  flags;
164       unsigned short dx;
165       unsigned short cx;
166    } fn15;
167    struct {
168       unsigned char  ah;                /* AL and AH were swapped */
169       unsigned char  flags;
170       unsigned short cx;
171       unsigned short dx;
172       unsigned short di;
173       unsigned short es;
174    } fn08;
175 } floppy_t;
176
177
178 typedef
179 struct Hard {
180    struct {
181       unsigned char  ah;                /* AL and AH were swapped */
182       unsigned char  flags;
183       unsigned short dx;
184       unsigned short cx;
185    } fn15;
186    struct {
187       unsigned char  ah;                /* AL and AH were swapped */
188       unsigned char  flags;
189       unsigned short cx;
190       unsigned short dx;
191    } fn08;
192    struct {
193       unsigned char  ah;                /* AL and AH were swapped */
194       unsigned char  flags;
195       unsigned short bx;
196       unsigned short cx;
197    } fn41;
198 } hard_t;
199
200 typedef
201 struct Fn48 {
202    unsigned char  ah;           /* AL and AH were swapped */
203    unsigned char  flags;
204 } fn48_t;
205
206 typedef
207 struct Edd {
208    unsigned short size;                 /* 26 or 30 */
209    unsigned short info;
210    unsigned int  cylinders;
211    unsigned int  heads;
212    unsigned int  sectors;
213    int64_t        total_sectors;
214    unsigned short sector_size;
215
216    unsigned short offset,
217                   segment;
218            fn48_t reg;          /* AH & flags returned from the call */
219 } edd_t;                                /* struct is 26; but may be 30 in mem */
220
221 /* the video adapter types */
222 enum {VIDEO_UNKNOWN, VIDEO_MDA, VIDEO_CGA, VIDEO_EGA, VIDEO_MCGA,
223         VIDEO_VGA, VIDEO_VESA, VIDEO_VESA_800};
224
225 int fetch(void);
226
227 int purge(void);
228
229 void probe_tell (char *cmd);
230
231 int bios_max_devs(void);
232
233 int bios_device(GEOMETRY *geo, int device);
234
235 int get_video(void);    /* return -1 on error, or adapter type [0..7] */
236
237 void check_bios(void);  /* set up bios_passes_dl */
238
239 #endif
240 /* end probe.h */