view include/hvcalls/repository.h @ 0:42f240cc4bc6

From: 太田 篤志 <atoc@namikilab.tuat.ac.jp>
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Sep 2009 13:44:18 +0900
parents
children
line wrap: on
line source

/**
 * hvcalls/repository.h
 * リポジトリ関連のハイパーバイザコール詰め合わせ
 */

#ifndef HVCALLS__REPOSITORY_H
#define HVCALLS__REPOSITORY_H

#include <asm/lv1call.h>
#include "common.h"


//-------------------------------------------------------------------------------------- hvc_make_repository_first_key()
/**
 * hvc_make_repository_first_key
 * リポジトリノードの第 1 レベルキーを生成する
 *
 * @param  char    *text   [IN] キーのテキスト部
 * @param  HVC_u64  index  [IN] キーのインデックス部
 * @return HVC_u64              第 1 レベルキー値
 * @static
 * @inline
 */
static inline HVC_u64 hvc_make_repository_first_key (
	const char    *const text,
	const HVC_u64        index
)
{
	HVC_u64 ret;
	strncpy((char *)&ret, text, 8);   // [Note] strncpy は text が 8 文字未満の場合は残りを 0 で埋めるらしい...
	return (ret >> 32) + index;
}

//-------------------------------------------------------------------------------------------- hvc_make_repository_key()
/**
 * hvc_make_repository_key
 * リポジトリノードのキーを生成する
 *
 * @param  char    *text   [IN] キーのテキスト部
 * @param  HVC_u64  index  [IN] キーのインデックス部
 * @return HVC_u64              キー値
 * @static
 * @inline
 */
static inline HVC_u64 hvc_make_repository_key (
	const char    *const text,
	const HVC_u64        index
)
{
	HVC_u64 ret;
	strncpy((char *)&ret, text, 8);
	return ret + index;
}

//-------------------------------------------------------------------------------------------- hvc_get_repository_node()
/**
 * hvc_get_repository_node (91:lv1_get_repository_node_value)
 * リポジトリノードの値を取得する
 *
 * @param  HVC_u64  lpar_id  [IN]  論理パーティション識別子
 * @param  HVC_u64  key1     [IN]  第 1 レベルキー
 * @param  HVC_u64  key2     [IN]  第 2 レベルキー
 * @param  HVC_u64  key3     [IN]  第 3 レベルキー
 * @param  HVC_u64  key4     [IN]  第 4 レベルキー
 * @param  HVC_u64 *val1     [OUT] リポジトリノードの値 1
 * @param  HVC_u64 *val2     [OUT] リポジトリノードの値 2
 * @return int                     0...成功, not 0...失敗
 * @static
 * @inline
 */
static inline int hvc_get_repository_node (
	const HVC_u64        lpar_id,
	const HVC_u64        key1,
	const HVC_u64        key2,
	const HVC_u64        key3,
	const HVC_u64        key4,
	      HVC_u64 *const val1,
	      HVC_u64 *const val2
)
{
	HVC_u64 ret =
		lv1_get_repository_node_value (
			lpar_id,
			key1,
			key2,
			key3,
			key4,
			val1,
			val2
		);
	HVCALLS_PRINT_INFO("lv1_get_repository_node_value");
	if (ret)
	{
		HVCALLS_PRINT_ERR("lv1_get_repository_node_value FAILED.", ret);
	}
	else
	{
		HVCALLS_PRINT_VALUE_HEX("  1st key",  key1);
		HVCALLS_PRINT_VALUE_HEX("  2nd key",  key2);
		HVCALLS_PRINT_VALUE_HEX("  3rd key",  key3);
		HVCALLS_PRINT_VALUE_HEX("  4th key",  key4);
		HVCALLS_PRINT_VALUE_HEX("  value 1", *val1);
		HVCALLS_PRINT_VALUE_HEX("  value 2", *val2);
	}
	return (int)ret;
}


#endif /*HVCALLS__REPOSITORY_H*/