131e37bb4Svn83148 /* 231e37bb4Svn83148 * CDDL HEADER START 331e37bb4Svn83148 * 431e37bb4Svn83148 * The contents of this file are subject to the terms of the 531e37bb4Svn83148 * Common Development and Distribution License (the "License"). 631e37bb4Svn83148 * You may not use this file except in compliance with the License. 731e37bb4Svn83148 * 831e37bb4Svn83148 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 931e37bb4Svn83148 * or http://www.opensolaris.org/os/licensing. 1031e37bb4Svn83148 * See the License for the specific language governing permissions 1131e37bb4Svn83148 * and limitations under the License. 1231e37bb4Svn83148 * 1331e37bb4Svn83148 * When distributing Covered Code, include this CDDL HEADER in each 1431e37bb4Svn83148 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1531e37bb4Svn83148 * If applicable, add the following below this CDDL HEADER, with the 1631e37bb4Svn83148 * fields enclosed by brackets "[]" replaced with your own identifying 1731e37bb4Svn83148 * information: Portions Copyright [yyyy] [name of copyright owner] 1831e37bb4Svn83148 * 1931e37bb4Svn83148 * CDDL HEADER END 2031e37bb4Svn83148 */ 2131e37bb4Svn83148 /* 225f149bcaScy152378 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 2331e37bb4Svn83148 * Use is subject to license terms. 2431e37bb4Svn83148 */ 2531e37bb4Svn83148 2631e37bb4Svn83148 #ifndef _LDOM_H 2731e37bb4Svn83148 #define _LDOM_H 2831e37bb4Svn83148 2931e37bb4Svn83148 #include <stdlib.h> 3031e37bb4Svn83148 #include <libnvpair.h> 3131e37bb4Svn83148 #include <sys/types.h> 32*25351652SVuong Nguyen #include <umem.h> 3331e37bb4Svn83148 3431e37bb4Svn83148 #ifdef __cplusplus 3531e37bb4Svn83148 extern "C" { 3631e37bb4Svn83148 #endif 3731e37bb4Svn83148 3831e37bb4Svn83148 typedef struct ldom_hdl ldom_hdl_t; 3931e37bb4Svn83148 4031e37bb4Svn83148 extern ldom_hdl_t *ldom_init(void *(*allocp)(size_t size), 4131e37bb4Svn83148 void (*freep)(void *addr, size_t size)); 4231e37bb4Svn83148 extern void ldom_fini(ldom_hdl_t *lhp); 4331e37bb4Svn83148 4431e37bb4Svn83148 extern int ldom_fmri_status(ldom_hdl_t *lhp, nvlist_t *nvl_fmri); 4531e37bb4Svn83148 extern int ldom_fmri_retire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri); 465f149bcaScy152378 extern int ldom_fmri_unretire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri); 4731e37bb4Svn83148 extern int ldom_fmri_blacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri); 485f149bcaScy152378 extern int ldom_fmri_unblacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri); 4931e37bb4Svn83148 5031e37bb4Svn83148 extern ssize_t ldom_get_core_md(ldom_hdl_t *lhp, uint64_t **buf); 51*25351652SVuong Nguyen extern ssize_t ldom_get_local_md(ldom_hdl_t *lhp, uint64_t **buf); 5231e37bb4Svn83148 53*25351652SVuong Nguyen /* 54*25351652SVuong Nguyen * domain type 55*25351652SVuong Nguyen */ 56*25351652SVuong Nguyen #define LDOM_TYPE_LEGACY 0x1 57*25351652SVuong Nguyen #define LDOM_TYPE_CONTROL 0x2 58*25351652SVuong Nguyen #define LDOM_TYPE_ROOT 0x4 59*25351652SVuong Nguyen #define LDOM_TYPE_IO 0x8 60*25351652SVuong Nguyen #define LDOM_TYPE_ALL \ 61*25351652SVuong Nguyen (LDOM_TYPE_LEGACY | LDOM_TYPE_CONTROL | LDOM_TYPE_ROOT | LDOM_TYPE_IO) 62*25351652SVuong Nguyen #define VALID_LDOM_TYPE(t) ((t) & LDOM_TYPE_ALL) 63*25351652SVuong Nguyen 64*25351652SVuong Nguyen extern int ldom_get_type(ldom_hdl_t *lhp, uint32_t *type_mask); 65*25351652SVuong Nguyen 66*25351652SVuong Nguyen /* 67*25351652SVuong Nguyen * Resource map 68*25351652SVuong Nguyen */ 69*25351652SVuong Nguyen typedef enum ldom_rsrc { 70*25351652SVuong Nguyen LDOM_RSRC_PCI, 71*25351652SVuong Nguyen LDOM_RSRC_NIU, 72*25351652SVuong Nguyen LDOM_RSRC_MAX 73*25351652SVuong Nguyen } ldom_rsrc_t; 74*25351652SVuong Nguyen 75*25351652SVuong Nguyen extern int 76*25351652SVuong Nguyen ldom_find_id(ldom_hdl_t *lhp, uint64_t addr, ldom_rsrc_t type, 77*25351652SVuong Nguyen uint64_t *virt_addr, char *name, int name_size, uint64_t *id); 78*25351652SVuong Nguyen 79*25351652SVuong Nguyen /* 80*25351652SVuong Nguyen * event notification 81*25351652SVuong Nguyen */ 82*25351652SVuong Nguyen typedef enum ldom_event { 83*25351652SVuong Nguyen LDOM_EVENT_UNKNOWN, 84*25351652SVuong Nguyen LDOM_EVENT_ADD, 85*25351652SVuong Nguyen LDOM_EVENT_REMOVE, 86*25351652SVuong Nguyen LDOM_EVENT_BIND, 87*25351652SVuong Nguyen LDOM_EVENT_UNBIND, 88*25351652SVuong Nguyen LDOM_EVENT_START, 89*25351652SVuong Nguyen LDOM_EVENT_STOP, 90*25351652SVuong Nguyen LDOM_EVENT_RESET, 91*25351652SVuong Nguyen LDOM_EVENT_PANIC, 92*25351652SVuong Nguyen LDOM_EVENT_MAX 93*25351652SVuong Nguyen } ldom_event_t; 94*25351652SVuong Nguyen #define VALID_LDOM_EVENT(e) ((e) > LDOM_EVENT_UNKNOWN && \ 95*25351652SVuong Nguyen (e) < LDOM_EVENT_MAX) 96*25351652SVuong Nguyen #define MAX_LDOM_NAME 256 97*25351652SVuong Nguyen 98*25351652SVuong Nguyen typedef void *ldom_cb_arg_t; 99*25351652SVuong Nguyen typedef void (*ldom_reg_cb_t)(char *ldom_name, ldom_event_t event, 100*25351652SVuong Nguyen ldom_cb_arg_t data); 101*25351652SVuong Nguyen extern int ldom_register_event(ldom_hdl_t *lhp, ldom_reg_cb_t cb, 102*25351652SVuong Nguyen ldom_cb_arg_t data); 103*25351652SVuong Nguyen extern int ldom_unregister_event(ldom_hdl_t *lhp); 10431e37bb4Svn83148 10531e37bb4Svn83148 #ifdef __cplusplus 10631e37bb4Svn83148 } 10731e37bb4Svn83148 #endif 10831e37bb4Svn83148 10931e37bb4Svn83148 #endif /* _LDOM_H */ 110