This is not, perhaps, the best forum for this. But, as I am running out
of resources, here goes:

I am writing a device driver for a DPS card (not our own manufacture). Most
everything seems to be going as I would expect. With one exception.

I am mapping the PCI memory (256 bytes of registers in this case) into user
address space with the kernel's remap_page_range(). I have discovered that
this works on some computers and not on others. Upon investigation, I see
that the memory I want to map is not always placed on a page boundary by the
BIOS. On machines where the mapping works, the BIOS has placed this memory
at the top of a page boundary (e.g., efeff000). On machines where this does
not work, the memory is placed inside a page (e.g., fefefc00). Pages in this
sense are a Linux kernel abstraction. The BIOS knows nothing of their size
or alignment. So, the BIOS will remain free to put the card's memory
wherever it sees fit.

The problem (as I see it) is that in the 2.4.x kernels, remap_page_range()
maps the memory asked for - starting at the beginning of the page the memory
occurs on. Fair enough. But I see no mechanism to add back that page offset
to a mmap()'s pointer.

By manipulating the mmap pointer, I can 'deal' with this in a user program.
But this is absolutely not the way it should be. A user program does not
know about how the card's memory is relative to a page boundary.

And, the device driver does not return the mapped address directly. The
mmap() call has a layer that actually returns the memory pointer.

I have looked through lots of discussion lists and docs, and none describe
how to deal with this. 

Anyone know what I am going on about?

-- 
+����������������������������+�������������������������������+
� Roger Oberholtzer          �   E-mail: [EMAIL PROTECTED]        �
� OPQ Systems AB             �      WWW: http://www.opq.se/  �
� Erik Dahlbergsgatan 41-43  �    Phone: Int + 46 8   314223 �
� 115 34 Stockholm           �   Mobile: Int + 46 733 621657 �
� Sweden                     �      Fax: Int + 46 8   302602 �
+����������������������������+�������������������������������+
_______________________________________________
Linux-users mailing list
[EMAIL PROTECTED]
Unsubscribe/Suspend/Etc -> http://www.linux-sxs.org/mailman/listinfo/linux-users

Reply via email to