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.
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.
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]
23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
30 * Header file of the support for io service ldom
42 * ------------------------------ includes -----------------------------------
45 #include <sys/fm/protocol.h>
46 #include <sys/libds.h>
47 #include <sys/fm/ldom.h>
48 #include <fm/fmd_api.h>
49 #include "etm_xport_api.h"
50 #include "etm_etm_proto.h"
52 #include <libnvpair.h>
56 #define FORWARDING_FAULTS_TO_CONTROL 0 /* not to forward faults to control */
57 #define ASYNC_EVENT_Q_SIZE 100 /* size of the async event q */
58 #define NUM_OF_ROOT_DOMAINS 8 /* size of iosvc_list structure array */
59 #define MAXLEN 0x6000 /* max size of an FMA event */
60 #define FMD_EVN_TTL "__ttl" /* name-value pair for ev_ttl */
64 ETM_ASYNC_EVENT_TOO_LOW
= 0, /* range check place holder */
65 ETM_ASYNC_EVENT_LDOM_BIND
, /* async event type: ldom event */
66 ETM_ASYNC_EVENT_LDOM_UNBIND
, /* async event type: ldom event */
67 ETM_ASYNC_EVENT_LDOM_ADD
, /* async event type: ldom event */
68 ETM_ASYNC_EVENT_LDOM_REMOVE
, /* async event type: ldom event */
69 ETM_ASYNC_EVENT_DS_REG_CB
, /* async event type: DS reg callback */
70 ETM_ASYNC_EVENT_DS_UNREG_CB
, /* async event type: DS unreg cllback */
71 ETM_ASYNC_EVENT_TOO_BIG
/* range check place holder */
73 } etm_async_event_type_t
; /* async etm event type */
78 SP_MSG
= 0, /* msg for ereports from SP */
79 FMD_XPRT_OTHER_MSG
, /* fmd all other xprt msg */
80 FMD_XPRT_RUN_MSG
/* fmd xprt run msg */
82 } etm_pack_msg_type_t
; /* msg type for etm_pack_ds_msg() */
84 typedef struct etm_iosvc_q_ele
{
86 char *msg
; /* ptr to ETM io svc msg */
87 size_t msg_size
; /* sizeof ETM io svc msg */
88 uint_t ckpt_flag
; /* checkpoint flags */
90 struct etm_iosvc_q_ele
*msg_nextp
; /* PRIVATE - next ele ptr */
92 } etm_iosvc_q_ele_t
; /* out-going etm msg queue element */
96 typedef struct etm_iosvc
{
97 char ldom_name
[MAX_LDOM_NAME
]; /* ldom_name */
98 pthread_cond_t msg_q_cv
; /* nudges send msg func more to send */
99 pthread_mutex_t msg_q_lock
; /* protects iosvc msg Q */
102 /* ptr to cur head of the msg Q */
105 /* ptr to cur tail of the msg Q */
106 uint32_t msg_q_cur_len
;
107 /* cur len of the msg Q */
108 uint32_t msg_q_max_len
;
109 /* max len of the msg Q */
110 uint32_t cur_send_xid
; /* current trnsaction id for io svc q */
111 uint32_t xid_posted_ev
; /* xid of last event posted ok to fmd */
112 ds_hdl_t ds_hdl
; /* the ds hdl for this io svc ldom */
113 fmd_xprt_t
*fmd_xprt
; /* fmd transport layer handle */
114 pthread_t send_tid
; /* tid of sending msgs 2 remote iosvc */
115 pthread_t recv_tid
; /* tid of recving msgs frm rmte iosvc */
116 pthread_cond_t msg_ack_cv
; /* ready 2 send nxt or resend cur one */
117 pthread_mutex_t msg_ack_lock
; /* protects msg_ack_cv */
118 int thr_is_dying
; /* flag to exit the thread */
119 uint32_t start_sending_Q
; /* flag to strt sending msg Q */
120 uint32_t ack_ok
; /* indicate if the ACK has come */
121 } etm_iosvc_t
; /* structure to support io service ldom */
124 typedef struct etm_async_event_ele
{
126 etm_async_event_type_t event_type
; /* async event type */
127 ds_hdl_t ds_hdl
; /* ds handle */
128 char ldom_name
[MAX_LDOM_NAME
]; /* ldom name */
129 ds_domain_hdl_t dhdl
; /* ldom handle */
131 struct etm_async_event_ele
*async_event_nextp
;
134 } etm_async_event_ele_t
; /* etm async event queue element */
140 extern etm_iosvc_t
*etm_iosvc_lookup(fmd_hdl_t
*fmd_hdl
, char *ldom_name
,
141 ds_hdl_t ds_hdl
, boolean_t iosvc_create
);
145 * extern etm_iosvc_t *etm_lookup_iosvc(char *ldom_name);
147 extern int etm_pack_ds_msg(fmd_hdl_t
*fmd_hdl
, etm_iosvc_t
*iosvc
,
148 etm_proto_v1_ev_hdr_t
*ev_hdrp
, size_t hdr_sz
, nvlist_t
*evp
,
149 etm_pack_msg_type_t msg_type
, uint_t ckpt_opt
);
155 #endif /* _ETM_IO_SVC_H */