OpenCloudOS-Kernel/drivers/platform/x86
Mario Limonciello 44b6b76611 platform/x86: wmi: create userspace interface for drivers
For WMI operations that are only Set or Query readable and writable sysfs
attributes created by WMI vendor drivers or the bus driver makes sense.

For other WMI operations that are run on Method, there needs to be a
way to guarantee to userspace that the results from the method call
belong to the data request to the method call.  Sysfs attributes don't
work well in this scenario because two userspace processes may be
competing at reading/writing an attribute and step on each other's
data.

When a WMI vendor driver declares a callback method in the wmi_driver
the WMI bus driver will create a character device that maps to that
function.  This callback method will be responsible for filtering
invalid requests and performing the actual call.

That character device will correspond to this path:
/dev/wmi/$driver

Performing read() on this character device will provide the size
of the buffer that the character device needs to perform calls.
This buffer size can be set by vendor drivers through a new symbol
or when MOF parsing is available by the MOF.

Performing ioctl() on this character device will be interpretd
by the WMI bus driver. It will perform sanity tests for size of
data, test them for a valid instance, copy the data from userspace
and pass iton to the vendor driver to further process and run.

This creates an implicit policy that each driver will only be allowed
a single character device.  If a module matches multiple GUID's,
the wmi_devices will need to be all handled by the same wmi_driver.

The WMI vendor drivers will be responsible for managing inappropriate
access to this character device and proper locking on data used by
it.

When a WMI vendor driver is unloaded the WMI bus driver will clean
up the character device and any memory allocated for the call.

Signed-off-by: Mario Limonciello <mario.limonciello@dell.com>
Reviewed-by: Edward O'Callaghan <quasisec@google.com>
Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
2017-11-03 16:34:00 -07:00
..
Kconfig platform/x86: dell-smbios-wmi: Add new WMI dispatcher driver 2017-11-03 16:33:59 -07:00
Makefile platform/x86: dell-smbios-wmi: Add new WMI dispatcher driver 2017-11-03 16:33:59 -07:00
acer-wmi.c platform/x86: acer-wmi: Using zero as first WMI instance number 2017-06-20 20:23:17 +03:00
acerhdf.c platform/x86: acerhdf: Add const to thermal_cooling_device_ops structure 2017-06-21 14:12:46 -07:00
alienware-wmi.c platform/x86: alienware-wmi: fix format string overflow warning 2017-07-25 20:54:03 +03:00
amilo-rfkill.c platform: x86: drop owner assignment from platform_drivers 2014-10-20 16:21:27 +02:00
apple-gmux.c apple-gmux: Don't switch external DP port on 2011+ MacBook Pros 2017-03-30 22:42:30 +02:00
asus-laptop.c platform/x86: asus-laptop: remove sparse_keymap_free() calls 2017-03-14 22:58:02 -07:00
asus-nb-wmi.c platform/x86: asus-wmi: try to set als by default 2017-04-28 21:52:24 +03:00
asus-wireless.c platform/x86: asus-wireless: Fix indentation 2017-02-24 23:48:48 -08:00
asus-wmi.c platform/x86: asus-wmi: Add lightbar led support 2017-09-27 00:26:54 -07:00
asus-wmi.h platform/x86: asus-wmi: try to set als by default 2017-04-28 21:52:24 +03:00
classmate-laptop.c classmate-laptop: Fix sparse warning (0 as NULL) 2015-02-07 12:12:00 -08:00
compal-laptop.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
dell-laptop.c platform/x86: dell-smbios: Introduce dispatcher for SMM calls 2017-11-03 16:33:59 -07:00
dell-rbtn.c platform/x86: dell-rbtn: constify rfkill_ops structures 2017-06-13 11:00:21 -07:00
dell-rbtn.h dell-rbtn: Export notifier for other kernel modules 2015-06-10 22:04:11 -07:00
dell-smbios-smm.c platform/x86: dell-smbios-smm: test for WSMT 2017-11-03 16:33:59 -07:00
dell-smbios-wmi.c platform/x86: dell-smbios-wmi: Add new WMI dispatcher driver 2017-11-03 16:33:59 -07:00
dell-smbios.c platform/x86: dell-smbios: Add filtering support 2017-11-03 16:34:00 -07:00
dell-smbios.h platform/x86: dell-smbios: Add filtering support 2017-11-03 16:34:00 -07:00
dell-smo8800.c x86: separate extable.h, switch sections.h to it 2016-09-27 21:15:23 -04:00
dell-wmi-aio.c platform/x86: dell-wmi-aio: remove sparse_keymap_free() calls 2017-03-14 22:58:04 -07:00
dell-wmi-descriptor.c platform/x86: dell-wmi-descriptor: split WMI descriptor into it's own driver 2017-11-03 16:33:58 -07:00
dell-wmi-descriptor.h platform/x86: dell-wmi-descriptor: split WMI descriptor into it's own driver 2017-11-03 16:33:58 -07:00
dell-wmi-led.c platform/x86: dell-wmi-led: Adjust instance of wmi_evaluate_method calls to 0 2017-06-28 09:01:36 -07:00
dell-wmi.c platform/x86: dell-smbios: Introduce dispatcher for SMM calls 2017-11-03 16:33:59 -07:00
eeepc-laptop.c platform/x86: eeepc-laptop: constify platform_attribute_group 2017-06-30 20:13:01 -07:00
eeepc-wmi.c eeepc-wmi: Use acpi_dev_found() 2016-04-09 03:12:58 +02:00
fujitsu-laptop.c platform/x86: fujitsu-laptop: Fix radio LED detection 2017-10-30 13:20:11 +02:00
fujitsu-tablet.c Input: use more descriptive KEY_ROTATE_DISPLAY instead of KEY_DIRECTION 2015-03-06 17:18:16 -08:00
hdaps.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
hp-wireless.c platform/x86: hp-wireless: reuse module_acpi_driver 2017-04-28 21:51:25 +03:00
hp-wmi.c platform/x86: hp-wmi: Remove unused macro helper 2017-08-13 15:26:54 +03:00
hp_accel.c platform/x86: hp_accel: Add quirk for HP ProBook 440 G4 2017-10-27 20:54:01 +03:00
ibm_rtl.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
ideapad-laptop.c platform/x86: ideapad-laptop: Add Lenovo Yoga 920-13IKB to no_hw_rfkill dmi list 2017-10-31 14:33:47 -07:00
intel-hid.c platform/x86: intel-hid: Power button suspend on Dell Latitude 7275 2017-09-22 16:49:47 -07:00
intel-rst.c intel-rst: Clean up ACPI add function 2014-09-17 13:55:54 -07:00
intel-smartconnect.c platform/x86: Use ACPI_FAILURE at appropriate places 2016-12-13 09:29:01 -08:00
intel-vbtn.c platform/x86: intel-vbtn: reduce unnecessary messages for normal users 2017-08-18 16:23:15 -07:00
intel-wmi-thunderbolt.c platform/x86: intel-wmi-thunderbolt: Silence error cases 2017-09-22 15:08:19 -07:00
intel_bxtwc_tmu.c platform/x86: intel_bxtwc_tmu: Remove first level IRQ unmask 2017-06-19 15:45:30 +01:00
intel_cht_int33fe.c platform/x86: intel_cht_int33fe: Update fusb302 type string, add properties 2017-11-03 13:52:28 +02:00
intel_int0002_vgpio.c platform/x86: Add driver for ACPI INT0002 Virtual GPIO device 2017-06-15 00:55:44 +02:00
intel_ips.c platform/x86: intel_ips: Remove FSF address from GPL notice 2017-10-08 21:07:15 +03:00
intel_ips.h platform/x86: intel_ips: Remove FSF address from GPL notice 2017-10-08 21:07:15 +03:00
intel_menlow.c platform/x86: intel_menlow: Add const to thermal_cooling_device_ops structure 2017-06-21 14:13:10 -07:00
intel_mid_powerbtn.c platform/x86: intel_mid_powerbtn: make mid_pb_ddata const 2017-08-13 15:27:10 +03:00
intel_mid_thermal.c platform/x86: intel_mid_thermal: Fix module autoload 2017-02-03 14:04:53 +02:00
intel_oaktrail.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
intel_pmc_core.c platform/x86: intel_pmc_core: Make the driver PCH family agnostic 2017-08-13 16:01:22 +03:00
intel_pmc_core.h platform/x86: intel_pmc_core: Make the driver PCH family agnostic 2017-08-13 16:01:22 +03:00
intel_pmc_ipc.c platform/x86: intel_pmc_ipc: Use spin_lock to protect GCR updates 2017-10-23 20:17:49 +03:00
intel_punit_ipc.c platform:x86 decouple telemetry driver from the optional IPC resources 2016-04-19 13:51:41 -07:00
intel_scu_ipc.c platform/x86: intel_scu_ipc: make intel_scu_ipc_pdata_t const 2017-08-13 15:27:10 +03:00
intel_scu_ipcutil.c intel_scu_ipcutil: underflow in scu_reg_access() 2016-01-30 09:40:35 -08:00
intel_telemetry_core.c platform/x86: intel_telemetry: cleanup redundant headers 2017-10-23 20:01:52 +03:00
intel_telemetry_debugfs.c platform/x86: intel_telemetry: cleanup redundant headers 2017-10-23 20:01:52 +03:00
intel_telemetry_pltdrv.c platform/x86: intel_telemetry: Add needed inclusion 2017-10-27 19:18:43 +03:00
intel_turbo_max_3.c platform/x86: intel_turbo_max_3: Add Skylake platform 2017-10-27 20:54:01 +03:00
mlx-platform.c platform/x86: mlx-platform: make a couple of structures static 2017-10-16 13:45:07 -07:00
mlxcpld-hotplug.c platform/x86: Introduce support for Mellanox hotplug driver 2016-10-23 07:52:57 -07:00
msi-laptop.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
msi-wmi.c platform/x86: msi-wmi: remove unnecessary static in msi_wmi_notify() 2017-07-25 09:56:38 -07:00
mxm-wmi.c platform/x86: mxm-wmi: Evaluate wmi method with instance number 0x0 2017-08-13 15:55:05 +03:00
panasonic-laptop.c platform/x86: panasonic-laptop: constify attribute_group structures. 2017-07-11 09:22:53 -07:00
peaq-wmi.c platform/x86: peaq-wmi: Remove unnecessary checks from peaq_wmi_exit 2017-11-03 13:32:09 +02:00
pmc_atom.c platform/x86: Enable Atom PMC platform clocks 2017-01-26 16:21:59 -08:00
pvpanic.c pvpanic: handle missing _STA correctly 2015-06-07 21:30:12 -07:00
samsung-laptop.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
samsung-q10.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
silead_dmi.c platform/x86: silead_dmi: Add entry for the Digma e200 tablet 2017-11-03 13:32:09 +02:00
sony-laptop.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
surface3-wmi.c platform/x86: surface3-wmi: fix uninitialized symbol 2017-01-21 01:43:42 +02:00
surface3_button.c platform/x86: surface3_button: Propagate error from gpiod_count() 2017-03-16 21:52:12 +01:00
surfacepro3_button.c surfacepro3_button: Add a warning when switching to tablet mode 2016-05-27 11:47:53 -07:00
tc1100-wmi.c tc1100-wmi: fix build warning when CONFIG_PM not enabled 2016-01-19 17:35:47 -08:00
thinkpad_acpi.c platform/x86: thinkpad_acpi: Implement tablet mode using GMMS method 2017-10-01 17:33:13 +03:00
topstar-laptop.c platform/x86: topstar-laptop: Add new device id 2017-05-15 16:15:50 -07:00
toshiba-wmi.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
toshiba_acpi.c platform/x86: toshiba_acpi: constify attribute_group structures. 2017-07-11 09:22:55 -07:00
toshiba_bluetooth.c platform/x86: toshiba_bluetooth: Decouple an error checking status code 2016-09-23 16:21:06 -07:00
toshiba_haps.c platform/x86: toshiba_haps: constify haps_attr_group 2017-06-28 09:01:37 -07:00
wmi-bmof.c platform/x86: wmi*: Add recent copyright statements 2017-06-13 11:00:18 -07:00
wmi.c platform/x86: wmi: create userspace interface for drivers 2017-11-03 16:34:00 -07:00
xo1-rfkill.c platform: x86: drop owner assignment from platform_drivers 2014-10-20 16:21:27 +02:00
xo15-ebook.c