1
2#if HAVE_NBTOOL_CONFIG_H
3#include "nbtool_config.h"
4#endif
5
6#include <sys/cdefs.h>
7#if !defined(__lint)
8__RCSID("$NetBSD: ews4800mips.c,v 1.1 2005/12/29 15:32:20 tsutsui Exp $");
9#endif	/* !__lint */
10
11#include <sys/param.h>
12#include <unistd.h>
13#include <err.h>
14#include <stdio.h>
15#include "installboot.h"
16
17static int ews4800mips_setboot(ib_params *);
18
19struct ib_mach ib_mach_ews4800mips =
20	{ "ews4800mips", ews4800mips_setboot, no_clearboot, no_editboot, 0};
21
22struct bbinfo_params ews4800mips_bbparams = {
23	EWS4800MIPS_BBINFO_MAGIC,
24	EWS4800MIPS_BOOT_BLOCK_OFFSET,
25	EWS4800MIPS_BOOT_BLOCK_BLOCKSIZE,
26	EWS4800MIPS_BOOT_BLOCK_MAX_SIZE,
27	0,
28	BBINFO_BIG_ENDIAN,
29};
30
31static int
32ews4800mips_setboot(ib_params *params)
33{
34	u_int8_t buf[EWS4800MIPS_BOOT_BLOCK_MAX_SIZE];
35	int rv;
36
37	rv = pread(params->s1fd, buf, sizeof buf, 0);
38	if (rv == -1) {
39		warn("Reading `%s'", params->stage1);
40		return 0;
41	} else if (rv != sizeof buf) {
42		warnx("Reading `%s' : short read", params->stage1);
43		return 0;
44	}
45
46	if (params->flags & IB_NOWRITE)
47		return 1;
48
49	if (params->flags & IB_VERBOSE)
50		printf("Writing boot block\n");
51
52	rv = pwrite(params->fsfd, buf, sizeof buf, 0);
53	if (rv == -1) {
54		warn("Writing `%s'", params->filesystem);
55		return 0;
56	} else if (rv != sizeof buf) {
57		warnx("Writing `%s': short write", params->filesystem);
58		return 0;
59	}
60
61	return 1;
62}
63