101 lines
2.7 KiB
C
101 lines
2.7 KiB
C
/*
|
|
* 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
|
|
|