ipmivars.h revision 1e3934778d15dd08e911e1d050dd7a4949348d93
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * Copyright (c) 2006 IronPort Systems Inc. <ambrisko@ironport.com>
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * All rights reserved.
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 * 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 * 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 * $FreeBSD: src/sys/dev/ipmi/ipmivars.h,v 1.3 2008/08/28 02:13:53 jhb Exp $
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek * Copyright 2012, Joyent, Inc. All rights reserved.
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telka * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
1e3934778d15dd08e911e1d050dd7a4949348d93Marcel Telkatypedef enum {
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 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/* Per file descriptor data. */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinektypedef struct ipmi_device {
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek TAILQ_HEAD(, ipmi_request) ipmi_completed_requests;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek list_node_t ipmi_node; /* list link for open devs */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek TAILQ_HEAD(, ipmi_request) ipmi_pending_requests;
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek int (*ipmi_enqueue_request)(struct ipmi_softc *,
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/* KCS control codes */
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/* SMIC control codes */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek/* SMIC status codes */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#define IPMI_ADDR(netfn, lun) ((netfn) << 2 | (lun))
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#define ipmi_alloc_driver_request(addr, cmd, reqlen, replylen) \
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek ipmi_alloc_request(NULL, 0, (addr), (cmd), (reqlen), (replylen))
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek inb((sc)->ipmi_io_address + ((sc)->ipmi_io_spacing * (x)))
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek outb((sc)->ipmi_io_address + ((sc)->ipmi_io_spacing * (x)), value)
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/* Interface attach routines. */
e1c99a74dc27ba07cba2cd8181f462ea9a5b0dbaAlek Pinchuk/* Interface detach cleanup */
989f28072d20c73ae0955d6a1e3e2fc74831cb39Jerry Jelinek#endif /* _IPMIVARS_H_ */