Merge branch 'sh/for-2.6.28' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal...
[linux-2.6] / drivers / usb / storage / alauda.h
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