GNU Linux-libre 4.14.266-gnu1
[releases.git] / drivers / platform / x86 / dell-smbios.h
1 /*
2  *  Common functions for kernel modules using Dell SMBIOS
3  *
4  *  Copyright (c) Red Hat <mjg@redhat.com>
5  *  Copyright (c) 2014 Gabriele Mazzotta <gabriele.mzt@gmail.com>
6  *  Copyright (c) 2014 Pali Rohár <pali.rohar@gmail.com>
7  *
8  *  Based on documentation in the libsmbios package:
9  *  Copyright (C) 2005-2014 Dell Inc.
10  *
11  *  This program is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License version 2 as
13  *  published by the Free Software Foundation.
14  */
15
16 #ifndef _DELL_SMBIOS_H_
17 #define _DELL_SMBIOS_H_
18
19 struct notifier_block;
20
21 /* This structure will be modified by the firmware when we enter
22  * system management mode, hence the volatiles */
23
24 struct calling_interface_buffer {
25         u16 class;
26         u16 select;
27         volatile u32 input[4];
28         volatile u32 output[4];
29 } __packed;
30
31 struct calling_interface_token {
32         u16 tokenID;
33         u16 location;
34         union {
35                 u16 value;
36                 u16 stringlength;
37         };
38 };
39
40 int dell_smbios_error(int value);
41
42 struct calling_interface_buffer *dell_smbios_get_buffer(void);
43 void dell_smbios_clear_buffer(void);
44 void dell_smbios_release_buffer(void);
45 void dell_smbios_send_request(int class, int select);
46
47 struct calling_interface_token *dell_smbios_find_token(int tokenid);
48
49 enum dell_laptop_notifier_actions {
50         DELL_LAPTOP_KBD_BACKLIGHT_BRIGHTNESS_CHANGED,
51 };
52
53 int dell_laptop_register_notifier(struct notifier_block *nb);
54 int dell_laptop_unregister_notifier(struct notifier_block *nb);
55 void dell_laptop_call_notifier(unsigned long action, void *data);
56
57 #endif