| /* | |
| * Driver for Alauda-based card readers | |
| * | |
| * Current development and maintenance by: | |
| * (c) 2005 Daniel Drake <dsd@gentoo.org> | |
| * | |
| * See alauda.c for more explanation. | |
| * | |
| * This program is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License as published by the | |
| * Free Software Foundation; either version 2, or (at your option) any | |
| * later version. | |
| * | |
| * This program is distributed in the hope that it will be useful, but | |
| * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License along | |
| * with this program; if not, write to the Free Software Foundation, Inc., | |
| * 675 Mass Ave, Cambridge, MA 02139, USA. | |
| */ | |
| #ifndef _USB_ALAUDA_H | |
| #define _USB_ALAUDA_H | |
| /* | |
| * Status bytes | |
| */ | |
| #define ALAUDA_STATUS_ERROR 0x01 | |
| #define ALAUDA_STATUS_READY 0x40 | |
| /* | |
| * Control opcodes (for request field) | |
| */ | |
| #define ALAUDA_GET_XD_MEDIA_STATUS 0x08 | |
| #define ALAUDA_GET_SM_MEDIA_STATUS 0x98 | |
| #define ALAUDA_ACK_XD_MEDIA_CHANGE 0x0a | |
| #define ALAUDA_ACK_SM_MEDIA_CHANGE 0x9a | |
| #define ALAUDA_GET_XD_MEDIA_SIG 0x86 | |
| #define ALAUDA_GET_SM_MEDIA_SIG 0x96 | |
| /* | |
| * Bulk command identity (byte 0) | |
| */ | |
| #define ALAUDA_BULK_CMD 0x40 | |
| /* | |
| * Bulk opcodes (byte 1) | |
| */ | |
| #define ALAUDA_BULK_GET_REDU_DATA 0x85 | |
| #define ALAUDA_BULK_READ_BLOCK 0x94 | |
| #define ALAUDA_BULK_ERASE_BLOCK 0xa3 | |
| #define ALAUDA_BULK_WRITE_BLOCK 0xb4 | |
| #define ALAUDA_BULK_GET_STATUS2 0xb7 | |
| #define ALAUDA_BULK_RESET_MEDIA 0xe0 | |
| /* | |
| * Port to operate on (byte 8) | |
| */ | |
| #define ALAUDA_PORT_XD 0x00 | |
| #define ALAUDA_PORT_SM 0x01 | |
| /* | |
| * LBA and PBA are unsigned ints. Special values. | |
| */ | |
| #define UNDEF 0xffff | |
| #define SPARE 0xfffe | |
| #define UNUSABLE 0xfffd | |
| int init_alauda(struct us_data *us); | |
| int alauda_transport(struct scsi_cmnd *srb, struct us_data *us); | |
| struct alauda_media_info { | |
| unsigned long capacity; /* total media size in bytes */ | |
| unsigned int pagesize; /* page size in bytes */ | |
| unsigned int blocksize; /* number of pages per block */ | |
| unsigned int uzonesize; /* number of usable blocks per zone */ | |
| unsigned int zonesize; /* number of blocks per zone */ | |
| unsigned int blockmask; /* mask to get page from address */ | |
| unsigned char pageshift; | |
| unsigned char blockshift; | |
| unsigned char zoneshift; | |
| u16 **lba_to_pba; /* logical to physical block map */ | |
| u16 **pba_to_lba; /* physical to logical block map */ | |
| }; | |
| struct alauda_info { | |
| struct alauda_media_info port[2]; | |
| int wr_ep; /* endpoint to write data out of */ | |
| unsigned char sense_key; | |
| unsigned long sense_asc; /* additional sense code */ | |
| unsigned long sense_ascq; /* additional sense code qualifier */ | |
| }; | |
| #endif | |