xref: /dragonfly/stand/boot/common/boot2.h (revision 479ab7f0)
1*479ab7f0SSascha Wildner /*
2*479ab7f0SSascha Wildner  * Copyright (c) 2009 The DragonFly Project.  All rights reserved.
3*479ab7f0SSascha Wildner  *
4*479ab7f0SSascha Wildner  * This code is derived from software contributed to The DragonFly Project
5*479ab7f0SSascha Wildner  * by Matthew Dillon <dillon@backplane.com>
6*479ab7f0SSascha Wildner  *
7*479ab7f0SSascha Wildner  * Redistribution and use in source and binary forms, with or without
8*479ab7f0SSascha Wildner  * modification, are permitted provided that the following conditions
9*479ab7f0SSascha Wildner  * are met:
10*479ab7f0SSascha Wildner  *
11*479ab7f0SSascha Wildner  * 1. Redistributions of source code must retain the above copyright
12*479ab7f0SSascha Wildner  *    notice, this list of conditions and the following disclaimer.
13*479ab7f0SSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
14*479ab7f0SSascha Wildner  *    notice, this list of conditions and the following disclaimer in
15*479ab7f0SSascha Wildner  *    the documentation and/or other materials provided with the
16*479ab7f0SSascha Wildner  *    distribution.
17*479ab7f0SSascha Wildner  * 3. Neither the name of The DragonFly Project nor the names of its
18*479ab7f0SSascha Wildner  *    contributors may be used to endorse or promote products derived
19*479ab7f0SSascha Wildner  *    from this software without specific, prior written permission.
20*479ab7f0SSascha Wildner  *
21*479ab7f0SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22*479ab7f0SSascha Wildner  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23*479ab7f0SSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24*479ab7f0SSascha Wildner  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
25*479ab7f0SSascha Wildner  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26*479ab7f0SSascha Wildner  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
27*479ab7f0SSascha Wildner  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28*479ab7f0SSascha Wildner  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29*479ab7f0SSascha Wildner  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30*479ab7f0SSascha Wildner  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31*479ab7f0SSascha Wildner  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32*479ab7f0SSascha Wildner  * SUCH DAMAGE.
33*479ab7f0SSascha Wildner  */
34*479ab7f0SSascha Wildner /*
35*479ab7f0SSascha Wildner  * boot2 encapsulated ABI.  The boot2 standalone code provides these functions
36*479ab7f0SSascha Wildner  * to the boot2 add-on modules (ufsread.c and hammer2.c).
37*479ab7f0SSascha Wildner  */
38*479ab7f0SSascha Wildner 
39*479ab7f0SSascha Wildner #ifndef _BOOT_COMMON_BOOT2_H_
40*479ab7f0SSascha Wildner #define _BOOT_COMMON_BOOT2_H_
41*479ab7f0SSascha Wildner 
42*479ab7f0SSascha Wildner 
43*479ab7f0SSascha Wildner #include <sys/param.h>
44*479ab7f0SSascha Wildner #include <sys/dtype.h>
45*479ab7f0SSascha Wildner #include <sys/dirent.h>
46*479ab7f0SSascha Wildner #include <stdarg.h>
47*479ab7f0SSascha Wildner #include <stddef.h>
48*479ab7f0SSascha Wildner #include <stdint.h>
49*479ab7f0SSascha Wildner #include <machine/bootinfo.h>
50*479ab7f0SSascha Wildner #include <machine/elf.h>
51*479ab7f0SSascha Wildner 
52*479ab7f0SSascha Wildner /*
53*479ab7f0SSascha Wildner  * We only need a 32 bit ino_t for UFS-only boot code.  We have to squeeze
54*479ab7f0SSascha Wildner  * space usage, else we'd just use 64 bits across the board.
55*479ab7f0SSascha Wildner  */
56*479ab7f0SSascha Wildner #if defined(HAMMERFS) || defined(HAMMER2FS)
57*479ab7f0SSascha Wildner typedef uint64_t boot2_ino_t;
58*479ab7f0SSascha Wildner #else
59*479ab7f0SSascha Wildner typedef uint32_t boot2_ino_t;
60*479ab7f0SSascha Wildner #endif
61*479ab7f0SSascha Wildner 
62*479ab7f0SSascha Wildner struct boot2_fsapi {
63*479ab7f0SSascha Wildner 	int (*fsinit)(void);
64*479ab7f0SSascha Wildner 	boot2_ino_t (*fslookup)(const char *);
65*479ab7f0SSascha Wildner 	ssize_t (*fsread)(boot2_ino_t, void *, size_t);
66*479ab7f0SSascha Wildner };
67*479ab7f0SSascha Wildner 
68*479ab7f0SSascha Wildner /*
69*479ab7f0SSascha Wildner  * secbuf needs to be big enough for the label reads
70*479ab7f0SSascha Wildner  * (32 and 64 bit disklabels).
71*479ab7f0SSascha Wildner  */
72*479ab7f0SSascha Wildner struct boot2_dmadat {
73*479ab7f0SSascha Wildner 	char	secbuf[DEV_BSIZE*4];
74*479ab7f0SSascha Wildner 	/* extended by *fsread() modules */
75*479ab7f0SSascha Wildner };
76*479ab7f0SSascha Wildner 
77*479ab7f0SSascha Wildner extern uint32_t fs_off;
78*479ab7f0SSascha Wildner extern int	no_io_error;
79*479ab7f0SSascha Wildner extern int	ls;
80*479ab7f0SSascha Wildner extern struct boot2_dmadat *boot2_dmadat;
81*479ab7f0SSascha Wildner 
82*479ab7f0SSascha Wildner extern int dskread(void *, unsigned, unsigned);
83*479ab7f0SSascha Wildner extern void printf(const char *,...);
84*479ab7f0SSascha Wildner extern void putchar(int);
85*479ab7f0SSascha Wildner extern int strcmp(const char *s1, const char *s2);
86*479ab7f0SSascha Wildner extern void memcpy(void *d, const void *s, int len);
87*479ab7f0SSascha Wildner 
88*479ab7f0SSascha Wildner #ifdef UFS
89*479ab7f0SSascha Wildner extern const struct boot2_fsapi boot2_ufs_api;
90*479ab7f0SSascha Wildner #endif
91*479ab7f0SSascha Wildner #ifdef HAMMERFS
92*479ab7f0SSascha Wildner extern const struct boot2_fsapi boot2_hammer_api;
93*479ab7f0SSascha Wildner #endif
94*479ab7f0SSascha Wildner #ifdef HAMMER2FS
95*479ab7f0SSascha Wildner extern const struct boot2_fsapi boot2_hammer2_api;
96*479ab7f0SSascha Wildner #endif
97*479ab7f0SSascha Wildner 
98*479ab7f0SSascha Wildner #endif
99