root/drivers/usb/storage/sddr09.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. nand_flash_manufacturer
  2. nand_find_id
  3. nand_init_ecc
  4. nand_compute_ecc
  5. nand_compare_ecc
  6. nand_store_ecc
  7. sddr09_send_command
  8. sddr09_send_scsi_command
  9. sddr09_test_unit_ready
  10. sddr09_request_sense
  11. sddr09_readX
  12. sddr09_read20
  13. sddr09_read21
  14. sddr09_read22
  15. sddr09_read23
  16. sddr09_erase
  17. sddr09_writeX
  18. sddr09_write_inplace
  19. sddr09_read_sg_test_only
  20. sddr09_read_status
  21. sddr09_read_data
  22. sddr09_find_unused_pba
  23. sddr09_write_lba
  24. sddr09_write_data
  25. sddr09_read_control
  26. sddr09_read_deviceID
  27. sddr09_get_wp
  28. sddr09_reset
  29. sddr09_get_cardinfo
  30. sddr09_read_map
  31. sddr09_card_info_destructor
  32. sddr09_common_init
  33. usb_stor_sddr09_dpcm_init
  34. dpcm_transport
  35. sddr09_transport
  36. usb_stor_sddr09_init
  37. sddr09_probe

   1 // SPDX-License-Identifier: GPL-2.0+
   2 /*
   3  * Driver for SanDisk SDDR-09 SmartMedia reader
   4  *
   5  *   (c) 2000, 2001 Robert Baruch (autophile@starband.net)
   6  *   (c) 2002 Andries Brouwer (aeb@cwi.nl)
   7  * Developed with the assistance of:
   8  *   (c) 2002 Alan Stern <stern@rowland.org>
   9  *
  10  * The SanDisk SDDR-09 SmartMedia reader uses the Shuttle EUSB-01 chip.
  11  * This chip is a programmable USB controller. In the SDDR-09, it has
  12  * been programmed to obey a certain limited set of SCSI commands.
  13  * This driver translates the "real" SCSI commands to the SDDR-09 SCSI
  14  * commands.
  15  */
  16 
  17 /*
  18  * Known vendor commands: 12 bytes, first byte is opcode
  19  *
  20  * E7: read scatter gather
  21  * E8: read
  22  * E9: write
  23  * EA: erase
  24  * EB: reset
  25  * EC: read status
  26  * ED: read ID
  27  * EE: write CIS (?)
  28  * EF: compute checksum (?)
  29  */
  30 
  31 #include <linux/errno.h>
  32 #include <linux/module.h>
  33 #include <linux/slab.h>
  34 
  35 #include <scsi/scsi.h>
  36 #include <scsi/scsi_cmnd.h>
  37 #include <scsi/scsi_device.h>
  38 
  39 #include "usb.h"
  40 #include "transport.h"
  41 #include "protocol.h"
  42 #include "debug.h"
  43 #include "scsiglue.h"
  44 
  45 #define DRV_NAME "ums-sddr09"
  46 
  47 MODULE_DESCRIPTION("Driver for SanDisk SDDR-09 SmartMedia reader");
  48 MODULE_AUTHOR("Andries Brouwer <aeb@cwi.nl>, Robert Baruch <autophile@starband.net>");
  49 MODULE_LICENSE("GPL");
  50 MODULE_IMPORT_NS(USB_STORAGE);
  51 
  52 static int usb_stor_sddr09_dpcm_init(struct us_data *us);
  53 static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us);
  54 static int usb_stor_sddr09_init(struct us_data *us);
  55 
  56 
  57 /*
  58  * The table of devices
  59  */
  60 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
  61                     vendorName, productName, useProtocol, useTransport, \
  62                     initFunction, flags) \
  63 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
  64   .driver_info = (flags) }
  65 
  66 static struct usb_device_id sddr09_usb_ids[] = {
  67 #       include "unusual_sddr09.h"
  68         { }             /* Terminating entry */
  69 };
  70 MODULE_DEVICE_TABLE(usb, sddr09_usb_ids);
  71 
  72 #undef UNUSUAL_DEV
  73 
  74 /*
  75  * The flags table
  76  */
  77 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
  78                     vendor_name, product_name, use_protocol, use_transport, \
  79                     init_function, Flags) \
  80 { \
  81         .vendorName = vendor_name,      \
  82         .productName = product_name,    \
  83         .useProtocol = use_protocol,    \
  84         .useTransport = use_transport,  \
  85         .initFunction = init_function,  \
  86 }
  87 
  88 static struct us_unusual_dev sddr09_unusual_dev_list[] = {
  89 #       include "unusual_sddr09.h"
  90         { }             /* Terminating entry */
  91 };
  92 
  93 #undef UNUSUAL_DEV
  94 
  95 
  96 #define short_pack(lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) )
  97 #define LSB_of(s) ((s)&0xFF)
  98 #define MSB_of(s) ((s)>>8)
  99 
 100 /*
 101  * First some stuff that does not belong here:
 102  * data on SmartMedia and other cards, completely
 103  * unrelated to this driver.
 104  * Similar stuff occurs in <linux/mtd/nand_ids.h>.
 105  */
 106 
 107 struct nand_flash_dev {
 108         int model_id;
 109         int chipshift;          /* 1<<cs bytes total capacity */
 110         char pageshift;         /* 1<<ps bytes in a page */
 111         char blockshift;        /* 1<<bs pages in an erase block */
 112         char zoneshift;         /* 1<<zs blocks in a zone */
 113                                 /* # of logical blocks is 125/128 of this */
 114         char pageadrlen;        /* length of an address in bytes - 1 */
 115 };
 116 
 117 /*
 118  * NAND Flash Manufacturer ID Codes
 119  */
 120 #define NAND_MFR_AMD            0x01
 121 #define NAND_MFR_NATSEMI        0x8f
 122 #define NAND_MFR_TOSHIBA        0x98
 123 #define NAND_MFR_SAMSUNG        0xec
 124 
 125 static inline char *nand_flash_manufacturer(int manuf_id) {
 126         switch(manuf_id) {
 127         case NAND_MFR_AMD:
 128                 return "AMD";
 129         case NAND_MFR_NATSEMI:
 130                 return "NATSEMI";
 131         case NAND_MFR_TOSHIBA:
 132                 return "Toshiba";
 133         case NAND_MFR_SAMSUNG:
 134                 return "Samsung";
 135         default:
 136                 return "unknown";
 137         }
 138 }
 139 
 140 /*
 141  * It looks like it is unnecessary to attach manufacturer to the
 142  * remaining data: SSFDC prescribes manufacturer-independent id codes.
 143  *
 144  * 256 MB NAND flash has a 5-byte ID with 2nd byte 0xaa, 0xba, 0xca or 0xda.
 145  */
 146 
 147 static struct nand_flash_dev nand_flash_ids[] = {
 148         /* NAND flash */
 149         { 0x6e, 20, 8, 4, 8, 2},        /* 1 MB */
 150         { 0xe8, 20, 8, 4, 8, 2},        /* 1 MB */
 151         { 0xec, 20, 8, 4, 8, 2},        /* 1 MB */
 152         { 0x64, 21, 8, 4, 9, 2},        /* 2 MB */
 153         { 0xea, 21, 8, 4, 9, 2},        /* 2 MB */
 154         { 0x6b, 22, 9, 4, 9, 2},        /* 4 MB */
 155         { 0xe3, 22, 9, 4, 9, 2},        /* 4 MB */
 156         { 0xe5, 22, 9, 4, 9, 2},        /* 4 MB */
 157         { 0xe6, 23, 9, 4, 10, 2},       /* 8 MB */
 158         { 0x73, 24, 9, 5, 10, 2},       /* 16 MB */
 159         { 0x75, 25, 9, 5, 10, 2},       /* 32 MB */
 160         { 0x76, 26, 9, 5, 10, 3},       /* 64 MB */
 161         { 0x79, 27, 9, 5, 10, 3},       /* 128 MB */
 162 
 163         /* MASK ROM */
 164         { 0x5d, 21, 9, 4, 8, 2},        /* 2 MB */
 165         { 0xd5, 22, 9, 4, 9, 2},        /* 4 MB */
 166         { 0xd6, 23, 9, 4, 10, 2},       /* 8 MB */
 167         { 0x57, 24, 9, 4, 11, 2},       /* 16 MB */
 168         { 0x58, 25, 9, 4, 12, 2},       /* 32 MB */
 169         { 0,}
 170 };
 171 
 172 static struct nand_flash_dev *
 173 nand_find_id(unsigned char id) {
 174         int i;
 175 
 176         for (i = 0; i < ARRAY_SIZE(nand_flash_ids); i++)
 177                 if (nand_flash_ids[i].model_id == id)
 178                         return &(nand_flash_ids[i]);
 179         return NULL;
 180 }
 181 
 182 /*
 183  * ECC computation.
 184  */
 185 static unsigned char parity[256];
 186 static unsigned char ecc2[256];
 187 
 188 static void nand_init_ecc(void) {
 189         int i, j, a;
 190 
 191         parity[0] = 0;
 192         for (i = 1; i < 256; i++)
 193                 parity[i] = (parity[i&(i-1)] ^ 1);
 194 
 195         for (i = 0; i < 256; i++) {
 196                 a = 0;
 197                 for (j = 0; j < 8; j++) {
 198                         if (i & (1<<j)) {
 199                                 if ((j & 1) == 0)
 200                                         a ^= 0x04;
 201                                 if ((j & 2) == 0)
 202                                         a ^= 0x10;
 203                                 if ((j & 4) == 0)
 204                                         a ^= 0x40;
 205                         }
 206                 }
 207                 ecc2[i] = ~(a ^ (a<<1) ^ (parity[i] ? 0xa8 : 0));
 208         }
 209 }
 210 
 211 /* compute 3-byte ecc on 256 bytes */
 212 static void nand_compute_ecc(unsigned char *data, unsigned char *ecc) {
 213         int i, j, a;
 214         unsigned char par = 0, bit, bits[8] = {0};
 215 
 216         /* collect 16 checksum bits */
 217         for (i = 0; i < 256; i++) {
 218                 par ^= data[i];
 219                 bit = parity[data[i]];
 220                 for (j = 0; j < 8; j++)
 221                         if ((i & (1<<j)) == 0)
 222                                 bits[j] ^= bit;
 223         }
 224 
 225         /* put 4+4+4 = 12 bits in the ecc */
 226         a = (bits[3] << 6) + (bits[2] << 4) + (bits[1] << 2) + bits[0];
 227         ecc[0] = ~(a ^ (a<<1) ^ (parity[par] ? 0xaa : 0));
 228 
 229         a = (bits[7] << 6) + (bits[6] << 4) + (bits[5] << 2) + bits[4];
 230         ecc[1] = ~(a ^ (a<<1) ^ (parity[par] ? 0xaa : 0));
 231 
 232         ecc[2] = ecc2[par];
 233 }
 234 
 235 static int nand_compare_ecc(unsigned char *data, unsigned char *ecc) {
 236         return (data[0] == ecc[0] && data[1] == ecc[1] && data[2] == ecc[2]);
 237 }
 238 
 239 static void nand_store_ecc(unsigned char *data, unsigned char *ecc) {
 240         memcpy(data, ecc, 3);
 241 }
 242 
 243 /*
 244  * The actual driver starts here.
 245  */
 246 
 247 struct sddr09_card_info {
 248         unsigned long   capacity;       /* Size of card in bytes */
 249         int             pagesize;       /* Size of page in bytes */
 250         int             pageshift;      /* log2 of pagesize */
 251         int             blocksize;      /* Size of block in pages */
 252         int             blockshift;     /* log2 of blocksize */
 253         int             blockmask;      /* 2^blockshift - 1 */
 254         int             *lba_to_pba;    /* logical to physical map */
 255         int             *pba_to_lba;    /* physical to logical map */
 256         int             lbact;          /* number of available pages */
 257         int             flags;
 258 #define SDDR09_WP       1               /* write protected */
 259 };
 260 
 261 /*
 262  * On my 16MB card, control blocks have size 64 (16 real control bytes,
 263  * and 48 junk bytes). In reality of course the card uses 16 control bytes,
 264  * so the reader makes up the remaining 48. Don't know whether these numbers
 265  * depend on the card. For now a constant.
 266  */
 267 #define CONTROL_SHIFT 6
 268 
 269 /*
 270  * On my Combo CF/SM reader, the SM reader has LUN 1.
 271  * (and things fail with LUN 0).
 272  * It seems LUN is irrelevant for others.
 273  */
 274 #define LUN     1
 275 #define LUNBITS (LUN << 5)
 276 
 277 /*
 278  * LBA and PBA are unsigned ints. Special values.
 279  */
 280 #define UNDEF    0xffffffff
 281 #define SPARE    0xfffffffe
 282 #define UNUSABLE 0xfffffffd
 283 
 284 static const int erase_bad_lba_entries = 0;
 285 
 286 /* send vendor interface command (0x41) */
 287 /* called for requests 0, 1, 8 */
 288 static int
 289 sddr09_send_command(struct us_data *us,
 290                     unsigned char request,
 291                     unsigned char direction,
 292                     unsigned char *xfer_data,
 293                     unsigned int xfer_len) {
 294         unsigned int pipe;
 295         unsigned char requesttype = (0x41 | direction);
 296         int rc;
 297 
 298         // Get the receive or send control pipe number
 299 
 300         if (direction == USB_DIR_IN)
 301                 pipe = us->recv_ctrl_pipe;
 302         else
 303                 pipe = us->send_ctrl_pipe;
 304 
 305         rc = usb_stor_ctrl_transfer(us, pipe, request, requesttype,
 306                                    0, 0, xfer_data, xfer_len);
 307         switch (rc) {
 308                 case USB_STOR_XFER_GOOD:        return 0;
 309                 case USB_STOR_XFER_STALLED:     return -EPIPE;
 310                 default:                        return -EIO;
 311         }
 312 }
 313 
 314 static int
 315 sddr09_send_scsi_command(struct us_data *us,
 316                          unsigned char *command,
 317                          unsigned int command_len) {
 318         return sddr09_send_command(us, 0, USB_DIR_OUT, command, command_len);
 319 }
 320 
 321 #if 0
 322 /*
 323  * Test Unit Ready Command: 12 bytes.
 324  * byte 0: opcode: 00
 325  */
 326 static int
 327 sddr09_test_unit_ready(struct us_data *us) {
 328         unsigned char *command = us->iobuf;
 329         int result;
 330 
 331         memset(command, 0, 6);
 332         command[1] = LUNBITS;
 333 
 334         result = sddr09_send_scsi_command(us, command, 6);
 335 
 336         usb_stor_dbg(us, "sddr09_test_unit_ready returns %d\n", result);
 337 
 338         return result;
 339 }
 340 #endif
 341 
 342 /*
 343  * Request Sense Command: 12 bytes.
 344  * byte 0: opcode: 03
 345  * byte 4: data length
 346  */
 347 static int
 348 sddr09_request_sense(struct us_data *us, unsigned char *sensebuf, int buflen) {
 349         unsigned char *command = us->iobuf;
 350         int result;
 351 
 352         memset(command, 0, 12);
 353         command[0] = 0x03;
 354         command[1] = LUNBITS;
 355         command[4] = buflen;
 356 
 357         result = sddr09_send_scsi_command(us, command, 12);
 358         if (result)
 359                 return result;
 360 
 361         result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
 362                         sensebuf, buflen, NULL);
 363         return (result == USB_STOR_XFER_GOOD ? 0 : -EIO);
 364 }
 365 
 366 /*
 367  * Read Command: 12 bytes.
 368  * byte 0: opcode: E8
 369  * byte 1: last two bits: 00: read data, 01: read blockwise control,
 370  *                      10: read both, 11: read pagewise control.
 371  *       It turns out we need values 20, 21, 22, 23 here (LUN 1).
 372  * bytes 2-5: address (interpretation depends on byte 1, see below)
 373  * bytes 10-11: count (idem)
 374  *
 375  * A page has 512 data bytes and 64 control bytes (16 control and 48 junk).
 376  * A read data command gets data in 512-byte pages.
 377  * A read control command gets control in 64-byte chunks.
 378  * A read both command gets data+control in 576-byte chunks.
 379  *
 380  * Blocks are groups of 32 pages, and read blockwise control jumps to the
 381  * next block, while read pagewise control jumps to the next page after
 382  * reading a group of 64 control bytes.
 383  * [Here 512 = 1<<pageshift, 32 = 1<<blockshift, 64 is constant?]
 384  *
 385  * (1 MB and 2 MB cards are a bit different, but I have only a 16 MB card.)
 386  */
 387 
 388 static int
 389 sddr09_readX(struct us_data *us, int x, unsigned long fromaddress,
 390              int nr_of_pages, int bulklen, unsigned char *buf,
 391              int use_sg) {
 392 
 393         unsigned char *command = us->iobuf;
 394         int result;
 395 
 396         command[0] = 0xE8;
 397         command[1] = LUNBITS | x;
 398         command[2] = MSB_of(fromaddress>>16);
 399         command[3] = LSB_of(fromaddress>>16); 
 400         command[4] = MSB_of(fromaddress & 0xFFFF);
 401         command[5] = LSB_of(fromaddress & 0xFFFF); 
 402         command[6] = 0;
 403         command[7] = 0;
 404         command[8] = 0;
 405         command[9] = 0;
 406         command[10] = MSB_of(nr_of_pages);
 407         command[11] = LSB_of(nr_of_pages);
 408 
 409         result = sddr09_send_scsi_command(us, command, 12);
 410 
 411         if (result) {
 412                 usb_stor_dbg(us, "Result for send_control in sddr09_read2%d %d\n",
 413                              x, result);
 414                 return result;
 415         }
 416 
 417         result = usb_stor_bulk_transfer_sg(us, us->recv_bulk_pipe,
 418                                        buf, bulklen, use_sg, NULL);
 419 
 420         if (result != USB_STOR_XFER_GOOD) {
 421                 usb_stor_dbg(us, "Result for bulk_transfer in sddr09_read2%d %d\n",
 422                              x, result);
 423                 return -EIO;
 424         }
 425         return 0;
 426 }
 427 
 428 /*
 429  * Read Data
 430  *
 431  * fromaddress counts data shorts:
 432  * increasing it by 256 shifts the bytestream by 512 bytes;
 433  * the last 8 bits are ignored.
 434  *
 435  * nr_of_pages counts pages of size (1 << pageshift).
 436  */
 437 static int
 438 sddr09_read20(struct us_data *us, unsigned long fromaddress,
 439               int nr_of_pages, int pageshift, unsigned char *buf, int use_sg) {
 440         int bulklen = nr_of_pages << pageshift;
 441 
 442         /* The last 8 bits of fromaddress are ignored. */
 443         return sddr09_readX(us, 0, fromaddress, nr_of_pages, bulklen,
 444                             buf, use_sg);
 445 }
 446 
 447 /*
 448  * Read Blockwise Control
 449  *
 450  * fromaddress gives the starting position (as in read data;
 451  * the last 8 bits are ignored); increasing it by 32*256 shifts
 452  * the output stream by 64 bytes.
 453  *
 454  * count counts control groups of size (1 << controlshift).
 455  * For me, controlshift = 6. Is this constant?
 456  *
 457  * After getting one control group, jump to the next block
 458  * (fromaddress += 8192).
 459  */
 460 static int
 461 sddr09_read21(struct us_data *us, unsigned long fromaddress,
 462               int count, int controlshift, unsigned char *buf, int use_sg) {
 463 
 464         int bulklen = (count << controlshift);
 465         return sddr09_readX(us, 1, fromaddress, count, bulklen,
 466                             buf, use_sg);
 467 }
 468 
 469 /*
 470  * Read both Data and Control
 471  *
 472  * fromaddress counts data shorts, ignoring control:
 473  * increasing it by 256 shifts the bytestream by 576 = 512+64 bytes;
 474  * the last 8 bits are ignored.
 475  *
 476  * nr_of_pages counts pages of size (1 << pageshift) + (1 << controlshift).
 477  */
 478 static int
 479 sddr09_read22(struct us_data *us, unsigned long fromaddress,
 480               int nr_of_pages, int pageshift, unsigned char *buf, int use_sg) {
 481 
 482         int bulklen = (nr_of_pages << pageshift) + (nr_of_pages << CONTROL_SHIFT);
 483         usb_stor_dbg(us, "reading %d pages, %d bytes\n", nr_of_pages, bulklen);
 484         return sddr09_readX(us, 2, fromaddress, nr_of_pages, bulklen,
 485                             buf, use_sg);
 486 }
 487 
 488 #if 0
 489 /*
 490  * Read Pagewise Control
 491  *
 492  * fromaddress gives the starting position (as in read data;
 493  * the last 8 bits are ignored); increasing it by 256 shifts
 494  * the output stream by 64 bytes.
 495  *
 496  * count counts control groups of size (1 << controlshift).
 497  * For me, controlshift = 6. Is this constant?
 498  *
 499  * After getting one control group, jump to the next page
 500  * (fromaddress += 256).
 501  */
 502 static int
 503 sddr09_read23(struct us_data *us, unsigned long fromaddress,
 504               int count, int controlshift, unsigned char *buf, int use_sg) {
 505 
 506         int bulklen = (count << controlshift);
 507         return sddr09_readX(us, 3, fromaddress, count, bulklen,
 508                             buf, use_sg);
 509 }
 510 #endif
 511 
 512 /*
 513  * Erase Command: 12 bytes.
 514  * byte 0: opcode: EA
 515  * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
 516  * 
 517  * Always precisely one block is erased; bytes 2-5 and 10-11 are ignored.
 518  * The byte address being erased is 2*Eaddress.
 519  * The CIS cannot be erased.
 520  */
 521 static int
 522 sddr09_erase(struct us_data *us, unsigned long Eaddress) {
 523         unsigned char *command = us->iobuf;
 524         int result;
 525 
 526         usb_stor_dbg(us, "erase address %lu\n", Eaddress);
 527 
 528         memset(command, 0, 12);
 529         command[0] = 0xEA;
 530         command[1] = LUNBITS;
 531         command[6] = MSB_of(Eaddress>>16);
 532         command[7] = LSB_of(Eaddress>>16);
 533         command[8] = MSB_of(Eaddress & 0xFFFF);
 534         command[9] = LSB_of(Eaddress & 0xFFFF);
 535 
 536         result = sddr09_send_scsi_command(us, command, 12);
 537 
 538         if (result)
 539                 usb_stor_dbg(us, "Result for send_control in sddr09_erase %d\n",
 540                              result);
 541 
 542         return result;
 543 }
 544 
 545 /*
 546  * Write CIS Command: 12 bytes.
 547  * byte 0: opcode: EE
 548  * bytes 2-5: write address in shorts
 549  * bytes 10-11: sector count
 550  *
 551  * This writes at the indicated address. Don't know how it differs
 552  * from E9. Maybe it does not erase? However, it will also write to
 553  * the CIS.
 554  *
 555  * When two such commands on the same page follow each other directly,
 556  * the second one is not done.
 557  */
 558 
 559 /*
 560  * Write Command: 12 bytes.
 561  * byte 0: opcode: E9
 562  * bytes 2-5: write address (big-endian, counting shorts, sector aligned).
 563  * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
 564  * bytes 10-11: sector count (big-endian, in 512-byte sectors).
 565  *
 566  * If write address equals erase address, the erase is done first,
 567  * otherwise the write is done first. When erase address equals zero
 568  * no erase is done?
 569  */
 570 static int
 571 sddr09_writeX(struct us_data *us,
 572               unsigned long Waddress, unsigned long Eaddress,
 573               int nr_of_pages, int bulklen, unsigned char *buf, int use_sg) {
 574 
 575         unsigned char *command = us->iobuf;
 576         int result;
 577 
 578         command[0] = 0xE9;
 579         command[1] = LUNBITS;
 580 
 581         command[2] = MSB_of(Waddress>>16);
 582         command[3] = LSB_of(Waddress>>16);
 583         command[4] = MSB_of(Waddress & 0xFFFF);
 584         command[5] = LSB_of(Waddress & 0xFFFF);
 585 
 586         command[6] = MSB_of(Eaddress>>16);
 587         command[7] = LSB_of(Eaddress>>16);
 588         command[8] = MSB_of(Eaddress & 0xFFFF);
 589         command[9] = LSB_of(Eaddress & 0xFFFF);
 590 
 591         command[10] = MSB_of(nr_of_pages);
 592         command[11] = LSB_of(nr_of_pages);
 593 
 594         result = sddr09_send_scsi_command(us, command, 12);
 595 
 596         if (result) {
 597                 usb_stor_dbg(us, "Result for send_control in sddr09_writeX %d\n",
 598                              result);
 599                 return result;
 600         }
 601 
 602         result = usb_stor_bulk_transfer_sg(us, us->send_bulk_pipe,
 603                                        buf, bulklen, use_sg, NULL);
 604 
 605         if (result != USB_STOR_XFER_GOOD) {
 606                 usb_stor_dbg(us, "Result for bulk_transfer in sddr09_writeX %d\n",
 607                              result);
 608                 return -EIO;
 609         }
 610         return 0;
 611 }
 612 
 613 /* erase address, write same address */
 614 static int
 615 sddr09_write_inplace(struct us_data *us, unsigned long address,
 616                      int nr_of_pages, int pageshift, unsigned char *buf,
 617                      int use_sg) {
 618         int bulklen = (nr_of_pages << pageshift) + (nr_of_pages << CONTROL_SHIFT);
 619         return sddr09_writeX(us, address, address, nr_of_pages, bulklen,
 620                              buf, use_sg);
 621 }
 622 
 623 #if 0
 624 /*
 625  * Read Scatter Gather Command: 3+4n bytes.
 626  * byte 0: opcode E7
 627  * byte 2: n
 628  * bytes 4i-1,4i,4i+1: page address
 629  * byte 4i+2: page count
 630  * (i=1..n)
 631  *
 632  * This reads several pages from the card to a single memory buffer.
 633  * The last two bits of byte 1 have the same meaning as for E8.
 634  */
 635 static int
 636 sddr09_read_sg_test_only(struct us_data *us) {
 637         unsigned char *command = us->iobuf;
 638         int result, bulklen, nsg, ct;
 639         unsigned char *buf;
 640         unsigned long address;
 641 
 642         nsg = bulklen = 0;
 643         command[0] = 0xE7;
 644         command[1] = LUNBITS;
 645         command[2] = 0;
 646         address = 040000; ct = 1;
 647         nsg++;
 648         bulklen += (ct << 9);
 649         command[4*nsg+2] = ct;
 650         command[4*nsg+1] = ((address >> 9) & 0xFF);
 651         command[4*nsg+0] = ((address >> 17) & 0xFF);
 652         command[4*nsg-1] = ((address >> 25) & 0xFF);
 653 
 654         address = 0340000; ct = 1;
 655         nsg++;
 656         bulklen += (ct << 9);
 657         command[4*nsg+2] = ct;
 658         command[4*nsg+1] = ((address >> 9) & 0xFF);
 659         command[4*nsg+0] = ((address >> 17) & 0xFF);
 660         command[4*nsg-1] = ((address >> 25) & 0xFF);
 661 
 662         address = 01000000; ct = 2;
 663         nsg++;
 664         bulklen += (ct << 9);
 665         command[4*nsg+2] = ct;
 666         command[4*nsg+1] = ((address >> 9) & 0xFF);
 667         command[4*nsg+0] = ((address >> 17) & 0xFF);
 668         command[4*nsg-1] = ((address >> 25) & 0xFF);
 669 
 670         command[2] = nsg;
 671 
 672         result = sddr09_send_scsi_command(us, command, 4*nsg+3);
 673 
 674         if (result) {
 675                 usb_stor_dbg(us, "Result for send_control in sddr09_read_sg %d\n",
 676                              result);
 677                 return result;
 678         }
 679 
 680         buf = kmalloc(bulklen, GFP_NOIO);
 681         if (!buf)
 682                 return -ENOMEM;
 683 
 684         result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
 685                                        buf, bulklen, NULL);
 686         kfree(buf);
 687         if (result != USB_STOR_XFER_GOOD) {
 688                 usb_stor_dbg(us, "Result for bulk_transfer in sddr09_read_sg %d\n",
 689                              result);
 690                 return -EIO;
 691         }
 692 
 693         return 0;
 694 }
 695 #endif
 696 
 697 /*
 698  * Read Status Command: 12 bytes.
 699  * byte 0: opcode: EC
 700  *
 701  * Returns 64 bytes, all zero except for the first.
 702  * bit 0: 1: Error
 703  * bit 5: 1: Suspended
 704  * bit 6: 1: Ready
 705  * bit 7: 1: Not write-protected
 706  */
 707 
 708 static int
 709 sddr09_read_status(struct us_data *us, unsigned char *status) {
 710 
 711         unsigned char *command = us->iobuf;
 712         unsigned char *data = us->iobuf;
 713         int result;
 714 
 715         usb_stor_dbg(us, "Reading status...\n");
 716 
 717         memset(command, 0, 12);
 718         command[0] = 0xEC;
 719         command[1] = LUNBITS;
 720 
 721         result = sddr09_send_scsi_command(us, command, 12);
 722         if (result)
 723                 return result;
 724 
 725         result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
 726                                        data, 64, NULL);
 727         *status = data[0];
 728         return (result == USB_STOR_XFER_GOOD ? 0 : -EIO);
 729 }
 730 
 731 static int
 732 sddr09_read_data(struct us_data *us,
 733                  unsigned long address,
 734                  unsigned int sectors) {
 735 
 736         struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
 737         unsigned char *buffer;
 738         unsigned int lba, maxlba, pba;
 739         unsigned int page, pages;
 740         unsigned int len, offset;
 741         struct scatterlist *sg;
 742         int result;
 743 
 744         // Figure out the initial LBA and page
 745         lba = address >> info->blockshift;
 746         page = (address & info->blockmask);
 747         maxlba = info->capacity >> (info->pageshift + info->blockshift);
 748         if (lba >= maxlba)
 749                 return -EIO;
 750 
 751         // Since we only read in one block at a time, we have to create
 752         // a bounce buffer and move the data a piece at a time between the
 753         // bounce buffer and the actual transfer buffer.
 754 
 755         len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
 756         buffer = kmalloc(len, GFP_NOIO);
 757         if (!buffer)
 758                 return -ENOMEM;
 759 
 760         // This could be made much more efficient by checking for
 761         // contiguous LBA's. Another exercise left to the student.
 762 
 763         result = 0;
 764         offset = 0;
 765         sg = NULL;
 766 
 767         while (sectors > 0) {
 768 
 769                 /* Find number of pages we can read in this block */
 770                 pages = min(sectors, info->blocksize - page);
 771                 len = pages << info->pageshift;
 772 
 773                 /* Not overflowing capacity? */
 774                 if (lba >= maxlba) {
 775                         usb_stor_dbg(us, "Error: Requested lba %u exceeds maximum %u\n",
 776                                      lba, maxlba);
 777                         result = -EIO;
 778                         break;
 779                 }
 780 
 781                 /* Find where this lba lives on disk */
 782                 pba = info->lba_to_pba[lba];
 783 
 784                 if (pba == UNDEF) {     /* this lba was never written */
 785 
 786                         usb_stor_dbg(us, "Read %d zero pages (LBA %d) page %d\n",
 787                                      pages, lba, page);
 788 
 789                         /*
 790                          * This is not really an error. It just means
 791                          * that the block has never been written.
 792                          * Instead of returning an error
 793                          * it is better to return all zero data.
 794                          */
 795 
 796                         memset(buffer, 0, len);
 797 
 798                 } else {
 799                         usb_stor_dbg(us, "Read %d pages, from PBA %d (LBA %d) page %d\n",
 800                                      pages, pba, lba, page);
 801 
 802                         address = ((pba << info->blockshift) + page) << 
 803                                 info->pageshift;
 804 
 805                         result = sddr09_read20(us, address>>1,
 806                                         pages, info->pageshift, buffer, 0);
 807                         if (result)
 808                                 break;
 809                 }
 810 
 811                 // Store the data in the transfer buffer
 812                 usb_stor_access_xfer_buf(buffer, len, us->srb,
 813                                 &sg, &offset, TO_XFER_BUF);
 814 
 815                 page = 0;
 816                 lba++;
 817                 sectors -= pages;
 818         }
 819 
 820         kfree(buffer);
 821         return result;
 822 }
 823 
 824 static unsigned int
 825 sddr09_find_unused_pba(struct sddr09_card_info *info, unsigned int lba) {
 826         static unsigned int lastpba = 1;
 827         int zonestart, end, i;
 828 
 829         zonestart = (lba/1000) << 10;
 830         end = info->capacity >> (info->blockshift + info->pageshift);
 831         end -= zonestart;
 832         if (end > 1024)
 833                 end = 1024;
 834 
 835         for (i = lastpba+1; i < end; i++) {
 836                 if (info->pba_to_lba[zonestart+i] == UNDEF) {
 837                         lastpba = i;
 838                         return zonestart+i;
 839                 }
 840         }
 841         for (i = 0; i <= lastpba; i++) {
 842                 if (info->pba_to_lba[zonestart+i] == UNDEF) {
 843                         lastpba = i;
 844                         return zonestart+i;
 845                 }
 846         }
 847         return 0;
 848 }
 849 
 850 static int
 851 sddr09_write_lba(struct us_data *us, unsigned int lba,
 852                  unsigned int page, unsigned int pages,
 853                  unsigned char *ptr, unsigned char *blockbuffer) {
 854 
 855         struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
 856         unsigned long address;
 857         unsigned int pba, lbap;
 858         unsigned int pagelen;
 859         unsigned char *bptr, *cptr, *xptr;
 860         unsigned char ecc[3];
 861         int i, result;
 862 
 863         lbap = ((lba % 1000) << 1) | 0x1000;
 864         if (parity[MSB_of(lbap) ^ LSB_of(lbap)])
 865                 lbap ^= 1;
 866         pba = info->lba_to_pba[lba];
 867 
 868         if (pba == UNDEF) {
 869                 pba = sddr09_find_unused_pba(info, lba);
 870                 if (!pba) {
 871                         printk(KERN_WARNING
 872                                "sddr09_write_lba: Out of unused blocks\n");
 873                         return -ENOSPC;
 874                 }
 875                 info->pba_to_lba[pba] = lba;
 876                 info->lba_to_pba[lba] = pba;
 877         }
 878 
 879         if (pba == 1) {
 880                 /*
 881                  * Maybe it is impossible to write to PBA 1.
 882                  * Fake success, but don't do anything.
 883                  */
 884                 printk(KERN_WARNING "sddr09: avoid writing to pba 1\n");
 885                 return 0;
 886         }
 887 
 888         pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
 889 
 890         /* read old contents */
 891         address = (pba << (info->pageshift + info->blockshift));
 892         result = sddr09_read22(us, address>>1, info->blocksize,
 893                                info->pageshift, blockbuffer, 0);
 894         if (result)
 895                 return result;
 896 
 897         /* check old contents and fill lba */
 898         for (i = 0; i < info->blocksize; i++) {
 899                 bptr = blockbuffer + i*pagelen;
 900                 cptr = bptr + info->pagesize;
 901                 nand_compute_ecc(bptr, ecc);
 902                 if (!nand_compare_ecc(cptr+13, ecc)) {
 903                         usb_stor_dbg(us, "Warning: bad ecc in page %d- of pba %d\n",
 904                                      i, pba);
 905                         nand_store_ecc(cptr+13, ecc);
 906                 }
 907                 nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
 908                 if (!nand_compare_ecc(cptr+8, ecc)) {
 909                         usb_stor_dbg(us, "Warning: bad ecc in page %d+ of pba %d\n",
 910                                      i, pba);
 911                         nand_store_ecc(cptr+8, ecc);
 912                 }
 913                 cptr[6] = cptr[11] = MSB_of(lbap);
 914                 cptr[7] = cptr[12] = LSB_of(lbap);
 915         }
 916 
 917         /* copy in new stuff and compute ECC */
 918         xptr = ptr;
 919         for (i = page; i < page+pages; i++) {
 920                 bptr = blockbuffer + i*pagelen;
 921                 cptr = bptr + info->pagesize;
 922                 memcpy(bptr, xptr, info->pagesize);
 923                 xptr += info->pagesize;
 924                 nand_compute_ecc(bptr, ecc);
 925                 nand_store_ecc(cptr+13, ecc);
 926                 nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
 927                 nand_store_ecc(cptr+8, ecc);
 928         }
 929 
 930         usb_stor_dbg(us, "Rewrite PBA %d (LBA %d)\n", pba, lba);
 931 
 932         result = sddr09_write_inplace(us, address>>1, info->blocksize,
 933                                       info->pageshift, blockbuffer, 0);
 934 
 935         usb_stor_dbg(us, "sddr09_write_inplace returns %d\n", result);
 936 
 937 #if 0
 938         {
 939                 unsigned char status = 0;
 940                 int result2 = sddr09_read_status(us, &status);
 941                 if (result2)
 942                         usb_stor_dbg(us, "cannot read status\n");
 943                 else if (status != 0xc0)
 944                         usb_stor_dbg(us, "status after write: 0x%x\n", status);
 945         }
 946 #endif
 947 
 948 #if 0
 949         {
 950                 int result2 = sddr09_test_unit_ready(us);
 951         }
 952 #endif
 953 
 954         return result;
 955 }
 956 
 957 static int
 958 sddr09_write_data(struct us_data *us,
 959                   unsigned long address,
 960                   unsigned int sectors) {
 961 
 962         struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
 963         unsigned int lba, maxlba, page, pages;
 964         unsigned int pagelen, blocklen;
 965         unsigned char *blockbuffer;
 966         unsigned char *buffer;
 967         unsigned int len, offset;
 968         struct scatterlist *sg;
 969         int result;
 970 
 971         /* Figure out the initial LBA and page */
 972         lba = address >> info->blockshift;
 973         page = (address & info->blockmask);
 974         maxlba = info->capacity >> (info->pageshift + info->blockshift);
 975         if (lba >= maxlba)
 976                 return -EIO;
 977 
 978         /*
 979          * blockbuffer is used for reading in the old data, overwriting
 980          * with the new data, and performing ECC calculations
 981          */
 982 
 983         /*
 984          * TODO: instead of doing kmalloc/kfree for each write,
 985          * add a bufferpointer to the info structure
 986          */
 987 
 988         pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
 989         blocklen = (pagelen << info->blockshift);
 990         blockbuffer = kmalloc(blocklen, GFP_NOIO);
 991         if (!blockbuffer)
 992                 return -ENOMEM;
 993 
 994         /*
 995          * Since we don't write the user data directly to the device,
 996          * we have to create a bounce buffer and move the data a piece
 997          * at a time between the bounce buffer and the actual transfer buffer.
 998          */
 999 
1000         len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
1001         buffer = kmalloc(len, GFP_NOIO);
1002         if (!buffer) {
1003                 kfree(blockbuffer);
1004                 return -ENOMEM;
1005         }
1006 
1007         result = 0;
1008         offset = 0;
1009         sg = NULL;
1010 
1011         while (sectors > 0) {
1012 
1013                 /* Write as many sectors as possible in this block */
1014 
1015                 pages = min(sectors, info->blocksize - page);
1016                 len = (pages << info->pageshift);
1017 
1018                 /* Not overflowing capacity? */
1019                 if (lba >= maxlba) {
1020                         usb_stor_dbg(us, "Error: Requested lba %u exceeds maximum %u\n",
1021                                      lba, maxlba);
1022                         result = -EIO;
1023                         break;
1024                 }
1025 
1026                 /* Get the data from the transfer buffer */
1027                 usb_stor_access_xfer_buf(buffer, len, us->srb,
1028                                 &sg, &offset, FROM_XFER_BUF);
1029 
1030                 result = sddr09_write_lba(us, lba, page, pages,
1031                                 buffer, blockbuffer);
1032                 if (result)
1033                         break;
1034 
1035                 page = 0;
1036                 lba++;
1037                 sectors -= pages;
1038         }
1039 
1040         kfree(buffer);
1041         kfree(blockbuffer);
1042 
1043         return result;
1044 }
1045 
1046 static int
1047 sddr09_read_control(struct us_data *us,
1048                 unsigned long address,
1049                 unsigned int blocks,
1050                 unsigned char *content,
1051                 int use_sg) {
1052 
1053         usb_stor_dbg(us, "Read control address %lu, blocks %d\n",
1054                      address, blocks);
1055 
1056         return sddr09_read21(us, address, blocks,
1057                              CONTROL_SHIFT, content, use_sg);
1058 }
1059 
1060 /*
1061  * Read Device ID Command: 12 bytes.
1062  * byte 0: opcode: ED
1063  *
1064  * Returns 2 bytes: Manufacturer ID and Device ID.
1065  * On more recent cards 3 bytes: the third byte is an option code A5
1066  * signifying that the secret command to read an 128-bit ID is available.
1067  * On still more recent cards 4 bytes: the fourth byte C0 means that
1068  * a second read ID cmd is available.
1069  */
1070 static int
1071 sddr09_read_deviceID(struct us_data *us, unsigned char *deviceID) {
1072         unsigned char *command = us->iobuf;
1073         unsigned char *content = us->iobuf;
1074         int result, i;
1075 
1076         memset(command, 0, 12);
1077         command[0] = 0xED;
1078         command[1] = LUNBITS;
1079 
1080         result = sddr09_send_scsi_command(us, command, 12);
1081         if (result)
1082                 return result;
1083 
1084         result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
1085                         content, 64, NULL);
1086 
1087         for (i = 0; i < 4; i++)
1088                 deviceID[i] = content[i];
1089 
1090         return (result == USB_STOR_XFER_GOOD ? 0 : -EIO);
1091 }
1092 
1093 static int
1094 sddr09_get_wp(struct us_data *us, struct sddr09_card_info *info) {
1095         int result;
1096         unsigned char status;
1097         const char *wp_fmt;
1098 
1099         result = sddr09_read_status(us, &status);
1100         if (result) {
1101                 usb_stor_dbg(us, "read_status fails\n");
1102                 return result;
1103         }
1104         if ((status & 0x80) == 0) {
1105                 info->flags |= SDDR09_WP;       /* write protected */
1106                 wp_fmt = " WP";
1107         } else {
1108                 wp_fmt = "";
1109         }
1110         usb_stor_dbg(us, "status 0x%02X%s%s%s%s\n", status, wp_fmt,
1111                      status & 0x40 ? " Ready" : "",
1112                      status & LUNBITS ? " Suspended" : "",
1113                      status & 0x01 ? " Error" : "");
1114 
1115         return 0;
1116 }
1117 
1118 #if 0
1119 /*
1120  * Reset Command: 12 bytes.
1121  * byte 0: opcode: EB
1122  */
1123 static int
1124 sddr09_reset(struct us_data *us) {
1125 
1126         unsigned char *command = us->iobuf;
1127 
1128         memset(command, 0, 12);
1129         command[0] = 0xEB;
1130         command[1] = LUNBITS;
1131 
1132         return sddr09_send_scsi_command(us, command, 12);
1133 }
1134 #endif
1135 
1136 static struct nand_flash_dev *
1137 sddr09_get_cardinfo(struct us_data *us, unsigned char flags) {
1138         struct nand_flash_dev *cardinfo;
1139         unsigned char deviceID[4];
1140         char blurbtxt[256];
1141         int result;
1142 
1143         usb_stor_dbg(us, "Reading capacity...\n");
1144 
1145         result = sddr09_read_deviceID(us, deviceID);
1146 
1147         if (result) {
1148                 usb_stor_dbg(us, "Result of read_deviceID is %d\n", result);
1149                 printk(KERN_WARNING "sddr09: could not read card info\n");
1150                 return NULL;
1151         }
1152 
1153         sprintf(blurbtxt, "sddr09: Found Flash card, ID = %4ph", deviceID);
1154 
1155         /* Byte 0 is the manufacturer */
1156         sprintf(blurbtxt + strlen(blurbtxt),
1157                 ": Manuf. %s",
1158                 nand_flash_manufacturer(deviceID[0]));
1159 
1160         /* Byte 1 is the device type */
1161         cardinfo = nand_find_id(deviceID[1]);
1162         if (cardinfo) {
1163                 /*
1164                  * MB or MiB? It is neither. A 16 MB card has
1165                  * 17301504 raw bytes, of which 16384000 are
1166                  * usable for user data.
1167                  */
1168                 sprintf(blurbtxt + strlen(blurbtxt),
1169                         ", %d MB", 1<<(cardinfo->chipshift - 20));
1170         } else {
1171                 sprintf(blurbtxt + strlen(blurbtxt),
1172                         ", type unrecognized");
1173         }
1174 
1175         /* Byte 2 is code to signal availability of 128-bit ID */
1176         if (deviceID[2] == 0xa5) {
1177                 sprintf(blurbtxt + strlen(blurbtxt),
1178                         ", 128-bit ID");
1179         }
1180 
1181         /* Byte 3 announces the availability of another read ID command */
1182         if (deviceID[3] == 0xc0) {
1183                 sprintf(blurbtxt + strlen(blurbtxt),
1184                         ", extra cmd");
1185         }
1186 
1187         if (flags & SDDR09_WP)
1188                 sprintf(blurbtxt + strlen(blurbtxt),
1189                         ", WP");
1190 
1191         printk(KERN_WARNING "%s\n", blurbtxt);
1192 
1193         return cardinfo;
1194 }
1195 
1196 static int
1197 sddr09_read_map(struct us_data *us) {
1198 
1199         struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
1200         int numblocks, alloc_len, alloc_blocks;
1201         int i, j, result;
1202         unsigned char *buffer, *buffer_end, *ptr;
1203         unsigned int lba, lbact;
1204 
1205         if (!info->capacity)
1206                 return -1;
1207 
1208         /*
1209          * size of a block is 1 << (blockshift + pageshift) bytes
1210          * divide into the total capacity to get the number of blocks
1211          */
1212 
1213         numblocks = info->capacity >> (info->blockshift + info->pageshift);
1214 
1215         /*
1216          * read 64 bytes for every block (actually 1 << CONTROL_SHIFT)
1217          * but only use a 64 KB buffer
1218          * buffer size used must be a multiple of (1 << CONTROL_SHIFT)
1219          */
1220 #define SDDR09_READ_MAP_BUFSZ 65536
1221 
1222         alloc_blocks = min(numblocks, SDDR09_READ_MAP_BUFSZ >> CONTROL_SHIFT);
1223         alloc_len = (alloc_blocks << CONTROL_SHIFT);
1224         buffer = kmalloc(alloc_len, GFP_NOIO);
1225         if (!buffer) {
1226                 result = -1;
1227                 goto done;
1228         }
1229         buffer_end = buffer + alloc_len;
1230 
1231 #undef SDDR09_READ_MAP_BUFSZ
1232 
1233         kfree(info->lba_to_pba);
1234         kfree(info->pba_to_lba);
1235         info->lba_to_pba = kmalloc_array(numblocks, sizeof(int), GFP_NOIO);
1236         info->pba_to_lba = kmalloc_array(numblocks, sizeof(int), GFP_NOIO);
1237 
1238         if (info->lba_to_pba == NULL || info->pba_to_lba == NULL) {
1239                 printk(KERN_WARNING "sddr09_read_map: out of memory\n");
1240                 result = -1;
1241                 goto done;
1242         }
1243 
1244         for (i = 0; i < numblocks; i++)
1245                 info->lba_to_pba[i] = info->pba_to_lba[i] = UNDEF;
1246 
1247         /*
1248          * Define lba-pba translation table
1249          */
1250 
1251         ptr = buffer_end;
1252         for (i = 0; i < numblocks; i++) {
1253                 ptr += (1 << CONTROL_SHIFT);
1254                 if (ptr >= buffer_end) {
1255                         unsigned long address;
1256 
1257                         address = i << (info->pageshift + info->blockshift);
1258                         result = sddr09_read_control(
1259                                 us, address>>1,
1260                                 min(alloc_blocks, numblocks - i),
1261                                 buffer, 0);
1262                         if (result) {
1263                                 result = -1;
1264                                 goto done;
1265                         }
1266                         ptr = buffer;
1267                 }
1268 
1269                 if (i == 0 || i == 1) {
1270                         info->pba_to_lba[i] = UNUSABLE;
1271                         continue;
1272                 }
1273 
1274                 /* special PBAs have control field 0^16 */
1275                 for (j = 0; j < 16; j++)
1276                         if (ptr[j] != 0)
1277                                 goto nonz;
1278                 info->pba_to_lba[i] = UNUSABLE;
1279                 printk(KERN_WARNING "sddr09: PBA %d has no logical mapping\n",
1280                        i);
1281                 continue;
1282 
1283         nonz:
1284                 /* unwritten PBAs have control field FF^16 */
1285                 for (j = 0; j < 16; j++)
1286                         if (ptr[j] != 0xff)
1287                                 goto nonff;
1288                 continue;
1289 
1290         nonff:
1291                 /* normal PBAs start with six FFs */
1292                 if (j < 6) {
1293                         printk(KERN_WARNING
1294                                "sddr09: PBA %d has no logical mapping: "
1295                                "reserved area = %02X%02X%02X%02X "
1296                                "data status %02X block status %02X\n",
1297                                i, ptr[0], ptr[1], ptr[2], ptr[3],
1298                                ptr[4], ptr[5]);
1299                         info->pba_to_lba[i] = UNUSABLE;
1300                         continue;
1301                 }
1302 
1303                 if ((ptr[6] >> 4) != 0x01) {
1304                         printk(KERN_WARNING
1305                                "sddr09: PBA %d has invalid address field "
1306                                "%02X%02X/%02X%02X\n",
1307                                i, ptr[6], ptr[7], ptr[11], ptr[12]);
1308                         info->pba_to_lba[i] = UNUSABLE;
1309                         continue;
1310                 }
1311 
1312                 /* check even parity */
1313                 if (parity[ptr[6] ^ ptr[7]]) {
1314                         printk(KERN_WARNING
1315                                "sddr09: Bad parity in LBA for block %d"
1316                                " (%02X %02X)\n", i, ptr[6], ptr[7]);
1317                         info->pba_to_lba[i] = UNUSABLE;
1318                         continue;
1319                 }
1320 
1321                 lba = short_pack(ptr[7], ptr[6]);
1322                 lba = (lba & 0x07FF) >> 1;
1323 
1324                 /*
1325                  * Every 1024 physical blocks ("zone"), the LBA numbers
1326                  * go back to zero, but are within a higher block of LBA's.
1327                  * Also, there is a maximum of 1000 LBA's per zone.
1328                  * In other words, in PBA 1024-2047 you will find LBA 0-999
1329                  * which are really LBA 1000-1999. This allows for 24 bad
1330                  * or special physical blocks per zone.
1331                  */
1332 
1333                 if (lba >= 1000) {
1334                         printk(KERN_WARNING
1335                                "sddr09: Bad low LBA %d for block %d\n",
1336                                lba, i);
1337                         goto possibly_erase;
1338                 }
1339 
1340                 lba += 1000*(i/0x400);
1341 
1342                 if (info->lba_to_pba[lba] != UNDEF) {
1343                         printk(KERN_WARNING
1344                                "sddr09: LBA %d seen for PBA %d and %d\n",
1345                                lba, info->lba_to_pba[lba], i);
1346                         goto possibly_erase;
1347                 }
1348 
1349                 info->pba_to_lba[i] = lba;
1350                 info->lba_to_pba[lba] = i;
1351                 continue;
1352 
1353         possibly_erase:
1354                 if (erase_bad_lba_entries) {
1355                         unsigned long address;
1356 
1357                         address = (i << (info->pageshift + info->blockshift));
1358                         sddr09_erase(us, address>>1);
1359                         info->pba_to_lba[i] = UNDEF;
1360                 } else
1361                         info->pba_to_lba[i] = UNUSABLE;
1362         }
1363 
1364         /*
1365          * Approximate capacity. This is not entirely correct yet,
1366          * since a zone with less than 1000 usable pages leads to
1367          * missing LBAs. Especially if it is the last zone, some
1368          * LBAs can be past capacity.
1369          */
1370         lbact = 0;
1371         for (i = 0; i < numblocks; i += 1024) {
1372                 int ct = 0;
1373 
1374                 for (j = 0; j < 1024 && i+j < numblocks; j++) {
1375                         if (info->pba_to_lba[i+j] != UNUSABLE) {
1376                                 if (ct >= 1000)
1377                                         info->pba_to_lba[i+j] = SPARE;
1378                                 else
1379                                         ct++;
1380                         }
1381                 }
1382                 lbact += ct;
1383         }
1384         info->lbact = lbact;
1385         usb_stor_dbg(us, "Found %d LBA's\n", lbact);
1386         result = 0;
1387 
1388  done:
1389         if (result != 0) {
1390                 kfree(info->lba_to_pba);
1391                 kfree(info->pba_to_lba);
1392                 info->lba_to_pba = NULL;
1393                 info->pba_to_lba = NULL;
1394         }
1395         kfree(buffer);
1396         return result;
1397 }
1398 
1399 static void
1400 sddr09_card_info_destructor(void *extra) {
1401         struct sddr09_card_info *info = (struct sddr09_card_info *)extra;
1402 
1403         if (!info)
1404                 return;
1405 
1406         kfree(info->lba_to_pba);
1407         kfree(info->pba_to_lba);
1408 }
1409 
1410 static int
1411 sddr09_common_init(struct us_data *us) {
1412         int result;
1413 
1414         /* set the configuration -- STALL is an acceptable response here */
1415         if (us->pusb_dev->actconfig->desc.bConfigurationValue != 1) {
1416                 usb_stor_dbg(us, "active config #%d != 1 ??\n",
1417                              us->pusb_dev->actconfig->desc.bConfigurationValue);
1418                 return -EINVAL;
1419         }
1420 
1421         result = usb_reset_configuration(us->pusb_dev);
1422         usb_stor_dbg(us, "Result of usb_reset_configuration is %d\n", result);
1423         if (result == -EPIPE) {
1424                 usb_stor_dbg(us, "-- stall on control interface\n");
1425         } else if (result != 0) {
1426                 /* it's not a stall, but another error -- time to bail */
1427                 usb_stor_dbg(us, "-- Unknown error.  Rejecting device\n");
1428                 return -EINVAL;
1429         }
1430 
1431         us->extra = kzalloc(sizeof(struct sddr09_card_info), GFP_NOIO);
1432         if (!us->extra)
1433                 return -ENOMEM;
1434         us->extra_destructor = sddr09_card_info_destructor;
1435 
1436         nand_init_ecc();
1437         return 0;
1438 }
1439 
1440 
1441 /*
1442  * This is needed at a very early stage. If this is not listed in the
1443  * unusual devices list but called from here then LUN 0 of the combo reader
1444  * is not recognized. But I do not know what precisely these calls do.
1445  */
1446 static int
1447 usb_stor_sddr09_dpcm_init(struct us_data *us) {
1448         int result;
1449         unsigned char *data = us->iobuf;
1450 
1451         result = sddr09_common_init(us);
1452         if (result)
1453                 return result;
1454 
1455         result = sddr09_send_command(us, 0x01, USB_DIR_IN, data, 2);
1456         if (result) {
1457                 usb_stor_dbg(us, "send_command fails\n");
1458                 return result;
1459         }
1460 
1461         usb_stor_dbg(us, "%02X %02X\n", data[0], data[1]);
1462         // get 07 02
1463 
1464         result = sddr09_send_command(us, 0x08, USB_DIR_IN, data, 2);
1465         if (result) {
1466                 usb_stor_dbg(us, "2nd send_command fails\n");
1467                 return result;
1468         }
1469 
1470         usb_stor_dbg(us, "%02X %02X\n", data[0], data[1]);
1471         // get 07 00
1472 
1473         result = sddr09_request_sense(us, data, 18);
1474         if (result == 0 && data[2] != 0) {
1475                 int j;
1476                 for (j=0; j<18; j++)
1477                         printk(" %02X", data[j]);
1478                 printk("\n");
1479                 // get 70 00 00 00 00 00 00 * 00 00 00 00 00 00
1480                 // 70: current command
1481                 // sense key 0, sense code 0, extd sense code 0
1482                 // additional transfer length * = sizeof(data) - 7
1483                 // Or: 70 00 06 00 00 00 00 0b 00 00 00 00 28 00 00 00 00 00
1484                 // sense key 06, sense code 28: unit attention,
1485                 // not ready to ready transition
1486         }
1487 
1488         // test unit ready
1489 
1490         return 0;               /* not result */
1491 }
1492 
1493 /*
1494  * Transport for the Microtech DPCM-USB
1495  */
1496 static int dpcm_transport(struct scsi_cmnd *srb, struct us_data *us)
1497 {
1498         int ret;
1499 
1500         usb_stor_dbg(us, "LUN=%d\n", (u8)srb->device->lun);
1501 
1502         switch (srb->device->lun) {
1503         case 0:
1504 
1505                 /*
1506                  * LUN 0 corresponds to the CompactFlash card reader.
1507                  */
1508                 ret = usb_stor_CB_transport(srb, us);
1509                 break;
1510 
1511         case 1:
1512 
1513                 /*
1514                  * LUN 1 corresponds to the SmartMedia card reader.
1515                  */
1516 
1517                 /*
1518                  * Set the LUN to 0 (just in case).
1519                  */
1520                 srb->device->lun = 0;
1521                 ret = sddr09_transport(srb, us);
1522                 srb->device->lun = 1;
1523                 break;
1524 
1525         default:
1526             usb_stor_dbg(us, "Invalid LUN %d\n", (u8)srb->device->lun);
1527                 ret = USB_STOR_TRANSPORT_ERROR;
1528                 break;
1529         }
1530         return ret;
1531 }
1532 
1533 
1534 /*
1535  * Transport for the Sandisk SDDR-09
1536  */
1537 static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us)
1538 {
1539         static unsigned char sensekey = 0, sensecode = 0;
1540         static unsigned char havefakesense = 0;
1541         int result, i;
1542         unsigned char *ptr = us->iobuf;
1543         unsigned long capacity;
1544         unsigned int page, pages;
1545 
1546         struct sddr09_card_info *info;
1547 
1548         static unsigned char inquiry_response[8] = {
1549                 0x00, 0x80, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x00
1550         };
1551 
1552         /* note: no block descriptor support */
1553         static unsigned char mode_page_01[19] = {
1554                 0x00, 0x0F, 0x00, 0x0, 0x0, 0x0, 0x00,
1555                 0x01, 0x0A,
1556                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1557         };
1558 
1559         info = (struct sddr09_card_info *)us->extra;
1560 
1561         if (srb->cmnd[0] == REQUEST_SENSE && havefakesense) {
1562                 /* for a faked command, we have to follow with a faked sense */
1563                 memset(ptr, 0, 18);
1564                 ptr[0] = 0x70;
1565                 ptr[2] = sensekey;
1566                 ptr[7] = 11;
1567                 ptr[12] = sensecode;
1568                 usb_stor_set_xfer_buf(ptr, 18, srb);
1569                 sensekey = sensecode = havefakesense = 0;
1570                 return USB_STOR_TRANSPORT_GOOD;
1571         }
1572 
1573         havefakesense = 1;
1574 
1575         /*
1576          * Dummy up a response for INQUIRY since SDDR09 doesn't
1577          * respond to INQUIRY commands
1578          */
1579 
1580         if (srb->cmnd[0] == INQUIRY) {
1581                 memcpy(ptr, inquiry_response, 8);
1582                 fill_inquiry_response(us, ptr, 36);
1583                 return USB_STOR_TRANSPORT_GOOD;
1584         }
1585 
1586         if (srb->cmnd[0] == READ_CAPACITY) {
1587                 struct nand_flash_dev *cardinfo;
1588 
1589                 sddr09_get_wp(us, info);        /* read WP bit */
1590 
1591                 cardinfo = sddr09_get_cardinfo(us, info->flags);
1592                 if (!cardinfo) {
1593                         /* probably no media */
1594                 init_error:
1595                         sensekey = 0x02;        /* not ready */
1596                         sensecode = 0x3a;       /* medium not present */
1597                         return USB_STOR_TRANSPORT_FAILED;
1598                 }
1599 
1600                 info->capacity = (1 << cardinfo->chipshift);
1601                 info->pageshift = cardinfo->pageshift;
1602                 info->pagesize = (1 << info->pageshift);
1603                 info->blockshift = cardinfo->blockshift;
1604                 info->blocksize = (1 << info->blockshift);
1605                 info->blockmask = info->blocksize - 1;
1606 
1607                 // map initialization, must follow get_cardinfo()
1608                 if (sddr09_read_map(us)) {
1609                         /* probably out of memory */
1610                         goto init_error;
1611                 }
1612 
1613                 // Report capacity
1614 
1615                 capacity = (info->lbact << info->blockshift) - 1;
1616 
1617                 ((__be32 *) ptr)[0] = cpu_to_be32(capacity);
1618 
1619                 // Report page size
1620 
1621                 ((__be32 *) ptr)[1] = cpu_to_be32(info->pagesize);
1622                 usb_stor_set_xfer_buf(ptr, 8, srb);
1623 
1624                 return USB_STOR_TRANSPORT_GOOD;
1625         }
1626 
1627         if (srb->cmnd[0] == MODE_SENSE_10) {
1628                 int modepage = (srb->cmnd[2] & 0x3F);
1629 
1630                 /*
1631                  * They ask for the Read/Write error recovery page,
1632                  * or for all pages.
1633                  */
1634                 /* %% We should check DBD %% */
1635                 if (modepage == 0x01 || modepage == 0x3F) {
1636                         usb_stor_dbg(us, "Dummy up request for mode page 0x%x\n",
1637                                      modepage);
1638 
1639                         memcpy(ptr, mode_page_01, sizeof(mode_page_01));
1640                         ((__be16*)ptr)[0] = cpu_to_be16(sizeof(mode_page_01) - 2);
1641                         ptr[3] = (info->flags & SDDR09_WP) ? 0x80 : 0;
1642                         usb_stor_set_xfer_buf(ptr, sizeof(mode_page_01), srb);
1643                         return USB_STOR_TRANSPORT_GOOD;
1644                 }
1645 
1646                 sensekey = 0x05;        /* illegal request */
1647                 sensecode = 0x24;       /* invalid field in CDB */
1648                 return USB_STOR_TRANSPORT_FAILED;
1649         }
1650 
1651         if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL)
1652                 return USB_STOR_TRANSPORT_GOOD;
1653 
1654         havefakesense = 0;
1655 
1656         if (srb->cmnd[0] == READ_10) {
1657 
1658                 page = short_pack(srb->cmnd[3], srb->cmnd[2]);
1659                 page <<= 16;
1660                 page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
1661                 pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
1662 
1663                 usb_stor_dbg(us, "READ_10: read page %d pagect %d\n",
1664                              page, pages);
1665 
1666                 result = sddr09_read_data(us, page, pages);
1667                 return (result == 0 ? USB_STOR_TRANSPORT_GOOD :
1668                                 USB_STOR_TRANSPORT_ERROR);
1669         }
1670 
1671         if (srb->cmnd[0] == WRITE_10) {
1672 
1673                 page = short_pack(srb->cmnd[3], srb->cmnd[2]);
1674                 page <<= 16;
1675                 page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
1676                 pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
1677 
1678                 usb_stor_dbg(us, "WRITE_10: write page %d pagect %d\n",
1679                              page, pages);
1680 
1681                 result = sddr09_write_data(us, page, pages);
1682                 return (result == 0 ? USB_STOR_TRANSPORT_GOOD :
1683                                 USB_STOR_TRANSPORT_ERROR);
1684         }
1685 
1686         /*
1687          * catch-all for all other commands, except
1688          * pass TEST_UNIT_READY and REQUEST_SENSE through
1689          */
1690         if (srb->cmnd[0] != TEST_UNIT_READY &&
1691             srb->cmnd[0] != REQUEST_SENSE) {
1692                 sensekey = 0x05;        /* illegal request */
1693                 sensecode = 0x20;       /* invalid command */
1694                 havefakesense = 1;
1695                 return USB_STOR_TRANSPORT_FAILED;
1696         }
1697 
1698         for (; srb->cmd_len<12; srb->cmd_len++)
1699                 srb->cmnd[srb->cmd_len] = 0;
1700 
1701         srb->cmnd[1] = LUNBITS;
1702 
1703         ptr[0] = 0;
1704         for (i=0; i<12; i++)
1705                 sprintf(ptr+strlen(ptr), "%02X ", srb->cmnd[i]);
1706 
1707         usb_stor_dbg(us, "Send control for command %s\n", ptr);
1708 
1709         result = sddr09_send_scsi_command(us, srb->cmnd, 12);
1710         if (result) {
1711                 usb_stor_dbg(us, "sddr09_send_scsi_command returns %d\n",
1712                              result);
1713                 return USB_STOR_TRANSPORT_ERROR;
1714         }
1715 
1716         if (scsi_bufflen(srb) == 0)
1717                 return USB_STOR_TRANSPORT_GOOD;
1718 
1719         if (srb->sc_data_direction == DMA_TO_DEVICE ||
1720             srb->sc_data_direction == DMA_FROM_DEVICE) {
1721                 unsigned int pipe = (srb->sc_data_direction == DMA_TO_DEVICE)
1722                                 ? us->send_bulk_pipe : us->recv_bulk_pipe;
1723 
1724                 usb_stor_dbg(us, "%s %d bytes\n",
1725                              (srb->sc_data_direction == DMA_TO_DEVICE) ?
1726                              "sending" : "receiving",
1727                              scsi_bufflen(srb));
1728 
1729                 result = usb_stor_bulk_srb(us, pipe, srb);
1730 
1731                 return (result == USB_STOR_XFER_GOOD ?
1732                         USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
1733         } 
1734 
1735         return USB_STOR_TRANSPORT_GOOD;
1736 }
1737 
1738 /*
1739  * Initialization routine for the sddr09 subdriver
1740  */
1741 static int
1742 usb_stor_sddr09_init(struct us_data *us) {
1743         return sddr09_common_init(us);
1744 }
1745 
1746 static struct scsi_host_template sddr09_host_template;
1747 
1748 static int sddr09_probe(struct usb_interface *intf,
1749                          const struct usb_device_id *id)
1750 {
1751         struct us_data *us;
1752         int result;
1753 
1754         result = usb_stor_probe1(&us, intf, id,
1755                         (id - sddr09_usb_ids) + sddr09_unusual_dev_list,
1756                         &sddr09_host_template);
1757         if (result)
1758                 return result;
1759 
1760         if (us->protocol == USB_PR_DPCM_USB) {
1761                 us->transport_name = "Control/Bulk-EUSB/SDDR09";
1762                 us->transport = dpcm_transport;
1763                 us->transport_reset = usb_stor_CB_reset;
1764                 us->max_lun = 1;
1765         } else {
1766                 us->transport_name = "EUSB/SDDR09";
1767                 us->transport = sddr09_transport;
1768                 us->transport_reset = usb_stor_CB_reset;
1769                 us->max_lun = 0;
1770         }
1771 
1772         result = usb_stor_probe2(us);
1773         return result;
1774 }
1775 
1776 static struct usb_driver sddr09_driver = {
1777         .name =         DRV_NAME,
1778         .probe =        sddr09_probe,
1779         .disconnect =   usb_stor_disconnect,
1780         .suspend =      usb_stor_suspend,
1781         .resume =       usb_stor_resume,
1782         .reset_resume = usb_stor_reset_resume,
1783         .pre_reset =    usb_stor_pre_reset,
1784         .post_reset =   usb_stor_post_reset,
1785         .id_table =     sddr09_usb_ids,
1786         .soft_unbind =  1,
1787         .no_dynamic_id = 1,
1788 };
1789 
1790 module_usb_stor_driver(sddr09_driver, sddr09_host_template, DRV_NAME);

/* [<][>][^][v][top][bottom][index][help] */