mp_config.h

マルチプロセッササポートモジュール ヘッダーファイル(Nios2用) [詳細]

#include "nios2.h"

mp_config.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

マクロ定義

#define MASTER_PROC()   (PRCID == 1)

関数

Inline void raise_ipi (INT procid)
 プロセッサ間割込みの発生
Inline void clear_ipi (void)
 プロセッサ間割込みのクリア
Inline void hw_ipi_initialize (void)
 プロセッサ割込み回路に関する初期化
Inline VP memset (VP str, INT ch, UINT len)
void mp_initialize (void)
 同期用のデータ初期化(マスタプロセッサのみ実行)
void mp_init_sync (void)
 マスタプロセッサによる初期化を待つ(マスタプロセッサ以外が実行)
void mp_start (void)
 全てのプロセッサのEXCCBの初期化待ち


説明

マルチプロセッササポートモジュール ヘッダーファイル(Nios2用)

mp_config.h で定義されています。


マクロ定義

 
#define MASTER_PROC  )     (PRCID == 1)
 

mp_config.h48 行で定義されています。

参照元 kernel_start()mp_start().


関数

Inline void clear_ipi void   ) 
 

プロセッサ間割込みのクリア

mp_config.h65 行で定義されています。

参照先 INTERPROC_CLEARsil_wrw_mem().

参照元 ipi_handler().

00066 {
00067     sil_wrw_mem((VP)INTERPROC_CLEAR, 0x00);
00068 }

関数の呼び出しグラフ:

Inline void hw_ipi_initialize void   ) 
 

プロセッサ割込み回路に関する初期化

mp_config.h74 行で定義されています。

参照先 ena_int()INTERPROCLVL.

参照元 ipi_initialize().

00075 {
00076     /* 割込み許可 */
00077     ena_int(INTERPROCLVL);
00078 }

関数の呼び出しグラフ:

Inline VP memset VP  str,
INT  ch,
UINT  len
 

mp_config.h84 行で定義されています。

00085 {
00086     VB *s = str;
00087 
00088     while (len-- > 0) {
00089         *s++ = ch;
00090     }
00091     return(str);
00092 }

void mp_init_sync void   ) 
 

マスタプロセッサによる初期化を待つ(マスタプロセッサ以外が実行)

mp_config.c93 行で定義されています。

参照先 MAGIC_START.

00094 {
00095     INT i;
00096     INT cnt = 0;
00097 
00098     if (!((exccb_available == 0) || (exccb_available == MAGIC_START))) {
00099         exccb_available = 0;
00100     }
00101 
00102     while (1) {
00103         for (i = 0; i < 300; i++);
00104         cnt++;
00105         if (exccb_available == MAGIC_START) {
00106             break;
00107         }
00108     }
00109     
00110     syslog(LOG_NOTICE,"receive %x(cnt=%d)",exccb_available, cnt);
00111 }

void mp_initialize void   ) 
 

同期用のデータ初期化(マスタプロセッサのみ実行)

mp_config.c77 行で定義されています。

参照先 FALSE.

00078 {
00079     INT i;
00080 
00081     sys_start = 0;
00082     exccb_available = 0;
00083     for (i = 1; i <= NO_PROC; i++) {
00084         proc_init[i-1] = FALSE;
00085     }
00086     exccb_available = MAGIC_START;
00087 }

void mp_start void   ) 
 

全てのプロセッサのEXCCBの初期化待ち

mp_config.c117 行で定義されています。

参照先 MASTER_PROCTRUE.

00118 {
00119     INT i, j, flag;
00120 
00121     proc_init[PRCID - 1] = TRUE;
00122 
00123     if (MASTER_PROC()) {
00124         do {
00125             flag = 0;
00126             for (i = 1; i <= NO_PROC; i++) {
00127                 if (proc_init[i-1] == TRUE) {
00128                     flag++;
00129                 }
00130             }
00131             for (j =0; j < 100; j++);
00132         } while (flag < NO_PROC);
00133         sys_start = MAGIC_START;
00134         exccb_available = 0;
00135     }
00136     else {
00137         while (sys_start != MAGIC_START) {
00138             for (j = 0; j < 100; j++);
00139         }
00140     }
00141 }

Inline void raise_ipi INT  procid  ) 
 

プロセッサ間割込みの発生

mp_config.h56 行で定義されています。

参照先 INTERPROC_BASEINTERPROC_OFFSETsil_wrw_mem().

00057 {
00058     sil_wrw_mem((VP)(INTERPROC_BASE + (INTERPROC_OFFSET * procid)), 0x01);    
00059 }

関数の呼び出しグラフ:


Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:16 2006 に Doxygen によって生成されました。