269473047d747f7815af570197e4ef7322d3632cEvan Yan/*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * CDDL HEADER START
269473047d747f7815af570197e4ef7322d3632cEvan Yan *
269473047d747f7815af570197e4ef7322d3632cEvan Yan * The contents of this file are subject to the terms of the
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Common Development and Distribution License (the "License").
269473047d747f7815af570197e4ef7322d3632cEvan Yan * You may not use this file except in compliance with the License.
269473047d747f7815af570197e4ef7322d3632cEvan Yan *
269473047d747f7815af570197e4ef7322d3632cEvan Yan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
269473047d747f7815af570197e4ef7322d3632cEvan Yan * or http://www.opensolaris.org/os/licensing.
269473047d747f7815af570197e4ef7322d3632cEvan Yan * See the License for the specific language governing permissions
269473047d747f7815af570197e4ef7322d3632cEvan Yan * and limitations under the License.
269473047d747f7815af570197e4ef7322d3632cEvan Yan *
269473047d747f7815af570197e4ef7322d3632cEvan Yan * When distributing Covered Code, include this CDDL HEADER in each
269473047d747f7815af570197e4ef7322d3632cEvan Yan * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
269473047d747f7815af570197e4ef7322d3632cEvan Yan * If applicable, add the following below this CDDL HEADER, with the
269473047d747f7815af570197e4ef7322d3632cEvan Yan * fields enclosed by brackets "[]" replaced with your own identifying
269473047d747f7815af570197e4ef7322d3632cEvan Yan * information: Portions Copyright [yyyy] [name of copyright owner]
269473047d747f7815af570197e4ef7322d3632cEvan Yan *
269473047d747f7815af570197e4ef7322d3632cEvan Yan * CDDL HEADER END
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan/*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Use is subject to license terms.
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan#ifndef _SYS_DDI_HP_H
269473047d747f7815af570197e4ef7322d3632cEvan Yan#define _SYS_DDI_HP_H
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan/*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Sun DDI hotplug support definitions
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan#ifdef __cplusplus
269473047d747f7815af570197e4ef7322d3632cEvan Yanextern "C" {
269473047d747f7815af570197e4ef7322d3632cEvan Yan#endif
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan/*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * ddi_hp_cn_state_t
269473047d747f7815af570197e4ef7322d3632cEvan Yan *
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Typedef of generic hotplug state machine for Hotplug Connection (CN)
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yantypedef enum {
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_EMPTY = 0x1000, /* Empty */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_PRESENT = 0x2000, /* A Device Present */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_POWERED = 0x3000, /* Powered */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_ENABLED = 0x4000, /* Enabled */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_PORT_EMPTY = 0x5000, /* PORT Empty */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_PORT_PRESENT = 0x6000, /* A Device Node Present */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_OFFLINE = 0x7000, /* Driver not attached */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_ATTACHED = 0x8000, /* Device driver attached */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_MAINTENANCE = 0x9000, /* Device in maintenance */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_STATE_ONLINE = 0xa000 /* Device is ready */
269473047d747f7815af570197e4ef7322d3632cEvan Yan} ddi_hp_cn_state_t;
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan/*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * ddi_hp_cn_type_t
269473047d747f7815af570197e4ef7322d3632cEvan Yan *
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Typedef for Hotplug Connection (CN) types.
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yantypedef enum {
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_TYPE_VIRTUAL_PORT = 0x1, /* Virtual Hotplug Port */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_TYPE_PCI = 0x2, /* PCI bus slot */
269473047d747f7815af570197e4ef7322d3632cEvan Yan DDI_HP_CN_TYPE_PCIE = 0x3 /* PCI Express slot */
269473047d747f7815af570197e4ef7322d3632cEvan Yan} ddi_hp_cn_type_t;
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan#define DDI_HP_CN_TYPE_STR_PORT "Virtual-Port"
269473047d747f7815af570197e4ef7322d3632cEvan Yan/*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * The value set to ddi_hp_cn_info_t->cn_num_dpd_on in the case of the
269473047d747f7815af570197e4ef7322d3632cEvan Yan * connection does not depend on any other connections.
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan#define DDI_HP_CN_NUM_NONE -1
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan/*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * ddi_hp_cn_info_t
269473047d747f7815af570197e4ef7322d3632cEvan Yan *
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Hotplug Connection (CN) information structure
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yantypedef struct ddi_hp_cn_info {
269473047d747f7815af570197e4ef7322d3632cEvan Yan char *cn_name; /* Name of the Connection */
269473047d747f7815af570197e4ef7322d3632cEvan Yan /*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Connection number.
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan int cn_num;
269473047d747f7815af570197e4ef7322d3632cEvan Yan /*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Depend-on connection number;
269473047d747f7815af570197e4ef7322d3632cEvan Yan * The connection number on which this connection is depending on.
269473047d747f7815af570197e4ef7322d3632cEvan Yan * If this connection does not depend on any other connections
269473047d747f7815af570197e4ef7322d3632cEvan Yan * under the same parent node, then it's cn_num_dpd_on is set to
269473047d747f7815af570197e4ef7322d3632cEvan Yan * DDI_HP_CN_NUM_NONE.
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan int cn_num_dpd_on;
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan ddi_hp_cn_type_t cn_type; /* Type: Port, PCI, PCIE, ... */
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan /*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * Description string for types of Connection. Set by bus software
269473047d747f7815af570197e4ef7322d3632cEvan Yan * and read by users only.
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan char *cn_type_str;
269473047d747f7815af570197e4ef7322d3632cEvan Yan /*
269473047d747f7815af570197e4ef7322d3632cEvan Yan * The child device of this Port.
269473047d747f7815af570197e4ef7322d3632cEvan Yan * It is NULL if this is a Connector.
269473047d747f7815af570197e4ef7322d3632cEvan Yan */
269473047d747f7815af570197e4ef7322d3632cEvan Yan dev_info_t *cn_child;
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan ddi_hp_cn_state_t cn_state; /* Hotplug Connection state */
269473047d747f7815af570197e4ef7322d3632cEvan Yan time32_t cn_last_change; /* Last time state changed. */
269473047d747f7815af570197e4ef7322d3632cEvan Yan} ddi_hp_cn_info_t;
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yantypedef struct ddi_hp_property {
269473047d747f7815af570197e4ef7322d3632cEvan Yan char *nvlist_buf;
269473047d747f7815af570197e4ef7322d3632cEvan Yan size_t buf_size;
269473047d747f7815af570197e4ef7322d3632cEvan Yan} ddi_hp_property_t;
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan#if defined(_SYSCALL32)
269473047d747f7815af570197e4ef7322d3632cEvan Yantypedef struct ddi_hp_property32 {
269473047d747f7815af570197e4ef7322d3632cEvan Yan caddr32_t nvlist_buf;
269473047d747f7815af570197e4ef7322d3632cEvan Yan uint32_t buf_size;
269473047d747f7815af570197e4ef7322d3632cEvan Yan} ddi_hp_property32_t;
269473047d747f7815af570197e4ef7322d3632cEvan Yan#endif
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan#ifdef __cplusplus
269473047d747f7815af570197e4ef7322d3632cEvan Yan}
269473047d747f7815af570197e4ef7322d3632cEvan Yan#endif
269473047d747f7815af570197e4ef7322d3632cEvan Yan
269473047d747f7815af570197e4ef7322d3632cEvan Yan#endif /* _SYS_DDI_HP_H */