linux/drivers/usb/storage/sddr09.c
<<
>>
Prefs
   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
  47MODULE_DESCRIPTION("Driver for SanDisk SDDR-09 SmartMedia reader");
  48MODULE_AUTHOR("Andries Brouwer <aeb@cwi.nl>, Robert Baruch <autophile@starband.net>");
  49MODULE_LICENSE("GPL");
  50MODULE_IMPORT_NS(USB_STORAGE);
  51
  52static int usb_stor_sddr09_dpcm_init(struct us_data *us);
  53static int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us);
  54static 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
  66static struct usb_device_id sddr09_usb_ids[] = {
  67#       include "unusual_sddr09.h"
  68        { }             /* Terminating entry */
  69};
  70MODULE_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
  88static 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
 107struct 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
 125static 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
 147static 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
 172static struct nand_flash_dev *
 173nand_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 */
 185static unsigned char parity[256];
 186static unsigned char ecc2[256];
 187
 188static 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 */
 212static 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
 235static 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
 239static 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
 247struct 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
 284static const int erase_bad_lba_entries = 0;
 285
 286/* send vendor interface command (0x41) */
 287/* called for requests 0, 1, 8 */
 288static int
 289sddr09_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
 314static int
 315sddr09_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 */
 326static int
 327sddr09_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 */
 347static int
 348sddr09_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
 388static int
 389sddr09_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 */
 437static int
 438sddr09_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 */
 460static int
 461sddr09_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 */
 478static int
 479sddr09_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 */
 502static int
 503sddr09_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 */
 521static int
 522sddr09_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 */
 570static int
 571sddr09_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 */
 614static int
 615sddr09_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 */
 635static int
 636sddr09_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
 708static int
 709sddr09_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
 731static int
 732sddr09_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
 824static unsigned int
 825sddr09_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
 850static int
 851sddr09_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
 957static int
 958sddr09_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
1046static int
1047sddr09_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 */
1070static int
1071sddr09_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
1093static int
1094sddr09_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 */
1123static int
1124sddr09_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
1136static struct nand_flash_dev *
1137sddr09_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
1196static int
1197sddr09_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
1399static void
1400sddr09_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
1410static int
1411sddr09_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 */
1446static int
1447usb_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 */
1496static 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 */
1537static 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 */
1741static int
1742usb_stor_sddr09_init(struct us_data *us) {
1743        return sddr09_common_init(us);
1744}
1745
1746static struct scsi_host_template sddr09_host_template;
1747
1748static 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
1776static 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
1790module_usb_stor_driver(sddr09_driver, sddr09_host_template, DRV_NAME);
1791