Going realmode in kernel drivers?
From: Peter B (pb_at_ludd.luth.se)
Date: 11/24/03
- Previous message: Leo Bicknell: "Re: Making a FreeBSD DVD"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
To: freebsd-hackers@freebsd.org Date: Mon, 24 Nov 2003 16:18:14 +0100 (MET)
i386/FreeBSD-4.x/lkm.
How does one get into 'realmode' inside a kernel driver?
The reason for the need is a tight timeing loop that measures the lenght of
pulses. And disableing interrupts is just not enough.
Target cpu's are AMD K5 + AMD XP.
Asfair when reading cycles per opcode. The number of cycles required increase
about three times when useing protected mode or similar.
Code excerpt:
u_int32_t register cnt1;
u_int32_t register cnt_max=0xFF;
u_int32_t register *store_ptr;
u_int32_t register *store_end;
u_int8_t register last_val=0;
store_ptr = ..;
store_end = ..+ SIZ;
disable_intr();
for(;;)
{
for(cnt1=0; cnt1<cnt_max && ((inb(0x379)&0x20) != last_val); cnt1++)
;
*(store_ptr++) = cnt1;
if( store_ptr>=store_end )
break;
last_val ^= 0x20;
}
enable_intr();
(Will start on a new count every signal flank).
/P
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
- Previous message: Leo Bicknell: "Re: Making a FreeBSD DVD"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]