qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] hw: Add VMware's GETHZ command.


From: Jan Kiszka
Subject: Re: [Qemu-devel] [PATCH] hw: Add VMware's GETHZ command.
Date: Fri, 31 Aug 2012 18:22:49 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

On 2012-08-31 17:30, Don Slutz wrote:
> This is known is linux as VMWARE_PORT_CMD_GETHZ.
> 
> Signed-off-by: Don Slutz <address@hidden>
> ---
>  hw/vmport.c |   22 +++++++++++++++++++++-
>  1 files changed, 21 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/vmport.c b/hw/vmport.c
> index a4f52ee..37dbf91 100644
> --- a/hw/vmport.c
> +++ b/hw/vmport.c
> @@ -26,13 +26,15 @@
>  #include "pc.h"
>  #include "kvm.h"
>  #include "qdev.h"
> +#include "qemu-timer.h"

Won't be needed, see below.

>  
>  //#define VMPORT_DEBUG
>  
>  #define VMPORT_CMD_GETVERSION 0x0a
>  #define VMPORT_CMD_GETRAMSIZE 0x14
> +#define VMPORT_CMD_GETHZ      0x2d
>  
> -#define VMPORT_ENTRIES 0x2c
> +#define VMPORT_ENTRIES 0x2e
>  #define VMPORT_MAGIC   0x564D5868
>  
>  typedef struct _VMPortState
> @@ -102,6 +104,23 @@ static uint32_t vmport_cmd_ram_size(void *opaque, 
> uint32_t addr)
>      return ram_size;
>  }
>  
> +static uint32_t vmport_cmd_get_hz(void *opaque, uint32_t addr)
> +{
> +    CPUX86State *env = cpu_single_env;
> +    uint64_t value;
> +
> +    value = (uint64_t)env->tsc_khz * 1000;
> +    if (value) {
> +        /* apic-frequency (bus speed) */
> +        env->regs[R_ECX] = (uint32_t)get_ticks_per_sec();

So this is 1MHz. That happens to be what we return in
get_ticks_per_sec(), but I don't see the logical relation between both.
Better set a constant, none of our APIC emulations will change it.

> +        /* High part of tsc-frequency */
> +        env->regs[R_EBX] = (uint32_t)(value >> 32);
> +        /* Low part of tsc-frequency */
> +        return (uint32_t)value;

EDX is unused by GETHZ? Just wondering if there is spec.

> +    } else
> +        return env->regs[R_EAX];

Use checkpatch.pl, please.

> +}
> +
>  /* vmmouse helpers */
>  void vmmouse_get_data(uint32_t *data)
>  {
> @@ -141,6 +160,7 @@ static int vmport_initfn(ISADevice *dev)
>      /* Register some generic port commands */
>      vmport_register(VMPORT_CMD_GETVERSION, vmport_cmd_get_version, NULL);
>      vmport_register(VMPORT_CMD_GETRAMSIZE, vmport_cmd_ram_size, NULL);
> +    vmport_register(VMPORT_CMD_GETHZ, vmport_cmd_get_hz, NULL);
>      return 0;
>  }
>  
> 

Looks good otherwise.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux



reply via email to

[Prev in Thread] Current Thread [Next in Thread]