1*29949e86Sstevel /* 2*29949e86Sstevel * CDDL HEADER START 3*29949e86Sstevel * 4*29949e86Sstevel * The contents of this file are subject to the terms of the 5*29949e86Sstevel * Common Development and Distribution License (the "License"). 6*29949e86Sstevel * You may not use this file except in compliance with the License. 7*29949e86Sstevel * 8*29949e86Sstevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*29949e86Sstevel * or http://www.opensolaris.org/os/licensing. 10*29949e86Sstevel * See the License for the specific language governing permissions 11*29949e86Sstevel * and limitations under the License. 12*29949e86Sstevel * 13*29949e86Sstevel * When distributing Covered Code, include this CDDL HEADER in each 14*29949e86Sstevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*29949e86Sstevel * If applicable, add the following below this CDDL HEADER, with the 16*29949e86Sstevel * fields enclosed by brackets "[]" replaced with your own identifying 17*29949e86Sstevel * information: Portions Copyright [yyyy] [name of copyright owner] 18*29949e86Sstevel * 19*29949e86Sstevel * CDDL HEADER END 20*29949e86Sstevel */ 21*29949e86Sstevel 22*29949e86Sstevel /* 23*29949e86Sstevel * Copyright 1998 Sun Microsystems, Inc. All rights reserved. 24*29949e86Sstevel * Use is subject to license terms. 25*29949e86Sstevel */ 26*29949e86Sstevel 27*29949e86Sstevel #ifndef _SYS_ENVCTRL_GEN_H 28*29949e86Sstevel #define _SYS_ENVCTRL_GEN_H 29*29949e86Sstevel 30*29949e86Sstevel #pragma ident "%Z%%M% %I% %E% SMI" 31*29949e86Sstevel 32*29949e86Sstevel #ifdef __cplusplus 33*29949e86Sstevel extern "C" { 34*29949e86Sstevel #endif 35*29949e86Sstevel 36*29949e86Sstevel /* 37*29949e86Sstevel * envctrl_gen.h 38*29949e86Sstevel * 39*29949e86Sstevel * This header file holds the environmental control definitions that 40*29949e86Sstevel * are common to all workgroup server platforms. Typically, all IOCTLs, 41*29949e86Sstevel * kstat structures, and the generic constants are defined here. 42*29949e86Sstevel * The platform specific definitions belong in header files which contain 43*29949e86Sstevel * the platform name as part of the file name eg. envctrl_ue250.h for the 44*29949e86Sstevel * UltraEnterprise-250 platform. 45*29949e86Sstevel */ 46*29949e86Sstevel 47*29949e86Sstevel #define ENVCTRL_NORMAL_MODE 0x01 48*29949e86Sstevel #define ENVCTRL_DIAG_MODE 0x02 49*29949e86Sstevel #define ENVCTRL_CHAR_ZERO 0x00 50*29949e86Sstevel #define ENVCTRL_PS_550 550 51*29949e86Sstevel #define ENVCTRL_PS_650 650 52*29949e86Sstevel #define ENVCTRL_INIT_TEMPR 20 53*29949e86Sstevel #define ENVCTRL_ULTRA1CPU_STRING "SUNW,UltraSPARC" 54*29949e86Sstevel #define ENVCTRL_ULTRA2CPU_STRING "SUNW,UltraSPARC-II" 55*29949e86Sstevel 56*29949e86Sstevel #define ENVCTRL_MAX_CPUS 8 57*29949e86Sstevel #define ENVCTRL_CPU0 0 58*29949e86Sstevel #define ENVCTRL_CPU1 1 59*29949e86Sstevel #define ENVCTRL_CPU2 2 60*29949e86Sstevel #define ENVCTRL_CPU3 3 61*29949e86Sstevel #define ENVCTRL_CPU4 4 62*29949e86Sstevel #define ENVCTRL_CPU5 5 63*29949e86Sstevel #define ENVCTRL_CPU6 6 64*29949e86Sstevel #define ENVCTRL_CPU7 7 65*29949e86Sstevel 66*29949e86Sstevel /* 67*29949e86Sstevel * I2C Sensor Types 68*29949e86Sstevel */ 69*29949e86Sstevel 70*29949e86Sstevel #define ENVCTRL_PCD8584 0x00 /* Bus Controller Master */ 71*29949e86Sstevel #define ENVCTRL_PCF8591 0x01 /* Temp Sensor 8bit A/D, D/A */ 72*29949e86Sstevel #define ENVCTRL_PCF8574 0x02 /* PS, FAN, LED, Fail and Control */ 73*29949e86Sstevel #define ENVCTRL_TDA8444T 0x03 /* Fan Speed Control, 8 bit D/A */ 74*29949e86Sstevel #define ENVCTRL_PCF8574A 0x04 /* 8574A chip */ 75*29949e86Sstevel #define ENVCTRL_PCF8583 0x05 /* PCF8583 clock chip */ 76*29949e86Sstevel #define ENVCTRL_LM75 0x06 /* LM75 chip */ 77*29949e86Sstevel 78*29949e86Sstevel /* 79*29949e86Sstevel * I2C device address offsets 80*29949e86Sstevel */ 81*29949e86Sstevel #define ENVCTRL_DEV0 0x0 82*29949e86Sstevel #define ENVCTRL_DEV1 0x2 83*29949e86Sstevel #define ENVCTRL_DEV2 0x4 84*29949e86Sstevel #define ENVCTRL_DEV3 0x6 85*29949e86Sstevel #define ENVCTRL_DEV4 0x8 86*29949e86Sstevel #define ENVCTRL_DEV5 0xA 87*29949e86Sstevel #define ENVCTRL_DEV6 0xC 88*29949e86Sstevel #define ENVCTRL_DEV7 0xE 89*29949e86Sstevel 90*29949e86Sstevel /* 91*29949e86Sstevel * I2C ports 92*29949e86Sstevel */ 93*29949e86Sstevel #define ENVCTRL_PORT0 0x00 94*29949e86Sstevel #define ENVCTRL_PORT1 0x01 95*29949e86Sstevel #define ENVCTRL_PORT2 0x02 96*29949e86Sstevel #define ENVCTRL_PORT3 0x03 97*29949e86Sstevel #define ENVCTRL_PORT4 0x04 98*29949e86Sstevel #define ENVCTRL_PORT5 0x05 99*29949e86Sstevel #define ENVCTRL_PORT6 0x06 100*29949e86Sstevel #define ENVCTRL_PORT7 0x07 101*29949e86Sstevel 102*29949e86Sstevel /* 103*29949e86Sstevel * Max number of a particular 104*29949e86Sstevel * device on one bus. 105*29949e86Sstevel */ 106*29949e86Sstevel #define ENVCTRL_MAX_DEVS 0x10 107*29949e86Sstevel #define ENVCTRL_I2C_NODEV 0xFF 108*29949e86Sstevel #define ENVCTRL_INSTANCE_0 0x00 109*29949e86Sstevel 110*29949e86Sstevel /* Disk Fault bit fields */ 111*29949e86Sstevel #define ENVCTRL_DISK_0 0x01 112*29949e86Sstevel #define ENVCTRL_DISK_1 0x02 113*29949e86Sstevel #define ENVCTRL_DISK_2 0x04 114*29949e86Sstevel #define ENVCTRL_DISK_3 0x08 115*29949e86Sstevel #define ENVCTRL_DISK_4 0x10 116*29949e86Sstevel #define ENVCTRL_DISK_5 0x20 117*29949e86Sstevel #define ENVCTRL_DISK_6 0x40 118*29949e86Sstevel #define ENVCTRL_DISK_7 0x80 119*29949e86Sstevel 120*29949e86Sstevel #define ENVCTRL_4SLOT_BACKPLANE 0x0F 121*29949e86Sstevel #define ENVCTRL_8SLOT_BACKPLANE 0xFF 122*29949e86Sstevel 123*29949e86Sstevel #define ENVCTRL_DISK4LED_ALLOFF 0xF0 124*29949e86Sstevel #define ENVCTRL_DISK6LED_ALLOFF 0xFC 125*29949e86Sstevel #define ENVCTRL_DISK8LED_ALLOFF 0xFF 126*29949e86Sstevel 127*29949e86Sstevel #define ENVCTRL_MAXSTRLEN 256 128*29949e86Sstevel 129*29949e86Sstevel /* Kstat Structures and defines */ 130*29949e86Sstevel #define ENVCTRL_FAN_TYPE_CPU 0x00 131*29949e86Sstevel #define ENVCTRL_FAN_TYPE_PS 0x01 132*29949e86Sstevel #define ENVCTRL_FAN_TYPE_AFB 0x02 133*29949e86Sstevel #define ENVCTRL_FAN_TYPE_UE250 0x03 134*29949e86Sstevel 135*29949e86Sstevel #define ENVCTRL_MODULE_NAME "envctrl" 136*29949e86Sstevel #define ENVCTRL_KSTAT_NUMPS "envctrl_numps" 137*29949e86Sstevel #define ENVCTRL_KSTAT_PSNAME "envctrl_pwrsupply" 138*29949e86Sstevel #define ENVCTRL_KSTAT_PSNAME2 "envctrl_pwrsupply2" 139*29949e86Sstevel #define ENVCTRL_KSTAT_NUMFANS "envctrl_numfans" 140*29949e86Sstevel #define ENVCTRL_KSTAT_FANSTAT "envctrl_fanstat" 141*29949e86Sstevel #define ENVCTRL_KSTAT_NUMENCLS "envctrl_numencls" 142*29949e86Sstevel #define ENVCTRL_KSTAT_ENCL "envctrl_enclosure" 143*29949e86Sstevel #define ENVCTRL_KSTAT_TEMPERATURE "envctrl_temp" 144*29949e86Sstevel #define ENVCTRL_KSTAT_DISK "envctrl_disk" 145*29949e86Sstevel 146*29949e86Sstevel /* 147*29949e86Sstevel * Kstat structure definitions (PSARC 1996/159) 148*29949e86Sstevel */ 149*29949e86Sstevel typedef struct envctrl_ps { 150*29949e86Sstevel int instance; /* instance of this type */ 151*29949e86Sstevel ushort_t ps_tempr; /* temperature */ 152*29949e86Sstevel int ps_rating; /* type in watts */ 153*29949e86Sstevel boolean_t ps_ok; /* normal state or not. */ 154*29949e86Sstevel boolean_t curr_share_ok; /* current share imbalance */ 155*29949e86Sstevel boolean_t limit_ok; /* overlimit warning */ 156*29949e86Sstevel } envctrl_ps_t; 157*29949e86Sstevel 158*29949e86Sstevel typedef struct envctrl_fan { 159*29949e86Sstevel int instance; /* instance of this type */ 160*29949e86Sstevel int type; /* CPU, PS or AMBIENT fan */ 161*29949e86Sstevel boolean_t fans_ok; /* are the fans okay */ 162*29949e86Sstevel int fanflt_num; /* if not okay, which fan faulted */ 163*29949e86Sstevel uint_t fanspeed; /* chip to set speed of fans */ 164*29949e86Sstevel } envctrl_fan_t; 165*29949e86Sstevel 166*29949e86Sstevel typedef struct envctrl_encl { 167*29949e86Sstevel int instance; 168*29949e86Sstevel int type; 169*29949e86Sstevel uint_t value; 170*29949e86Sstevel } envctrl_encl_t; 171*29949e86Sstevel 172*29949e86Sstevel /* 173*29949e86Sstevel * Kstat structure defintions (PSARC 1997/245) 174*29949e86Sstevel */ 175*29949e86Sstevel typedef struct envctrl_chip { 176*29949e86Sstevel int type; /* chip type */ 177*29949e86Sstevel uchar_t chip_num; /* chip num */ 178*29949e86Sstevel uchar_t index; /* chip index */ 179*29949e86Sstevel uchar_t val; /* chip reading */ 180*29949e86Sstevel } envctrl_chip_t; 181*29949e86Sstevel 182*29949e86Sstevel typedef struct envctrl_ps2 { 183*29949e86Sstevel ushort_t ps_tempr; /* temperature */ 184*29949e86Sstevel int ps_rating; /* type in watts */ 185*29949e86Sstevel boolean_t ps_ok; /* normal state or not */ 186*29949e86Sstevel boolean_t curr_share_ok; /* current share imbalance */ 187*29949e86Sstevel boolean_t limit_ok; /* overlimit warning */ 188*29949e86Sstevel int type; /* power supply type */ 189*29949e86Sstevel int slot; /* power supply slot occupied */ 190*29949e86Sstevel } envctrl_ps2_t; 191*29949e86Sstevel 192*29949e86Sstevel typedef struct envctrl_temp { 193*29949e86Sstevel char label[ENVCTRL_MAXSTRLEN]; /* indicates temp. sensor location */ 194*29949e86Sstevel int type; /* Temperature sensor type */ 195*29949e86Sstevel uint_t value; /* temperature value */ 196*29949e86Sstevel uint_t min; /* minimum tolerable temperature */ 197*29949e86Sstevel uint_t warning_threshold; /* warning threshold */ 198*29949e86Sstevel uint_t shutdown_threshold; /* shutdown threshold */ 199*29949e86Sstevel } envctrl_temp_t; 200*29949e86Sstevel 201*29949e86Sstevel typedef struct envctrl_disk { 202*29949e86Sstevel int slot; /* slot number of disk */ 203*29949e86Sstevel boolean_t disk_ok; /* disk fault LED off or on */ 204*29949e86Sstevel } envctrl_disk_t; 205*29949e86Sstevel 206*29949e86Sstevel #define ENVCTRL_PANEL_LEDS_PR "panel-leds-present" 207*29949e86Sstevel #define ENVCTRL_PANEL_LEDS_STA "panel-leds-state" 208*29949e86Sstevel #define ENVCTRL_DISK_LEDS_PR "disk-leds-present" 209*29949e86Sstevel #define ENVCTRL_DISK_LEDS_STA "disk-leds-state" 210*29949e86Sstevel #define ENVCTRL_LED_BLINK "activity-led-blink?" 211*29949e86Sstevel 212*29949e86Sstevel /* 213*29949e86Sstevel * IOCTL defines (PSARC 1996/159) 214*29949e86Sstevel */ 215*29949e86Sstevel #define ENVCTRL_IOC_RESETTMPR (int)(_IOW('p', 76, uchar_t)) 216*29949e86Sstevel #define ENVCTRL_IOC_SETMODE (int)(_IOW('p', 77, uchar_t)) 217*29949e86Sstevel #define ENVCTRL_IOC_SETTEMP (int)(_IOW('p', 79, uchar_t)) 218*29949e86Sstevel #define ENVCTRL_IOC_SETFAN (int)(_IOW('p', 80, struct envctrl_tda8444t_chip)) 219*29949e86Sstevel #define ENVCTRL_IOC_SETWDT (int)(_IOW('p', 81, uchar_t)) 220*29949e86Sstevel #define ENVCTRL_IOC_GETFAN (int)(_IOR('p', 81, struct envctrl_tda8444t_chip)) 221*29949e86Sstevel #define ENVCTRL_IOC_GETTEMP (int)(_IOR('p', 82, struct envctrl_pcf8591_chip)) 222*29949e86Sstevel #define ENVCTRL_IOC_GETFANFAIL (int)(_IOR('p', 83, struct envctrl_pcf8574_chip)) 223*29949e86Sstevel #define ENVCTRL_IOC_SETFSP (int)(_IOW('p', 84, uchar_t)) 224*29949e86Sstevel #define ENVCTRL_IOC_SETDSKLED (int)(_IOW('p', 85, struct envctrl_pcf8574_chip)) 225*29949e86Sstevel #define ENVCTRL_IOC_GETDSKLED (int)(_IOR('p', 86, struct envctrl_pcf8574_chip)) 226*29949e86Sstevel 227*29949e86Sstevel /* 228*29949e86Sstevel * IOCTL defines (PSARC 1997/245) 229*29949e86Sstevel */ 230*29949e86Sstevel #define ENVCTRL_IOC_GETMODE (int)(_IOR('p', 87, uchar_t)) 231*29949e86Sstevel #define ENVCTRL_IOC_SETTEMP2 (int)(_IOW('p', 88, struct envctrl_chip)) 232*29949e86Sstevel #define ENVCTRL_IOC_SETFAN2 (int)(_IOW('p', 89, struct envctrl_chip)) 233*29949e86Sstevel #define ENVCTRL_IOC_GETFAN2 (int)(_IOR('p', 90, struct envctrl_chip)) 234*29949e86Sstevel #define ENVCTRL_IOC_GETTEMP2 (int)(_IOR('p', 91, struct envctrl_chip)) 235*29949e86Sstevel #define ENVCTRL_IOC_SETFSP2 (int)(_IOW('p', 92, struct envctrl_chip)) 236*29949e86Sstevel #define ENVCTRL_IOC_GETFSP2 (int)(_IOR('p', 93, struct envctrl_chip)) 237*29949e86Sstevel #define ENVCTRL_IOC_SETDSKLED2 (int)(_IOW('p', 94, struct envctrl_chip)) 238*29949e86Sstevel #define ENVCTRL_IOC_GETDSKLED2 (int)(_IOR('p', 95, struct envctrl_chip)) 239*29949e86Sstevel #define ENVCTRL_IOC_SETRAW (int)(_IOW('p', 96, struct envctrl_chip)) 240*29949e86Sstevel #define ENVCTRL_IOC_GETRAW (int)(_IOR('p', 97, struct envctrl_chip)) 241*29949e86Sstevel 242*29949e86Sstevel #ifdef __cplusplus 243*29949e86Sstevel } 244*29949e86Sstevel #endif 245*29949e86Sstevel 246*29949e86Sstevel #endif /* _SYS_ENVCTRL_GEN_H */ 247