On Fri, Apr 01, 2011 at 06:12:07PM +0300, Alon Levy wrote: > This patchset adds three new devices, usb-ccid, ccid-card-passthru and > ccid-card-emulated, providing a CCID bus, a simple passthru protocol > implementing card requiring a client, and a standalone emulated card. >
Please note that patches 0,1,2,3,4,5 got sent as duplicate, I apologize for the noise, and patches 7,8,9,10 are not linked to the cover letter since I had to send them separately and didn't set the correct header. Alon > It also introduces a new directory libcaccard with CAC card emulation, > CAC is a type of ISO 7816 smart card. > > Tree for pull: git://anongit.freedesktop.org/~alon/qemu usb_ccid.v25.clean > > v24->v25 changes: > * libcacard: > * Fix out of tree build > * Fix build for linux-user targets > > v23->v24 changes: > * libcacard: > = changed patches: (that need re-review) > * 6 - libcacard: initial commit > * 7 - libcacard: add vscclient > = changed but trust me don't need rereview: > * 5 - ccid: add passthru card device (removed a duplicate line > in the header, had two licenses). > * drop "libcacard add passthru" patch, not ready, not used. > * remove unrequired includes > * use stderr in vscclient for printing errors > * cosmetic fixes > > v22->v23 changes: > * libcacard > * configure fixes: (reported by Stefan Hajnoczi) > * test a = b, not a == b (second isn't portable) > * quote $source_path in case it contains spaces > - this doesn't really help since there are many other places > that need similar fixes, not introduced by this patch. > > v21->v22 changes: > * libcacard: > * fix configure to not link libcacard if nss not found > (reported by Stefan Hajnoczi) > * fix vscclient linkage with simpletrace backend > (reported by Stefan Hajnoczi) > * card_7816.c: add missing break in ERROR_DATA_NOT_FOUND > (reported by William van de Velde) > > v20->v21 changes: > * all: cosmetics > * libcacard, ccid-card-passthru: > * use qemu-{malloc,free} and qemu-thread, error_report > * libcacard: > * split to multiple patches > > v19->v20 changes: > * checkpatch.pl. Here are the remaining errors with explanation: > * ignored 5 macro errors of the type > "ERROR: Macros with complex values should be enclosed in parenthesis" > because fixing them breaks current code, if it really bothers someone > I can fix it. > * four of them are in libcacard/card_7816t.h: > /* give the subfields a unified look */ > .. > #define a_cla a_header->ah_cla /* class */ > #define a_ins a_header->ah_ins /* instruction */ > #define a_p1 a_header->ah_p1 /* parameter 1 */ > #define a_p2 a_header->ah_p2 /* parameter 2 */ > * and the fifth: > #4946: FILE: libcacard/vcardt.h:31: > +#define VCARD_ATR_PREFIX(size) 0x3b, 0x66+(size), 0x00, 0xff, \ > + 'V', 'C', 'A', 'R', 'D', '_' > * Ignored this warning since I couldn't figure it out, and it's a test > file: > WARNING: externs should be avoided in .c files > #2343: FILE: libcacard/link_test.c:7: > +VCardStatus cac_card_init(const char *flags, VCard *card, > > v18-v19 changes: > * more merges, down to a single digit number of patches. > * drop enumeration property, use string. > * rebased (trivial) > > v17-v18 changes: > * merge vscard_common.h patches. > * actually provide a tree to pull. > > v16-v17 changes: > * merged all the "v15->v16" patches > * merged some more wherever it was easy (all same file commits). > * added signed off by to first four patches > * ccid.h: added copyright, removed underscore in defines, and replaced > non C89 comments > > v15-v16 changes: > * split vscard_common introducing patch for ease of review > * sum of commit logs for the v15-v16 commits: (whitespace fixes > removed for space, see original commit messages in later patches) > * usb-ccid: > * fix abort on client answer after card remove > * enable migration > * remove side affect code from asserts > * return consistent self-powered state > * mask out reserved bits in ccid_set_parameters > * add missing abRFU in SetParameters (no affect on linux guest) > * vscard_common.h protocol change: > * VSCMsgInit capabilities and magic > * removed ReaderResponse, will use Error instead with code==VSC_SUCCESS. > * added Flush and FlushComplete, remove Reconnect. > * define VSCARD_MAGIC > * added error code VSC_SUCCESS. > * ccid-card-passthru > * return correct size > * return error instead of assert if client sent too large ATR > * don't assert if client sent too large a size, but add asserts for > indices to buffer > * reset vscard_in indices on chardev disconnect > * handle init from client > * error if no chardev supplied > * use ntoh, hton > * eradicate reader_id_t > * remove Reconnect usage (removed from VSCARD protocol) > * send VSC_SUCCESS on card insert/remove and reader add/remove > * ccid-card-emulated > * fix error reporting in initfn > > v14-v15 changes: > * add patch with --enable-smartcard and --disable-smartcard and only > disable ccid-card-emulated if nss not found. > * add patch with description strings > * s/libcaccard/libcacard/ in docs/ccid.txt > > v13-v14 changes: > - support device_del/device_add on ccid-card-* and usb-ccid > * usb-ccid: > * lose card reference when card device deleted > * check slot number and deny adding a slot if one is already added. > * ccid-card-*: use qdev_simple_unplug_cb in both emulated and passthru ccid > cards, > the exitfn already takes care of triggering card removal in the usb dev. > * libcacard: > * remove double include of config-host.mak > * add replay of card events to libcacard to support second and more > emulation > * don't initialize more then once (doesn't support it right now, so one > thread, NSS thread, is left when device_del is done) > * add VCARD_EMUL_INIT_ALREADY_INITED > * ccid-card-emulated: > * take correct mutexes on signaling to fix deadlocks on device_del > * allow card insertion/removal event without proper reader insertion event > > v12-v13 changes: > * libcacard: > * fix Makefile clean to remove vscclient > * fix double include of config-host in Makefile > * usb-ccid: remove attach/detach logic, usb is always attached. Guest > doesn't care if there is a reader attached with no card anyway. > * ccid-card-passthru: don't close chr_dev on removal, makes it possible > to use device_del/device_add to create remove/insertion for debugging. > > v11-v12 changes: > * fix out of tree build > > v10-v11 changes: > * fix last patch that removed one of the doc files. > * updated flow table in docs/ccid.txt > > v8-v10 changes: > * usb-ccid: > * add slot for future use (Gerd) > * ifdef ENABLE_MIGRATION for migration support on account of usb > migration not being ready in general. (Gerd) > * verbosified commit messages. (Gerd) > * put libcacard docs in libcacard commit. (Gerd) > > v8-v9 changes: > * Blue Swirl comments: > * white space fixes > * enabled by default, disabled only if missing nss > * forgotten fix from v8 (don't build libcacard.so) > * added a note about device being little endian > * library renamed from libcaccard to libcacard > * squashed both of libcacard patches, they touched different files anyway. > > v7-v8 changes: > * Blue Swirl comments: > * usb-ccid: deannonymize some structs > * usb-ccid: coding style change - answer_t and bulk_in_t fixed > * usb-ccid: handle endianess conversion between guest and host > * usb-ccid: s/ccid_bulk_in_copy_out/ccid_bulk_in_copy_to_guest/ > * ccid-card-emulated: fix segfault if backend not specified > * ccid-card-emulated: let last reader inserted win > * libcaccard: remove double vscard_common.h > > v6->v7 changes: > * external libcaccard became internal directory libcaccard > * statically link object files into qemu > * produce libcaccard.so for usage by external projects > * applied coding style to new code (please check me) > - did not use the qemu options parsing for libcaccard, since > it seems to draw large amounts of qemu code (monitor for instance). > > v5->v6 changes: > * really remove static debug (I apologize for claiming to have done so > before) > > v4->v5 changes: > * rebased to latest > * remove static debug in card devices > * fix --enable-smartcard to link > * stall instead of assert when exceeding BULK_OUT_DATA_SIZE > * make ccid_reserve_recv_buf for too large len discard message, not exit > * make ccid_reserve_recv_buf return void* > * fix typo > * remove commented code in VMState > > v3->v4: > * remove ccid field in CCIDBus > * remove static debug in bus > * add back docs > > v2->v3: > * split into bus (usb-ccid.c, uses ccid.h) and card (ccid-card-passthru.c). > * removed documentation (being revised). > > v1->v2: > * all QSIMPLEQ turned into fixed sized rings > * all allocated buffers turned into fixed size buffers > * added migration support > * added a message to tell client qemu has migrated to ip:port > * for lack of monitor commands ip:port are 0:0, which causes the updated > vscclient to connect to one port higher on the same host. will add monitor > commands in a separate patch. tested with current setup. > > Alon Levy (7): > trace: move trace objects from Makefile to Makefile.objs > qemu-thread.h: include inttypes.h > usb-ccid: add CCID bus > introduce libcacard/vscard_common.h > ccid: add passthru card device > ccid: add ccid-card-emulated device > ccid: add docs > > Robert Relyea (3): > libcacard: initial commit > libcacard: add vscclient > libcacard: add docs > > Makefile | 38 +- > Makefile.objs | 39 ++ > Makefile.target | 6 + > configure | 60 ++ > docs/ccid.txt | 135 ++++ > docs/libcacard.txt | 483 +++++++++++++++ > hw/ccid-card-emulated.c | 595 ++++++++++++++++++ > hw/ccid-card-passthru.c | 340 +++++++++++ > hw/ccid.h | 59 ++ > hw/usb-ccid.c | 1419 > +++++++++++++++++++++++++++++++++++++++++++ > libcacard/Makefile | 25 + > libcacard/cac.c | 403 ++++++++++++ > libcacard/cac.h | 23 + > libcacard/card_7816.c | 763 +++++++++++++++++++++++ > libcacard/card_7816.h | 62 ++ > libcacard/card_7816t.h | 165 +++++ > libcacard/event.c | 106 ++++ > libcacard/eventt.h | 29 + > libcacard/link_test.c | 22 + > libcacard/vcard.c | 339 +++++++++++ > libcacard/vcard.h | 86 +++ > libcacard/vcard_emul.h | 65 ++ > libcacard/vcard_emul_nss.c | 1157 +++++++++++++++++++++++++++++++++++ > libcacard/vcard_emul_type.c | 57 ++ > libcacard/vcard_emul_type.h | 32 + > libcacard/vcardt.h | 64 ++ > libcacard/vevent.h | 27 + > libcacard/vreader.c | 513 ++++++++++++++++ > libcacard/vreader.h | 55 ++ > libcacard/vreadert.h | 24 + > libcacard/vscard_common.h | 178 ++++++ > libcacard/vscclient.c | 652 ++++++++++++++++++++ > qemu-thread.h | 2 + > 33 files changed, 7989 insertions(+), 34 deletions(-) > create mode 100644 docs/ccid.txt > create mode 100644 docs/libcacard.txt > create mode 100644 hw/ccid-card-emulated.c > create mode 100644 hw/ccid-card-passthru.c > create mode 100644 hw/ccid.h > create mode 100644 hw/usb-ccid.c > create mode 100644 libcacard/Makefile > create mode 100644 libcacard/cac.c > create mode 100644 libcacard/cac.h > create mode 100644 libcacard/card_7816.c > create mode 100644 libcacard/card_7816.h > create mode 100644 libcacard/card_7816t.h > create mode 100644 libcacard/event.c > create mode 100644 libcacard/eventt.h > create mode 100644 libcacard/link_test.c > create mode 100644 libcacard/vcard.c > create mode 100644 libcacard/vcard.h > create mode 100644 libcacard/vcard_emul.h > create mode 100644 libcacard/vcard_emul_nss.c > create mode 100644 libcacard/vcard_emul_type.c > create mode 100644 libcacard/vcard_emul_type.h > create mode 100644 libcacard/vcardt.h > create mode 100644 libcacard/vevent.h > create mode 100644 libcacard/vreader.c > create mode 100644 libcacard/vreader.h > create mode 100644 libcacard/vreadert.h > create mode 100644 libcacard/vscard_common.h > create mode 100644 libcacard/vscclient.c > > -- > 1.7.4.2 > >