Linux Audio

Check our new training course

Loading...
v4.6
 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/* This structure will be modified by the firmware when we enter
20 * system management mode, hence the volatiles */
21
22struct calling_interface_buffer {
23	u16 class;
24	u16 select;
25	volatile u32 input[4];
26	volatile u32 output[4];
27} __packed;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
29struct calling_interface_token {
30	u16 tokenID;
31	u16 location;
32	union {
33		u16 value;
34		u16 stringlength;
35	};
36};
37
38int dell_smbios_error(int value);
 
 
 
 
 
 
 
 
 
39
40struct calling_interface_buffer *dell_smbios_get_buffer(void);
41void dell_smbios_clear_buffer(void);
42void dell_smbios_release_buffer(void);
43void dell_smbios_send_request(int class, int select);
44
45struct calling_interface_token *dell_smbios_find_token(int tokenid);
46#endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
v4.17
  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#include <linux/device.h>
 20#include <uapi/linux/wmi.h>
 21
 22/* Classes and selects used only in kernel drivers */
 23#define CLASS_KBD_BACKLIGHT 4
 24#define SELECT_KBD_BACKLIGHT 11
 25
 26/* Tokens used in kernel drivers, any of these
 27 * should be filtered from userspace access
 28 */
 29#define BRIGHTNESS_TOKEN	0x007d
 30#define KBD_LED_AC_TOKEN	0x0451
 31#define KBD_LED_OFF_TOKEN	0x01E1
 32#define KBD_LED_ON_TOKEN	0x01E2
 33#define KBD_LED_AUTO_TOKEN	0x01E3
 34#define KBD_LED_AUTO_25_TOKEN	0x02EA
 35#define KBD_LED_AUTO_50_TOKEN	0x02EB
 36#define KBD_LED_AUTO_75_TOKEN	0x02EC
 37#define KBD_LED_AUTO_100_TOKEN	0x02F6
 38#define GLOBAL_MIC_MUTE_ENABLE	0x0364
 39#define GLOBAL_MIC_MUTE_DISABLE	0x0365
 40
 41struct notifier_block;
 42
 43struct calling_interface_token {
 44	u16 tokenID;
 45	u16 location;
 46	union {
 47		u16 value;
 48		u16 stringlength;
 49	};
 50};
 51
 52struct calling_interface_structure {
 53	struct dmi_header header;
 54	u16 cmdIOAddress;
 55	u8 cmdIOCode;
 56	u32 supportedCmds;
 57	struct calling_interface_token tokens[];
 58} __packed;
 59
 60int dell_smbios_register_device(struct device *d, void *call_fn);
 61void dell_smbios_unregister_device(struct device *d);
 62
 63int dell_smbios_error(int value);
 64int dell_smbios_call_filter(struct device *d,
 65	struct calling_interface_buffer *buffer);
 66int dell_smbios_call(struct calling_interface_buffer *buffer);
 67
 68struct calling_interface_token *dell_smbios_find_token(int tokenid);
 69
 70enum dell_laptop_notifier_actions {
 71	DELL_LAPTOP_KBD_BACKLIGHT_BRIGHTNESS_CHANGED,
 72};
 73
 74int dell_laptop_register_notifier(struct notifier_block *nb);
 75int dell_laptop_unregister_notifier(struct notifier_block *nb);
 76void dell_laptop_call_notifier(unsigned long action, void *data);
 77
 78/* for the supported backends */
 79#ifdef CONFIG_DELL_SMBIOS_WMI
 80int init_dell_smbios_wmi(void);
 81void exit_dell_smbios_wmi(void);
 82#else /* CONFIG_DELL_SMBIOS_WMI */
 83static inline int init_dell_smbios_wmi(void)
 84{
 85	return -ENODEV;
 86}
 87static inline void exit_dell_smbios_wmi(void)
 88{}
 89#endif /* CONFIG_DELL_SMBIOS_WMI */
 90
 91#ifdef CONFIG_DELL_SMBIOS_SMM
 92int init_dell_smbios_smm(void);
 93void exit_dell_smbios_smm(void);
 94#else /* CONFIG_DELL_SMBIOS_SMM */
 95static inline int init_dell_smbios_smm(void)
 96{
 97	return -ENODEV;
 98}
 99static inline void exit_dell_smbios_smm(void)
100{}
101#endif /* CONFIG_DELL_SMBIOS_SMM */
102
103#endif /* _DELL_SMBIOS_H_ */