Commit | Line | Data |
---|---|---|
1a59d1b8 | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
99b38b4a DA |
2 | /* |
3 | * MXM WMI driver | |
4 | * | |
5 | * Copyright(C) 2010 Red Hat. | |
99b38b4a DA |
6 | */ |
7 | #include <linux/kernel.h> | |
8 | #include <linux/module.h> | |
9 | #include <linux/init.h> | |
475879d6 | 10 | #include <linux/mxm-wmi.h> |
8b48463f | 11 | #include <linux/acpi.h> |
99b38b4a DA |
12 | |
13 | MODULE_AUTHOR("Dave Airlie"); | |
14 | MODULE_DESCRIPTION("MXM WMI Driver"); | |
15 | MODULE_LICENSE("GPL"); | |
16 | ||
17 | #define MXM_WMMX_GUID "F6CB5C3C-9CAE-4EBD-B577-931EA32A2CC0" | |
18 | ||
19 | MODULE_ALIAS("wmi:"MXM_WMMX_GUID); | |
20 | ||
21 | #define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */ | |
000703f4 | 22 | #define MXM_WMMX_FUNC_MXMX 0x53445344 /* "MXMX" */ |
99b38b4a DA |
23 | |
24 | struct mxds_args { | |
25 | u32 func; | |
26 | u32 args; | |
27 | u32 xarg; | |
28 | }; | |
29 | ||
30 | int mxm_wmi_call_mxds(int adapter) | |
31 | { | |
32 | struct mxds_args args = { | |
33 | .func = MXM_WMMX_FUNC_MXDS, | |
34 | .args = 0, | |
35 | .xarg = 1, | |
36 | }; | |
37 | struct acpi_buffer input = { (acpi_size)sizeof(args), &args }; | |
38 | struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; | |
39 | acpi_status status; | |
40 | ||
41 | printk("calling mux switch %d\n", adapter); | |
000703f4 | 42 | |
f85a43b9 | 43 | status = wmi_evaluate_method(MXM_WMMX_GUID, 0x0, adapter, &input, |
99b38b4a DA |
44 | &output); |
45 | ||
46 | if (ACPI_FAILURE(status)) | |
47 | return status; | |
48 | ||
49 | printk("mux switched %d\n", status); | |
50 | return 0; | |
51 | ||
52 | } | |
53 | EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds); | |
54 | ||
000703f4 DA |
55 | int mxm_wmi_call_mxmx(int adapter) |
56 | { | |
57 | struct mxds_args args = { | |
58 | .func = MXM_WMMX_FUNC_MXMX, | |
59 | .args = 0, | |
60 | .xarg = 1, | |
61 | }; | |
62 | struct acpi_buffer input = { (acpi_size)sizeof(args), &args }; | |
63 | struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL }; | |
64 | acpi_status status; | |
65 | ||
66 | printk("calling mux switch %d\n", adapter); | |
67 | ||
f85a43b9 | 68 | status = wmi_evaluate_method(MXM_WMMX_GUID, 0x0, adapter, &input, |
000703f4 DA |
69 | &output); |
70 | ||
71 | if (ACPI_FAILURE(status)) | |
72 | return status; | |
73 | ||
74 | printk("mux mutex set switched %d\n", status); | |
75 | return 0; | |
76 | ||
77 | } | |
78 | EXPORT_SYMBOL_GPL(mxm_wmi_call_mxmx); | |
79 | ||
99b38b4a DA |
80 | bool mxm_wmi_supported(void) |
81 | { | |
82 | bool guid_valid; | |
83 | guid_valid = wmi_has_guid(MXM_WMMX_GUID); | |
84 | return guid_valid; | |
85 | } | |
86 | EXPORT_SYMBOL_GPL(mxm_wmi_supported); | |
87 | ||
88 | static int __init mxm_wmi_init(void) | |
89 | { | |
90 | return 0; | |
91 | } | |
92 | ||
93 | static void __exit mxm_wmi_exit(void) | |
94 | { | |
95 | } | |
96 | ||
97 | module_init(mxm_wmi_init); | |
98 | module_exit(mxm_wmi_exit); |