Mail Archives: djgpp/1999/07/16/17:55:27
From: | wanis AT my-deja DOT com
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | GPF due to _farpokel
|
Date: | Fri, 16 Jul 1999 21:08:15 GMT
|
Organization: | Deja.com - Share what you know. Learn what you don't.
|
Lines: | 68
|
Message-ID: | <7mo6vl$r5e$1@nnrp1.deja.com>
|
NNTP-Posting-Host: | 206.19.99.105
|
X-Article-Creation-Date: | Fri Jul 16 20:45:25 1999 GMT
|
X-Http-User-Agent: | Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)
|
X-Http-Proxy: | 1.1 x42.deja.com:80 (Squid/1.1.22) for client 206.19.99.105
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
I'm trying to POKE some memory on a PCI card, and
the program keeps crashing with SIGSEGV
indicating a general protection fault. Here's
what I do (in a sort of pseudocode)...
cardbasemem = PCIbios_getbasemem();
void writetocardmem ( unsigned long address,
unsigned long data )
{
_farpokel ( _dos_ds, cardbasemem + address,
data );
}
/* 'address' is usually 0x00400004 */
This crashed inside the _farpokel(). The card's
base memory address turned out to be 0xFF000000,
which is an awfully large offset. Because of the
large offset, I next tried to create a descriptor
for this memory address (that's right, I actually
read the FAQ!). So, now I had the following
code...
cardbasemem = PCIbios_getbasemem();
...Get create LDT for cardbasemem,
Memory size is 0x00800000
get selector for LDT
This code comes straight from the FAQ...
cardbasemem = mi.baseaddress;
/* cardbasemem still turns out to be 0xFF000000 */
void writetocardmem ( unsigned long address,
unsigned long data )
{
_farpokel ( selector, cardbasemem + address,
data );
}
Same problem. The really strange part is that
this same piece of code works fine on another
computer with a different type of PCI card.
However, that other computer and card return a
memory base address of 0x00A00000, so I'm
suspecting a problem with the memory addr.
The results of SYMIFY tell me...
1) The GPF is occurring inside _farpokel()
(besides which, when I run the code with
everything but that _farpokel() in there, it
works just fine...)
2) The stack values seem to be sane (although
ESP and EBP always have the precise same value)...
3) The callback buffer is only about 5 deep
(i.e. it doesn't look like I've blown the stack)
4) My descriptor was created properly and in the
FS register at the time of the GPF
I also know that...
5) The base address I'm reading is correct
(other PCI config programs are returning the same
result)
Can anybody tell me what's going wrong???
-- Paul
Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.
- Raw text -