1a9643ea8Slogwang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 2006 IronPort Systems Inc. <[email protected]> 5a9643ea8Slogwang * All rights reserved. 6a9643ea8Slogwang * 7a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 8a9643ea8Slogwang * modification, are permitted provided that the following conditions 9a9643ea8Slogwang * are met: 10a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 11a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 12a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 13a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 14a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 15a9643ea8Slogwang * 16a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17a9643ea8Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18a9643ea8Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19a9643ea8Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20a9643ea8Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21a9643ea8Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22a9643ea8Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23a9643ea8Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24a9643ea8Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25a9643ea8Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26a9643ea8Slogwang * SUCH DAMAGE. 27a9643ea8Slogwang * 28a9643ea8Slogwang * $FreeBSD$ 29a9643ea8Slogwang */ 30a9643ea8Slogwang 31a9643ea8Slogwang #ifndef __SYS_IPMI_H__ 32a9643ea8Slogwang #define __SYS_IPMI_H__ 33a9643ea8Slogwang 34a9643ea8Slogwang #define IPMI_MAX_ADDR_SIZE 0x20 35a9643ea8Slogwang #define IPMI_MAX_RX 1024 36a9643ea8Slogwang #define IPMI_BMC_SLAVE_ADDR 0x20 /* Linux Default slave address */ 37a9643ea8Slogwang #define IPMI_BMC_CHANNEL 0x0f /* Linux BMC channel */ 38a9643ea8Slogwang 39a9643ea8Slogwang #define IPMI_BMC_SMS_LUN 0x02 40a9643ea8Slogwang 41a9643ea8Slogwang #define IPMI_SYSTEM_INTERFACE_ADDR_TYPE 0x0c 42a9643ea8Slogwang #define IPMI_IPMB_ADDR_TYPE 0x01 43a9643ea8Slogwang #define IPMI_IPMB_BROADCAST_ADDR_TYPE 0x41 44a9643ea8Slogwang 45a9643ea8Slogwang #define IPMI_IOC_MAGIC 'i' 46a9643ea8Slogwang #define IPMICTL_RECEIVE_MSG_TRUNC _IOWR(IPMI_IOC_MAGIC, 11, struct ipmi_recv) 47a9643ea8Slogwang #define IPMICTL_RECEIVE_MSG _IOWR(IPMI_IOC_MAGIC, 12, struct ipmi_recv) 48a9643ea8Slogwang #define IPMICTL_SEND_COMMAND _IOW(IPMI_IOC_MAGIC, 13, struct ipmi_req) 49a9643ea8Slogwang #define IPMICTL_REGISTER_FOR_CMD _IOW(IPMI_IOC_MAGIC, 14, struct ipmi_cmdspec) 50a9643ea8Slogwang #define IPMICTL_UNREGISTER_FOR_CMD _IOW(IPMI_IOC_MAGIC, 15, struct ipmi_cmdspec) 51a9643ea8Slogwang #define IPMICTL_SET_GETS_EVENTS_CMD _IOW(IPMI_IOC_MAGIC, 16, int) 52a9643ea8Slogwang #define IPMICTL_SET_MY_ADDRESS_CMD _IOW(IPMI_IOC_MAGIC, 17, unsigned int) 53a9643ea8Slogwang #define IPMICTL_GET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 18, unsigned int) 54a9643ea8Slogwang #define IPMICTL_SET_MY_LUN_CMD _IOW(IPMI_IOC_MAGIC, 19, unsigned int) 55a9643ea8Slogwang #define IPMICTL_GET_MY_LUN_CMD _IOR(IPMI_IOC_MAGIC, 20, unsigned int) 56a9643ea8Slogwang 57a9643ea8Slogwang #define IPMI_RESPONSE_RECV_TYPE 1 58a9643ea8Slogwang #define IPMI_ASYNC_EVENT_RECV_TYPE 2 59a9643ea8Slogwang #define IPMI_CMD_RECV_TYPE 3 60a9643ea8Slogwang 61*22ce4affSfengbojiang #define IPMI_CHASSIS_REQUEST 0x00 62*22ce4affSfengbojiang # define IPMI_CHASSIS_CONTROL 0x02 63*22ce4affSfengbojiang # define IPMI_CC_POWER_DOWN 0x0 64*22ce4affSfengbojiang # define IPMI_CC_POWER_UP 0x1 65*22ce4affSfengbojiang # define IPMI_CC_POWER_CYCLE 0x2 66*22ce4affSfengbojiang # define IPMI_CC_HARD_RESET 0x3 67*22ce4affSfengbojiang # define IPMI_CC_PULSE_DI 0x4 68*22ce4affSfengbojiang # define IPMI_CC_SOFT_OVERTEMP 0x5 69*22ce4affSfengbojiang 70a9643ea8Slogwang #define IPMI_APP_REQUEST 0x06 71a9643ea8Slogwang #define IPMI_GET_DEVICE_ID 0x01 72*22ce4affSfengbojiang # define IPMI_ADS_CHASSIS 0x80 73*22ce4affSfengbojiang # define IPMI_ADS_BRIDGE 0x40 74*22ce4affSfengbojiang # define IPMI_ADS_EVENT_GEN 0x20 75*22ce4affSfengbojiang # define IPMI_ADS_EVENT_RCV 0x10 76*22ce4affSfengbojiang # define IPMI_ADS_FRU_INV 0x08 77*22ce4affSfengbojiang # define IPMI_ADS_SEL 0x04 78*22ce4affSfengbojiang # define IPMI_ADS_SDR 0x02 79*22ce4affSfengbojiang # define IPMI_ADS_SENSOR 0x01 80a9643ea8Slogwang #define IPMI_CLEAR_FLAGS 0x30 81a9643ea8Slogwang #define IPMI_GET_MSG_FLAGS 0x31 82a9643ea8Slogwang # define IPMI_MSG_AVAILABLE 0x01 83a9643ea8Slogwang # define IPMI_MSG_BUFFER_FULL 0x02 84a9643ea8Slogwang # define IPMI_WDT_PRE_TIMEOUT 0x08 85a9643ea8Slogwang #define IPMI_GET_MSG 0x33 86a9643ea8Slogwang #define IPMI_SEND_MSG 0x34 87a9643ea8Slogwang #define IPMI_GET_CHANNEL_INFO 0x42 88a9643ea8Slogwang #define IPMI_RESET_WDOG 0x22 89a9643ea8Slogwang #define IPMI_SET_WDOG 0x24 90a9643ea8Slogwang #define IPMI_GET_WDOG 0x25 91a9643ea8Slogwang 92a9643ea8Slogwang #define IPMI_SET_WD_TIMER_SMS_OS 0x04 93a9643ea8Slogwang #define IPMI_SET_WD_TIMER_DONT_STOP 0x40 94*22ce4affSfengbojiang #define IPMI_SET_WD_ACTION_NONE 0x00 95a9643ea8Slogwang #define IPMI_SET_WD_ACTION_RESET 0x01 96*22ce4affSfengbojiang #define IPMI_SET_WD_ACTION_POWER_DOWN 0x02 97*22ce4affSfengbojiang #define IPMI_SET_WD_ACTION_POWER_CYCLE 0x03 98*22ce4affSfengbojiang #define IPMI_SET_WD_PREACTION_NONE (0x00 << 4) 99*22ce4affSfengbojiang #define IPMI_SET_WD_PREACTION_SMI (0x01 << 4) 100*22ce4affSfengbojiang #define IPMI_SET_WD_PREACTION_NMI (0x02 << 4) 101*22ce4affSfengbojiang #define IPMI_SET_WD_PREACTION_MI (0x03 << 4) 102a9643ea8Slogwang 103a9643ea8Slogwang struct ipmi_msg { 104a9643ea8Slogwang unsigned char netfn; 105a9643ea8Slogwang unsigned char cmd; 106a9643ea8Slogwang unsigned short data_len; 107a9643ea8Slogwang unsigned char *data; 108a9643ea8Slogwang }; 109a9643ea8Slogwang 110a9643ea8Slogwang struct ipmi_req { 111a9643ea8Slogwang unsigned char *addr; 112a9643ea8Slogwang unsigned int addr_len; 113a9643ea8Slogwang long msgid; 114a9643ea8Slogwang struct ipmi_msg msg; 115a9643ea8Slogwang }; 116a9643ea8Slogwang 117a9643ea8Slogwang struct ipmi_recv { 118a9643ea8Slogwang int recv_type; 119a9643ea8Slogwang unsigned char *addr; 120a9643ea8Slogwang unsigned int addr_len; 121a9643ea8Slogwang long msgid; 122a9643ea8Slogwang struct ipmi_msg msg; 123a9643ea8Slogwang }; 124a9643ea8Slogwang 125a9643ea8Slogwang struct ipmi_cmdspec { 126a9643ea8Slogwang unsigned char netfn; 127a9643ea8Slogwang unsigned char cmd; 128a9643ea8Slogwang }; 129a9643ea8Slogwang 130a9643ea8Slogwang struct ipmi_addr { 131a9643ea8Slogwang int addr_type; 132a9643ea8Slogwang short channel; 133a9643ea8Slogwang unsigned char data[IPMI_MAX_ADDR_SIZE]; 134a9643ea8Slogwang }; 135a9643ea8Slogwang 136a9643ea8Slogwang struct ipmi_system_interface_addr { 137a9643ea8Slogwang int addr_type; 138a9643ea8Slogwang short channel; 139a9643ea8Slogwang unsigned char lun; 140a9643ea8Slogwang }; 141a9643ea8Slogwang 142a9643ea8Slogwang struct ipmi_ipmb_addr { 143a9643ea8Slogwang int addr_type; 144a9643ea8Slogwang short channel; 145a9643ea8Slogwang unsigned char slave_addr; 146a9643ea8Slogwang unsigned char lun; 147a9643ea8Slogwang }; 148a9643ea8Slogwang 149a9643ea8Slogwang #if defined(__amd64__) 150a9643ea8Slogwang /* Compatibility with 32-bit binaries. */ 151a9643ea8Slogwang 152a9643ea8Slogwang #define IPMICTL_RECEIVE_MSG_TRUNC_32 _IOWR(IPMI_IOC_MAGIC, 11, struct ipmi_recv32) 153a9643ea8Slogwang #define IPMICTL_RECEIVE_MSG_32 _IOWR(IPMI_IOC_MAGIC, 12, struct ipmi_recv32) 154a9643ea8Slogwang #define IPMICTL_SEND_COMMAND_32 _IOW(IPMI_IOC_MAGIC, 13, struct ipmi_req32) 155a9643ea8Slogwang 156a9643ea8Slogwang struct ipmi_msg32 { 157a9643ea8Slogwang unsigned char netfn; 158a9643ea8Slogwang unsigned char cmd; 159a9643ea8Slogwang unsigned short data_len; 160a9643ea8Slogwang uint32_t data; 161a9643ea8Slogwang }; 162a9643ea8Slogwang 163a9643ea8Slogwang struct ipmi_req32 { 164a9643ea8Slogwang uint32_t addr; 165a9643ea8Slogwang unsigned int addr_len; 166a9643ea8Slogwang int32_t msgid; 167a9643ea8Slogwang struct ipmi_msg32 msg; 168a9643ea8Slogwang }; 169a9643ea8Slogwang 170a9643ea8Slogwang struct ipmi_recv32 { 171a9643ea8Slogwang int recv_type; 172a9643ea8Slogwang uint32_t addr; 173a9643ea8Slogwang unsigned int addr_len; 174a9643ea8Slogwang int32_t msgid; 175a9643ea8Slogwang struct ipmi_msg32 msg; 176a9643ea8Slogwang }; 177a9643ea8Slogwang 178a9643ea8Slogwang #endif 179a9643ea8Slogwang 180a9643ea8Slogwang #endif /* !__SYS_IPMI_H__ */ 181