[BACK]Return to ipmivar.h CVS log [TXT][DIR] Up to [local] / sys / dev

Annotation of sys/dev/ipmivar.h, Revision 1.1

1.1     ! nbrk        1: /* $OpenBSD: ipmivar.h,v 1.18 2007/03/22 16:55:31 deraadt Exp $ */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 2005 Jordan Hargrave
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms, with or without
        !             8:  * modification, are permitted provided that the following conditions
        !             9:  * are met:
        !            10:  * 1. Redistributions of source code must retain the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer.
        !            12:  * 2. Redistributions in binary form must reproduce the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer in the
        !            14:  *    documentation and/or other materials provided with the distribution.
        !            15:  *
        !            16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
        !            17:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            18:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            19:  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
        !            20:  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            21:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            22:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            24:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            25:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            26:  * SUCH DAMAGE.
        !            27:  *
        !            28:  */
        !            29:
        !            30: #ifndef _IPMIVAR_H_
        !            31: #define _IPMIVAR_H_
        !            32:
        !            33: #include <sys/timeout.h>
        !            34: #include <sys/rwlock.h>
        !            35: #include <sys/sensors.h>
        !            36:
        !            37: #define IPMI_IF_KCS            1
        !            38: #define IPMI_IF_SMIC           2
        !            39: #define IPMI_IF_BT             3
        !            40:
        !            41: #define IPMI_IF_KCS_NREGS      2
        !            42: #define IPMI_IF_SMIC_NREGS     3
        !            43: #define IPMI_IF_BT_NREGS       3
        !            44:
        !            45: struct ipmi_thread;
        !            46: struct ipmi_softc;
        !            47:
        !            48: struct ipmi_bmc_args{
        !            49:        int                     offset;
        !            50:        u_int8_t                mask;
        !            51:        u_int8_t                value;
        !            52:        volatile u_int8_t       *v;
        !            53: };
        !            54:
        !            55: struct ipmi_attach_args {
        !            56:        char            *iaa_name;
        !            57:        bus_space_tag_t iaa_iot;
        !            58:        bus_space_tag_t iaa_memt;
        !            59:
        !            60:        int             iaa_if_type;
        !            61:        int             iaa_if_rev;
        !            62:        int             iaa_if_iotype;
        !            63:        int             iaa_if_iobase;
        !            64:        int             iaa_if_iospacing;
        !            65:        int             iaa_if_irq;
        !            66:        int             iaa_if_irqlvl;
        !            67: };
        !            68:
        !            69: struct ipmi_if {
        !            70:        const char      *name;
        !            71:        int             nregs;
        !            72:        void            *(*buildmsg)(struct ipmi_softc *, int, int, int,
        !            73:                            const void *, int *);
        !            74:        int             (*sendmsg)(struct ipmi_softc *, int, const u_int8_t *);
        !            75:        int             (*recvmsg)(struct ipmi_softc *, int, int *, u_int8_t *);
        !            76:        int             (*reset)(struct ipmi_softc *);
        !            77:        int             (*probe)(struct ipmi_softc *);
        !            78: };
        !            79:
        !            80: struct ipmi_softc {
        !            81:        struct device           sc_dev;
        !            82:
        !            83:        struct ipmi_if          *sc_if;                 /* Interface layer */
        !            84:        int                     sc_if_iospacing;        /* Spacing of I/O ports */
        !            85:        int                     sc_if_rev;              /* IPMI Revision */
        !            86:
        !            87:        void                    *sc_ih;                 /* Interrupt/IO handles */
        !            88:        bus_space_tag_t         sc_iot;
        !            89:        bus_space_handle_t      sc_ioh;
        !            90:
        !            91:        int                     sc_btseq;
        !            92:
        !            93:        int                     sc_wdog_period;
        !            94:
        !            95:        struct ipmi_thread      *sc_thread;
        !            96:
        !            97:        struct timeout          sc_timeout;
        !            98:        int                     sc_max_retries;
        !            99:        int                     sc_retries;
        !           100:        int                     sc_wakeup;
        !           101:
        !           102:        struct rwlock           sc_lock;
        !           103:
        !           104:        struct ipmi_bmc_args    *sc_iowait_args;
        !           105:
        !           106:        struct ipmi_sensor      *current_sensor;
        !           107:        struct ksensordev       sc_sensordev;
        !           108: };
        !           109:
        !           110: struct ipmi_thread {
        !           111:        struct ipmi_softc   *sc;
        !           112:        volatile int        running;
        !           113: };
        !           114:
        !           115: #define IPMI_WDOG_MASK         0x03
        !           116: #define IPMI_WDOG_DISABLED     0x00
        !           117: #define IPMI_WDOG_REBOOT       0x01
        !           118: #define IPMI_WDOG_PWROFF       0x02
        !           119: #define IPMI_WDOG_PWRCYCLE     0x03
        !           120:
        !           121: #define IPMI_WDOG_PRE_DISABLED 0x00
        !           122: #define IPMI_WDOG_PRE_SMI      0x01
        !           123: #define IPMI_WDOG_PRE_NMI      0x02
        !           124: #define IPMI_WDOG_PRE_INTERRUPT        0x03
        !           125:
        !           126: struct ipmi_watchdog {
        !           127:        u_int8_t                wdog_timer;
        !           128:        u_int8_t                wdog_action;
        !           129:        u_int8_t                wdog_pretimeout;
        !           130:        u_int8_t                wdog_flags;
        !           131:        u_int16_t               wdog_timeout;
        !           132: } __packed;
        !           133:
        !           134: void   ipmi_create_thread(void *);
        !           135: void   ipmi_poll_thread(void *);
        !           136:
        !           137: int    kcs_probe(struct ipmi_softc *);
        !           138: int    kcs_reset(struct ipmi_softc *);
        !           139: int    kcs_sendmsg(struct ipmi_softc *, int, const u_int8_t *);
        !           140: int    kcs_recvmsg(struct ipmi_softc *, int, int *len, u_int8_t *);
        !           141:
        !           142: int    bt_probe(struct ipmi_softc *);
        !           143: int    bt_reset(struct ipmi_softc *);
        !           144: int    bt_sendmsg(struct ipmi_softc *, int, const u_int8_t *);
        !           145: int    bt_recvmsg(struct ipmi_softc *, int, int *, u_int8_t *);
        !           146:
        !           147: int    smic_probe(struct ipmi_softc *);
        !           148: int    smic_reset(struct ipmi_softc *);
        !           149: int    smic_sendmsg(struct ipmi_softc *, int, const u_int8_t *);
        !           150: int    smic_recvmsg(struct ipmi_softc *, int, int *, u_int8_t *);
        !           151:
        !           152: struct dmd_ipmi {
        !           153:        u_int8_t        dmd_sig[4];             /* Signature 'IPMI' */
        !           154:        u_int8_t        dmd_i2c_address;        /* Address of BMC */
        !           155:        u_int8_t        dmd_nvram_address;      /* Address of NVRAM */
        !           156:        u_int8_t        dmd_if_type;            /* IPMI Interface Type */
        !           157:        u_int8_t        dmd_if_rev;             /* IPMI Interface Revision */
        !           158: } __packed;
        !           159:
        !           160:
        !           161: #define APP_NETFN                      0x06
        !           162: #define APP_GET_DEVICE_ID              0x01
        !           163: #define APP_RESET_WATCHDOG             0x22
        !           164: #define APP_SET_WATCHDOG_TIMER         0x24
        !           165: #define APP_GET_WATCHDOG_TIMER         0x25
        !           166:
        !           167: #define TRANSPORT_NETFN                        0xC
        !           168: #define BRIDGE_NETFN                   0x2
        !           169:
        !           170: #define STORAGE_NETFN                  0x0A
        !           171: #define STORAGE_GET_FRU_INV_AREA       0x10
        !           172: #define STORAGE_READ_FRU_DATA          0x11
        !           173: #define STORAGE_RESERVE_SDR            0x22
        !           174: #define STORAGE_GET_SDR                        0x23
        !           175: #define STORAGE_ADD_SDR                        0x24
        !           176: #define STORAGE_ADD_PARTIAL_SDR                0x25
        !           177: #define STORAGE_DELETE_SDR             0x26
        !           178: #define STORAGE_RESERVE_SEL            0x42
        !           179: #define STORAGE_GET_SEL                        0x43
        !           180: #define STORAGE_ADD_SEL                        0x44
        !           181: #define STORAGE_ADD_PARTIAL_SEL                0x45
        !           182: #define STORAGE_DELETE_SEL             0x46
        !           183:
        !           184: #define SE_NETFN                       0x04
        !           185: #define SE_GET_SDR_INFO                        0x20
        !           186: #define SE_GET_SDR                     0x21
        !           187: #define SE_RESERVE_SDR                 0x22
        !           188: #define SE_GET_SENSOR_FACTOR           0x23
        !           189: #define SE_SET_SENSOR_HYSTERESIS       0x24
        !           190: #define SE_GET_SENSOR_HYSTERESIS       0x25
        !           191: #define SE_SET_SENSOR_THRESHOLD                0x26
        !           192: #define SE_GET_SENSOR_THRESHOLD                0x27
        !           193: #define SE_SET_SENSOR_EVENT_ENABLE     0x28
        !           194: #define SE_GET_SENSOR_EVENT_ENABLE     0x29
        !           195: #define SE_REARM_SENSOR_EVENTS         0x2A
        !           196: #define SE_GET_SENSOR_EVENT_STATUS     0x2B
        !           197: #define SE_GET_SENSOR_READING          0x2D
        !           198: #define SE_SET_SENSOR_TYPE             0x2E
        !           199: #define SE_GET_SENSOR_TYPE             0x2F
        !           200:
        !           201: struct sdrhdr {
        !           202:        u_int16_t       record_id;              /* SDR Record ID */
        !           203:        u_int8_t        sdr_version;            /* SDR Version */
        !           204:        u_int8_t        record_type;            /* SDR Record Type */
        !           205:        u_int8_t        record_length;          /* SDR Record Length */
        !           206: } __packed;
        !           207:
        !           208: /* SDR: Record Type 1 */
        !           209: struct sdrtype1 {
        !           210:        struct sdrhdr   sdrhdr;
        !           211:
        !           212:        u_int8_t        owner_id;
        !           213:        u_int8_t        owner_lun;
        !           214:        u_int8_t        sensor_num;
        !           215:
        !           216:        u_int8_t        entity_id;
        !           217:        u_int8_t        entity_instance;
        !           218:        u_int8_t        sensor_init;
        !           219:        u_int8_t        sensor_caps;
        !           220:        u_int8_t        sensor_type;
        !           221:        u_int8_t        event_code;
        !           222:        u_int16_t       trigger_mask;
        !           223:        u_int16_t       reading_mask;
        !           224:        u_int16_t       settable_mask;
        !           225:        u_int8_t        units1;
        !           226:        u_int8_t        units2;
        !           227:        u_int8_t        units3;
        !           228:        u_int8_t        linear;
        !           229:        u_int8_t        m;
        !           230:        u_int8_t        m_tolerance;
        !           231:        u_int8_t        b;
        !           232:        u_int8_t        b_accuracy;
        !           233:        u_int8_t        accuracyexp;
        !           234:        u_int8_t        rbexp;
        !           235:        u_int8_t        analogchars;
        !           236:        u_int8_t        nominalreading;
        !           237:        u_int8_t        normalmax;
        !           238:        u_int8_t        normalmin;
        !           239:        u_int8_t        sensormax;
        !           240:        u_int8_t        sensormin;
        !           241:        u_int8_t        uppernr;
        !           242:        u_int8_t        upperc;
        !           243:        u_int8_t        uppernc;
        !           244:        u_int8_t        lowernr;
        !           245:        u_int8_t        lowerc;
        !           246:        u_int8_t        lowernc;
        !           247:        u_int8_t        physt;
        !           248:        u_int8_t        nhyst;
        !           249:        u_int8_t        resvd[2];
        !           250:        u_int8_t        oem;
        !           251:        u_int8_t        typelen;
        !           252:        u_int8_t        name[1];
        !           253: } __packed;
        !           254:
        !           255: /* SDR: Record Type 2 */
        !           256: struct sdrtype2 {
        !           257:        struct sdrhdr   sdrhdr;
        !           258:
        !           259:        u_int8_t        owner_id;
        !           260:        u_int8_t        owner_lun;
        !           261:        u_int8_t        sensor_num;
        !           262:
        !           263:        u_int8_t        entity_id;
        !           264:        u_int8_t        entity_instance;
        !           265:        u_int8_t        sensor_init;
        !           266:        u_int8_t        sensor_caps;
        !           267:        u_int8_t        sensor_type;
        !           268:        u_int8_t        event_code;
        !           269:        u_int16_t       trigger_mask;
        !           270:        u_int16_t       reading_mask;
        !           271:        u_int16_t       set_mask;
        !           272:        u_int8_t        units1;
        !           273:        u_int8_t        units2;
        !           274:        u_int8_t        units3;
        !           275:        u_int8_t        share1;
        !           276:        u_int8_t        share2;
        !           277:        u_int8_t        physt;
        !           278:        u_int8_t        nhyst;
        !           279:        u_int8_t        resvd[3];
        !           280:        u_int8_t        oem;
        !           281:        u_int8_t        typelen;
        !           282:        u_int8_t        name[1];
        !           283: } __packed;
        !           284:
        !           285: int ipmi_probe(void *);
        !           286:
        !           287: #endif                         /* _IPMIVAR_H_ */

CVSweb