1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Virtual EISA root driver. |
4 | * Acts as a placeholder if we don't have a proper EISA bridge. |
5 | * |
6 | * (C) 2003 Marc Zyngier <maz@wild-wind.fr.eu.org> |
7 | * modified for SNI usage by Thomas Bogendoerfer |
8 | */ |
9 | |
10 | #include <linux/kernel.h> |
11 | #include <linux/platform_device.h> |
12 | #include <linux/eisa.h> |
13 | #include <linux/init.h> |
14 | |
15 | /* The default EISA device parent (virtual root device). |
16 | * Now use a platform device, since that's the obvious choice. */ |
17 | |
18 | static struct platform_device eisa_root_dev = { |
19 | .name = "eisa" , |
20 | .id = 0, |
21 | }; |
22 | |
23 | static struct eisa_root_device eisa_bus_root = { |
24 | .dev = &eisa_root_dev.dev, |
25 | .bus_base_addr = 0, |
26 | .res = &ioport_resource, |
27 | .slots = EISA_MAX_SLOTS, |
28 | .dma_mask = 0xffffffff, |
29 | .force_probe = 1, |
30 | }; |
31 | |
32 | int __init sni_eisa_root_init(void) |
33 | { |
34 | int r; |
35 | |
36 | r = platform_device_register(&eisa_root_dev); |
37 | if (!r) |
38 | return r; |
39 | |
40 | dev_set_drvdata(dev: &eisa_root_dev.dev, data: &eisa_bus_root); |
41 | |
42 | if (eisa_root_register(root: &eisa_bus_root)) { |
43 | /* A real bridge may have been registered before |
44 | * us. So quietly unregister. */ |
45 | platform_device_unregister(&eisa_root_dev); |
46 | return -1; |
47 | } |
48 | return 0; |
49 | } |
50 | |