1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * or http://www.opensolaris.org/os/licensing.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifndef _VCC_IMPL_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define _VCC_IMPL_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#pragma ident "%Z%%M% %I% %E% SMI"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoextern "C" {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/types.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/stream.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/ddi.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/sunddi.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/ioctl.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/vcc.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_DEV_TO_INST(dev) (getminor(dev))
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_INST_TO_DEV(instance) (instance)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_DRIVER_NAME "vcc"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_NAME VCC_DRIVER_NAME
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VCC Port States
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Code flow for port to transit from one state to another is as the follows:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 1. VCC_PORT_AVAIL
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * after download added port to vntsd
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to not added state
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vntsd close the deleted port
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtained port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit port to close and deleted state
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 2. VCC_PORT_OPEN
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from close to open
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * transit port to open
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * 3. VCC_PORT_USE_READ_LDC/VCC_PORT_USE_WRITE_LDC
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 *
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 *
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 *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transition from data ready to data not ready
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - obtain port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Transit to data not ready
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * - release port lock
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_AVAIL 0x1 /* port is configured */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_OPEN 0x2 /* port is opened */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_LDC_CHANNEL_READY 0x4 /* ready for data transfer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_USE_READ_LDC 0x8 /* read lock */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_USE_WRITE_LDC 0x10 /* write lock */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_LDC_DATA_READY 0x20 /* data ready */
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_TERM_RD 0x200 /* suspend write */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_TERM_WR 0x400 /* suspend read */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_NONBLOCK 0x800 /* open with non block flag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_PORT_LDC_LINK_DOWN 0x1000 /* ldc link down */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Poll Flags */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_POLL_CONFIG 0x1 /* poll configuration change */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
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
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* softstate port table state */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_LOCK_PORT_TBL 0x1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* VCC limits */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_MAX_PORTS 0x800 /* number of domains */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_MAX_MINORS VCC_MAX_PORTS /* number of minors */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_MAX_PORT_MINORS (VCC_MAX_MINORS - 1)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_CONTROL_MINOR_IDX (VCC_MAX_MINORS - 1)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* size of vcc message data */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_MTU_SZ 56
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Default values */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_HDR_SZ 8 /* header size */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_BUF_SZ (VCC_HDR_SZ + VCC_MTU_SZ)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_CONTROL_PORT 0x7ff /* port 2047 is control port */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_INST_SHIFT 11
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_INVALID_CHANNEL -1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_NO_PID_BLOCKING -1
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCC_MINOR_NAME_PREFIX "ldom-" /* device name prefix */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* HV message data type */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define LDC_CONSOLE_CTRL 0x1 /* ctrl msg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define LDC_CONSOLE_DATA 0x2 /* data msg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* HV control messages */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define LDC_CONSOLE_BREAK -1 /* brk */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define LDC_CONSOLE_HUP -2 /* hup */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* minor number to port number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCCPORT(p, minor) (p->minor_tbl[(minor & \
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VCC_CONTROL_PORT)].portno)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* minor number to minor pointer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCCMINORP(p, minor) (&(p->minor_tbl[(minor & \
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VCC_CONTROL_PORT)]))
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* minor number to instance */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define VCCINST(minor) ((minor) >> VCC_INST_SHIFT)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* hv console packet format */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vcc_msg {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint8_t type; /* type - data or ctrl */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint8_t size; /* data size */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint16_t unused; /* not used */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int32_t ctrl_msg; /* data if type is ctrl */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint8_t data[VCC_MTU_SZ]; /* data if type is data */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vcc_msg_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * minor node to port mapping table
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vcc_minor {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint_t portno; /* port number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char domain_name[MAXPATHLEN]; /* doman name */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vcc_minor_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* console port structure */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vcc_port {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo kmutex_t lock; /* protects port */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo kcondvar_t read_cv; /* cv to sleep for reads */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo kcondvar_t write_cv; /* cv to sleep for writes */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint_t number; /* port number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint32_t status; /* port status */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char group_name[MAXPATHLEN];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t tcp_port; /* tcp port num */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo struct termios term; /* terminal emulation */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_minor_t *minorp; /* pointer to minor table entry */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint64_t ldc_id; /* Channel number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ldc_handle_t ldc_handle; /* Channel handle */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ldc_status_t ldc_status; /* Channel Status */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint_t pollflag; /* indicated poll status */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo struct pollhead poll;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint32_t pollevent;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo pid_t valid_pid; /* pid that allows cb_ops */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vcc_port_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vcc driver's soft state structure
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct vcc {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* protects vcc_t (soft state) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo kmutex_t lock;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint_t status;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo dev_info_t *dip; /* dev_info */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo mdeg_node_spec_t *md_ispecp; /* mdeg prop spec */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo mdeg_handle_t mdeg_hdl; /* mdeg handle */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_port_t port[VCC_MAX_PORTS]; /* port table */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint_t num_ports; /* avail ports */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_minor_t minor_tbl[VCC_MAX_PORTS]; /* minor table */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint_t minors_assigned; /* assigned minors */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} vcc_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif /* _VCC_IMPL_H */