Home | History | Annotate | Line # | Download | only in arch
      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.3 2019/05/07 04:35:31 thorpej 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 
     17 static int ews4800mips_setboot(ib_params *);
     18 
     19 struct ib_mach ib_mach_ews4800mips = {
     20 	.name		=	"ews4800mips",
     21 	.setboot	=	ews4800mips_setboot,
     22 	.clearboot	=	no_clearboot,
     23 	.editboot	=	no_editboot,
     24 };
     25 
     26 struct bbinfo_params ews4800mips_bbparams = {
     27 	EWS4800MIPS_BBINFO_MAGIC,
     28 	EWS4800MIPS_BOOT_BLOCK_OFFSET,
     29 	EWS4800MIPS_BOOT_BLOCK_BLOCKSIZE,
     30 	EWS4800MIPS_BOOT_BLOCK_MAX_SIZE,
     31 	0,
     32 	BBINFO_BIG_ENDIAN,
     33 };
     34 
     35 static int
     36 ews4800mips_setboot(ib_params *params)
     37 {
     38 	u_int8_t buf[EWS4800MIPS_BOOT_BLOCK_MAX_SIZE];
     39 	int rv;
     40 
     41 	rv = pread(params->s1fd, buf, sizeof buf, 0);
     42 	if (rv == -1) {
     43 		warn("Reading `%s'", params->stage1);
     44 		return 0;
     45 	} else if (rv != sizeof buf) {
     46 		warnx("Reading `%s' : short read", params->stage1);
     47 		return 0;
     48 	}
     49 
     50 	if (params->flags & IB_NOWRITE)
     51 		return 1;
     52 
     53 	if (params->flags & IB_VERBOSE)
     54 		printf("Writing boot block\n");
     55 
     56 	rv = pwrite(params->fsfd, buf, sizeof buf, 0);
     57 	if (rv == -1) {
     58 		warn("Writing `%s'", params->filesystem);
     59 		return 0;
     60 	} else if (rv != sizeof buf) {
     61 		warnx("Writing `%s': short write", params->filesystem);
     62 		return 0;
     63 	}
     64 
     65 	return 1;
     66 }
     67