Annotation of qemu/docs/qdev-device-use.txt, revision 1.1.1.3

1.1       root        1: = How to convert to -device & friends =
                      2: 
                      3: === Specifying Bus and Address on Bus ===
                      4: 
                      5: In qdev, each device has a parent bus.  Some devices provide one or
                      6: more buses for children.  You can specify a device's parent bus with
                      7: -device parameter bus.
                      8: 
                      9: A device typically has a device address on its parent bus.  For buses
                     10: where this address can be configured, devices provide a bus-specific
1.1.1.3 ! root       11: property.  Examples:
1.1       root       12: 
1.1.1.3 ! root       13:     bus         property name       value format
        !            14:     PCI         addr                %x.%x    (dev.fn, .fn optional)
        !            15:     I2C         address             %u
        !            16:     SCSI        scsi-id             %u
        !            17:     IDE         unit                %u
        !            18:     HDA         cad                 %u
        !            19:     virtio-serial-bus  nr           %u
        !            20:     ccid-bus    slot                %u
        !            21:     USB         port                %d(.%d)*    (port.port...)
1.1       root       22: 
                     23: Example: device i440FX-pcihost is on the root bus, and provides a PCI
                     24: bus named pci.0.  To put a FOO device into its slot 4, use -device
                     25: FOO,bus=/i440FX-pcihost/pci.0,addr=4.  The abbreviated form bus=pci.0
                     26: also works as long as the bus name is unique.
                     27: 
                     28: === Block Devices ===
                     29: 
                     30: A QEMU block device (drive) has a host and a guest part.
                     31: 
                     32: In the general case, the guest device is connected to a controller
                     33: device.  For instance, the IDE controller provides two IDE buses, each
                     34: of which can have up to two ide-drive devices, and each ide-drive
                     35: device is a guest part, and is connected to a host part.
                     36: 
                     37: Except we sometimes lump controller, bus(es) and drive device(s) all
                     38: together into a single device.  For instance, the ISA floppy
                     39: controller is connected to up to two host drives.
                     40: 
                     41: The old ways to define block devices define host and guest part
                     42: together.  Sometimes, they can even define a controller device in
                     43: addition to the block device.
                     44: 
                     45: The new way keeps the parts separate: you create the host part with
                     46: -drive, and guest device(s) with -device.
                     47: 
                     48: The various old ways to define drives all boil down to the common form
                     49: 
1.1.1.3 ! root       50:     -drive if=TYPE,bus=BUS,unit=UNIT,OPTS...
1.1       root       51: 
                     52: TYPE, BUS and UNIT identify the controller device, which of its buses
                     53: to use, and the drive's address on that bus.  Details depend on TYPE.
1.1.1.3 ! root       54: 
        !            55: Instead of bus=BUS,unit=UNIT, you can also say index=IDX.
1.1       root       56: 
                     57: In the new way, this becomes something like
                     58: 
                     59:    -drive if=none,id=DRIVE-ID,HOST-OPTS...
                     60:    -device DEVNAME,drive=DRIVE-ID,DEV-OPTS...
                     61: 
1.1.1.3 ! root       62: The old OPTS get split into HOST-OPTS and DEV-OPTS as follows:
1.1       root       63: 
1.1.1.3 ! root       64: * file, format, snapshot, cache, aio, readonly, rerror, werror go into
        !            65:   HOST-OPTS.
        !            66: 
        !            67: * cyls, head, secs and trans go into HOST-OPTS.  Future work: they
        !            68:   should go into DEV-OPTS instead.
        !            69: 
        !            70: * serial goes into DEV-OPTS, for devices supporting serial numbers.
        !            71:   For other devices, it goes nowhere.
1.1       root       72: 
1.1.1.3 ! root       73: * media is special.  In the old way, it selects disk vs. CD-ROM with
        !            74:   if=ide, if=scsi and if=xen.  The new way uses DEVNAME for that.
        !            75:   Additionally, readonly=on goes into HOST-OPTS.
1.1       root       76: 
1.1.1.3 ! root       77: * addr is special, see if=virtio below.
1.1       root       78: 
1.1.1.3 ! root       79: The -device argument differs in detail for each type of drive:
        !            80: 
        !            81: * if=ide
        !            82: 
        !            83:   -device DEVNAME,drive=DRIVE-ID,bus=IDE-BUS,unit=UNIT
        !            84: 
        !            85:   where DEVNAME is either ide-hd or ide-cd, IDE-BUS identifies an IDE
        !            86:   bus, normally either ide.0 or ide.1, and UNIT is either 0 or 1.
1.1       root       87: 
                     88: * if=scsi
                     89: 
                     90:   The old way implicitly creates SCSI controllers as needed.  The new
                     91:   way makes that explicit:
                     92: 
                     93:   -device lsi53c895a,id=ID
                     94: 
                     95:   As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to
                     96:   control the PCI device address.
                     97: 
1.1.1.3 ! root       98:   This SCSI controller provides a single SCSI bus, named ID.0.  Put a
        !            99:   disk on it:
1.1       root      100: 
1.1.1.3 ! root      101:   -device DEVNAME,drive=DRIVE-ID,bus=ID.0,scsi-id=UNIT
1.1.1.2   root      102: 
1.1.1.3 ! root      103:   where DEVNAME is either scsi-hd, scsi-cd or scsi-generic.
1.1       root      104: 
                    105: * if=floppy
                    106: 
1.1.1.3 ! root      107:   -global isa-fdc.driveA=DRIVE-ID
        !           108:   -global isa-fdc.driveB=DRIVE-ID
1.1       root      109: 
                    110:   This is -global instead of -device, because the floppy controller is
                    111:   created automatically, and we want to configure that one, not create
                    112:   a second one (which isn't possible anyway).
                    113: 
1.1.1.3 ! root      114:   Without any -global isa-fdc,... you get an empty driveA and no
        !           115:   driveB.  You can use -nodefaults to suppress the default driveA, see
        !           116:   "Default Devices".
1.1       root      117: 
                    118: * if=virtio
                    119: 
1.1.1.2   root      120:   -device virtio-blk-pci,drive=DRIVE-ID,class=C,vectors=V,ioeventfd=IOEVENTFD
1.1       root      121: 
                    122:   This lets you control PCI device class and MSI-X vectors.
                    123: 
1.1.1.3 ! root      124:   IOEVENTFD controls whether or not ioeventfd is used for virtqueue
        !           125:   notify.  It can be set to on (default) or off.
1.1.1.2   root      126: 
1.1       root      127:   As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to
1.1.1.3 ! root      128:   control the PCI device address.  This replaces option addr available
        !           129:   with -drive if=virtio.
1.1       root      130: 
                    131: * if=pflash, if=mtd, if=sd, if=xen are not yet available with -device
                    132: 
                    133: For USB devices, the old way is actually different:
                    134: 
                    135:     -usbdevice disk:format=FMT:FILENAME
                    136: 
1.1.1.3 ! root      137: Provides much less control than -drive's OPTS...  The new way fixes
        !           138: that:
1.1       root      139: 
1.1.1.2   root      140:     -device usb-storage,drive=DRIVE-ID,removable=RMB
                    141: 
1.1.1.3 ! root      142: The removable parameter gives control over the SCSI INQUIRY removable
        !           143: (RMB) bit.  USB thumbdrives usually set removable=on, while USB hard
        !           144: disks set removable=off.
        !           145: 
        !           146: Bug: usb-storage pretends to be a block device, but it's really a SCSI
        !           147: controller that can serve only a single device, which it creates
        !           148: automatically.  The automatic creation guesses what kind of guest part
        !           149: to create from the host part, like -drive if=scsi.  Host and guest
        !           150: part are not cleanly separated.
1.1       root      151: 
                    152: === Character Devices ===
                    153: 
                    154: A QEMU character device has a host and a guest part.
                    155: 
                    156: The old ways to define character devices define host and guest part
                    157: together.
                    158: 
                    159: The new way keeps the parts separate: you create the host part with
                    160: -chardev, and the guest device with -device.
                    161: 
                    162: The various old ways to define a character device are all of the
                    163: general form
                    164: 
                    165:     -FOO FOO-OPTS...,LEGACY-CHARDEV
                    166: 
                    167: where FOO-OPTS... is specific to -FOO, and the host part
                    168: LEGACY-CHARDEV is the same everywhere.
                    169: 
                    170: In the new way, this becomes
                    171: 
                    172:     -chardev HOST-OPTS...,id=CHR-ID
                    173:     -device DEVNAME,chardev=CHR-ID,DEV-OPTS...
                    174: 
                    175: The appropriate DEVNAME depends on the machine type.  For type "pc":
                    176: 
                    177: * -serial becomes -device isa-serial,iobase=IOADDR,irq=IRQ,index=IDX
                    178: 
                    179:   This lets you control I/O ports and IRQs.
                    180: 
                    181: * -parallel becomes -device isa-parallel,iobase=IOADDR,irq=IRQ,index=IDX
                    182: 
                    183:   This lets you control I/O ports and IRQs.
                    184: 
                    185: * -usbdevice serial:vendorid=VID,productid=PRID becomes
                    186:   -device usb-serial,vendorid=VID,productid=PRID
                    187: 
                    188: * -usbdevice braille doesn't support LEGACY-CHARDEV syntax.  It always
                    189:   uses "braille".  With -device, this useful default is gone, so you
                    190:   have to use something like
                    191: 
                    192:   -device usb-braille,chardev=braille,vendorid=VID,productid=PRID
                    193:   -chardev braille,id=braille
                    194: 
1.1.1.3 ! root      195: * -virtioconsole becomes
        !           196:   -device virtio-serial-pci,class=C,vectors=V,ioeventfd=IOEVENTFD,max_ports=N
        !           197:   -device virtconsole,is_console=NUM,nr=NR,name=NAME
1.1       root      198: 
                    199: LEGACY-CHARDEV translates to -chardev HOST-OPTS... as follows:
                    200: 
                    201: * null becomes -chardev null
                    202: 
                    203: * pty, msmouse, braille, stdio likewise
                    204: 
                    205: * vc:WIDTHxHEIGHT becomes -chardev vc,width=WIDTH,height=HEIGHT
                    206: 
                    207: * vc:<COLS>Cx<ROWS>C becomes -chardev vc,cols=<COLS>,rows=<ROWS>
                    208: 
                    209: * con: becomes -chardev console
                    210: 
                    211: * COM<NUM> becomes -chardev serial,path=<NUM>
                    212: 
                    213: * file:FNAME becomes -chardev file,path=FNAME
                    214: 
                    215: * pipe:FNAME becomes -chardev pipe,path=FNAME
                    216: 
                    217: * tcp:HOST:PORT,OPTS... becomes -chardev socket,host=HOST,port=PORT,OPTS...
                    218: 
                    219: * telnet:HOST:PORT,OPTS... becomes
                    220:   -chardev socket,host=HOST,port=PORT,OPTS...,telnet=on
                    221: 
                    222: * udp:HOST:PORT@LOCALADDR:LOCALPORT becomes
                    223:   -chardev udp,host=HOST,port=PORT,localaddr=LOCALADDR,localport=LOCALPORT
                    224: 
                    225: * unix:FNAME becomes -chardev socket,path=FNAME
                    226: 
                    227: * /dev/parportN becomes -chardev parport,file=/dev/parportN
                    228: 
                    229: * /dev/ppiN likewise
                    230: 
                    231: * Any other /dev/FNAME becomes -chardev tty,path=/dev/FNAME
                    232: 
                    233: * mon:LEGACY-CHARDEV is special: it multiplexes the monitor onto the
                    234:   character device defined by LEGACY-CHARDEV.  -chardev provides more
                    235:   general multiplexing instead: you can connect up to four users to a
                    236:   single host part.  You need to pass mux=on to -chardev to enable
                    237:   switching the input focus.
                    238: 
                    239: QEMU uses LEGACY-CHARDEV syntax not just to set up guest devices, but
                    240: also in various other places such as -monitor or -net
                    241: user,guestfwd=...  You can use chardev:CHR-ID in place of
                    242: LEGACY-CHARDEV to refer to a host part defined with -chardev.
                    243: 
                    244: === Network Devices ===
                    245: 
1.1.1.3 ! root      246: Host and guest part of network devices have always been separate.
1.1       root      247: 
1.1.1.3 ! root      248: The old way to define the guest part looks like this:
1.1       root      249: 
1.1.1.3 ! root      250:     -net nic,netdev=NET-ID,macaddr=MACADDR,model=MODEL,name=ID,addr=STR,vectors=V
1.1       root      251: 
                    252: Except for USB it looks like this:
                    253: 
1.1.1.3 ! root      254:     -usbdevice net:netdev=NET-ID,macaddr=MACADDR,name=ID
1.1       root      255: 
1.1.1.3 ! root      256: The new way is -device:
1.1       root      257: 
                    258:     -device DEVNAME,netdev=NET-ID,mac=MACADDR,DEV-OPTS...
                    259: 
                    260: DEVNAME equals MODEL, except for virtio you have to name the virtio
                    261: device appropriate for the bus (virtio-net-pci for PCI), and for USB
1.1.1.3 ! root      262: you have to use usb-net.
1.1       root      263: 
                    264: The old name=ID parameter becomes the usual id=ID with -device.
                    265: 
                    266: For PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control the PCI
                    267: device address, as usual.  The old -net nic provides parameter addr
1.1.1.3 ! root      268: for that, which is silently ignored when the NIC is not a PCI device.
1.1       root      269: 
1.1.1.2   root      270: For virtio-net-pci, you can control whether or not ioeventfd is used for
                    271: virtqueue notify by setting ioeventfd= to on or off (default).
                    272: 
1.1       root      273: -net nic accepts vectors=V for all models, but it's silently ignored
                    274: except for virtio-net-pci (model=virtio).  With -device, only devices
                    275: that support it accept it.
                    276: 
                    277: Not all devices are available with -device at this time.  All PCI
                    278: devices and ne2k_isa are.
                    279: 
                    280: Some PCI devices aren't available with -net nic, e.g. i82558a.
                    281: 
1.1.1.3 ! root      282: To connect to a VLAN instead of an ordinary host part, replace
        !           283: netdev=NET-ID by vlan=VLAN.
1.1       root      284: 
                    285: === Graphics Devices ===
                    286: 
                    287: Host and guest part of graphics devices have always been separate.
                    288: 
1.1.1.3 ! root      289: The old way to define the guest graphics device is -vga VGA.  Not all
        !           290: machines support all -vga options.
1.1       root      291: 
1.1.1.3 ! root      292: The new way is -device.  The mapping from -vga argument to -device
        !           293: depends on the machine type.  For machine "pc", it's:
1.1       root      294: 
                    295:     std         -device VGA
                    296:     cirrus      -device cirrus-vga
                    297:     vmware      -device vmware-svga
1.1.1.3 ! root      298:     qxl         -device qxl-vga
        !           299:     none        -nodefaults
        !           300:                 disables more than just VGA, see "Default Devices"
1.1       root      301: 
                    302: As for all PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control
                    303: the PCI device address.
                    304: 
                    305: -device VGA supports properties bios-offset and bios-size, but they
                    306: aren't used with machine type "pc".
                    307: 
1.1.1.3 ! root      308: For machine "isapc", it's
1.1       root      309: 
1.1.1.3 ! root      310:     std         -device isa-vga
        !           311:     cirrus      not yet available with -device
        !           312:     none        -nodefaults
        !           313:                 disables more than just VGA, see "Default Devices"
        !           314: 
        !           315: Bug: the new way doesn't work for machine types "pc" and "isapc",
        !           316: because it violates obscure device initialization ordering
        !           317: constraints.
1.1       root      318: 
                    319: === Audio Devices ===
                    320: 
                    321: Host and guest part of audio devices have always been separate.
                    322: 
                    323: The old way to define guest audio devices is -soundhw C1,...
                    324: 
                    325: The new way is to define each guest audio device separately with
                    326: -device.
                    327: 
                    328: Map from -soundhw sound card name to -device:
                    329: 
                    330:     ac97        -device AC97
                    331:     cs4231a     -device cs4231a,iobase=IOADDR,irq=IRQ,dma=DMA
                    332:     es1370      -device ES1370
                    333:     gus         -device gus,iobase=IOADDR,irq=IRQ,dma=DMA,freq=F
1.1.1.3 ! root      334:     hda         -device intel-hda,msi=MSI -device hda-duplex
1.1       root      335:     sb16        -device sb16,iobase=IOADDR,irq=IRQ,dma=DMA,dma16=DMA16,version=V
                    336:     adlib       not yet available with -device
                    337:     pcspk       not yet available with -device
                    338: 
                    339: For PCI devices, you can add bus=PCI-BUS,addr=DEVFN to control the PCI
                    340: device address, as usual.
                    341: 
                    342: === USB Devices ===
                    343: 
                    344: The old way to define a virtual USB device is -usbdevice DRIVER:OPTS...
                    345: 
                    346: The new way is -device DEVNAME,DEV-OPTS...  Details depend on DRIVER:
                    347: 
1.1.1.3 ! root      348: * ccid            -device usb-ccid
        !           349: * keyboard        -device usb-kbd
1.1       root      350: * mouse           -device usb-mouse
                    351: * tablet          -device usb-tablet
                    352: * wacom-tablet    -device usb-wacom-tablet
                    353: * host:...        See "Host Device Assignment"
                    354: * disk:...        See "Block Devices"
                    355: * serial:...      See "Character Devices"
                    356: * braille         See "Character Devices"
                    357: * net:...         See "Network Devices"
                    358: * bt:...          not yet available with -device
                    359: 
                    360: === Watchdog Devices ===
                    361: 
                    362: Host and guest part of watchdog devices have always been separate.
                    363: 
                    364: The old way to define a guest watchdog device is -watchdog DEVNAME.
                    365: The new way is -device DEVNAME.  For PCI devices, you can add
                    366: bus=PCI-BUS,addr=DEVFN to control the PCI device address, as usual.
                    367: 
                    368: === Host Device Assignment ===
                    369: 
                    370: QEMU supports assigning host PCI devices (qemu-kvm only at this time)
                    371: and host USB devices.
                    372: 
                    373: The old way to assign a host PCI device is
                    374: 
                    375:     -pcidevice host=ADDR,dma=none,id=ID
                    376: 
                    377: The new way is
                    378: 
                    379:     -device pci-assign,host=ADDR,iommu=IOMMU,id=ID
                    380: 
1.1.1.3 ! root      381: The old dma=none becomes iommu=off with -device.
1.1       root      382: 
                    383: The old way to assign a host USB device is
                    384: 
                    385:     -usbdevice host:auto:BUS.ADDR:VID:PRID
                    386: 
                    387: where any of BUS, ADDR, VID, PRID can be the wildcard *.
                    388: 
                    389: The new way is
                    390: 
                    391:     -device usb-host,hostbus=BUS,hostaddr=ADDR,vendorid=VID,productid=PRID
                    392: 
1.1.1.3 ! root      393: Omitted options match anything, just like the old way's wildcard.
        !           394: 
        !           395: === Default Devices ===
        !           396: 
        !           397: QEMU creates a number of devices by default, depending on the machine
        !           398: type.
        !           399: 
        !           400: -device DEVNAME... and global DEVNAME... suppress default devices for
        !           401: some DEVNAMEs:
        !           402: 
        !           403:     default device      suppressing DEVNAMEs
        !           404:     CD-ROM              ide-cd, ide-drive, scsi-cd
        !           405:     isa-fdc's driveA    isa-fdc
        !           406:     parallel            isa-parallel
        !           407:     serial              isa-serial
        !           408:     VGA                 VGA, cirrus-vga, vmware-svga
        !           409:     virtioconsole       virtio-serial-pci, virtio-serial-s390, virtio-serial
        !           410: 
        !           411: The default NIC is connected to a default part created along with it.
        !           412: It is *not* suppressed by configuring a NIC with -device (you may call
        !           413: that a bug).  -net and -netdev suppress the default NIC.
        !           414: 
        !           415: -nodefaults suppresses all the default devices mentioned above, plus a
        !           416: few other things such as default SD-Card drive and default monitor.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.