Adjust memory layout for 2.6.22+ kernels with 32KB setup code
[mknbi.git] / first-dos.h
1 /*
2  * first.inc  -  constants for assembler module for DOS boot loader
3  *
4  * Copyright (C) 1996-1998 Gero Kuhlmann   <gero@gkminix.han.de>
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */
20
21
22
23 /*
24  *====================================================================
25  *
26  * Definitions for accessing the BIOS data area
27  */
28
29 #define BIOS_SEG        0x0040          /* Segment of BIOS data area */
30 #define BIOS_FDSTAT     0x0041          /* Floppy disk status byte */
31 #define BIOS_HDSTAT     0x0074          /* Hard disk status byte */
32
33 #define I13_INT         0x13 * 4        /* interrupt vector 13h */
34 #define I2F_INT         0x2F * 4        /* interrupt vector 2Fh */
35 #define IF1_INT         0xF1 * 4        /* interrupt vector F1h */
36 #define IF8_INT         0xF8 * 4        /* interrupt vector F8h */
37
38
39
40 /*
41  *====================================================================
42  *
43  * Layout of disk boot sector
44  */
45
46 #define SECT_SIZE       512             /* sector size must be 512 bytes */
47
48 #define DISK_BPS        11              /* offset of bytes per sectors */
49 #define DISK_SECTS      19              /* offset of total number of sects */
50 #define DISK_SPT        24              /* offset of sectors per track */
51 #define DISK_HEADS      26              /* offset of number of heads */
52 #define DISK_BOOT       36              /* offset of disk ID to boot from */
53
54 #define PART_STATUS     0x01BE          /* offset of partition status */
55 #define PART_FRST_HEAD  0x01BF          /* offset of first head number */
56 #define PART_FRST_SECT  0x01C0          /* offset of first sector number */
57 #define PART_FRST_CYL   0x01C1          /* offset of first cylinder number */
58 #define PART_TYPE       0x01C2          /* offset of partition id */
59 #define PART_LAST_HEAD  0x01C3          /* offset of last head number */
60 #define PART_LAST_SECT  0x01C4          /* offset of last sector number */
61 #define PART_LAST_CYL   0x01C5          /* offset of last cylinder number */
62 #define PART_ABS_SECT   0x01C6          /* offset of first sector number */
63 #define PART_SEC_NUM    0x01CA          /* offset of number of sectors */
64
65 #define PART_ACTIVE     0x80            /* indicates active partition */
66 #define PART_FAT12      0x01            /* indicates partition type */
67 #define PART_FAT16      0x04            /* indicates partition type */
68
69 #define BOOT_ID_FD      0x00            /* BIOS id of floppy boot disk */
70 #define BOOT_ID_HD      0x80            /* BIOS id of hard boot disk */
71 #define BOOT_OFFSET     0x7C00          /* offset for boot block in segment 0 */
72 #define TEMP_SEGMENT    0x7000          /* segment for temporary storage */
73
74
75
76 /*
77  *====================================================================
78  *
79  * Layout of BIOS parameter block as used by DOS
80  */
81
82 #define BPB_BPS          0              /* offset to bytes per sector */
83 #define BPB_SPC          2              /* offset to sectors per cluster */
84 #define BPB_RES          3              /* offset to # of reserved sectors */
85 #define BPB_FATS         5              /* offset to # of FATs */
86 #define BPB_DIR          6              /* offset to # of root dir entries */
87 #define BPB_TOT_SECTS    8              /* offset to total # of sectors */
88 #define BPB_MEDIA_ID    10              /* offset to media ID */
89 #define BPB_SPF         11              /* offset to # of sectors per FAT */
90 #define BPB_SPT         13              /* offset to # of sectors per track */
91 #define BPB_HEADS       15              /* offset to # of heads */
92 #define BPB_HIDDEN      17              /* offset to # of hidden sectors */
93
94
95
96 /*
97  *====================================================================
98  *
99  * Flags for DOS drive parameter block
100  */
101
102 #define DPB_F_FIXED     0x0001          /* fixed media */
103 #define DPB_F_DOOR      0x0002          /* drive supports door lock status */
104 #define DPB_F_TSIZE     0x0004          /* all sectors in track are same size */
105 #define DPB_F_MULTI     0x0008          /* multiple logical units in drive */
106 #define DPB_F_SHARED    0x0010          /* logical for shared physical drive */
107 #define DPB_F_CHANGE    0x0020          /* disk change detected */
108 #define DPB_F_NEWPARA   0x0040          /* device parameters were changed */
109 #define DPB_F_FORMAT    0x0080          /* disk reformatted */
110 #define DPB_F_ACCESS    0x0100          /* access flag - fixed media only */
111
112 #define DPB_F_DEFAULT   DPB_F_CHANGE + DPB_F_NEWPARA
113
114 #define DPB_T_360       0               /* type ID for 360kB disk */
115 #define DPB_T_1200      1               /* type ID for 1.2MB disk */
116 #define DPB_T_720       2               /* type ID for 720kB disk */
117 #define DPB_T_SD8       3               /* type ID for SD 8 inch disk */
118 #define DPB_T_HD8       4               /* type ID for HD 8 inch disk */
119 #define DPB_T_FIXED     5               /* type ID for fixed disk */
120 #define DPB_T_TAPE      6               /* type ID for tape drive */
121 #define DPB_T_1440      7               /* type ID for 1.44MB disk */
122 #define DPB_T_OPTICAL   8               /* type ID for optical disk */
123 #define DPB_T_2880      9               /* type ID for 2.88MB disk */
124
125
126
127 /*
128  *====================================================================
129  *
130  * Vendor information for the boot rom image. These values have to be
131  * identical to those in mknbi.h.
132  */
133
134 #ifdef  FREEDOS
135 #define VENDOR_SIZE     5               /* sizeof "mknbi-fdos-1.x-y" in dwords */
136 #else
137 #define VENDOR_SIZE     4               /* sizeof "mknbi-dos-1.x-y" in dwords */
138 #endif
139
140 #define VENDOR_BOOTL    16              /* tag for boot loader segment */
141 #ifdef  FREEDOS
142 #define VENDOR_RAMDISK  18              /* tag for ramdisk image */
143 #else
144 #define VENDOR_RAMDISK  17              /* tag for ramdisk image */
145 #endif
146
147
148
149 /*
150  *====================================================================
151  *
152  * Layout and magic ID of boot rom image header. These values have to
153  * be identical to those used by the boot rom. See SPEC.DOC of the
154  * boot rom source for further information.
155  */
156
157 #define BOOT_MAGIC      0x1B031336      /* boot image header magic cookie */
158 #define BOOT_SIZE       512             /* total size of boot image header */
159
160 #define BOOT_HD_SIZE    4               /* size of header in dwords */
161 #define BOOT_HD_MAGIC   0               /* offset for header magic number */
162 #define BOOT_HD_LENGTH  4               /* offset for header length */
163 #define BOOT_HD_FLAG1   5               /* offset for header flag 1 */
164 #define BOOT_HD_FLAG2   6               /* offset for header flag 2 */
165 #define BOOT_HD_FLAG3   7               /* offset for header flag 3 */
166 #define BOOT_HD_LOCN    8               /* offset for header location */
167 #define BOOT_HD_EXEC    12              /* offset for execute address */
168 #define BOOT_HD_VENDOR  16              /* offset for header vendor information */
169
170 #define BOOT_LD_SIZE    4               /* size of load record in dwords */
171 #define BOOT_LD_LENGTH  0               /* offset for load record length */
172 #define BOOT_LD_TAG1    1               /* offset for load record tag 1 */
173 #define BOOT_LD_TAG2    2               /* offset for load record tag 2 */
174 #define BOOT_LD_FLAGS   3               /* offset for load record flags */
175 #define BOOT_LD_ADDR    4               /* offset for absolute address */
176 #define BOOT_LD_ILENGTH 8               /* offset for image length */
177 #define BOOT_LD_MLENGTH 12              /* offset for memory length */
178 #define BOOT_LD_VENDOR  16              /* offset for vendor information */
179
180 #define BOOT_FLAG_B0    0x01            /* mask for load record flag B0 */
181 #define BOOT_FLAG_B1    0x02            /* mask for load record flag B1 */
182 #define BOOT_FLAG_EOF   0x04            /* mask for load record flag EOF */
183
184 #define BOOT_LD_SECNUM  0               /* offset of total number of sectors */
185 #define BOOT_LD_HEADS   4               /* offset of head count */
186 #define BOOT_LD_SPT     6               /* offset of sectors per track */
187 #define BOOT_LD_CYL     8               /* offset of number of cylinders */
188 #define BOOT_LD_DRIVE   10              /* offset of boot drive ID */
189 #define BOOT_LD_NOHD    11              /* offset of no-hard-disk flag */
190
191
192
193 /*
194  *====================================================================
195  *
196  * Layout and magic ID of bootp record. Refer to RFC 951, RFC 1048
197  * and RFC 1533 for further information. The BOOTP record can be
198  * longer than the standard length as the bootrom might be able to
199  * load a vendor extension file via tftp.
200  */
201
202 #define BOOTP_MAGIC_RFC 0x63, 0x82, 0x53, 0x63  /* RFC 1048 vendor ID */
203 #define BOOTP_MAGIC_CMU 0x43, 0x4D, 0x55, 0x00  /* CMU vendor ID */
204 #define BOOTP_MAGIC_STA 0x53, 0x54, 0x41, 0x4E  /* Stanford vendor ID */
205 #define BOOTP_MAGIC_LEN 4                       /* length of vendor ID */
206
207 #define BOOTP_REQUEST   1               /* bootp OP-code */
208 #define BOOTP_REPLY     2
209
210 #define BOOTP_OP        0               /* offset to bootp OP-code */
211 #define BOOTP_VEND      236             /* offset to vendor information */
212 #define BOOTP_SIZE      300             /* size of complete bootp record */
213
214 #define BOOTP_RFC_NOP   0               /* RFC vendor tag for NO-OP */
215 #define BOOTP_RFC_END   255             /* RFC vendor tag for end of record */
216