49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * CDDL HEADER START
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * The contents of this file are subject to the terms of the
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * Common Development and Distribution License (the "License").
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * You may not use this file except in compliance with the License.
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * or http://www.opensolaris.org/os/licensing.
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * See the License for the specific language governing permissions
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * and limitations under the License.
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * When distributing Covered Code, include this CDDL HEADER in each
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * If applicable, add the following below this CDDL HEADER, with the
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * fields enclosed by brackets "[]" replaced with your own identifying
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * information: Portions Copyright [yyyy] [name of copyright owner]
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * CDDL HEADER END
82629e3015252bf18319ba3815c773df23e21436Mike Christensen * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * Use is subject to license terms.
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre * Logical Domains System Agent
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre#define LDMA_NVERSIONS (sizeof (ldma_versions) / sizeof (ds_ver_t))
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre#define LDMA_NHANDLERS (sizeof (ldma_handlers) / sizeof (ldma_msg_handler_t))
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartrestatic ldm_msg_func_t ldma_sys_get_sysinfo;
82629e3015252bf18319ba3815c773df23e21436Mike Christensenstatic ldm_msg_func_t ldma_sys_get_chassisno;
82629e3015252bf18319ba3815c773df23e21436Mike Christensen/* ptr to cached value of chassisno */
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartrestatic ds_ver_t ldma_versions[] = { { 1, 0 } };
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartrestatic ldma_msg_handler_t ldma_handlers[] = {
82629e3015252bf18319ba3815c773df23e21436Mike Christensen { LDMA_MSGSYS_GET_SYSINFO, LDMA_MSGFLG_ACCESS_ANY,
82629e3015252bf18319ba3815c773df23e21436Mike Christensen { LDMA_MSGSYS_GET_CHASSISNO, LDMA_MSGFLG_ACCESS_ANY,
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartreldma_sys_get_sysinfo(ds_ver_t *ver, ldma_message_header_t *request,
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre size_t request_dlen, ldma_message_header_t **replyp, size_t *reply_dlenp)
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre size_t syslen, nodlen, rellen, maclen, verlen;
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre if (request->msg_info != 0 || request_dlen != 0) {
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre LDMA_DBG("GET_SYSINFO: uname failed with error %d", errno);
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre rlen = syslen + nodlen + rellen + verlen + maclen;
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre reply = ldma_alloc_result_msg(request, rlen);
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre LDMA_DBG("GET_SYSINFO: return info=%u, {%s, %s, %s, %s, %s}", rlen,
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre name.sysname, name.nodename, name.release, name.version,
49bfb42b00abac0958a1308f4233e366fd083366Alexandre Chartre LDMA_DBG("GET_SYSINFO: return error %d", status);
82629e3015252bf18319ba3815c773df23e21436Mike Christensen * Wrapper for MD free: need unused size argument.
82629e3015252bf18319ba3815c773df23e21436Mike Christensen/* ARGSUSED */
82629e3015252bf18319ba3815c773df23e21436Mike Christensen * Wrapper for MD init: read PRI MD and invoke md_init_intern.
82629e3015252bf18319ba3815c773df23e21436Mike Christensen status = pri_get(PRI_GET, &token, &buf, malloc, ldma_md_free);
82629e3015252bf18319ba3815c773df23e21436Mike Christensen mdp = md_init_intern(buf, malloc, ldma_md_free);
82629e3015252bf18319ba3815c773df23e21436Mike Christensen * Wrapper for md_fini. Allow NULL md ptr and free MD buffer.
82629e3015252bf18319ba3815c773df23e21436Mike Christensen list_size = num_nodes * sizeof (mde_cookie_t);
82629e3015252bf18319ba3815c773df23e21436Mike Christensen ncomponents = md_scan_dag(mdp, rootnode, md_find_name(mdp, "component"),
82629e3015252bf18319ba3815c773df23e21436Mike Christensen md_find_name(mdp, "fwd"), component_nodes);
82629e3015252bf18319ba3815c773df23e21436Mike Christensen for (i = 0; i < ncomponents; i++) {
82629e3015252bf18319ba3815c773df23e21436Mike Christensen if (md_get_prop_str(mdp, component_nodes[i], "type",
82629e3015252bf18319ba3815c773df23e21436Mike Christensen if (strcmp(component_type, "chassis") != 0)
82629e3015252bf18319ba3815c773df23e21436Mike Christensen if (md_get_prop_str(mdp, component_nodes[i],
82629e3015252bf18319ba3815c773df23e21436Mike Christensenldma_sys_get_chassisno(ds_ver_t *ver, ldma_message_header_t *request,
82629e3015252bf18319ba3815c773df23e21436Mike Christensen size_t request_dlen, ldma_message_header_t **replyp, size_t *reply_dlenp)
82629e3015252bf18319ba3815c773df23e21436Mike Christensen if (request->msg_info != 0 || request_dlen != 0) {
82629e3015252bf18319ba3815c773df23e21436Mike Christensen if (ldma_get_chassis_serialno(&str) == 0) {
82629e3015252bf18319ba3815c773df23e21436Mike Christensen LDMA_DBG("GET_CHASSISNO: ldma_get_chassisno failed "
82629e3015252bf18319ba3815c773df23e21436Mike Christensen reply = ldma_alloc_result_msg(request, rlen);
82629e3015252bf18319ba3815c773df23e21436Mike Christensen LDMA_DBG("GET_CHASSISNO: return info=%u, {%s}", rlen, str);
82629e3015252bf18319ba3815c773df23e21436Mike Christensen LDMA_DBG("GET_CHASSISNO: return error %d", status);