root/usr/src/uts/sun4u/sys/envctrl_gen.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright 1998 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_ENVCTRL_GEN_H
#define _SYS_ENVCTRL_GEN_H

#pragma ident   "%Z%%M% %I%     %E% SMI"

#ifdef  __cplusplus
extern "C" {
#endif

/*
 * envctrl_gen.h
 *
 * This header file holds the environmental control definitions that
 * are common to all workgroup server platforms. Typically, all IOCTLs,
 * kstat structures, and the generic constants are defined here.
 * The platform specific definitions belong in header files which contain
 * the platform name as part of the file name eg. envctrl_ue250.h for the
 * UltraEnterprise-250 platform.
 */

#define ENVCTRL_NORMAL_MODE 0x01
#define ENVCTRL_DIAG_MODE 0x02
#define ENVCTRL_CHAR_ZERO 0x00
#define ENVCTRL_PS_550  550
#define ENVCTRL_PS_650  650
#define ENVCTRL_INIT_TEMPR      20
#define ENVCTRL_ULTRA1CPU_STRING        "SUNW,UltraSPARC"
#define ENVCTRL_ULTRA2CPU_STRING        "SUNW,UltraSPARC-II"

#define ENVCTRL_MAX_CPUS        8
#define ENVCTRL_CPU0            0
#define ENVCTRL_CPU1            1
#define ENVCTRL_CPU2            2
#define ENVCTRL_CPU3            3
#define ENVCTRL_CPU4            4
#define ENVCTRL_CPU5            5
#define ENVCTRL_CPU6            6
#define ENVCTRL_CPU7            7

/*
 * I2C Sensor Types
 */

#define ENVCTRL_PCD8584         0x00    /* Bus Controller Master */
#define ENVCTRL_PCF8591         0x01    /* Temp Sensor 8bit A/D, D/A */
#define ENVCTRL_PCF8574         0x02    /* PS, FAN, LED, Fail and Control */
#define ENVCTRL_TDA8444T        0x03    /* Fan Speed Control, 8 bit D/A */
#define ENVCTRL_PCF8574A        0x04    /* 8574A chip */
#define ENVCTRL_PCF8583         0x05    /* PCF8583 clock chip */
#define ENVCTRL_LM75            0x06    /* LM75 chip */

/*
 * I2C device address offsets
 */
#define ENVCTRL_DEV0            0x0
#define ENVCTRL_DEV1            0x2
#define ENVCTRL_DEV2            0x4
#define ENVCTRL_DEV3            0x6
#define ENVCTRL_DEV4            0x8
#define ENVCTRL_DEV5            0xA
#define ENVCTRL_DEV6            0xC
#define ENVCTRL_DEV7            0xE

/*
 * I2C ports
 */
#define ENVCTRL_PORT0           0x00
#define ENVCTRL_PORT1           0x01
#define ENVCTRL_PORT2           0x02
#define ENVCTRL_PORT3           0x03
#define ENVCTRL_PORT4           0x04
#define ENVCTRL_PORT5           0x05
#define ENVCTRL_PORT6           0x06
#define ENVCTRL_PORT7           0x07

/*
 * Max number of a particular
 * device on one bus.
 */
#define ENVCTRL_MAX_DEVS        0x10
#define ENVCTRL_I2C_NODEV       0xFF
#define ENVCTRL_INSTANCE_0      0x00

/* Disk Fault bit fields */
#define ENVCTRL_DISK_0 0x01
#define ENVCTRL_DISK_1 0x02
#define ENVCTRL_DISK_2 0x04
#define ENVCTRL_DISK_3 0x08
#define ENVCTRL_DISK_4 0x10
#define ENVCTRL_DISK_5 0x20
#define ENVCTRL_DISK_6 0x40
#define ENVCTRL_DISK_7 0x80

#define ENVCTRL_4SLOT_BACKPLANE 0x0F
#define ENVCTRL_8SLOT_BACKPLANE 0xFF

#define ENVCTRL_DISK4LED_ALLOFF 0xF0
#define ENVCTRL_DISK6LED_ALLOFF 0xFC
#define ENVCTRL_DISK8LED_ALLOFF 0xFF

#define ENVCTRL_MAXSTRLEN       256

/* Kstat Structures and defines */
#define ENVCTRL_FAN_TYPE_CPU    0x00
#define ENVCTRL_FAN_TYPE_PS     0x01
#define ENVCTRL_FAN_TYPE_AFB    0x02
#define ENVCTRL_FAN_TYPE_UE250  0x03

#define ENVCTRL_MODULE_NAME             "envctrl"
#define ENVCTRL_KSTAT_NUMPS             "envctrl_numps"
#define ENVCTRL_KSTAT_PSNAME            "envctrl_pwrsupply"
#define ENVCTRL_KSTAT_PSNAME2           "envctrl_pwrsupply2"
#define ENVCTRL_KSTAT_NUMFANS           "envctrl_numfans"
#define ENVCTRL_KSTAT_FANSTAT           "envctrl_fanstat"
#define ENVCTRL_KSTAT_NUMENCLS          "envctrl_numencls"
#define ENVCTRL_KSTAT_ENCL              "envctrl_enclosure"
#define ENVCTRL_KSTAT_TEMPERATURE       "envctrl_temp"
#define ENVCTRL_KSTAT_DISK              "envctrl_disk"

/*
 * Kstat structure definitions (PSARC 1996/159)
 */
typedef struct envctrl_ps {
        int instance;                   /* instance of this type */
        ushort_t ps_tempr;              /* temperature */
        int ps_rating;                  /* type in watts */
        boolean_t ps_ok;                /* normal state or not. */
        boolean_t curr_share_ok;        /* current share imbalance */
        boolean_t limit_ok;             /* overlimit warning */
} envctrl_ps_t;

typedef struct envctrl_fan {
        int instance;                   /* instance of this type */
        int type;                       /* CPU, PS or AMBIENT fan */
        boolean_t fans_ok;              /* are the fans okay */
        int fanflt_num;                 /* if not okay, which fan faulted */
        uint_t fanspeed;                        /* chip to set speed of fans */
} envctrl_fan_t;

typedef struct envctrl_encl {
        int instance;
        int type;
        uint_t value;
} envctrl_encl_t;

/*
 * Kstat structure defintions (PSARC 1997/245)
 */
typedef struct envctrl_chip {
        int type;                       /* chip type */
        uchar_t chip_num;               /* chip num */
        uchar_t index;                  /* chip index */
        uchar_t val;                    /* chip reading */
} envctrl_chip_t;

typedef struct envctrl_ps2 {
        ushort_t ps_tempr;              /* temperature */
        int ps_rating;                  /* type in watts */
        boolean_t ps_ok;                /* normal state or not */
        boolean_t curr_share_ok;        /* current share imbalance */
        boolean_t limit_ok;             /* overlimit warning */
        int type;                       /* power supply type */
        int slot;                       /* power supply slot occupied */
} envctrl_ps2_t;

typedef struct envctrl_temp {
        char label[ENVCTRL_MAXSTRLEN];  /* indicates temp. sensor location */
        int type;                       /* Temperature sensor type */
        uint_t value;                   /* temperature value */
        uint_t min;                     /* minimum tolerable temperature */
        uint_t warning_threshold;       /* warning threshold */
        uint_t shutdown_threshold;      /* shutdown threshold */
} envctrl_temp_t;

typedef struct envctrl_disk {
        int slot;                       /* slot number of disk */
        boolean_t disk_ok;              /* disk fault LED off or on */
} envctrl_disk_t;

#define ENVCTRL_PANEL_LEDS_PR           "panel-leds-present"
#define ENVCTRL_PANEL_LEDS_STA          "panel-leds-state"
#define ENVCTRL_DISK_LEDS_PR            "disk-leds-present"
#define ENVCTRL_DISK_LEDS_STA           "disk-leds-state"
#define ENVCTRL_LED_BLINK               "activity-led-blink?"

/*
 * IOCTL defines (PSARC 1996/159)
 */
#define ENVCTRL_IOC_RESETTMPR   (int)(_IOW('p', 76, uchar_t))
#define ENVCTRL_IOC_SETMODE     (int)(_IOW('p', 77, uchar_t))
#define ENVCTRL_IOC_SETTEMP     (int)(_IOW('p', 79, uchar_t))
#define ENVCTRL_IOC_SETFAN (int)(_IOW('p', 80, struct envctrl_tda8444t_chip))
#define ENVCTRL_IOC_SETWDT      (int)(_IOW('p', 81, uchar_t))
#define ENVCTRL_IOC_GETFAN (int)(_IOR('p', 81, struct envctrl_tda8444t_chip))
#define ENVCTRL_IOC_GETTEMP (int)(_IOR('p', 82, struct envctrl_pcf8591_chip))
#define ENVCTRL_IOC_GETFANFAIL (int)(_IOR('p', 83, struct envctrl_pcf8574_chip))
#define ENVCTRL_IOC_SETFSP      (int)(_IOW('p', 84, uchar_t))
#define ENVCTRL_IOC_SETDSKLED (int)(_IOW('p', 85, struct envctrl_pcf8574_chip))
#define ENVCTRL_IOC_GETDSKLED (int)(_IOR('p', 86, struct envctrl_pcf8574_chip))

/*
 * IOCTL defines (PSARC 1997/245)
 */
#define ENVCTRL_IOC_GETMODE     (int)(_IOR('p', 87, uchar_t))
#define ENVCTRL_IOC_SETTEMP2    (int)(_IOW('p', 88, struct envctrl_chip))
#define ENVCTRL_IOC_SETFAN2     (int)(_IOW('p', 89, struct envctrl_chip))
#define ENVCTRL_IOC_GETFAN2     (int)(_IOR('p', 90, struct envctrl_chip))
#define ENVCTRL_IOC_GETTEMP2    (int)(_IOR('p', 91, struct envctrl_chip))
#define ENVCTRL_IOC_SETFSP2     (int)(_IOW('p', 92, struct envctrl_chip))
#define ENVCTRL_IOC_GETFSP2     (int)(_IOR('p', 93, struct envctrl_chip))
#define ENVCTRL_IOC_SETDSKLED2  (int)(_IOW('p', 94, struct envctrl_chip))
#define ENVCTRL_IOC_GETDSKLED2  (int)(_IOR('p', 95, struct envctrl_chip))
#define ENVCTRL_IOC_SETRAW      (int)(_IOW('p', 96, struct envctrl_chip))
#define ENVCTRL_IOC_GETRAW      (int)(_IOR('p', 97, struct envctrl_chip))

#ifdef  __cplusplus
}
#endif

#endif  /* _SYS_ENVCTRL_GEN_H */