pentiumprocessor.h

来自「Murphy 大俠 GPL 的 C++/x86 RTOS, 支持 MMU, 用戶」· C头文件 代码 · 共 113 行

H
113
字号
// File: PentiumProcessor.h

/*
 * Copyright (c) 1998-1999 Murphy Cheng-Che Chen <murphychen@mail2000.com.tw>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
*/

/*
 1998/12/02: Murphy
	Create this class definition file.
	void SetGDTR(const GDT& gdt);
 1998/12/03: Murphy
	void SetIDTR(const IDT& idt);
	void SetTR(WORD no);
 1998/12/09: Murphy
	void CPUInfoGather();
	void CPUInfoDump();
	BOOL CPUFeatureVerify(unsigned feature);
	void EnablePaging();
	void DisablePaging();
	void SetCR3(DWORD pdir);
 1998/12/27: Murphy
	void InitializeGDT();
	void InitializeIDT();
	void InitializeTSS();
	void InitializePDT();
	void Initialize();
 1999/03/10: Murphy
 	Move paging related stuff to class PentiumMMU.
 1999/03/17: Murphy
 	void EnableInterrupt();
	void DisableInterrupt();
*/

#ifndef __EKERNEL_HARDWARE_PENTIUM_PENTIUMPROCESSOR_H
#define __EKERNEL_HARDWARE_PENTIUM_PENTIUMPROCESSOR_H



#include "Config.h"
#include "Hardware\Processor.h"
#include "cpuid.h"
#include "GDT.h"
#include "IDT.h"
#include "PageDirectory.h"
#include "libc\stdio\stdio.h"
#include "proc_reg.h"



void ctx_sw();				// defined in context_switch.asm
void trigger_timer_interrupt();


class PentiumProcessor : public Processor {

protected:

	cpu_info m_CPUInfo;

	// Each entry in TSSTable contains a TSS for one thread.
	TSS *m_TSSTable;

	// Global Descriptor Table
	GDT m_GDT;

	// Task State Segments for processor initializarion.
	TSS m_TSS;
	TSS m_NullTSS;

	void InitializeGDT();	// Initialize Global Descriptor Table
	void InitializeTSS();	// Initialize Task State Segments

	void SetGDTR(const GDT& gdt);
	void SetTR(WORD no);

public:
	void Initialize();

	void CPUInfoGather();
	void CPUInfoDump();

	inline BOOL CPUFeatureVerify(unsigned feature) { return ((m_CPUInfo.feature_flags & feature)!=0); }

	void SwitchContext(DWORD nOldThreadID, DWORD nNewThreadID);

	void TriggerTimerInterrupt() { trigger_timer_interrupt(); }
	
	void SetThreadContext(DWORD nThreadID, void *pStackStart,
		DWORD nStackSize, void *pEntryFunction, void *pPageTableBase);

	inline void EnableInterrupt() { sti(); }
	inline void DisableInterrupt() { cli(); }
};



#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?