chris@uunet.uu.net (Chris Brown) (12/16/88)
In v7n33 Steve Dyer poses a question about VME address modifiers. The key issues raised were: > Only when the address is asserted with the VME address modifier > lines set to "data" (hex 29), are the boards on the Q bus accessed. > I don't have the faintest idea how I tell the Sun to generate a "data" > reference rather than a "supervisor" reference when I reference a > device register on the VMEbus. Does anyone have a clue? Sun have a document "Users Guide to the Sun-3 VME bus" by Jim Ludemann which you may find helpful. It includes the following table of the VME address modifier codes used by Sun: Address Modifier (hex) Function ---------------------- -------- 09 A32, User data space 0a A32, User program space 0d A32, Supervisor data space 0e A32, Supervisor program space 29 A16, User data space 2a A16, User program space 2d A16, Supervisor data space 2e A16, Supervisor program space 39 A24, User data space 3a A24, User program space 3d A24, Supervisor data space 3e A24, Supervisor program space There are three things which the address modifier code tells you: (1) Which address space (16, 24, or 32 bit addressing) is this bus cycle accessing? For a Sun device driver, this is determined by the line in the config file: something like this: controller si0 at vme24d16 ? csr 0x200000 priority 2 vector siintr 0x40 ^^ This means you're in the 24-bit addressing space Of course it has to agree with how many address bits the controller actually decodes, AND which address modifiers it listens for. (2) Is the processor in user mode or supervisor mode? In effect this means "is my code outside the kernel or inside it?" (3) Is this cycle fetching an instruction (program space) or data (data space). Obviously, ALL accesses you generate in your C program are in data space. So... if your controller really only responds to address modifier 29 as you say, my understanding is you can ONLY talk to it in a 16 bit address space from outside the kernel. The VME bus specification (Rev C.1 Section 2.2.2) suggests that A16 slave devices should respond to modifiers 29 and 2d. Usually this stuff is incarcerated in a PAL on the controller. (I also vaguely remember that the 680x0 has some funny instructions that let you cheat on the address modifiers. Or maybe it was the 32032?) Hope this helps, Chris Brown, A.I. Vision Research Unit, Sheffield University (chris@aivru.sheffield.ac.uk)