[comp.unix.questions] a puzzle for VME GURUS: multiple mmaps to /dev/vme32d?? devices

rg@msel.unh.edu (Roger Gonzalez) (04/01/91)

This is a rather wierd scenario.  I hope that there are a few VME gurus
out there who can help me on this.

I'm using a BIT3 boardset to connect two VME buses - from my Sun 3/160
to a standalone.  The BIT3 boards let you map a local "window" of memory
(up to 1Mb) to any location in the other bus.

To do this mapping, I valloc a chunk, and mmap on whichever /dev/vme
device gives me the proper width transfer.  The remote address modifier
code is set via a register on the BIT3 board.  Note that the BIT3 board's
local address on the sun is in A32-land, so I use /dev/vme32d?? devices.

This has worked fine for a while, but now I have some Datacube imaging
boards that have memory areas in remote A24-land that need different width
transfers:

   0x80000 bytes as A24 (amc 0x39) width 32  (i.e. /dev/vme32d32)
   0x00200 bytes as A24 (amc 0x39) width 16  (i.e. /dev/vme32d16)
   0x00010 bytes as A24 (amc 0x39) width 8   (i.e. /dev/vme32d8)

All of these are contiguous and start at address 0 (zero) in remote A24-land.

THE QUESTIONS:
Since a 1 Mb BIT3 window located at remote A24 address zero will pick up
all three of the pertinant address areas, can I do something like this:

  p = valloc one meg of memory
  open all 3 devices (/dev/vme32d8, vme32d16, vme32d32)
and
  mmap p to whatever width /dev/vme32d??? device I need for current xfer
  munmap when done xfer

and keep using the same p without freeing it and revallocing?

Is there a better way?

How fast are mmap/munmap calls?

How hard is it to write a memory device driver?  Perhaps if I could
have something like /dev/bit3d8, /dev/bit3d16, /dev/bit3d24 etc. I could
move all the bit3 code into a driver where it belongs.  Unfortunately,
I know nothing about how to write Unix device drivers :-(

Thanks!
-Roger
-- 
"The question of whether a computer can think is no more interesting
 than the question of whether a submarine can swim" - Edsgar W. Dijkstra 
rg@[msel|unhd].unh.edu        |  UNH Marine Systems Engineering Laboratory
r_gonzalez@unhh.bitnet        |  Durham, NH  03824-3525