1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#pragma ident "%Z%%M% %I% %E% SMI"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoextern "C" {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VCC Port States
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * There is one lock in port structure to protect the states of the port.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * States of the port are:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 1. VCC_PORT_AVAIL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 2. VCC_PORT_OPEN
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 3. VCC_PORT_USE_READ_LDC - There is a thread doing vcc_read.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 4. VCC_PORT_USE_WRITE_LDC - There is a thread doing vcc_write.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 6. VCC_PORT_LDC_DATA_READY - Data is ready from ldc.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 5. VCC_PORT_LDC_WRITE_READY - Ldc has space to receive data.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 7. VCC_PORT_LDC_CHANNEL_READY - Ldc channel is up.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 8. VCC_PORT_ADDED - A new port was added.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 9. VCC_PORT_TERM_RD - Terminal read is enabled vs suspended
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 10. VCC_PORT_TERM_WR - Terminal write is enabled vc suspended
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 11. VCC_PORT_NONBLOCK - A port was opened with non blocking flag.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 12. VCC_PORT_LDC_LINK_DOWN
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Code flow for port to transit from one state to another is as the follows:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 1. VCC_PORT_AVAIL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from unavailable to available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to available and added states
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain softstate lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Increase total number of ports
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release softsate lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * after download added port to vntsd
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to not added state
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from available to unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_wait read available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to read unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_wait write available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to write unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to not ready. (close ldc channel)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to deleted state
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to read and write available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_broadcast
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vntsd close the deleted port
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtained port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to close and deleted state
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * after vntsd deletion of the port
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain softstate lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_wait port table unlocked
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit softstate to port table locked
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release softstate lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * destroy port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain softstate lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit softstate to port table unlocked
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_broadcast
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release softsate lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 2. VCC_PORT_OPEN
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from close to open
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * transit port to open
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from open to close
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_wait read available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to read unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_wait write available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to write unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to not ready. (close ldc channel)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to close state
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to read and write available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_broadcast
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from read availale/write available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * to read unavailable/write unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_wait read available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit to read/write unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from read unavailale/write unavailable
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * to read available/write available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit to read/write available
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_broadcast
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 4. VCC_PORT_LDC_CHANNEL_READY
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from data not ready to data ready
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit to data ready
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - cv_broadcast
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from data ready to data not ready
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit to data not ready
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_LDC_CHANNEL_READY 0x4 /* ready for data transfer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_LDC_WRITE_READY 0x40 /* ldc ready receive data */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_ADDED 0x80 /* added, no ack from vntsd */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_UPDATED 0x100 /* updated, no ack from vntsd */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_NONBLOCK 0x800 /* open with non block flag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_LDC_LINK_DOWN 0x1000 /* ldc link down */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Poll Flags */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_POLL_CONFIG 0x1 /* poll configuration change */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Poll evnets */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_POLL_ADD_PORT 0x10 /* add a console port */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_POLL_UPDATE_PORT 0x20 /* update a console port */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* softstate port table state */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* VCC limits */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_MAX_MINORS VCC_MAX_PORTS /* number of minors */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* size of vcc message data */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Default values */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_CONTROL_PORT 0x7ff /* port 2047 is control port */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_MINOR_NAME_PREFIX "ldom-" /* device name prefix */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* HV message data type */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* HV control messages */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* minor number to port number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* minor number to minor pointer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* minor number to instance */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* hv console packet format */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * minor node to port mapping table
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* console port structure */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_minor_t *minorp; /* pointer to minor table entry */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vcc driver's soft state structure
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* protects vcc_t (soft state) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_minor_t minor_tbl[VCC_MAX_PORTS]; /* minor table */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif /* _VCC_IMPL_H */