* Copyright (c) 1993 The Regents of the University of California.
* This software was developed by the Computer Systems Engineering group
* at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
* contributed to Berkeley.
* All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Lawrence Berkeley Laboratory.
* %sccs.include.redist.c%
"@(#) Copyright (c) 1993 The Regents of the University of California.\n\
static char sccsid
[] = "@(#)eeprom.c 5.2 (Berkeley) %G%";
* eeprom - openprom control utility
* eeprom [field] [field=value]
#include <machine/openpromio.h>
static char openprom
[] = _PATH_OPENPROM
;
static char usage
[] = "usage: %s [field] [field=value]\n";
register int i
, op
, fd
, flags
, status
;
register struct opiocdesc
*dp
;
char buf
[1024], buf2
[sizeof(buf
)];
/* Determine simple program name for error messages */
if (cp
= rindex(argv
[0], '/'))
while ((op
= getopt(argc
, argv
, "")) != EOF
)
(void) fprintf(stderr
, usage
, prog
);
/* Determine flags and open device */
for (i
= 0; i
< argc
; ++i
)
if (index(argv
[i
], '=') != NULL
) {
if ((fd
= open(openprom
, flags
, 0)) < 0) {
fprintf(stderr
, "%s: open %s: %s\n",
prog
, openprom
, strerror(errno
));
if (ioctl(fd
, OPIOCGETOPTNODE
, &dp
->op_nodeid
) < 0) {
fprintf(stderr
, "%s: get optionsnode: %s\n",
/* Prime the pump with a zero length name */
/* Get the next property name */
dp
->op_buflen
= sizeof(buf
);
if (ioctl(fd
, OPIOCNEXTPROP
, dp
) < 0) {
fprintf(stderr
, "%s: get next: %s\n",
/* Zero length name means we're done */
/* Clever hack, swap buffers */
dp
->op_buf
= dp
->op_name
;
dp
->op_namelen
= dp
->op_buflen
;
dp
->op_buflen
= sizeof(buf
);
if (ioctl(fd
, OPIOCGET
, dp
) < 0) {
fprintf(stderr
, "%s: get \"%s\": %s\n",
prog
, cp
, strerror(errno
));
printf("%.*s=%.*s\n", dp
->op_namelen
, dp
->op_name
,
dp
->op_buflen
, dp
->op_buf
);
for (i
= 0; i
< argc
; ++i
) {
dp
->op_name
= name
= argv
[i
];
dp
->op_buflen
= strlen(dp
->op_buf
);
dp
->op_buflen
= sizeof(buf
);
dp
->op_namelen
= strlen(name
);
if (ioctl(fd
, cp
? OPIOCSET
: OPIOCGET
, dp
) < 0) {
fprintf(stderr
, "%s: %s \"%s\": %s\n",
prog
, cp
? "set" : "get", name
, strerror(errno
));
/* If setting an entry, we're done */
fprintf(stderr
, "%s: \"%s\" not found\n", prog
, name
);
if (dp
->op_buflen
>= sizeof(buf
)) {
fprintf(stderr
, "%s: \"%s\" truncated\n", prog
, name
);
/* fall thorugh and print truncated value */
printf("%s=%.*s\n", name
, dp
->op_buflen
, buf
);