diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/driver/lspe.h	Tue Sep 08 13:44:18 2009 +0900
@@ -0,0 +1,52 @@
+/**
+ * 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*/