Re: MmMapIoSpace in OAL

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: Helge Kruse (Helge.Kruse-nospam_at_gmx.net)
Date: 05/18/04

  • Next message: Ten: "Re: PCI bus enumeration differences between Geode and ARM"
    Date: Tue, 18 May 2004 22:57:02 +0200
    
    

    Hi Dave, thanks for response.

    The big picture:

    I have a WinCE 3.0 x86 platform. I have a processor with memory mapped
    devices connected to one, two or three chip selects. Each chip select is
    mapped to an physical address range.
    The devices available today occupy up to 128 MBytes. I must synchronize the
    chip access per chip select, but I want to allow different threads to access
    different devices. That's why I need a mapping from virtual addresses to
    phyiscal addresses.

    One solution seems to be VirtualAlloc/VirtualCopy. But the allocates the
    range in the address space of the running process. The 32 MByte per process
    limit inhibits this approach.

    Another solution is to modify the function OEMInitPageTable in OEMINIT.ASM.
    I can add entries to PageTable. This costs a lot of assembler code lines.
    Many "PageRange"s must be defined. This can be done with macros, but also
    increases the WinCE image's footprint. This is important in the case, that
    smaller flash devices are used in the target system.
    - I would have wasted address space.
    - The page table entries (not page table directory entries) occupies
    hundreds of kilobytes flash, that is never used.

    What is the best way to handle access to devices with large address space?
    Is there a way to build the memory blocks containing the PageRanges
    dynmically?
    I could construct the contents of such memory blocks. But how do I get the
    buffer __before__ activating page, ie. in OEMInit?

    In my current experiments I defined the PageRange in OEMInitPageTable.
    I need to setup the devices during system startup in the OAL before the
    registry is available. I need to be called from the system. Currently I
    check in every OEMIoControl, if the system has been initialize and call my
    initialization function. This is a bit awkward.
    Is there an OEMIoControl garanteed to be called at first and only once? Is
    there another way to be get called when paging is enabled?

    Kind Regards, Helge


  • Next message: Ten: "Re: PCI bus enumeration differences between Geode and ARM"

    Relevant Pages

    • Re: Superstitious learning in Computer Architecture
      ... It's true that short loops can stay in the cache, ... don't really eat up that much memory bandwidth. ... The DSP chip that I was using more ... well-behaved way to high impedance, and allow, say, 16-way interleaving ...
      (comp.arch.arithmetic)
    • Re: Softkicking on a DKB Cobra/1240
      ... The reason is that the upper end of the chip ... after reset) and then coldcapture might not be what you expect it to be. ... memory, and coolcapture is delayed until after expansion has done its job. ...
      (comp.sys.amiga.programmer)
    • Re: Guidance sought on how memory is used
      ... Their use of PCs may well be playing simple games or letter writing. ... have been stripped of Hard Drives and Memory (of any larger size - ... to install WinXP. ... decided to give the 256mb chip a try and added that to the ...
      (alt.comp.hardware.pc-homebuilt)
    • Re: Chucks plan
      ... ANS Forth, ran it on an iTV chip and got horrid performance. ... to machineForth produced a huge gain over portable ... In P21Forth ANS stacks are in memory like most eForth ...
      (comp.lang.forth)
    • Re: The variable bit cpu
      ... > I don't claim to be an expert on processor architecture, ... > from memory to processor in a second. ... Using space in a cache for metadata means ... Which make the chip incrediable large. ...
      (comp.lang.java.programmer)