As a general rule, HMP commands must be built on top of the QMP API. Luiz and others have worked long & hard to make HMP conform to this rule.
However, a new command has crept in that violates it. QMP's chardev-add runs qmp_chardev_add(), which supports backends * file with parameters in, out * port with parameters type (serial, parallel), device * socket with parameters addr, server, wait, nodelay, telnet * pty * null HMP's chardev-add runs hmp_chardev_add(), which is *not* built on to of QMP. Instead, it uses qemu_chr_new_from_opts(), which looks more powerful to me. Additional backends: udp, msmouse, vc, memory, pipe, stdio, braille, tty, spicevmc, spiceport. I haven't checked whether the backends that are available in QMP support all the parameters that HMP does. If we're 100% serious about the rule, we need to disable HMP chardev-add for the release. Are we?