xref: /openbmc/linux/drivers/eisa/virtual_root.c (revision d1d24ed4)
1d1d24ed4SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * Virtual EISA root driver.
41da177e4SLinus Torvalds  * Acts as a placeholder if we don't have a proper EISA bridge.
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  * (C) 2003 Marc Zyngier <maz@wild-wind.fr.eu.org>
71da177e4SLinus Torvalds  */
81da177e4SLinus Torvalds 
91da177e4SLinus Torvalds #include <linux/kernel.h>
10d052d1beSRussell King #include <linux/platform_device.h>
111da177e4SLinus Torvalds #include <linux/eisa.h>
121da177e4SLinus Torvalds #include <linux/module.h>
131da177e4SLinus Torvalds #include <linux/moduleparam.h>
141da177e4SLinus Torvalds #include <linux/init.h>
151da177e4SLinus Torvalds 
161da177e4SLinus Torvalds #if defined(CONFIG_ALPHA_JENSEN) || defined(CONFIG_EISA_VLB_PRIMING)
171da177e4SLinus Torvalds #define EISA_FORCE_PROBE_DEFAULT 1
181da177e4SLinus Torvalds #else
191da177e4SLinus Torvalds #define EISA_FORCE_PROBE_DEFAULT 0
201da177e4SLinus Torvalds #endif
211da177e4SLinus Torvalds 
221da177e4SLinus Torvalds static int force_probe = EISA_FORCE_PROBE_DEFAULT;
231da177e4SLinus Torvalds static void virtual_eisa_release (struct device *);
241da177e4SLinus Torvalds 
251da177e4SLinus Torvalds /* The default EISA device parent (virtual root device).
261da177e4SLinus Torvalds  * Now use a platform device, since that's the obvious choice. */
271da177e4SLinus Torvalds 
281da177e4SLinus Torvalds static struct platform_device eisa_root_dev = {
291da177e4SLinus Torvalds 	.name = "eisa",
301da177e4SLinus Torvalds 	.id   = 0,
311da177e4SLinus Torvalds 	.dev  = {
321da177e4SLinus Torvalds 		.release = virtual_eisa_release,
331da177e4SLinus Torvalds 	},
341da177e4SLinus Torvalds };
351da177e4SLinus Torvalds 
361da177e4SLinus Torvalds static struct eisa_root_device eisa_bus_root = {
371da177e4SLinus Torvalds 	.dev		= &eisa_root_dev.dev,
381da177e4SLinus Torvalds 	.bus_base_addr	= 0,
391da177e4SLinus Torvalds 	.res		= &ioport_resource,
401da177e4SLinus Torvalds 	.slots		= EISA_MAX_SLOTS,
411da177e4SLinus Torvalds 	.dma_mask	= 0xffffffff,
421da177e4SLinus Torvalds };
431da177e4SLinus Torvalds 
virtual_eisa_release(struct device * dev)441da177e4SLinus Torvalds static void virtual_eisa_release (struct device *dev)
451da177e4SLinus Torvalds {
461da177e4SLinus Torvalds 	/* nothing really to do here */
471da177e4SLinus Torvalds }
481da177e4SLinus Torvalds 
virtual_eisa_root_init(void)494a1ccb5bSAndrew Morton static int __init virtual_eisa_root_init (void)
501da177e4SLinus Torvalds {
511da177e4SLinus Torvalds 	int r;
521da177e4SLinus Torvalds 
5391809d22SLadislav Michl 	if ((r = platform_device_register (&eisa_root_dev)))
541da177e4SLinus Torvalds 		return r;
551da177e4SLinus Torvalds 
561da177e4SLinus Torvalds 	eisa_bus_root.force_probe = force_probe;
571da177e4SLinus Torvalds 
584b9d0d3bSGreg Kroah-Hartman 	dev_set_drvdata(&eisa_root_dev.dev, &eisa_bus_root);
591da177e4SLinus Torvalds 
601da177e4SLinus Torvalds 	if (eisa_root_register (&eisa_bus_root)) {
611da177e4SLinus Torvalds 		/* A real bridge may have been registered before
621da177e4SLinus Torvalds 		 * us. So quietly unregister. */
631da177e4SLinus Torvalds 		platform_device_unregister (&eisa_root_dev);
641da177e4SLinus Torvalds 		return -1;
651da177e4SLinus Torvalds 	}
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds 	return 0;
681da177e4SLinus Torvalds }
691da177e4SLinus Torvalds 
701da177e4SLinus Torvalds module_param (force_probe, int, 0444);
711da177e4SLinus Torvalds 
721da177e4SLinus Torvalds device_initcall (virtual_eisa_root_init);
73