ipmivars.h revision 155517
119304Speter/*- 219304Speter * Copyright (c) 2006 IronPort Systems Inc. <ambrisko@ironport.com> 319304Speter * All rights reserved. 419304Speter * 519304Speter * Redistribution and use in source and binary forms, with or without 619304Speter * modification, are permitted provided that the following conditions 719304Speter * are met: 819304Speter * 1. Redistributions of source code must retain the above copyright 919304Speter * notice, this list of conditions and the following disclaimer. 1019304Speter * 2. Redistributions in binary form must reproduce the above copyright 1119304Speter * notice, this list of conditions and the following disclaimer in the 1219304Speter * documentation and/or other materials provided with the distribution. 1319304Speter * 1419304Speter * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1519304Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1619304Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1719304Speter * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1819304Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1919304Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2019304Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2119304Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2219304Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2319304Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2419304Speter * SUCH DAMAGE. 2519304Speter * 2619304Speter * $FreeBSD: head/sys/dev/ipmi/ipmivars.h 155517 2006-02-10 20:51:35Z ambrisko $ 2719304Speter */ 2819304Speter 2919304Speterstruct ipmi_get_info { 3019304Speter int kcs_mode; 3119304Speter int smic_mode; 3219304Speter uint64_t address; 3319304Speter int offset; 3419304Speter int io_mode; 3519304Speter}; 3619304Speter 3719304Speterstruct ipmi_softc { 3819304Speter device_t ipmi_dev; 3919304Speter device_t ipmi_smbios_dev; 4019304Speter struct cdev *ipmi_dev_t; 4119304Speter int ipmi_refcnt; 4219304Speter struct smbios_table_entry *ipmi_smbios; 4319304Speter struct ipmi_get_info ipmi_bios_info; 4419304Speter int ipmi_kcs_status_reg; 4519304Speter int ipmi_kcs_command_reg; 4619304Speter int ipmi_kcs_data_out_reg; 4719304Speter int ipmi_kcs_data_in_reg; 4819304Speter int ipmi_smic_data; 4919304Speter int ipmi_smic_ctl_sts; 5019304Speter int ipmi_smic_flags; 5119304Speter int ipmi_io_rid; 52 struct resource * ipmi_io_res; 53 int ipmi_mem_rid; 54 struct resource * ipmi_mem_res; 55 int ipmi_irq_rid; 56 struct resource * ipmi_irq_res; 57 void *ipmi_irq; 58 u_char ipmi_address; 59 u_char ipmi_lun; 60 int ipmi_busy; 61 struct selinfo ipmi_select; 62 int ipmi_timestamp; 63 int ipmi_requests; 64 struct callout_handle ipmi_timeout_handle; 65 TAILQ_HEAD(,ipmi_done_list) ipmi_done; 66 eventhandler_tag ipmi_ev_tag; 67}; 68 69struct ipmi_ipmb { 70 u_char foo; 71}; 72 73/* KCS status flags */ 74#define KCS_STATUS_OBF 0x01 /* Data Out ready from BMC */ 75#define KCS_STATUS_IBF 0x02 /* Data In from System */ 76#define KCS_STATUS_SMS_ATN 0x04 /* Ready in RX queue */ 77#define KCS_STATUS_C_D 0x08 /* Command/Data register write*/ 78#define KCS_STATUS_OEM1 0x10 79#define KCS_STATUS_OEM2 0x20 80#define KCS_STATUS_S0 0x40 81#define KCS_STATUS_S1 0x80 82 #define KCS_STATUS_STATE(x) ((x)>>6) 83 #define KCS_STATUS_STATE_IDLE 0x0 84 #define KCS_STATUS_STATE_READ 0x1 85 #define KCS_STATUS_STATE_WRITE 0x2 86 #define KCS_STATUS_STATE_ERROR 0x3 87#define KCS_IFACE_STATUS_ABORT 0x01 88#define KCS_IFACE_STATUS_ILLEGAL 0x02 89#define KCS_IFACE_STATUS_LENGTH_ERR 0x06 90 91/* KCD control codes */ 92#define KCS_CONTROL_GET_STATUS_ABORT 0x60 93#define KCS_CONTROL_WRITE_START 0x61 94#define KCS_CONTROL_WRITE_END 0x62 95#define KCS_DATA_IN_READ 0x68 96 97/* SMIC status flags */ 98#define SMIC_STATUS_BUSY 0x01 /* System set and BMC clears it */ 99#define SMIC_STATUS_SMS_ATN 0x04 /* BMC has a message */ 100#define SMIC_STATUS_EVT_ATN 0x08 /* Event has been RX */ 101#define SMIC_STATUS_SMI 0x08 /* asserted SMI */ 102#define SMIC_STATUS_TX_RDY 0x40 /* Ready to accept WRITE */ 103#define SMIC_STATUS_RX_RDY 0x80 /* Ready to read */ 104 105/* SMIC control codes */ 106#define SMIC_CC_SMS_GET_STATUS 0x40 107#define SMIC_CC_SMS_WR_START 0x41 108#define SMIC_CC_SMS_WR_NEXT 0x42 109#define SMIC_CC_SMS_WR_END 0x43 110#define SMIC_CC_SMS_RD_START 0x44 111#define SMIC_CC_SMS_RD_NEXT 0x45 112#define SMIC_CC_SMS_RD_END 0x46 113 114/* SMIC status codes */ 115#define SMIC_SC_SMS_RDY 0xc0 116#define SMIC_SC_SMS_WR_START 0xc1 117#define SMIC_SC_SMS_WR_NEXT 0xc2 118#define SMIC_SC_SMS_WR_END 0xc3 119#define SMIC_SC_SMS_RD_START 0xc4 120#define SMIC_SC_SMS_RD_NEXT 0xc5 121#define SMIC_SC_SMS_RD_END 0xc6 122 123#define RES(x) (x)->ipmi_io_res ? (x)->ipmi_io_res : (x)->ipmi_mem_res 124#define INB(sc, x) bus_space_read_1(rman_get_bustag(RES(sc)), \ 125 rman_get_bushandle(RES(sc)), (x)) 126#define OUTB(sc, x, value) bus_space_write_1(rman_get_bustag(RES(sc)), \ 127 rman_get_bushandle(RES(sc)), (x), value) 128 129int ipmi_attach(device_t); 130int ipmi_detach(device_t); 131int ipmi_smbios_query(device_t); 132int ipmi_smbios_probe(device_t); 133int ipmi_read(device_t, u_char *, int); 134void ipmi_intr(void *); 135 136device_t ipmi_smbios_identify (driver_t *driver, device_t parent); 137extern devclass_t ipmi_devclass; 138extern int ipmi_attached; 139