I’m trying to understand the BoundaryAddressMultiple argument in the MmAllocateContiguousMemorySpecifyCache function call. I was thinking it meant an alignment multiple but reading it closer does not seem to suggest this. Is there any way to ensure alignment besides allocating additional memory and aligning it myself?
When would BoundaryAddressMultiple actually be useful? The chip I’m using only remaps the upper sixteen bits so I need the starting address to start on a 64K boundary. Is there any method besides wasting 64K when I allocate my memory?
xxxxx@yahoo.com wrote:
I’m trying to understand the BoundaryAddressMultiple argument in the MmAllocateContiguousMemorySpecifyCache function call. I was thinking it meant an alignment multiple but reading it closer does not seem to suggest this. Is there any way to ensure alignment besides allocating additional memory and aligning it myself?
When would BoundaryAddressMultiple actually be useful? The chip I’m using only remaps the upper sixteen bits so I need the starting address to start on a 64K boundary. Is there any method besides wasting 64K when I allocate my memory?
As the documentation says, BoundaryAddressMultiple is really only useful
to work around broken hardware. For example, say the hardware assumes
that all transfers have the same value in the upper 16 bits. If your
buffer were only 8k bytes, you wouldn’t necessarily need the buffer to
start on a 64k boundary, but you’d want to make sure that the buffer did
not CROSS a 64k boundary. In that case, you’d set BAM to 0x00010000.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.
Thanks. It just seemed like an odd hardware limitation. I wanted to make sure it wasn’t written incorrectly or read incorrectly by myself.