diff options
author | Warner Losh <imp@FreeBSD.org> | 2022-11-30 22:09:56 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2022-11-30 22:30:33 +0000 |
commit | 40d340acb9316db5771fe777e279776b903336d4 (patch) | |
tree | 208e0b0064dbfda2ddbbb9fc312cf3401be01eab /stand/libofw | |
parent | a07cef5a738642ae0a39fa513945d9f867a5e2f1 (diff) | |
download | src-40d340acb9316db5771fe777e279776b903336d4.tar.gz src-40d340acb9316db5771fe777e279776b903336d4.zip |
stand: Implement ofw disk print routine
Have lsdev show openfirmware devices.
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D37555
Diffstat (limited to 'stand/libofw')
-rw-r--r-- | stand/libofw/ofw_disk.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/stand/libofw/ofw_disk.c b/stand/libofw/ofw_disk.c index 8f4c0162d32b..67da8cbeb310 100644 --- a/stand/libofw/ofw_disk.c +++ b/stand/libofw/ofw_disk.c @@ -184,6 +184,30 @@ ofwd_ioctl(struct open_file *f, u_long cmd, void *data) static int ofwd_print(int verbose __unused) { + uintmax_t block_size, n; + int ret; + char line[80]; + + /* + * We don't have a list of devices since we don't parse the whole OFW + * tree to find them. Instead, if we have an open device print info + * about it. Otherwise say we can't. Makes lsdev nicer. + */ + if ((ret = pager_output("block devices:\n")) != 0) + return (ret); + if (kdp != NULL) { + block_size = OF_block_size(kdp->d_handle); + n = OF_blocks(kdp->d_handle); + snprintf(line, sizeof(line), + " %s: OFW block device (%ju X %ju): %ju bytes\n", + kdp->d_path, n, block_size, n * block_size); + if ((ret = pager_output(line)) != 0) + return (ret); + } else { + if ((ret = pager_output(" none are open, so no info\n")) != 0) + return (ret); + } + return (0); } static char * |