123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // SPDX-License-Identifier: GPL-2.0-only
- /*
- * MDEV driver
- *
- * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
- * Author: Neo Jia <[email protected]>
- * Kirti Wankhede <[email protected]>
- */
- #include <linux/iommu.h>
- #include <linux/mdev.h>
- #include "mdev_private.h"
- static int mdev_probe(struct device *dev)
- {
- struct mdev_driver *drv =
- container_of(dev->driver, struct mdev_driver, driver);
- if (!drv->probe)
- return 0;
- return drv->probe(to_mdev_device(dev));
- }
- static void mdev_remove(struct device *dev)
- {
- struct mdev_driver *drv =
- container_of(dev->driver, struct mdev_driver, driver);
- if (drv->remove)
- drv->remove(to_mdev_device(dev));
- }
- static int mdev_match(struct device *dev, struct device_driver *drv)
- {
- /*
- * No drivers automatically match. Drivers are only bound by explicit
- * device_driver_attach()
- */
- return 0;
- }
- struct bus_type mdev_bus_type = {
- .name = "mdev",
- .probe = mdev_probe,
- .remove = mdev_remove,
- .match = mdev_match,
- };
- /**
- * mdev_register_driver - register a new MDEV driver
- * @drv: the driver to register
- *
- * Returns a negative value on error, otherwise 0.
- **/
- int mdev_register_driver(struct mdev_driver *drv)
- {
- if (!drv->device_api)
- return -EINVAL;
- /* initialize common driver fields */
- drv->driver.bus = &mdev_bus_type;
- return driver_register(&drv->driver);
- }
- EXPORT_SYMBOL(mdev_register_driver);
- /*
- * mdev_unregister_driver - unregister MDEV driver
- * @drv: the driver to unregister
- */
- void mdev_unregister_driver(struct mdev_driver *drv)
- {
- driver_unregister(&drv->driver);
- }
- EXPORT_SYMBOL(mdev_unregister_driver);
|