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