kboot: move to using devparse

We can use devparse directly now. No need to invent a kboot_parsedev
that just does what devparse does now that we've refactored.

Sponsored by:		Netflix
This commit is contained in:
Warner Losh 2022-12-02 11:10:06 -07:00
parent 7e1a2e46aa
commit 6f8e9f2273

View File

@ -49,49 +49,31 @@ static void kboot_kseg_get(int *nseg, void **ptr);
extern int command_fdt_internal(int argc, char *argv[]); extern int command_fdt_internal(int argc, char *argv[]);
/*
* NB: getdev should likely be identical to this most places, except maybe
* we should move to storing the length of the platform devdesc.
*/
int int
kboot_getdev(void **vdev, const char *devspec, const char **path) kboot_getdev(void **vdev, const char *devspec, const char **path)
{ {
int i, rv; int rv;
const char *devpath, *filepath; struct devdesc **dev = (struct devdesc **)vdev;
struct devsw *dv;
struct devdesc *desc;
if (devspec == NULL) { /*
rv = kboot_getdev(vdev, getenv("currdev"), NULL); * If it looks like this is just a path and no device, go with the
if (rv == 0 && path != NULL) * current device.
*/
if (devspec == NULL || strchr(devspec, ':') == NULL) {
if (((rv = devparse(dev, getenv("currdev"), NULL)) == 0) &&
(path != NULL))
*path = devspec; *path = devspec;
return (rv); return (rv);
} }
if (strchr(devspec, ':') != NULL) {
devpath = devspec;
filepath = strchr(devspec, ':') + 1;
} else {
devpath = getenv("currdev");
filepath = devspec;
}
for (i = 0; (dv = devsw[i]) != NULL; i++) { /*
if (strncmp(dv->dv_name, devpath, strlen(dv->dv_name)) == 0) * Try to parse the device name off the beginning of the devspec
goto found; */
} return (devparse(dev, devspec, path));
return (ENOENT);
found:
if (path != NULL && filepath != NULL)
*path = filepath;
else if (path != NULL)
*path = strchr(devspec, ':') + 1;
if (vdev != NULL) {
desc = malloc(sizeof(*desc));
desc->d_dev = dv;
desc->d_unit = 0;
desc->d_opendata = strdup(devpath);
*vdev = desc;
}
return (0);
} }
int int