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