xref: /linux-6.15/drivers/eisa/virtual_root.c (revision d052d1be)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * Virtual EISA root driver.
31da177e4SLinus Torvalds  * Acts as a placeholder if we don't have a proper EISA bridge.
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  * (C) 2003 Marc Zyngier <[email protected]>
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * This code is released under the GPL version 2.
81da177e4SLinus Torvalds  */
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds #include <linux/config.h>
111da177e4SLinus Torvalds #include <linux/kernel.h>
12*d052d1beSRussell King #include <linux/platform_device.h>
131da177e4SLinus Torvalds #include <linux/eisa.h>
141da177e4SLinus Torvalds #include <linux/module.h>
151da177e4SLinus Torvalds #include <linux/moduleparam.h>
161da177e4SLinus Torvalds #include <linux/init.h>
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds #if defined(CONFIG_ALPHA_JENSEN) || defined(CONFIG_EISA_VLB_PRIMING)
191da177e4SLinus Torvalds #define EISA_FORCE_PROBE_DEFAULT 1
201da177e4SLinus Torvalds #else
211da177e4SLinus Torvalds #define EISA_FORCE_PROBE_DEFAULT 0
221da177e4SLinus Torvalds #endif
231da177e4SLinus Torvalds 
241da177e4SLinus Torvalds static int force_probe = EISA_FORCE_PROBE_DEFAULT;
251da177e4SLinus Torvalds static void virtual_eisa_release (struct device *);
261da177e4SLinus Torvalds 
271da177e4SLinus Torvalds /* The default EISA device parent (virtual root device).
281da177e4SLinus Torvalds  * Now use a platform device, since that's the obvious choice. */
291da177e4SLinus Torvalds 
301da177e4SLinus Torvalds static struct platform_device eisa_root_dev = {
311da177e4SLinus Torvalds 	.name = "eisa",
321da177e4SLinus Torvalds 	.id   = 0,
331da177e4SLinus Torvalds 	.dev  = {
341da177e4SLinus Torvalds 		.release = virtual_eisa_release,
351da177e4SLinus Torvalds 	},
361da177e4SLinus Torvalds };
371da177e4SLinus Torvalds 
381da177e4SLinus Torvalds static struct eisa_root_device eisa_bus_root = {
391da177e4SLinus Torvalds 	.dev           = &eisa_root_dev.dev,
401da177e4SLinus Torvalds 	.bus_base_addr = 0,
411da177e4SLinus Torvalds 	.res	       = &ioport_resource,
421da177e4SLinus Torvalds 	.slots	       = EISA_MAX_SLOTS,
431da177e4SLinus Torvalds 	.dma_mask      = 0xffffffff,
441da177e4SLinus Torvalds };
451da177e4SLinus Torvalds 
461da177e4SLinus Torvalds static void virtual_eisa_release (struct device *dev)
471da177e4SLinus Torvalds {
481da177e4SLinus Torvalds 	/* nothing really to do here */
491da177e4SLinus Torvalds }
501da177e4SLinus Torvalds 
511da177e4SLinus Torvalds static int virtual_eisa_root_init (void)
521da177e4SLinus Torvalds {
531da177e4SLinus Torvalds 	int r;
541da177e4SLinus Torvalds 
551da177e4SLinus Torvalds         if ((r = platform_device_register (&eisa_root_dev))) {
561da177e4SLinus Torvalds                 return r;
571da177e4SLinus Torvalds         }
581da177e4SLinus Torvalds 
591da177e4SLinus Torvalds 	eisa_bus_root.force_probe = force_probe;
601da177e4SLinus Torvalds 
611da177e4SLinus Torvalds 	eisa_root_dev.dev.driver_data = &eisa_bus_root;
621da177e4SLinus Torvalds 
631da177e4SLinus Torvalds 	if (eisa_root_register (&eisa_bus_root)) {
641da177e4SLinus Torvalds 		/* A real bridge may have been registered before
651da177e4SLinus Torvalds 		 * us. So quietly unregister. */
661da177e4SLinus Torvalds 		platform_device_unregister (&eisa_root_dev);
671da177e4SLinus Torvalds 		return -1;
681da177e4SLinus Torvalds 	}
691da177e4SLinus Torvalds 
701da177e4SLinus Torvalds 	return 0;
711da177e4SLinus Torvalds }
721da177e4SLinus Torvalds 
731da177e4SLinus Torvalds module_param (force_probe, int, 0444);
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds device_initcall (virtual_eisa_root_init);
76