25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * CDDL HEADER START
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * The contents of this file are subject to the terms of the
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * Common Development and Distribution License (the "License").
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * You may not use this file except in compliance with the License.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * or http://www.opensolaris.org/os/licensing.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * See the License for the specific language governing permissions
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * and limitations under the License.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * When distributing Covered Code, include this CDDL HEADER in each
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * If applicable, add the following below this CDDL HEADER, with the
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * fields enclosed by brackets "[]" replaced with your own identifying
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * information: Portions Copyright [yyyy] [name of copyright owner]
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * CDDL HEADER END
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * Use is subject to license terms.
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * etm_iosvc.h
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * Header file of the support for io service ldom
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#ifndef _ETM_IO_SVC_H
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#define _ETM_IO_SVC_H
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#ifdef __cplusplus
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenextern "C" {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#endif
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * ------------------------------ includes -----------------------------------
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include <sys/fm/protocol.h>
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include <sys/libds.h>
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include <sys/fm/ldom.h>
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include <fm/fmd_api.h>
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include "etm_xport_api.h"
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include "etm_etm_proto.h"
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include <libnvpair.h>
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#include <pthread.h>
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#define FORWARDING_FAULTS_TO_CONTROL 0 /* not to forward faults to control */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#define ASYNC_EVENT_Q_SIZE 100 /* size of the async event q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#define NUM_OF_ROOT_DOMAINS 8 /* size of iosvc_list structure array */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#define MAXLEN 0x6000 /* max size of an FMA event */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#define FMD_EVN_TTL "__ttl" /* name-value pair for ev_ttl */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyentypedef enum {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_TOO_LOW = 0, /* range check place holder */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_LDOM_BIND, /* async event type: ldom event */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_LDOM_UNBIND, /* async event type: ldom event */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_LDOM_ADD, /* async event type: ldom event */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_LDOM_REMOVE, /* async event type: ldom event */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_DS_REG_CB, /* async event type: DS reg callback */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_DS_UNREG_CB, /* async event type: DS unreg cllback */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ETM_ASYNC_EVENT_TOO_BIG /* range check place holder */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen} etm_async_event_type_t; /* async etm event type */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyentypedef enum {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen SP_MSG = 0, /* msg for ereports from SP */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen FMD_XPRT_OTHER_MSG, /* fmd all other xprt msg */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen FMD_XPRT_RUN_MSG /* fmd xprt run msg */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen} etm_pack_msg_type_t; /* msg type for etm_pack_ds_msg() */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyentypedef struct etm_iosvc_q_ele {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen char *msg; /* ptr to ETM io svc msg */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen size_t msg_size; /* sizeof ETM io svc msg */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen uint_t ckpt_flag; /* checkpoint flags */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen struct etm_iosvc_q_ele *msg_nextp; /* PRIVATE - next ele ptr */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen} etm_iosvc_q_ele_t; /* out-going etm msg queue element */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyentypedef struct etm_iosvc {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen char ldom_name[MAX_LDOM_NAME]; /* ldom_name */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen pthread_cond_t msg_q_cv; /* nudges send msg func more to send */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen pthread_mutex_t msg_q_lock; /* protects iosvc msg Q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen etm_iosvc_q_ele_t
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *msg_q_head;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen /* ptr to cur head of the msg Q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen etm_iosvc_q_ele_t
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen *msg_q_tail;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen /* ptr to cur tail of the msg Q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen uint32_t msg_q_cur_len;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen /* cur len of the msg Q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen uint32_t msg_q_max_len;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen /* max len of the msg Q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen uint32_t cur_send_xid; /* current trnsaction id for io svc q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen uint32_t xid_posted_ev; /* xid of last event posted ok to fmd */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ds_hdl_t ds_hdl; /* the ds hdl for this io svc ldom */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen fmd_xprt_t *fmd_xprt; /* fmd transport layer handle */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen pthread_t send_tid; /* tid of sending msgs 2 remote iosvc */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen pthread_t recv_tid; /* tid of recving msgs frm rmte iosvc */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen pthread_cond_t msg_ack_cv; /* ready 2 send nxt or resend cur one */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen pthread_mutex_t msg_ack_lock; /* protects msg_ack_cv */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen int thr_is_dying; /* flag to exit the thread */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen uint32_t start_sending_Q; /* flag to strt sending msg Q */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen uint32_t ack_ok; /* indicate if the ACK has come */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen} etm_iosvc_t; /* structure to support io service ldom */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyentypedef struct etm_async_event_ele {
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen etm_async_event_type_t event_type; /* async event type */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ds_hdl_t ds_hdl; /* ds handle */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen char ldom_name[MAX_LDOM_NAME]; /* ldom name */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ds_domain_hdl_t dhdl; /* ldom handle */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen struct etm_async_event_ele *async_event_nextp;
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen /* next ele ptr */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen} etm_async_event_ele_t; /* etm async event queue element */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * This function
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenextern etm_iosvc_t *etm_iosvc_lookup(fmd_hdl_t *fmd_hdl, char *ldom_name,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen ds_hdl_t ds_hdl, boolean_t iosvc_create);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen/*
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen * extern etm_iosvc_t *etm_lookup_iosvc(char *ldom_name);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen */
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyenextern int etm_pack_ds_msg(fmd_hdl_t *fmd_hdl, etm_iosvc_t *iosvc,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen etm_proto_v1_ev_hdr_t *ev_hdrp, size_t hdr_sz, nvlist_t *evp,
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen etm_pack_msg_type_t msg_type, uint_t ckpt_opt);
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#ifdef __cplusplus
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen}
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#endif
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen
25351652d920ae27c5a56c199da581033ce763f6Vuong Nguyen#endif /* _ETM_IO_SVC_H */