stand/ofw: Refactor ofw parsedev

Both ofw_disk and ofw_net use the same parsedev routine, except for the
string passed in to match the ofw device node's type. Create a routine
to do that and connect these two users up to that.

Sponsored by:		Netflix
Differential Revision:	https://reviews.freebsd.org/D37560
This commit is contained in:
Warner Losh 2022-11-30 15:10:23 -07:00
parent 854001759e
commit f9ce8da864
4 changed files with 27 additions and 34 deletions

View file

@ -105,3 +105,26 @@ ofw_setcurrdev(struct env_var *ev, int flags, const void *value)
return (mount_currdev(ev, flags, value));
}
int
ofw_common_parsedev(struct devdesc **dev, const char *devspec, const char **path,
const char *ofwtype)
{
const char *rem_path;
struct ofw_devdesc *idev;
if (ofw_path_to_handle(devspec, ofwtype, &rem_path) == -1)
return (ENOENT);
idev = malloc(sizeof(struct ofw_devdesc));
if (idev == NULL) {
printf("ofw_parsedev: malloc failed\n");
return ENOMEM;
};
strlcpy(idev->d_path, devspec, min(rem_path - devspec + 1,
sizeof(idev->d_path)));
if (dev != NULL)
*dev = &idev->dd;
if (path != NULL)
*path = rem_path;
return 0;
}

View file

@ -63,6 +63,8 @@ extern int ofw_autoload(void);
void ofw_memmap(int);
phandle_t ofw_path_to_handle(const char *ofwpath, const char *want_type, const char **path);
int ofw_common_parsedev(struct devdesc **dev, const char *devspec, const char **path,
const char *ofwtype);
struct preloaded_file;
struct file_format;

View file

@ -234,21 +234,5 @@ ofwd_fmtdev(struct devdesc *idev)
static int
ofwd_parsedev(struct devdesc **dev, const char *devspec, const char **path)
{
const char *rem_path;
struct ofw_devdesc *idev;
if (ofw_path_to_handle(devspec, ofwdisk.dv_name, &rem_path) == -1)
return (ENOENT);
idev = malloc(sizeof(struct ofw_devdesc));
if (idev == NULL) {
printf("ofw_parsedev: malloc failed\n");
return ENOMEM;
};
strlcpy(idev->d_path, devspec, min(rem_path - devspec + 1,
sizeof(idev->d_path)));
if (dev != NULL)
*dev = &idev->dd;
if (path != NULL)
*path = rem_path;
return 0;
return (ofw_common_parsedev(dev, devspec, path, ofwdisk.dv_name));
}

View file

@ -308,23 +308,7 @@ static int ofwnd_init(void)
static int
ofwnd_parsedev(struct devdesc **dev, const char *devspec, const char **path)
{
const char *rem_path;
struct ofw_devdesc *idev;
if (ofw_path_to_handle(devspec, ofw_netdev.dv_name, &rem_path) == -1)
return (ENOENT);
idev = malloc(sizeof(struct ofw_devdesc));
if (idev == NULL) {
printf("ofw_parsedev: malloc failed\n");
return ENOMEM;
};
strlcpy(idev->d_path, devspec, min(rem_path - devspec + 1,
sizeof(idev->d_path)));
if (dev != NULL)
*dev = &idev->dd;
if (path != NULL)
*path = rem_path;
return 0;
return (ofw_common_parsedev(dev, devspec, path, ofw_netdev.dv_name));
}
static bool