From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MhOb8-0001ru-22 for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:08:06 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MhOb3-0001n5-8n for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:08:05 -0400 Received: from [199.232.76.173] (port=47298 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MhOb2-0001mn-Vs for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:08:01 -0400 Received: from mail-ew0-f223.google.com ([209.85.219.223]:63378) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MhOb2-0003V2-7p for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:08:00 -0400 Received: by ewy23 with SMTP id 23so3203092ewy.8 for ; Sat, 29 Aug 2009 07:07:59 -0700 (PDT) MIME-Version: 1.0 From: Blue Swirl Date: Sat, 29 Aug 2009 17:07:39 +0300 Message-ID: Content-Type: multipart/mixed; boundary=0015174c382cfd165104724853d0 Subject: [Qemu-devel] [PATCH, RFC 1/5] monitor: add device info infrastructure List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel --0015174c382cfd165104724853d0 Content-Type: text/plain; charset=UTF-8 Signed-off-by: Blue Swirl --- monitor.c | 41 +++++++++++++++++++++++++++++++++++++++++ monitor.h | 5 +++++ qemu-monitor.hx | 7 +++++++ vl.c | 8 ++++---- 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/monitor.c b/monitor.c index 2559a62..24e817f 100644 --- a/monitor.c +++ b/monitor.c @@ -78,6 +78,14 @@ struct mon_fd_t { LIST_ENTRY(mon_fd_t) next; }; +/* Callback for device info command */ +struct MonDevInfo { + DeviceInfoFunc *dev_info_cb; + void *dev_opaque; + const char *dev_name; + LIST_ENTRY(MonDevInfo) next; +}; + struct Monitor { CharDriverState *chr; int flags; @@ -89,6 +97,7 @@ struct Monitor { BlockDriverCompletionFunc *password_completion_cb; void *password_opaque; LIST_HEAD(,mon_fd_t) fds; + LIST_HEAD(,MonDevInfo) dev_infos; LIST_ENTRY(Monitor) entry; }; @@ -1755,6 +1764,18 @@ int monitor_get_fd(Monitor *mon, const char *fdname) return -1; } +static void do_info_device(Monitor *mon, const char *name) +{ + struct MonDevInfo *dev_info; + + LIST_FOREACH(dev_info, &mon->dev_infos, next) { + if (strcmp(dev_info->dev_name, name) != 0) { + continue; + } + dev_info->dev_info_cb(mon, dev_info->dev_opaque); + } +} + static const mon_cmd_t mon_cmds[] = { #include "qemu-monitor.h" { NULL, NULL, }, @@ -3052,6 +3073,13 @@ static void monitor_find_completion(const char *cmdline) for (cmd = mon_cmds; cmd->name != NULL; cmd++) { cmd_completion(str, cmd->name); } + } else if (!strcmp(cmd->name, "dev_info")) { + struct MonDevInfo *dev_info; + + readline_set_completion_index(cur_mon->rs, strlen(str)); + LIST_FOREACH(dev_info, &cur_mon->dev_infos, next) { + cmd_completion(str, dev_info->dev_name); + } } break; default: @@ -3216,6 +3244,19 @@ void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, completion_cb(opaque, err); } +void monitor_register_device_info(const char *dev_name, + DeviceInfoFunc *dev_info_cb, + void *dev_opaque) +{ + struct MonDevInfo *dev_info; + + dev_info = qemu_malloc(sizeof(*dev_info)); + dev_info->dev_name = dev_name; + dev_info->dev_info_cb = dev_info_cb; + dev_info->dev_opaque = dev_opaque; + LIST_INSERT_HEAD(&cur_mon->dev_infos, dev_info, next); +} + typedef struct QemuErrorSink QemuErrorSink; struct QemuErrorSink { enum { diff --git a/monitor.h b/monitor.h index f6a43c0..49b9066 100644 --- a/monitor.h +++ b/monitor.h @@ -20,6 +20,11 @@ void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, BlockDriverCompletionFunc *completion_cb, void *opaque); +typedef void DeviceInfoFunc(Monitor *mon, void *opaque); +void monitor_register_device_info(const char *dev_name, + DeviceInfoFunc *dev_info_cb, + void *dev_opaque); + int monitor_get_fd(Monitor *mon, const char *fdname); void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap); diff --git a/qemu-monitor.hx b/qemu-monitor.hx index f56354b..80d07b5 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -644,6 +644,13 @@ Close the file descriptor previously assigned to @var{fdname} using the used by another monitor command. ETEXI + { "dev_info", "s", do_info_device, + "", "show device information" }, +STEXI +@item device @var{devicename} +Show information about a device. +ETEXI + STEXI @end table ETEXI diff --git a/vl.c b/vl.c index a894285..447f21f 100644 --- a/vl.c +++ b/vl.c @@ -5887,6 +5887,10 @@ int main(int argc, char **argv, char **envp) exit(1); } } + qemu_chr_initial_reset(); + + if (monitor_device && monitor_hd) + monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT); for(i = 0; i < MAX_SERIAL_PORTS; i++) { const char *devname = serial_devices[i]; @@ -6026,10 +6030,6 @@ int main(int argc, char **argv, char **envp) } text_consoles_set_display(display_state); - qemu_chr_initial_reset(); - - if (monitor_device && monitor_hd) - monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT); for(i = 0; i < MAX_SERIAL_PORTS; i++) { const char *devname = serial_devices[i]; -- 1.6.2.4 --0015174c382cfd165104724853d0 Content-Type: application/mbox; name="0001-monitor-add-device-info-infrastructure.patch" Content-Disposition: attachment; filename="0001-monitor-add-device-info-infrastructure.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fyyffnvl0 RnJvbSBlZjBlMWVlZjk3ODBlNjJiZmU2NGY5YWU0NGZiM2Y3Nzk4ZDE2OTE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCbHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWlsLmNvbT4KRGF0 ZTogU2F0LCAyOSBBdWcgMjAwOSAxNDowMDo1NCArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIG1vbml0 b3I6IGFkZCBkZXZpY2UgaW5mbyBpbmZyYXN0cnVjdHVyZQoKU2lnbmVkLW9mZi1ieTogQmx1ZSBT d2lybCA8YmxhdXdpcmJlbEBnbWFpbC5jb20+Ci0tLQogbW9uaXRvci5jICAgICAgIHwgICA0MSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbW9uaXRvci5oICAgICAg IHwgICAgNSArKysrKwogcWVtdS1tb25pdG9yLmh4IHwgICAgNyArKysrKysrCiB2bC5jICAgICAg ICAgICAgfCAgICA4ICsrKystLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCmluZGV4 IDI1NTlhNjIuLjI0ZTgxN2YgMTAwNjQ0Ci0tLSBhL21vbml0b3IuYworKysgYi9tb25pdG9yLmMK QEAgLTc4LDYgKzc4LDE0IEBAIHN0cnVjdCBtb25fZmRfdCB7CiAgICAgTElTVF9FTlRSWShtb25f ZmRfdCkgbmV4dDsKIH07CiAKKy8qIENhbGxiYWNrIGZvciBkZXZpY2UgaW5mbyBjb21tYW5kICov CitzdHJ1Y3QgTW9uRGV2SW5mbyB7CisgICAgRGV2aWNlSW5mb0Z1bmMgKmRldl9pbmZvX2NiOwor ICAgIHZvaWQgKmRldl9vcGFxdWU7CisgICAgY29uc3QgY2hhciAqZGV2X25hbWU7CisgICAgTElT VF9FTlRSWShNb25EZXZJbmZvKSBuZXh0OworfTsKKwogc3RydWN0IE1vbml0b3IgewogICAgIENo YXJEcml2ZXJTdGF0ZSAqY2hyOwogICAgIGludCBmbGFnczsKQEAgLTg5LDYgKzk3LDcgQEAgc3Ry dWN0IE1vbml0b3IgewogICAgIEJsb2NrRHJpdmVyQ29tcGxldGlvbkZ1bmMgKnBhc3N3b3JkX2Nv bXBsZXRpb25fY2I7CiAgICAgdm9pZCAqcGFzc3dvcmRfb3BhcXVlOwogICAgIExJU1RfSEVBRCgs bW9uX2ZkX3QpIGZkczsKKyAgICBMSVNUX0hFQUQoLE1vbkRldkluZm8pIGRldl9pbmZvczsKICAg ICBMSVNUX0VOVFJZKE1vbml0b3IpIGVudHJ5OwogfTsKIApAQCAtMTc1NSw2ICsxNzY0LDE4IEBA IGludCBtb25pdG9yX2dldF9mZChNb25pdG9yICptb24sIGNvbnN0IGNoYXIgKmZkbmFtZSkKICAg ICByZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX2luZm9fZGV2aWNlKE1vbml0b3IgKm1v biwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzdHJ1Y3QgTW9uRGV2SW5mbyAqZGV2X2luZm87 CisKKyAgICBMSVNUX0ZPUkVBQ0goZGV2X2luZm8sICZtb24tPmRldl9pbmZvcywgbmV4dCkgewor ICAgICAgICBpZiAoc3RyY21wKGRldl9pbmZvLT5kZXZfbmFtZSwgbmFtZSkgIT0gMCkgeworICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZGV2X2luZm8tPmRldl9pbmZv X2NiKG1vbiwgZGV2X2luZm8tPmRldl9vcGFxdWUpOworICAgIH0KK30KKwogc3RhdGljIGNvbnN0 IG1vbl9jbWRfdCBtb25fY21kc1tdID0gewogI2luY2x1ZGUgInFlbXUtbW9uaXRvci5oIgogICAg IHsgTlVMTCwgTlVMTCwgfSwKQEAgLTMwNTIsNiArMzA3MywxMyBAQCBzdGF0aWMgdm9pZCBtb25p dG9yX2ZpbmRfY29tcGxldGlvbihjb25zdCBjaGFyICpjbWRsaW5lKQogICAgICAgICAgICAgICAg IGZvciAoY21kID0gbW9uX2NtZHM7IGNtZC0+bmFtZSAhPSBOVUxMOyBjbWQrKykgewogICAgICAg ICAgICAgICAgICAgICBjbWRfY29tcGxldGlvbihzdHIsIGNtZC0+bmFtZSk7CiAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGNtZC0+bmFtZSwgImRldl9p bmZvIikpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgTW9uRGV2SW5mbyAqZGV2X2luZm87CisK KyAgICAgICAgICAgICAgICByZWFkbGluZV9zZXRfY29tcGxldGlvbl9pbmRleChjdXJfbW9uLT5y cywgc3RybGVuKHN0cikpOworICAgICAgICAgICAgICAgIExJU1RfRk9SRUFDSChkZXZfaW5mbywg JmN1cl9tb24tPmRldl9pbmZvcywgbmV4dCkgeworICAgICAgICAgICAgICAgICAgICBjbWRfY29t cGxldGlvbihzdHIsIGRldl9pbmZvLT5kZXZfbmFtZSk7CisgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0zMjE2 LDYgKzMyNDQsMTkgQEAgdm9pZCBtb25pdG9yX3JlYWRfYmRydl9rZXlfc3RhcnQoTW9uaXRvciAq bW9uLCBCbG9ja0RyaXZlclN0YXRlICpicywKICAgICAgICAgY29tcGxldGlvbl9jYihvcGFxdWUs IGVycik7CiB9CiAKK3ZvaWQgbW9uaXRvcl9yZWdpc3Rlcl9kZXZpY2VfaW5mbyhjb25zdCBjaGFy ICpkZXZfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJbmZv RnVuYyAqZGV2X2luZm9fY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqZGV2X29wYXF1ZSkKK3sKKyAgICBzdHJ1Y3QgTW9uRGV2SW5mbyAqZGV2X2luZm87CisKKyAg ICBkZXZfaW5mbyA9IHFlbXVfbWFsbG9jKHNpemVvZigqZGV2X2luZm8pKTsKKyAgICBkZXZfaW5m by0+ZGV2X25hbWUgPSBkZXZfbmFtZTsKKyAgICBkZXZfaW5mby0+ZGV2X2luZm9fY2IgPSBkZXZf aW5mb19jYjsKKyAgICBkZXZfaW5mby0+ZGV2X29wYXF1ZSA9IGRldl9vcGFxdWU7CisgICAgTElT VF9JTlNFUlRfSEVBRCgmY3VyX21vbi0+ZGV2X2luZm9zLCBkZXZfaW5mbywgbmV4dCk7Cit9CisK IHR5cGVkZWYgc3RydWN0IFFlbXVFcnJvclNpbmsgUWVtdUVycm9yU2luazsKIHN0cnVjdCBRZW11 RXJyb3JTaW5rIHsKICAgICBlbnVtIHsKZGlmZiAtLWdpdCBhL21vbml0b3IuaCBiL21vbml0b3Iu aAppbmRleCBmNmE0M2MwLi40OWI5MDY2IDEwMDY0NAotLS0gYS9tb25pdG9yLmgKKysrIGIvbW9u aXRvci5oCkBAIC0yMCw2ICsyMCwxMSBAQCB2b2lkIG1vbml0b3JfcmVhZF9iZHJ2X2tleV9zdGFy dChNb25pdG9yICptb24sIEJsb2NrRHJpdmVyU3RhdGUgKmJzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQmxvY2tEcml2ZXJDb21wbGV0aW9uRnVuYyAqY29tcGxldGlvbl9jYiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSk7CiAKK3R5cGVk ZWYgdm9pZCBEZXZpY2VJbmZvRnVuYyhNb25pdG9yICptb24sIHZvaWQgKm9wYXF1ZSk7Cit2b2lk IG1vbml0b3JfcmVnaXN0ZXJfZGV2aWNlX2luZm8oY29uc3QgY2hhciAqZGV2X25hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSW5mb0Z1bmMgKmRldl9pbmZvX2Ni LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRldl9vcGFxdWUpOwor CiBpbnQgbW9uaXRvcl9nZXRfZmQoTW9uaXRvciAqbW9uLCBjb25zdCBjaGFyICpmZG5hbWUpOwog CiB2b2lkIG1vbml0b3JfdnByaW50ZihNb25pdG9yICptb24sIGNvbnN0IGNoYXIgKmZtdCwgdmFf bGlzdCBhcCk7CmRpZmYgLS1naXQgYS9xZW11LW1vbml0b3IuaHggYi9xZW11LW1vbml0b3IuaHgK aW5kZXggZjU2MzU0Yi4uODBkMDdiNSAxMDA2NDQKLS0tIGEvcWVtdS1tb25pdG9yLmh4CisrKyBi L3FlbXUtbW9uaXRvci5oeApAQCAtNjQ0LDYgKzY0NCwxMyBAQCBDbG9zZSB0aGUgZmlsZSBkZXNj cmlwdG9yIHByZXZpb3VzbHkgYXNzaWduZWQgdG8gQHZhcntmZG5hbWV9IHVzaW5nIHRoZQogdXNl ZCBieSBhbm90aGVyIG1vbml0b3IgY29tbWFuZC4KIEVURVhJCiAKKyAgICB7ICJkZXZfaW5mbyIs ICJzIiwgZG9faW5mb19kZXZpY2UsCisgICAgICAiIiwgInNob3cgZGV2aWNlIGluZm9ybWF0aW9u IiB9LAorU1RFWEkKK0BpdGVtIGRldmljZSBAdmFye2RldmljZW5hbWV9CitTaG93IGluZm9ybWF0 aW9uIGFib3V0IGEgZGV2aWNlLgorRVRFWEkKKwogU1RFWEkKIEBlbmQgdGFibGUKIEVURVhJCmRp ZmYgLS1naXQgYS92bC5jIGIvdmwuYwppbmRleCBhODk0Mjg1Li40NDdmMjFmIDEwMDY0NAotLS0g YS92bC5jCisrKyBiL3ZsLmMKQEAgLTU4ODcsNiArNTg4NywxMCBAQCBpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKQogICAgICAgICAgICAgZXhpdCgxKTsKICAgICAg ICAgfQogICAgIH0KKyAgICBxZW11X2Nocl9pbml0aWFsX3Jlc2V0KCk7CisKKyAgICBpZiAobW9u aXRvcl9kZXZpY2UgJiYgbW9uaXRvcl9oZCkKKyAgICAgICAgbW9uaXRvcl9pbml0KG1vbml0b3Jf aGQsIE1PTklUT1JfVVNFX1JFQURMSU5FIHwgTU9OSVRPUl9JU19ERUZBVUxUKTsKIAogICAgIGZv cihpID0gMDsgaSA8IE1BWF9TRVJJQUxfUE9SVFM7IGkrKykgewogICAgICAgICBjb25zdCBjaGFy ICpkZXZuYW1lID0gc2VyaWFsX2RldmljZXNbaV07CkBAIC02MDI2LDEwICs2MDMwLDYgQEAgaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCkKICAgICB9CiAKICAgICB0 ZXh0X2NvbnNvbGVzX3NldF9kaXNwbGF5KGRpc3BsYXlfc3RhdGUpOwotICAgIHFlbXVfY2hyX2lu aXRpYWxfcmVzZXQoKTsKLQotICAgIGlmIChtb25pdG9yX2RldmljZSAmJiBtb25pdG9yX2hkKQot ICAgICAgICBtb25pdG9yX2luaXQobW9uaXRvcl9oZCwgTU9OSVRPUl9VU0VfUkVBRExJTkUgfCBN T05JVE9SX0lTX0RFRkFVTFQpOwogCiAgICAgZm9yKGkgPSAwOyBpIDwgTUFYX1NFUklBTF9QT1JU UzsgaSsrKSB7CiAgICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUgPSBzZXJpYWxfZGV2aWNlc1tp XTsKLS0gCjEuNS42LjUKCg== --0015174c382cfd165104724853d0--