Add ccid_device.h file for ccid_device.c
Change-Id: I1b171ede38deebfa525a0ee10865da2dc5ec7e4e
diff --git a/ccid/ccid_device.h b/ccid/ccid_device.h
new file mode 100644
index 0000000..c7cef47
--- /dev/null
+++ b/ccid/ccid_device.h
@@ -0,0 +1,70 @@
+#pragma once
+#include <stdbool.h>
+#include <stdint.h>
+
+
+#define NR_SLOTS 8
+
+#define LOGPCI(ci, lvl, fmt, args ...) LOGP(DCCID, lvl, "%s: " fmt, (ci)->name, ## args)
+#define LOGPCS(cs, lvl, fmt, args ...) \
+ LOGP(DCCID, lvl, "%s(%u): " fmt, (cc)->ci->name, (cc)->slot_nr, ## args)
+
+struct msgb;
+
+struct ccid_pars_decoded {
+ /* global for T0/T1 */
+ uint8_t fi;
+ uint8_t di;
+ enum ccid_clock_stop clock_stop;
+ bool inverse_convention;
+
+ struct {
+ uint8_t guard_time_etu;
+ uint8_t waiting_integer;
+ } t0;
+
+ struct {
+ enum ccid_t1_csum_type csum_type;
+ uint8_t guard_time_t1;
+ uint8_t bwi;
+ uint8_t cwi;
+ uint8_t ifsc;
+ uint8_t nad;
+ } t1;
+};
+
+struct ccid_slot {
+ /* back-pointer to the ccid_instance */
+ struct ccid_instance *ci;
+ /* number of this slot (0 = first) */
+ uint8_t slot_nr;
+ /* is there an ICC physically present (card detect)? */
+ bool icc_present;
+ /* was there an ICC present during the last NotifSlotStatus?
+ * should be set to zero every USB resume and setConfig != 0 */
+ bool icc_present_last;
+ /* is the ICC physically powered? */
+ bool icc_powered;
+ /* is the ICC currently in reset? */
+ bool icc_in_reset;
+ /* is this slot currently busy with processing a CCID command? */
+ bool cmd_busy;
+ /* decided CCID parameters */
+ struct ccid_pars_decoded pars;
+};
+
+/* CCID operations */
+struct ccid_ops {
+ int (*send_in)(struct ccid_instance *ci, struct msgb *msg);
+};
+
+/* An instance of CCID (i.e. a card reader device) */
+struct ccid_instance {
+ /* slots within the reader */
+ struct ccid_slot slot[NR_SLOTS];
+ /* set of function pointers implementing specific operations */
+ const struct ccid_ops ops;
+ const char *name;
+};
+
+int ccid_handle_out(struct ccid_instance *ci, struct msgb *msg);