view driver/lspe.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

/**
 * lspe.h
 * SPE プロセスマネージャ spe_manager
 * 論理 SPE に関する設定情報とか
 */

#ifndef  SPE_MANAGER__SPE_H
#define  SPE_MANAGER__SPE_H

#include <linux/interrupt.h>     // request_irq, free_irq

#include "../include/hvcalls/common.h"


#define  SPE_COUNT_REQ         0         // SPE を確保する数 (0=as many as possible)
#define  SPE_COUNT_MAX         6         // これ以上の数の SPE は確保しない
#define  SPE_VIRQ_CLASS_MAX    2         // SPE 仮想割り込みクラス番号の最大値
#define  SPE_LS_AREA_SIZE      0x40000   // LS エリアサイズ (256KB)
#define  SPE_PRIV2_AREA_SIZE   0x20000   // 特権 2 レジスタエリアサイズ (128KB)
#define  SPE_SHADOW_AREA_SIZE  0x1000    // シャドウレジスタエリアサイズ (4KB)

/**
 * lspe_data_t
 * 論理 SPE データ
 */
typedef struct
{
	HVC_u64           spe_id;                                // 論理 SPE 識別子
	void             *ls;                                    // マップされた LS エリアの先頭アドレス
	void             *problem;                               // マップされたプロブレムステートレジスタエリアの先頭アドレス
	void             *priv2;                                 // マップされた特権 2 レジスタエリアの先頭アドレス
	void             *shadow;                                // マップされたシャドウレジスタエリアの先頭アドレス
	unsigned int      virq[SPE_VIRQ_CLASS_MAX+1];            // 仮想割り込み番号
	char             *virq_dev_name[SPE_VIRQ_CLASS_MAX+1];   // 割り込みの所有者 - spe_manager (spe0_class0) という形式

	struct mm_struct *mm;  //debug
	unsigned long     slb_index;  //debug
}
lspe_data_t;


// 外部から参照される関数
int initialize_logical_spes(const HVC_u64, const HVC_u64);
int get_lspe_count(void);
lspe_data_t *get_lspe_data(const int);
void finalize_logical_spes(void);

// 外部から参照されるグローバル変数
extern const HVC_u64 spe_int_mask[SPE_VIRQ_CLASS_MAX+1];


#endif /*SPE_MANAGER__SPE_H*/