README on the Compact Flash for Card Engines============================================There are three challenges in supporting the CF interface of the CardEngines. First, every IO operation must be followed with IO toanother memory region. Second, the slot is wired for one-to-oneaddress mapping *and* it is wired for 16 bit access only. Second, theinterrupt request line from the CF device isn't wired.The IOBARRIER issue is covered in README.IOBARRIER. This isn't anonerous problem. Enough said here.The addressing issue is solved in thearch/arm/mach-lh7a40x/ide-lpd7a40x.c file with some awkwardwork-arounds. We implement a special SELECT_DRIVE routine that iscalled before the IDE driver performs its own SELECT_DRIVE. Our coderecognizes that the SELECT register cannot be modified without alsowriting a command. It send an IDLE_IMMEDIATE command on selecting adrive. The function also prevents drive select to the slave drivesince there can be only one. The awkward part is that the IDE driver,even though we have a select procedure, also attempts to change thedrive by writing directly the SELECT register. This attempt isexplicitly blocked by the OUTB function--not pretty, but effective.The lack of interrupts is a more serious problem. Even though the CFcard is fast when compared to a normal IDE device, we don't know thatthe CF is really flash. A user could use one of the very small harddrives being shipped with a CF interface. The IDE code includes acheck for interfaces that lack an IRQ. In these cases, submitting acommand to the IDE controller is followed by a call to poll forcompletion. If the device isn't immediately ready, it schedules atimer to poll again later.