How to get physical address of GPU memory for DMA?

I am writing an OpenCL program and I wish to transfer data from a frame grabber to a GPU using DMA. How can I get the physical address of an OpenCL buffer on the GPU to do that?

You can only map buffers using the clEnqueueMapBuffer() calls, and then copy data there.

The OpenCL api doesn’t expose anything lower level than that, on purpose. Even enqueuemapbuffer may not actually map anything on the device. And buffers in general may not be physically present on the device outside of kernel execution.