Thread (8 messages) read the whole thread 8 messages, 4 authors, 2004-08-07

Re: New kernel API for ROMs

From: Jon Smirl <hidden>
Date: 2004-08-07 14:59:30

Maximum size of a standard PCI ROM is 128KB.  On non-x86 platforms the
code will pick the length up from the size of the PCI window. That
window has no limit.

On the other hand, map_rom_copy is only called by the device driver for
a board that has minimal PCI decoding. The PCI spec allows the address
decoding for something like the ROM and framebuffer to be shared. A few
vendors have implemented this and the result is that you can't read the
ROM and framebuffer at the same time. This is why you need to make the
copy.  We only know of a couple PCI boards that have implemented this.

This memory is not performance critical and can be swapped, is there a
better way to allocate it?
--- Geert Uytterhoeven <geert@linux-m68k.org> wrote:
On Fri, 6 Aug 2004, Jon Smirl wrote:
quoted
This patch provides a new kernel API for access ROMs from device
drivers. If you're working on a driver that uses the ROM (most
video
quoted
drivers) please give this patch a try and send some feedback/bugs.

pci_map_rom() - map the rom and provide virtual address,
transparently
quoted
return shadow/copy if needed. Normal drivers call this

pci_map_rom_copy() - same as pci_map_rom except the ROM will
copied,
quoted
future reads of ROM will use copy. Hardware with minimal decoding
calls
quoted
use this

pci_unmap_rom() - release the ioremap if there is one

The ROMs also appear in sysfs and you can use hexdump to see them.

If the Radeon ROM is all FFFF. Load a radeon device driver and it
will
quoted
appear. Radeon cards have a bug that loading the driver will fix.
quoted
+unsigned char *
+pci_map_rom_copy(struct pci_dev *dev, size_t *size) {
+	struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
+	unsigned char *rom;
+
+	rom = pci_map_rom(dev, size);
+	if (!rom)
+		return NULL;
+
+	if (res->flags & (PCI_ROM_COPY | PCI_ROM_SHADOW))
+		return rom;
+
+	res->start = (unsigned long)kmalloc(*size, GFP_KERNEL);
What's the maximum size of a PCI ROM? Larger than kmalloc() can
handle?

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 --
geert@linux-m68k.org

In personal conversations with technical people, I call myself a
hacker. But
when I'm talking to journalists I just say "programmer" or something
like that.
							    -- Linus Torvalds


-------------------------------------------------------
This SF.Net email is sponsored by OSTG. Have you noticed the changes
on
Linux.com, ITManagersJournal and NewsForge in the past few weeks?
Now,
one more big change to announce. We are now OSTG- Open Source
Technology
Group. Come see the changes on the new OSTG site. www.ostg.com
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel
=====
Jon Smirl
jonsmirl@yahoo.com


	
		
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - 100MB free storage!
http://promotions.yahoo.com/new_mail 


-------------------------------------------------------
This SF.Net email is sponsored by OSTG. Have you noticed the changes on
Linux.com, ITManagersJournal and NewsForge in the past few weeks? Now,
one more big change to announce. We are now OSTG- Open Source Technology
Group. Come see the changes on the new OSTG site. www.ostg.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help