CMX(4) BSD Kernel Interfaces Manual CMX(4)NAMEcmx — Omnikey CardMan 4040 smartcard reader device driver
The cmx driver provides support for the PCCARD based Omnikey CardMan 4040
smartcard reader. The driver provides a character device special file
based Chip/Smart Card Interface Devices (CCID) interface. The driver
implements what the vendor calls the Synchronious API onto the smartcard
Reading and writing is synchronious, meaning that a call to write(2)
directly corresponds to a complete CCID command sent to the device, while
the following read(2) will return the complete answer from the reader.
There is no support for partial reads or writes. There is no upper limit
on CCID request or response sizes, but the complete CCID request must be
sent to the driver in write(2) and the complete CCID response must fit
into the buffer supplied to read(2).
Non-blocking I/O, select(2) and poll(2) are supported and work as
expected. An open file descriptor will always be ready for writing, but
only ready for reading if the device indicates that it has data avail‐
Userland smartcard code written for the vendor's Linux drivers should
work with the cmx driver without modification.
/dev/cmxn Character device special file.
/usr/ports/security/openct OpenCT, a userspace smartcard daemon contain‐
ing a CCID driver which directly supports cmx
The cmx driver first appeared in FreeBSD 7.1.
The cmx driver was written by Daniel Roethlisberger ⟨email@example.com⟩,
originally based on the Linux driver v1.1.0 by Omnikey GmbH
⟨www.omnikey.com⟩. Early testing and bug fixes by Marcin Cieslak
The way the cmx driver talks to the CardMan 4040 is a bit rough. Due to
the complete lack of hardware documentation other than vendor drivers for
other operating systems, the gory details of the device's I/O registers
are not understood very well. There may be error conditions which can
only be solved by physically reinserting the reader.
BSD July 7, 2007 BSD