summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/apm_bios.h
blob: d30c5a301731bbe3ad846862bb55096246ce2e03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
/*
 * Include file for the interface to an APM BIOS
 * Copyright 1994-2001 Stephen Rothwell (sfr@canb.auug.org.au)
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2, or (at your option) any
 * later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 */
#ifndef _LINUX_APM_H
#define _LINUX_APM_H

#include <linux/types.h>

typedef unsigned short apm_event_t;
typedef unsigned short apm_eventinfo_t;

struct apm_bios_info {
	__u16 version;
	__u16 cseg;
	__u32 offset;
	__u16 cseg_16;
	__u16 dseg;
	__u16 flags;
	__u16 cseg_len;
	__u16 cseg_16_len;
	__u16 dseg_len;
};

/*
 * Power states
 */
#define APM_STATE_READY	  0x0000
#define APM_STATE_STANDBY 0x0001
#define APM_STATE_SUSPEND 0x0002
#define APM_STATE_OFF	  0x0003
#define APM_STATE_BUSY	  0x0004
#define APM_STATE_REJECT  0x0005
#define APM_STATE_OEM_SYS 0x0020
#define APM_STATE_OEM_DEV 0x0040

#define APM_STATE_DISABLE 0x0000
#define APM_STATE_ENABLE  0x0001

#define APM_STATE_DISENGAGE 0x0000
#define APM_STATE_ENGAGE    0x0001

/*
 * Events (results of Get PM Event)
 */
#define APM_SYS_STANDBY		0x0001
#define APM_SYS_SUSPEND		0x0002
#define APM_NORMAL_RESUME	0x0003
#define APM_CRITICAL_RESUME	0x0004
#define APM_LOW_BATTERY		0x0005
#define APM_POWER_STATUS_CHANGE 0x0006
#define APM_UPDATE_TIME		0x0007
#define APM_CRITICAL_SUSPEND	0x0008
#define APM_USER_STANDBY	0x0009
#define APM_USER_SUSPEND	0x000a
#define APM_STANDBY_RESUME	0x000b
#define APM_CAPABILITY_CHANGE	0x000c
#define APM_USER_HIBERNATION	0x000d
#define APM_HIBERNATION_RESUME	0x000e

/*
 * Error codes
 */
#define APM_SUCCESS	    0x00
#define APM_DISABLED	    0x01
#define APM_CONNECTED	    0x02
#define APM_NOT_CONNECTED   0x03
#define APM_16_CONNECTED    0x05
#define APM_16_UNSUPPORTED  0x06
#define APM_32_CONNECTED    0x07
#define APM_32_UNSUPPORTED  0x08
#define APM_BAD_DEVICE	    0x09
#define APM_BAD_PARAM	    0x0a
#define APM_NOT_ENGAGED	    0x0b
#define APM_BAD_FUNCTION    0x0c
#define APM_RESUME_DISABLED 0x0d
#define APM_NO_ERROR	    0x53
#define APM_BAD_STATE	    0x60
#define APM_NO_EVENTS	    0x80
#define APM_NOT_PRESENT	    0x86

/*
 * APM Device IDs
 */
#define APM_DEVICE_BIOS	    0x0000
#define APM_DEVICE_ALL	    0x0001
#define APM_DEVICE_DISPLAY  0x0100
#define APM_DEVICE_STORAGE  0x0200
#define APM_DEVICE_PARALLEL 0x0300
#define APM_DEVICE_SERIAL   0x0400
#define APM_DEVICE_NETWORK  0x0500
#define APM_DEVICE_PCMCIA   0x0600
#define APM_DEVICE_BATTERY  0x8000
#define APM_DEVICE_OEM	    0xe000
#define APM_DEVICE_OLD_ALL  0xffff
#define APM_DEVICE_CLASS    0x00ff
#define APM_DEVICE_MASK	    0xff00

/*
 * Battery status
 */
#define APM_MAX_BATTERIES 2

/*
 * APM defined capability bit flags
 */
#define APM_CAP_GLOBAL_STANDBY	      0x0001
#define APM_CAP_GLOBAL_SUSPEND	      0x0002
#define APM_CAP_RESUME_STANDBY_TIMER  0x0004 /* Timer resume from standby */
#define APM_CAP_RESUME_SUSPEND_TIMER  0x0008 /* Timer resume from suspend */
#define APM_CAP_RESUME_STANDBY_RING   0x0010 /* Resume on Ring fr standby */
#define APM_CAP_RESUME_SUSPEND_RING   0x0020 /* Resume on Ring fr suspend */
#define APM_CAP_RESUME_STANDBY_PCMCIA 0x0040 /* Resume on PCMCIA Ring	*/
#define APM_CAP_RESUME_SUSPEND_PCMCIA 0x0080 /* Resume on PCMCIA Ring	*/

/*
 * ioctl operations
 */
#include <linux/ioctl.h>

#define APM_IOC_STANDBY _IO('A', 1)
#define APM_IOC_SUSPEND _IO('A', 2)

#endif /* _LINUX_APM_H */