2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License (the "License").
2N/A * You may not use this file except in compliance with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A
2N/A/*
2N/A * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
2N/A */
2N/A
2N/A#ifndef _LDOM_H
2N/A#define _LDOM_H
2N/A
2N/A#include <stdlib.h>
2N/A#include <libnvpair.h>
2N/A#include <sys/types.h>
2N/A#include <umem.h>
2N/A
2N/A#ifdef __cplusplus
2N/Aextern "C" {
2N/A#endif
2N/A
2N/Atypedef struct ldom_hdl ldom_hdl_t;
2N/A
2N/Aextern ldom_hdl_t *ldom_init(void *(*allocp)(size_t size),
2N/A void (*freep)(void *addr, size_t size));
2N/Aextern void ldom_fini(ldom_hdl_t *lhp);
2N/A
2N/Aextern int ldom_fmri_status(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
2N/Aextern int ldom_fmri_retire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
2N/Aextern int ldom_fmri_unretire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
2N/Aextern int ldom_fmri_blacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
2N/Aextern int ldom_fmri_unblacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
2N/A
2N/Aextern ssize_t ldom_get_core_md(ldom_hdl_t *lhp, uint64_t **buf);
2N/Aextern ssize_t ldom_get_local_md(ldom_hdl_t *lhp, uint64_t **buf);
2N/Aextern ssize_t ldom_waitget_core_md(ldom_hdl_t *lhp, uint64_t **buf,
2N/A uint64_t *token);
2N/A
2N/A/*
2N/A * domain type
2N/A */
2N/A#define LDOM_TYPE_LEGACY 0x1
2N/A#define LDOM_TYPE_CONTROL 0x2
2N/A#define LDOM_TYPE_ROOT 0x4
2N/A#define LDOM_TYPE_NIU 0x8
2N/A#define LDOM_TYPE_VROOT 0x10
2N/A#define LDOM_TYPE_IO (LDOM_TYPE_ROOT | LDOM_TYPE_VROOT)
2N/A#define LDOM_TYPE_ALL \
2N/A (LDOM_TYPE_LEGACY | LDOM_TYPE_CONTROL | LDOM_TYPE_ROOT | \
2N/A LDOM_TYPE_VROOT | LDOM_TYPE_NIU)
2N/A#define VALID_LDOM_TYPE(t) ((t) & LDOM_TYPE_ALL)
2N/A
2N/Aextern int ldom_get_type(ldom_hdl_t *lhp, uint32_t *type_mask);
2N/A
2N/A/*
2N/A * Resource map
2N/A */
2N/Atypedef enum ldom_rsrc {
2N/A LDOM_RSRC_PCI,
2N/A LDOM_RSRC_NIU,
2N/A LDOM_RSRC_MAX
2N/A} ldom_rsrc_t;
2N/A
2N/Aextern int
2N/Aldom_find_id(ldom_hdl_t *lhp, uint64_t addr, ldom_rsrc_t type,
2N/A uint64_t *virt_addr, char *name, int name_size, uint64_t *id);
2N/A
2N/A/*
2N/A * event notification
2N/A */
2N/Atypedef enum ldom_event {
2N/A LDOM_EVENT_UNKNOWN,
2N/A LDOM_EVENT_ADD,
2N/A LDOM_EVENT_REMOVE,
2N/A LDOM_EVENT_BIND,
2N/A LDOM_EVENT_UNBIND,
2N/A LDOM_EVENT_START,
2N/A LDOM_EVENT_STOP,
2N/A LDOM_EVENT_RESET,
2N/A LDOM_EVENT_PANIC,
2N/A LDOM_EVENT_MAX
2N/A} ldom_event_t;
2N/A#define VALID_LDOM_EVENT(e) ((e) > LDOM_EVENT_UNKNOWN && \
2N/A (e) < LDOM_EVENT_MAX)
2N/A#define MAX_LDOM_NAME 256
2N/A
2N/Atypedef void *ldom_cb_arg_t;
2N/Atypedef void (*ldom_reg_cb_t)(char *ldom_name, ldom_event_t event,
2N/A ldom_cb_arg_t data);
2N/Aextern int ldom_register_event(ldom_hdl_t *lhp, ldom_reg_cb_t cb,
2N/A ldom_cb_arg_t data);
2N/Aextern int ldom_unregister_event(ldom_hdl_t *lhp);
2N/A
2N/A#ifdef __cplusplus
2N/A}
2N/A#endif
2N/A
2N/A#endif /* _LDOM_H */