0.8.2-alt1
[qemu] / qemu-0.8.2-alt-qvm86.patch
1 --- qemu-0.8.2/kqemu.c- 2006-07-22 21:23:34 +0400
2 +++ qemu-0.8.2/kqemu.c  2006-08-23 21:57:27 +0400
3 @@ -59,9 +59,11 @@
4  #endif
5  
6  #ifdef _WIN32
7 -#define KQEMU_DEVICE "\\\\.\\kqemu"
8 +#define KQEMU_DEV "\\\\.\\kqemu"
9 +#define QVM86_DEV "\\\\.\\qvm86"
10  #else
11 -#define KQEMU_DEVICE "/dev/kqemu"
12 +#define KQEMU_DEV "/dev/kqemu"
13 +#define QVM86_DEV "/dev/qvm86"
14  #endif
15  
16  #ifdef _WIN32
17 @@ -154,7 +156,7 @@ static void kqemu_update_cpuid(CPUState 
18         accelerated code */
19  }
20  
21 -int kqemu_init(CPUState *env)
22 +int kqemu_open(CPUState *env, char *dev)
23  {
24      struct kqemu_init init;
25      int ret, version;
26 @@ -166,15 +168,15 @@ int kqemu_init(CPUState *env)
27          return -1;
28  
29  #ifdef _WIN32
30 -    kqemu_fd = CreateFile(KQEMU_DEVICE, GENERIC_WRITE | GENERIC_READ,
31 +    kqemu_fd = CreateFile(dev, GENERIC_WRITE | GENERIC_READ,
32                            FILE_SHARE_READ | FILE_SHARE_WRITE,
33                            NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
34                            NULL);
35  #else
36 -    kqemu_fd = open(KQEMU_DEVICE, O_RDWR);
37 +    kqemu_fd = open(dev, O_RDWR);
38  #endif
39      if (kqemu_fd == KQEMU_INVALID_FD) {
40 -        fprintf(stderr, "Could not open '%s' - QEMU acceleration layer not activated\n", KQEMU_DEVICE);
41 +        fprintf(stderr, "Could not open %s - QEMU acceleration layer not activated\n", dev);
42          return -1;
43      }
44      version = 0;
45 @@ -185,8 +187,8 @@ int kqemu_init(CPUState *env)
46      ioctl(kqemu_fd, KQEMU_GET_VERSION, &version);
47  #endif
48      if (version != KQEMU_VERSION) {
49 -        fprintf(stderr, "Version mismatch between kqemu module and qemu (%08x %08x) - disabling kqemu use\n",
50 -                version, KQEMU_VERSION);
51 +        fprintf(stderr, "Version mismatch between %s and qemu (%08x %08x) - disabling %s use\n",
52 +                dev, version, KQEMU_VERSION, dev);
53          goto fail;
54      }
55  
56 @@ -226,7 +228,7 @@ int kqemu_init(CPUState *env)
57      ret = ioctl(kqemu_fd, KQEMU_INIT, &init);
58  #endif
59      if (ret < 0) {
60 -        fprintf(stderr, "Error %d while initializing QEMU acceleration layer - disabling it for now\n", ret);
61 +        fprintf(stderr, "Error %d while initializing %s acceleration layer - disabling it for now\n", ret, dev);
62      fail:
63          kqemu_closefd(kqemu_fd);
64          kqemu_fd = KQEMU_INVALID_FD;
65 @@ -236,9 +238,22 @@ int kqemu_init(CPUState *env)
66      env->kqemu_enabled = kqemu_allowed;
67      nb_pages_to_flush = 0;
68      nb_ram_pages_to_update = 0;
69 +    fprintf(stderr, "QEMU %s acceleration layer activated\n", dev);
70      return 0;
71  }
72  
73 +int kqemu_init(CPUState *env)
74 +{
75 +       if (kqemu_open(env, KQEMU_DEV) >= 0)
76 +               return 0;
77 +       if (kqemu_open(env, QVM86_DEV) >= 0) {
78 +               /* flags not supported by qvm86 */
79 +               env->cpuid_features &= ~(CPUID_PAT | CPUID_PAE | CPUID_SEP);
80 +               return 0;
81 +       }
82 +       return -1;
83 +}
84 +
85  void kqemu_flush_page(CPUState *env, target_ulong addr)
86  {
87  #if defined(DEBUG)