1223695Sdfr/*-
2223695Sdfr * Copyright (c) 2011 Google, Inc.
3223695Sdfr * All rights reserved.
4223695Sdfr *
5223695Sdfr * Redistribution and use in source and binary forms, with or without
6223695Sdfr * modification, are permitted provided that the following conditions
7223695Sdfr * are met:
8223695Sdfr * 1. Redistributions of source code must retain the above copyright
9223695Sdfr *    notice, this list of conditions and the following disclaimer.
10223695Sdfr * 2. Redistributions in binary form must reproduce the above copyright
11223695Sdfr *    notice, this list of conditions and the following disclaimer in the
12223695Sdfr *    documentation and/or other materials provided with the distribution.
13223695Sdfr *
14223695Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15223695Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16223695Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17223695Sdfr * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18223695Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19223695Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20223695Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21223695Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22223695Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23223695Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24223695Sdfr * SUCH DAMAGE.
25223695Sdfr *
26223695Sdfr * $FreeBSD$
27223695Sdfr */
28223695Sdfr
29223695Sdfr#include "userboot.h"
30223695Sdfr
31243243Saeextern struct loader_callbacks *callbacks;
32223695Sdfrextern void *callbacks_arg;
33223695Sdfr
34223695Sdfr#define	CALLBACK(fn, args...) (callbacks->fn(callbacks_arg , ##args))
35223695Sdfr
36223695Sdfr#define	MAXDEV	31	/* maximum number of distinct devices */
37223695Sdfr
38223695Sdfrtypedef unsigned long physaddr_t;
39223695Sdfr
40223695Sdfr/* exported devices */
41223695Sdfrextern struct devsw userboot_disk;
42223695Sdfrextern int userboot_disk_maxunit;
43223695Sdfrextern struct devsw host_dev;
44223695Sdfr
45223695Sdfr/* access to host filesystem */
46223695Sdfrstruct fs_ops host_fsops;
47223695Sdfr
48223695Sdfrstruct bootinfo;
49223695Sdfrstruct preloaded_file;
50223695Sdfrextern int		bi_load(struct bootinfo *, struct preloaded_file *);
51223695Sdfr
52223695Sdfrextern void delay(int);
53223695Sdfr
54223695Sdfrextern int userboot_autoload(void);
55223695Sdfrextern ssize_t userboot_copyin(const void *, vm_offset_t, size_t);
56223695Sdfrextern ssize_t userboot_copyout(vm_offset_t, void *, size_t);
57223695Sdfrextern ssize_t userboot_readin(int, vm_offset_t, size_t);
58223695Sdfrextern int userboot_getdev(void **, const char *, const char **);
59223695Sdfrchar	*userboot_fmtdev(void *vdev);
60223695Sdfrint	userboot_setcurrdev(struct env_var *ev, int flags, const void *value);
61223695Sdfr
62223695Sdfrint	bi_getboothowto(char *kargs);
63223695Sdfrvoid	bi_setboothowto(int howto);
64223695Sdfrvm_offset_t	bi_copyenv(vm_offset_t addr);
65223695Sdfrint	bi_load32(char *args, int *howtop, int *bootdevp, vm_offset_t *bip,
66223695Sdfr    vm_offset_t *modulep, vm_offset_t *kernend);
67223695Sdfrint	bi_load64(char *args, vm_offset_t *modulep, vm_offset_t *kernend);
68