Home | History | Annotate | Line # | Download | only in arch
      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.3  thorpej __RCSID("$NetBSD: ews4800mips.c,v 1.3 2019/05/07 04:35:31 thorpej 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.3  thorpej struct ib_mach ib_mach_ews4800mips = {
     20  1.3  thorpej 	.name		=	"ews4800mips",
     21  1.3  thorpej 	.setboot	=	ews4800mips_setboot,
     22  1.3  thorpej 	.clearboot	=	no_clearboot,
     23  1.3  thorpej 	.editboot	=	no_editboot,
     24  1.3  thorpej };
     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