view include/spe_process.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

/**
 * spe_process.h
 * SPE プロセスマネージャ spe_manager
 * SPE プロセスに関する定数や構造体
 */

#ifndef  INCLUDE__SPE_PROCESS_H
#define  INCLUDE__SPE_PROCESS_H


// SPE プロセスの状態
#define  SPE_PROCESS_CONTEXT_STATUS_OPENED        0   // コンテキストを open した
#define  SPE_PROCESS_CONTEXT_STATUS_WRITTEN       1   // コンテキストデータを書き込んだ
#define  SPE_PROCESS_CONTEXT_STATUS_WAITING       2   // プロセスの実行を待っている
#define  SPE_PROCESS_CONTEXT_STATUS_RUNNING       3   // プロセスが実行中である
#define  SPE_PROCESS_CONTEXT_STATUS_FINISHED      4   // プロセスの実行が終了した
#define  SPE_PROCESS_CONTEXT_STATUS_NOT_RELEASED  5   // 実行は終わったがコンテキストがまだ release されていない
/*
#define  SPE_PROCESS_STATUS_UNEXECUTED  0   // まだ SPE に実行されていない
#define  SPE_PROCESS_STATUS_WAITING     1   // SPE が実行するのを待っている
#define  SPE_PROCESS_STATUS_EXECUTED    2   // SPE がプロセスを実行中である
#define  SPE_PROCESS_STATUS_SUSPENDED   3   // SPE プロセスが中断している (未実装)
#define  SPE_PROCESS_STATUS_FINISHED    4   // SPE プロセスの実行が完了した
*/







/**
 * spe_process_context_write_data_t
 * SPE プロセスコンテキスト write ハンドラ構造体
 */
typedef struct
{
//[ 0]
	uint64_t pgm_start;     // SPE プログラムの先頭アドレス (mmap 等を利用する)
//( 8)
	uint64_t arg;           // 引数
//[16]
	uint64_t dat_start;     // データの先頭アドレス (mmap 等を利用する)
//(24)
	 int32_t pid;           // 登録側プロセス ID
	uint32_t pgm_size;      // SPE プログラムサイズ
//[32]
	uint32_t dat_size;      // データサイズ
	 int32_t reserved[7];   // 予約済
//[64]
}
spe_process_context_write_data_t;


/**
 * spe_process_context_read_data_t
 * SPE プロセスコンテキスト read ハンドラ構造体
 */
typedef struct
{
//[ 0]
	uint64_t ret;           // SPE プロセスの戻り値
//( 8)
	 int32_t spe_pid;       // SPE プロセス ID (登録側の pid ではない)
	volatile int32_t status;        // SPE プロセスの状態
//[16]
	 int32_t spe_no;        // プロセスの実行を担当した SPE (暫定)
	 int32_t reserved[3];   // 予約済
//[32]
}
spe_process_context_read_data_t;


/**
 * spe_process_context_t
 * SPE プロセスコンテキスト構造体
 */
typedef struct
{
	spe_process_context_write_data_t write;
	spe_process_context_read_data_t  read;
}
spe_process_context_t;


/**
 * spe_process_context_list_t
 * SPE プロセスコンテキストの双方向リスト
 */
typedef struct spe_process_context_list
{
	spe_process_context_t            context __attribute__((aligned(16)));
	struct spe_process_context_list *prev_process;
	struct spe_process_context_list *next_process;
}
spe_process_context_list_t;


#endif /*INCLUDE__SPE_PROCESS_H*/