/*
 * 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 2001 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_LW8_H
#define	_SYS_LW8_H

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

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * subset of ioctl commands from PSARC 2000/019
 */

#define	LOMIOCALCTL		_IOW('a', 4, lom_aldata_t)
#define	LOMIOCALSTATE		_IOWR('a', 5, lom_aldata_t)
#define	LOMIOCFLEDSTATE		_IOR('a', 24, lom_fled_info_t)
#define	LOMIOCINFO		_IOR('a', 25, lom_info_t)
#define	LOMIOCINFO2		_IOWR('a', 46, lom2_info_t)
#define	LOMIOCCTL		_IOW('a', 27, lom_ctl_t)
#define	LOMIOCCTL2		_IOW('a', 40, lom_ctl2_t)
#define	LOMIOCPROG		_IOWR('a', 28, lom_prog_t)
#define	LOMIOCWTMON		_IOWR('a', 2, int)
#define	LOMIOCMREAD		_IOR('a', 33, lom_mprog_t)
#define	LOMIOCEVENTLOG2		_IOWR('a', 45, lom_eventlog2_t)

#define	LOM_SERIAL_EVENTS_ON	0x100
#define	LOM_SERIAL_EVENTS_OFF	0x200
#define	LOM_SERIAL_EVENTS_DEF 	0x300

typedef struct {
	int alarm_no;
	int state;
} lom_aldata_t;

typedef struct {
	int on;
} lom_fled_info_t;

typedef struct {
	char ser_char;
	char pad1[7];
	int fault_led;
	int pad2[2];
} lom_ctl_t;

typedef struct {
	char escape_chars[6];
	char pad1[2];
	int serial_events;
} lom_ctl2_t;

typedef struct {
	int pad1[4];
	int config;
	int pad2[8];
} lom_mprog_t;

typedef struct {
	char ser_char;
	char pad1[7];
	int fver;
	int fchksum;
	int prod_rev;
	char prod_id[12];
	int pad2[1];
} lom_info_t;

typedef struct {
	char escape_chars[6];
	char pad1[2];
	int serial_events;
	int pad2[1];
	int fver;
	int fchksum;
	int prod_rev;
	char prod_id[12];
	int serial_config;
	int baud_rate;
	int serial_hw_config;
	int phone_home_config;
	char phone_home_script[128];
	int pad3[16];
} lom2_info_t;

typedef struct {
	int index;	/* bit 0x8000 should be set if last buffer */
	uint8_t data[0x400];
	int size;
} lom_prog_t;

#define	MAX_EVENTS	128
#define	MAX_EVENT_STR	80

typedef struct {
	int   num; /* no. events requested and no. returned */
	int   level; /* level of events requested */
	int   pad1[MAX_EVENTS];
	char  string[MAX_EVENTS][MAX_EVENT_STR];
	int   pad2[MAX_EVENTS];
} lom_eventlog2_t;

/*
 * Project private ioctl commands - used by lw8 picl frutree plugin only
 */

#define	LOMIOCGETLED		_IOWR('a', 100, lom_get_led_t)
#define	LOMIOCSETLED		_IOWR('a', 101, lom_set_led_t)

#define	MAX_ID_LEN 16
#define	MAX_LOCATION_LEN 16
#define	MAX_COLOR_LEN 16

#define	LOM_LED_STATUS_OFF	0
#define	LOM_LED_STATUS_ON	1
#define	LOM_LED_STATUS_FLASHING	2
#define	LOM_LED_STATUS_BLINKING	3

#define	LOM_LED_POSITION_FRU		0
#define	LOM_LED_POSITION_LOCATION	1

typedef struct {
	char    location[MAX_LOCATION_LEN];
	char	id[MAX_ID_LEN];
	int 	status;
	int	position;
	char	color[MAX_COLOR_LEN];
	char	next_id[MAX_ID_LEN];
} lom_get_led_t;

typedef struct {
	char    location[MAX_LOCATION_LEN];
	char	id[MAX_ID_LEN];
	int 	status;
} lom_set_led_t;

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_LW8_H */