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:
parent
854001759e
commit
f9ce8da864
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user