/*------------------------------------------------------------------------
 * setsegs - initialize the 386 processor
 *------------------------------------------------------------------------
 */
setsegs()
{
	extern int	start, etext;
	struct sd	*psd;
	unsigned int	np, npages;

	npages = sizmem();
	maxaddr = (char *)(npages * NBPG - 1);

	psd = &gdt_copy[1];	/* kernel code segment */
	np = ((int)&etext + NBPG-1) / NBPG;	/* # code pages */
	psd->sd_lolimit = np;
	psd->sd_hilimit = np >> 16;

	psd = &gdt_copy[2];	/* kernel data segment */
	psd->sd_lolimit = npages;
	psd->sd_hilimit = npages >> 16;

	psd = &gdt_copy[3];	/* kernel stack segment */
	psd->sd_lolimit = npages;
	psd->sd_hilimit = npages >> 16;

	memcpy(gdt, gdt_copy, sizeof(gdt_copy));
	initsp = npages*NBPG  - 4;
}
Beispiel #2
0
/*------------------------------------------------------------------------
 * setsegs - initialize the 386 processor
 *------------------------------------------------------------------------
 */
setsegs()
{
	extern int	start, etext;
	struct sd	*psd;
	unsigned int	np, npages, lostk, limit;

	npages = sizmem();
/*
	maxaddr = (char *)(npages * NBPG - 1);
*/
	//maxaddr = (char *)( 1536 * NBPG - 1); /* 10M size */
				 	      /* the top 10M is used for backing store */
    // new max address 1024 pages: 0x0400000-1
	maxaddr = (char *)( 1024 * 4096 - 1); /* 4M size */

	psd = &gdt_copy[1];	/* kernel code segment */
	np = ((int)&etext + NBPG-1) / NBPG;	/* # code pages */
	psd->sd_lolimit = np;
	psd->sd_hilimit = np >> 16;
#if 0
	psd = &gdt_copy[2];	/* kernel data segment */
	psd->sd_lolimit = npages;
	psd->sd_hilimit = npages >> 16;

	psd = &gdt_copy[3];	/* kernel stack segment */
	psd->sd_lolimit = npages;
	psd->sd_hilimit = npages >> 16; 
#endif

	psd = &gdt_copy[4];	/* bootp code segment */
	psd->sd_lolimit = npages;   /* Allows execution of 0x100000 CODE */
	psd->sd_hilimit = npages >> 16;

	/* Set the descriptors for the tasks */
	/* Main Xinu task */

	psd = &gdt_copy[5];
	psd->sd_hibase = ((unsigned int) i386_tasks) >> 24;
	psd->sd_midbase = (((unsigned int) i386_tasks)>>16) & 0xff;
	psd->sd_lobase = ((unsigned int) i386_tasks) & 0xffff;

	/* Page Fault handler task */

	psd = &gdt_copy[6];
	psd->sd_hibase = ((unsigned int) & i386_tasks[1]) >> 24;
	psd->sd_midbase = (((unsigned int) & i386_tasks[1]) >> 16) & 0xff;
	psd->sd_lobase = ((unsigned int) & i386_tasks[1]) & 0xffff;

	blkcopy(gdt, gdt_copy, sizeof(gdt_copy));

	/* initial stack must be in physical
	   memory.
	*/
/*
	initsp = npages*NBPG  - 4;
*/
	initsp = 1024*NBPG  - 4;
}