Message ID | 1363612272-13713-14-git-send-email-alevy@redhat.com |
---|---|
State | New |
Headers | show |
Hi On Mon, Mar 18, 2013 at 2:10 PM, Alon Levy <alevy@redhat.com> wrote: > From: Alon Levy <alon@pobox.com> > > This overrides whatever debug value is set on the corresponding devices > from the command line, and is meant to ease the usage with any > management stack. For libvirt you can set environment variables by > extending the dom namespace, i.e: > > <domain type='kvm' id='3' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> > <qemu:commandline> > <qemu:env name='QEMU_CCID_PASSTHRU_DEBUG' value='4'/> > <qemu:env name='QEMU_CCID_DEBUG' value='4'/> > </qemu:commandline> > </domain> > > Signed-off-by: Alon Levy <alevy@redhat.com> > --- > hw/ccid-card-passthru.c | 16 ++++++++++++++++ > hw/usb/dev-smartcard-reader.c | 16 ++++++++++++++++ > 2 files changed, 32 insertions(+) > > diff --git a/hw/ccid-card-passthru.c b/hw/ccid-card-passthru.c > index 111894f..80fe514 100644 > --- a/hw/ccid-card-passthru.c > +++ b/hw/ccid-card-passthru.c > @@ -350,6 +350,22 @@ static int passthru_initfn(CCIDCardState *base) > error_report("missing chardev"); > return -1; > } > + { > + char *debug_env = getenv("QEMU_CCID_PASSTHRU_DEBUG"); > + char *inv = NULL; > + int debug; > + if (debug_env) { > + debug = strtol(debug_env, &inv, 10); > + if (inv != debug_env) { > + if (debug < 0 || debug > D_VERBOSE) { > + fprintf(stderr, "warning: QEMU_CCID_PASSTHRU_DEBUG" > + " not in [0, %d]", D_VERBOSE); > + } else { > + card->debug = debug; > + } > + } > + } > + } > assert(sizeof(DEFAULT_ATR) <= MAX_ATR_SIZE); > memcpy(card->atr, DEFAULT_ATR, sizeof(DEFAULT_ATR)); > card->atr_length = sizeof(DEFAULT_ATR); > diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c > index caebc1c..fc950c8 100644 > --- a/hw/usb/dev-smartcard-reader.c > +++ b/hw/usb/dev-smartcard-reader.c > @@ -1201,6 +1201,22 @@ static int ccid_initfn(USBDevice *dev) > s->bulk_out_pos = 0; > ccid_reset_parameters(s); > ccid_reset(s); > + { > + char *debug_env = getenv("QEMU_CCID_DEBUG"); > + char *inv = NULL; > + int debug; > + if (debug_env) { > + debug = strtol(debug_env, &inv, 10); > + if (inv != debug_env) { > + if (debug < 0 || debug > D_VERBOSE) { > + fprintf(stderr, "warning: QEMU_CCID_PASSTHRU_DEBUG" > + " not in [0, %d]", D_VERBOSE); > + } else { > + s->debug = debug; > + } > + } > + } > + } > return 0; > } > > -- > 1.8.1.4 > > If not generalized (in util/cutils?) it could probably share the same code in a function parse_debug_env("QEMU_CCID_PASSTHRU_DEBUG", &s->debug)
diff --git a/hw/ccid-card-passthru.c b/hw/ccid-card-passthru.c index 111894f..80fe514 100644 --- a/hw/ccid-card-passthru.c +++ b/hw/ccid-card-passthru.c @@ -350,6 +350,22 @@ static int passthru_initfn(CCIDCardState *base) error_report("missing chardev"); return -1; } + { + char *debug_env = getenv("QEMU_CCID_PASSTHRU_DEBUG"); + char *inv = NULL; + int debug; + if (debug_env) { + debug = strtol(debug_env, &inv, 10); + if (inv != debug_env) { + if (debug < 0 || debug > D_VERBOSE) { + fprintf(stderr, "warning: QEMU_CCID_PASSTHRU_DEBUG" + " not in [0, %d]", D_VERBOSE); + } else { + card->debug = debug; + } + } + } + } assert(sizeof(DEFAULT_ATR) <= MAX_ATR_SIZE); memcpy(card->atr, DEFAULT_ATR, sizeof(DEFAULT_ATR)); card->atr_length = sizeof(DEFAULT_ATR); diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c index caebc1c..fc950c8 100644 --- a/hw/usb/dev-smartcard-reader.c +++ b/hw/usb/dev-smartcard-reader.c @@ -1201,6 +1201,22 @@ static int ccid_initfn(USBDevice *dev) s->bulk_out_pos = 0; ccid_reset_parameters(s); ccid_reset(s); + { + char *debug_env = getenv("QEMU_CCID_DEBUG"); + char *inv = NULL; + int debug; + if (debug_env) { + debug = strtol(debug_env, &inv, 10); + if (inv != debug_env) { + if (debug < 0 || debug > D_VERBOSE) { + fprintf(stderr, "warning: QEMU_CCID_PASSTHRU_DEBUG" + " not in [0, %d]", D_VERBOSE); + } else { + s->debug = debug; + } + } + } + } return 0; }