Home | History | Annotate | Line # | Download | only in arch
      1 /*	$NetBSD: evbarm.c,v 1.1 2019/05/07 05:02:42 thorpej Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2019 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Jason R. Thorpe.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 #if HAVE_NBTOOL_CONFIG_H
     33 #include "nbtool_config.h"
     34 #endif
     35 
     36 #include <sys/cdefs.h>
     37 #if !defined(__lint)
     38 __RCSID("$NetBSD: evbarm.c,v 1.1 2019/05/07 05:02:42 thorpej Exp $");
     39 #endif  /* !__lint */
     40 
     41 #include <err.h>
     42 #include <stdio.h>
     43 #include <string.h>
     44 #include <limits.h>
     45 
     46 #include "installboot.h"
     47 #include "evboards.h"
     48 
     49 static int	evbarm_setboot(ib_params *);
     50 static int	evbarm_clearboot(ib_params *);
     51 static int	evbarm_editboot(ib_params *);
     52 static void	evbarm_usage(ib_params *);
     53 
     54 struct ib_mach ib_mach_evbarm = {
     55 	.name		=	"evbarm",
     56 	.setboot	=	evbarm_setboot,
     57 	.clearboot	=	evbarm_clearboot,
     58 	.editboot	=	evbarm_editboot,
     59 	.usage		=	evbarm_usage,
     60 	.valid_flags	=	IB_BOARD | IB_DTB | IB_MEDIA,
     61 	.mach_flags	=	MF_UBOOT,
     62 };
     63 
     64 static int
     65 evbarm_setboot(ib_params *params)
     66 {
     67 	evb_board board;
     68 	int rv = 0;
     69 
     70 	if (!evb_db_load(params)) {
     71 		warnx("Unable to load board db.");
     72 		return 0;
     73 	}
     74 
     75 	board = evb_db_get_board(params);
     76 	if (board == NULL)
     77 		goto out;
     78 
     79 	rv = evb_uboot_setboot(params, board);
     80 
     81  out:
     82 	if (params->mach_data) {
     83 		prop_object_release(params->mach_data);
     84 		params->mach_data = NULL;
     85 	}
     86 	return rv;
     87 }
     88 
     89 static int
     90 evbarm_clearboot(ib_params *params)
     91 {
     92 
     93 	return no_clearboot(params);
     94 }
     95 
     96 static int
     97 evbarm_editboot(ib_params *params)
     98 {
     99 
    100 	return no_editboot(params);
    101 }
    102 
    103 static void
    104 evbarm_usage(ib_params *params)
    105 {
    106 
    107 	if (!evb_db_load(params)) {
    108 		warnx("Unable to load board db.");
    109 		return;
    110 	}
    111 
    112 	fprintf(stderr, "Known boards (for -o board=...) are:\n");
    113 	evb_db_list_boards(params, stderr);
    114 
    115 	if (params->mach_data) {
    116 		prop_object_release(params->mach_data);
    117 		params->mach_data = NULL;
    118 	}
    119 }
    120