Loading...
// SPDX-License-Identifier: GPL-2.0 /* * Mount device driver for the VFS layer * * Copyright 2026 Simon Glass <sjg@chromium.org> */ #include <dm.h> #include <malloc.h> #include <vfs.h> #include "vfs_internal.h" #include <dm/device-internal.h> #include <dm/lists.h> int fs_mount_init(struct udevice *vfs, struct udevice *dir, struct udevice *fsdev) { struct vfs_priv *priv = dev_get_priv(vfs); struct vfsmount *mnt; char dev_name[30]; struct udevice *dev; char *str; int ret; snprintf(dev_name, sizeof(dev_name), "mount.%d", priv->mount_count); str = strdup(dev_name); if (!str) return log_msg_ret("fms", -ENOMEM); ret = device_bind_driver(vfs, "mount", str, &dev); if (ret) { free(str); return log_msg_ret("fmb", ret); } device_set_name_alloced(dev); ret = device_probe(dev); if (ret) { device_unbind(dev); return log_msg_ret("fmp", ret); } mnt = dev_get_uclass_priv(dev); mnt->dir = dir; mnt->target = fsdev; priv->mount_count++; return 0; } int fs_mount_uninit(struct udevice *mnt_dev) { int ret; ret = device_remove(mnt_dev, DM_REMOVE_NORMAL); if (ret) return log_msg_ret("fdr", ret); ret = device_unbind(mnt_dev); if (ret) return log_msg_ret("fdb", ret); return 0; } U_BOOT_DRIVER(mount) = { .name = "mount", .id = UCLASS_MOUNT, }; |