1*5978408cSSascha Wildner /*	$NetBSD: cd9660_eltorito.h,v 1.6 2017/01/24 11:22:43 nonaka Exp $	*/
2*5978408cSSascha Wildner 
3*5978408cSSascha Wildner /*-
4*5978408cSSascha Wildner  * SPDX-License-Identifier: BSD-2-Clause-NetBSD
5*5978408cSSascha Wildner  *
6*5978408cSSascha Wildner  * Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
7*5978408cSSascha Wildner  * Perez-Rathke and Ram Vedam.  All rights reserved.
8*5978408cSSascha Wildner  *
9*5978408cSSascha Wildner  * This code was written by Daniel Watt, Walter Deignan, Ryan Gabrys,
10*5978408cSSascha Wildner  * Alan Perez-Rathke and Ram Vedam.
11*5978408cSSascha Wildner  *
12*5978408cSSascha Wildner  * Redistribution and use in source and binary forms, with or
13*5978408cSSascha Wildner  * without modification, are permitted provided that the following
14*5978408cSSascha Wildner  * conditions are met:
15*5978408cSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
16*5978408cSSascha Wildner  *    notice, this list of conditions and the following disclaimer.
17*5978408cSSascha Wildner  * 2. Redistributions in binary form must reproduce the above
18*5978408cSSascha Wildner  *    copyright notice, this list of conditions and the following
19*5978408cSSascha Wildner  *    disclaimer in the documentation and/or other materials provided
20*5978408cSSascha Wildner  *    with the distribution.
21*5978408cSSascha Wildner  *
22*5978408cSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY DANIEL WATT, WALTER DEIGNAN, RYAN
23*5978408cSSascha Wildner  * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM ``AS IS'' AND ANY EXPRESS OR
24*5978408cSSascha Wildner  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25*5978408cSSascha Wildner  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26*5978408cSSascha Wildner  * DISCLAIMED.  IN NO EVENT SHALL DANIEL WATT, WALTER DEIGNAN, RYAN
27*5978408cSSascha Wildner  * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM BE LIABLE FOR ANY DIRECT, INDIRECT,
28*5978408cSSascha Wildner  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
29*5978408cSSascha Wildner  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
30*5978408cSSascha Wildner  * USE,DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31*5978408cSSascha Wildner  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32*5978408cSSascha Wildner  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33*5978408cSSascha Wildner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
34*5978408cSSascha Wildner  * OF SUCH DAMAGE.
35*5978408cSSascha Wildner  *
36*5978408cSSascha Wildner  * $FreeBSD: head/usr.sbin/makefs/cd9660/cd9660_eltorito.h 331843 2018-03-31 15:04:41Z benno $
37*5978408cSSascha Wildner  */
38*5978408cSSascha Wildner 
39*5978408cSSascha Wildner #ifndef _CD9660_ELTORITO_H_
40*5978408cSSascha Wildner #define _CD9660_ELTORITO_H_
41*5978408cSSascha Wildner 
42*5978408cSSascha Wildner /* Boot defines */
43*5978408cSSascha Wildner #define	ET_ID		"EL TORITO SPECIFICATION"
44*5978408cSSascha Wildner #define	ET_SYS_X86	0
45*5978408cSSascha Wildner #define	ET_SYS_PPC	1
46*5978408cSSascha Wildner #define	ET_SYS_MAC	2
47*5978408cSSascha Wildner #define	ET_SYS_EFI	0xef	/* Platform ID at section header entry */
48*5978408cSSascha Wildner 
49*5978408cSSascha Wildner #define ET_BOOT_ENTRY_SIZE 0x20
50*5978408cSSascha Wildner 
51*5978408cSSascha Wildner #define	ET_BOOTABLE		0x88
52*5978408cSSascha Wildner #define	ET_NOT_BOOTABLE	0
53*5978408cSSascha Wildner 
54*5978408cSSascha Wildner #define	ET_MEDIA_NOEM	0
55*5978408cSSascha Wildner #define	ET_MEDIA_12FDD			1
56*5978408cSSascha Wildner #define	ET_MEDIA_144FDD			2
57*5978408cSSascha Wildner #define	ET_MEDIA_288FDD			3
58*5978408cSSascha Wildner #define	ET_MEDIA_HDD			4
59*5978408cSSascha Wildner 
60*5978408cSSascha Wildner #define ET_INDICATOR_HEADERMORE	0x90
61*5978408cSSascha Wildner #define ET_INDICATOR_HEADERLAST	0x91
62*5978408cSSascha Wildner #define ET_INDICATOR_EXTENSION	0x44
63*5978408cSSascha Wildner 
64*5978408cSSascha Wildner /*** Boot Structures ***/
65*5978408cSSascha Wildner 
66*5978408cSSascha Wildner typedef struct _boot_volume_descriptor {
67*5978408cSSascha Wildner 	u_char boot_record_indicator	[ISODCL(0x00,0x00)];
68*5978408cSSascha Wildner 	u_char identifier		[ISODCL(0x01,0x05)];
69*5978408cSSascha Wildner 	u_char version			[ISODCL(0x06,0x06)];
70*5978408cSSascha Wildner 	u_char boot_system_identifier	[ISODCL(0x07,0x26)];
71*5978408cSSascha Wildner 	u_char unused1			[ISODCL(0x27,0x46)];
72*5978408cSSascha Wildner 	u_char boot_catalog_pointer	[ISODCL(0x47,0x4A)];
73*5978408cSSascha Wildner 	u_char unused2			[ISODCL(0x4B,0x7FF)];
74*5978408cSSascha Wildner } boot_volume_descriptor;
75*5978408cSSascha Wildner 
76*5978408cSSascha Wildner typedef struct _boot_catalog_validation_entry {
77*5978408cSSascha Wildner 	u_char header_id		[ISODCL(0x00,0x00)];
78*5978408cSSascha Wildner 	u_char platform_id		[ISODCL(0x01,0x01)];
79*5978408cSSascha Wildner 	u_char reserved1		[ISODCL(0x02,0x03)];
80*5978408cSSascha Wildner 	u_char manufacturer		[ISODCL(0x04,0x1B)];
81*5978408cSSascha Wildner 	u_char checksum			[ISODCL(0x1C,0x1D)];
82*5978408cSSascha Wildner 	u_char key			[ISODCL(0x1E,0x1F)];
83*5978408cSSascha Wildner } boot_catalog_validation_entry;
84*5978408cSSascha Wildner 
85*5978408cSSascha Wildner typedef struct _boot_catalog_initial_entry {
86*5978408cSSascha Wildner 	u_char boot_indicator		[ISODCL(0x00,0x00)];
87*5978408cSSascha Wildner 	u_char media_type		[ISODCL(0x01,0x01)];
88*5978408cSSascha Wildner 	u_char load_segment		[ISODCL(0x02,0x03)];
89*5978408cSSascha Wildner 	u_char system_type		[ISODCL(0x04,0x04)];
90*5978408cSSascha Wildner 	u_char unused_1			[ISODCL(0x05,0x05)];
91*5978408cSSascha Wildner 	u_char sector_count		[ISODCL(0x06,0x07)];
92*5978408cSSascha Wildner 	u_char load_rba			[ISODCL(0x08,0x0B)];
93*5978408cSSascha Wildner 	u_char unused_2			[ISODCL(0x0C,0x1F)];
94*5978408cSSascha Wildner } boot_catalog_initial_entry;
95*5978408cSSascha Wildner 
96*5978408cSSascha Wildner #define ET_SECTION_HEADER_MORE		0x90
97*5978408cSSascha Wildner #define ET_SECTION_HEADER_LAST		0x91
98*5978408cSSascha Wildner 
99*5978408cSSascha Wildner typedef struct _boot_catalog_section_header {
100*5978408cSSascha Wildner 	u_char header_indicator		[ISODCL(0x00,0x00)];
101*5978408cSSascha Wildner 	u_char platform_id		[ISODCL(0x01,0x01)];
102*5978408cSSascha Wildner 	u_char num_section_entries	[ISODCL(0x02,0x03)];
103*5978408cSSascha Wildner 	u_char id_string		[ISODCL(0x04,0x1F)];
104*5978408cSSascha Wildner } boot_catalog_section_header;
105*5978408cSSascha Wildner 
106*5978408cSSascha Wildner typedef struct _boot_catalog_section_entry {
107*5978408cSSascha Wildner 	u_char boot_indicator		[ISODCL(0x00,0x00)];
108*5978408cSSascha Wildner 	u_char media_type		[ISODCL(0x01,0x01)];
109*5978408cSSascha Wildner 	u_char load_segment		[ISODCL(0x02,0x03)];
110*5978408cSSascha Wildner 	u_char system_type		[ISODCL(0x04,0x04)];
111*5978408cSSascha Wildner 	u_char unused_1			[ISODCL(0x05,0x05)];
112*5978408cSSascha Wildner 	u_char sector_count		[ISODCL(0x06,0x07)];
113*5978408cSSascha Wildner 	u_char load_rba			[ISODCL(0x08,0x0B)];
114*5978408cSSascha Wildner 	u_char selection_criteria	[ISODCL(0x0C,0x0C)];
115*5978408cSSascha Wildner 	u_char vendor_criteria		[ISODCL(0x0D,0x1F)];
116*5978408cSSascha Wildner } boot_catalog_section_entry;
117*5978408cSSascha Wildner 
118*5978408cSSascha Wildner typedef struct _boot_catalog_section_entry_extension {
119*5978408cSSascha Wildner 	u_char extension_indicator	[ISODCL(0x00,0x00)];
120*5978408cSSascha Wildner 	u_char flags			[ISODCL(0x01,0x01)];
121*5978408cSSascha Wildner 	u_char vendor_criteria		[ISODCL(0x02,0x1F)];
122*5978408cSSascha Wildner } boot_catalog_section_entry_extension;
123*5978408cSSascha Wildner 
124*5978408cSSascha Wildner #define ET_ENTRY_VE 1
125*5978408cSSascha Wildner #define ET_ENTRY_IE 2
126*5978408cSSascha Wildner #define ET_ENTRY_SH 3
127*5978408cSSascha Wildner #define ET_ENTRY_SE 4
128*5978408cSSascha Wildner #define ET_ENTRY_EX 5
129*5978408cSSascha Wildner 
130*5978408cSSascha Wildner struct boot_catalog_entry {
131*5978408cSSascha Wildner 	char entry_type;
132*5978408cSSascha Wildner 	union {
133*5978408cSSascha Wildner 		boot_catalog_validation_entry		VE;
134*5978408cSSascha Wildner 		boot_catalog_initial_entry		IE;
135*5978408cSSascha Wildner 		boot_catalog_section_header		SH;
136*5978408cSSascha Wildner 		boot_catalog_section_entry		SE;
137*5978408cSSascha Wildner 		boot_catalog_section_entry_extension	EX;
138*5978408cSSascha Wildner 	} entry_data;
139*5978408cSSascha Wildner 
140*5978408cSSascha Wildner 	LIST_ENTRY(boot_catalog_entry) ll_struct;
141*5978408cSSascha Wildner };
142*5978408cSSascha Wildner 
143*5978408cSSascha Wildner /* Temporary structure */
144*5978408cSSascha Wildner struct cd9660_boot_image {
145*5978408cSSascha Wildner 	char *filename;
146*5978408cSSascha Wildner 	int size;
147*5978408cSSascha Wildner 	int sector;			/* copied to LoadRBA */
148*5978408cSSascha Wildner 	int num_sectors;
149*5978408cSSascha Wildner 	unsigned int loadSegment;
150*5978408cSSascha Wildner 	u_char targetMode;
151*5978408cSSascha Wildner 	u_char system;
152*5978408cSSascha Wildner 	u_char bootable;
153*5978408cSSascha Wildner 	u_char platform_id;		/* for section header entry */
154*5978408cSSascha Wildner 	/*
155*5978408cSSascha Wildner 	 * If the boot image exists in the filesystem
156*5978408cSSascha Wildner 	 * already, this is a pointer to that node. For the sake
157*5978408cSSascha Wildner 	 * of simplicity in future versions, this pointer is only
158*5978408cSSascha Wildner 	 * to the node in the primary volume. This SHOULD be done
159*5978408cSSascha Wildner 	 * via a hashtable lookup.
160*5978408cSSascha Wildner 	 */
161*5978408cSSascha Wildner 	struct _cd9660node *boot_image_node;
162*5978408cSSascha Wildner 	TAILQ_ENTRY(cd9660_boot_image) image_list;
163*5978408cSSascha Wildner 	int serialno;
164*5978408cSSascha Wildner };
165*5978408cSSascha Wildner 
166*5978408cSSascha Wildner 
167*5978408cSSascha Wildner #endif /* _CD9660_ELTORITO_H_ */
168*5978408cSSascha Wildner 
169