Remove sparc64 specific eeprom command

This command was only ever for sparc64, so remove it. Remove
usr.sbin/Makeiile.sparc64 as well since it only references ofwdump
(cross platform) and eeprom.

Reivewed by: cy@, bcr@
Differential Revision: https://reviews.freebsd.org/D23593
This commit is contained in:
Warner Losh 2020-02-10 17:16:59 +00:00
parent 31719b4962
commit 28e7a2a9f1
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=357739
7 changed files with 0 additions and 1226 deletions

View File

@ -1,4 +0,0 @@
# $FreeBSD$
SUBDIR+= eeprom
SUBDIR+= ofwdump

View File

@ -1,11 +0,0 @@
# $FreeBSD$
.PATH: ${.CURDIR:H}/ofwdump
PROG= eeprom
MAN= eeprom.8
MANSUBDIR= /sparc64
SRCS= eeprom.c ofw_options.c ofw_util.c
CFLAGS+= -I${.CURDIR:H}/ofwdump
.include <bsd.prog.mk>

View File

@ -1,15 +0,0 @@
# $FreeBSD$
# Autogenerated - do NOT edit!
DIRDEPS = \
include \
include/xlocale \
lib/${CSU_DIR} \
lib/libc \
.include <dirdeps.mk>
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
# local dependencies - needed for -jN in clean tree
.endif

View File

@ -1,700 +0,0 @@
.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
.\" Copyright (c) 2004 Marius Strobl
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to The NetBSD Foundation
.\" by Jason R. Thorpe.
.\"
.\" 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.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
.\" ``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 THE FOUNDATION OR CONTRIBUTORS
.\" 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.
.\"
.\" from: NetBSD: eeprom.8,v 1.11 2003/03/31 01:31:39 perry Exp
.\" $FreeBSD$
.\"
.Dd September 1, 2006
.Dt EEPROM 8 sparc64
.Os
.Sh NAME
.Nm eeprom
.Nd "display or modify contents of the EEPROM or NVRAM"
.Sh SYNOPSIS
.Nm
.Fl a
.Nm
.Op Fl
.Ar name Ns Op = Ns Ar value
.Ar ...
.Sh DESCRIPTION
The
.Nm
utility provides an interface for displaying and changing the system's
configuration variables contained in EEPROM or NVRAM.
In the first synopsis form, all available configuration variables and their
current values are printed.
In the second form, only the variable selected by
.Ar name
and its value is printed or changed if
.Ar name
is followed by
.Ql =
and a
.Ar value .
.Pp
The following options are available:
.Bl -tag -width indent
.It Fl
Commands for displaying or changing variables are taken from stdin, allowing
one
.Ar name
or one
.Ar name
and
.Ar value
pair per line.
The output is printed on stdout.
.It Fl a
Print all available configuration variables and their current values.
.El
.Sh VARIABLES AND VALUES
Below are variables and values that one is likely to find on a system equipped
with OpenBoot 3.x and Open Firmware respectively.
.Pp
Note: the attempt to set a variable to an illegal value results in the
Open Firmware setting it to some legal value instead.
The
.Nm
utility will detect this, try to recover the previous value of the variable
and issue a warning telling that the requested value could not be set.
.Bl -tag -width ".Va last-hardware-update"
.It Va auto-boot?
If
.Dq Li true ,
the system will try to boot automatically from the devices listed in
.Va boot-device
and
.Va diag-device
respectively, using the command specified in
.Va boot-command
at power-up.
Default:
.Dq Li true .
.It Va auto-boot-retry?
If set to
.Dq Li true
and
.Va auto-boot?
is also set to
.Dq Li true ,
the system will try to boot from the specified boot devices forever.
Default:
.Dq Li false .
.It Va ansi-terminal?
If
.Dq Li false ,
.Tn ANSI
escape sequences are not interpreted by the terminal emulator.
Default:
.Dq Li true .
.It Va boot-command
Command executed when
.Va auto-boot?
is set to
.Dq Li true .
Default:
.Dq Li boot .
.It Va boot-device
Default device to boot from if
.Va diag-switch?
is set to
.Dq Li false .
Takes one or more device aliases or device paths.
The boot devices are sequentially tried to boot from, beginning with the first
one specified.
Default:
.Dq Li "net disk" .
.It Va cpci-probe-list
Digits in the format
.Dq Li 0,1,2
specifying in which order to probe the devices on the CompactPCI bus at
power-up.
Default: system-dependent.
.It Va boot-file
Default arguments for boot when
.Va diag-switch?
is set to
.Dq Li false .
When empty, the secondary boot loader will choose the file to boot.
Default: empty string.
.It Va diag-device
Like
.Va boot-device .
Used when
.Va diag-switch?
is set to
.Dq Li true .
Default:
.Dq Li net .
.It Va diag-file
Like
.Va boot-file .
Used when
.Va diag-switch?
is set to
.Dq Li true .
Default: empty string.
.It Va diag-level
Level of diagnostics to run when
.Va diag-switch?
is set to
.Dq Li true .
Possible values are
.Dq Li max ,
.Dq Li menus ,
.Dq Li min
and
.Dq Li off
(depending on the system model).
When set to
.Dq Li off ,
the Power-On Self Test (POST) is not run.
The other values are interpreted by the POST.
Default:
.Dq Li min
or
.Dq Li max
(system-dependent).
.It Va diag-switch?
If
.Dq Li true ,
the system will boot and run in diagnostic mode.
Default:
.Dq Li false
or
.Dq Li true
(system-dependent).
.It Va env-monitor
Enables or disables the Advanced System Monitoring (ASM).
Possible values are
.Dq Li enabled
and
.Dq Li disabled .
Default:
.Dq Li enabled .
.It Va fcode-debug?
Used for debugging FCode programs.
If set to
.Dq Li true ,
names of additional FCodes are registered in the Forth dictionary.
Default:
.Dq Li false .
.It Va hardware-revision
A string describing the system hardware version.
Default: system-dependent.
.It Va input-device
One of the strings
.Dq Li keyboard ,
.Dq Li ttya ,
or
.Dq Li ttyb ,
specifying the default console input device.
Default:
.Dq Li keyboard
or
.Dq Li ttya
(system-dependent).
.It Va keyboard-click?
If set to
.Dq Li true ,
the keys click annoyingly.
Default:
.Dq Li false .
.It Va keymap
Keymap for a custom keyboard.
Default: empty string.
.It Va last-hardware-update
Similar to
.Va hardware-revision ,
describing when the hardware was last updated.
Default: system-dependent.
.It Va last-poweroff-cause
Cause of the last power-off.
Used internally by the OpenBoot PROM.
Default:
.Dq Li 0 .
.It Va load-base
Default address where client programs are loaded to.
It is unlikely that this value should ever be changed.
Default:
.Dq Li 16384 .
.It Va local-mac-address?
If set to
.Dq Li false ,
all Ethernet devices with FCode will use the system default MAC address.
If set to
.Dq Li true ,
Ethernet devices with FCode that contains a unique MAC address will use it
rather than the system's default MAC address.
Default:
.Dq Li false .
.Pp
Ethernet devices with FCode include those supported by
.Xr dc 4 ,
.Xr gem 4
and
.Xr hme 4 .
Please see the respective manual page for further information.
.It Va mfg-mode
Manufacture test mode interpreted by the POST.
Possible values are
.Dq Li chamber
and
.Dq Li off .
Default:
.Dq Li off .
.It Va mfg-switch?
If set to
.Dq Li true ,
manufacturing tests are repeated until stopped by pressing STOP-A.
Default:
.Dq Li off .
.It Va net-timeout
If set to
.Dq Li 0 ,
the system will try to boot forever when the boot device used is a network
device.
Any non-zero value is interpreted as minutes to try a network boot.
Default:
.Dq Li 0 .
.It Va nvramrc
Contents of the NVRAMRC.
Default: empty string.
.Pp
While
.Va nvramrc
can be set using
.Nm ,
it is preferred to use
.Ic nvedit
in the boot monitor instead.
.It Va oem-banner
A string displayed at power-up, rather than the default banner.
Used when
.Va oem-banner?
is set to
.Dq Li true .
Default: system-dependent.
.It Va oem-banner?
If set to
.Dq Li true ,
the string stored in
.Va oem-banner
is displayed at power-up rather than the default banner.
Default: system-dependent.
.It Va oem-logo
A logo displayed at power-up when
.Va oem-logo?
is set to
.Dq Li true ,
rather than the default logo.
The logo has to be 512 bytes in size, containing a 64x64-bit monochrome image
in Sun Raster format without the leading 32-byte header.
Default: system-dependent.
.Pp
To set the logo with
.Nm ,
give the pathname of the file containing the image as the
.Ar value .
Using an empty
.Ar value
will remove the image.
.It Va oem-logo?
If set to
.Dq Li true ,
the logo stored in
.Va oem-logo
is displayed at power-up rather than the default logo.
.It Va output-device
One of the strings
.Dq Li screen ,
.Dq Li ttya ,
or
.Dq Li ttyb ,
specifying the default console output device.
Default:
.Dq Li screen
or
.Dq Li ttya
(system-dependent).
.It Va pcia-probe-list
Digits in the format
.Dq Li 1,2,3
specifying in which order to probe the devices on the PCI bus A.
Default: system-dependent.
.It Va pcib-probe-list
Like
.Va pcia-probe-list ,
but for PCI bus B.
Default: system-dependent.
.It Va #power-cycles
Number of power-cycles.
Automatically incremented on each power-cycle.
Default: system-dependent.
.It Va sbus-probe-list
Digits in the format
.Dq Li 0123
specifying in which order to probe the SBus slots at power-up.
Default: system-dependent.
.It Va screen-#columns
An integer specifying the screen width in characters per line.
Default:
.Dq Li 80 .
.It Va screen-#rows
An integer specifying the screen height in lines.
Default:
.Dq Li 34 .
.It Va scsi-initiator-id
The SCSI ID of SCSI controllers in the range of [0-7] or [0-f] (depending
on the controller).
A SCSI controller may or may not adhere to this setting, depending on its
FCode and device driver.
Default:
.Dq Li 7 .
.It Va security-#badlogins
Number of incorrect password attempts when
.Va security-mode
is set to
.Dq Li command
or
.Dq Li full .
Default:
.Dq Li 0 .
.It Va security-mode
Boot monitor security level.
One of the three possible values
.Dq Li full ,
.Dq Li command ,
or
.Dq Li none .
When set to
.Dq Li full ,
all boot monitor commands except for
.Ic go
require the password.
When set to
.Dq Li command ,
all boot monitor commands except for
.Ic boot
and
.Ic go
require the password.
When set to
.Dq Li none ,
no password is required.
Default:
.Dq Li none .
.Pp
When
.Nm
is used to set
.Va security-mode
to
.Dq Li full
or
.Dq Li command ,
you will be prompted for the password.
When
.Va security-mode
is set to
.Dq Li none ,
.Nm
will clear the password.
.It Va security-password
The password used when
.Va security-mode
is set to
.Dq Li full
or
.Dq Li command .
The maximum length for this password is 8 characters.
All characters exceeding this length will be ignored.
The value displayed for
.Va security-password
is always an empty string, even when a password is set.
Default: empty string.
.Pp
When
.Va security-mode
is set to
.Dq Li full
or
.Dq Li command ,
.Nm
can be used to enter a new password using any
.Ar value
for
.Va security-password
on the command line.
You will be prompted by
.Nm
to type in the new password in this case.
Trying to set
.Va security-password
when
.Va security-mode
is set to
.Dq Li none
using
.Nm
has no effect.
.It Va selftest-#megs
An integer specifying the number of megabytes of memory to test upon
power-up when
.Va diag-switch?
is set to
.Dq Li false .
Default:
.Dq Li 1 .
.It Va shutdown-temperature
Temperature at which the ASM issues an over-temperature shutdown.
Default: system-dependent.
.It Va silent-mode
If set to
.Dq Li true ,
memory test messages will not be displayed at power-up.
Default:
.Dq Li false .
.It Va sunmon-compat?
If set to
.Dq Li true ,
the old bootROM interface will be used while in the boot monitor,
rather than the OpenBoot PROM interface.
Default:
.Dq Li false .
.It Va system-board-date
Manufacturing date of the system board.
Default: system-dependent.
.It Va system-board-serial#
Serial number of the system board.
Default: system-dependent.
.It Va tpe-link-test?
Enable link test on 10baseT and 100baseTX Ethernet devices.
Default:
.Dq Li true .
.It Va ttya-mode
A string of five comma separated fields in the format
.Dq Li 9600,8,n,1,- .
The first field is the baud rate.
The second field is the number of data bits.
The third field is the parity; acceptable values for parity are
.Ql n
(none),
.Ql e
(even),
.Ql o
(odd),
.Ql m
(mark), and
.Ql s
(space).
The fourth field is the number of stop bits.
The fifth field is the
.Dq handshake
field; acceptable values are
.Ql -
(none),
.Ql h
(RTS/CTS), and
.Ql s
(Xon/Xoff).
Default:
.Dq Li 9600,8,n,1,- .
.It Va ttya-ignore-cd
If set to
.Dq Li true ,
the system will ignore carrier detect.
Default:
.Dq Li true .
.It Va ttya-rts-dtr-off
If set to
.Dq Li true ,
the system will ignore RTS/DTR.
Default:
.Dq Li false .
.It Va ttyb-mode
Like
.Va ttya-mode ,
but for ttyb.
Default:
.Dq Li 9600,8,n,1,- .
.It Va ttyb-ignore-cd
Like
.Va ttya-ignore-cd ,
but for ttyb.
Default:
.Dq Li true .
.It Va ttyb-rts-dtr-off
Like
.Va ttya-rts-dtr-off ,
but for ttyb.
Default:
.Dq Li false .
.It Va use-boot-table?
Use boot table defined by the OEM.
Default: system-dependent.
.It Va use-nvramrc?
If set to
.Dq Li true ,
the script stored in
.Va nvramrc
will be executed during start-up.
Default:
.Dq Li false .
.It Va warning-temperature
Temperature at which the ASM issues an over-temperature warning.
Default: system-dependent.
.It Va watchdog-enable?
Enables or disables the system watchdog timer.
Default:
.Dq Li false .
.It Va watchdog-reboot?
If set to
.Dq Li true ,
the system will reboot upon terminal count of the system watchdog timer.
If set to
.Dq Li false ,
the system will fall into the boot monitor.
Default:
.Dq Li false .
.It Va watchdog-timeout
Expiry limit for the system watchdog timer.
Range and unit depend on the system model.
Default: system-dependent.
.El
.Sh EXAMPLES
Print all available configuration variables and their current values:
.Pp
.Dl "eeprom -a"
.Pp
Print the current value of the
.Va local-mac-address?
variable:
.Pp
.Dl "eeprom local-mac-address\e?"
.Pp
Set the value of the
.Va local-mac-address?
variable to
.Dq Li true :
.Pp
.Dl "eeprom local-mac-address\e?=true"
.Pp
Note that the
.Ql \e
in the above examples is used to keep the shell from interpreting the
.Ql \&? .
.Pp
Write an image to the
.Va oem-logo
variable:
.Pp
.Dl "eeprom oem-logo=/path/to/image.raw"
.Pp
Remove the image from the
.Va oem-logo
variable again:
.Pp
.Dl "eeprom oem-logo="
.Pp
Set the value of the
.Va security-mode
variable to
.Dq Li full ,
and set the password:
.Bd -literal -offset indent
eeprom security-mode=full
New password:
Retype new password:
.Ed
.Pp
Remember that the maximum length for the password is 8 characters.
All characters exceeding this length will be ignored.
.Pp
Set a new password when the
.Va security-mode
variable is set to
.Dq Li command
or
.Dq Li full :
.Bd -literal -offset indent
eeprom security-password=
New password:
Retype new password:
.Ed
.Sh SEE ALSO
.Xr dc 4 ,
.Xr gem 4 ,
.Xr hme 4 ,
.Xr ofwdump 8
.Sh HISTORY
The
.Nm
utility first appeared in
.Bx 4.4 .
It was adopted from there by
.Fx 2.0 .
The
.Nm
utility was removed from
.Fx
again after
.Fx 2.1.7
because the utility was unused at that time.
The present implementation of the
.Nm
utility first appeared in
.Fx 5.3 .
It is inspired by the
.Nx
.Xr eeprom 8
and SunOS/Solaris
.Xr eeprom 1M
utilities.
.Sh AUTHORS
.An -nosplit
The
.Nm
utility uses base code from the
.Nx
version written by
.An Jason R. Thorpe .
The handlers for the Open Firmware
.Pa /options
node were written by
.An Marius Strobl Aq Mt marius@FreeBSD.org .
The code for accessing the Open Firmware device tree is shared with the
.Xr ofwdump 8
utility written by
.An Thomas Moestl Aq Mt tmm@FreeBSD.org .
.Sh BUGS
Currently,
.Nm
only supports systems equipped with Open Firmware and is only tested on Sun
Microsystems sun4u machines.

View File

@ -1,148 +0,0 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-NetBSD
*
* Copyright (c) 1996 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Jason R. Thorpe.
*
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 THE FOUNDATION OR CONTRIBUTORS
* 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.
*
* from: NetBSD: main.c,v 1.15 2001/02/19 23:22:42 cgd Exp
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
#include "ofw_options.h"
static int action(char *);
static void dump_config(void);
static void usage(void);
static void
usage(void)
{
fprintf(stderr,
"usage: eeprom -a\n"
" eeprom [-] name[=value] ...\n");
exit(EX_USAGE);
}
int
main(int argc, char *argv[])
{
int do_stdin, opt;
int aflag, rv;
char *cp;
char line[BUFSIZ];
aflag = do_stdin = 0;
rv = EX_OK;
while ((opt = getopt(argc, argv, "-a")) != -1) {
switch (opt) {
case '-':
if (aflag)
usage();
do_stdin = 1;
break;
case 'a':
if (do_stdin)
usage();
aflag = 1;
break;
case '?':
default:
usage();
/* NOTREACHED */
}
}
argc -= optind;
argv += optind;
if (aflag) {
if (argc != 0)
usage();
dump_config();
} else {
if (do_stdin) {
while (fgets(line, BUFSIZ, stdin) != NULL &&
rv == EX_OK) {
if (line[0] == '\n')
continue;
if ((cp = strrchr(line, '\n')) != NULL)
*cp = '\0';
rv = action(line);
}
if (ferror(stdin))
err(EX_NOINPUT, "stdin");
} else {
if (argc == 0)
usage();
while (argc && rv == EX_OK) {
rv = action(*argv);
++argv;
--argc;
}
}
}
return (rv);
}
static int
action(char *line)
{
int rv;
char *keyword, *arg;
keyword = strdup(line);
if (keyword == NULL)
err(EX_OSERR, "malloc() failed");
if ((arg = strrchr(keyword, '=')) != NULL)
*arg++ = '\0';
switch (rv = ofwo_action(keyword, arg)) {
case EX_UNAVAILABLE:
warnx("nothing available for '%s'.", keyword);
break;
case EX_DATAERR:
warnx("invalid value '%s' for '%s'.", arg, keyword);
break;
}
free(keyword);
return(rv);
}
static void
dump_config(void)
{
ofwo_dump();
}

View File

@ -1,312 +0,0 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (c) 2004 Marius Strobl
* All rights reserved.
*
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR OR CONTRIBUTORS 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.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
/*
* Handlers for Open Firmware /options node.
*/
#include <sys/types.h>
#include <dev/ofw/openfirm.h>
#include <err.h>
#include <fcntl.h>
#include <readpassphrase.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
#include "ofw_options.h"
#include "ofw_util.h"
#define OFWO_LOGO 512
#define OFWO_MAXPROP 31
#define OFWO_MAXPWD 8
struct ofwo_extabent {
const char *ex_prop;
int (*ex_handler)(const struct ofwo_extabent *, int,
const void *, int, const char *);
};
static int ofwo_oemlogo(const struct ofwo_extabent *, int, const void *,
int, const char *);
static int ofwo_secmode(const struct ofwo_extabent *, int, const void *,
int, const char *);
static int ofwo_secpwd(const struct ofwo_extabent *, int, const void *,
int, const char *);
static const struct ofwo_extabent ofwo_extab[] = {
{ "oem-logo", ofwo_oemlogo },
{ "security-mode", ofwo_secmode },
{ "security-password", ofwo_secpwd },
{ NULL, NULL }
};
static int ofwo_setpass(int);
static int ofwo_setstr(int, const void *, int, const char *, const char *);
static __inline void
ofwo_printprop(const char *prop, const char* buf, int buflen)
{
printf("%s: %.*s\n", prop, buflen, buf);
}
static int
ofwo_oemlogo(const struct ofwo_extabent *exent, int fd, const void *buf,
int buflen, const char *val)
{
int lfd;
char logo[OFWO_LOGO + 1];
if (val) {
if (val[0] == '\0')
ofw_setprop(fd, ofw_optnode(fd), exent->ex_prop, "", 1);
else {
if ((lfd = open(val, O_RDONLY)) == -1) {
warn("could not open '%s'", val);
return (EX_USAGE);
}
if (read(lfd, logo, OFWO_LOGO) != OFWO_LOGO ||
lseek(lfd, 0, SEEK_END) != OFWO_LOGO) {
close(lfd);
warnx("logo '%s' has wrong size.", val);
return (EX_USAGE);
}
close(lfd);
logo[OFWO_LOGO] = '\0';
if (ofw_setprop(fd, ofw_optnode(fd), exent->ex_prop,
logo, OFWO_LOGO + 1) != OFWO_LOGO)
errx(EX_IOERR, "writing logo failed.");
}
} else
if (buflen != 0)
printf("%s: <logo data>\n", exent->ex_prop);
else
ofwo_printprop(exent->ex_prop, (const char *)buf,
buflen);
return (EX_OK);
}
static int
ofwo_secmode(const struct ofwo_extabent *exent, int fd, const void *buf,
int buflen, const char *val)
{
int res;
if (val) {
if (strcmp(val, "full") == 0 || strcmp(val, "command") == 0) {
if ((res = ofwo_setpass(fd)) != EX_OK)
return (res);
if ((res = ofwo_setstr(fd, buf, buflen, exent->ex_prop,
val)) != EX_OK)
ofw_setprop(fd, ofw_optnode(fd),
"security-password", "", 1);
return (res);
}
if (strcmp(val, "none") == 0) {
ofw_setprop(fd, ofw_optnode(fd), "security-password",
"", 1);
return (ofwo_setstr(fd, buf, buflen, exent->ex_prop,
val));
}
return (EX_DATAERR);
} else
ofwo_printprop(exent->ex_prop, (const char *)buf, buflen);
return (EX_OK);
}
static int
ofwo_secpwd(const struct ofwo_extabent *exent, int fd, const void *buf,
int buflen, const char *val)
{
void *pbuf;
int len, pblen, rv;
pblen = 0;
rv = EX_OK;
pbuf = NULL;
if (val) {
len = ofw_getprop_alloc(fd, ofw_optnode(fd), "security-mode",
&pbuf, &pblen, 1);
if (len <= 0 || strncmp("none", (char *)pbuf, len) == 0) {
rv = EX_CONFIG;
warnx("no security mode set.");
} else if (strncmp("command", (char *)pbuf, len) == 0 ||
strncmp("full", (char *)pbuf, len) == 0) {
rv = ofwo_setpass(fd);
} else {
rv = EX_CONFIG;
warnx("invalid security mode.");
}
} else
ofwo_printprop(exent->ex_prop, (const char *)buf, buflen);
if (pbuf != NULL)
free(pbuf);
return (rv);
}
static int
ofwo_setpass(int fd)
{
char pwd1[OFWO_MAXPWD + 1], pwd2[OFWO_MAXPWD + 1];
if (readpassphrase("New password:", pwd1, sizeof(pwd1),
RPP_ECHO_OFF | RPP_REQUIRE_TTY) == NULL ||
readpassphrase("Retype new password:", pwd2, sizeof(pwd2),
RPP_ECHO_OFF | RPP_REQUIRE_TTY) == NULL)
errx(EX_USAGE, "failed to get password.");
if (strlen(pwd1) == 0) {
printf("Password unchanged.\n");
return (EX_OK);
}
if (strcmp(pwd1, pwd2) != 0) {
printf("Mismatch - password unchanged.\n");
return (EX_USAGE);
}
ofw_setprop(fd, ofw_optnode(fd), "security-password", pwd1,
strlen(pwd1) + 1);
return (EX_OK);
}
static int
ofwo_setstr(int fd, const void *buf, int buflen, const char *prop,
const char *val)
{
void *pbuf;
int len, pblen, rv;
phandle_t optnode;
char *oval;
pblen = 0;
rv = EX_OK;
pbuf = NULL;
optnode = ofw_optnode(fd);
ofw_setprop(fd, optnode, prop, val, strlen(val) + 1);
len = ofw_getprop_alloc(fd, optnode, prop, &pbuf, &pblen, 1);
if (len < 0 || strncmp(val, (char *)pbuf, len) != 0) {
/*
* The value is too long for this property and the OFW has
* truncated it to fit or the value is illegal and a legal
* one has been written instead (e.g. attempted to write
* "foobar" to a "true"/"false"-property) - try to recover
* the old value.
*/
rv = EX_DATAERR;
if ((oval = malloc(buflen + 1)) == NULL)
err(EX_OSERR, "malloc() failed.");
strncpy(oval, buf, buflen);
oval[buflen] = '\0';
len = ofw_setprop(fd, optnode, prop, oval, buflen + 1);
if (len != buflen)
errx(EX_IOERR, "recovery of old value failed.");
free(oval);
goto out;
}
printf("%s: %.*s%s->%s%.*s\n", prop, buflen, (const char *)buf,
buflen > 0 ? " " : "", len > 0 ? " " : "", len, (char *)pbuf);
out:
if (pbuf != NULL)
free(pbuf);
return (rv);
}
void
ofwo_dump(void)
{
void *pbuf;
int fd, len, nlen, pblen;
phandle_t optnode;
char prop[OFWO_MAXPROP + 1];
const struct ofwo_extabent *ex;
pblen = 0;
pbuf = NULL;
fd = ofw_open(O_RDONLY);
optnode = ofw_optnode(fd);
for (nlen = ofw_firstprop(fd, optnode, prop, sizeof(prop)); nlen != 0;
nlen = ofw_nextprop(fd, optnode, prop, prop, sizeof(prop))) {
len = ofw_getprop_alloc(fd, optnode, prop, &pbuf, &pblen, 1);
if (len < 0)
continue;
if (strcmp(prop, "name") == 0)
continue;
for (ex = ofwo_extab; ex->ex_prop != NULL; ++ex)
if (strcmp(ex->ex_prop, prop) == 0)
break;
if (ex->ex_prop != NULL)
(*ex->ex_handler)(ex, fd, pbuf, len, NULL);
else
ofwo_printprop(prop, (char *)pbuf, len);
}
if (pbuf != NULL)
free(pbuf);
ofw_close(fd);
}
int
ofwo_action(const char *prop, const char *val)
{
void *pbuf;
int fd, len, pblen, rv;
const struct ofwo_extabent *ex;
pblen = 0;
rv = EX_OK;
pbuf = NULL;
if (strcmp(prop, "name") == 0)
return (EX_UNAVAILABLE);
if (val)
fd = ofw_open(O_RDWR);
else
fd = ofw_open(O_RDONLY);
len = ofw_getprop_alloc(fd, ofw_optnode(fd), prop, &pbuf, &pblen, 1);
if (len < 0) {
rv = EX_UNAVAILABLE;
goto out;
}
for (ex = ofwo_extab; ex->ex_prop != NULL; ++ex)
if (strcmp(ex->ex_prop, prop) == 0)
break;
if (ex->ex_prop != NULL)
rv = (*ex->ex_handler)(ex, fd, pbuf, len, val);
else if (val)
rv = ofwo_setstr(fd, pbuf, len, prop, val);
else
ofwo_printprop(prop, (char *)pbuf, len);
out:
if (pbuf != NULL)
free(pbuf);
ofw_close(fd);
return (rv);
}

View File

@ -1,36 +0,0 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (c) 2004 Marius Strobl
* All rights reserved.
*
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR OR CONTRIBUTORS 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.
*
* $FreeBSD$
*/
#ifndef OFW_OPTIONS_H
#define OFW_OPTIONS_H
void ofwo_dump(void);
int ofwo_action(const char *prop, const char *val);
#endif /* OFW_OPTIONS_H */