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