162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci#ifndef _POWERPC_PMI_H
362306a36Sopenharmony_ci#define _POWERPC_PMI_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci/*
662306a36Sopenharmony_ci * Definitions for talking with PMI device on PowerPC
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * PMI (Platform Management Interrupt) is a way to communicate
962306a36Sopenharmony_ci * with the BMC (Baseboard Management Controller) via interrupts.
1062306a36Sopenharmony_ci * Unlike IPMI it is bidirectional and has a low latency.
1162306a36Sopenharmony_ci *
1262306a36Sopenharmony_ci * (C) Copyright IBM Deutschland Entwicklung GmbH 2005
1362306a36Sopenharmony_ci *
1462306a36Sopenharmony_ci * Author: Christian Krafft <krafft@de.ibm.com>
1562306a36Sopenharmony_ci */
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#ifdef __KERNEL__
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define PMI_TYPE_FREQ_CHANGE	0x01
2062306a36Sopenharmony_ci#define PMI_TYPE_POWER_BUTTON	0x02
2162306a36Sopenharmony_ci#define PMI_READ_TYPE		0
2262306a36Sopenharmony_ci#define PMI_READ_DATA0		1
2362306a36Sopenharmony_ci#define PMI_READ_DATA1		2
2462306a36Sopenharmony_ci#define PMI_READ_DATA2		3
2562306a36Sopenharmony_ci#define PMI_WRITE_TYPE		4
2662306a36Sopenharmony_ci#define PMI_WRITE_DATA0		5
2762306a36Sopenharmony_ci#define PMI_WRITE_DATA1		6
2862306a36Sopenharmony_ci#define PMI_WRITE_DATA2		7
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#define PMI_ACK			0x80
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#define PMI_TIMEOUT		100
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_citypedef struct {
3562306a36Sopenharmony_ci	u8	type;
3662306a36Sopenharmony_ci	u8	data0;
3762306a36Sopenharmony_ci	u8	data1;
3862306a36Sopenharmony_ci	u8	data2;
3962306a36Sopenharmony_ci} pmi_message_t;
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistruct pmi_handler {
4262306a36Sopenharmony_ci	struct list_head node;
4362306a36Sopenharmony_ci	u8 type;
4462306a36Sopenharmony_ci	void (*handle_pmi_message) (pmi_message_t);
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciint pmi_register_handler(struct pmi_handler *);
4862306a36Sopenharmony_civoid pmi_unregister_handler(struct pmi_handler *);
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciint pmi_send_message(pmi_message_t);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci#endif /* __KERNEL__ */
5362306a36Sopenharmony_ci#endif /* _POWERPC_PMI_H */
54