/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (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 1999-2002 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_LOM_IO_H #define _SYS_LOM_IO_H /* * I/O header file for LOMlite Driver. */ #ifdef __cplusplus extern "C" { #endif #include /* ioctls for the TSalarm card */ /* * commands to access the alarm monitor node */ #define TSIOCNBMON _IOR('a', 1, int) #define TSIOCWTMON _IOWR('a', 2, int) #define TSIOCGETMASK _IOR('a', 3, int) /* * commands to manipulate the control node */ #define TSIOCALCTL _IOW('a', 4, ts_aldata_t) #define TSIOCALSTATE _IOWR('a', 5, ts_aldata_t) #define TSIOCDOGSTATE _IOR('a', 6, ts_dogstate_t) #define TSIOCDOGCTL _IOW('a', 7, ts_dogctl_t) #define TSIOCDOGTIME _IOW('a', 8, uint_t) #define TSIOCDOGPAT _IO('a', 9) #define TSIOCUNLOCK _IO('a', 10) /* * Defines for the number of the three alarms */ #define ALARM_NUM_1 1 #define ALARM_NUM_2 2 #define ALARM_NUM_3 3 /* * command to tell the driver to output debug information. This information * includes : * - the hardware monitor port (R/O) * - in-core monitor status byte * - the in-core control port * - the watchdog timeout setting */ #define TSIOCDUMP _IO('a', 11) #define TSIOCDBCTL _IOW('a', 12, ts_dbctl_t) /* * typedefs used in alarm ioctl definitions */ typedef struct { int alarm_no; int alarm_state; } ts_aldata_t; typedef struct { int reset_enable; int dog_enable; } ts_dogctl_t; typedef struct { int reset_enable; int dog_enable; uint_t dog_timeout; } ts_dogstate_t; typedef struct { int db_timing; int db_debug; } ts_dbctl_t; #define MAX_PSUS 3 #define MAX_FANS 4 #define NUM_EVENTS 10 #define NUM_ALARMS 3 /* * Defines for the lom_ctl_t events/fault led flag. */ #define OFF 1 #define ON 2 /* * Defines for a3mode. */ #define WATCHDOG 0x02 #define USER 0x01 /* * Defines for PSUSTATE */ #define LOM_PSU_NOACCESS 0x20 /* ioctls for the LOMlite card */ /* * old commands to access the monitor node */ #define LOMIOCNBMON TSIOCNBMON #define LOMIOCWTMON TSIOCWTMON #define LOMIOCGETMASK TSIOCGETMASK /* * old commands to manipulate the control node */ #define LOMIOCALCTL TSIOCALCTL #define LOMIOCALSTATE TSIOCALSTATE #define LOMIOCDOGSTATE TSIOCDOGSTATE #define LOMIOCDOGCTL TSIOCDOGCTL #define LOMIOCDOGTIME TSIOCDOGTIME #define LOMIOCDOGPAT TSIOCDOGPAT #define LOMIOCUNLOCK TSIOCUNLOCK /* * new commands to access the monitor node */ #define LOMIOCPSUSTATE _IOR('a', 21, lom_psudata_t) #define LOMIOCEVENTLOG _IOR('a', 22, lom_eventlog_t) #define LOMIOCFANSTATE _IOR('a', 23, lom_fandata_t) #define LOMIOCFLEDSTATE _IOR('a', 24, lom_fled_info_t) #define LOMIOCINFO _IOR('a', 25, lom_info_t) /* * new commands to manipulate the control node */ #define LOMIOCCLEARLOG _IO('a', 26) #define LOMIOCCTL _IOW('a', 27, lom_ctl_t) #define LOMIOCPROG _IOWR('a', 28, lom_prog_t) #define LOMIOCDAEMON _IOWR('a', 29, int) #define LOMIOCDMON _IOWR('a', 30, int) /* * Command to read general purpose LOMlite inputs. * There are only 3 bits to general purpose inputs. */ #define LOMIOCGPINPUTS _IOWR('a', 31, int) /* * Manufacture programming command. */ #define LOMIOCMPROG _IOW('a', 32, lom_mprog_t) #define LOMIOCMREAD _IOR('a', 33, lom_mprog_t) #define LOMIOCLEDSTATE _IOR('a', 34, lom_led_state_t) /* * command to tell the driver to output debug information. This information * includes : * - the hardware monitor port (R/O) * - in-core monitor status byte * - the in-core control port * - the watchdog timeout setting */ #define LOMIOCDUMP TSIOCDUMP #define LOMIOCDBCTL TSIOCDBCTL /* * typedefs used in LOMlite ioctl definitions */ typedef struct { int alarm_no; int state; } lom_aldata_t; typedef struct { int reset_enable; int dog_enable; } lom_dogctl_t; typedef struct { int reset_enable; int dog_enable; uint_t dog_timeout; } lom_dogstate_t; typedef struct { int db_timing; int db_debug; } lom_dbctl_t; typedef struct { int fitted[MAX_PSUS]; int output[MAX_PSUS]; int supplya[MAX_PSUS]; int supplyb[MAX_PSUS]; int standby[MAX_PSUS]; } lom_psudata_t; typedef struct { int fitted[MAX_FANS]; int speed[MAX_FANS]; int minspeed[MAX_FANS]; } lom_fandata_t; typedef struct { int events[NUM_EVENTS]; int fatalevent; } lom_eventlog_t; /* * The event codes as used in lom_eventlog_t are coded as described here: * * Event codes encode, in a single byte, the source and type * of event/failure in the system. * * There are two types of failure - fan and PSU. * * Other events need to be stored but do not constitue faults. */ #define LOM_EVENT_NONE 0x00 /* No fault */ #define LOM_EVENT_LOST 0x01 /* Event lost due to buffer overflow */ #define LOM_EVENT_RESET 0x02 /* Reset is asserted by the LOM */ #define LOM_EVENT_PWR_ON 0x03 /* Power is turned on by the LOM */ #define LOM_EVENT_PWR_OFF 0x04 /* Power is turned off by the LOM */ #define LOM_EVENT_WDOG_ON 0x05 /* Host watchdog enabled */ #define LOM_EVENT_WDOG_OFF 0x06 /* Host watchdog disabled */ #define LOM_EVENT_WDOG_TRIG 0x07 /* Host watchdog triggered */ #define LOM_EVENT_LOM_RESET 0x08 /* LOMlite has been reset */ #define LOM_EVENT_CHECKSUM 0x09 /* ROM checksum failure */ #define LOM_EVENT_BUSY 0x0a /* Event not ready yet (being read) */ /* * Fault LED events */ #define LOM_EVENT_FAULT 0x20 /* Fault events - codes 0x20-0x2f */ #define LOM_EVENT_FAULT_MASK 0xf0 /* Fault events - codes 0x20-0x2f */ /* * Fault LED events are encoded thus * * 7 4 3 0 * ---------------------------- * | 0010 | Fault LED frequency | * ---------------------------- * * The "Fault LED frequency" is a 4 bit code allowing for LED * falshing rates of 0 to 14 Hz with a rate of 15 signifying off. * * For example the event code for the assertion of a fault LED rate of 2Hz is: * LOM_EVENT_FAULT_ENCODE(2); */ #define LOM_EVENT_FAULT_ENCODE(faultRate) \ (LOM_EVENT_FAULT | ((faultRate)&0xf)) /* * Alarm events */ #define LOM_EVENT_ALARM 0x30 /* Alarm events - codes 0x30-0x3f */ #define LOM_EVENT_ALARM_MASK 0xf0 /* Alarm events - codes 0x30-0x3f */ /* * Alarm events are encoded thus * * 7 4 3 1 0 * -------------------------- * | 0011 | Alarm number | On | * -------------------------- * * The "Alarm number" is a 3 bit code allowing for up to 8 alarms * * For example the event code for the assertion of alarm 2 is: * LOM_EVENT_ALARM_ENCODE(2, 1); */ #define LOM_EVENT_ALARM_ENCODE(alarmNum, alarmOn) \ (LOM_EVENT_ALARM | (alarmNum<<1) | ((alarmOn)&0x1)) /* * These alarms are considered fatal errors */ #define LOM_EVENT_FAN 0x40 /* Fan failure - codes 0x40-0x7f */ #define LOM_EVENT_FAN_MASK 0xc0 /* Fan failure - codes 0x40-0x7f */ /* * Fan events are encoded thus * * 7 6 5 3 2 0 * -------------------------- * | 01 | Fan number | Status | * -------------------------- * * The "Fan number" is a 3 bit code allowing for up to 8 fans * * As yet there are no defined fan statuses. * * For example the event code for a failure on fan 3 is: * LOM_EVENT_FAN_ENCODE(3, 0); */ #define LOM_EVENT_FAN_ENCODE(fanNum, fanStatus) \ (LOM_EVENT_FAN | (fanNum<<3) | ((fanStatus)&0x7)) #define LOM_EVENT_PSU 0x80 /* PSU failure - codes 0x80-0xbf */ #define LOM_EVENT_PSU_MASK 0xc0 /* PSU failure - codes 0x80-0xbf */ /* * These definitions will be picked up elsewhere in embedded code */ #ifndef LOM_PSU_PRESENT /* * PSU status flags */ #define LOM_PSU_PRESENT 0x08 #define LOM_PSU_INPUT_A_OK 0x01 #define LOM_PSU_INPUT_B_OK 0x02 #define LOM_PSU_OUTPUT_OK 0x04 #define LOM_PSU_STATUS_MASK (LOM_PSU_INPUT_A_OK | LOM_PSU_INPUT_B_OK | \ LOM_PSU_OUTPUT_OK) #endif /* * PSU events are encoded thus * * 7 6 5 3 2 1 0 * ------------------------------------------------------------------- * | 10 | PSU number | Output Status | Input B Status | Input A Status | * ------------------------------------------------------------------- * * The PSU number is a 3 bit code allowing for up to 8 PSUs * * The PSU status is derived from the LOM_PSU... definitions. * * For example the event code for an "Input B" failure on PSU 2 is: * LOM_EVENT_PSU_ENCODE(2, LOM_PSU_INPUT_A_OK | LOM_PSU_OUTPUT_OK); */ #define LOM_EVENT_PSU_ENCODE(psuNum, psuStatus) \ (LOM_EVENT_PSU | (psuNum<<3) | ((psuStatus)&0x7)) #define MAX_LOM2_NAME_STR 16 #define LOM_LED_STATE_OFF 0x00 #define LOM_LED_STATE_ON_STEADY 0x01 #define LOM_LED_STATE_ON_FLASHING 0x02 #define LOM_LED_STATE_ON_SLOWFLASH 0x03 #define LOM_LED_STATE_INACCESSIBLE 0xfd #define LOM_LED_STATE_STANDBY 0xfe #define LOM_LED_STATE_NOT_PRESENT 0xff enum states { LOM_LED_OUTOFRANGE = -3, LOM_LED_NOT_IMPLEMENTED, LOM_LED_ACCESS_ERROR, LOM_LED_OFF, LOM_LED_ON, LOM_LED_BLINKING }; enum colours { LOM_LED_COLOUR_NONE = -1, LOM_LED_COLOUR_ANY, LOM_LED_COLOUR_WHITE, LOM_LED_COLOUR_BLUE, LOM_LED_COLOUR_GREEN, LOM_LED_COLOUR_AMBER }; typedef struct { int on; } lom_fled_info_t; typedef struct { int16_t index; int8_t state; int8_t colour; char label[MAX_LOM2_NAME_STR]; } lom_led_state_t; typedef struct { char ser_char; int a3mode; int fver; int fchksum; int prod_rev; char prod_id[12]; int events; } lom_info_t; typedef struct { char ser_char; int a3mode; int fault_led; int events; int check; } lom_ctl_t; /* * in mprog, config is: * bits 5-7 no. fans * bits 3-4 no.psus * bit 2 tty_con * bit 1 set to stop fault LED flashing * bit 0 set if DC PSUs fitted * * fanhz is hz for 100% and fanmin is min speed as %. */ typedef struct { char mod_id[12]; int mod_rev; int config; int fanhz[4]; int fanmin[4]; } lom_mprog_t; typedef struct { int index; /* top bit should be set if last buffer */ uint8_t data[0x400]; int size; } lom_prog_t; /* * LOMlite2 specific support. */ #define LOMIOCCTL2 _IOW('a', 40, lom_ctl2_t) typedef struct { char escape_chars[6]; int serial_events; } lom_ctl2_t; #define LOM_EVENT_NOREP 0 #define LOM_EVENT_FATAL 1 #define LOM_EVENT_WARN 2 #define LOM_EVENT_INFO 3 #define LOM_EVENT_USER 4 #define LOM_SER_EVENTS_ON 0x100 #define LOM_SER_EVENTS_OFF 0x200 #define LOM_SER_EVENTS_DEF 0x300 #define DEFAULT_NUM_EVENTS 10 #define LOMIOCVOLTS _IOR('a', 41, lom_volts_t) #define MAX_VOLTS 16 typedef struct { int num; /* No. of voltage lines being monitored on that system */ char name[MAX_VOLTS][MAX_LOM2_NAME_STR]; int status[MAX_VOLTS]; /* 0=ok 1=faulty */ int shutdown_enabled[MAX_VOLTS]; } lom_volts_t; /* status flags (circuit breakers) */ #define LOMIOCSTATS _IOR('a', 42, lom_sflags_t) #define MAX_STATS 8 typedef struct { int num; /* No. of status flags being monitored on that system */ char name[MAX_STATS][MAX_LOM2_NAME_STR]; int status[MAX_STATS]; /* 0=ok 1=faulty */ } lom_sflags_t; #define LOMIOCTEMP _IOR('a', 43, lom_temp_t) #define MAX_TEMPS 8 typedef struct { int num; /* No. of temps being monitored on that system */ char name[MAX_TEMPS][MAX_LOM2_NAME_STR]; int temp[MAX_TEMPS]; /* degrees C */ int warning[MAX_TEMPS]; /* degrees C - zero if not enabled */ int shutdown[MAX_TEMPS]; /* degrees C - zero if not enabled */ int num_ov; /* No. of overtemp sensors being monitored */ char name_ov[MAX_TEMPS][MAX_LOM2_NAME_STR]; int status_ov[MAX_TEMPS]; /* 0=ok 1=faulty */ } lom_temp_t; #define LOMIOCCONS _IOR('a', 44, lom_cbuf_t) #define CONS_BUF_SIZE 256 typedef struct { char lrbuf[CONS_BUF_SIZE]; } lom_cbuf_t; #define LOMIOCEVENTLOG2 _IOWR('a', 45, lom_eventlog2_t) #define MAX_EVENTS 128 #define MAX_EVENT_STR 80 /* * NB no need for 1st fatal as the ioctl can ask for ONLY fatal events. * The driver will return the whole event string, but include the code * and time for mgmt applications. */ typedef struct { int num; /* no. events requested and no. returned */ int level; /* level of events requested */ int code[MAX_EVENTS]; char string[MAX_EVENTS][MAX_EVENT_STR]; int time[MAX_EVENTS]; } lom_eventlog2_t; #define LOMIOCINFO2 _IOWR('a', 46, lom2_info_t) /* * We may not display all these properties by default, but add them all * into IOCTL structure to cover future enhancements. */ typedef struct { char escape_chars[6]; int serial_events; /* as defined for LOMIOCCTL2 */ int a3mode; int fver; int fchksum; int prod_rev; char prod_id[12]; int serial_config; /* security, timeout, etc */ int baud_rate; int serial_hw_config; /* stop bit, parity etc */ int phone_home_config; /* TRUE is enabled */ char phone_home_script[128]; char fan_names[MAX_FANS][MAX_LOM2_NAME_STR]; } lom2_info_t; /* serial_config defn - bottom 8bits are serial return timeout */ #define LOM_SER_SECURITY 0x10000 #define LOM_SER_RETURN 0x20000 #define LOM_DISABLE_WDOG_BREAK 0x40000 /* * For test ioctl low byte is test number and 2nd byte is the argument supplied * with the test. Usually, it indicates the number of iterations to perform. * The result is returned in the low byte. */ #define BSCV_LED_TEST 0x06 #define BSCV_LED_TEST_FLASH_ALL 0x01 #define BSCV_LED_TEST_SVC_REQD 0x02 #define BSCV_LED_TEST_DONE 0x00 #define LOMIOCTEST _IOWR('a', 47, uint32_t) #define LOMIOCMPROG2 _IOW('a', 48, lom2_mprog_t) #define LOMIOCMREAD2 _IOR('a', 49, lom2_mprog_t) typedef struct { int addr_space; uint8_t data[255]; } lom2_mprog_t; #define LOMIOCEVNT _IOWR('a', 50, int) /* * Due to poll being broken in S8su2 add in ioctl to sleep for arg microsecs */ #define LOMIOCSLEEP _IOWR('a', 51, int) /* * IOCTL defines for lomp - LOMlite field programming driver. */ #define LOMPIOCRESON _IO('p', 1) #define LOMPIOCRESOFF _IO('p', 2) #define LOMPIOCFVPPON _IO('p', 3) #define LOMPIOCFVPPOFF _IO('p', 4) #ifdef __cplusplus } #endif #endif /* _SYS_LOM_IO_H */