diff options
author | Corey Minyard <cminyard@mvista.com> | 2017-09-13 00:10:18 -0400 |
---|---|---|
committer | Corey Minyard <cminyard@mvista.com> | 2017-09-28 13:25:58 -0400 |
commit | c6f85a753df858018b063f5ab89b277179c3387f (patch) | |
tree | f47d459252dfabad1c1058577660a4cfc572addc | |
parent | 13d0b35c5c201e8e6ee520b223c88f58d022a37f (diff) |
ipmi_si: Move PARISC handling to another file
Signed-off-by: Corey Minyard <cminyard@mvista.com>
-rw-r--r-- | drivers/char/ipmi/Makefile | 3 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_si.h | 7 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_si_intf.c | 60 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_si_parisc.c | 58 |
4 files changed, 71 insertions, 57 deletions
diff --git a/drivers/char/ipmi/Makefile b/drivers/char/ipmi/Makefile index 55ec4a3d7d07..3c01149e7d36 100644 --- a/drivers/char/ipmi/Makefile +++ b/drivers/char/ipmi/Makefile | |||
@@ -7,6 +7,9 @@ ipmi_si-y := ipmi_si_intf.o ipmi_kcs_sm.o ipmi_smic_sm.o ipmi_bt_sm.o \ | |||
7 | ifdef CONFIG_PCI | 7 | ifdef CONFIG_PCI |
8 | ipmi_si-y += ipmi_si_pci.o | 8 | ipmi_si-y += ipmi_si_pci.o |
9 | endif | 9 | endif |
10 | ifdef CONFIG_PARISC | ||
11 | ipmi_si-y += ipmi_si_parisc.o | ||
12 | endif | ||
10 | 13 | ||
11 | obj-$(CONFIG_IPMI_HANDLER) += ipmi_msghandler.o | 14 | obj-$(CONFIG_IPMI_HANDLER) += ipmi_msghandler.o |
12 | obj-$(CONFIG_IPMI_DEVICE_INTERFACE) += ipmi_devintf.o | 15 | obj-$(CONFIG_IPMI_DEVICE_INTERFACE) += ipmi_devintf.o |
diff --git a/drivers/char/ipmi/ipmi_si.h b/drivers/char/ipmi/ipmi_si.h index 7627e9ada017..f3530d60db05 100644 --- a/drivers/char/ipmi/ipmi_si.h +++ b/drivers/char/ipmi/ipmi_si.h | |||
@@ -37,3 +37,10 @@ void ipmi_si_pci_shutdown(void); | |||
37 | static inline void ipmi_si_pci_init(void) { } | 37 | static inline void ipmi_si_pci_init(void) { } |
38 | static inline void ipmi_si_pci_shutdown(void) { } | 38 | static inline void ipmi_si_pci_shutdown(void) { } |
39 | #endif | 39 | #endif |
40 | #ifdef CONFIG_PARISC | ||
41 | void ipmi_si_parisc_init(void); | ||
42 | void ipmi_si_parisc_shutdown(void); | ||
43 | #else | ||
44 | static inline void ipmi_si_parisc_init(void) { } | ||
45 | static inline void ipmi_si_parisc_shutdown(void) { } | ||
46 | #endif | ||
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index a2be633697e8..2d538840fbf4 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
@@ -63,11 +63,6 @@ | |||
63 | #include <linux/string.h> | 63 | #include <linux/string.h> |
64 | #include <linux/ctype.h> | 64 | #include <linux/ctype.h> |
65 | 65 | ||
66 | #ifdef CONFIG_PARISC | ||
67 | #include <asm/hardware.h> /* for register_parisc_driver() stuff */ | ||
68 | #include <asm/parisc-device.h> | ||
69 | #endif | ||
70 | |||
71 | #define PFX "ipmi_si: " | 66 | #define PFX "ipmi_si: " |
72 | 67 | ||
73 | /* Measure times between events in the driver. */ | 68 | /* Measure times between events in the driver. */ |
@@ -282,9 +277,6 @@ struct smi_info { | |||
282 | #define IPMI_MAX_INTFS 4 | 277 | #define IPMI_MAX_INTFS 4 |
283 | static int force_kipmid[IPMI_MAX_INTFS]; | 278 | static int force_kipmid[IPMI_MAX_INTFS]; |
284 | static int num_force_kipmid; | 279 | static int num_force_kipmid; |
285 | #ifdef CONFIG_PARISC | ||
286 | static bool parisc_registered; | ||
287 | #endif | ||
288 | 280 | ||
289 | static unsigned int kipmid_max_busy_us[IPMI_MAX_INTFS]; | 281 | static unsigned int kipmid_max_busy_us[IPMI_MAX_INTFS]; |
290 | static int num_max_busy_us; | 282 | static int num_max_busy_us; |
@@ -1581,47 +1573,6 @@ static struct smi_info *smi_info_alloc(void) | |||
1581 | return info; | 1573 | return info; |
1582 | } | 1574 | } |
1583 | 1575 | ||
1584 | #ifdef CONFIG_PARISC | ||
1585 | static int __init ipmi_parisc_probe(struct parisc_device *dev) | ||
1586 | { | ||
1587 | struct si_sm_io io; | ||
1588 | |||
1589 | io.si_type = SI_KCS; | ||
1590 | io.addr_source = SI_DEVICETREE; | ||
1591 | io.addr_type = IPMI_MEM_ADDR_SPACE; | ||
1592 | io.addr_data = dev->hpa.start; | ||
1593 | io.regsize = 1; | ||
1594 | io.regspacing = 1; | ||
1595 | io.regshift = 0; | ||
1596 | io.irq = 0; /* no interrupt */ | ||
1597 | io.irq_setup = NULL; | ||
1598 | io.dev = &dev->dev; | ||
1599 | |||
1600 | dev_dbg(&dev->dev, "addr 0x%lx\n", io.addr_data); | ||
1601 | |||
1602 | return ipmi_si_add_smi(&io); | ||
1603 | } | ||
1604 | |||
1605 | static int __exit ipmi_parisc_remove(struct parisc_device *dev) | ||
1606 | { | ||
1607 | return ipmi_si_remove_by_dev(&pdev->dev); | ||
1608 | } | ||
1609 | |||
1610 | static const struct parisc_device_id ipmi_parisc_tbl[] __initconst = { | ||
1611 | { HPHW_MC, HVERSION_REV_ANY_ID, 0x004, 0xC0 }, | ||
1612 | { 0, } | ||
1613 | }; | ||
1614 | |||
1615 | MODULE_DEVICE_TABLE(parisc, ipmi_parisc_tbl); | ||
1616 | |||
1617 | static struct parisc_driver ipmi_parisc_driver __refdata = { | ||
1618 | .name = "ipmi", | ||
1619 | .id_table = ipmi_parisc_tbl, | ||
1620 | .probe = ipmi_parisc_probe, | ||
1621 | .remove = __exit_p(ipmi_parisc_remove), | ||
1622 | }; | ||
1623 | #endif /* CONFIG_PARISC */ | ||
1624 | |||
1625 | static int wait_for_msg_done(struct smi_info *smi_info) | 1576 | static int wait_for_msg_done(struct smi_info *smi_info) |
1626 | { | 1577 | { |
1627 | enum si_sm_result smi_result; | 1578 | enum si_sm_result smi_result; |
@@ -2522,10 +2473,7 @@ static int init_ipmi_si(void) | |||
2522 | 2473 | ||
2523 | ipmi_si_pci_init(); | 2474 | ipmi_si_pci_init(); |
2524 | 2475 | ||
2525 | #ifdef CONFIG_PARISC | 2476 | ipmi_si_parisc_init(); |
2526 | register_parisc_driver(&ipmi_parisc_driver); | ||
2527 | parisc_registered = true; | ||
2528 | #endif | ||
2529 | 2477 | ||
2530 | /* We prefer devices with interrupts, but in the case of a machine | 2478 | /* We prefer devices with interrupts, but in the case of a machine |
2531 | with multiple BMCs we assume that there will be several instances | 2479 | with multiple BMCs we assume that there will be several instances |
@@ -2682,10 +2630,8 @@ static void cleanup_ipmi_si(void) | |||
2682 | return; | 2630 | return; |
2683 | 2631 | ||
2684 | ipmi_si_pci_shutdown(); | 2632 | ipmi_si_pci_shutdown(); |
2685 | #ifdef CONFIG_PARISC | 2633 | |
2686 | if (parisc_registered) | 2634 | ipmi_si_parisc_shutdown(); |
2687 | unregister_parisc_driver(&ipmi_parisc_driver); | ||
2688 | #endif | ||
2689 | 2635 | ||
2690 | ipmi_si_platform_shutdown(); | 2636 | ipmi_si_platform_shutdown(); |
2691 | 2637 | ||
diff --git a/drivers/char/ipmi/ipmi_si_parisc.c b/drivers/char/ipmi/ipmi_si_parisc.c new file mode 100644 index 000000000000..090b073ab441 --- /dev/null +++ b/drivers/char/ipmi/ipmi_si_parisc.c | |||
@@ -0,0 +1,58 @@ | |||
1 | |||
2 | #include <linux/module.h> | ||
3 | #include <asm/hardware.h> /* for register_parisc_driver() stuff */ | ||
4 | #include <asm/parisc-device.h> | ||
5 | #include "ipmi_si.h" | ||
6 | |||
7 | static bool parisc_registered; | ||
8 | |||
9 | static int __init ipmi_parisc_probe(struct parisc_device *dev) | ||
10 | { | ||
11 | struct si_sm_io io; | ||
12 | |||
13 | io.si_type = SI_KCS; | ||
14 | io.addr_source = SI_DEVICETREE; | ||
15 | io.addr_type = IPMI_MEM_ADDR_SPACE; | ||
16 | io.addr_data = dev->hpa.start; | ||
17 | io.regsize = 1; | ||
18 | io.regspacing = 1; | ||
19 | io.regshift = 0; | ||
20 | io.irq = 0; /* no interrupt */ | ||
21 | io.irq_setup = NULL; | ||
22 | io.dev = &dev->dev; | ||
23 | |||
24 | dev_dbg(&dev->dev, "addr 0x%lx\n", io.addr_data); | ||
25 | |||
26 | return ipmi_si_add_smi(&io); | ||
27 | } | ||
28 | |||
29 | static int __exit ipmi_parisc_remove(struct parisc_device *dev) | ||
30 | { | ||
31 | return ipmi_si_remove_by_dev(&dev->dev); | ||
32 | } | ||
33 | |||
34 | static const struct parisc_device_id ipmi_parisc_tbl[] __initconst = { | ||
35 | { HPHW_MC, HVERSION_REV_ANY_ID, 0x004, 0xC0 }, | ||
36 | { 0, } | ||
37 | }; | ||
38 | |||
39 | MODULE_DEVICE_TABLE(parisc, ipmi_parisc_tbl); | ||
40 | |||
41 | static struct parisc_driver ipmi_parisc_driver __refdata = { | ||
42 | .name = "ipmi", | ||
43 | .id_table = ipmi_parisc_tbl, | ||
44 | .probe = ipmi_parisc_probe, | ||
45 | .remove = __exit_p(ipmi_parisc_remove), | ||
46 | }; | ||
47 | |||
48 | void ipmi_si_parisc_init(void) | ||
49 | { | ||
50 | register_parisc_driver(&ipmi_parisc_driver); | ||
51 | parisc_registered = true; | ||
52 | } | ||
53 | |||
54 | void ipmi_si_parisc_shutdown(void) | ||
55 | { | ||
56 | if (parisc_registered) | ||
57 | unregister_parisc_driver(&ipmi_parisc_driver); | ||
58 | } | ||