1 /* $NetBSD: sparc64.c,v 1.18 2010/01/14 16:27:49 tsutsui Exp $ */
4 * Copyright (c) 2002 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Luke Mewburn of Wasabi Systems.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
33 * Copyright (c) 2002 Matthew R. Green
34 * All rights reserved.
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
45 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
46 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
47 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
48 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
49 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
50 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
51 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
52 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
54 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 #if HAVE_NBTOOL_CONFIG_H
59 #include "nbtool_config.h"
62 #include <sys/cdefs.h>
64 __RCSID("$NetBSD: sparc64.c,v 1.18 2010/01/14 16:27:49 tsutsui Exp $");
67 #include <sys/param.h>
77 #include "installboot.h"
79 static int sparc64_clearboot(ib_params
*);
80 static int sparc64_setboot(ib_params
*);
82 struct ib_mach ib_mach_sparc64
=
83 { "sparc64", sparc64_setboot
, sparc64_clearboot
, no_editboot
, 0};
86 sparc64_clearboot(ib_params
*params
)
88 char bb
[SPARC64_BOOT_BLOCK_MAX_SIZE
];
91 assert(params
!= NULL
);
92 assert(params
->fsfd
!= -1);
93 assert(params
->filesystem
!= NULL
);
95 if (params
->flags
& (IB_STAGE1START
| IB_STAGE2START
)) {
96 warnx("`-b bno' and `-B bno' are not supported for %s",
97 params
->machine
->name
);
101 /* first check that it _could_ exist here */
102 rv
= pread(params
->fsfd
, &bb
, sizeof(bb
), SPARC64_BOOT_BLOCK_OFFSET
);
104 warn("Reading `%s'", params
->filesystem
);
106 } else if (rv
!= sizeof(bb
)) {
107 warnx("Reading `%s': short read", params
->filesystem
);
111 /* now clear it out to nothing */
112 memset(&bb
, 0, sizeof(bb
));
114 if (params
->flags
& IB_VERBOSE
)
115 printf("%slearing boot block\n",
116 (params
->flags
& IB_NOWRITE
) ? "Not c" : "C");
117 if (params
->flags
& IB_NOWRITE
)
120 rv
= pwrite(params
->fsfd
, &bb
, sizeof(bb
), SPARC64_BOOT_BLOCK_OFFSET
);
122 warn("Writing `%s'", params
->filesystem
);
124 } else if (rv
!= sizeof(bb
)) {
125 warnx("Writing `%s': short write", params
->filesystem
);
133 sparc64_setboot(ib_params
*params
)
135 char bb
[SPARC64_BOOT_BLOCK_MAX_SIZE
];
139 assert(params
!= NULL
);
140 assert(params
->fsfd
!= -1);
141 assert(params
->filesystem
!= NULL
);
142 assert(params
->s1fd
!= -1);
143 assert(params
->stage1
!= NULL
);
147 if (params
->flags
& (IB_STAGE1START
| IB_STAGE2START
)) {
148 warnx("`-b bno' and `-B bno' are not supported for %s",
149 params
->machine
->name
);
153 memset(&bb
, 0, SPARC64_BOOT_BLOCK_MAX_SIZE
);
154 rv
= read(params
->s1fd
, &bb
, sizeof(bb
));
156 warn("Reading `%s'", params
->stage1
);
160 if (params
->flags
& IB_VERBOSE
) {
161 printf("Bootstrap start sector: %u\n",
162 SPARC64_BOOT_BLOCK_OFFSET
/ SPARC64_BOOT_BLOCK_BLOCKSIZE
);
163 printf("Bootstrap byte count: %u\n", (unsigned)rv
);
164 printf("%sriting bootstrap\n",
165 (params
->flags
& IB_NOWRITE
) ? "Not w" : "W");
167 if (params
->flags
& IB_NOWRITE
) {
172 rv
= pwrite(params
->fsfd
, &bb
, SPARC64_BOOT_BLOCK_MAX_SIZE
,
173 SPARC64_BOOT_BLOCK_OFFSET
);
175 warn("Writing `%s'", params
->filesystem
);
177 } else if (rv
!= SPARC64_BOOT_BLOCK_MAX_SIZE
) {
178 warnx("Writing `%s': short write", params
->filesystem
);