130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ipmi.h 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MontaVista IPMI interface 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Author: MontaVista Software, Inc. 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Corey Minyard <minyard@mvista.com> 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * source@mvista.com 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright 2002 MontaVista Software Inc. 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or modify it 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * under the terms of the GNU General Public License as published by the 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Free Software Foundation; either version 2 of the License, or (at your 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * option) any later version. 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * You should have received a copy of the GNU General Public License along 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * with this program; if not, write to the Free Software Foundation, Inc., 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 675 Mass Ave, Cambridge, MA 02139, USA. 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI__LINUX_IPMI_H 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI__LINUX_IPMI_H 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/ipmi_msgdefs.h> 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/compiler.h> 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This file describes an interface to an IPMI driver. You have to 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * have a fairly good understanding of IPMI to use this, so go read 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the specs first before actually trying to do anything. 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * With that said, this driver provides a multi-user interface to the 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * IPMI driver, and it allows multiple IPMI physical interfaces below 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the driver. The physical interfaces bind as a lower layer on the 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * driver. They appear as interfaces to the application using this 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * interface. 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Multi-user means that multiple applications may use the driver, 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * send commands, receive responses, etc. The driver keeps track of 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * commands the user sends and tracks the responses. The responses 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * will go back to the application that send the command. If the 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * response doesn't come back in time, the driver will return a 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * timeout error response to the application. Asynchronous events 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * from the BMC event queue will go to all users bound to the driver. 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The incoming event queue in the BMC will automatically be flushed 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * if it becomes full and it is queried once a second to see if 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * anything is in it. Incoming commands to the driver will get 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * delivered as commands. 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This is an overlay for all the address types, so it's easy to 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * determine the actual address type. This is kind of like addresses 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * work for sockets. 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_MAX_ADDR_SIZE 32 7030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_addr { 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Try to take these from the "Channel Medium Type" table 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng in section 6.5 of the IPMI 1.5 manual. */ 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int addr_type; 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng short channel; 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char data[IPMI_MAX_ADDR_SIZE]; 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * When the address is not used, the type will be set to this value. 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The channel is the BMC's channel number for the channel (usually 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 0), or IPMC_BMC_CHANNEL if communicating directly with the BMC. 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_SYSTEM_INTERFACE_ADDR_TYPE 0x0c 8430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_system_interface_addr { 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int addr_type; 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng short channel; 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char lun; 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* An IPMB Address. */ 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_IPMB_ADDR_TYPE 0x01 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Used for broadcast get device id as described in section 17.9 of the 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng IPMI 1.5 manual. */ 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_IPMB_BROADCAST_ADDR_TYPE 0x41 9530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_ipmb_addr { 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int addr_type; 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng short channel; 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char slave_addr; 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char lun; 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A LAN Address. This is an address to/from a LAN interface bridged 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * by the BMC, not an address actually out on the LAN. 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A conscious decision was made here to deviate slightly from the IPMI 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * spec. We do not use rqSWID and rsSWID like it shows in the 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * message. Instead, we use remote_SWID and local_SWID. This means 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * that any message (a request or response) from another device will 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * always have exactly the same address. If you didn't do this, 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * requests and responses from the same device would have different 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * addresses, and that's not too cool. 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * In this address, the remote_SWID is always the SWID the remote 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * message came from, or the SWID we are sending the message to. 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * local_SWID is always our SWID. Note that having our SWID in the 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * message is a little weird, but this is required. 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_LAN_ADDR_TYPE 0x04 12030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_lan_addr { 12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int addr_type; 12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng short channel; 12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char privilege; 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char session_handle; 12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char remote_SWID; 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char local_SWID; 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char lun; 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Channel for talking directly with the BMC. When using this 13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * channel, This is for the system interface address type only. FIXME 13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - is this right, or should we use -1? 13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_BMC_CHANNEL 0xf 13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_NUM_CHANNELS 0x10 13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Used to signify an "all channel" bitmask. This is more than the 14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * actual number of channels because this is used in userland and 14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * will cover us if the number of channels is extended. 14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_CHAN_ALL (~0) 14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A raw IPMI message without any addressing. This covers both 14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * commands and responses. The completion code is always the first 15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * byte of data in the response (as the spec shows the messages laid 15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * out). 15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 15330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_msg { 15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char netfn; 15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char cmd; 15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned short data_len; 15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char __user *data; 15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 16030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct kernel_ipmi_msg { 16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char netfn; 16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char cmd; 16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned short data_len; 16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char *data; 16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Various defines that are useful for IPMI applications. 16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_INVALID_CMD_COMPLETION_CODE 0xC1 17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_TIMEOUT_COMPLETION_CODE 0xC3 17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_UNKNOWN_ERR_COMPLETION_CODE 0xff 17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Receive types for messages coming from the receive interface. This 17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * is used for the receive in-kernel interface and in the receive 17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * IOCTL. 17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The "IPMI_RESPONSE_RESPNOSE_TYPE" is a little strange sounding, but 18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * it allows you to get the message results when you send a response 18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * message. 18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_RESPONSE_RECV_TYPE 1 /* A response to a command */ 18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_ASYNC_EVENT_RECV_TYPE 2 /* Something from the event queue */ 18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_CMD_RECV_TYPE 3 /* A command from somewhere else */ 18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_RESPONSE_RESPONSE_TYPE 4 /* The response for 18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng a sent response, giving any 18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng error status for sending the 19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng response. When you send a 19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng response message, this will 19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng be returned. */ 19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_OEM_RECV_TYPE 5 /* The response for OEM Channels */ 19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Note that async events and received commands do not have a completion 19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng code as the first byte of the incoming data, unlike a response. */ 19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Modes for ipmi_set_maint_mode() and the userland IOCTL. The AUTO 20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * setting is the default and means it will be set on certain 20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * commands. Hard setting it on and off will override automatic 20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * operation. 20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_MAINTENANCE_MODE_AUTO 0 20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_MAINTENANCE_MODE_OFF 1 20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_MAINTENANCE_MODE_ON 2 20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 21130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The userland interface 21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The userland interface for the IPMI driver is a standard character 21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * device, with each instance of an interface registered as a minor 21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * number under the major character device. 21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The read and write calls do not work, to get messages in and out 22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * requires ioctl calls because of the complexity of the data. select 22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * and poll do work, so you can wait for input using the file 22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * descriptor, you just can use read to get it. 22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * In general, you send a command down to the interface and receive 22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * responses back. You can use the msgid value to correlate commands 22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * and responses, the driver will take care of figuring out which 22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * incoming messages are for which command and find the proper msgid 22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * value to report. You will only receive reponses for commands you 23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * send. Asynchronous events, however, go to all open users, so you 23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * must be ready to handle these (or ignore them if you don't care). 23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The address type depends upon the channel type. When talking 23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * directly to the BMC (IPMC_BMC_CHANNEL), the address is ignored 23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (IPMI_UNUSED_ADDR_TYPE). When talking to an IPMB channel, you must 23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * supply a valid IPMB address with the addr_type set properly. 23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * When talking to normal channels, the driver takes care of the 23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * details of formatting and sending messages on that channel. You do 24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * not, for instance, have to format a send command, you just send 24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * whatever command you want to the channel, the driver will create 24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the send command, automatically issue receive command and get even 24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * commands, and pass those up to the proper user. 24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* The magic IOCTL value for this interface. */ 24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMI_IOC_MAGIC 'i' 24930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Messages sent to the interface are this format. */ 25230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_req { 25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char __user *addr; /* Address to send the message to. */ 25430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int addr_len; 25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng long msgid; /* The sequence number for the message. This 25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng exact value will be reported back in the 25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng response to this request if it is a command. 25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng If it is a response, this will be used as 26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng the sequence value for the response. */ 26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_msg msg; 26330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Send a message to the interfaces. error values are: 26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EINVAL - The address supplied was not valid, or the command 26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * was not allowed. 26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EMSGSIZE - The message to was too large. 27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - ENOMEM - Buffers could not be allocated for the command. 27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SEND_COMMAND _IOR(IPMI_IOC_MAGIC, 13, \ 27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_req) 27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Messages sent to the interface with timing parameters are this 27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng format. */ 27730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_req_settime { 27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_req req; 27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* See ipmi_request_settime() above for details on these 28130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng values. */ 28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int retries; 28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int retry_time_ms; 28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Send a message to the interfaces with timing parameters. error values 28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * are: 28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EINVAL - The address supplied was not valid, or the command 29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * was not allowed. 29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EMSGSIZE - The message to was too large. 29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - ENOMEM - Buffers could not be allocated for the command. 29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SEND_COMMAND_SETTIME _IOR(IPMI_IOC_MAGIC, 21, \ 29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_req_settime) 29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Messages received from the interface are this format. */ 29830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_recv { 29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int recv_type; /* Is this a command, response or an 30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng asyncronous event. */ 30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char __user *addr; /* Address the message was from is put 30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng here. The caller must supply the 30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng memory. */ 30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int addr_len; /* The size of the address buffer. 30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng The caller supplies the full buffer 30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng length, this value is updated to 30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng the actual message length when the 30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng message is received. */ 31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng long msgid; /* The sequence number specified in the request 31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if this is a response. If this is a command, 31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng this will be the sequence number from the 31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng command. */ 31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_msg msg; /* The data field must point to a buffer. 31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng The data_size field must be set to the 31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng size of the message buffer. The 31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng caller supplies the full buffer 32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng length, this value is updated to the 32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng actual message length when the message 32230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng is received. */ 32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Receive a message. error values: 32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EAGAIN - no messages in the queue. 32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EINVAL - The address supplied was not valid. 33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EMSGSIZE - The message to was too large to fit into the message buffer, 33130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the message will be left in the buffer. */ 33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_RECEIVE_MSG _IOWR(IPMI_IOC_MAGIC, 12, \ 33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_recv) 33430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 33530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Like RECEIVE_MSG, but if the message won't fit in the buffer, it 33730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * will truncate the contents instead of leaving the data in the 33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * buffer. 33930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_RECEIVE_MSG_TRUNC _IOWR(IPMI_IOC_MAGIC, 11, \ 34130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_recv) 34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 34330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Register to get commands from other entities on this interface. */ 34430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_cmdspec { 34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char netfn; 34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char cmd; 34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 34830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 35030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Register to receive a specific command. error values: 35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EBUSY - The netfn/cmd supplied was already in use. 35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - ENOMEM - could not allocate memory for the entry. 35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_REGISTER_FOR_CMD _IOR(IPMI_IOC_MAGIC, 14, \ 35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_cmdspec) 35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Unregister a regsitered command. error values: 35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - ENOENT - The netfn/cmd was not found registered for this user. 36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 36230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_UNREGISTER_FOR_CMD _IOR(IPMI_IOC_MAGIC, 15, \ 36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_cmdspec) 36430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Register to get commands from other entities on specific channels. 36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This way, you can only listen on specific channels, or have messages 36830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * from some channels go to one place and other channels to someplace 36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * else. The chans field is a bitmask, (1 << channel) for each channel. 37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * It may be IPMI_CHAN_ALL for all channels. 37130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 37230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_cmdspec_chans { 37330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int netfn; 37430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int cmd; 37530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int chans; 37630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 37730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 37830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 37930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Register to receive a specific command on specific channels. error values: 38030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 38130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EBUSY - One of the netfn/cmd/chans supplied was already in use. 38230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - ENOMEM - could not allocate memory for the entry. 38330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 38430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_REGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 28, \ 38530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_cmdspec_chans) 38630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 38730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Unregister some netfn/cmd/chans. error values: 38830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 38930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - ENOENT - None of the netfn/cmd/chans were found registered for this user. 39030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 39130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_UNREGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 29, \ 39230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_cmdspec_chans) 39330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 39430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 39530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Set whether this interface receives events. Note that the first 39630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * user registered for events will get all pending events for the 39730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * interface. error values: 39830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * - EFAULT - an address supplied was invalid. 39930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 40030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SET_GETS_EVENTS_CMD _IOR(IPMI_IOC_MAGIC, 16, int) 40130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 40230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 40330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Set and get the slave address and LUN that we will use for our 40430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * source messages. Note that this affects the interface, not just 40530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * this user, so it will affect all users of this interface. This is 40630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * so some initialization code can come in and do the OEM-specific 40730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * things it takes to determine your address (if not the BMC) and set 40830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * it for everyone else. You should probably leave the LUN alone. 40930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 41030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_channel_lun_address_set { 41130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned short channel; 41230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned char value; 41330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 41430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD \ 41530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set) 41630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD \ 41730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set) 41830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SET_MY_CHANNEL_LUN_CMD \ 41930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set) 42030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_GET_MY_CHANNEL_LUN_CMD \ 42130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng _IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set) 42230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Legacy interfaces, these only set IPMB 0. */ 42330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 17, unsigned int) 42430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_GET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 18, unsigned int) 42530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SET_MY_LUN_CMD _IOR(IPMI_IOC_MAGIC, 19, unsigned int) 42630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_GET_MY_LUN_CMD _IOR(IPMI_IOC_MAGIC, 20, unsigned int) 42730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 42830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 42930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Get/set the default timing values for an interface. You shouldn't 43030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * generally mess with these. 43130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 43230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct ipmi_timing_parms { 43330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int retries; 43430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng unsigned int retry_time_ms; 43530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 43630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SET_TIMING_PARMS_CMD _IOR(IPMI_IOC_MAGIC, 22, \ 43730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_timing_parms) 43830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_GET_TIMING_PARMS_CMD _IOR(IPMI_IOC_MAGIC, 23, \ 43930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ipmi_timing_parms) 44030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 44130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 44230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Set the maintenance mode. See ipmi_set_maintenance_mode() above 44330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * for a description of what this does. 44430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 44530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_GET_MAINTENANCE_MODE_CMD _IOR(IPMI_IOC_MAGIC, 30, int) 44630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IPMICTL_SET_MAINTENANCE_MODE_CMD _IOW(IPMI_IOC_MAGIC, 31, int) 44730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 44830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI__LINUX_IPMI_H */ 449