summaryrefslogtreecommitdiffstats
path: root/sys/i386/boot/dosboot/protmod.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1995-04-27 18:22:36 +0000
committerphk <phk@FreeBSD.org>1995-04-27 18:22:36 +0000
commit82051ce6fc2632addf7bfa1a09db2bc6af0034b0 (patch)
treec68a99c48cf358bc3b8d9f85225418cde490774d /sys/i386/boot/dosboot/protmod.c
parent6b420d9cc464dcfc626315a0899875554b8ba952 (diff)
downloadFreeBSD-src-82051ce6fc2632addf7bfa1a09db2bc6af0034b0.zip
FreeBSD-src-82051ce6fc2632addf7bfa1a09db2bc6af0034b0.tar.gz
New and improved version from the author.
Submitted by: DI. Christian Gusenbauer <cg@fimp01.fim.uni-linz.ac.at>
Diffstat (limited to 'sys/i386/boot/dosboot/protmod.c')
-rw-r--r--sys/i386/boot/dosboot/protmod.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/i386/boot/dosboot/protmod.c b/sys/i386/boot/dosboot/protmod.c
index 5b6ff24..4dca18d 100644
--- a/sys/i386/boot/dosboot/protmod.c
+++ b/sys/i386/boot/dosboot/protmod.c
@@ -96,7 +96,7 @@ static struct dtr FreeBSDGdtr = { sizeof FreeBSDGdt - 1, 0 };
static struct dtr Gdtr = { sizeof gdt2 - 1, 0 };
static struct dtr Idtr = { sizeof idt2 - 1, 0 };
-struct bootinfo_t bootinfo;
+struct bootinfo bootinfo;
int VCPIboot;
int pm_copy(char far *from, unsigned long to, unsigned long count)
@@ -320,12 +320,13 @@ wehaveit: mov ax,4310h
return (long)hi*0x10000l+(long)lo + 128l*1024l;
}
-void startprog(long hmaddress, long hmsize, long startaddr, long argv[])
+void startprog(long hmaddress, long hmsize, long startaddr, long loadflags,
+ long bootdev)
{
long GDTaddr=ptr2lin(FreeBSDGdt);
long *stack=_MK_FP(0x9f00, 0); /* prepare stack for starting the kernel */
unsigned int pmseg, pmoff;
- unsigned int segment, pcxoff, psioff;
+ unsigned int segment, pcxoff, psioff, pdioff;
long h, BOOTaddr, ourret;
unsigned char *page;
int status;
@@ -357,6 +358,8 @@ void startprog(long hmaddress, long hmsize, long startaddr, long argv[])
mov pcxoff,bx
mov bx,offset psi
mov psioff,bx
+ mov bx,offset pdi
+ mov pdioff,bx
mov segment,ds
pop ds
@@ -364,6 +367,7 @@ void startprog(long hmaddress, long hmsize, long startaddr, long argv[])
*((long *)_MK_FP(segment, pcxoff+1)) = hmsize;
*((long *)_MK_FP(segment, psioff+1)) = hmaddress;
+ *((long *)_MK_FP(segment, pdioff+1)) = startaddr;
h = ptr2lin(&VCPI);
@@ -391,8 +395,8 @@ void startprog(long hmaddress, long hmsize, long startaddr, long argv[])
*stack++ = startaddr; /* that's the startaddress */
*stack++ = 8l; /* new CS */
*stack++ = ourret; /* ourreturn */
- *stack++ = argv[1]; /* howto */
- *stack++ = argv[2]; /* bootdev */
+ *stack++ = loadflags; /* howto */
+ *stack++ = bootdev; /* bootdev */
*stack++ = 0l; /* Parameter 4 */
*stack++ = 0l; /* Parameter 5 */
*stack++ = 0l; /* Parameter 6 */
@@ -571,7 +575,7 @@ psi: _emit 0beh ; mov si,0
_emit 0
_emit 0
_emit 0
- _emit 0bfh ; mov di,0
+pdi: _emit 0bfh ; mov di,0
_emit 0
_emit 0
_emit 0x10
OpenPOWER on IntegriCloud