1 /* 2 * Driver for Alauda-based card readers 3 * 4 * Current development and maintenance by: 5 * (c) 2005 Daniel Drake <dsd@gentoo.org> 6 * 7 * See alauda.c for more explanation. 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU General Public License as published by the 11 * Free Software Foundation; either version 2, or (at your option) any 12 * later version. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, write to the Free Software Foundation, Inc., 21 * 675 Mass Ave, Cambridge, MA 02139, USA. 22 */ 23 24 #ifndef _USB_ALAUDA_H 25 #define _USB_ALAUDA_H 26 27 /* 28 * Status bytes 29 */ 30 #define ALAUDA_STATUS_ERROR 0x01 31 #define ALAUDA_STATUS_READY 0x40 32 33 /* 34 * Control opcodes (for request field) 35 */ 36 #define ALAUDA_GET_XD_MEDIA_STATUS 0x08 37 #define ALAUDA_GET_SM_MEDIA_STATUS 0x98 38 #define ALAUDA_ACK_XD_MEDIA_CHANGE 0x0a 39 #define ALAUDA_ACK_SM_MEDIA_CHANGE 0x9a 40 #define ALAUDA_GET_XD_MEDIA_SIG 0x86 41 #define ALAUDA_GET_SM_MEDIA_SIG 0x96 42 43 /* 44 * Bulk command identity (byte 0) 45 */ 46 #define ALAUDA_BULK_CMD 0x40 47 48 /* 49 * Bulk opcodes (byte 1) 50 */ 51 #define ALAUDA_BULK_GET_REDU_DATA 0x85 52 #define ALAUDA_BULK_READ_BLOCK 0x94 53 #define ALAUDA_BULK_ERASE_BLOCK 0xa3 54 #define ALAUDA_BULK_WRITE_BLOCK 0xb4 55 #define ALAUDA_BULK_GET_STATUS2 0xb7 56 #define ALAUDA_BULK_RESET_MEDIA 0xe0 57 58 /* 59 * Port to operate on (byte 8) 60 */ 61 #define ALAUDA_PORT_XD 0x00 62 #define ALAUDA_PORT_SM 0x01 63 64 /* 65 * LBA and PBA are unsigned ints. Special values. 66 */ 67 #define UNDEF 0xffff 68 #define SPARE 0xfffe 69 #define UNUSABLE 0xfffd 70 71 int init_alauda(struct us_data *us); 72 int alauda_transport(struct scsi_cmnd *srb, struct us_data *us); 73 74 struct alauda_media_info { 75 unsigned long capacity; /* total media size in bytes */ 76 unsigned int pagesize; /* page size in bytes */ 77 unsigned int blocksize; /* number of pages per block */ 78 unsigned int uzonesize; /* number of usable blocks per zone */ 79 unsigned int zonesize; /* number of blocks per zone */ 80 unsigned int blockmask; /* mask to get page from address */ 81 82 unsigned char pageshift; 83 unsigned char blockshift; 84 unsigned char zoneshift; 85 86 u16 **lba_to_pba; /* logical to physical block map */ 87 u16 **pba_to_lba; /* physical to logical block map */ 88 }; 89 90 struct alauda_info { 91 struct alauda_media_info port[2]; 92 int wr_ep; /* endpoint to write data out of */ 93 94 unsigned char sense_key; 95 unsigned long sense_asc; /* additional sense code */ 96 unsigned long sense_ascq; /* additional sense code qualifier */ 97 }; 98 99 #endif 100 101