989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/*
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * Copyright (c) 2006 IronPort Systems Inc. <ambrisko@ironport.com>
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * All rights reserved.
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek *
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * Redistribution and use in source and binary forms, with or without
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * modification, are permitted provided that the following conditions
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * are met:
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * 1. Redistributions of source code must retain the above copyright
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * notice, this list of conditions and the following disclaimer.
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * 2. Redistributions in binary form must reproduce the above copyright
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * notice, this list of conditions and the following disclaimer in the
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * documentation and/or other materials provided with the distribution.
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek *
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * SUCH DAMAGE.
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek *
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * $FreeBSD: src/sys/dev/ipmi/ipmivars.h,v 1.3 2008/08/28 02:13:53 jhb Exp $
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/*
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * Copyright 2012, Joyent, Inc. All rights reserved.
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#ifndef _IPMIVARS_H_
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define _IPMIVARS_H_
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#include <sys/types.h>
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#include <sys/queue.h>
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#ifdef __cplusplus
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekextern "C" {
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#endif
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekstruct ipmi_device;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekstruct ipmi_request;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telkatypedef enum {
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka IRS_ALLOCATED,
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka IRS_QUEUED,
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka IRS_PROCESSED,
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka IRS_COMPLETED,
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka IRS_CANCELED
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka} ir_status_t;
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekstruct ipmi_request {
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek TAILQ_ENTRY(ipmi_request) ir_link;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek struct ipmi_device *ir_owner; /* Driver uses NULL. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uchar_t *ir_request; /* Request is data to send to BMC. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek size_t ir_requestlen;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uchar_t *ir_reply; /* Reply is data read from BMC. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek size_t ir_replybuflen; /* Length of ir_reply[] buffer. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ir_replylen; /* Length of reply from BMC. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ir_error;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek long ir_msgid;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uint8_t ir_addr;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uint8_t ir_command;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uint8_t ir_compcode;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ir_sz; /* size of request */
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka kcondvar_t ir_cv;
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka ir_status_t ir_status;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek};
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define MAX_RES 3
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_DATA 0
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_CTL_STS 1
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_DATA 0
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CTL_STS 1
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_FLAGS 2
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
cc944374608a39fb5622959cc9a210fb116539cbMarcel Telka#define IPMI_BUSY 0x1
cc944374608a39fb5622959cc9a210fb116539cbMarcel Telka#define IPMI_CLOSING 0x2
cc944374608a39fb5622959cc9a210fb116539cbMarcel Telka
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* Per file descriptor data. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinektypedef struct ipmi_device {
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek TAILQ_HEAD(, ipmi_request) ipmi_completed_requests;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek pollhead_t *ipmi_pollhead;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ipmi_requests;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uchar_t ipmi_address; /* IPMB address. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uchar_t ipmi_lun;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek dev_t ipmi_dev;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek list_node_t ipmi_node; /* list link for open devs */
cc944374608a39fb5622959cc9a210fb116539cbMarcel Telka int ipmi_status;
cc944374608a39fb5622959cc9a210fb116539cbMarcel Telka kcondvar_t ipmi_cv;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek} ipmi_device_t;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekstruct ipmi_softc {
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ipmi_io_rid;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ipmi_io_type;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uint64_t ipmi_io_address;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ipmi_io_mode;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ipmi_io_spacing;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ipmi_io_irq;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek void *ipmi_irq;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int ipmi_detaching;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek TAILQ_HEAD(, ipmi_request) ipmi_pending_requests;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek kmutex_t ipmi_lock;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek kcondvar_t ipmi_request_added;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek taskq_t *ipmi_kthread;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int (*ipmi_startup)(struct ipmi_softc *);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int (*ipmi_enqueue_request)(struct ipmi_softc *,
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek struct ipmi_request *);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek};
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_MODE 0x01
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_MODE 0x02
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define BT_MODE 0x03
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SSIF_MODE 0x04
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* KCS status flags */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_OBF 0x01 /* Data Out ready from BMC */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_IBF 0x02 /* Data In from System */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_SMS_ATN 0x04 /* Ready in RX queue */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_C_D 0x08 /* Command/Data register write */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_OEM1 0x10
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_OEM2 0x20
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_S0 0x40
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_S1 0x80
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_STATE(x) ((x)>>6)
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_STATE_IDLE 0x0
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_STATE_READ 0x1
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_STATE_WRITE 0x2
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_STATUS_STATE_ERROR 0x3
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_IFACE_STATUS_OK 0x00
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_IFACE_STATUS_ABORT 0x01
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_IFACE_STATUS_ILLEGAL 0x02
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_IFACE_STATUS_LENGTH_ERR 0x06
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_IFACE_STATUS_UNKNOWN_ERR 0xff
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* KCS control codes */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_CONTROL_GET_STATUS_ABORT 0x60
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_CONTROL_WRITE_START 0x61
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_CONTROL_WRITE_END 0x62
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define KCS_DATA_IN_READ 0x68
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* SMIC status flags */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_STATUS_BUSY 0x01 /* System set and BMC clears it */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_STATUS_SMS_ATN 0x04 /* BMC has a message */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_STATUS_EVT_ATN 0x08 /* Event has been RX */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_STATUS_SMI 0x10 /* asserted SMI */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_STATUS_TX_RDY 0x40 /* Ready to accept WRITE */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_STATUS_RX_RDY 0x80 /* Ready to read */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_STATUS_RESERVED 0x22
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* SMIC control codes */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CC_SMS_GET_STATUS 0x40
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CC_SMS_WR_START 0x41
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CC_SMS_WR_NEXT 0x42
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CC_SMS_WR_END 0x43
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CC_SMS_RD_START 0x44
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CC_SMS_RD_NEXT 0x45
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_CC_SMS_RD_END 0x46
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* SMIC status codes */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_SC_SMS_RDY 0xc0
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_SC_SMS_WR_START 0xc1
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_SC_SMS_WR_NEXT 0xc2
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_SC_SMS_WR_END 0xc3
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_SC_SMS_RD_START 0xc4
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_SC_SMS_RD_NEXT 0xc5
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define SMIC_SC_SMS_RD_END 0xc6
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define IPMI_ADDR(netfn, lun) ((netfn) << 2 | (lun))
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define IPMI_REPLY_ADDR(addr) ((addr) + 0x4)
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define IPMI_LOCK(sc) mutex_enter(&(sc)->ipmi_lock)
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define IPMI_UNLOCK(sc) mutex_exit(&(sc)->ipmi_lock)
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define IPMI_LOCK_ASSERT(sc) ASSERT(MUTEX_HELD(&(sc)->ipmi_lock))
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define ipmi_alloc_driver_request(addr, cmd, reqlen, replylen) \
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek ipmi_alloc_request(NULL, 0, (addr), (cmd), (reqlen), (replylen))
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define INB(sc, x) \
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek inb((sc)->ipmi_io_address + ((sc)->ipmi_io_spacing * (x)))
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define OUTB(sc, x, value) \
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek outb((sc)->ipmi_io_address + ((sc)->ipmi_io_spacing * (x)), value)
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define MAX_TIMEOUT (3 * hz)
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* Manage requests. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekvoid ipmi_complete_request(struct ipmi_softc *, struct ipmi_request *);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekstruct ipmi_request *ipmi_dequeue_request(struct ipmi_softc *);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekint ipmi_polled_enqueue_request(struct ipmi_softc *, struct ipmi_request *);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekstruct ipmi_request *ipmi_alloc_request(struct ipmi_device *, long msgid,
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek uint8_t, uint8_t, size_t, size_t);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekvoid ipmi_free_request(struct ipmi_request *);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* Interface attach routines. */
e1c99a74dc27ba07cba2cd8181f462ea9a5b0dbaAlek Pinchukboolean_t ipmi_startup(struct ipmi_softc *sc);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinekint ipmi_kcs_attach(struct ipmi_softc *);
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
e1c99a74dc27ba07cba2cd8181f462ea9a5b0dbaAlek Pinchuk/* Interface detach cleanup */
e1c99a74dc27ba07cba2cd8181f462ea9a5b0dbaAlek Pinchukvoid ipmi_shutdown(struct ipmi_softc *sc);
e1c99a74dc27ba07cba2cd8181f462ea9a5b0dbaAlek Pinchuk
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#ifdef __cplusplus
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek}
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#endif
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#endif /* _IPMIVARS_H_ */