xref: /qemu/docs/qdev-device-use.txt (revision 6f9f6308)
196560cb3SMarkus Armbruster= How to convert to -device & friends =
296560cb3SMarkus Armbruster
396560cb3SMarkus Armbruster=== Specifying Bus and Address on Bus ===
496560cb3SMarkus Armbruster
596560cb3SMarkus ArmbrusterIn qdev, each device has a parent bus.  Some devices provide one or
696560cb3SMarkus Armbrustermore buses for children.  You can specify a device's parent bus with
796560cb3SMarkus Armbruster-device parameter bus.
896560cb3SMarkus Armbruster
996560cb3SMarkus ArmbrusterA device typically has a device address on its parent bus.  For buses
1096560cb3SMarkus Armbrusterwhere this address can be configured, devices provide a bus-specific
1123bf93b2SMarkus Armbrusterproperty.  Examples:
1296560cb3SMarkus Armbruster
1396560cb3SMarkus Armbruster    bus         property name       value format
1496560cb3SMarkus Armbruster    PCI         addr                %x.%x    (dev.fn, .fn optional)
1596560cb3SMarkus Armbruster    I2C         address             %u
1696560cb3SMarkus Armbruster    SCSI        scsi-id             %u
1723bf93b2SMarkus Armbruster    IDE         unit                %u
1823bf93b2SMarkus Armbruster    HDA         cad                 %u
1923bf93b2SMarkus Armbruster    virtio-serial-bus  nr           %u
2023bf93b2SMarkus Armbruster    ccid-bus    slot                %u
2123bf93b2SMarkus Armbruster    USB         port                %d(.%d)*    (port.port...)
2296560cb3SMarkus Armbruster
2396560cb3SMarkus ArmbrusterExample: device i440FX-pcihost is on the root bus, and provides a PCI
2496560cb3SMarkus Armbrusterbus named pci.0.  To put a FOO device into its slot 4, use -device
2596560cb3SMarkus ArmbrusterFOO,bus=/i440FX-pcihost/pci.0,addr=4.  The abbreviated form bus=pci.0
2696560cb3SMarkus Armbrusteralso works as long as the bus name is unique.
2796560cb3SMarkus Armbruster
2896560cb3SMarkus Armbruster=== Block Devices ===
2996560cb3SMarkus Armbruster
3096560cb3SMarkus ArmbrusterA QEMU block device (drive) has a host and a guest part.
3196560cb3SMarkus Armbruster
3296560cb3SMarkus ArmbrusterIn the general case, the guest device is connected to a controller
3396560cb3SMarkus Armbrusterdevice.  For instance, the IDE controller provides two IDE buses, each
341c9f3b88SMarkus Armbrusterof which can have up to two devices, and each device is a guest part,
351c9f3b88SMarkus Armbrusterand is connected to a host part.
3696560cb3SMarkus Armbruster
3796560cb3SMarkus ArmbrusterExcept we sometimes lump controller, bus(es) and drive device(s) all
3896560cb3SMarkus Armbrustertogether into a single device.  For instance, the ISA floppy
3996560cb3SMarkus Armbrustercontroller is connected to up to two host drives.
4096560cb3SMarkus Armbruster
4196560cb3SMarkus ArmbrusterThe old ways to define block devices define host and guest part
4296560cb3SMarkus Armbrustertogether.  Sometimes, they can even define a controller device in
4396560cb3SMarkus Armbrusteraddition to the block device.
4496560cb3SMarkus Armbruster
4596560cb3SMarkus ArmbrusterThe new way keeps the parts separate: you create the host part with
4696560cb3SMarkus Armbruster-drive, and guest device(s) with -device.
4796560cb3SMarkus Armbruster
4896560cb3SMarkus ArmbrusterThe various old ways to define drives all boil down to the common form
4996560cb3SMarkus Armbruster
5023bf93b2SMarkus Armbruster    -drive if=TYPE,bus=BUS,unit=UNIT,OPTS...
5196560cb3SMarkus Armbruster
5296560cb3SMarkus ArmbrusterTYPE, BUS and UNIT identify the controller device, which of its buses
5396560cb3SMarkus Armbrusterto use, and the drive's address on that bus.  Details depend on TYPE.
5423bf93b2SMarkus Armbruster
5523bf93b2SMarkus ArmbrusterInstead of bus=BUS,unit=UNIT, you can also say index=IDX.
5696560cb3SMarkus Armbruster
5796560cb3SMarkus ArmbrusterIn the new way, this becomes something like
5896560cb3SMarkus Armbruster
5996560cb3SMarkus Armbruster   -drive if=none,id=DRIVE-ID,HOST-OPTS...
6096560cb3SMarkus Armbruster   -device DEVNAME,drive=DRIVE-ID,DEV-OPTS...
6196560cb3SMarkus Armbruster
6223bf93b2SMarkus ArmbrusterThe old OPTS get split into HOST-OPTS and DEV-OPTS as follows:
6323bf93b2SMarkus Armbruster
6423bf93b2SMarkus Armbruster* file, format, snapshot, cache, aio, readonly, rerror, werror go into
6523bf93b2SMarkus Armbruster  HOST-OPTS.
6623bf93b2SMarkus Armbruster
6723bf93b2SMarkus Armbruster* cyls, head, secs and trans go into HOST-OPTS.  Future work: they
6823bf93b2SMarkus Armbruster  should go into DEV-OPTS instead.
6923bf93b2SMarkus Armbruster
7023bf93b2SMarkus Armbruster* serial goes into DEV-OPTS, for devices supporting serial numbers.
7123bf93b2SMarkus Armbruster  For other devices, it goes nowhere.
7223bf93b2SMarkus Armbruster
7323bf93b2SMarkus Armbruster* media is special.  In the old way, it selects disk vs. CD-ROM with
7423bf93b2SMarkus Armbruster  if=ide, if=scsi and if=xen.  The new way uses DEVNAME for that.
7523bf93b2SMarkus Armbruster  Additionally, readonly=on goes into HOST-OPTS.
7623bf93b2SMarkus Armbruster
7723bf93b2SMarkus Armbruster* addr is special, see if=virtio below.
7823bf93b2SMarkus Armbruster
7923bf93b2SMarkus ArmbrusterThe -device argument differs in detail for each type of drive:
8096560cb3SMarkus Armbruster
8196560cb3SMarkus Armbruster* if=ide
8296560cb3SMarkus Armbruster
8323bf93b2SMarkus Armbruster  -device DEVNAME,drive=DRIVE-ID,bus=IDE-BUS,unit=UNIT
8496560cb3SMarkus Armbruster
8523bf93b2SMarkus Armbruster  where DEVNAME is either ide-hd or ide-cd, IDE-BUS identifies an IDE
8623bf93b2SMarkus Armbruster  bus, normally either ide.0 or ide.1, and UNIT is either 0 or 1.
8796560cb3SMarkus Armbruster
8896560cb3SMarkus Armbruster* if=scsi
8996560cb3SMarkus Armbruster
9096560cb3SMarkus Armbruster  The old way implicitly creates SCSI controllers as needed.  The new
9196560cb3SMarkus Armbruster  way makes that explicit:
9296560cb3SMarkus Armbruster
9396560cb3SMarkus Armbruster  -device lsi53c895a,id=ID
9496560cb3SMarkus Armbruster
9596560cb3SMarkus Armbruster  As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to
9696560cb3SMarkus Armbruster  control the PCI device address.
9796560cb3SMarkus Armbruster
9823bf93b2SMarkus Armbruster  This SCSI controller provides a single SCSI bus, named ID.0.  Put a
9923bf93b2SMarkus Armbruster  disk on it:
10096560cb3SMarkus Armbruster
10123bf93b2SMarkus Armbruster  -device DEVNAME,drive=DRIVE-ID,bus=ID.0,scsi-id=UNIT
102a5c062edSStefan Hajnoczi
10323bf93b2SMarkus Armbruster  where DEVNAME is either scsi-hd, scsi-cd or scsi-generic.
10496560cb3SMarkus Armbruster
10596560cb3SMarkus Armbruster* if=floppy
10696560cb3SMarkus Armbruster
1074a27a638SMarkus Armbruster  -device floppy,unit=UNIT,drive=DRIVE-ID
10896560cb3SMarkus Armbruster
1094a27a638SMarkus Armbruster  Without any -device floppy,... you get an empty unit 0 and no unit
1104a27a638SMarkus Armbruster  1.  You can use -nodefaults to suppress the default unit 0, see
11123bf93b2SMarkus Armbruster  "Default Devices".
11296560cb3SMarkus Armbruster
11396560cb3SMarkus Armbruster* if=virtio
11496560cb3SMarkus Armbruster
11565d6dcbdSStefan Hajnoczi  -device virtio-blk-pci,drive=DRIVE-ID,class=C,vectors=V,ioeventfd=IOEVENTFD
11696560cb3SMarkus Armbruster
11796560cb3SMarkus Armbruster  This lets you control PCI device class and MSI-X vectors.
11896560cb3SMarkus Armbruster
11923bf93b2SMarkus Armbruster  IOEVENTFD controls whether or not ioeventfd is used for virtqueue
12023bf93b2SMarkus Armbruster  notify.  It can be set to on (default) or off.
12165d6dcbdSStefan Hajnoczi
12296560cb3SMarkus Armbruster  As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to
12323bf93b2SMarkus Armbruster  control the PCI device address.  This replaces option addr available
12423bf93b2SMarkus Armbruster  with -drive if=virtio.
12596560cb3SMarkus Armbruster
12696560cb3SMarkus Armbruster* if=pflash, if=mtd, if=sd, if=xen are not yet available with -device
12796560cb3SMarkus Armbruster
128923fbd4cSMarkus ArmbrusterFor USB devices, the old way was actually different:
129923fbd4cSMarkus Armbruster
130923fbd4cSMarkus Armbruster    -usbdevice disk:format=FMT:FILENAME
131923fbd4cSMarkus Armbruster
132923fbd4cSMarkus Armbruster"Was" because "disk:" is gone since v2.12.0.
133923fbd4cSMarkus Armbruster
134923fbd4cSMarkus ArmbrusterThe old way provided much less control than -drive's OPTS...  The new
135923fbd4cSMarkus Armbrusterway fixes that:
13696560cb3SMarkus Armbruster
137a5c062edSStefan Hajnoczi    -device usb-storage,drive=DRIVE-ID,removable=RMB
138a5c062edSStefan Hajnoczi
13923bf93b2SMarkus ArmbrusterThe removable parameter gives control over the SCSI INQUIRY removable
14023bf93b2SMarkus Armbruster(RMB) bit.  USB thumbdrives usually set removable=on, while USB hard
14123bf93b2SMarkus Armbrusterdisks set removable=off.
14223bf93b2SMarkus Armbruster
14323bf93b2SMarkus ArmbrusterBug: usb-storage pretends to be a block device, but it's really a SCSI
14423bf93b2SMarkus Armbrustercontroller that can serve only a single device, which it creates
14523bf93b2SMarkus Armbrusterautomatically.  The automatic creation guesses what kind of guest part
14623bf93b2SMarkus Armbrusterto create from the host part, like -drive if=scsi.  Host and guest
14723bf93b2SMarkus Armbrusterpart are not cleanly separated.
14896560cb3SMarkus Armbruster
14996560cb3SMarkus Armbruster=== Character Devices ===
15096560cb3SMarkus Armbruster
15196560cb3SMarkus ArmbrusterA QEMU character device has a host and a guest part.
15296560cb3SMarkus Armbruster
15396560cb3SMarkus ArmbrusterThe old ways to define character devices define host and guest part
15496560cb3SMarkus Armbrustertogether.
15596560cb3SMarkus Armbruster
15696560cb3SMarkus ArmbrusterThe new way keeps the parts separate: you create the host part with
15796560cb3SMarkus Armbruster-chardev, and the guest device with -device.
15896560cb3SMarkus Armbruster
15996560cb3SMarkus ArmbrusterThe various old ways to define a character device are all of the
16096560cb3SMarkus Armbrustergeneral form
16196560cb3SMarkus Armbruster
16296560cb3SMarkus Armbruster    -FOO FOO-OPTS...,LEGACY-CHARDEV
16396560cb3SMarkus Armbruster
16496560cb3SMarkus Armbrusterwhere FOO-OPTS... is specific to -FOO, and the host part
16596560cb3SMarkus ArmbrusterLEGACY-CHARDEV is the same everywhere.
16696560cb3SMarkus Armbruster
16796560cb3SMarkus ArmbrusterIn the new way, this becomes
16896560cb3SMarkus Armbruster
16996560cb3SMarkus Armbruster    -chardev HOST-OPTS...,id=CHR-ID
17096560cb3SMarkus Armbruster    -device DEVNAME,chardev=CHR-ID,DEV-OPTS...
17196560cb3SMarkus Armbruster
17296560cb3SMarkus ArmbrusterThe appropriate DEVNAME depends on the machine type.  For type "pc":
17396560cb3SMarkus Armbruster
17496560cb3SMarkus Armbruster* -serial becomes -device isa-serial,iobase=IOADDR,irq=IRQ,index=IDX
17596560cb3SMarkus Armbruster
17696560cb3SMarkus Armbruster  This lets you control I/O ports and IRQs.
17796560cb3SMarkus Armbruster
17896560cb3SMarkus Armbruster* -parallel becomes -device isa-parallel,iobase=IOADDR,irq=IRQ,index=IDX
17996560cb3SMarkus Armbruster
18096560cb3SMarkus Armbruster  This lets you control I/O ports and IRQs.
18196560cb3SMarkus Armbruster
18296560cb3SMarkus Armbruster* -usbdevice braille doesn't support LEGACY-CHARDEV syntax.  It always
18396560cb3SMarkus Armbruster  uses "braille".  With -device, this useful default is gone, so you
18496560cb3SMarkus Armbruster  have to use something like
18596560cb3SMarkus Armbruster
186a92ff8c1SThomas Huth  -device usb-braille,chardev=braille -chardev braille,id=braille
18796560cb3SMarkus Armbruster
188923fbd4cSMarkus Armbruster* -usbdevice serial::chardev is gone since v2.12.0.  It became
189923fbd4cSMarkus Armbruster  -device usb-serial,chardev=dev.
190923fbd4cSMarkus Armbruster
19196560cb3SMarkus ArmbrusterLEGACY-CHARDEV translates to -chardev HOST-OPTS... as follows:
19296560cb3SMarkus Armbruster
19396560cb3SMarkus Armbruster* null becomes -chardev null
19496560cb3SMarkus Armbruster
195378af961SAnatoli Huseu1* pty, msmouse, wctablet, braille, stdio likewise
19696560cb3SMarkus Armbruster
19796560cb3SMarkus Armbruster* vc:WIDTHxHEIGHT becomes -chardev vc,width=WIDTH,height=HEIGHT
19896560cb3SMarkus Armbruster
19996560cb3SMarkus Armbruster* vc:<COLS>Cx<ROWS>C becomes -chardev vc,cols=<COLS>,rows=<ROWS>
20096560cb3SMarkus Armbruster
20196560cb3SMarkus Armbruster* con: becomes -chardev console
20296560cb3SMarkus Armbruster
2036e93a44bSMarkus Armbruster* COM<NUM> becomes -chardev serial,path=COM<NUM>
20496560cb3SMarkus Armbruster
20596560cb3SMarkus Armbruster* file:FNAME becomes -chardev file,path=FNAME
20696560cb3SMarkus Armbruster
20796560cb3SMarkus Armbruster* pipe:FNAME becomes -chardev pipe,path=FNAME
20896560cb3SMarkus Armbruster
20996560cb3SMarkus Armbruster* tcp:HOST:PORT,OPTS... becomes -chardev socket,host=HOST,port=PORT,OPTS...
21096560cb3SMarkus Armbruster
21196560cb3SMarkus Armbruster* telnet:HOST:PORT,OPTS... becomes
21296560cb3SMarkus Armbruster  -chardev socket,host=HOST,port=PORT,OPTS...,telnet=on
21396560cb3SMarkus Armbruster
21496560cb3SMarkus Armbruster* udp:HOST:PORT@LOCALADDR:LOCALPORT becomes
21596560cb3SMarkus Armbruster  -chardev udp,host=HOST,port=PORT,localaddr=LOCALADDR,localport=LOCALPORT
21696560cb3SMarkus Armbruster
21796560cb3SMarkus Armbruster* unix:FNAME becomes -chardev socket,path=FNAME
21896560cb3SMarkus Armbruster
2196f9f6308SPaolo Bonzini* /dev/parportN becomes -chardev parallel,file=/dev/parportN
22096560cb3SMarkus Armbruster
22196560cb3SMarkus Armbruster* /dev/ppiN likewise
22296560cb3SMarkus Armbruster
2236f9f6308SPaolo Bonzini* Any other /dev/FNAME becomes -chardev serial,path=/dev/FNAME
22496560cb3SMarkus Armbruster
22596560cb3SMarkus Armbruster* mon:LEGACY-CHARDEV is special: it multiplexes the monitor onto the
22696560cb3SMarkus Armbruster  character device defined by LEGACY-CHARDEV.  -chardev provides more
22796560cb3SMarkus Armbruster  general multiplexing instead: you can connect up to four users to a
22896560cb3SMarkus Armbruster  single host part.  You need to pass mux=on to -chardev to enable
22996560cb3SMarkus Armbruster  switching the input focus.
23096560cb3SMarkus Armbruster
23196560cb3SMarkus ArmbrusterQEMU uses LEGACY-CHARDEV syntax not just to set up guest devices, but
23296560cb3SMarkus Armbrusteralso in various other places such as -monitor or -net
23396560cb3SMarkus Armbrusteruser,guestfwd=...  You can use chardev:CHR-ID in place of
23496560cb3SMarkus ArmbrusterLEGACY-CHARDEV to refer to a host part defined with -chardev.
23596560cb3SMarkus Armbruster
23696560cb3SMarkus Armbruster=== Network Devices ===
23796560cb3SMarkus Armbruster
23823bf93b2SMarkus ArmbrusterHost and guest part of network devices have always been separate.
23996560cb3SMarkus Armbruster
24023bf93b2SMarkus ArmbrusterThe old way to define the guest part looks like this:
24196560cb3SMarkus Armbruster
24223bf93b2SMarkus Armbruster    -net nic,netdev=NET-ID,macaddr=MACADDR,model=MODEL,name=ID,addr=STR,vectors=V
24396560cb3SMarkus Armbruster
244923fbd4cSMarkus ArmbrusterExcept for USB it looked like this:
245923fbd4cSMarkus Armbruster
246923fbd4cSMarkus Armbruster    -usbdevice net:netdev=NET-ID,macaddr=MACADDR,name=ID
247923fbd4cSMarkus Armbruster
248923fbd4cSMarkus Armbruster"Looked" because "net:" is gone since v2.12.0.
249923fbd4cSMarkus Armbruster
25023bf93b2SMarkus ArmbrusterThe new way is -device:
25196560cb3SMarkus Armbruster
25296560cb3SMarkus Armbruster    -device DEVNAME,netdev=NET-ID,mac=MACADDR,DEV-OPTS...
25396560cb3SMarkus Armbruster
25496560cb3SMarkus ArmbrusterDEVNAME equals MODEL, except for virtio you have to name the virtio
25596560cb3SMarkus Armbrusterdevice appropriate for the bus (virtio-net-pci for PCI), and for USB
25623bf93b2SMarkus Armbrusteryou have to use usb-net.
25796560cb3SMarkus Armbruster
25896560cb3SMarkus ArmbrusterThe old name=ID parameter becomes the usual id=ID with -device.
25996560cb3SMarkus Armbruster
26096560cb3SMarkus ArmbrusterFor PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control the PCI
26196560cb3SMarkus Armbrusterdevice address, as usual.  The old -net nic provides parameter addr
26223bf93b2SMarkus Armbrusterfor that, which is silently ignored when the NIC is not a PCI device.
26396560cb3SMarkus Armbruster
26465d6dcbdSStefan HajnocziFor virtio-net-pci, you can control whether or not ioeventfd is used for
26565d6dcbdSStefan Hajnoczivirtqueue notify by setting ioeventfd= to on or off (default).
26665d6dcbdSStefan Hajnoczi
26796560cb3SMarkus Armbruster-net nic accepts vectors=V for all models, but it's silently ignored
26896560cb3SMarkus Armbrusterexcept for virtio-net-pci (model=virtio).  With -device, only devices
26996560cb3SMarkus Armbrusterthat support it accept it.
27096560cb3SMarkus Armbruster
27196560cb3SMarkus ArmbrusterNot all devices are available with -device at this time.  All PCI
27296560cb3SMarkus Armbrusterdevices and ne2k_isa are.
27396560cb3SMarkus Armbruster
27496560cb3SMarkus ArmbrusterSome PCI devices aren't available with -net nic, e.g. i82558a.
27596560cb3SMarkus Armbruster
27696560cb3SMarkus Armbruster=== Graphics Devices ===
27796560cb3SMarkus Armbruster
27896560cb3SMarkus ArmbrusterHost and guest part of graphics devices have always been separate.
27996560cb3SMarkus Armbruster
28023bf93b2SMarkus ArmbrusterThe old way to define the guest graphics device is -vga VGA.  Not all
28123bf93b2SMarkus Armbrustermachines support all -vga options.
28296560cb3SMarkus Armbruster
28323bf93b2SMarkus ArmbrusterThe new way is -device.  The mapping from -vga argument to -device
28423bf93b2SMarkus Armbrusterdepends on the machine type.  For machine "pc", it's:
28596560cb3SMarkus Armbruster
28696560cb3SMarkus Armbruster    std         -device VGA
28796560cb3SMarkus Armbruster    cirrus      -device cirrus-vga
28896560cb3SMarkus Armbruster    vmware      -device vmware-svga
28923bf93b2SMarkus Armbruster    qxl         -device qxl-vga
29023bf93b2SMarkus Armbruster    none        -nodefaults
29123bf93b2SMarkus Armbruster                disables more than just VGA, see "Default Devices"
29296560cb3SMarkus Armbruster
29396560cb3SMarkus ArmbrusterAs for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control
29496560cb3SMarkus Armbrusterthe PCI device address.
29596560cb3SMarkus Armbruster
29696560cb3SMarkus Armbruster-device VGA supports properties bios-offset and bios-size, but they
29796560cb3SMarkus Armbrusteraren't used with machine type "pc".
29896560cb3SMarkus Armbruster
29923bf93b2SMarkus ArmbrusterFor machine "isapc", it's
30096560cb3SMarkus Armbruster
30123bf93b2SMarkus Armbruster    std         -device isa-vga
30223bf93b2SMarkus Armbruster    cirrus      not yet available with -device
30323bf93b2SMarkus Armbruster    none        -nodefaults
30423bf93b2SMarkus Armbruster                disables more than just VGA, see "Default Devices"
30596560cb3SMarkus Armbruster
30623bf93b2SMarkus ArmbrusterBug: the new way doesn't work for machine types "pc" and "isapc",
30723bf93b2SMarkus Armbrusterbecause it violates obscure device initialization ordering
30823bf93b2SMarkus Armbrusterconstraints.
30996560cb3SMarkus Armbruster
31096560cb3SMarkus Armbruster=== Audio Devices ===
31196560cb3SMarkus Armbruster
31296560cb3SMarkus ArmbrusterHost and guest part of audio devices have always been separate.
31396560cb3SMarkus Armbruster
31496560cb3SMarkus ArmbrusterThe old way to define guest audio devices is -soundhw C1,...
31596560cb3SMarkus Armbruster
31696560cb3SMarkus ArmbrusterThe new way is to define each guest audio device separately with
31796560cb3SMarkus Armbruster-device.
31896560cb3SMarkus Armbruster
31996560cb3SMarkus ArmbrusterMap from -soundhw sound card name to -device:
32096560cb3SMarkus Armbruster
32196560cb3SMarkus Armbruster    ac97        -device AC97
32296560cb3SMarkus Armbruster    cs4231a     -device cs4231a,iobase=IOADDR,irq=IRQ,dma=DMA
32396560cb3SMarkus Armbruster    es1370      -device ES1370
32496560cb3SMarkus Armbruster    gus         -device gus,iobase=IOADDR,irq=IRQ,dma=DMA,freq=F
32523bf93b2SMarkus Armbruster    hda         -device intel-hda,msi=MSI -device hda-duplex
32696560cb3SMarkus Armbruster    sb16        -device sb16,iobase=IOADDR,irq=IRQ,dma=DMA,dma16=DMA16,version=V
32796560cb3SMarkus Armbruster    adlib       not yet available with -device
32896560cb3SMarkus Armbruster    pcspk       not yet available with -device
32996560cb3SMarkus Armbruster
33096560cb3SMarkus ArmbrusterFor PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control the PCI
33196560cb3SMarkus Armbrusterdevice address, as usual.
33296560cb3SMarkus Armbruster
33396560cb3SMarkus Armbruster=== USB Devices ===
33496560cb3SMarkus Armbruster
33596560cb3SMarkus ArmbrusterThe old way to define a virtual USB device is -usbdevice DRIVER:OPTS...
33696560cb3SMarkus Armbruster
33796560cb3SMarkus ArmbrusterThe new way is -device DEVNAME,DEV-OPTS...  Details depend on DRIVER:
33896560cb3SMarkus Armbruster
33923bf93b2SMarkus Armbruster* ccid            -device usb-ccid
34023bf93b2SMarkus Armbruster* keyboard        -device usb-kbd
34196560cb3SMarkus Armbruster* mouse           -device usb-mouse
34296560cb3SMarkus Armbruster* tablet          -device usb-tablet
34396560cb3SMarkus Armbruster* wacom-tablet    -device usb-wacom-tablet
344c81737e5SCésar Belley* u2f             -device u2f-{emulated,passthru}
34596560cb3SMarkus Armbruster* braille         See "Character Devices"
34696560cb3SMarkus Armbruster
347923fbd4cSMarkus ArmbrusterUntil v2.12.0, we additionally had
348923fbd4cSMarkus Armbruster
349923fbd4cSMarkus Armbruster* host:...        See "Host Device Assignment"
350923fbd4cSMarkus Armbruster* disk:...        See "Block Devices"
351923fbd4cSMarkus Armbruster* serial:...      See "Character Devices"
352923fbd4cSMarkus Armbruster* net:...         See "Network Devices"
353923fbd4cSMarkus Armbruster
35496560cb3SMarkus Armbruster=== Watchdog Devices ===
35596560cb3SMarkus Armbruster
35696560cb3SMarkus ArmbrusterHost and guest part of watchdog devices have always been separate.
35796560cb3SMarkus Armbruster
35896560cb3SMarkus ArmbrusterThe old way to define a guest watchdog device is -watchdog DEVNAME.
35996560cb3SMarkus ArmbrusterThe new way is -device DEVNAME.  For PCI devices, you can add
36096560cb3SMarkus Armbrusterbus=PCI-BUS,addr=DEVFN to control the PCI device address, as usual.
36196560cb3SMarkus Armbruster
36296560cb3SMarkus Armbruster=== Host Device Assignment ===
36396560cb3SMarkus Armbruster
36496560cb3SMarkus ArmbrusterQEMU supports assigning host PCI devices (qemu-kvm only at this time)
365ab37bfc7SPaolo Bonziniand host USB devices.  PCI devices can only be assigned with -device:
36696560cb3SMarkus Armbruster
367ab37bfc7SPaolo Bonzini    -device vfio-pci,host=ADDR,id=ID
36896560cb3SMarkus Armbruster
369923fbd4cSMarkus ArmbrusterThe old way to assign a USB host device
370923fbd4cSMarkus Armbruster
371923fbd4cSMarkus Armbruster    -usbdevice host:auto:BUS.ADDR:VID:PRID
372923fbd4cSMarkus Armbruster
373923fbd4cSMarkus Armbrusterwas removed in v2.12.0.  Any of BUS, ADDR, VID, PRID could be the
374923fbd4cSMarkus Armbrusterwildcard *.
375923fbd4cSMarkus Armbruster
376923fbd4cSMarkus ArmbrusterThe new way is
37796560cb3SMarkus Armbruster
37896560cb3SMarkus Armbruster    -device usb-host,hostbus=BUS,hostaddr=ADDR,vendorid=VID,productid=PRID
37996560cb3SMarkus Armbruster
380480324ecSThomas HuthOmitted options match anything.
38123bf93b2SMarkus Armbruster
38223bf93b2SMarkus Armbruster=== Default Devices ===
38323bf93b2SMarkus Armbruster
38423bf93b2SMarkus ArmbrusterQEMU creates a number of devices by default, depending on the machine
38523bf93b2SMarkus Armbrustertype.
38623bf93b2SMarkus Armbruster
38723bf93b2SMarkus Armbruster-device DEVNAME... and global DEVNAME... suppress default devices for
38823bf93b2SMarkus Armbrustersome DEVNAMEs:
38923bf93b2SMarkus Armbruster
39023bf93b2SMarkus Armbruster    default device      suppressing DEVNAMEs
391b5010183SDaniel P. Berrangé    CD-ROM              ide-cd, ide-hd, scsi-cd, scsi-hd
3924a27a638SMarkus Armbruster    floppy              floppy, isa-fdc
39323bf93b2SMarkus Armbruster    parallel            isa-parallel
39423bf93b2SMarkus Armbruster    serial              isa-serial
3957a0bbd55SMarkus Armbruster    VGA                 VGA, cirrus-vga, isa-vga, isa-cirrus-vga,
39663d5dfbeSMarkus Armbruster                        vmware-svga, qxl-vga, virtio-vga, ati-vga,
39763d5dfbeSMarkus Armbruster                        vhost-user-vga
39823bf93b2SMarkus Armbruster
39923bf93b2SMarkus ArmbrusterThe default NIC is connected to a default part created along with it.
40023bf93b2SMarkus ArmbrusterIt is *not* suppressed by configuring a NIC with -device (you may call
40123bf93b2SMarkus Armbrusterthat a bug).  -net and -netdev suppress the default NIC.
40223bf93b2SMarkus Armbruster
40323bf93b2SMarkus Armbruster-nodefaults suppresses all the default devices mentioned above, plus a
40423bf93b2SMarkus Armbrusterfew other things such as default SD-Card drive and default monitor.
405