Re: [Qemu-devel] How to access guest memory from qemu device internal

2014-11-23 Thread Kaiyuan

 -Origin email-
 From: Peter Maydell peter.mayd...@linaro.org
 Sent Time: Friday, November 21, 2014
 To: Kaiyuan kaiyu...@tju.edu.cn
 Cc: Greg Kurz gk...@linux.vnet.ibm.com, qemu-devel qemu-devel@nongnu.org
 Subject: Re: [Qemu-devel] Fw:Re:Re: How to access guest memory from qemu 
 device internal
 
 On 21 November 2014 09:17, Kaiyuan kaiyu...@tju.edu.cn wrote:
  Thanks, Greg. It's useful to me. cpu_physical_memory_read()
  looks like a wrapper of translating guest addr to host addr
  Is there a function that translates guest address to host
  physical address?
 
 No, QEMU never deals with host physical addresses at all.
 In general there are three address types that might be
 in use:
  * guest virtual address
  * guest physical address
  * host virtual address (only relevant if talking to RAM,
  rather than an emulated device)
 
 For devices, the guest within the VM should deal with
 converting a virtual address to a guest physical address,
 and should write guest physical addresses to the device.
 [If you think about real hardware, where the device is
 separate from the CPU, there's no way the device can know
 about guest virtual addresses, which are handled by the
 CPU's built in MMU.]
 
 So the function Greg suggests is the one you want.
 
 -- PMM
Thanks for your explanation about guest physical/virtual address and host 
physical/virtual address, and I think I asked a wrong question. Is there a 
function that translates guest Physical address to host Virtual address so that 
I can access guest space by a host pointer?




Re: [Qemu-devel] How to access guest memory from qemu device internal

2014-11-23 Thread Peter Maydell
On 23 November 2014 at 13:18, Kaiyuan kaiyu...@tju.edu.cn wrote:
 Thanks for your explanation about guest physical/virtual
 address and host physical/virtual address, and I think I
 asked a wrong question. Is there a function that translates
 guest Physical address to host Virtual address so that I
 can access guest space by a host pointer?

You can use cpu_physical_memory_map() and _unmap()
for this kind of thing. (Make sure you unmap afterwards.)

-- PMM



Re: [Qemu-devel] How to access guest memory from qemu device internal

2014-11-23 Thread Kaiyuan

 -Origin email-
 From: Peter Maydell peter.mayd...@linaro.org
 Sent Time: Monday, November 24, 2014
 To: Kaiyuan kaiyu...@tju.edu.cn
 Cc: Greg Kurz gk...@linux.vnet.ibm.com, qemu-devel qemu-devel@nongnu.org
 Subject: Re: [Qemu-devel] How to access guest memory from qemu device internal
 
 On 23 November 2014 at 13:18, Kaiyuan kaiyu...@tju.edu.cn wrote:
  Thanks for your explanation about guest physical/virtual
  address and host physical/virtual address, and I think I
  asked a wrong question. Is there a function that translates
  guest Physical address to host Virtual address so that I
  can access guest space by a host pointer?
 
 You can use cpu_physical_memory_map() and _unmap()
 for this kind of thing. (Make sure you unmap afterwards.)
 
 -- PMM
Thank you very much for your help!Kaiyuan Liang




[Qemu-devel] How to access guest memory from qemu device internal

2014-11-20 Thread Kaiyuan
Hello, all
 
I added a custom device to qemu. This device is attached to sysbus by mmio and 
has an address register in which device should access the guest memory the 
register point to.
I write a bare-metal program that pass an address like 0x1234ABCD to this 
address register. Inside qemu device code I added, if device reads value from 
register and directly accesses this value of 0x1234ABCD, it will access host 
memory 0x1234ABCD rather than guest  memory 0x1234ABCD.
Does qemu provide some functions that allow device to access guest memory 
address?

Thanks,
Kaiyuan Liang





Re: [Qemu-devel] How to access guest memory from qemu device internal

2014-11-20 Thread Greg Kurz
On Thu, 20 Nov 2014 21:25:18 +0800 (GMT+08:00)
Kaiyuan kaiyu...@tju.edu.cn wrote:
 Hello, all
  
 I added a custom device to qemu. This device is attached to sysbus by mmio 
 and has an address register in which device should access the guest memory 
 the register point to.
 I write a bare-metal program that pass an address like 0x1234ABCD to this 
 address register. Inside qemu device code I added, if device reads value from 
 register and directly accesses this value of 0x1234ABCD, it will access host 
 memory 0x1234ABCD rather than guest  memory 0x1234ABCD.
 Does qemu provide some functions that allow device to access guest memory 
 address?
 

Have a look at *_phys* functions in the exec/cpu-common.h QEMU header file 
(cpu_physical_memory_read() for
exemple).

 Thanks,
 Kaiyuan Liang
 

--
G