Module Name: src
Committed By: snj
Date: Wed Dec 31 06:17:25 UTC 2014
Added Files:
src/usr.sbin/sysinst/arch/evbarm64 [netbsd-7]: Makefile md.c md.h
Removed Files:
src/distrib/utils/sysinst/arch/evbarm64 [netbsd-7]: Makefile md.c md.h
Log Message:
Pull up following revision(s) (requested by martin in ticket #356):
usr.sbin/sysinst/arch/evbarm64/Makefile: revision 1.1
usr.sbin/sysinst/arch/evbarm64/md.c: revision 1.1
usr.sbin/sysinst/arch/evbarm64/md.h: revision 1.1
distrib/utils/sysinst/arch/evbarm64/Makefile: file removal
distrib/utils/sysinst/arch/evbarm64/md.c: file removal
distrib/utils/sysinst/arch/evbarm64/md.h: file removal
Move bogusly merged files over to new location.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r0 src/distrib/utils/sysinst/arch/evbarm64/Makefile \
src/distrib/utils/sysinst/arch/evbarm64/md.c \
src/distrib/utils/sysinst/arch/evbarm64/md.h
cvs rdiff -u -r0 -r1.1.2.2 src/usr.sbin/sysinst/arch/evbarm64/Makefile \
src/usr.sbin/sysinst/arch/evbarm64/md.c \
src/usr.sbin/sysinst/arch/evbarm64/md.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Added files:
Index: src/usr.sbin/sysinst/arch/evbarm64/Makefile
diff -u /dev/null src/usr.sbin/sysinst/arch/evbarm64/Makefile:1.1.2.2
--- /dev/null Wed Dec 31 06:17:25 2014
+++ src/usr.sbin/sysinst/arch/evbarm64/Makefile Wed Dec 31 06:17:24 2014
@@ -0,0 +1,10 @@
+# $NetBSD: Makefile,v 1.1.2.2 2014/12/31 06:17:24 snj Exp $
+#
+# Makefile for evbarm64
+#
+
+#MENUS_MD= menus.md.${SYSINSTLANG} menus.mbr
+#MSG_MD= msg.md.${SYSINSTLANG} msg.mbr.${SYSINSTLANG}
+#MD_OPTIONS= AOUT2ELF
+
+.include "../../Makefile.inc"
Index: src/usr.sbin/sysinst/arch/evbarm64/md.c
diff -u /dev/null src/usr.sbin/sysinst/arch/evbarm64/md.c:1.1.2.2
--- /dev/null Wed Dec 31 06:17:25 2014
+++ src/usr.sbin/sysinst/arch/evbarm64/md.c Wed Dec 31 06:17:24 2014
@@ -0,0 +1,323 @@
+/* $NetBSD: md.c,v 1.1.2.2 2014/12/31 06:17:24 snj Exp $ */
+
+/*
+ * Copyright 1997 Piermont Information Systems Inc.
+ * All rights reserved.
+ *
+ * Based on code written by Philip A. Nelson for Piermont Information
+ * Systems Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of Piermont Information Systems Inc. may not be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* md.c -- shark machine specific routines */
+
+#include <stdio.h>
+#include <curses.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <util.h>
+#include <sys/types.h>
+#include <sys/disklabel.h>
+#include <sys/ioctl.h>
+#include <sys/param.h>
+
+#include "defs.h"
+#include "md.h"
+#include "msg_defs.h"
+#include "menu_defs.h"
+
+int boardtype = 0, rpi_bootpart = PART_A;
+
+void
+md_prelim_menu(void)
+{
+ /* get the boardtype from the user */
+ process_menu(MENU_prelim, NULL);
+}
+
+void
+md_init(void)
+{
+}
+
+void
+md_init_set_status(int flags)
+{
+ if (boardtype == BOARD_TYPE_RPI)
+ set_kernel_set(SET_KERNEL_RPI);
+}
+
+int
+md_get_info(void)
+{
+ struct disklabel disklabel;
+ int fd;
+ char dev_name[100];
+
+ if (boardtype == BOARD_TYPE_RPI)
+ return set_bios_geom_with_mbr_guess();
+
+ if (no_mbr)
+ return 1;
+
+ if (read_mbr(diskdev, &mbr) < 0)
+ memset(&mbr.mbr, 0, sizeof(mbr.mbr)-2);
+
+ if (edit_mbr(&mbr) == 0)
+ return 0;
+
+ if (strncmp(diskdev, "wd", 2) == 0)
+ disktype = "ST506";
+ else
+ disktype = "SCSI";
+
+ snprintf(dev_name, 100, "/dev/r%sc", diskdev);
+
+ fd = open(dev_name, O_RDONLY, 0);
+ if (fd < 0) {
+ endwin();
+ fprintf(stderr, "Can't open %s\n", dev_name);
+ exit(1);
+ }
+ if (ioctl(fd, DIOCGDINFO, &disklabel) == -1) {
+ endwin();
+ fprintf(stderr, "Can't read disklabel on %s.\n", dev_name);
+ close(fd);
+ exit(1);
+ }
+ close(fd);
+
+ dlcyl = disklabel.d_ncylinders;
+ dlhead = disklabel.d_ntracks;
+ dlsec = disklabel.d_nsectors;
+ sectorsize = disklabel.d_secsize;
+ dlcylsize = disklabel.d_secpercyl;
+
+ /*
+ * Compute whole disk size. Take max of (dlcyl*dlhead*dlsec)
+ * and secperunit, just in case the disk is already labelled.
+ * (If our new label's RAW_PART size ends up smaller than the
+ * in-core RAW_PART size value, updating the label will fail.)
+ */
+ dlsize = dlcyl*dlhead*dlsec;
+ if (disklabel.d_secperunit > dlsize)
+ dlsize = disklabel.d_secperunit;
+
+ return 1;
+}
+
+/*
+ * md back-end code for menu-driven BSD disklabel editor.
+ */
+int
+md_make_bsd_partitions(void)
+{
+ return make_bsd_partitions();
+}
+
+/*
+ * any additional partition validation
+ */
+int
+md_check_partitions(void)
+{
+ int part;
+
+ if (boardtype == BOARD_TYPE_NORMAL)
+ return 1;
+ if (boardtype == BOARD_TYPE_RPI) {
+ for (part = PART_A; part < MAXPARTITIONS; part++)
+ if (bsdlabel[part].pi_fstype == FS_MSDOS) {
+ rpi_bootpart = part;
+ return 1;
+ }
+
+ msg_display(MSG_nomsdospart);
+ process_menu(MENU_ok, NULL);
+ }
+ return 0;
+}
+
+/*
+ * hook called before writing new disklabel.
+ */
+int
+md_pre_disklabel(void)
+{
+ if (no_mbr)
+ return 0;
+
+ msg_display(MSG_dofdisk);
+
+ /* write edited MBR onto disk. */
+ if (write_mbr(diskdev, &mbr, 1) != 0) {
+ msg_display(MSG_wmbrfail);
+ process_menu(MENU_ok, NULL);
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * hook called after writing disklabel to new target disk.
+ */
+int
+md_post_disklabel(void)
+{
+ return 0;
+}
+
+/*
+ * hook called after upgrade() or install() has finished setting
+ * up the target disk but immediately before the user is given the
+ * ``disks are now set up'' message.
+ */
+int
+md_post_newfs(void)
+{
+ return 0;
+}
+
+int
+md_post_extract(void)
+{
+ char kernelbin[100];
+
+ if (boardtype == BOARD_TYPE_NORMAL)
+ return 0;
+ if (boardtype == BOARD_TYPE_RPI) {
+ snprintf(kernelbin, 100, "%s/netbsd.bin", targetroot_mnt);
+ if (file_exists_p(kernelbin)) {
+ run_program(RUN_DISPLAY,
+ "/bin/cp %s /targetroot/boot/kernel.img", kernelbin);
+ } else {
+ msg_display(MSG_rpikernelmissing);
+ process_menu(MENU_ok, NULL);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void
+md_cleanup_install(void)
+{
+#ifndef DEBUG
+ enable_rc_conf();
+ add_rc_conf("sshd=YES\n");
+ add_rc_conf("dhcpcd=YES\n");
+#endif
+}
+
+int
+md_pre_update(void)
+{
+ return 1;
+}
+
+/* Upgrade support */
+int
+md_update(void)
+{
+ md_post_newfs();
+ return 1;
+}
+
+int
+md_pre_mount()
+{
+ return 0;
+}
+
+int
+md_check_mbr(mbr_info_t *mbri)
+{
+ mbr_info_t *ext;
+ struct mbr_partition *part;
+ int i, hasboot=0;
+
+ if (boardtype == BOARD_TYPE_NORMAL)
+ return 2;
+ /* raspi code */
+ if (boardtype == BOARD_TYPE_RPI) {
+ for (ext = mbri; ext; ext = ext->extended) {
+ part = ext->mbr.mbr_parts;
+ for (i=0, hasboot=0; i < MBR_PART_COUNT; part++, i++) {
+ if (part->mbrp_type != MBR_PTYPE_FAT32L)
+ continue;
+ hasboot = 1;
+ break;
+ }
+ }
+ if (!hasboot) {
+ msg_display(MSG_nomsdospart);
+ msg_display_add(MSG_reeditpart, 0);
+ process_menu(MENU_yesno, NULL);
+ if (!yesno)
+ return 0;
+ return 1;
+ }
+ }
+ return 2;
+}
+
+int
+md_mbr_use_wholedisk(mbr_info_t *mbri)
+{
+ struct mbr_sector *mbrs = &mbri->mbr;
+ struct mbr_partition *part;
+ int offset;
+
+ if (boardtype == BOARD_TYPE_NORMAL) {
+ /* this keeps it from creating /boot as msdos */
+ bootsize = 0;
+ return mbr_use_wholedisk(mbri);
+ }
+
+ /* raspi code */
+ if (boardtype == BOARD_TYPE_RPI) {
+ part = &mbrs->mbr_parts[0];
+ if (part[0].mbrp_type != MBR_PTYPE_FAT32L) {
+ /* It's hopelessly corrupt, punt for now */
+ msg_display(MSG_nomsdospart);
+ process_menu(MENU_ok, NULL);
+ return 0;
+ }
+ offset = part[0].mbrp_start + part[0].mbrp_size;
+ part[1].mbrp_type = MBR_PTYPE_NETBSD;
+ part[1].mbrp_size = dlsize - offset;
+ part[1].mbrp_start = offset;
+ part[1].mbrp_flag = 0;
+
+ ptstart = part[1].mbrp_start;
+ ptsize = part[1].mbrp_size;
+ bootstart = part[0].mbrp_start;
+ bootsize = part[0].mbrp_size;
+ return 1;
+ }
+
+ return mbr_use_wholedisk(mbri);
+}
Index: src/usr.sbin/sysinst/arch/evbarm64/md.h
diff -u /dev/null src/usr.sbin/sysinst/arch/evbarm64/md.h:1.1.2.2
--- /dev/null Wed Dec 31 06:17:25 2014
+++ src/usr.sbin/sysinst/arch/evbarm64/md.h Wed Dec 31 06:17:24 2014
@@ -0,0 +1,82 @@
+/* $NetBSD: md.h,v 1.1.2.2 2014/12/31 06:17:24 snj Exp $ */
+
+/*
+ * Copyright 1997 Piermont Information Systems Inc.
+ * All rights reserved.
+ *
+ * Based on code written by Philip A. Nelson for Piermont Information
+ * Systems Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of Piermont Information Systems Inc. may not be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* md.h -- Machine specific definitions for evbarm */
+
+#include "mbr.h"
+
+/* Constants and defines */
+#define PART_BOOT PART_E
+#define PART_BOOT_MSDOS PART_BOOT
+#define PART_BOOT_PI_MOUNT "/boot"
+#define PART_BOOT_PI_FLAGS PIF_MOUNT
+
+/* Megs required for a full X installation. */
+#define XNEEDMB 60
+
+#define HAVE_UFS2_BOOT
+
+/*
+ * Default filesets to fetch and install during installation
+ * or upgrade. The standard sets are:
+ * base etc comp games man misc tests text xbase xcomp xetc xfont xserver
+ */
+#define SET_KERNEL_1_NAME "kern-ADI_BRH"
+#define SET_KERNEL_2_NAME "kern-INTEGRATOR"
+#define SET_KERNEL_3_NAME "kern-IQ80310"
+#define SET_KERNEL_4_NAME "kern-IQ80321"
+#define SET_KERNEL_5_NAME "kern-MINI2440"
+#define SET_KERNEL_6_NAME "kern-TEAMASA_NPWR"
+#define SET_KERNEL_7_NAME "kern-TS7200"
+#define SET_KERNEL_8_NAME "kern-RPI"
+#define SET_KERNEL_9_NAME "kern-KUROBOX_PRO"
+#define SET_KERNEL_RPI SET_KERNEL_8
+
+#define MD_SETS_SELECTED SET_SYSTEM
+
+/*
+ * Machine-specific command to write a new label to a disk.
+ * For example, shark uses "/sbin/disklabel -w -r".
+ * Sun ports should probably use DISKLABEL_CMD "/sbin/disklabel -w"
+ * to get incore to ondisk inode translation for the Sun proms.
+ * If not defined, we assume the port does not support disklabels and
+ * hand-edited disklabel will NOT be written by MI code.
+ */
+#define DISKLABEL_CMD "disklabel -w -r"
+
+/* Special board type routines need a switch */
+#define BOARD_TYPE_NORMAL 0
+#define BOARD_TYPE_RPI 1
+int boardtype;