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