~ubuntu-branches/ubuntu/trusty/qemu/trusty

« back to all changes in this revision

Viewing changes to hw/ppc/spapr_vio.c

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2013-10-22 22:47:07 UTC
  • mfrom: (1.8.3) (10.1.42 sid)
  • Revision ID: package-import@ubuntu.com-20131022224707-1lya34fw3k3f24tv
Tags: 1.6.0+dfsg-2ubuntu1
* Merge 1.6.0~rc0+dfsg-2exp from debian experimental.  Remaining changes:
  - debian/control
    * update maintainer
    * remove libiscsi, usb-redir, vde, vnc-jpeg, and libssh2-1-dev
      from build-deps
    * enable rbd
    * add qemu-system and qemu-common B/R to qemu-keymaps
    * add D:udev, R:qemu, R:qemu-common and B:qemu-common to
      qemu-system-common
    * qemu-system-arm, qemu-system-ppc, qemu-system-sparc:
      - add qemu-kvm to Provides
      - add qemu-common, qemu-kvm, kvm to B/R
      - remove openbios-sparc from qemu-system-sparc D
      - drop openbios-ppc and openhackware Depends to Suggests (for now)
    * qemu-system-x86:
      - add qemu-common to Breaks/Replaces.
      - add cpu-checker to Recommends.
    * qemu-user: add B/R:qemu-kvm
    * qemu-kvm:
      - add armhf armel powerpc sparc to Architecture
      - C/R/P: qemu-kvm-spice
    * add qemu-common package
    * drop qemu-slof which is not packaged in ubuntu
  - add qemu-system-common.links for tap ifup/down scripts and OVMF link.
  - qemu-system-x86.links:
    * remove pxe rom links which are in kvm-ipxe
    * add symlink for kvm.1 manpage
  - debian/rules
    * add kvm-spice symlink to qemu-kvm
    * call dh_installmodules for qemu-system-x86
    * update dh_installinit to install upstart script
    * run dh_installman (Closes: #709241) (cherrypicked from 1.5.0+dfsg-2)
  - Add qemu-utils.links for kvm-* symlinks.
  - Add qemu-system-x86.qemu-kvm.upstart and .default
  - Add qemu-system-x86.modprobe to set nesting=1
  - Add qemu-system-common.preinst to add kvm group
  - qemu-system-common.postinst: remove bad group acl if there, then have
    udev relabel /dev/kvm.
  - New linaro patches from qemu-linaro rebasing branch
  - Dropped patches:
    * xen-simplify-xen_enabled.patch
    * sparc-linux-user-fix-missing-symbols-in-.rel-.rela.plt-sections.patch
    * main_loop-do-not-set-nonblocking-if-xen_enabled.patch
    * xen_machine_pv-do-not-create-a-dummy-CPU-in-machine-.patch
    * virtio-rng-fix-crash
  - Kept patches:
    * expose_vms_qemu64cpu.patch - updated
    * linaro arm patches from qemu-linaro rebasing branch
  - New patches:
    * fix-pci-add: change CONFIG variable in ifdef to make sure that
      pci_add is defined.
* Add linaro patches
* Add experimental mach-virt patches for arm virtualization.
* qemu-system-common.install: add debian/tmp/usr/lib to install the
  qemu-bridge-helper

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
#include "hw/ppc/spapr_vio.h"
35
35
#include "hw/ppc/xics.h"
36
36
 
37
 
#ifdef CONFIG_FDT
38
37
#include <libfdt.h>
39
 
#endif /* CONFIG_FDT */
40
38
 
41
39
/* #define DEBUG_SPAPR */
42
40
 
43
41
#ifdef DEBUG_SPAPR
44
 
#define dprintf(fmt, ...) \
 
42
#define DPRINTF(fmt, ...) \
45
43
    do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
46
44
#else
47
 
#define dprintf(fmt, ...) \
 
45
#define DPRINTF(fmt, ...) \
48
46
    do { } while (0)
49
47
#endif
50
48
 
94
92
    return NULL;
95
93
}
96
94
 
97
 
#ifdef CONFIG_FDT
98
95
static int vio_make_devnode(VIOsPAPRDevice *dev,
99
96
                            void *fdt)
100
97
{
145
142
        }
146
143
    }
147
144
 
148
 
    ret = spapr_tcet_dma_dt(fdt, node_off, "ibm,my-dma-window", dev->dma);
 
145
    ret = spapr_tcet_dma_dt(fdt, node_off, "ibm,my-dma-window", dev->tcet);
149
146
    if (ret < 0) {
150
147
        return ret;
151
148
    }
159
156
 
160
157
    return node_off;
161
158
}
162
 
#endif /* CONFIG_FDT */
163
159
 
164
160
/*
165
161
 * CRQ handling
205
201
    dev->crq.qsize = queue_len;
206
202
    dev->crq.qnext = 0;
207
203
 
208
 
    dprintf("CRQ for dev 0x" TARGET_FMT_lx " registered at 0x"
 
204
    DPRINTF("CRQ for dev 0x" TARGET_FMT_lx " registered at 0x"
209
205
            TARGET_FMT_lx "/0x" TARGET_FMT_lx "\n",
210
206
            reg, queue_addr, queue_len);
211
207
    return H_SUCCESS;
217
213
    dev->crq.qsize = 0;
218
214
    dev->crq.qnext = 0;
219
215
 
220
 
    dprintf("CRQ for dev 0x%" PRIx32 " freed\n", dev->reg);
 
216
    DPRINTF("CRQ for dev 0x%" PRIx32 " freed\n", dev->reg);
221
217
 
222
218
    return H_SUCCESS;
223
219
}
319
315
 
320
316
static void spapr_vio_quiesce_one(VIOsPAPRDevice *dev)
321
317
{
322
 
    if (dev->dma) {
323
 
        spapr_tce_reset(dev->dma);
 
318
    if (dev->tcet) {
 
319
        device_reset(DEVICE(dev->tcet));
324
320
    }
325
321
    free_crq(dev);
326
322
}
327
323
 
328
 
static void rtas_set_tce_bypass(sPAPREnvironment *spapr, uint32_t token,
 
324
static void rtas_set_tce_bypass(PowerPCCPU *cpu, sPAPREnvironment *spapr,
 
325
                                uint32_t token,
329
326
                                uint32_t nargs, target_ulong args,
330
327
                                uint32_t nret, target_ulong rets)
331
328
{
345
342
        return;
346
343
    }
347
344
 
348
 
    if (!dev->dma) {
 
345
    if (!dev->tcet) {
349
346
        rtas_st(rets, 0, -3);
350
347
        return;
351
348
    }
352
349
 
353
 
    spapr_tce_set_bypass(dev->dma, !!enable);
 
350
    spapr_tce_set_bypass(dev->tcet, !!enable);
354
351
 
355
352
    rtas_st(rets, 0, 0);
356
353
}
357
354
 
358
 
static void rtas_quiesce(sPAPREnvironment *spapr, uint32_t token,
 
355
static void rtas_quiesce(PowerPCCPU *cpu, sPAPREnvironment *spapr,
 
356
                         uint32_t token,
359
357
                         uint32_t nargs, target_ulong args,
360
358
                         uint32_t nret, target_ulong rets)
361
359
{
457
455
 
458
456
    if (pc->rtce_window_size) {
459
457
        uint32_t liobn = SPAPR_VIO_BASE_LIOBN | dev->reg;
460
 
        dev->dma = spapr_tce_new_dma_context(liobn, pc->rtce_window_size);
 
458
        dev->tcet = spapr_tce_new_table(qdev, liobn, pc->rtce_window_size);
 
459
        address_space_init(&dev->as, spapr_tce_get_iommu(dev->tcet), qdev->id);
461
460
    }
462
461
 
463
462
    return pc->init(dev);
543
542
    .class_init    = spapr_vio_bridge_class_init,
544
543
};
545
544
 
 
545
const VMStateDescription vmstate_spapr_vio = {
 
546
    .name = "spapr_vio",
 
547
    .version_id = 1,
 
548
    .minimum_version_id = 1,
 
549
    .minimum_version_id_old = 1,
 
550
    .fields      = (VMStateField []) {
 
551
        /* Sanity check */
 
552
        VMSTATE_UINT32_EQUAL(reg, VIOsPAPRDevice),
 
553
        VMSTATE_UINT32_EQUAL(irq, VIOsPAPRDevice),
 
554
 
 
555
        /* General VIO device state */
 
556
        VMSTATE_UINTTL(signal_state, VIOsPAPRDevice),
 
557
        VMSTATE_UINT64(crq.qladdr, VIOsPAPRDevice),
 
558
        VMSTATE_UINT32(crq.qsize, VIOsPAPRDevice),
 
559
        VMSTATE_UINT32(crq.qnext, VIOsPAPRDevice),
 
560
 
 
561
        VMSTATE_END_OF_LIST()
 
562
    },
 
563
};
 
564
 
546
565
static void vio_spapr_device_class_init(ObjectClass *klass, void *data)
547
566
{
548
567
    DeviceClass *k = DEVICE_CLASS(klass);
570
589
 
571
590
type_init(spapr_vio_register_types)
572
591
 
573
 
#ifdef CONFIG_FDT
574
592
static int compare_reg(const void *p1, const void *p2)
575
593
{
576
594
    VIOsPAPRDevice const *dev1, *dev2;
655
673
 
656
674
    return ret;
657
675
}
658
 
#endif /* CONFIG_FDT */