summaryrefslogtreecommitdiff
path: root/usr/src/man/man7d/ufm.7d
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man7d/ufm.7d')
-rw-r--r--usr/src/man/man7d/ufm.7d312
1 files changed, 0 insertions, 312 deletions
diff --git a/usr/src/man/man7d/ufm.7d b/usr/src/man/man7d/ufm.7d
deleted file mode 100644
index ea3b7fa4c3..0000000000
--- a/usr/src/man/man7d/ufm.7d
+++ /dev/null
@@ -1,312 +0,0 @@
-.\"
-.\" This file and its contents are supplied under the terms of the
-.\" Common Development and Distribution License ("CDDL"), version 1.0.
-.\" You may only use this file in accordance with the terms of version
-.\" 1.0 of the CDDL.
-.\"
-.\" A full copy of the text of the CDDL should have accompanied this
-.\" source. A copy of the CDDL is also available via the Internet at
-.\" http://www.illumos.org/license/CDDL.
-.\"
-.\"
-.\" Copyright 2019 Joyent, Inc.
-.\" Copyright 2020 Oxide Computer Company
-.\"
-.Dd May 23, 2021
-.Dt UFM 7D
-.Os
-.Sh NAME
-.Nm ufm
-.Nd Upgradeable Firmware Module driver
-.Sh SYNOPSIS
-.Pa /dev/ufm
-.Lp
-.In sys/ddi_ufm.h
-.Sh DESCRIPTION
-The
-.Nm
-device is a character special file that provides access to
-Upgradeable Firmware Image information, as described in
-.Xr ddi_ufm 9E
-via a private ioctl interface.
-.Pp
-The UFM interfaces described below are used in the implementation of the
-system through tools such as
-.Xr fwflash 1M
-or as part of the fault management architecture.
-.Sh FILES
-.Bl -tag -width Pa
-.It Pa /kernel/drv/amd64/ufm
-64-bit AMD64 ELF kernel driver
-.It Pa /kernel/drv/sparcv9/ufm
-64-bit SPARC ELF kernel driver
-.El
-.Sh IOCTLS
-The
-.Nm
-driver implements a versioned ioctl interface for accessing UFM facilities.
-The ioctl interfaces are defined in sys/ddi_ufm.h.
-The following ioctl cmds are supported by DDI_UFM_VERSION_ONE:
-.Bl -tag -width Dv
-.It Dv UFM_IOC_GETCAPS
-The
-.Dv UFM_IOC_GETCAPS
-ioctl is used to retrieve the set of DDI UFM capabilities supported by this
-device instance.
-.Pp
-The ddi_ufm_cap_t type defines a bitfield enumerating the full set of DDI UFM
-capabilities.
-.Bd -literal
-typedef enum {
- DDI_UFM_CAP_REPORT = 1 << 0,
- DDI_UFM_CAP_READIMG = 1 << 1
-} ddi_ufm_cap_t;
-.Ed
-.Pp
-The capabilities mean:
-.Bl -tag -width Dv
-.It Dv DDI_UFM_CAP_REPORT
-Indicates that the device is capable of reporting UFM information and
-supports the
-.Dv UFM_IOC_REPORT
-and
-.Dv UFM_IOC_REPORTSZ
-ioctls.
-.It Dv DDI_UFM_CAP_READIMG
-Indicates that the device is capable of retrieving a firmware image from
-a slot and transferring it back to the caller.
-The
-.Dv UFM_IOC_READIMG
-ioctl is supported.
-.El
-.Pp
-The
-.Vt ufm_ioc_getcaps_t
-structure defines the input/output data for the
-.Dv UFM_IOC_GETCAPS
-ioctl.
-Callers should specify the
-.Fa ufmg_version
-and
-.Fa ufmg_devpath
-fields.
-On success the
-.Fa ufmg_caps
-field will be filled in with a value indicating the
-supported UFM capabilities of the device specified in
-.Fa ufmg_devpath .
-.Bd -literal
-typedef struct ufm_ioc_getcaps {
- uint_t ufmg_version; /* DDI_UFM_VERSION_ONE */
- uint_t ufmg_caps; /* UFM Caps */
- char ufmg_devpath[MAXPATHLEN];
-} ufm_ioc_getcaps_t;
-.Ed
-.It Dv UFM_IOC_REPORTSZ
-The
-.Dv UFM_IOC_REPORTSZ
-ioctl is used to retrieve the amount of space
-(in bytes) required to hold the UFM data for this device instance.
-This should be used to allocate a sufficiently sized buffer for the
-.Dv UFM_IOC_REPORT
-ioctl.
-.Pp
-The
-.Vt ufm_ioc_bufsz_t
-structure defines the input/output data for the
-.Dv UFM_IOC_REPORTSZ
-ioctl.
-Callers should specify the
-.Fa ufbz_version
-and
-.Fa ufbz_devpath
-fields.
-On success the
-.Fa ufbz_size
-field will be filled in with the required buffer size.
-.Bd -literal
-typedef struct ufm_ioc_bufsz {
- uint_t ufbz_version; /* DDI_UFM_VERSION_ONE */
- size_t ufbz_size; /* sz of buf to be returned by ioctl */
- char ufbz_devpath[MAXPATHLEN];
-} ufm_ioc_bufsz_t;
-.Ed
-.It Dv UFM_IOC_REPORT
-The
-.Dv UFM_IOC_REPORT
-ioctl returns UFM image and slot data in the form of a packed nvlist.
-The
-.Vt ufm_ioc_report_t
-structure defines the input/output data for the
-.Dv UFM_IOC_REPORT
-ioctl.
-Callers should specify the ufmr_version, ufmr_bufsz and ufmr_devpath fields.
-On success, the ufmr_buf field will point to a packed nvlist containing the UFM
-data for the specified device instance.
-This data can be unpacked and decoded into an nvlist using
-.Xr nvlist_unpack 3NVPAIR .
-.Bd -literal
-typedef struct ufm_ioc_report {
- uint_t ufmr_version; /* DDI_UFM_VERSIONONE */
- size_t ufmr_bufsz; /* size of caller-supplied buffer */
- caddr_t ufmr_buf; /* buf to hold packed output nvl */
- char ufmr_devpath[MAXPATHLEN];
-} ufm_ioc_report_t;
-.Ed
-.Pp
-Due to the asynchronous nature of the system, it's possible for a device to
-undergo a configuration change in between a
-.Dv UFM_IOC_REPORTSZ
-ioctl and a subsequent
-.Dv UFM_IOC_REPORT
-ioctl that would alter the size of the buffer
-required to hold the UFM data.
-.Pp
-If the size of buffer supplied in the
-.Dv UFM_IOC_REPORT
-ioctl is greater than is required to hold the UFM data, then
-the ioctl will succeed and the ufmr_bufsz field will be updated to reflect the
-actual size of the returned UFM data.
-If the size of buffer supplied in the
-.Dv UFM_IOC_REPORT
-ioctl is less than what is required to hold the UFM data,
-the ioctl will fail with errno set to
-.Er EOVERFLOW .
-.It Dv UFM_IOC_READIMG
-The
-.Dv UFM_IOC_READIMG
-ioctl retrieves a firmware image and slot from a device.
-The
-.Vt ufm_ioc_readimg_t
-structure defines the input and output data for the ioctl.
-Devices may have their own alignment and size constraints which may be
-enforced upon issuing this ioctl.
-The structure has the following form:
-.Bd -literal
-typedef struct ufm_ioc_readimg {
- uint_t ufri_version;
- uint_t ufri_imageno;
- uint_t ufri_slotno;
- uint64_t ufri_offset;
- uint64_t ufri_len;
- uint64_t ufri_nread;
- void *ufri_buf;
- char ufri_devpath[MAXPATHLEN];
-} ufm_ioc_readimg_t;
-.Ed
-.Pp
-The
-.Ft ufri_imageno
-and
-.Ft ufri_slotno
-values are used to indicate the image and slot to read.
-These indexes correspond to the same indices that are returned in the
-nvlist from the
-.Dv UFM_IOC_REPORT
-ioctl.
-The
-.Ft ufri_offset
-and
-.Ft ufri_len
-members are used to indicate how many bytes to read from the image and
-where in the image to begin.
-The
-.Fa ufri_buf
-member must be set to a valid pointer.
-Data read from the device will be placed in that pointer.
-The pointer must be at least
-.Fa ufri_len
-bytes long.
-Upon successful completion, the
-.Fa ufri_nread
-member will be filled in with the number of bytes that have been placed
-in
-.Fa ufri_buf .
-Finally, the
-.Fa ufri_version
-and
-.Fa ufri_devpath
-fields must be filled in with the version number,
-.Dv DDI_UFM_VERSION_ONE ,
-and the corresponding /devices path.
-.El
-.Sh EXAMPLES
-This example demonstrates how to use the
-.Dv UFM_IOC_GETCAPS
-ioctl to determine the UFM capabilities of a given device instance.
-.Bd -literal
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/ddi_ufm.h>
-#include <sys/types.h>
-
-static const char devname[] = "/pci@ce,0/pci8086,2030@0/pci15d9,808@0";
-
-int
-main(int argc, char **argv)
-{
- int fd;
- ufm_ioc_getcaps_t ioc = { 0 };
-
- if ((fd = open(DDI_UFM_DEV, O_RDWR)) < 0) {
- (void) fprintf(stderr, "failed to open %s (%s)\n", DDI_UFM_DEV,
- strerror(errno));
- return (1);
- }
-
- ioc.ufmg_version = DDI_UFM_CURRENT_VERSION;
- (void) strcpy(ioc.ufmg_devpath, devname);
-
- if (ioctl(fd, UFM_IOC_GETCAPS, &ioc) < 0) {
- (void) fprintf(stderr, "getcaps ioctl failed (%s)\n",
- strerror(errno));
- (void) close(fd);
- return (1);
- }
- if ((ioc.ufmg_caps & DDI_UFM_CAP_REPORT) == 0) {
- (void) printf("Driver does not support DDI_UFM_CAP_REPORT\n");
- } else {
- (void) printf("Driver supports DDI_UFM_CAP_REPORT\n");
- }
- (void) close(fd);
- return (0);
-}
-.Ed
-.Sh ERRORS
-On failure to open or perform ioctls to the
-.Nm
-driver,
-.Va errno
-will be set to indicate the type of error.
-A subset of the more common errors are detailed below.
-For a full list of error numbers, see
-.Xr Intro 2
-.Bl -tag -width Er
-.It Er EAGAIN
-The device driver is not currently ready to accept calls to it's DDI UFM entry
-points.
-This may be because the driver is not fully initialized or because the driver
-is in the process of detaching.
-.It Er EFAULT
-The ufm driver encountered a failure while copying data either from or to the
-address space of the calling process.
-.It Er EINVAL
-The offset or length of an image would have resulted in a read outside
-of the image's valid range or with improper alignment.
-.It Er EIO
-A failure occurred while executing a DDI UFM entry point.
-.It Er ENOTSUP
-Either the requested ioctl is not supported by the target device, the device
-does not exist or the device does not support the UFM interfaces.
-.El
-.Sh INTERFACE STABILITY
-.Sy Evolving
-.Sh SEE ALSO
-.Xr ddi_ufm 9E ,
-.Xr ddi_ufm 9F ,
-.Xr ddi_ufm_image 9F ,
-.Xr ddi_ufm_slot 9F