/*
 * segment.h
 *
 * Copyright 2002, Minoru Murashima. All rights reserved.
 * Distributed under the terms of the BSD License.
 */


#ifndef segment_h
#define segment_h


#include<types.h>
#include<share/segment.h>


#define GDT_ENTRY       256					/* GDエントリー数。 */


#ifndef ASM_FILE


/* ディスクリプタ構造体 */
typedef struct{
	uint low;
	uint high;
}DESCRIPTOR;

/* ディスクリプタテーブルレジスタ構造体 */
typedef struct{
	ushort num;
	DESCRIPTOR *des __attribute__((packed));
}DTR;

/* far call用間接アドレス。 */
typedef struct{
	int addr;
	short des __attribute__((packed));
}FARCALL_ADDR;


enum{
	TYPE_KERNEL_CODE=0xc09a00,		/* カーネルコードディスクリプタ用タイプフラグ値 */
	TYPE_KERNEL_DATA=0xc09200,		/* カーネルコードディスクリプタ用タイプフラグ値 */
	TYPE_USER_CODE=0xc0fa00,		/* ユーザーコードディスクリプタ用タイプフラグ値 */
	TYPE_USER_DATA=0xc0f200,		/* ユーザーコードディスクリプタ用タイプフラグ値 */
	TYPE_KERNEL_CODE16=0x809a00,	/* 16bitカーネルコードディスクリプタ用タイプフラグ値 */
	TYPE_TSS=0x8900,				/* TSS用タイプフラグ値 */
};


extern DTR gdtr;
extern DESCRIPTOR gdt[];

extern void set_user_desculiptor();
extern void set_gdt(int,uint,uint,int);


#endif


#endif
