25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER START
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The contents of this file are subject to the terms of the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Common Development and Distribution License (the "License").
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You may not use this file except in compliance with the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * or http://www.opensolaris.org/os/licensing.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * See the License for the specific language governing permissions
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * and limitations under the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * When distributing Covered Code, include this CDDL HEADER in each
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * If applicable, add the following below this CDDL HEADER, with the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * fields enclosed by brackets "[]" replaced with your own identifying
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * information: Portions Copyright [yyyy] [name of copyright owner]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER END
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifndef _OPLMSU_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define _OPLMSU_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#pragma ident "%Z%%M% %I% %E% SMI"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern "C" {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* ack_flag */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define ACK_RES 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define NAK_RES -1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* active_flag */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define ACTIVE_RES 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define NOT_ACTIVE_RES -1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* undefined path number */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define UNDEFINED -1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* sleep and wakeup control flag */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define CV_WAKEUP 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define CV_SLEEP 1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* write/read control flag */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WRITE_SIDE 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_READ_SIDE 1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* message priority */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_HIGH 1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_NORM 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* miscellaneous */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define SUCCESS 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define FAILURE -1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#if !defined(BUSY) /* warning: macro redefined */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define BUSY -2
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* timeout interval */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TM_500MS 500000 /* 500ms */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* XON/XOFF code */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_XON 0x11
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_XOFF 0x13
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_XON_4 (MSU_XON << 24|MSU_XON << 16|MSU_XON << 8|MSU_XON)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_XOFF_4 (MSU_XOFF << 24|MSU_XOFF << 16|MSU_XOFF << 8|MSU_XOFF)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* main path code used by MSU_CMD_START ioctl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MAINPATHCODE 0x1000
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_OBP_CONSOLE -2
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* maximum number of minor device number */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MAXDEVMINOR 256
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* node mask */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define USER_NODE_MASK 0x00000000 /* user control node */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define META_NODE_MASK 0x00010000 /* meta control node */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* node_flag */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_NODE_USER 0 /* user control node */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_NODE_META 1 /* meta control node */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* node_flag check macro */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_NODE_TYPE(dev) \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl (((dev) & (META_NODE_MASK|USER_NODE_MASK)) >> 16)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* termio_flag */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TIOS_TCSETS 1 /* TCSETS */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TIOS_MSET 2 /* TIOCMSET */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TIOS_PPS 3 /* TIOCSPPS */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TIOS_WINSZP 4 /* TIOCSWINSZ */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TIOS_SOFTCAR 5 /* TIOCSSOFTCAR */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TIOS_END 6 /* termios end */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* binding name */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_CMUCH_FF "pci10cf,138f"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_CMUCH_DC "pci10cf,1390"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef DEBUG
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_CMUCH_DBG "pci108e,8000"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* tty-port# properties */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TTY_PORT_PROP "tty-port#"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* board# properties */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_BOARD_PROP "board#"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * oplmsu command code
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_CMD ('f' << 8)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_CMD_STOP (MSU_CMD|0x14)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_CMD_START (MSU_CMD|0x15)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_CMD_ACTIVE (MSU_CMD|0x1a)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PATH_ALL (-1) /* path all instruction */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * oplmsu path status for status member on upper path info table
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PSTAT_EMPTY 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PSTAT_ACTIVE 1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PSTAT_STANDBY 2
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PSTAT_STOP 3
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PSTAT_FAIL 4
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PSTAT_DISCON 5
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PSTAT_ENCAP 6
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * oplmsu additional status for traditional_status member on
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * upper path info table
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_UNLINK 0 /* initial state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_EMPTY 1 /* MSU_STAT_EMPTY(00) state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_LINK_NU 2 /* link state(no link ID, no upper path info) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_SETID_NU 3 /* set ID state(link ID, no upper path info) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_MAKE_INST 4 /* create instance node state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_STOP 5 /* MSU_STAT_STOP(03) state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WSTR_ACK 6 /* wait ack/nak of MSU_CMD_START state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_STANDBY 7 /* MSU_STAT_STANDBY(02) state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WTCS_ACK 8 /* wait ack/nak of TCSETS state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WTMS_ACK 9 /* wait ack/nak of TIOCMSET state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WPPS_ACK 10 /* wait ack/nak of TIOCSPPS state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WWSZ_ACK 11 /* wait ack/nak of TIOCSWINSZ state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WCAR_ACK 12 /* wait ack/nak of TIOCSSOFTCAR state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_ACTIVE 13 /* MSU_STAT_ACTIVE(01) state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WSTP_ACK 14 /* wait ack/nak of MSU_CMD_STOP state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_FAIL 15 /* MSU_STAT_FAIL(04) state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WCHK_ACK 16 /* wait ack/nak of OPLMSUSELFTEST */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_SETID 17 /* set ID state(link ID, upper path info) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_DISCON 18 /* MSU_STAT_DISCON(05) state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_LINK 19 /* link state(no link ID, upper path info) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_WPTH_CHG 20 /* wait ack/nak of OPLMSUPATHCHG state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * oplmsu instance status for inst_status member on
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * upper instance info talbe
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define INST_STAT_BUSY -1 /* busy */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define INST_STAT_ONLINE 10 /* online */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define INST_STAT_OFFLINE 11 /* offline */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define INST_STAT_UNCONFIGURED 12 /* unconfigured */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * oplmsu lower path Info table ext status for ext member on
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * lower path info table
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_EXT_NOTUSED -1 /* not used (default) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_EXT_ACTIVE_CANDIDATE -2 /* active path candidate by */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* MSU_CMD_START */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_EXT_VOID -3 /* void status */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* oplmsu/su pathname size */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_PATHNAME_SIZE 128
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* control block(path parameter) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstruct msu_path {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int num; /* total number of paths */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int reserved; /* reserved */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* control block(device parameter) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstruct msu_dev {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl dev_info_t *dip; /* pointer to dev_info_t */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* serial device control block */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct serial_devcb {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl dev_info_t *dip; /* pointer to dev_info_t */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int lsb; /* LSB number */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} ser_devcb_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* serial device countrl block list */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct serial_devlist {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct serial_devlist *next;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl dev_info_t *dip; /* pointer to dev_info_t */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} ser_devl_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* upper path table */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct upper_path_table {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct upper_path_table *u_next;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct upper_path_table *u_prev;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct lower_path_table *lpath;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int path_no;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int reserved;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int status;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int prev_status;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ulong_t traditional_status;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ser_devcb_t ser_devcb;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} upath_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* lower path table */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct lower_path_table {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct lower_path_table *l_next;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct lower_path_table *l_prev;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *first_lpri_hi;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *last_lpri_hi;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *hndl_mp;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *hndl_uqueue;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *lower_queue;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *uwq_queue;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct upper_instance_table *uinst;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl char *abt_char;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct buf_tbl *rbuftbl;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl bufcall_id_t rbuf_id;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl timeout_id_t rtout_id;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl upath_t *src_upath;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl long status;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int path_no;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int link_id;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int uwq_flag;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int sw_flag;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kcondvar_t sw_cv;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} lpath_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* control table */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct control_table {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct control_table *c_next;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct control_table *c_prev;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *first_upri_hi;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *last_upri_hi;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *queue;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *lrq_queue;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *wait_queue;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl minor_t minor;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int node_type;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl struct buf_tbl *wbuftbl;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl bufcall_id_t wbuf_id;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl timeout_id_t wtout_id;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int lrq_flag;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int sleep_flag;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kcondvar_t cvp;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} ctrl_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_MAX_ABTSLEN 24 /* maximum length for abort sequence */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* upper instance table */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct upper_instance_table {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl upath_t *first_upath;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl upath_t *last_upath;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl lpath_t *first_lpath;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl lpath_t *last_lpath;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ctrl_t *meta_ctrl;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ctrl_t *user_ctrl;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *lower_queue;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl dev_info_t *msu_dip;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int inst_status;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int path_num;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int reserved[2];
25cf1a301a396c38e8adf52c15f537b80d2483f7jl krwlock_t lock;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t u_lock;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t l_lock;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t c_lock;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *tcsets_p;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *tiocmset_p;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *tiocspps_p;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *tiocswinsz_p;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *tiocssoftcar_p;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl char abts[MSU_MAX_ABTSLEN];
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} uinst_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* queue table for bufcall() and timeout() */
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstruct buf_tbl {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *q;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int rw_flag;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl};
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* rwlock macro */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define OPLMSU_RWLOCK_UPGRADE() { \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (rw_tryupgrade(&oplmsu_uinst->lock) == 0) { \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl rw_exit(&oplmsu_uinst->lock); \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl rw_enter(&oplmsu_uinst->lock, RW_WRITER); \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl } \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef DEBUG
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct tracedata {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *q;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mblk_t *mp;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl char op[3];
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uchar_t msg_type;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int pathno;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl int msg_cmd;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ulong_t data;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} msu_trc_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_USER ('u' << 24|'s' << 16|'e' << 8|'r')
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_META ('m' << 24|'e' << 16|'t' << 8|'a')
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* oplmsu_trace_on */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRACE_OFF 0
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRACE_ON 1
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* oplmsu_debug_mode */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_DPRINT_ON 1 /* enable print log */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* op type */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_UI 0 /* upper input */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_UO 1 /* upper output */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_LI 2 /* lower input */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_LO 3 /* lower output */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_OPN 4 /* open */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define MSU_TRC_CLS 5 /* close */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* trace macro */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define OPLMSU_TRACE(q, mp, op) { \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_trace_on == MSU_TRACE_ON) { \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl oplmsu_cmn_trace(q, mp, op); \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl } \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* debug print macro */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DBG_PRINT(args) { \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_debug_mode & MSU_DPRINT_ON) { \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl cmn_err args; \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl } \
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#else /* ! DEBUG */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* trace macro */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define OPLMSU_TRACE(q, mp, op)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* debug print macro */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DBG_PRINT(args)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif /* _OPLMSU_H */