sddr09.c 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646
  1. /* Driver for SanDisk SDDR-09 SmartMedia reader
  2. *
  3. * $Id: sddr09.c,v 1.24 2002/04/22 03:39:43 mdharm Exp $
  4. * (c) 2000, 2001 Robert Baruch (autophile@starband.net)
  5. * (c) 2002 Andries Brouwer (aeb@cwi.nl)
  6. * Developed with the assistance of:
  7. * (c) 2002 Alan Stern <stern@rowland.org>
  8. *
  9. * The SanDisk SDDR-09 SmartMedia reader uses the Shuttle EUSB-01 chip.
  10. * This chip is a programmable USB controller. In the SDDR-09, it has
  11. * been programmed to obey a certain limited set of SCSI commands.
  12. * This driver translates the "real" SCSI commands to the SDDR-09 SCSI
  13. * commands.
  14. *
  15. * This program is free software; you can redistribute it and/or modify it
  16. * under the terms of the GNU General Public License as published by the
  17. * Free Software Foundation; either version 2, or (at your option) any
  18. * later version.
  19. *
  20. * This program is distributed in the hope that it will be useful, but
  21. * WITHOUT ANY WARRANTY; without even the implied warranty of
  22. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  23. * General Public License for more details.
  24. *
  25. * You should have received a copy of the GNU General Public License along
  26. * with this program; if not, write to the Free Software Foundation, Inc.,
  27. * 675 Mass Ave, Cambridge, MA 02139, USA.
  28. */
  29. /*
  30. * Known vendor commands: 12 bytes, first byte is opcode
  31. *
  32. * E7: read scatter gather
  33. * E8: read
  34. * E9: write
  35. * EA: erase
  36. * EB: reset
  37. * EC: read status
  38. * ED: read ID
  39. * EE: write CIS (?)
  40. * EF: compute checksum (?)
  41. */
  42. #include <linux/sched.h>
  43. #include <linux/errno.h>
  44. #include <linux/slab.h>
  45. #include <scsi/scsi.h>
  46. #include <scsi/scsi_cmnd.h>
  47. #include "usb.h"
  48. #include "transport.h"
  49. #include "protocol.h"
  50. #include "debug.h"
  51. #include "sddr09.h"
  52. #define short_pack(lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) )
  53. #define LSB_of(s) ((s)&0xFF)
  54. #define MSB_of(s) ((s)>>8)
  55. /* #define US_DEBUGP printk */
  56. /*
  57. * First some stuff that does not belong here:
  58. * data on SmartMedia and other cards, completely
  59. * unrelated to this driver.
  60. * Similar stuff occurs in <linux/mtd/nand_ids.h>.
  61. */
  62. struct nand_flash_dev {
  63. int model_id;
  64. int chipshift; /* 1<<cs bytes total capacity */
  65. char pageshift; /* 1<<ps bytes in a page */
  66. char blockshift; /* 1<<bs pages in an erase block */
  67. char zoneshift; /* 1<<zs blocks in a zone */
  68. /* # of logical blocks is 125/128 of this */
  69. char pageadrlen; /* length of an address in bytes - 1 */
  70. };
  71. /*
  72. * NAND Flash Manufacturer ID Codes
  73. */
  74. #define NAND_MFR_AMD 0x01
  75. #define NAND_MFR_NATSEMI 0x8f
  76. #define NAND_MFR_TOSHIBA 0x98
  77. #define NAND_MFR_SAMSUNG 0xec
  78. static inline char *nand_flash_manufacturer(int manuf_id) {
  79. switch(manuf_id) {
  80. case NAND_MFR_AMD:
  81. return "AMD";
  82. case NAND_MFR_NATSEMI:
  83. return "NATSEMI";
  84. case NAND_MFR_TOSHIBA:
  85. return "Toshiba";
  86. case NAND_MFR_SAMSUNG:
  87. return "Samsung";
  88. default:
  89. return "unknown";
  90. }
  91. }
  92. /*
  93. * It looks like it is unnecessary to attach manufacturer to the
  94. * remaining data: SSFDC prescribes manufacturer-independent id codes.
  95. *
  96. * 256 MB NAND flash has a 5-byte ID with 2nd byte 0xaa, 0xba, 0xca or 0xda.
  97. */
  98. static struct nand_flash_dev nand_flash_ids[] = {
  99. /* NAND flash */
  100. { 0x6e, 20, 8, 4, 8, 2}, /* 1 MB */
  101. { 0xe8, 20, 8, 4, 8, 2}, /* 1 MB */
  102. { 0xec, 20, 8, 4, 8, 2}, /* 1 MB */
  103. { 0x64, 21, 8, 4, 9, 2}, /* 2 MB */
  104. { 0xea, 21, 8, 4, 9, 2}, /* 2 MB */
  105. { 0x6b, 22, 9, 4, 9, 2}, /* 4 MB */
  106. { 0xe3, 22, 9, 4, 9, 2}, /* 4 MB */
  107. { 0xe5, 22, 9, 4, 9, 2}, /* 4 MB */
  108. { 0xe6, 23, 9, 4, 10, 2}, /* 8 MB */
  109. { 0x73, 24, 9, 5, 10, 2}, /* 16 MB */
  110. { 0x75, 25, 9, 5, 10, 2}, /* 32 MB */
  111. { 0x76, 26, 9, 5, 10, 3}, /* 64 MB */
  112. { 0x79, 27, 9, 5, 10, 3}, /* 128 MB */
  113. /* MASK ROM */
  114. { 0x5d, 21, 9, 4, 8, 2}, /* 2 MB */
  115. { 0xd5, 22, 9, 4, 9, 2}, /* 4 MB */
  116. { 0xd6, 23, 9, 4, 10, 2}, /* 8 MB */
  117. { 0x57, 24, 9, 4, 11, 2}, /* 16 MB */
  118. { 0x58, 25, 9, 4, 12, 2}, /* 32 MB */
  119. { 0,}
  120. };
  121. #define SIZE(a) (sizeof(a)/sizeof((a)[0]))
  122. static struct nand_flash_dev *
  123. nand_find_id(unsigned char id) {
  124. int i;
  125. for (i = 0; i < SIZE(nand_flash_ids); i++)
  126. if (nand_flash_ids[i].model_id == id)
  127. return &(nand_flash_ids[i]);
  128. return NULL;
  129. }
  130. /*
  131. * ECC computation.
  132. */
  133. static unsigned char parity[256];
  134. static unsigned char ecc2[256];
  135. static void nand_init_ecc(void) {
  136. int i, j, a;
  137. parity[0] = 0;
  138. for (i = 1; i < 256; i++)
  139. parity[i] = (parity[i&(i-1)] ^ 1);
  140. for (i = 0; i < 256; i++) {
  141. a = 0;
  142. for (j = 0; j < 8; j++) {
  143. if (i & (1<<j)) {
  144. if ((j & 1) == 0)
  145. a ^= 0x04;
  146. if ((j & 2) == 0)
  147. a ^= 0x10;
  148. if ((j & 4) == 0)
  149. a ^= 0x40;
  150. }
  151. }
  152. ecc2[i] = ~(a ^ (a<<1) ^ (parity[i] ? 0xa8 : 0));
  153. }
  154. }
  155. /* compute 3-byte ecc on 256 bytes */
  156. static void nand_compute_ecc(unsigned char *data, unsigned char *ecc) {
  157. int i, j, a;
  158. unsigned char par, bit, bits[8];
  159. par = 0;
  160. for (j = 0; j < 8; j++)
  161. bits[j] = 0;
  162. /* collect 16 checksum bits */
  163. for (i = 0; i < 256; i++) {
  164. par ^= data[i];
  165. bit = parity[data[i]];
  166. for (j = 0; j < 8; j++)
  167. if ((i & (1<<j)) == 0)
  168. bits[j] ^= bit;
  169. }
  170. /* put 4+4+4 = 12 bits in the ecc */
  171. a = (bits[3] << 6) + (bits[2] << 4) + (bits[1] << 2) + bits[0];
  172. ecc[0] = ~(a ^ (a<<1) ^ (parity[par] ? 0xaa : 0));
  173. a = (bits[7] << 6) + (bits[6] << 4) + (bits[5] << 2) + bits[4];
  174. ecc[1] = ~(a ^ (a<<1) ^ (parity[par] ? 0xaa : 0));
  175. ecc[2] = ecc2[par];
  176. }
  177. static int nand_compare_ecc(unsigned char *data, unsigned char *ecc) {
  178. return (data[0] == ecc[0] && data[1] == ecc[1] && data[2] == ecc[2]);
  179. }
  180. static void nand_store_ecc(unsigned char *data, unsigned char *ecc) {
  181. memcpy(data, ecc, 3);
  182. }
  183. /*
  184. * The actual driver starts here.
  185. */
  186. struct sddr09_card_info {
  187. unsigned long capacity; /* Size of card in bytes */
  188. int pagesize; /* Size of page in bytes */
  189. int pageshift; /* log2 of pagesize */
  190. int blocksize; /* Size of block in pages */
  191. int blockshift; /* log2 of blocksize */
  192. int blockmask; /* 2^blockshift - 1 */
  193. int *lba_to_pba; /* logical to physical map */
  194. int *pba_to_lba; /* physical to logical map */
  195. int lbact; /* number of available pages */
  196. int flags;
  197. #define SDDR09_WP 1 /* write protected */
  198. };
  199. /*
  200. * On my 16MB card, control blocks have size 64 (16 real control bytes,
  201. * and 48 junk bytes). In reality of course the card uses 16 control bytes,
  202. * so the reader makes up the remaining 48. Don't know whether these numbers
  203. * depend on the card. For now a constant.
  204. */
  205. #define CONTROL_SHIFT 6
  206. /*
  207. * On my Combo CF/SM reader, the SM reader has LUN 1.
  208. * (and things fail with LUN 0).
  209. * It seems LUN is irrelevant for others.
  210. */
  211. #define LUN 1
  212. #define LUNBITS (LUN << 5)
  213. /*
  214. * LBA and PBA are unsigned ints. Special values.
  215. */
  216. #define UNDEF 0xffffffff
  217. #define SPARE 0xfffffffe
  218. #define UNUSABLE 0xfffffffd
  219. static const int erase_bad_lba_entries = 0;
  220. /* send vendor interface command (0x41) */
  221. /* called for requests 0, 1, 8 */
  222. static int
  223. sddr09_send_command(struct us_data *us,
  224. unsigned char request,
  225. unsigned char direction,
  226. unsigned char *xfer_data,
  227. unsigned int xfer_len) {
  228. unsigned int pipe;
  229. unsigned char requesttype = (0x41 | direction);
  230. int rc;
  231. // Get the receive or send control pipe number
  232. if (direction == USB_DIR_IN)
  233. pipe = us->recv_ctrl_pipe;
  234. else
  235. pipe = us->send_ctrl_pipe;
  236. rc = usb_stor_ctrl_transfer(us, pipe, request, requesttype,
  237. 0, 0, xfer_data, xfer_len);
  238. return (rc == USB_STOR_XFER_GOOD ? USB_STOR_TRANSPORT_GOOD :
  239. USB_STOR_TRANSPORT_ERROR);
  240. }
  241. static int
  242. sddr09_send_scsi_command(struct us_data *us,
  243. unsigned char *command,
  244. unsigned int command_len) {
  245. return sddr09_send_command(us, 0, USB_DIR_OUT, command, command_len);
  246. }
  247. #if 0
  248. /*
  249. * Test Unit Ready Command: 12 bytes.
  250. * byte 0: opcode: 00
  251. */
  252. static int
  253. sddr09_test_unit_ready(struct us_data *us) {
  254. unsigned char *command = us->iobuf;
  255. int result;
  256. memset(command, 0, 6);
  257. command[1] = LUNBITS;
  258. result = sddr09_send_scsi_command(us, command, 6);
  259. US_DEBUGP("sddr09_test_unit_ready returns %d\n", result);
  260. return result;
  261. }
  262. #endif
  263. /*
  264. * Request Sense Command: 12 bytes.
  265. * byte 0: opcode: 03
  266. * byte 4: data length
  267. */
  268. static int
  269. sddr09_request_sense(struct us_data *us, unsigned char *sensebuf, int buflen) {
  270. unsigned char *command = us->iobuf;
  271. int result;
  272. memset(command, 0, 12);
  273. command[0] = 0x03;
  274. command[1] = LUNBITS;
  275. command[4] = buflen;
  276. result = sddr09_send_scsi_command(us, command, 12);
  277. if (result != USB_STOR_TRANSPORT_GOOD) {
  278. US_DEBUGP("request sense failed\n");
  279. return result;
  280. }
  281. result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
  282. sensebuf, buflen, NULL);
  283. if (result != USB_STOR_XFER_GOOD) {
  284. US_DEBUGP("request sense bulk in failed\n");
  285. return USB_STOR_TRANSPORT_ERROR;
  286. } else {
  287. US_DEBUGP("request sense worked\n");
  288. return USB_STOR_TRANSPORT_GOOD;
  289. }
  290. }
  291. /*
  292. * Read Command: 12 bytes.
  293. * byte 0: opcode: E8
  294. * byte 1: last two bits: 00: read data, 01: read blockwise control,
  295. * 10: read both, 11: read pagewise control.
  296. * It turns out we need values 20, 21, 22, 23 here (LUN 1).
  297. * bytes 2-5: address (interpretation depends on byte 1, see below)
  298. * bytes 10-11: count (idem)
  299. *
  300. * A page has 512 data bytes and 64 control bytes (16 control and 48 junk).
  301. * A read data command gets data in 512-byte pages.
  302. * A read control command gets control in 64-byte chunks.
  303. * A read both command gets data+control in 576-byte chunks.
  304. *
  305. * Blocks are groups of 32 pages, and read blockwise control jumps to the
  306. * next block, while read pagewise control jumps to the next page after
  307. * reading a group of 64 control bytes.
  308. * [Here 512 = 1<<pageshift, 32 = 1<<blockshift, 64 is constant?]
  309. *
  310. * (1 MB and 2 MB cards are a bit different, but I have only a 16 MB card.)
  311. */
  312. static int
  313. sddr09_readX(struct us_data *us, int x, unsigned long fromaddress,
  314. int nr_of_pages, int bulklen, unsigned char *buf,
  315. int use_sg) {
  316. unsigned char *command = us->iobuf;
  317. int result;
  318. command[0] = 0xE8;
  319. command[1] = LUNBITS | x;
  320. command[2] = MSB_of(fromaddress>>16);
  321. command[3] = LSB_of(fromaddress>>16);
  322. command[4] = MSB_of(fromaddress & 0xFFFF);
  323. command[5] = LSB_of(fromaddress & 0xFFFF);
  324. command[6] = 0;
  325. command[7] = 0;
  326. command[8] = 0;
  327. command[9] = 0;
  328. command[10] = MSB_of(nr_of_pages);
  329. command[11] = LSB_of(nr_of_pages);
  330. result = sddr09_send_scsi_command(us, command, 12);
  331. if (result != USB_STOR_TRANSPORT_GOOD) {
  332. US_DEBUGP("Result for send_control in sddr09_read2%d %d\n",
  333. x, result);
  334. return result;
  335. }
  336. result = usb_stor_bulk_transfer_sg(us, us->recv_bulk_pipe,
  337. buf, bulklen, use_sg, NULL);
  338. if (result != USB_STOR_XFER_GOOD) {
  339. US_DEBUGP("Result for bulk_transfer in sddr09_read2%d %d\n",
  340. x, result);
  341. return USB_STOR_TRANSPORT_ERROR;
  342. }
  343. return USB_STOR_TRANSPORT_GOOD;
  344. }
  345. /*
  346. * Read Data
  347. *
  348. * fromaddress counts data shorts:
  349. * increasing it by 256 shifts the bytestream by 512 bytes;
  350. * the last 8 bits are ignored.
  351. *
  352. * nr_of_pages counts pages of size (1 << pageshift).
  353. */
  354. static int
  355. sddr09_read20(struct us_data *us, unsigned long fromaddress,
  356. int nr_of_pages, int pageshift, unsigned char *buf, int use_sg) {
  357. int bulklen = nr_of_pages << pageshift;
  358. /* The last 8 bits of fromaddress are ignored. */
  359. return sddr09_readX(us, 0, fromaddress, nr_of_pages, bulklen,
  360. buf, use_sg);
  361. }
  362. /*
  363. * Read Blockwise Control
  364. *
  365. * fromaddress gives the starting position (as in read data;
  366. * the last 8 bits are ignored); increasing it by 32*256 shifts
  367. * the output stream by 64 bytes.
  368. *
  369. * count counts control groups of size (1 << controlshift).
  370. * For me, controlshift = 6. Is this constant?
  371. *
  372. * After getting one control group, jump to the next block
  373. * (fromaddress += 8192).
  374. */
  375. static int
  376. sddr09_read21(struct us_data *us, unsigned long fromaddress,
  377. int count, int controlshift, unsigned char *buf, int use_sg) {
  378. int bulklen = (count << controlshift);
  379. return sddr09_readX(us, 1, fromaddress, count, bulklen,
  380. buf, use_sg);
  381. }
  382. /*
  383. * Read both Data and Control
  384. *
  385. * fromaddress counts data shorts, ignoring control:
  386. * increasing it by 256 shifts the bytestream by 576 = 512+64 bytes;
  387. * the last 8 bits are ignored.
  388. *
  389. * nr_of_pages counts pages of size (1 << pageshift) + (1 << controlshift).
  390. */
  391. static int
  392. sddr09_read22(struct us_data *us, unsigned long fromaddress,
  393. int nr_of_pages, int pageshift, unsigned char *buf, int use_sg) {
  394. int bulklen = (nr_of_pages << pageshift) + (nr_of_pages << CONTROL_SHIFT);
  395. US_DEBUGP("sddr09_read22: reading %d pages, %d bytes\n",
  396. nr_of_pages, bulklen);
  397. return sddr09_readX(us, 2, fromaddress, nr_of_pages, bulklen,
  398. buf, use_sg);
  399. }
  400. #if 0
  401. /*
  402. * Read Pagewise Control
  403. *
  404. * fromaddress gives the starting position (as in read data;
  405. * the last 8 bits are ignored); increasing it by 256 shifts
  406. * the output stream by 64 bytes.
  407. *
  408. * count counts control groups of size (1 << controlshift).
  409. * For me, controlshift = 6. Is this constant?
  410. *
  411. * After getting one control group, jump to the next page
  412. * (fromaddress += 256).
  413. */
  414. static int
  415. sddr09_read23(struct us_data *us, unsigned long fromaddress,
  416. int count, int controlshift, unsigned char *buf, int use_sg) {
  417. int bulklen = (count << controlshift);
  418. return sddr09_readX(us, 3, fromaddress, count, bulklen,
  419. buf, use_sg);
  420. }
  421. #endif
  422. /*
  423. * Erase Command: 12 bytes.
  424. * byte 0: opcode: EA
  425. * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
  426. *
  427. * Always precisely one block is erased; bytes 2-5 and 10-11 are ignored.
  428. * The byte address being erased is 2*Eaddress.
  429. * The CIS cannot be erased.
  430. */
  431. static int
  432. sddr09_erase(struct us_data *us, unsigned long Eaddress) {
  433. unsigned char *command = us->iobuf;
  434. int result;
  435. US_DEBUGP("sddr09_erase: erase address %lu\n", Eaddress);
  436. memset(command, 0, 12);
  437. command[0] = 0xEA;
  438. command[1] = LUNBITS;
  439. command[6] = MSB_of(Eaddress>>16);
  440. command[7] = LSB_of(Eaddress>>16);
  441. command[8] = MSB_of(Eaddress & 0xFFFF);
  442. command[9] = LSB_of(Eaddress & 0xFFFF);
  443. result = sddr09_send_scsi_command(us, command, 12);
  444. if (result != USB_STOR_TRANSPORT_GOOD)
  445. US_DEBUGP("Result for send_control in sddr09_erase %d\n",
  446. result);
  447. return result;
  448. }
  449. /*
  450. * Write CIS Command: 12 bytes.
  451. * byte 0: opcode: EE
  452. * bytes 2-5: write address in shorts
  453. * bytes 10-11: sector count
  454. *
  455. * This writes at the indicated address. Don't know how it differs
  456. * from E9. Maybe it does not erase? However, it will also write to
  457. * the CIS.
  458. *
  459. * When two such commands on the same page follow each other directly,
  460. * the second one is not done.
  461. */
  462. /*
  463. * Write Command: 12 bytes.
  464. * byte 0: opcode: E9
  465. * bytes 2-5: write address (big-endian, counting shorts, sector aligned).
  466. * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
  467. * bytes 10-11: sector count (big-endian, in 512-byte sectors).
  468. *
  469. * If write address equals erase address, the erase is done first,
  470. * otherwise the write is done first. When erase address equals zero
  471. * no erase is done?
  472. */
  473. static int
  474. sddr09_writeX(struct us_data *us,
  475. unsigned long Waddress, unsigned long Eaddress,
  476. int nr_of_pages, int bulklen, unsigned char *buf, int use_sg) {
  477. unsigned char *command = us->iobuf;
  478. int result;
  479. command[0] = 0xE9;
  480. command[1] = LUNBITS;
  481. command[2] = MSB_of(Waddress>>16);
  482. command[3] = LSB_of(Waddress>>16);
  483. command[4] = MSB_of(Waddress & 0xFFFF);
  484. command[5] = LSB_of(Waddress & 0xFFFF);
  485. command[6] = MSB_of(Eaddress>>16);
  486. command[7] = LSB_of(Eaddress>>16);
  487. command[8] = MSB_of(Eaddress & 0xFFFF);
  488. command[9] = LSB_of(Eaddress & 0xFFFF);
  489. command[10] = MSB_of(nr_of_pages);
  490. command[11] = LSB_of(nr_of_pages);
  491. result = sddr09_send_scsi_command(us, command, 12);
  492. if (result != USB_STOR_TRANSPORT_GOOD) {
  493. US_DEBUGP("Result for send_control in sddr09_writeX %d\n",
  494. result);
  495. return result;
  496. }
  497. result = usb_stor_bulk_transfer_sg(us, us->send_bulk_pipe,
  498. buf, bulklen, use_sg, NULL);
  499. if (result != USB_STOR_XFER_GOOD) {
  500. US_DEBUGP("Result for bulk_transfer in sddr09_writeX %d\n",
  501. result);
  502. return USB_STOR_TRANSPORT_ERROR;
  503. }
  504. return USB_STOR_TRANSPORT_GOOD;
  505. }
  506. /* erase address, write same address */
  507. static int
  508. sddr09_write_inplace(struct us_data *us, unsigned long address,
  509. int nr_of_pages, int pageshift, unsigned char *buf,
  510. int use_sg) {
  511. int bulklen = (nr_of_pages << pageshift) + (nr_of_pages << CONTROL_SHIFT);
  512. return sddr09_writeX(us, address, address, nr_of_pages, bulklen,
  513. buf, use_sg);
  514. }
  515. #if 0
  516. /*
  517. * Read Scatter Gather Command: 3+4n bytes.
  518. * byte 0: opcode E7
  519. * byte 2: n
  520. * bytes 4i-1,4i,4i+1: page address
  521. * byte 4i+2: page count
  522. * (i=1..n)
  523. *
  524. * This reads several pages from the card to a single memory buffer.
  525. * The last two bits of byte 1 have the same meaning as for E8.
  526. */
  527. static int
  528. sddr09_read_sg_test_only(struct us_data *us) {
  529. unsigned char *command = us->iobuf;
  530. int result, bulklen, nsg, ct;
  531. unsigned char *buf;
  532. unsigned long address;
  533. nsg = bulklen = 0;
  534. command[0] = 0xE7;
  535. command[1] = LUNBITS;
  536. command[2] = 0;
  537. address = 040000; ct = 1;
  538. nsg++;
  539. bulklen += (ct << 9);
  540. command[4*nsg+2] = ct;
  541. command[4*nsg+1] = ((address >> 9) & 0xFF);
  542. command[4*nsg+0] = ((address >> 17) & 0xFF);
  543. command[4*nsg-1] = ((address >> 25) & 0xFF);
  544. address = 0340000; ct = 1;
  545. nsg++;
  546. bulklen += (ct << 9);
  547. command[4*nsg+2] = ct;
  548. command[4*nsg+1] = ((address >> 9) & 0xFF);
  549. command[4*nsg+0] = ((address >> 17) & 0xFF);
  550. command[4*nsg-1] = ((address >> 25) & 0xFF);
  551. address = 01000000; ct = 2;
  552. nsg++;
  553. bulklen += (ct << 9);
  554. command[4*nsg+2] = ct;
  555. command[4*nsg+1] = ((address >> 9) & 0xFF);
  556. command[4*nsg+0] = ((address >> 17) & 0xFF);
  557. command[4*nsg-1] = ((address >> 25) & 0xFF);
  558. command[2] = nsg;
  559. result = sddr09_send_scsi_command(us, command, 4*nsg+3);
  560. if (result != USB_STOR_TRANSPORT_GOOD) {
  561. US_DEBUGP("Result for send_control in sddr09_read_sg %d\n",
  562. result);
  563. return result;
  564. }
  565. buf = (unsigned char *) kmalloc(bulklen, GFP_NOIO);
  566. if (!buf)
  567. return USB_STOR_TRANSPORT_ERROR;
  568. result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
  569. buf, bulklen, NULL);
  570. kfree(buf);
  571. if (result != USB_STOR_XFER_GOOD) {
  572. US_DEBUGP("Result for bulk_transfer in sddr09_read_sg %d\n",
  573. result);
  574. return USB_STOR_TRANSPORT_ERROR;
  575. }
  576. return USB_STOR_TRANSPORT_GOOD;
  577. }
  578. #endif
  579. /*
  580. * Read Status Command: 12 bytes.
  581. * byte 0: opcode: EC
  582. *
  583. * Returns 64 bytes, all zero except for the first.
  584. * bit 0: 1: Error
  585. * bit 5: 1: Suspended
  586. * bit 6: 1: Ready
  587. * bit 7: 1: Not write-protected
  588. */
  589. static int
  590. sddr09_read_status(struct us_data *us, unsigned char *status) {
  591. unsigned char *command = us->iobuf;
  592. unsigned char *data = us->iobuf;
  593. int result;
  594. US_DEBUGP("Reading status...\n");
  595. memset(command, 0, 12);
  596. command[0] = 0xEC;
  597. command[1] = LUNBITS;
  598. result = sddr09_send_scsi_command(us, command, 12);
  599. if (result != USB_STOR_TRANSPORT_GOOD)
  600. return result;
  601. result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
  602. data, 64, NULL);
  603. *status = data[0];
  604. return (result == USB_STOR_XFER_GOOD ?
  605. USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
  606. }
  607. static int
  608. sddr09_read_data(struct us_data *us,
  609. unsigned long address,
  610. unsigned int sectors) {
  611. struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
  612. unsigned char *buffer;
  613. unsigned int lba, maxlba, pba;
  614. unsigned int page, pages;
  615. unsigned int len, index, offset;
  616. int result;
  617. // Since we only read in one block at a time, we have to create
  618. // a bounce buffer and move the data a piece at a time between the
  619. // bounce buffer and the actual transfer buffer.
  620. len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
  621. buffer = kmalloc(len, GFP_NOIO);
  622. if (buffer == NULL) {
  623. printk("sddr09_read_data: Out of memory\n");
  624. return USB_STOR_TRANSPORT_ERROR;
  625. }
  626. // Figure out the initial LBA and page
  627. lba = address >> info->blockshift;
  628. page = (address & info->blockmask);
  629. maxlba = info->capacity >> (info->pageshift + info->blockshift);
  630. // This could be made much more efficient by checking for
  631. // contiguous LBA's. Another exercise left to the student.
  632. result = USB_STOR_TRANSPORT_GOOD;
  633. index = offset = 0;
  634. while (sectors > 0) {
  635. /* Find number of pages we can read in this block */
  636. pages = min(sectors, info->blocksize - page);
  637. len = pages << info->pageshift;
  638. /* Not overflowing capacity? */
  639. if (lba >= maxlba) {
  640. US_DEBUGP("Error: Requested lba %u exceeds "
  641. "maximum %u\n", lba, maxlba);
  642. result = USB_STOR_TRANSPORT_ERROR;
  643. break;
  644. }
  645. /* Find where this lba lives on disk */
  646. pba = info->lba_to_pba[lba];
  647. if (pba == UNDEF) { /* this lba was never written */
  648. US_DEBUGP("Read %d zero pages (LBA %d) page %d\n",
  649. pages, lba, page);
  650. /* This is not really an error. It just means
  651. that the block has never been written.
  652. Instead of returning USB_STOR_TRANSPORT_ERROR
  653. it is better to return all zero data. */
  654. memset(buffer, 0, len);
  655. } else {
  656. US_DEBUGP("Read %d pages, from PBA %d"
  657. " (LBA %d) page %d\n",
  658. pages, pba, lba, page);
  659. address = ((pba << info->blockshift) + page) <<
  660. info->pageshift;
  661. result = sddr09_read20(us, address>>1,
  662. pages, info->pageshift, buffer, 0);
  663. if (result != USB_STOR_TRANSPORT_GOOD)
  664. break;
  665. }
  666. // Store the data in the transfer buffer
  667. usb_stor_access_xfer_buf(buffer, len, us->srb,
  668. &index, &offset, TO_XFER_BUF);
  669. page = 0;
  670. lba++;
  671. sectors -= pages;
  672. }
  673. kfree(buffer);
  674. return result;
  675. }
  676. static unsigned int
  677. sddr09_find_unused_pba(struct sddr09_card_info *info, unsigned int lba) {
  678. static unsigned int lastpba = 1;
  679. int zonestart, end, i;
  680. zonestart = (lba/1000) << 10;
  681. end = info->capacity >> (info->blockshift + info->pageshift);
  682. end -= zonestart;
  683. if (end > 1024)
  684. end = 1024;
  685. for (i = lastpba+1; i < end; i++) {
  686. if (info->pba_to_lba[zonestart+i] == UNDEF) {
  687. lastpba = i;
  688. return zonestart+i;
  689. }
  690. }
  691. for (i = 0; i <= lastpba; i++) {
  692. if (info->pba_to_lba[zonestart+i] == UNDEF) {
  693. lastpba = i;
  694. return zonestart+i;
  695. }
  696. }
  697. return 0;
  698. }
  699. static int
  700. sddr09_write_lba(struct us_data *us, unsigned int lba,
  701. unsigned int page, unsigned int pages,
  702. unsigned char *ptr, unsigned char *blockbuffer) {
  703. struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
  704. unsigned long address;
  705. unsigned int pba, lbap;
  706. unsigned int pagelen;
  707. unsigned char *bptr, *cptr, *xptr;
  708. unsigned char ecc[3];
  709. int i, result, isnew;
  710. lbap = ((lba % 1000) << 1) | 0x1000;
  711. if (parity[MSB_of(lbap) ^ LSB_of(lbap)])
  712. lbap ^= 1;
  713. pba = info->lba_to_pba[lba];
  714. isnew = 0;
  715. if (pba == UNDEF) {
  716. pba = sddr09_find_unused_pba(info, lba);
  717. if (!pba) {
  718. printk("sddr09_write_lba: Out of unused blocks\n");
  719. return USB_STOR_TRANSPORT_ERROR;
  720. }
  721. info->pba_to_lba[pba] = lba;
  722. info->lba_to_pba[lba] = pba;
  723. isnew = 1;
  724. }
  725. if (pba == 1) {
  726. /* Maybe it is impossible to write to PBA 1.
  727. Fake success, but don't do anything. */
  728. printk("sddr09: avoid writing to pba 1\n");
  729. return USB_STOR_TRANSPORT_GOOD;
  730. }
  731. pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
  732. /* read old contents */
  733. address = (pba << (info->pageshift + info->blockshift));
  734. result = sddr09_read22(us, address>>1, info->blocksize,
  735. info->pageshift, blockbuffer, 0);
  736. if (result != USB_STOR_TRANSPORT_GOOD)
  737. return result;
  738. /* check old contents and fill lba */
  739. for (i = 0; i < info->blocksize; i++) {
  740. bptr = blockbuffer + i*pagelen;
  741. cptr = bptr + info->pagesize;
  742. nand_compute_ecc(bptr, ecc);
  743. if (!nand_compare_ecc(cptr+13, ecc)) {
  744. US_DEBUGP("Warning: bad ecc in page %d- of pba %d\n",
  745. i, pba);
  746. nand_store_ecc(cptr+13, ecc);
  747. }
  748. nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
  749. if (!nand_compare_ecc(cptr+8, ecc)) {
  750. US_DEBUGP("Warning: bad ecc in page %d+ of pba %d\n",
  751. i, pba);
  752. nand_store_ecc(cptr+8, ecc);
  753. }
  754. cptr[6] = cptr[11] = MSB_of(lbap);
  755. cptr[7] = cptr[12] = LSB_of(lbap);
  756. }
  757. /* copy in new stuff and compute ECC */
  758. xptr = ptr;
  759. for (i = page; i < page+pages; i++) {
  760. bptr = blockbuffer + i*pagelen;
  761. cptr = bptr + info->pagesize;
  762. memcpy(bptr, xptr, info->pagesize);
  763. xptr += info->pagesize;
  764. nand_compute_ecc(bptr, ecc);
  765. nand_store_ecc(cptr+13, ecc);
  766. nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
  767. nand_store_ecc(cptr+8, ecc);
  768. }
  769. US_DEBUGP("Rewrite PBA %d (LBA %d)\n", pba, lba);
  770. result = sddr09_write_inplace(us, address>>1, info->blocksize,
  771. info->pageshift, blockbuffer, 0);
  772. US_DEBUGP("sddr09_write_inplace returns %d\n", result);
  773. #if 0
  774. {
  775. unsigned char status = 0;
  776. int result2 = sddr09_read_status(us, &status);
  777. if (result2 != USB_STOR_TRANSPORT_GOOD)
  778. US_DEBUGP("sddr09_write_inplace: cannot read status\n");
  779. else if (status != 0xc0)
  780. US_DEBUGP("sddr09_write_inplace: status after write: 0x%x\n",
  781. status);
  782. }
  783. #endif
  784. #if 0
  785. {
  786. int result2 = sddr09_test_unit_ready(us);
  787. }
  788. #endif
  789. return result;
  790. }
  791. static int
  792. sddr09_write_data(struct us_data *us,
  793. unsigned long address,
  794. unsigned int sectors) {
  795. struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
  796. unsigned int lba, page, pages;
  797. unsigned int pagelen, blocklen;
  798. unsigned char *blockbuffer;
  799. unsigned char *buffer;
  800. unsigned int len, index, offset;
  801. int result;
  802. // blockbuffer is used for reading in the old data, overwriting
  803. // with the new data, and performing ECC calculations
  804. /* TODO: instead of doing kmalloc/kfree for each write,
  805. add a bufferpointer to the info structure */
  806. pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
  807. blocklen = (pagelen << info->blockshift);
  808. blockbuffer = kmalloc(blocklen, GFP_NOIO);
  809. if (!blockbuffer) {
  810. printk("sddr09_write_data: Out of memory\n");
  811. return USB_STOR_TRANSPORT_ERROR;
  812. }
  813. // Since we don't write the user data directly to the device,
  814. // we have to create a bounce buffer and move the data a piece
  815. // at a time between the bounce buffer and the actual transfer buffer.
  816. len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
  817. buffer = kmalloc(len, GFP_NOIO);
  818. if (buffer == NULL) {
  819. printk("sddr09_write_data: Out of memory\n");
  820. kfree(blockbuffer);
  821. return USB_STOR_TRANSPORT_ERROR;
  822. }
  823. // Figure out the initial LBA and page
  824. lba = address >> info->blockshift;
  825. page = (address & info->blockmask);
  826. result = USB_STOR_TRANSPORT_GOOD;
  827. index = offset = 0;
  828. while (sectors > 0) {
  829. // Write as many sectors as possible in this block
  830. pages = min(sectors, info->blocksize - page);
  831. len = (pages << info->pageshift);
  832. // Get the data from the transfer buffer
  833. usb_stor_access_xfer_buf(buffer, len, us->srb,
  834. &index, &offset, FROM_XFER_BUF);
  835. result = sddr09_write_lba(us, lba, page, pages,
  836. buffer, blockbuffer);
  837. if (result != USB_STOR_TRANSPORT_GOOD)
  838. break;
  839. page = 0;
  840. lba++;
  841. sectors -= pages;
  842. }
  843. kfree(buffer);
  844. kfree(blockbuffer);
  845. return result;
  846. }
  847. static int
  848. sddr09_read_control(struct us_data *us,
  849. unsigned long address,
  850. unsigned int blocks,
  851. unsigned char *content,
  852. int use_sg) {
  853. US_DEBUGP("Read control address %lu, blocks %d\n",
  854. address, blocks);
  855. return sddr09_read21(us, address, blocks,
  856. CONTROL_SHIFT, content, use_sg);
  857. }
  858. /*
  859. * Read Device ID Command: 12 bytes.
  860. * byte 0: opcode: ED
  861. *
  862. * Returns 2 bytes: Manufacturer ID and Device ID.
  863. * On more recent cards 3 bytes: the third byte is an option code A5
  864. * signifying that the secret command to read an 128-bit ID is available.
  865. * On still more recent cards 4 bytes: the fourth byte C0 means that
  866. * a second read ID cmd is available.
  867. */
  868. static int
  869. sddr09_read_deviceID(struct us_data *us, unsigned char *deviceID) {
  870. unsigned char *command = us->iobuf;
  871. unsigned char *content = us->iobuf;
  872. int result, i;
  873. memset(command, 0, 12);
  874. command[0] = 0xED;
  875. command[1] = LUNBITS;
  876. result = sddr09_send_scsi_command(us, command, 12);
  877. if (result != USB_STOR_TRANSPORT_GOOD)
  878. return result;
  879. result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
  880. content, 64, NULL);
  881. for (i = 0; i < 4; i++)
  882. deviceID[i] = content[i];
  883. return (result == USB_STOR_XFER_GOOD ?
  884. USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
  885. }
  886. static int
  887. sddr09_get_wp(struct us_data *us, struct sddr09_card_info *info) {
  888. int result;
  889. unsigned char status;
  890. result = sddr09_read_status(us, &status);
  891. if (result != USB_STOR_TRANSPORT_GOOD) {
  892. US_DEBUGP("sddr09_get_wp: read_status fails\n");
  893. return result;
  894. }
  895. US_DEBUGP("sddr09_get_wp: status 0x%02X", status);
  896. if ((status & 0x80) == 0) {
  897. info->flags |= SDDR09_WP; /* write protected */
  898. US_DEBUGP(" WP");
  899. }
  900. if (status & 0x40)
  901. US_DEBUGP(" Ready");
  902. if (status & LUNBITS)
  903. US_DEBUGP(" Suspended");
  904. if (status & 0x1)
  905. US_DEBUGP(" Error");
  906. US_DEBUGP("\n");
  907. return USB_STOR_TRANSPORT_GOOD;
  908. }
  909. #if 0
  910. /*
  911. * Reset Command: 12 bytes.
  912. * byte 0: opcode: EB
  913. */
  914. static int
  915. sddr09_reset(struct us_data *us) {
  916. unsigned char *command = us->iobuf;
  917. memset(command, 0, 12);
  918. command[0] = 0xEB;
  919. command[1] = LUNBITS;
  920. return sddr09_send_scsi_command(us, command, 12);
  921. }
  922. #endif
  923. static struct nand_flash_dev *
  924. sddr09_get_cardinfo(struct us_data *us, unsigned char flags) {
  925. struct nand_flash_dev *cardinfo;
  926. unsigned char deviceID[4];
  927. char blurbtxt[256];
  928. int result;
  929. US_DEBUGP("Reading capacity...\n");
  930. result = sddr09_read_deviceID(us, deviceID);
  931. if (result != USB_STOR_TRANSPORT_GOOD) {
  932. US_DEBUGP("Result of read_deviceID is %d\n", result);
  933. printk("sddr09: could not read card info\n");
  934. return NULL;
  935. }
  936. sprintf(blurbtxt, "sddr09: Found Flash card, ID = %02X %02X %02X %02X",
  937. deviceID[0], deviceID[1], deviceID[2], deviceID[3]);
  938. /* Byte 0 is the manufacturer */
  939. sprintf(blurbtxt + strlen(blurbtxt),
  940. ": Manuf. %s",
  941. nand_flash_manufacturer(deviceID[0]));
  942. /* Byte 1 is the device type */
  943. cardinfo = nand_find_id(deviceID[1]);
  944. if (cardinfo) {
  945. /* MB or MiB? It is neither. A 16 MB card has
  946. 17301504 raw bytes, of which 16384000 are
  947. usable for user data. */
  948. sprintf(blurbtxt + strlen(blurbtxt),
  949. ", %d MB", 1<<(cardinfo->chipshift - 20));
  950. } else {
  951. sprintf(blurbtxt + strlen(blurbtxt),
  952. ", type unrecognized");
  953. }
  954. /* Byte 2 is code to signal availability of 128-bit ID */
  955. if (deviceID[2] == 0xa5) {
  956. sprintf(blurbtxt + strlen(blurbtxt),
  957. ", 128-bit ID");
  958. }
  959. /* Byte 3 announces the availability of another read ID command */
  960. if (deviceID[3] == 0xc0) {
  961. sprintf(blurbtxt + strlen(blurbtxt),
  962. ", extra cmd");
  963. }
  964. if (flags & SDDR09_WP)
  965. sprintf(blurbtxt + strlen(blurbtxt),
  966. ", WP");
  967. printk("%s\n", blurbtxt);
  968. return cardinfo;
  969. }
  970. static int
  971. sddr09_read_map(struct us_data *us) {
  972. struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
  973. int numblocks, alloc_len, alloc_blocks;
  974. int i, j, result;
  975. unsigned char *buffer, *buffer_end, *ptr;
  976. unsigned int lba, lbact;
  977. if (!info->capacity)
  978. return -1;
  979. // size of a block is 1 << (blockshift + pageshift) bytes
  980. // divide into the total capacity to get the number of blocks
  981. numblocks = info->capacity >> (info->blockshift + info->pageshift);
  982. // read 64 bytes for every block (actually 1 << CONTROL_SHIFT)
  983. // but only use a 64 KB buffer
  984. // buffer size used must be a multiple of (1 << CONTROL_SHIFT)
  985. #define SDDR09_READ_MAP_BUFSZ 65536
  986. alloc_blocks = min(numblocks, SDDR09_READ_MAP_BUFSZ >> CONTROL_SHIFT);
  987. alloc_len = (alloc_blocks << CONTROL_SHIFT);
  988. buffer = kmalloc(alloc_len, GFP_NOIO);
  989. if (buffer == NULL) {
  990. printk("sddr09_read_map: out of memory\n");
  991. result = -1;
  992. goto done;
  993. }
  994. buffer_end = buffer + alloc_len;
  995. #undef SDDR09_READ_MAP_BUFSZ
  996. kfree(info->lba_to_pba);
  997. kfree(info->pba_to_lba);
  998. info->lba_to_pba = kmalloc(numblocks*sizeof(int), GFP_NOIO);
  999. info->pba_to_lba = kmalloc(numblocks*sizeof(int), GFP_NOIO);
  1000. if (info->lba_to_pba == NULL || info->pba_to_lba == NULL) {
  1001. printk("sddr09_read_map: out of memory\n");
  1002. result = -1;
  1003. goto done;
  1004. }
  1005. for (i = 0; i < numblocks; i++)
  1006. info->lba_to_pba[i] = info->pba_to_lba[i] = UNDEF;
  1007. /*
  1008. * Define lba-pba translation table
  1009. */
  1010. ptr = buffer_end;
  1011. for (i = 0; i < numblocks; i++) {
  1012. ptr += (1 << CONTROL_SHIFT);
  1013. if (ptr >= buffer_end) {
  1014. unsigned long address;
  1015. address = i << (info->pageshift + info->blockshift);
  1016. result = sddr09_read_control(
  1017. us, address>>1,
  1018. min(alloc_blocks, numblocks - i),
  1019. buffer, 0);
  1020. if (result != USB_STOR_TRANSPORT_GOOD) {
  1021. result = -1;
  1022. goto done;
  1023. }
  1024. ptr = buffer;
  1025. }
  1026. if (i == 0 || i == 1) {
  1027. info->pba_to_lba[i] = UNUSABLE;
  1028. continue;
  1029. }
  1030. /* special PBAs have control field 0^16 */
  1031. for (j = 0; j < 16; j++)
  1032. if (ptr[j] != 0)
  1033. goto nonz;
  1034. info->pba_to_lba[i] = UNUSABLE;
  1035. printk("sddr09: PBA %d has no logical mapping\n", i);
  1036. continue;
  1037. nonz:
  1038. /* unwritten PBAs have control field FF^16 */
  1039. for (j = 0; j < 16; j++)
  1040. if (ptr[j] != 0xff)
  1041. goto nonff;
  1042. continue;
  1043. nonff:
  1044. /* normal PBAs start with six FFs */
  1045. if (j < 6) {
  1046. printk("sddr09: PBA %d has no logical mapping: "
  1047. "reserved area = %02X%02X%02X%02X "
  1048. "data status %02X block status %02X\n",
  1049. i, ptr[0], ptr[1], ptr[2], ptr[3],
  1050. ptr[4], ptr[5]);
  1051. info->pba_to_lba[i] = UNUSABLE;
  1052. continue;
  1053. }
  1054. if ((ptr[6] >> 4) != 0x01) {
  1055. printk("sddr09: PBA %d has invalid address field "
  1056. "%02X%02X/%02X%02X\n",
  1057. i, ptr[6], ptr[7], ptr[11], ptr[12]);
  1058. info->pba_to_lba[i] = UNUSABLE;
  1059. continue;
  1060. }
  1061. /* check even parity */
  1062. if (parity[ptr[6] ^ ptr[7]]) {
  1063. printk("sddr09: Bad parity in LBA for block %d"
  1064. " (%02X %02X)\n", i, ptr[6], ptr[7]);
  1065. info->pba_to_lba[i] = UNUSABLE;
  1066. continue;
  1067. }
  1068. lba = short_pack(ptr[7], ptr[6]);
  1069. lba = (lba & 0x07FF) >> 1;
  1070. /*
  1071. * Every 1024 physical blocks ("zone"), the LBA numbers
  1072. * go back to zero, but are within a higher block of LBA's.
  1073. * Also, there is a maximum of 1000 LBA's per zone.
  1074. * In other words, in PBA 1024-2047 you will find LBA 0-999
  1075. * which are really LBA 1000-1999. This allows for 24 bad
  1076. * or special physical blocks per zone.
  1077. */
  1078. if (lba >= 1000) {
  1079. printk("sddr09: Bad low LBA %d for block %d\n",
  1080. lba, i);
  1081. goto possibly_erase;
  1082. }
  1083. lba += 1000*(i/0x400);
  1084. if (info->lba_to_pba[lba] != UNDEF) {
  1085. printk("sddr09: LBA %d seen for PBA %d and %d\n",
  1086. lba, info->lba_to_pba[lba], i);
  1087. goto possibly_erase;
  1088. }
  1089. info->pba_to_lba[i] = lba;
  1090. info->lba_to_pba[lba] = i;
  1091. continue;
  1092. possibly_erase:
  1093. if (erase_bad_lba_entries) {
  1094. unsigned long address;
  1095. address = (i << (info->pageshift + info->blockshift));
  1096. sddr09_erase(us, address>>1);
  1097. info->pba_to_lba[i] = UNDEF;
  1098. } else
  1099. info->pba_to_lba[i] = UNUSABLE;
  1100. }
  1101. /*
  1102. * Approximate capacity. This is not entirely correct yet,
  1103. * since a zone with less than 1000 usable pages leads to
  1104. * missing LBAs. Especially if it is the last zone, some
  1105. * LBAs can be past capacity.
  1106. */
  1107. lbact = 0;
  1108. for (i = 0; i < numblocks; i += 1024) {
  1109. int ct = 0;
  1110. for (j = 0; j < 1024 && i+j < numblocks; j++) {
  1111. if (info->pba_to_lba[i+j] != UNUSABLE) {
  1112. if (ct >= 1000)
  1113. info->pba_to_lba[i+j] = SPARE;
  1114. else
  1115. ct++;
  1116. }
  1117. }
  1118. lbact += ct;
  1119. }
  1120. info->lbact = lbact;
  1121. US_DEBUGP("Found %d LBA's\n", lbact);
  1122. result = 0;
  1123. done:
  1124. if (result != 0) {
  1125. kfree(info->lba_to_pba);
  1126. kfree(info->pba_to_lba);
  1127. info->lba_to_pba = NULL;
  1128. info->pba_to_lba = NULL;
  1129. }
  1130. kfree(buffer);
  1131. return result;
  1132. }
  1133. static void
  1134. sddr09_card_info_destructor(void *extra) {
  1135. struct sddr09_card_info *info = (struct sddr09_card_info *)extra;
  1136. if (!info)
  1137. return;
  1138. kfree(info->lba_to_pba);
  1139. kfree(info->pba_to_lba);
  1140. }
  1141. static int
  1142. sddr09_common_init(struct us_data *us) {
  1143. int result;
  1144. /* set the configuration -- STALL is an acceptable response here */
  1145. if (us->pusb_dev->actconfig->desc.bConfigurationValue != 1) {
  1146. US_DEBUGP("active config #%d != 1 ??\n", us->pusb_dev
  1147. ->actconfig->desc.bConfigurationValue);
  1148. return -EINVAL;
  1149. }
  1150. result = usb_reset_configuration(us->pusb_dev);
  1151. US_DEBUGP("Result of usb_reset_configuration is %d\n", result);
  1152. if (result == -EPIPE) {
  1153. US_DEBUGP("-- stall on control interface\n");
  1154. } else if (result != 0) {
  1155. /* it's not a stall, but another error -- time to bail */
  1156. US_DEBUGP("-- Unknown error. Rejecting device\n");
  1157. return -EINVAL;
  1158. }
  1159. us->extra = kzalloc(sizeof(struct sddr09_card_info), GFP_NOIO);
  1160. if (!us->extra)
  1161. return -ENOMEM;
  1162. us->extra_destructor = sddr09_card_info_destructor;
  1163. nand_init_ecc();
  1164. return 0;
  1165. }
  1166. /*
  1167. * This is needed at a very early stage. If this is not listed in the
  1168. * unusual devices list but called from here then LUN 0 of the combo reader
  1169. * is not recognized. But I do not know what precisely these calls do.
  1170. */
  1171. int
  1172. usb_stor_sddr09_dpcm_init(struct us_data *us) {
  1173. int result;
  1174. unsigned char *data = us->iobuf;
  1175. result = sddr09_common_init(us);
  1176. if (result)
  1177. return result;
  1178. result = sddr09_send_command(us, 0x01, USB_DIR_IN, data, 2);
  1179. if (result != USB_STOR_TRANSPORT_GOOD) {
  1180. US_DEBUGP("sddr09_init: send_command fails\n");
  1181. return result;
  1182. }
  1183. US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
  1184. // get 07 02
  1185. result = sddr09_send_command(us, 0x08, USB_DIR_IN, data, 2);
  1186. if (result != USB_STOR_TRANSPORT_GOOD) {
  1187. US_DEBUGP("sddr09_init: 2nd send_command fails\n");
  1188. return result;
  1189. }
  1190. US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
  1191. // get 07 00
  1192. result = sddr09_request_sense(us, data, 18);
  1193. if (result == USB_STOR_TRANSPORT_GOOD && data[2] != 0) {
  1194. int j;
  1195. for (j=0; j<18; j++)
  1196. printk(" %02X", data[j]);
  1197. printk("\n");
  1198. // get 70 00 00 00 00 00 00 * 00 00 00 00 00 00
  1199. // 70: current command
  1200. // sense key 0, sense code 0, extd sense code 0
  1201. // additional transfer length * = sizeof(data) - 7
  1202. // Or: 70 00 06 00 00 00 00 0b 00 00 00 00 28 00 00 00 00 00
  1203. // sense key 06, sense code 28: unit attention,
  1204. // not ready to ready transition
  1205. }
  1206. // test unit ready
  1207. return 0; /* not result */
  1208. }
  1209. /*
  1210. * Transport for the Sandisk SDDR-09
  1211. */
  1212. int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us)
  1213. {
  1214. static unsigned char sensekey = 0, sensecode = 0;
  1215. static unsigned char havefakesense = 0;
  1216. int result, i;
  1217. unsigned char *ptr = us->iobuf;
  1218. unsigned long capacity;
  1219. unsigned int page, pages;
  1220. struct sddr09_card_info *info;
  1221. static unsigned char inquiry_response[8] = {
  1222. 0x00, 0x80, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x00
  1223. };
  1224. /* note: no block descriptor support */
  1225. static unsigned char mode_page_01[19] = {
  1226. 0x00, 0x0F, 0x00, 0x0, 0x0, 0x0, 0x00,
  1227. 0x01, 0x0A,
  1228. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  1229. };
  1230. info = (struct sddr09_card_info *)us->extra;
  1231. if (srb->cmnd[0] == REQUEST_SENSE && havefakesense) {
  1232. /* for a faked command, we have to follow with a faked sense */
  1233. memset(ptr, 0, 18);
  1234. ptr[0] = 0x70;
  1235. ptr[2] = sensekey;
  1236. ptr[7] = 11;
  1237. ptr[12] = sensecode;
  1238. usb_stor_set_xfer_buf(ptr, 18, srb);
  1239. sensekey = sensecode = havefakesense = 0;
  1240. return USB_STOR_TRANSPORT_GOOD;
  1241. }
  1242. havefakesense = 1;
  1243. /* Dummy up a response for INQUIRY since SDDR09 doesn't
  1244. respond to INQUIRY commands */
  1245. if (srb->cmnd[0] == INQUIRY) {
  1246. memcpy(ptr, inquiry_response, 8);
  1247. fill_inquiry_response(us, ptr, 36);
  1248. return USB_STOR_TRANSPORT_GOOD;
  1249. }
  1250. if (srb->cmnd[0] == READ_CAPACITY) {
  1251. struct nand_flash_dev *cardinfo;
  1252. sddr09_get_wp(us, info); /* read WP bit */
  1253. cardinfo = sddr09_get_cardinfo(us, info->flags);
  1254. if (!cardinfo) {
  1255. /* probably no media */
  1256. init_error:
  1257. sensekey = 0x02; /* not ready */
  1258. sensecode = 0x3a; /* medium not present */
  1259. return USB_STOR_TRANSPORT_FAILED;
  1260. }
  1261. info->capacity = (1 << cardinfo->chipshift);
  1262. info->pageshift = cardinfo->pageshift;
  1263. info->pagesize = (1 << info->pageshift);
  1264. info->blockshift = cardinfo->blockshift;
  1265. info->blocksize = (1 << info->blockshift);
  1266. info->blockmask = info->blocksize - 1;
  1267. // map initialization, must follow get_cardinfo()
  1268. if (sddr09_read_map(us)) {
  1269. /* probably out of memory */
  1270. goto init_error;
  1271. }
  1272. // Report capacity
  1273. capacity = (info->lbact << info->blockshift) - 1;
  1274. ((__be32 *) ptr)[0] = cpu_to_be32(capacity);
  1275. // Report page size
  1276. ((__be32 *) ptr)[1] = cpu_to_be32(info->pagesize);
  1277. usb_stor_set_xfer_buf(ptr, 8, srb);
  1278. return USB_STOR_TRANSPORT_GOOD;
  1279. }
  1280. if (srb->cmnd[0] == MODE_SENSE_10) {
  1281. int modepage = (srb->cmnd[2] & 0x3F);
  1282. /* They ask for the Read/Write error recovery page,
  1283. or for all pages. */
  1284. /* %% We should check DBD %% */
  1285. if (modepage == 0x01 || modepage == 0x3F) {
  1286. US_DEBUGP("SDDR09: Dummy up request for "
  1287. "mode page 0x%x\n", modepage);
  1288. memcpy(ptr, mode_page_01, sizeof(mode_page_01));
  1289. ((__be16*)ptr)[0] = cpu_to_be16(sizeof(mode_page_01) - 2);
  1290. ptr[3] = (info->flags & SDDR09_WP) ? 0x80 : 0;
  1291. usb_stor_set_xfer_buf(ptr, sizeof(mode_page_01), srb);
  1292. return USB_STOR_TRANSPORT_GOOD;
  1293. }
  1294. sensekey = 0x05; /* illegal request */
  1295. sensecode = 0x24; /* invalid field in CDB */
  1296. return USB_STOR_TRANSPORT_FAILED;
  1297. }
  1298. if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL)
  1299. return USB_STOR_TRANSPORT_GOOD;
  1300. havefakesense = 0;
  1301. if (srb->cmnd[0] == READ_10) {
  1302. page = short_pack(srb->cmnd[3], srb->cmnd[2]);
  1303. page <<= 16;
  1304. page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
  1305. pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
  1306. US_DEBUGP("READ_10: read page %d pagect %d\n",
  1307. page, pages);
  1308. return sddr09_read_data(us, page, pages);
  1309. }
  1310. if (srb->cmnd[0] == WRITE_10) {
  1311. page = short_pack(srb->cmnd[3], srb->cmnd[2]);
  1312. page <<= 16;
  1313. page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
  1314. pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
  1315. US_DEBUGP("WRITE_10: write page %d pagect %d\n",
  1316. page, pages);
  1317. return sddr09_write_data(us, page, pages);
  1318. }
  1319. /* catch-all for all other commands, except
  1320. * pass TEST_UNIT_READY and REQUEST_SENSE through
  1321. */
  1322. if (srb->cmnd[0] != TEST_UNIT_READY &&
  1323. srb->cmnd[0] != REQUEST_SENSE) {
  1324. sensekey = 0x05; /* illegal request */
  1325. sensecode = 0x20; /* invalid command */
  1326. havefakesense = 1;
  1327. return USB_STOR_TRANSPORT_FAILED;
  1328. }
  1329. for (; srb->cmd_len<12; srb->cmd_len++)
  1330. srb->cmnd[srb->cmd_len] = 0;
  1331. srb->cmnd[1] = LUNBITS;
  1332. ptr[0] = 0;
  1333. for (i=0; i<12; i++)
  1334. sprintf(ptr+strlen(ptr), "%02X ", srb->cmnd[i]);
  1335. US_DEBUGP("SDDR09: Send control for command %s\n", ptr);
  1336. result = sddr09_send_scsi_command(us, srb->cmnd, 12);
  1337. if (result != USB_STOR_TRANSPORT_GOOD) {
  1338. US_DEBUGP("sddr09_transport: sddr09_send_scsi_command "
  1339. "returns %d\n", result);
  1340. return result;
  1341. }
  1342. if (srb->request_bufflen == 0)
  1343. return USB_STOR_TRANSPORT_GOOD;
  1344. if (srb->sc_data_direction == DMA_TO_DEVICE ||
  1345. srb->sc_data_direction == DMA_FROM_DEVICE) {
  1346. unsigned int pipe = (srb->sc_data_direction == DMA_TO_DEVICE)
  1347. ? us->send_bulk_pipe : us->recv_bulk_pipe;
  1348. US_DEBUGP("SDDR09: %s %d bytes\n",
  1349. (srb->sc_data_direction == DMA_TO_DEVICE) ?
  1350. "sending" : "receiving",
  1351. srb->request_bufflen);
  1352. result = usb_stor_bulk_transfer_sg(us, pipe,
  1353. srb->request_buffer,
  1354. srb->request_bufflen,
  1355. srb->use_sg, &srb->resid);
  1356. return (result == USB_STOR_XFER_GOOD ?
  1357. USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
  1358. }
  1359. return USB_STOR_TRANSPORT_GOOD;
  1360. }
  1361. /*
  1362. * Initialization routine for the sddr09 subdriver
  1363. */
  1364. int
  1365. usb_stor_sddr09_init(struct us_data *us) {
  1366. return sddr09_common_init(us);
  1367. }