brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · e647a68 Raw
98 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright(c) 2021 Intel Corporation. All rights rsvd. */3#include <linux/init.h>4#include <linux/kernel.h>5#include <linux/module.h>6#include <linux/device.h>7#include "idxd.h"8 9 10int __idxd_driver_register(struct idxd_device_driver *idxd_drv, struct module *owner,11			   const char *mod_name)12{13	struct device_driver *drv = &idxd_drv->drv;14 15	if (!idxd_drv->type) {16		pr_debug("driver type not set (%ps)\n", __builtin_return_address(0));17		return -EINVAL;18	}19 20	drv->name = idxd_drv->name;21	drv->bus = &dsa_bus_type;22	drv->owner = owner;23	drv->mod_name = mod_name;24 25	return driver_register(drv);26}27EXPORT_SYMBOL_GPL(__idxd_driver_register);28 29void idxd_driver_unregister(struct idxd_device_driver *idxd_drv)30{31	driver_unregister(&idxd_drv->drv);32}33EXPORT_SYMBOL_GPL(idxd_driver_unregister);34 35static int idxd_config_bus_match(struct device *dev,36				 const struct device_driver *drv)37{38	const struct idxd_device_driver *idxd_drv =39		container_of_const(drv, struct idxd_device_driver, drv);40	struct idxd_dev *idxd_dev = confdev_to_idxd_dev(dev);41	int i = 0;42 43	while (idxd_drv->type[i] != IDXD_DEV_NONE) {44		if (idxd_dev->type == idxd_drv->type[i])45			return 1;46		i++;47	}48 49	return 0;50}51 52static int idxd_config_bus_probe(struct device *dev)53{54	struct idxd_device_driver *idxd_drv =55		container_of(dev->driver, struct idxd_device_driver, drv);56	struct idxd_dev *idxd_dev = confdev_to_idxd_dev(dev);57 58	return idxd_drv->probe(idxd_dev);59}60 61static void idxd_config_bus_remove(struct device *dev)62{63	struct idxd_device_driver *idxd_drv =64		container_of(dev->driver, struct idxd_device_driver, drv);65	struct idxd_dev *idxd_dev = confdev_to_idxd_dev(dev);66 67	idxd_drv->remove(idxd_dev);68}69 70static int idxd_bus_uevent(const struct device *dev, struct kobj_uevent_env *env)71{72	return add_uevent_var(env, "MODALIAS=" IDXD_DEVICES_MODALIAS_FMT, 0);73}74 75const struct bus_type dsa_bus_type = {76	.name = "dsa",77	.match = idxd_config_bus_match,78	.probe = idxd_config_bus_probe,79	.remove = idxd_config_bus_remove,80	.uevent = idxd_bus_uevent,81};82EXPORT_SYMBOL_GPL(dsa_bus_type);83 84static int __init dsa_bus_init(void)85{86	return bus_register(&dsa_bus_type);87}88module_init(dsa_bus_init);89 90static void __exit dsa_bus_exit(void)91{92	bus_unregister(&dsa_bus_type);93}94module_exit(dsa_bus_exit);95 96MODULE_DESCRIPTION("IDXD driver dsa_bus_type driver");97MODULE_LICENSE("GPL v2");98