Home | History | Annotate | Download | only in sparc
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 /*
     22  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 #ifndef	_LDOM_H
     27 #define	_LDOM_H
     28 
     29 #include <stdlib.h>
     30 #include <libnvpair.h>
     31 #include <sys/types.h>
     32 #include <umem.h>
     33 
     34 #ifdef	__cplusplus
     35 extern "C" {
     36 #endif
     37 
     38 typedef struct ldom_hdl ldom_hdl_t;
     39 
     40 extern ldom_hdl_t *ldom_init(void *(*allocp)(size_t size),
     41 			    void (*freep)(void *addr, size_t size));
     42 extern void ldom_fini(ldom_hdl_t *lhp);
     43 
     44 extern int ldom_fmri_status(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
     45 extern int ldom_fmri_retire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
     46 extern int ldom_fmri_unretire(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
     47 extern int ldom_fmri_blacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
     48 extern int ldom_fmri_unblacklist(ldom_hdl_t *lhp, nvlist_t *nvl_fmri);
     49 
     50 extern ssize_t ldom_get_core_md(ldom_hdl_t *lhp, uint64_t **buf);
     51 extern ssize_t ldom_get_local_md(ldom_hdl_t *lhp, uint64_t **buf);
     52 
     53 /*
     54  * domain type
     55  */
     56 #define	LDOM_TYPE_LEGACY	0x1
     57 #define	LDOM_TYPE_CONTROL	0x2
     58 #define	LDOM_TYPE_ROOT		0x4
     59 #define	LDOM_TYPE_IO		0x8
     60 #define	LDOM_TYPE_ALL \
     61 	(LDOM_TYPE_LEGACY | LDOM_TYPE_CONTROL | LDOM_TYPE_ROOT | LDOM_TYPE_IO)
     62 #define	VALID_LDOM_TYPE(t)	((t) & LDOM_TYPE_ALL)
     63 
     64 extern int ldom_get_type(ldom_hdl_t *lhp, uint32_t *type_mask);
     65 
     66 /*
     67  * Resource map
     68  */
     69 typedef enum ldom_rsrc {
     70 	LDOM_RSRC_PCI,
     71 	LDOM_RSRC_NIU,
     72 	LDOM_RSRC_MAX
     73 } ldom_rsrc_t;
     74 
     75 extern int
     76 ldom_find_id(ldom_hdl_t *lhp, uint64_t addr, ldom_rsrc_t type,
     77     uint64_t *virt_addr, char *name, int name_size, uint64_t *id);
     78 
     79 /*
     80  * event notification
     81  */
     82 typedef enum ldom_event {
     83 	LDOM_EVENT_UNKNOWN,
     84 	LDOM_EVENT_ADD,
     85 	LDOM_EVENT_REMOVE,
     86 	LDOM_EVENT_BIND,
     87 	LDOM_EVENT_UNBIND,
     88 	LDOM_EVENT_START,
     89 	LDOM_EVENT_STOP,
     90 	LDOM_EVENT_RESET,
     91 	LDOM_EVENT_PANIC,
     92 	LDOM_EVENT_MAX
     93 } ldom_event_t;
     94 #define	VALID_LDOM_EVENT(e)	((e) > LDOM_EVENT_UNKNOWN && \
     95 				(e) < LDOM_EVENT_MAX)
     96 #define	MAX_LDOM_NAME		256
     97 
     98 typedef void *ldom_cb_arg_t;
     99 typedef void (*ldom_reg_cb_t)(char *ldom_name, ldom_event_t event,
    100 				ldom_cb_arg_t data);
    101 extern int ldom_register_event(ldom_hdl_t *lhp, ldom_reg_cb_t cb,
    102 				ldom_cb_arg_t data);
    103 extern int ldom_unregister_event(ldom_hdl_t *lhp);
    104 
    105 #ifdef	__cplusplus
    106 }
    107 #endif
    108 
    109 #endif	/* _LDOM_H */
    110