cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tc-driver.c (3002B)


      1/*
      2 *	TURBOchannel driver services.
      3 *
      4 *	Copyright (c) 2005  James Simmons
      5 *	Copyright (c) 2006  Maciej W. Rozycki
      6 *
      7 *	Loosely based on drivers/dio/dio-driver.c and
      8 *	drivers/pci/pci-driver.c.
      9 *
     10 *	This file is subject to the terms and conditions of the GNU
     11 *	General Public License.  See the file "COPYING" in the main
     12 *	directory of this archive for more details.
     13 */
     14
     15#include <linux/init.h>
     16#include <linux/module.h>
     17#include <linux/tc.h>
     18
     19/**
     20 * tc_register_driver - register a new TC driver
     21 * @drv: the driver structure to register
     22 *
     23 * Adds the driver structure to the list of registered drivers
     24 * Returns a negative value on error, otherwise 0.
     25 * If no error occurred, the driver remains registered even if
     26 * no device was claimed during registration.
     27 */
     28int tc_register_driver(struct tc_driver *tdrv)
     29{
     30	return driver_register(&tdrv->driver);
     31}
     32EXPORT_SYMBOL(tc_register_driver);
     33
     34/**
     35 * tc_unregister_driver - unregister a TC driver
     36 * @drv: the driver structure to unregister
     37 *
     38 * Deletes the driver structure from the list of registered TC drivers,
     39 * gives it a chance to clean up by calling its remove() function for
     40 * each device it was responsible for, and marks those devices as
     41 * driverless.
     42 */
     43void tc_unregister_driver(struct tc_driver *tdrv)
     44{
     45	driver_unregister(&tdrv->driver);
     46}
     47EXPORT_SYMBOL(tc_unregister_driver);
     48
     49/**
     50 * tc_match_device - tell if a TC device structure has a matching
     51 *                   TC device ID structure
     52 * @tdrv: the TC driver to earch for matching TC device ID strings
     53 * @tdev: the TC device structure to match against
     54 *
     55 * Used by a driver to check whether a TC device present in the
     56 * system is in its list of supported devices.  Returns the matching
     57 * tc_device_id structure or %NULL if there is no match.
     58 */
     59static const struct tc_device_id *tc_match_device(struct tc_driver *tdrv,
     60						  struct tc_dev *tdev)
     61{
     62	const struct tc_device_id *id = tdrv->id_table;
     63
     64	if (id) {
     65		while (id->name[0] || id->vendor[0]) {
     66			if (strcmp(tdev->name, id->name) == 0 &&
     67			    strcmp(tdev->vendor, id->vendor) == 0)
     68				return id;
     69			id++;
     70		}
     71	}
     72	return NULL;
     73}
     74
     75/**
     76 * tc_bus_match - Tell if a device structure has a matching
     77 *                TC device ID structure
     78 * @dev: the device structure to match against
     79 * @drv: the device driver to search for matching TC device ID strings
     80 *
     81 * Used by a driver to check whether a TC device present in the
     82 * system is in its list of supported devices.  Returns 1 if there
     83 * is a match or 0 otherwise.
     84 */
     85static int tc_bus_match(struct device *dev, struct device_driver *drv)
     86{
     87	struct tc_dev *tdev = to_tc_dev(dev);
     88	struct tc_driver *tdrv = to_tc_driver(drv);
     89	const struct tc_device_id *id;
     90
     91	id = tc_match_device(tdrv, tdev);
     92	if (id)
     93		return 1;
     94
     95	return 0;
     96}
     97
     98struct bus_type tc_bus_type = {
     99	.name	= "tc",
    100	.match	= tc_bus_match,
    101};
    102EXPORT_SYMBOL(tc_bus_type);
    103
    104static int __init tc_driver_init(void)
    105{
    106	return bus_register(&tc_bus_type);
    107}
    108
    109postcore_initcall(tc_driver_init);