1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
23  */
24 
25 #ifndef	_INSTALLGRUB_H
26 #define	_INSTALLGRUB_H
27 
28 #ifdef	__cplusplus
29 extern "C" {
30 #endif
31 
32 #include <sys/multiboot.h>
33 #include "./../common/bblk_einfo.h"
34 
35 #define	SECTOR_SIZE	(512)
36 
37 typedef struct _device_data {
38 	char		*path;
39 	char		*path_p0;
40 	uint8_t		type;
41 	int		part_fd;
42 	int		disk_fd;
43 	int		slice;
44 	int		partition;
45 	uint32_t	start_sector;
46 	char		boot_sector[SECTOR_SIZE];
47 } ig_device_t;
48 
49 typedef struct _stage2_data {
50 	char			*buf;
51 	char			*file;
52 	char			*extra;
53 	multiboot_header_t	*mboot;
54 	uint32_t		mboot_off;
55 	uint32_t		file_size;
56 	uint32_t		buf_size;
57 	uint32_t		first_sector;
58 	uint32_t		pcfs_first_sectors[2];
59 } ig_stage2_t;
60 
61 typedef struct _ig_data {
62 	char		stage1_buf[SECTOR_SIZE];
63 	ig_stage2_t	stage2;
64 	ig_device_t	device;
65 } ig_data_t;
66 
67 enum ig_devtype_t {
68 	IG_DEV_X86BOOTPAR = 1,
69 	IG_DEV_SOLVTOC
70 };
71 
72 #define	is_bootpar(type)	(type == IG_DEV_X86BOOTPAR)
73 
74 #define	STAGE2_MEMADDR		(0x8000)	/* loading addr of stage2 */
75 
76 #define	STAGE1_BPB_OFFSET	(0x3)
77 #define	STAGE1_BPB_SIZE		(0x3B)
78 #define	STAGE1_BOOT_DRIVE	(0x40)
79 #define	STAGE1_FORCE_LBA	(0x41)
80 #define	STAGE1_STAGE2_ADDRESS	(0x42)
81 #define	STAGE1_STAGE2_SECTOR	(0x44)
82 #define	STAGE1_STAGE2_SEGMENT	(0x48)
83 
84 #define	STAGE2_BLOCKLIST	(SECTOR_SIZE - 0x8)
85 #define	STAGE2_INSTALLPART	(SECTOR_SIZE + 0x8)
86 #define	STAGE2_FORCE_LBA	(SECTOR_SIZE + 0x11)
87 #define	STAGE2_BLKOFF		(50)	/* offset from start of fdisk part */
88 
89 #ifdef	__cplusplus
90 }
91 #endif
92 
93 #endif /* _INSTALLGRUB_H */
94