attempt at handling card insertion/removal

Change-Id: I88130de7f889811425c0a2ca4063ea8822c83f66
diff --git a/ccid_common/ccid_device.c b/ccid_common/ccid_device.c
index c67c52e..11edd3e 100644
--- a/ccid_common/ccid_device.c
+++ b/ccid_common/ccid_device.c
@@ -438,9 +438,20 @@
 {
 	const union ccid_pc_to_rdr *u = msgb_ccid_out(msg);
 	const struct ccid_header *ch = (const struct ccid_header *) u;
+	struct msgb *resp;
+	int rc;
 
 	/* handle this asynchronously */
-	cs->ci->slot_ops->xfr_block_async(cs, msg, &u->xfr_block);
+	rc = cs->ci->slot_ops->xfr_block_async(cs, msg, &u->xfr_block);
+	if (rc < 0) {
+		msgb_trim(msg, sizeof(struct ccid_rdr_to_pc_data_block));
+		resp = ccid_gen_data_block(cs, u->xfr_block.hdr.bSeq, CCID_CMD_STATUS_FAILED, -rc, 0, 0);
+		goto out;
+	}
+	/* busy */
+	return 1;
+out:
+	ccid_slot_send_unbusy(cs, resp);
 	return 1;
 }