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