xref: /OK3568_Linux_fs/kernel/arch/powerpc/include/asm/pmi.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun #ifndef _POWERPC_PMI_H
3*4882a593Smuzhiyun #define _POWERPC_PMI_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun /*
6*4882a593Smuzhiyun  * Definitions for talking with PMI device on PowerPC
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * PMI (Platform Management Interrupt) is a way to communicate
9*4882a593Smuzhiyun  * with the BMC (Baseboard Management Controller) via interrupts.
10*4882a593Smuzhiyun  * Unlike IPMI it is bidirectional and has a low latency.
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * (C) Copyright IBM Deutschland Entwicklung GmbH 2005
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * Author: Christian Krafft <krafft@de.ibm.com>
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #ifdef __KERNEL__
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define PMI_TYPE_FREQ_CHANGE	0x01
20*4882a593Smuzhiyun #define PMI_TYPE_POWER_BUTTON	0x02
21*4882a593Smuzhiyun #define PMI_READ_TYPE		0
22*4882a593Smuzhiyun #define PMI_READ_DATA0		1
23*4882a593Smuzhiyun #define PMI_READ_DATA1		2
24*4882a593Smuzhiyun #define PMI_READ_DATA2		3
25*4882a593Smuzhiyun #define PMI_WRITE_TYPE		4
26*4882a593Smuzhiyun #define PMI_WRITE_DATA0		5
27*4882a593Smuzhiyun #define PMI_WRITE_DATA1		6
28*4882a593Smuzhiyun #define PMI_WRITE_DATA2		7
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #define PMI_ACK			0x80
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #define PMI_TIMEOUT		100
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun typedef struct {
35*4882a593Smuzhiyun 	u8	type;
36*4882a593Smuzhiyun 	u8	data0;
37*4882a593Smuzhiyun 	u8	data1;
38*4882a593Smuzhiyun 	u8	data2;
39*4882a593Smuzhiyun } pmi_message_t;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun struct pmi_handler {
42*4882a593Smuzhiyun 	struct list_head node;
43*4882a593Smuzhiyun 	u8 type;
44*4882a593Smuzhiyun 	void (*handle_pmi_message) (pmi_message_t);
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun int pmi_register_handler(struct pmi_handler *);
48*4882a593Smuzhiyun void pmi_unregister_handler(struct pmi_handler *);
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun int pmi_send_message(pmi_message_t);
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun #endif /* __KERNEL__ */
53*4882a593Smuzhiyun #endif /* _POWERPC_PMI_H */
54