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