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