1 #ifndef _POWERPC_PMI_H 2 #define _POWERPC_PMI_H 3 4 /* 5 * Definitions for talking with PMI device on PowerPC 6 * 7 * PMI (Platform Management Interrupt) is a way to communicate 8 * with the BMC (Baseboard Management Controller) via interrupts. 9 * Unlike IPMI it is bidirectional and has a low latency. 10 * 11 * (C) Copyright IBM Deutschland Entwicklung GmbH 2005 12 * 13 * Author: Christian Krafft <krafft@de.ibm.com> 14 * 15 * This program is free software; you can redistribute it and/or modify 16 * it under the terms of the GNU General Public License as published by 17 * the Free Software Foundation; either version 2, or (at your option) 18 * any later version. 19 * 20 * This program is distributed in the hope that it will be useful, 21 * but WITHOUT ANY WARRANTY; without even the implied warranty of 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 * GNU General Public License for more details. 24 * 25 * You should have received a copy of the GNU General Public License 26 * along with this program; if not, write to the Free Software 27 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 28 */ 29 30 #ifdef __KERNEL__ 31 32 #define PMI_TYPE_FREQ_CHANGE 0x01 33 #define PMI_TYPE_POWER_BUTTON 0x02 34 #define PMI_READ_TYPE 0 35 #define PMI_READ_DATA0 1 36 #define PMI_READ_DATA1 2 37 #define PMI_READ_DATA2 3 38 #define PMI_WRITE_TYPE 4 39 #define PMI_WRITE_DATA0 5 40 #define PMI_WRITE_DATA1 6 41 #define PMI_WRITE_DATA2 7 42 43 #define PMI_ACK 0x80 44 45 #define PMI_TIMEOUT 100 46 47 typedef struct { 48 u8 type; 49 u8 data0; 50 u8 data1; 51 u8 data2; 52 } pmi_message_t; 53 54 struct pmi_handler { 55 struct list_head node; 56 u8 type; 57 void (*handle_pmi_message) (pmi_message_t); 58 }; 59 60 int pmi_register_handler(struct pmi_handler *); 61 void pmi_unregister_handler(struct pmi_handler *); 62 63 int pmi_send_message(pmi_message_t); 64 65 #endif /* __KERNEL__ */ 66 #endif /* _POWERPC_PMI_H */ 67