Linux 4.19.133
[linux/fpc-iii.git] / drivers / memstick / core / ms_block.c
blob716fc8ed31d324dc4daa8ad83d730217ae5457f0
1 /*
2 * ms_block.c - Sony MemoryStick (legacy) storage support
4 * Copyright (C) 2013 Maxim Levitsky <maximlevitsky@gmail.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 * Minor portions of the driver were copied from mspro_block.c which is
11 * Copyright (C) 2007 Alex Dubov <oakad@yahoo.com>
14 #define DRIVER_NAME "ms_block"
15 #define pr_fmt(fmt) DRIVER_NAME ": " fmt
17 #include <linux/module.h>
18 #include <linux/blkdev.h>
19 #include <linux/memstick.h>
20 #include <linux/idr.h>
21 #include <linux/hdreg.h>
22 #include <linux/delay.h>
23 #include <linux/slab.h>
24 #include <linux/random.h>
25 #include <linux/bitmap.h>
26 #include <linux/scatterlist.h>
27 #include <linux/jiffies.h>
28 #include <linux/workqueue.h>
29 #include <linux/mutex.h>
30 #include "ms_block.h"
32 static int debug;
33 static int cache_flush_timeout = 1000;
34 static bool verify_writes;
37 * Copies section of 'sg_from' starting from offset 'offset' and with length
38 * 'len' To another scatterlist of to_nents enties
40 static size_t msb_sg_copy(struct scatterlist *sg_from,
41 struct scatterlist *sg_to, int to_nents, size_t offset, size_t len)
43 size_t copied = 0;
45 while (offset > 0) {
46 if (offset >= sg_from->length) {
47 if (sg_is_last(sg_from))
48 return 0;
50 offset -= sg_from->length;
51 sg_from = sg_next(sg_from);
52 continue;
55 copied = min(len, sg_from->length - offset);
56 sg_set_page(sg_to, sg_page(sg_from),
57 copied, sg_from->offset + offset);
59 len -= copied;
60 offset = 0;
62 if (sg_is_last(sg_from) || !len)
63 goto out;
65 sg_to = sg_next(sg_to);
66 to_nents--;
67 sg_from = sg_next(sg_from);
70 while (len > sg_from->length && to_nents--) {
71 len -= sg_from->length;
72 copied += sg_from->length;
74 sg_set_page(sg_to, sg_page(sg_from),
75 sg_from->length, sg_from->offset);
77 if (sg_is_last(sg_from) || !len)
78 goto out;
80 sg_from = sg_next(sg_from);
81 sg_to = sg_next(sg_to);
84 if (len && to_nents) {
85 sg_set_page(sg_to, sg_page(sg_from), len, sg_from->offset);
86 copied += len;
88 out:
89 sg_mark_end(sg_to);
90 return copied;
94 * Compares section of 'sg' starting from offset 'offset' and with length 'len'
95 * to linear buffer of length 'len' at address 'buffer'
96 * Returns 0 if equal and -1 otherwice
98 static int msb_sg_compare_to_buffer(struct scatterlist *sg,
99 size_t offset, u8 *buffer, size_t len)
101 int retval = 0, cmplen;
102 struct sg_mapping_iter miter;
104 sg_miter_start(&miter, sg, sg_nents(sg),
105 SG_MITER_ATOMIC | SG_MITER_FROM_SG);
107 while (sg_miter_next(&miter) && len > 0) {
108 if (offset >= miter.length) {
109 offset -= miter.length;
110 continue;
113 cmplen = min(miter.length - offset, len);
114 retval = memcmp(miter.addr + offset, buffer, cmplen) ? -1 : 0;
115 if (retval)
116 break;
118 buffer += cmplen;
119 len -= cmplen;
120 offset = 0;
123 if (!retval && len)
124 retval = -1;
126 sg_miter_stop(&miter);
127 return retval;
131 /* Get zone at which block with logical address 'lba' lives
132 * Flash is broken into zones.
133 * Each zone consists of 512 eraseblocks, out of which in first
134 * zone 494 are used and 496 are for all following zones.
135 * Therefore zone #0 hosts blocks 0-493, zone #1 blocks 494-988, etc...
137 static int msb_get_zone_from_lba(int lba)
139 if (lba < 494)
140 return 0;
141 return ((lba - 494) / 496) + 1;
144 /* Get zone of physical block. Trivial */
145 static int msb_get_zone_from_pba(int pba)
147 return pba / MS_BLOCKS_IN_ZONE;
150 /* Debug test to validate free block counts */
151 static int msb_validate_used_block_bitmap(struct msb_data *msb)
153 int total_free_blocks = 0;
154 int i;
156 if (!debug)
157 return 0;
159 for (i = 0; i < msb->zone_count; i++)
160 total_free_blocks += msb->free_block_count[i];
162 if (msb->block_count - bitmap_weight(msb->used_blocks_bitmap,
163 msb->block_count) == total_free_blocks)
164 return 0;
166 pr_err("BUG: free block counts don't match the bitmap");
167 msb->read_only = true;
168 return -EINVAL;
171 /* Mark physical block as used */
172 static void msb_mark_block_used(struct msb_data *msb, int pba)
174 int zone = msb_get_zone_from_pba(pba);
176 if (test_bit(pba, msb->used_blocks_bitmap)) {
177 pr_err(
178 "BUG: attempt to mark already used pba %d as used", pba);
179 msb->read_only = true;
180 return;
183 if (msb_validate_used_block_bitmap(msb))
184 return;
186 /* No races because all IO is single threaded */
187 __set_bit(pba, msb->used_blocks_bitmap);
188 msb->free_block_count[zone]--;
191 /* Mark physical block as free */
192 static void msb_mark_block_unused(struct msb_data *msb, int pba)
194 int zone = msb_get_zone_from_pba(pba);
196 if (!test_bit(pba, msb->used_blocks_bitmap)) {
197 pr_err("BUG: attempt to mark already unused pba %d as unused" , pba);
198 msb->read_only = true;
199 return;
202 if (msb_validate_used_block_bitmap(msb))
203 return;
205 /* No races because all IO is single threaded */
206 __clear_bit(pba, msb->used_blocks_bitmap);
207 msb->free_block_count[zone]++;
210 /* Invalidate current register window */
211 static void msb_invalidate_reg_window(struct msb_data *msb)
213 msb->reg_addr.w_offset = offsetof(struct ms_register, id);
214 msb->reg_addr.w_length = sizeof(struct ms_id_register);
215 msb->reg_addr.r_offset = offsetof(struct ms_register, id);
216 msb->reg_addr.r_length = sizeof(struct ms_id_register);
217 msb->addr_valid = false;
220 /* Start a state machine */
221 static int msb_run_state_machine(struct msb_data *msb, int (*state_func)
222 (struct memstick_dev *card, struct memstick_request **req))
224 struct memstick_dev *card = msb->card;
226 WARN_ON(msb->state != -1);
227 msb->int_polling = false;
228 msb->state = 0;
229 msb->exit_error = 0;
231 memset(&card->current_mrq, 0, sizeof(card->current_mrq));
233 card->next_request = state_func;
234 memstick_new_req(card->host);
235 wait_for_completion(&card->mrq_complete);
237 WARN_ON(msb->state != -1);
238 return msb->exit_error;
241 /* State machines call that to exit */
242 static int msb_exit_state_machine(struct msb_data *msb, int error)
244 WARN_ON(msb->state == -1);
246 msb->state = -1;
247 msb->exit_error = error;
248 msb->card->next_request = h_msb_default_bad;
250 /* Invalidate reg window on errors */
251 if (error)
252 msb_invalidate_reg_window(msb);
254 complete(&msb->card->mrq_complete);
255 return -ENXIO;
258 /* read INT register */
259 static int msb_read_int_reg(struct msb_data *msb, long timeout)
261 struct memstick_request *mrq = &msb->card->current_mrq;
263 WARN_ON(msb->state == -1);
265 if (!msb->int_polling) {
266 msb->int_timeout = jiffies +
267 msecs_to_jiffies(timeout == -1 ? 500 : timeout);
268 msb->int_polling = true;
269 } else if (time_after(jiffies, msb->int_timeout)) {
270 mrq->data[0] = MEMSTICK_INT_CMDNAK;
271 return 0;
274 if ((msb->caps & MEMSTICK_CAP_AUTO_GET_INT) &&
275 mrq->need_card_int && !mrq->error) {
276 mrq->data[0] = mrq->int_reg;
277 mrq->need_card_int = false;
278 return 0;
279 } else {
280 memstick_init_req(mrq, MS_TPC_GET_INT, NULL, 1);
281 return 1;
285 /* Read a register */
286 static int msb_read_regs(struct msb_data *msb, int offset, int len)
288 struct memstick_request *req = &msb->card->current_mrq;
290 if (msb->reg_addr.r_offset != offset ||
291 msb->reg_addr.r_length != len || !msb->addr_valid) {
293 msb->reg_addr.r_offset = offset;
294 msb->reg_addr.r_length = len;
295 msb->addr_valid = true;
297 memstick_init_req(req, MS_TPC_SET_RW_REG_ADRS,
298 &msb->reg_addr, sizeof(msb->reg_addr));
299 return 0;
302 memstick_init_req(req, MS_TPC_READ_REG, NULL, len);
303 return 1;
306 /* Write a card register */
307 static int msb_write_regs(struct msb_data *msb, int offset, int len, void *buf)
309 struct memstick_request *req = &msb->card->current_mrq;
311 if (msb->reg_addr.w_offset != offset ||
312 msb->reg_addr.w_length != len || !msb->addr_valid) {
314 msb->reg_addr.w_offset = offset;
315 msb->reg_addr.w_length = len;
316 msb->addr_valid = true;
318 memstick_init_req(req, MS_TPC_SET_RW_REG_ADRS,
319 &msb->reg_addr, sizeof(msb->reg_addr));
320 return 0;
323 memstick_init_req(req, MS_TPC_WRITE_REG, buf, len);
324 return 1;
327 /* Handler for absence of IO */
328 static int h_msb_default_bad(struct memstick_dev *card,
329 struct memstick_request **mrq)
331 return -ENXIO;
335 * This function is a handler for reads of one page from device.
336 * Writes output to msb->current_sg, takes sector address from msb->reg.param
337 * Can also be used to read extra data only. Set params accordintly.
339 static int h_msb_read_page(struct memstick_dev *card,
340 struct memstick_request **out_mrq)
342 struct msb_data *msb = memstick_get_drvdata(card);
343 struct memstick_request *mrq = *out_mrq = &card->current_mrq;
344 struct scatterlist sg[2];
345 u8 command, intreg;
347 if (mrq->error) {
348 dbg("read_page, unknown error");
349 return msb_exit_state_machine(msb, mrq->error);
351 again:
352 switch (msb->state) {
353 case MSB_RP_SEND_BLOCK_ADDRESS:
354 /* msb_write_regs sometimes "fails" because it needs to update
355 the reg window, and thus it returns request for that.
356 Then we stay in this state and retry */
357 if (!msb_write_regs(msb,
358 offsetof(struct ms_register, param),
359 sizeof(struct ms_param_register),
360 (unsigned char *)&msb->regs.param))
361 return 0;
363 msb->state = MSB_RP_SEND_READ_COMMAND;
364 return 0;
366 case MSB_RP_SEND_READ_COMMAND:
367 command = MS_CMD_BLOCK_READ;
368 memstick_init_req(mrq, MS_TPC_SET_CMD, &command, 1);
369 msb->state = MSB_RP_SEND_INT_REQ;
370 return 0;
372 case MSB_RP_SEND_INT_REQ:
373 msb->state = MSB_RP_RECEIVE_INT_REQ_RESULT;
374 /* If dont actually need to send the int read request (only in
375 serial mode), then just fall through */
376 if (msb_read_int_reg(msb, -1))
377 return 0;
378 /* fallthrough */
380 case MSB_RP_RECEIVE_INT_REQ_RESULT:
381 intreg = mrq->data[0];
382 msb->regs.status.interrupt = intreg;
384 if (intreg & MEMSTICK_INT_CMDNAK)
385 return msb_exit_state_machine(msb, -EIO);
387 if (!(intreg & MEMSTICK_INT_CED)) {
388 msb->state = MSB_RP_SEND_INT_REQ;
389 goto again;
392 msb->int_polling = false;
393 msb->state = (intreg & MEMSTICK_INT_ERR) ?
394 MSB_RP_SEND_READ_STATUS_REG : MSB_RP_SEND_OOB_READ;
395 goto again;
397 case MSB_RP_SEND_READ_STATUS_REG:
398 /* read the status register to understand source of the INT_ERR */
399 if (!msb_read_regs(msb,
400 offsetof(struct ms_register, status),
401 sizeof(struct ms_status_register)))
402 return 0;
404 msb->state = MSB_RP_RECEIVE_STATUS_REG;
405 return 0;
407 case MSB_RP_RECEIVE_STATUS_REG:
408 msb->regs.status = *(struct ms_status_register *)mrq->data;
409 msb->state = MSB_RP_SEND_OOB_READ;
410 /* fallthrough */
412 case MSB_RP_SEND_OOB_READ:
413 if (!msb_read_regs(msb,
414 offsetof(struct ms_register, extra_data),
415 sizeof(struct ms_extra_data_register)))
416 return 0;
418 msb->state = MSB_RP_RECEIVE_OOB_READ;
419 return 0;
421 case MSB_RP_RECEIVE_OOB_READ:
422 msb->regs.extra_data =
423 *(struct ms_extra_data_register *) mrq->data;
424 msb->state = MSB_RP_SEND_READ_DATA;
425 /* fallthrough */
427 case MSB_RP_SEND_READ_DATA:
428 /* Skip that state if we only read the oob */
429 if (msb->regs.param.cp == MEMSTICK_CP_EXTRA) {
430 msb->state = MSB_RP_RECEIVE_READ_DATA;
431 goto again;
434 sg_init_table(sg, ARRAY_SIZE(sg));
435 msb_sg_copy(msb->current_sg, sg, ARRAY_SIZE(sg),
436 msb->current_sg_offset,
437 msb->page_size);
439 memstick_init_req_sg(mrq, MS_TPC_READ_LONG_DATA, sg);
440 msb->state = MSB_RP_RECEIVE_READ_DATA;
441 return 0;
443 case MSB_RP_RECEIVE_READ_DATA:
444 if (!(msb->regs.status.interrupt & MEMSTICK_INT_ERR)) {
445 msb->current_sg_offset += msb->page_size;
446 return msb_exit_state_machine(msb, 0);
449 if (msb->regs.status.status1 & MEMSTICK_UNCORR_ERROR) {
450 dbg("read_page: uncorrectable error");
451 return msb_exit_state_machine(msb, -EBADMSG);
454 if (msb->regs.status.status1 & MEMSTICK_CORR_ERROR) {
455 dbg("read_page: correctable error");
456 msb->current_sg_offset += msb->page_size;
457 return msb_exit_state_machine(msb, -EUCLEAN);
458 } else {
459 dbg("read_page: INT error, but no status error bits");
460 return msb_exit_state_machine(msb, -EIO);
464 BUG();
468 * Handler of writes of exactly one block.
469 * Takes address from msb->regs.param.
470 * Writes same extra data to blocks, also taken
471 * from msb->regs.extra
472 * Returns -EBADMSG if write fails due to uncorrectable error, or -EIO if
473 * device refuses to take the command or something else
475 static int h_msb_write_block(struct memstick_dev *card,
476 struct memstick_request **out_mrq)
478 struct msb_data *msb = memstick_get_drvdata(card);
479 struct memstick_request *mrq = *out_mrq = &card->current_mrq;
480 struct scatterlist sg[2];
481 u8 intreg, command;
483 if (mrq->error)
484 return msb_exit_state_machine(msb, mrq->error);
486 again:
487 switch (msb->state) {
489 /* HACK: Jmicon handling of TPCs between 8 and
490 * sizeof(memstick_request.data) is broken due to hardware
491 * bug in PIO mode that is used for these TPCs
492 * Therefore split the write
495 case MSB_WB_SEND_WRITE_PARAMS:
496 if (!msb_write_regs(msb,
497 offsetof(struct ms_register, param),
498 sizeof(struct ms_param_register),
499 &msb->regs.param))
500 return 0;
502 msb->state = MSB_WB_SEND_WRITE_OOB;
503 return 0;
505 case MSB_WB_SEND_WRITE_OOB:
506 if (!msb_write_regs(msb,
507 offsetof(struct ms_register, extra_data),
508 sizeof(struct ms_extra_data_register),
509 &msb->regs.extra_data))
510 return 0;
511 msb->state = MSB_WB_SEND_WRITE_COMMAND;
512 return 0;
515 case MSB_WB_SEND_WRITE_COMMAND:
516 command = MS_CMD_BLOCK_WRITE;
517 memstick_init_req(mrq, MS_TPC_SET_CMD, &command, 1);
518 msb->state = MSB_WB_SEND_INT_REQ;
519 return 0;
521 case MSB_WB_SEND_INT_REQ:
522 msb->state = MSB_WB_RECEIVE_INT_REQ;
523 if (msb_read_int_reg(msb, -1))
524 return 0;
525 /* fallthrough */
527 case MSB_WB_RECEIVE_INT_REQ:
528 intreg = mrq->data[0];
529 msb->regs.status.interrupt = intreg;
531 /* errors mean out of here, and fast... */
532 if (intreg & (MEMSTICK_INT_CMDNAK))
533 return msb_exit_state_machine(msb, -EIO);
535 if (intreg & MEMSTICK_INT_ERR)
536 return msb_exit_state_machine(msb, -EBADMSG);
539 /* for last page we need to poll CED */
540 if (msb->current_page == msb->pages_in_block) {
541 if (intreg & MEMSTICK_INT_CED)
542 return msb_exit_state_machine(msb, 0);
543 msb->state = MSB_WB_SEND_INT_REQ;
544 goto again;
548 /* for non-last page we need BREQ before writing next chunk */
549 if (!(intreg & MEMSTICK_INT_BREQ)) {
550 msb->state = MSB_WB_SEND_INT_REQ;
551 goto again;
554 msb->int_polling = false;
555 msb->state = MSB_WB_SEND_WRITE_DATA;
556 /* fallthrough */
558 case MSB_WB_SEND_WRITE_DATA:
559 sg_init_table(sg, ARRAY_SIZE(sg));
561 if (msb_sg_copy(msb->current_sg, sg, ARRAY_SIZE(sg),
562 msb->current_sg_offset,
563 msb->page_size) < msb->page_size)
564 return msb_exit_state_machine(msb, -EIO);
566 memstick_init_req_sg(mrq, MS_TPC_WRITE_LONG_DATA, sg);
567 mrq->need_card_int = 1;
568 msb->state = MSB_WB_RECEIVE_WRITE_CONFIRMATION;
569 return 0;
571 case MSB_WB_RECEIVE_WRITE_CONFIRMATION:
572 msb->current_page++;
573 msb->current_sg_offset += msb->page_size;
574 msb->state = MSB_WB_SEND_INT_REQ;
575 goto again;
576 default:
577 BUG();
580 return 0;
584 * This function is used to send simple IO requests to device that consist
585 * of register write + command
587 static int h_msb_send_command(struct memstick_dev *card,
588 struct memstick_request **out_mrq)
590 struct msb_data *msb = memstick_get_drvdata(card);
591 struct memstick_request *mrq = *out_mrq = &card->current_mrq;
592 u8 intreg;
594 if (mrq->error) {
595 dbg("send_command: unknown error");
596 return msb_exit_state_machine(msb, mrq->error);
598 again:
599 switch (msb->state) {
601 /* HACK: see h_msb_write_block */
602 case MSB_SC_SEND_WRITE_PARAMS: /* write param register*/
603 if (!msb_write_regs(msb,
604 offsetof(struct ms_register, param),
605 sizeof(struct ms_param_register),
606 &msb->regs.param))
607 return 0;
608 msb->state = MSB_SC_SEND_WRITE_OOB;
609 return 0;
611 case MSB_SC_SEND_WRITE_OOB:
612 if (!msb->command_need_oob) {
613 msb->state = MSB_SC_SEND_COMMAND;
614 goto again;
617 if (!msb_write_regs(msb,
618 offsetof(struct ms_register, extra_data),
619 sizeof(struct ms_extra_data_register),
620 &msb->regs.extra_data))
621 return 0;
623 msb->state = MSB_SC_SEND_COMMAND;
624 return 0;
626 case MSB_SC_SEND_COMMAND:
627 memstick_init_req(mrq, MS_TPC_SET_CMD, &msb->command_value, 1);
628 msb->state = MSB_SC_SEND_INT_REQ;
629 return 0;
631 case MSB_SC_SEND_INT_REQ:
632 msb->state = MSB_SC_RECEIVE_INT_REQ;
633 if (msb_read_int_reg(msb, -1))
634 return 0;
635 /* fallthrough */
637 case MSB_SC_RECEIVE_INT_REQ:
638 intreg = mrq->data[0];
640 if (intreg & MEMSTICK_INT_CMDNAK)
641 return msb_exit_state_machine(msb, -EIO);
642 if (intreg & MEMSTICK_INT_ERR)
643 return msb_exit_state_machine(msb, -EBADMSG);
645 if (!(intreg & MEMSTICK_INT_CED)) {
646 msb->state = MSB_SC_SEND_INT_REQ;
647 goto again;
650 return msb_exit_state_machine(msb, 0);
653 BUG();
656 /* Small handler for card reset */
657 static int h_msb_reset(struct memstick_dev *card,
658 struct memstick_request **out_mrq)
660 u8 command = MS_CMD_RESET;
661 struct msb_data *msb = memstick_get_drvdata(card);
662 struct memstick_request *mrq = *out_mrq = &card->current_mrq;
664 if (mrq->error)
665 return msb_exit_state_machine(msb, mrq->error);
667 switch (msb->state) {
668 case MSB_RS_SEND:
669 memstick_init_req(mrq, MS_TPC_SET_CMD, &command, 1);
670 mrq->need_card_int = 0;
671 msb->state = MSB_RS_CONFIRM;
672 return 0;
673 case MSB_RS_CONFIRM:
674 return msb_exit_state_machine(msb, 0);
676 BUG();
679 /* This handler is used to do serial->parallel switch */
680 static int h_msb_parallel_switch(struct memstick_dev *card,
681 struct memstick_request **out_mrq)
683 struct msb_data *msb = memstick_get_drvdata(card);
684 struct memstick_request *mrq = *out_mrq = &card->current_mrq;
685 struct memstick_host *host = card->host;
687 if (mrq->error) {
688 dbg("parallel_switch: error");
689 msb->regs.param.system &= ~MEMSTICK_SYS_PAM;
690 return msb_exit_state_machine(msb, mrq->error);
693 switch (msb->state) {
694 case MSB_PS_SEND_SWITCH_COMMAND:
695 /* Set the parallel interface on memstick side */
696 msb->regs.param.system |= MEMSTICK_SYS_PAM;
698 if (!msb_write_regs(msb,
699 offsetof(struct ms_register, param),
701 (unsigned char *)&msb->regs.param))
702 return 0;
704 msb->state = MSB_PS_SWICH_HOST;
705 return 0;
707 case MSB_PS_SWICH_HOST:
708 /* Set parallel interface on our side + send a dummy request
709 to see if card responds */
710 host->set_param(host, MEMSTICK_INTERFACE, MEMSTICK_PAR4);
711 memstick_init_req(mrq, MS_TPC_GET_INT, NULL, 1);
712 msb->state = MSB_PS_CONFIRM;
713 return 0;
715 case MSB_PS_CONFIRM:
716 return msb_exit_state_machine(msb, 0);
719 BUG();
722 static int msb_switch_to_parallel(struct msb_data *msb);
724 /* Reset the card, to guard against hw errors beeing treated as bad blocks */
725 static int msb_reset(struct msb_data *msb, bool full)
728 bool was_parallel = msb->regs.param.system & MEMSTICK_SYS_PAM;
729 struct memstick_dev *card = msb->card;
730 struct memstick_host *host = card->host;
731 int error;
733 /* Reset the card */
734 msb->regs.param.system = MEMSTICK_SYS_BAMD;
736 if (full) {
737 error = host->set_param(host,
738 MEMSTICK_POWER, MEMSTICK_POWER_OFF);
739 if (error)
740 goto out_error;
742 msb_invalidate_reg_window(msb);
744 error = host->set_param(host,
745 MEMSTICK_POWER, MEMSTICK_POWER_ON);
746 if (error)
747 goto out_error;
749 error = host->set_param(host,
750 MEMSTICK_INTERFACE, MEMSTICK_SERIAL);
751 if (error) {
752 out_error:
753 dbg("Failed to reset the host controller");
754 msb->read_only = true;
755 return -EFAULT;
759 error = msb_run_state_machine(msb, h_msb_reset);
760 if (error) {
761 dbg("Failed to reset the card");
762 msb->read_only = true;
763 return -ENODEV;
766 /* Set parallel mode */
767 if (was_parallel)
768 msb_switch_to_parallel(msb);
769 return 0;
772 /* Attempts to switch interface to parallel mode */
773 static int msb_switch_to_parallel(struct msb_data *msb)
775 int error;
777 error = msb_run_state_machine(msb, h_msb_parallel_switch);
778 if (error) {
779 pr_err("Switch to parallel failed");
780 msb->regs.param.system &= ~MEMSTICK_SYS_PAM;
781 msb_reset(msb, true);
782 return -EFAULT;
785 msb->caps |= MEMSTICK_CAP_AUTO_GET_INT;
786 return 0;
789 /* Changes overwrite flag on a page */
790 static int msb_set_overwrite_flag(struct msb_data *msb,
791 u16 pba, u8 page, u8 flag)
793 if (msb->read_only)
794 return -EROFS;
796 msb->regs.param.block_address = cpu_to_be16(pba);
797 msb->regs.param.page_address = page;
798 msb->regs.param.cp = MEMSTICK_CP_OVERWRITE;
799 msb->regs.extra_data.overwrite_flag = flag;
800 msb->command_value = MS_CMD_BLOCK_WRITE;
801 msb->command_need_oob = true;
803 dbg_verbose("changing overwrite flag to %02x for sector %d, page %d",
804 flag, pba, page);
805 return msb_run_state_machine(msb, h_msb_send_command);
808 static int msb_mark_bad(struct msb_data *msb, int pba)
810 pr_notice("marking pba %d as bad", pba);
811 msb_reset(msb, true);
812 return msb_set_overwrite_flag(
813 msb, pba, 0, 0xFF & ~MEMSTICK_OVERWRITE_BKST);
816 static int msb_mark_page_bad(struct msb_data *msb, int pba, int page)
818 dbg("marking page %d of pba %d as bad", page, pba);
819 msb_reset(msb, true);
820 return msb_set_overwrite_flag(msb,
821 pba, page, ~MEMSTICK_OVERWRITE_PGST0);
824 /* Erases one physical block */
825 static int msb_erase_block(struct msb_data *msb, u16 pba)
827 int error, try;
828 if (msb->read_only)
829 return -EROFS;
831 dbg_verbose("erasing pba %d", pba);
833 for (try = 1; try < 3; try++) {
834 msb->regs.param.block_address = cpu_to_be16(pba);
835 msb->regs.param.page_address = 0;
836 msb->regs.param.cp = MEMSTICK_CP_BLOCK;
837 msb->command_value = MS_CMD_BLOCK_ERASE;
838 msb->command_need_oob = false;
841 error = msb_run_state_machine(msb, h_msb_send_command);
842 if (!error || msb_reset(msb, true))
843 break;
846 if (error) {
847 pr_err("erase failed, marking pba %d as bad", pba);
848 msb_mark_bad(msb, pba);
851 dbg_verbose("erase success, marking pba %d as unused", pba);
852 msb_mark_block_unused(msb, pba);
853 __set_bit(pba, msb->erased_blocks_bitmap);
854 return error;
857 /* Reads one page from device */
858 static int msb_read_page(struct msb_data *msb,
859 u16 pba, u8 page, struct ms_extra_data_register *extra,
860 struct scatterlist *sg, int offset)
862 int try, error;
864 if (pba == MS_BLOCK_INVALID) {
865 unsigned long flags;
866 struct sg_mapping_iter miter;
867 size_t len = msb->page_size;
869 dbg_verbose("read unmapped sector. returning 0xFF");
871 local_irq_save(flags);
872 sg_miter_start(&miter, sg, sg_nents(sg),
873 SG_MITER_ATOMIC | SG_MITER_TO_SG);
875 while (sg_miter_next(&miter) && len > 0) {
877 int chunklen;
879 if (offset && offset >= miter.length) {
880 offset -= miter.length;
881 continue;
884 chunklen = min(miter.length - offset, len);
885 memset(miter.addr + offset, 0xFF, chunklen);
886 len -= chunklen;
887 offset = 0;
890 sg_miter_stop(&miter);
891 local_irq_restore(flags);
893 if (offset)
894 return -EFAULT;
896 if (extra)
897 memset(extra, 0xFF, sizeof(*extra));
898 return 0;
901 if (pba >= msb->block_count) {
902 pr_err("BUG: attempt to read beyond the end of the card at pba %d", pba);
903 return -EINVAL;
906 for (try = 1; try < 3; try++) {
907 msb->regs.param.block_address = cpu_to_be16(pba);
908 msb->regs.param.page_address = page;
909 msb->regs.param.cp = MEMSTICK_CP_PAGE;
911 msb->current_sg = sg;
912 msb->current_sg_offset = offset;
913 error = msb_run_state_machine(msb, h_msb_read_page);
916 if (error == -EUCLEAN) {
917 pr_notice("correctable error on pba %d, page %d",
918 pba, page);
919 error = 0;
922 if (!error && extra)
923 *extra = msb->regs.extra_data;
925 if (!error || msb_reset(msb, true))
926 break;
930 /* Mark bad pages */
931 if (error == -EBADMSG) {
932 pr_err("uncorrectable error on read of pba %d, page %d",
933 pba, page);
935 if (msb->regs.extra_data.overwrite_flag &
936 MEMSTICK_OVERWRITE_PGST0)
937 msb_mark_page_bad(msb, pba, page);
938 return -EBADMSG;
941 if (error)
942 pr_err("read of pba %d, page %d failed with error %d",
943 pba, page, error);
944 return error;
947 /* Reads oob of page only */
948 static int msb_read_oob(struct msb_data *msb, u16 pba, u16 page,
949 struct ms_extra_data_register *extra)
951 int error;
953 BUG_ON(!extra);
954 msb->regs.param.block_address = cpu_to_be16(pba);
955 msb->regs.param.page_address = page;
956 msb->regs.param.cp = MEMSTICK_CP_EXTRA;
958 if (pba > msb->block_count) {
959 pr_err("BUG: attempt to read beyond the end of card at pba %d", pba);
960 return -EINVAL;
963 error = msb_run_state_machine(msb, h_msb_read_page);
964 *extra = msb->regs.extra_data;
966 if (error == -EUCLEAN) {
967 pr_notice("correctable error on pba %d, page %d",
968 pba, page);
969 return 0;
972 return error;
975 /* Reads a block and compares it with data contained in scatterlist orig_sg */
976 static int msb_verify_block(struct msb_data *msb, u16 pba,
977 struct scatterlist *orig_sg, int offset)
979 struct scatterlist sg;
980 int page = 0, error;
982 sg_init_one(&sg, msb->block_buffer, msb->block_size);
984 while (page < msb->pages_in_block) {
986 error = msb_read_page(msb, pba, page,
987 NULL, &sg, page * msb->page_size);
988 if (error)
989 return error;
990 page++;
993 if (msb_sg_compare_to_buffer(orig_sg, offset,
994 msb->block_buffer, msb->block_size))
995 return -EIO;
996 return 0;
999 /* Writes exectly one block + oob */
1000 static int msb_write_block(struct msb_data *msb,
1001 u16 pba, u32 lba, struct scatterlist *sg, int offset)
1003 int error, current_try = 1;
1004 BUG_ON(sg->length < msb->page_size);
1006 if (msb->read_only)
1007 return -EROFS;
1009 if (pba == MS_BLOCK_INVALID) {
1010 pr_err(
1011 "BUG: write: attempt to write MS_BLOCK_INVALID block");
1012 return -EINVAL;
1015 if (pba >= msb->block_count || lba >= msb->logical_block_count) {
1016 pr_err(
1017 "BUG: write: attempt to write beyond the end of device");
1018 return -EINVAL;
1021 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) {
1022 pr_err("BUG: write: lba zone mismatch");
1023 return -EINVAL;
1026 if (pba == msb->boot_block_locations[0] ||
1027 pba == msb->boot_block_locations[1]) {
1028 pr_err("BUG: write: attempt to write to boot blocks!");
1029 return -EINVAL;
1032 while (1) {
1034 if (msb->read_only)
1035 return -EROFS;
1037 msb->regs.param.cp = MEMSTICK_CP_BLOCK;
1038 msb->regs.param.page_address = 0;
1039 msb->regs.param.block_address = cpu_to_be16(pba);
1041 msb->regs.extra_data.management_flag = 0xFF;
1042 msb->regs.extra_data.overwrite_flag = 0xF8;
1043 msb->regs.extra_data.logical_address = cpu_to_be16(lba);
1045 msb->current_sg = sg;
1046 msb->current_sg_offset = offset;
1047 msb->current_page = 0;
1049 error = msb_run_state_machine(msb, h_msb_write_block);
1051 /* Sector we just wrote to is assumed erased since its pba
1052 was erased. If it wasn't erased, write will succeed
1053 and will just clear the bits that were set in the block
1054 thus test that what we have written,
1055 matches what we expect.
1056 We do trust the blocks that we erased */
1057 if (!error && (verify_writes ||
1058 !test_bit(pba, msb->erased_blocks_bitmap)))
1059 error = msb_verify_block(msb, pba, sg, offset);
1061 if (!error)
1062 break;
1064 if (current_try > 1 || msb_reset(msb, true))
1065 break;
1067 pr_err("write failed, trying to erase the pba %d", pba);
1068 error = msb_erase_block(msb, pba);
1069 if (error)
1070 break;
1072 current_try++;
1074 return error;
1077 /* Finds a free block for write replacement */
1078 static u16 msb_get_free_block(struct msb_data *msb, int zone)
1080 u16 pos;
1081 int pba = zone * MS_BLOCKS_IN_ZONE;
1082 int i;
1084 get_random_bytes(&pos, sizeof(pos));
1086 if (!msb->free_block_count[zone]) {
1087 pr_err("NO free blocks in the zone %d, to use for a write, (media is WORN out) switching to RO mode", zone);
1088 msb->read_only = true;
1089 return MS_BLOCK_INVALID;
1092 pos %= msb->free_block_count[zone];
1094 dbg_verbose("have %d choices for a free block, selected randomally: %d",
1095 msb->free_block_count[zone], pos);
1097 pba = find_next_zero_bit(msb->used_blocks_bitmap,
1098 msb->block_count, pba);
1099 for (i = 0; i < pos; ++i)
1100 pba = find_next_zero_bit(msb->used_blocks_bitmap,
1101 msb->block_count, pba + 1);
1103 dbg_verbose("result of the free blocks scan: pba %d", pba);
1105 if (pba == msb->block_count || (msb_get_zone_from_pba(pba)) != zone) {
1106 pr_err("BUG: cant get a free block");
1107 msb->read_only = true;
1108 return MS_BLOCK_INVALID;
1111 msb_mark_block_used(msb, pba);
1112 return pba;
1115 static int msb_update_block(struct msb_data *msb, u16 lba,
1116 struct scatterlist *sg, int offset)
1118 u16 pba, new_pba;
1119 int error, try;
1121 pba = msb->lba_to_pba_table[lba];
1122 dbg_verbose("start of a block update at lba %d, pba %d", lba, pba);
1124 if (pba != MS_BLOCK_INVALID) {
1125 dbg_verbose("setting the update flag on the block");
1126 msb_set_overwrite_flag(msb, pba, 0,
1127 0xFF & ~MEMSTICK_OVERWRITE_UDST);
1130 for (try = 0; try < 3; try++) {
1131 new_pba = msb_get_free_block(msb,
1132 msb_get_zone_from_lba(lba));
1134 if (new_pba == MS_BLOCK_INVALID) {
1135 error = -EIO;
1136 goto out;
1139 dbg_verbose("block update: writing updated block to the pba %d",
1140 new_pba);
1141 error = msb_write_block(msb, new_pba, lba, sg, offset);
1142 if (error == -EBADMSG) {
1143 msb_mark_bad(msb, new_pba);
1144 continue;
1147 if (error)
1148 goto out;
1150 dbg_verbose("block update: erasing the old block");
1151 msb_erase_block(msb, pba);
1152 msb->lba_to_pba_table[lba] = new_pba;
1153 return 0;
1155 out:
1156 if (error) {
1157 pr_err("block update error after %d tries, switching to r/o mode", try);
1158 msb->read_only = true;
1160 return error;
1163 /* Converts endiannes in the boot block for easy use */
1164 static void msb_fix_boot_page_endianness(struct ms_boot_page *p)
1166 p->header.block_id = be16_to_cpu(p->header.block_id);
1167 p->header.format_reserved = be16_to_cpu(p->header.format_reserved);
1168 p->entry.disabled_block.start_addr
1169 = be32_to_cpu(p->entry.disabled_block.start_addr);
1170 p->entry.disabled_block.data_size
1171 = be32_to_cpu(p->entry.disabled_block.data_size);
1172 p->entry.cis_idi.start_addr
1173 = be32_to_cpu(p->entry.cis_idi.start_addr);
1174 p->entry.cis_idi.data_size
1175 = be32_to_cpu(p->entry.cis_idi.data_size);
1176 p->attr.block_size = be16_to_cpu(p->attr.block_size);
1177 p->attr.number_of_blocks = be16_to_cpu(p->attr.number_of_blocks);
1178 p->attr.number_of_effective_blocks
1179 = be16_to_cpu(p->attr.number_of_effective_blocks);
1180 p->attr.page_size = be16_to_cpu(p->attr.page_size);
1181 p->attr.memory_manufacturer_code
1182 = be16_to_cpu(p->attr.memory_manufacturer_code);
1183 p->attr.memory_device_code = be16_to_cpu(p->attr.memory_device_code);
1184 p->attr.implemented_capacity
1185 = be16_to_cpu(p->attr.implemented_capacity);
1186 p->attr.controller_number = be16_to_cpu(p->attr.controller_number);
1187 p->attr.controller_function = be16_to_cpu(p->attr.controller_function);
1190 static int msb_read_boot_blocks(struct msb_data *msb)
1192 int pba = 0;
1193 struct scatterlist sg;
1194 struct ms_extra_data_register extra;
1195 struct ms_boot_page *page;
1197 msb->boot_block_locations[0] = MS_BLOCK_INVALID;
1198 msb->boot_block_locations[1] = MS_BLOCK_INVALID;
1199 msb->boot_block_count = 0;
1201 dbg_verbose("Start of a scan for the boot blocks");
1203 if (!msb->boot_page) {
1204 page = kmalloc_array(2, sizeof(struct ms_boot_page),
1205 GFP_KERNEL);
1206 if (!page)
1207 return -ENOMEM;
1209 msb->boot_page = page;
1210 } else
1211 page = msb->boot_page;
1213 msb->block_count = MS_BLOCK_MAX_BOOT_ADDR;
1215 for (pba = 0; pba < MS_BLOCK_MAX_BOOT_ADDR; pba++) {
1217 sg_init_one(&sg, page, sizeof(*page));
1218 if (msb_read_page(msb, pba, 0, &extra, &sg, 0)) {
1219 dbg("boot scan: can't read pba %d", pba);
1220 continue;
1223 if (extra.management_flag & MEMSTICK_MANAGEMENT_SYSFLG) {
1224 dbg("management flag doesn't indicate boot block %d",
1225 pba);
1226 continue;
1229 if (be16_to_cpu(page->header.block_id) != MS_BLOCK_BOOT_ID) {
1230 dbg("the pba at %d doesn' contain boot block ID", pba);
1231 continue;
1234 msb_fix_boot_page_endianness(page);
1235 msb->boot_block_locations[msb->boot_block_count] = pba;
1237 page++;
1238 msb->boot_block_count++;
1240 if (msb->boot_block_count == 2)
1241 break;
1244 if (!msb->boot_block_count) {
1245 pr_err("media doesn't contain master page, aborting");
1246 return -EIO;
1249 dbg_verbose("End of scan for boot blocks");
1250 return 0;
1253 static int msb_read_bad_block_table(struct msb_data *msb, int block_nr)
1255 struct ms_boot_page *boot_block;
1256 struct scatterlist sg;
1257 u16 *buffer = NULL;
1258 int offset = 0;
1259 int i, error = 0;
1260 int data_size, data_offset, page, page_offset, size_to_read;
1261 u16 pba;
1263 BUG_ON(block_nr > 1);
1264 boot_block = &msb->boot_page[block_nr];
1265 pba = msb->boot_block_locations[block_nr];
1267 if (msb->boot_block_locations[block_nr] == MS_BLOCK_INVALID)
1268 return -EINVAL;
1270 data_size = boot_block->entry.disabled_block.data_size;
1271 data_offset = sizeof(struct ms_boot_page) +
1272 boot_block->entry.disabled_block.start_addr;
1273 if (!data_size)
1274 return 0;
1276 page = data_offset / msb->page_size;
1277 page_offset = data_offset % msb->page_size;
1278 size_to_read =
1279 DIV_ROUND_UP(data_size + page_offset, msb->page_size) *
1280 msb->page_size;
1282 dbg("reading bad block of boot block at pba %d, offset %d len %d",
1283 pba, data_offset, data_size);
1285 buffer = kzalloc(size_to_read, GFP_KERNEL);
1286 if (!buffer)
1287 return -ENOMEM;
1289 /* Read the buffer */
1290 sg_init_one(&sg, buffer, size_to_read);
1292 while (offset < size_to_read) {
1293 error = msb_read_page(msb, pba, page, NULL, &sg, offset);
1294 if (error)
1295 goto out;
1297 page++;
1298 offset += msb->page_size;
1300 if (page == msb->pages_in_block) {
1301 pr_err(
1302 "bad block table extends beyond the boot block");
1303 break;
1307 /* Process the bad block table */
1308 for (i = page_offset; i < data_size / sizeof(u16); i++) {
1310 u16 bad_block = be16_to_cpu(buffer[i]);
1312 if (bad_block >= msb->block_count) {
1313 dbg("bad block table contains invalid block %d",
1314 bad_block);
1315 continue;
1318 if (test_bit(bad_block, msb->used_blocks_bitmap)) {
1319 dbg("duplicate bad block %d in the table",
1320 bad_block);
1321 continue;
1324 dbg("block %d is marked as factory bad", bad_block);
1325 msb_mark_block_used(msb, bad_block);
1327 out:
1328 kfree(buffer);
1329 return error;
1332 static int msb_ftl_initialize(struct msb_data *msb)
1334 int i;
1336 if (msb->ftl_initialized)
1337 return 0;
1339 msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
1340 msb->logical_block_count = msb->zone_count * 496 - 2;
1342 msb->used_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
1343 msb->erased_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
1344 msb->lba_to_pba_table =
1345 kmalloc_array(msb->logical_block_count, sizeof(u16),
1346 GFP_KERNEL);
1348 if (!msb->used_blocks_bitmap || !msb->lba_to_pba_table ||
1349 !msb->erased_blocks_bitmap) {
1350 kfree(msb->used_blocks_bitmap);
1351 kfree(msb->lba_to_pba_table);
1352 kfree(msb->erased_blocks_bitmap);
1353 return -ENOMEM;
1356 for (i = 0; i < msb->zone_count; i++)
1357 msb->free_block_count[i] = MS_BLOCKS_IN_ZONE;
1359 memset(msb->lba_to_pba_table, MS_BLOCK_INVALID,
1360 msb->logical_block_count * sizeof(u16));
1362 dbg("initial FTL tables created. Zone count = %d, Logical block count = %d",
1363 msb->zone_count, msb->logical_block_count);
1365 msb->ftl_initialized = true;
1366 return 0;
1369 static int msb_ftl_scan(struct msb_data *msb)
1371 u16 pba, lba, other_block;
1372 u8 overwrite_flag, management_flag, other_overwrite_flag;
1373 int error;
1374 struct ms_extra_data_register extra;
1375 u8 *overwrite_flags = kzalloc(msb->block_count, GFP_KERNEL);
1377 if (!overwrite_flags)
1378 return -ENOMEM;
1380 dbg("Start of media scanning");
1381 for (pba = 0; pba < msb->block_count; pba++) {
1383 if (pba == msb->boot_block_locations[0] ||
1384 pba == msb->boot_block_locations[1]) {
1385 dbg_verbose("pba %05d -> [boot block]", pba);
1386 msb_mark_block_used(msb, pba);
1387 continue;
1390 if (test_bit(pba, msb->used_blocks_bitmap)) {
1391 dbg_verbose("pba %05d -> [factory bad]", pba);
1392 continue;
1395 memset(&extra, 0, sizeof(extra));
1396 error = msb_read_oob(msb, pba, 0, &extra);
1398 /* can't trust the page if we can't read the oob */
1399 if (error == -EBADMSG) {
1400 pr_notice(
1401 "oob of pba %d damaged, will try to erase it", pba);
1402 msb_mark_block_used(msb, pba);
1403 msb_erase_block(msb, pba);
1404 continue;
1405 } else if (error) {
1406 pr_err("unknown error %d on read of oob of pba %d - aborting",
1407 error, pba);
1409 kfree(overwrite_flags);
1410 return error;
1413 lba = be16_to_cpu(extra.logical_address);
1414 management_flag = extra.management_flag;
1415 overwrite_flag = extra.overwrite_flag;
1416 overwrite_flags[pba] = overwrite_flag;
1418 /* Skip bad blocks */
1419 if (!(overwrite_flag & MEMSTICK_OVERWRITE_BKST)) {
1420 dbg("pba %05d -> [BAD]", pba);
1421 msb_mark_block_used(msb, pba);
1422 continue;
1425 /* Skip system/drm blocks */
1426 if ((management_flag & MEMSTICK_MANAGEMENT_FLAG_NORMAL) !=
1427 MEMSTICK_MANAGEMENT_FLAG_NORMAL) {
1428 dbg("pba %05d -> [reserved management flag %02x]",
1429 pba, management_flag);
1430 msb_mark_block_used(msb, pba);
1431 continue;
1434 /* Erase temporary tables */
1435 if (!(management_flag & MEMSTICK_MANAGEMENT_ATFLG)) {
1436 dbg("pba %05d -> [temp table] - will erase", pba);
1438 msb_mark_block_used(msb, pba);
1439 msb_erase_block(msb, pba);
1440 continue;
1443 if (lba == MS_BLOCK_INVALID) {
1444 dbg_verbose("pba %05d -> [free]", pba);
1445 continue;
1448 msb_mark_block_used(msb, pba);
1450 /* Block has LBA not according to zoning*/
1451 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) {
1452 pr_notice("pba %05d -> [bad lba %05d] - will erase",
1453 pba, lba);
1454 msb_erase_block(msb, pba);
1455 continue;
1458 /* No collisions - great */
1459 if (msb->lba_to_pba_table[lba] == MS_BLOCK_INVALID) {
1460 dbg_verbose("pba %05d -> [lba %05d]", pba, lba);
1461 msb->lba_to_pba_table[lba] = pba;
1462 continue;
1465 other_block = msb->lba_to_pba_table[lba];
1466 other_overwrite_flag = overwrite_flags[other_block];
1468 pr_notice("Collision between pba %d and pba %d",
1469 pba, other_block);
1471 if (!(overwrite_flag & MEMSTICK_OVERWRITE_UDST)) {
1472 pr_notice("pba %d is marked as stable, use it", pba);
1473 msb_erase_block(msb, other_block);
1474 msb->lba_to_pba_table[lba] = pba;
1475 continue;
1478 if (!(other_overwrite_flag & MEMSTICK_OVERWRITE_UDST)) {
1479 pr_notice("pba %d is marked as stable, use it",
1480 other_block);
1481 msb_erase_block(msb, pba);
1482 continue;
1485 pr_notice("collision between blocks %d and %d, without stable flag set on both, erasing pba %d",
1486 pba, other_block, other_block);
1488 msb_erase_block(msb, other_block);
1489 msb->lba_to_pba_table[lba] = pba;
1492 dbg("End of media scanning");
1493 kfree(overwrite_flags);
1494 return 0;
1497 static void msb_cache_flush_timer(struct timer_list *t)
1499 struct msb_data *msb = from_timer(msb, t, cache_flush_timer);
1500 msb->need_flush_cache = true;
1501 queue_work(msb->io_queue, &msb->io_work);
1505 static void msb_cache_discard(struct msb_data *msb)
1507 if (msb->cache_block_lba == MS_BLOCK_INVALID)
1508 return;
1510 del_timer_sync(&msb->cache_flush_timer);
1512 dbg_verbose("Discarding the write cache");
1513 msb->cache_block_lba = MS_BLOCK_INVALID;
1514 bitmap_zero(&msb->valid_cache_bitmap, msb->pages_in_block);
1517 static int msb_cache_init(struct msb_data *msb)
1519 timer_setup(&msb->cache_flush_timer, msb_cache_flush_timer, 0);
1521 if (!msb->cache)
1522 msb->cache = kzalloc(msb->block_size, GFP_KERNEL);
1523 if (!msb->cache)
1524 return -ENOMEM;
1526 msb_cache_discard(msb);
1527 return 0;
1530 static int msb_cache_flush(struct msb_data *msb)
1532 struct scatterlist sg;
1533 struct ms_extra_data_register extra;
1534 int page, offset, error;
1535 u16 pba, lba;
1537 if (msb->read_only)
1538 return -EROFS;
1540 if (msb->cache_block_lba == MS_BLOCK_INVALID)
1541 return 0;
1543 lba = msb->cache_block_lba;
1544 pba = msb->lba_to_pba_table[lba];
1546 dbg_verbose("Flushing the write cache of pba %d (LBA %d)",
1547 pba, msb->cache_block_lba);
1549 sg_init_one(&sg, msb->cache , msb->block_size);
1551 /* Read all missing pages in cache */
1552 for (page = 0; page < msb->pages_in_block; page++) {
1554 if (test_bit(page, &msb->valid_cache_bitmap))
1555 continue;
1557 offset = page * msb->page_size;
1559 dbg_verbose("reading non-present sector %d of cache block %d",
1560 page, lba);
1561 error = msb_read_page(msb, pba, page, &extra, &sg, offset);
1563 /* Bad pages are copied with 00 page status */
1564 if (error == -EBADMSG) {
1565 pr_err("read error on sector %d, contents probably damaged", page);
1566 continue;
1569 if (error)
1570 return error;
1572 if ((extra.overwrite_flag & MEMSTICK_OV_PG_NORMAL) !=
1573 MEMSTICK_OV_PG_NORMAL) {
1574 dbg("page %d is marked as bad", page);
1575 continue;
1578 set_bit(page, &msb->valid_cache_bitmap);
1581 /* Write the cache now */
1582 error = msb_update_block(msb, msb->cache_block_lba, &sg, 0);
1583 pba = msb->lba_to_pba_table[msb->cache_block_lba];
1585 /* Mark invalid pages */
1586 if (!error) {
1587 for (page = 0; page < msb->pages_in_block; page++) {
1589 if (test_bit(page, &msb->valid_cache_bitmap))
1590 continue;
1592 dbg("marking page %d as containing damaged data",
1593 page);
1594 msb_set_overwrite_flag(msb,
1595 pba , page, 0xFF & ~MEMSTICK_OV_PG_NORMAL);
1599 msb_cache_discard(msb);
1600 return error;
1603 static int msb_cache_write(struct msb_data *msb, int lba,
1604 int page, bool add_to_cache_only, struct scatterlist *sg, int offset)
1606 int error;
1607 struct scatterlist sg_tmp[10];
1609 if (msb->read_only)
1610 return -EROFS;
1612 if (msb->cache_block_lba == MS_BLOCK_INVALID ||
1613 lba != msb->cache_block_lba)
1614 if (add_to_cache_only)
1615 return 0;
1617 /* If we need to write different block */
1618 if (msb->cache_block_lba != MS_BLOCK_INVALID &&
1619 lba != msb->cache_block_lba) {
1620 dbg_verbose("first flush the cache");
1621 error = msb_cache_flush(msb);
1622 if (error)
1623 return error;
1626 if (msb->cache_block_lba == MS_BLOCK_INVALID) {
1627 msb->cache_block_lba = lba;
1628 mod_timer(&msb->cache_flush_timer,
1629 jiffies + msecs_to_jiffies(cache_flush_timeout));
1632 dbg_verbose("Write of LBA %d page %d to cache ", lba, page);
1634 sg_init_table(sg_tmp, ARRAY_SIZE(sg_tmp));
1635 msb_sg_copy(sg, sg_tmp, ARRAY_SIZE(sg_tmp), offset, msb->page_size);
1637 sg_copy_to_buffer(sg_tmp, sg_nents(sg_tmp),
1638 msb->cache + page * msb->page_size, msb->page_size);
1640 set_bit(page, &msb->valid_cache_bitmap);
1641 return 0;
1644 static int msb_cache_read(struct msb_data *msb, int lba,
1645 int page, struct scatterlist *sg, int offset)
1647 int pba = msb->lba_to_pba_table[lba];
1648 struct scatterlist sg_tmp[10];
1649 int error = 0;
1651 if (lba == msb->cache_block_lba &&
1652 test_bit(page, &msb->valid_cache_bitmap)) {
1654 dbg_verbose("Read of LBA %d (pba %d) sector %d from cache",
1655 lba, pba, page);
1657 sg_init_table(sg_tmp, ARRAY_SIZE(sg_tmp));
1658 msb_sg_copy(sg, sg_tmp, ARRAY_SIZE(sg_tmp),
1659 offset, msb->page_size);
1660 sg_copy_from_buffer(sg_tmp, sg_nents(sg_tmp),
1661 msb->cache + msb->page_size * page,
1662 msb->page_size);
1663 } else {
1664 dbg_verbose("Read of LBA %d (pba %d) sector %d from device",
1665 lba, pba, page);
1667 error = msb_read_page(msb, pba, page, NULL, sg, offset);
1668 if (error)
1669 return error;
1671 msb_cache_write(msb, lba, page, true, sg, offset);
1673 return error;
1676 /* Emulated geometry table
1677 * This table content isn't that importaint,
1678 * One could put here different values, providing that they still
1679 * cover whole disk.
1680 * 64 MB entry is what windows reports for my 64M memstick */
1682 static const struct chs_entry chs_table[] = {
1683 /* size sectors cylynders heads */
1684 { 4, 16, 247, 2 },
1685 { 8, 16, 495, 2 },
1686 { 16, 16, 495, 4 },
1687 { 32, 16, 991, 4 },
1688 { 64, 16, 991, 8 },
1689 {128, 16, 991, 16 },
1690 { 0 }
1693 /* Load information about the card */
1694 static int msb_init_card(struct memstick_dev *card)
1696 struct msb_data *msb = memstick_get_drvdata(card);
1697 struct memstick_host *host = card->host;
1698 struct ms_boot_page *boot_block;
1699 int error = 0, i, raw_size_in_megs;
1701 msb->caps = 0;
1703 if (card->id.class >= MEMSTICK_CLASS_ROM &&
1704 card->id.class <= MEMSTICK_CLASS_ROM)
1705 msb->read_only = true;
1707 msb->state = -1;
1708 error = msb_reset(msb, false);
1709 if (error)
1710 return error;
1712 /* Due to a bug in Jmicron driver written by Alex Dubov,
1713 its serial mode barely works,
1714 so we switch to parallel mode right away */
1715 if (host->caps & MEMSTICK_CAP_PAR4)
1716 msb_switch_to_parallel(msb);
1718 msb->page_size = sizeof(struct ms_boot_page);
1720 /* Read the boot page */
1721 error = msb_read_boot_blocks(msb);
1722 if (error)
1723 return -EIO;
1725 boot_block = &msb->boot_page[0];
1727 /* Save intersting attributes from boot page */
1728 msb->block_count = boot_block->attr.number_of_blocks;
1729 msb->page_size = boot_block->attr.page_size;
1731 msb->pages_in_block = boot_block->attr.block_size * 2;
1732 msb->block_size = msb->page_size * msb->pages_in_block;
1734 if (msb->page_size > PAGE_SIZE) {
1735 /* this isn't supported by linux at all, anyway*/
1736 dbg("device page %d size isn't supported", msb->page_size);
1737 return -EINVAL;
1740 msb->block_buffer = kzalloc(msb->block_size, GFP_KERNEL);
1741 if (!msb->block_buffer)
1742 return -ENOMEM;
1744 raw_size_in_megs = (msb->block_size * msb->block_count) >> 20;
1746 for (i = 0; chs_table[i].size; i++) {
1748 if (chs_table[i].size != raw_size_in_megs)
1749 continue;
1751 msb->geometry.cylinders = chs_table[i].cyl;
1752 msb->geometry.heads = chs_table[i].head;
1753 msb->geometry.sectors = chs_table[i].sec;
1754 break;
1757 if (boot_block->attr.transfer_supporting == 1)
1758 msb->caps |= MEMSTICK_CAP_PAR4;
1760 if (boot_block->attr.device_type & 0x03)
1761 msb->read_only = true;
1763 dbg("Total block count = %d", msb->block_count);
1764 dbg("Each block consists of %d pages", msb->pages_in_block);
1765 dbg("Page size = %d bytes", msb->page_size);
1766 dbg("Parallel mode supported: %d", !!(msb->caps & MEMSTICK_CAP_PAR4));
1767 dbg("Read only: %d", msb->read_only);
1769 #if 0
1770 /* Now we can switch the interface */
1771 if (host->caps & msb->caps & MEMSTICK_CAP_PAR4)
1772 msb_switch_to_parallel(msb);
1773 #endif
1775 error = msb_cache_init(msb);
1776 if (error)
1777 return error;
1779 error = msb_ftl_initialize(msb);
1780 if (error)
1781 return error;
1784 /* Read the bad block table */
1785 error = msb_read_bad_block_table(msb, 0);
1787 if (error && error != -ENOMEM) {
1788 dbg("failed to read bad block table from primary boot block, trying from backup");
1789 error = msb_read_bad_block_table(msb, 1);
1792 if (error)
1793 return error;
1795 /* *drum roll* Scan the media */
1796 error = msb_ftl_scan(msb);
1797 if (error) {
1798 pr_err("Scan of media failed");
1799 return error;
1802 return 0;
1806 static int msb_do_write_request(struct msb_data *msb, int lba,
1807 int page, struct scatterlist *sg, size_t len, int *sucessfuly_written)
1809 int error = 0;
1810 off_t offset = 0;
1811 *sucessfuly_written = 0;
1813 while (offset < len) {
1814 if (page == 0 && len - offset >= msb->block_size) {
1816 if (msb->cache_block_lba == lba)
1817 msb_cache_discard(msb);
1819 dbg_verbose("Writing whole lba %d", lba);
1820 error = msb_update_block(msb, lba, sg, offset);
1821 if (error)
1822 return error;
1824 offset += msb->block_size;
1825 *sucessfuly_written += msb->block_size;
1826 lba++;
1827 continue;
1830 error = msb_cache_write(msb, lba, page, false, sg, offset);
1831 if (error)
1832 return error;
1834 offset += msb->page_size;
1835 *sucessfuly_written += msb->page_size;
1837 page++;
1838 if (page == msb->pages_in_block) {
1839 page = 0;
1840 lba++;
1843 return 0;
1846 static int msb_do_read_request(struct msb_data *msb, int lba,
1847 int page, struct scatterlist *sg, int len, int *sucessfuly_read)
1849 int error = 0;
1850 int offset = 0;
1851 *sucessfuly_read = 0;
1853 while (offset < len) {
1855 error = msb_cache_read(msb, lba, page, sg, offset);
1856 if (error)
1857 return error;
1859 offset += msb->page_size;
1860 *sucessfuly_read += msb->page_size;
1862 page++;
1863 if (page == msb->pages_in_block) {
1864 page = 0;
1865 lba++;
1868 return 0;
1871 static void msb_io_work(struct work_struct *work)
1873 struct msb_data *msb = container_of(work, struct msb_data, io_work);
1874 int page, error, len;
1875 sector_t lba;
1876 unsigned long flags;
1877 struct scatterlist *sg = msb->prealloc_sg;
1879 dbg_verbose("IO: work started");
1881 while (1) {
1882 spin_lock_irqsave(&msb->q_lock, flags);
1884 if (msb->need_flush_cache) {
1885 msb->need_flush_cache = false;
1886 spin_unlock_irqrestore(&msb->q_lock, flags);
1887 msb_cache_flush(msb);
1888 continue;
1891 if (!msb->req) {
1892 msb->req = blk_fetch_request(msb->queue);
1893 if (!msb->req) {
1894 dbg_verbose("IO: no more requests exiting");
1895 spin_unlock_irqrestore(&msb->q_lock, flags);
1896 return;
1900 spin_unlock_irqrestore(&msb->q_lock, flags);
1902 /* If card was removed meanwhile */
1903 if (!msb->req)
1904 return;
1906 /* process the request */
1907 dbg_verbose("IO: processing new request");
1908 blk_rq_map_sg(msb->queue, msb->req, sg);
1910 lba = blk_rq_pos(msb->req);
1912 sector_div(lba, msb->page_size / 512);
1913 page = sector_div(lba, msb->pages_in_block);
1915 if (rq_data_dir(msb->req) == READ)
1916 error = msb_do_read_request(msb, lba, page, sg,
1917 blk_rq_bytes(msb->req), &len);
1918 else
1919 error = msb_do_write_request(msb, lba, page, sg,
1920 blk_rq_bytes(msb->req), &len);
1922 spin_lock_irqsave(&msb->q_lock, flags);
1924 if (len)
1925 if (!__blk_end_request(msb->req, BLK_STS_OK, len))
1926 msb->req = NULL;
1928 if (error && msb->req) {
1929 blk_status_t ret = errno_to_blk_status(error);
1930 dbg_verbose("IO: ending one sector of the request with error");
1931 if (!__blk_end_request(msb->req, ret, msb->page_size))
1932 msb->req = NULL;
1935 if (msb->req)
1936 dbg_verbose("IO: request still pending");
1938 spin_unlock_irqrestore(&msb->q_lock, flags);
1942 static DEFINE_IDR(msb_disk_idr); /*set of used disk numbers */
1943 static DEFINE_MUTEX(msb_disk_lock); /* protects against races in open/release */
1945 static int msb_bd_open(struct block_device *bdev, fmode_t mode)
1947 struct gendisk *disk = bdev->bd_disk;
1948 struct msb_data *msb = disk->private_data;
1950 dbg_verbose("block device open");
1952 mutex_lock(&msb_disk_lock);
1954 if (msb && msb->card)
1955 msb->usage_count++;
1957 mutex_unlock(&msb_disk_lock);
1958 return 0;
1961 static void msb_data_clear(struct msb_data *msb)
1963 kfree(msb->boot_page);
1964 kfree(msb->used_blocks_bitmap);
1965 kfree(msb->lba_to_pba_table);
1966 kfree(msb->cache);
1967 msb->card = NULL;
1970 static int msb_disk_release(struct gendisk *disk)
1972 struct msb_data *msb = disk->private_data;
1974 dbg_verbose("block device release");
1975 mutex_lock(&msb_disk_lock);
1977 if (msb) {
1978 if (msb->usage_count)
1979 msb->usage_count--;
1981 if (!msb->usage_count) {
1982 disk->private_data = NULL;
1983 idr_remove(&msb_disk_idr, msb->disk_id);
1984 put_disk(disk);
1985 kfree(msb);
1988 mutex_unlock(&msb_disk_lock);
1989 return 0;
1992 static void msb_bd_release(struct gendisk *disk, fmode_t mode)
1994 msb_disk_release(disk);
1997 static int msb_bd_getgeo(struct block_device *bdev,
1998 struct hd_geometry *geo)
2000 struct msb_data *msb = bdev->bd_disk->private_data;
2001 *geo = msb->geometry;
2002 return 0;
2005 static void msb_submit_req(struct request_queue *q)
2007 struct memstick_dev *card = q->queuedata;
2008 struct msb_data *msb = memstick_get_drvdata(card);
2009 struct request *req = NULL;
2011 dbg_verbose("Submit request");
2013 if (msb->card_dead) {
2014 dbg("Refusing requests on removed card");
2016 WARN_ON(!msb->io_queue_stopped);
2018 while ((req = blk_fetch_request(q)) != NULL)
2019 __blk_end_request_all(req, BLK_STS_IOERR);
2020 return;
2023 if (msb->req)
2024 return;
2026 if (!msb->io_queue_stopped)
2027 queue_work(msb->io_queue, &msb->io_work);
2030 static int msb_check_card(struct memstick_dev *card)
2032 struct msb_data *msb = memstick_get_drvdata(card);
2033 return (msb->card_dead == 0);
2036 static void msb_stop(struct memstick_dev *card)
2038 struct msb_data *msb = memstick_get_drvdata(card);
2039 unsigned long flags;
2041 dbg("Stopping all msblock IO");
2043 spin_lock_irqsave(&msb->q_lock, flags);
2044 blk_stop_queue(msb->queue);
2045 msb->io_queue_stopped = true;
2046 spin_unlock_irqrestore(&msb->q_lock, flags);
2048 del_timer_sync(&msb->cache_flush_timer);
2049 flush_workqueue(msb->io_queue);
2051 if (msb->req) {
2052 spin_lock_irqsave(&msb->q_lock, flags);
2053 blk_requeue_request(msb->queue, msb->req);
2054 msb->req = NULL;
2055 spin_unlock_irqrestore(&msb->q_lock, flags);
2060 static void msb_start(struct memstick_dev *card)
2062 struct msb_data *msb = memstick_get_drvdata(card);
2063 unsigned long flags;
2065 dbg("Resuming IO from msblock");
2067 msb_invalidate_reg_window(msb);
2069 spin_lock_irqsave(&msb->q_lock, flags);
2070 if (!msb->io_queue_stopped || msb->card_dead) {
2071 spin_unlock_irqrestore(&msb->q_lock, flags);
2072 return;
2074 spin_unlock_irqrestore(&msb->q_lock, flags);
2076 /* Kick cache flush anyway, its harmless */
2077 msb->need_flush_cache = true;
2078 msb->io_queue_stopped = false;
2080 spin_lock_irqsave(&msb->q_lock, flags);
2081 blk_start_queue(msb->queue);
2082 spin_unlock_irqrestore(&msb->q_lock, flags);
2084 queue_work(msb->io_queue, &msb->io_work);
2088 static const struct block_device_operations msb_bdops = {
2089 .open = msb_bd_open,
2090 .release = msb_bd_release,
2091 .getgeo = msb_bd_getgeo,
2092 .owner = THIS_MODULE
2095 /* Registers the block device */
2096 static int msb_init_disk(struct memstick_dev *card)
2098 struct msb_data *msb = memstick_get_drvdata(card);
2099 int rc;
2100 unsigned long capacity;
2102 mutex_lock(&msb_disk_lock);
2103 msb->disk_id = idr_alloc(&msb_disk_idr, card, 0, 256, GFP_KERNEL);
2104 mutex_unlock(&msb_disk_lock);
2106 if (msb->disk_id < 0)
2107 return msb->disk_id;
2109 msb->disk = alloc_disk(0);
2110 if (!msb->disk) {
2111 rc = -ENOMEM;
2112 goto out_release_id;
2115 msb->queue = blk_init_queue(msb_submit_req, &msb->q_lock);
2116 if (!msb->queue) {
2117 rc = -ENOMEM;
2118 goto out_put_disk;
2121 msb->queue->queuedata = card;
2123 blk_queue_max_hw_sectors(msb->queue, MS_BLOCK_MAX_PAGES);
2124 blk_queue_max_segments(msb->queue, MS_BLOCK_MAX_SEGS);
2125 blk_queue_max_segment_size(msb->queue,
2126 MS_BLOCK_MAX_PAGES * msb->page_size);
2127 blk_queue_logical_block_size(msb->queue, msb->page_size);
2129 sprintf(msb->disk->disk_name, "msblk%d", msb->disk_id);
2130 msb->disk->fops = &msb_bdops;
2131 msb->disk->private_data = msb;
2132 msb->disk->queue = msb->queue;
2133 msb->disk->flags |= GENHD_FL_EXT_DEVT;
2135 capacity = msb->pages_in_block * msb->logical_block_count;
2136 capacity *= (msb->page_size / 512);
2137 set_capacity(msb->disk, capacity);
2138 dbg("Set total disk size to %lu sectors", capacity);
2140 msb->usage_count = 1;
2141 msb->io_queue = alloc_ordered_workqueue("ms_block", WQ_MEM_RECLAIM);
2142 INIT_WORK(&msb->io_work, msb_io_work);
2143 sg_init_table(msb->prealloc_sg, MS_BLOCK_MAX_SEGS+1);
2145 if (msb->read_only)
2146 set_disk_ro(msb->disk, 1);
2148 msb_start(card);
2149 device_add_disk(&card->dev, msb->disk);
2150 dbg("Disk added");
2151 return 0;
2153 out_put_disk:
2154 put_disk(msb->disk);
2155 out_release_id:
2156 mutex_lock(&msb_disk_lock);
2157 idr_remove(&msb_disk_idr, msb->disk_id);
2158 mutex_unlock(&msb_disk_lock);
2159 return rc;
2162 static int msb_probe(struct memstick_dev *card)
2164 struct msb_data *msb;
2165 int rc = 0;
2167 msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
2168 if (!msb)
2169 return -ENOMEM;
2170 memstick_set_drvdata(card, msb);
2171 msb->card = card;
2172 spin_lock_init(&msb->q_lock);
2174 rc = msb_init_card(card);
2175 if (rc)
2176 goto out_free;
2178 rc = msb_init_disk(card);
2179 if (!rc) {
2180 card->check = msb_check_card;
2181 card->stop = msb_stop;
2182 card->start = msb_start;
2183 return 0;
2185 out_free:
2186 memstick_set_drvdata(card, NULL);
2187 msb_data_clear(msb);
2188 kfree(msb);
2189 return rc;
2192 static void msb_remove(struct memstick_dev *card)
2194 struct msb_data *msb = memstick_get_drvdata(card);
2195 unsigned long flags;
2197 if (!msb->io_queue_stopped)
2198 msb_stop(card);
2200 dbg("Removing the disk device");
2202 /* Take care of unhandled + new requests from now on */
2203 spin_lock_irqsave(&msb->q_lock, flags);
2204 msb->card_dead = true;
2205 blk_start_queue(msb->queue);
2206 spin_unlock_irqrestore(&msb->q_lock, flags);
2208 /* Remove the disk */
2209 del_gendisk(msb->disk);
2210 blk_cleanup_queue(msb->queue);
2211 msb->queue = NULL;
2213 mutex_lock(&msb_disk_lock);
2214 msb_data_clear(msb);
2215 mutex_unlock(&msb_disk_lock);
2217 msb_disk_release(msb->disk);
2218 memstick_set_drvdata(card, NULL);
2221 #ifdef CONFIG_PM
2223 static int msb_suspend(struct memstick_dev *card, pm_message_t state)
2225 msb_stop(card);
2226 return 0;
2229 static int msb_resume(struct memstick_dev *card)
2231 struct msb_data *msb = memstick_get_drvdata(card);
2232 struct msb_data *new_msb = NULL;
2233 bool card_dead = true;
2235 #ifndef CONFIG_MEMSTICK_UNSAFE_RESUME
2236 msb->card_dead = true;
2237 return 0;
2238 #endif
2239 mutex_lock(&card->host->lock);
2241 new_msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
2242 if (!new_msb)
2243 goto out;
2245 new_msb->card = card;
2246 memstick_set_drvdata(card, new_msb);
2247 spin_lock_init(&new_msb->q_lock);
2248 sg_init_table(msb->prealloc_sg, MS_BLOCK_MAX_SEGS+1);
2250 if (msb_init_card(card))
2251 goto out;
2253 if (msb->block_size != new_msb->block_size)
2254 goto out;
2256 if (memcmp(msb->boot_page, new_msb->boot_page,
2257 sizeof(struct ms_boot_page)))
2258 goto out;
2260 if (msb->logical_block_count != new_msb->logical_block_count ||
2261 memcmp(msb->lba_to_pba_table, new_msb->lba_to_pba_table,
2262 msb->logical_block_count))
2263 goto out;
2265 if (msb->block_count != new_msb->block_count ||
2266 memcmp(msb->used_blocks_bitmap, new_msb->used_blocks_bitmap,
2267 msb->block_count / 8))
2268 goto out;
2270 card_dead = false;
2271 out:
2272 if (card_dead)
2273 dbg("Card was removed/replaced during suspend");
2275 msb->card_dead = card_dead;
2276 memstick_set_drvdata(card, msb);
2278 if (new_msb) {
2279 msb_data_clear(new_msb);
2280 kfree(new_msb);
2283 msb_start(card);
2284 mutex_unlock(&card->host->lock);
2285 return 0;
2287 #else
2289 #define msb_suspend NULL
2290 #define msb_resume NULL
2292 #endif /* CONFIG_PM */
2294 static struct memstick_device_id msb_id_tbl[] = {
2295 {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2296 MEMSTICK_CLASS_FLASH},
2298 {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2299 MEMSTICK_CLASS_ROM},
2301 {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2302 MEMSTICK_CLASS_RO},
2304 {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2305 MEMSTICK_CLASS_WP},
2307 {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_DUO, MEMSTICK_CATEGORY_STORAGE_DUO,
2308 MEMSTICK_CLASS_DUO},
2311 MODULE_DEVICE_TABLE(memstick, msb_id_tbl);
2314 static struct memstick_driver msb_driver = {
2315 .driver = {
2316 .name = DRIVER_NAME,
2317 .owner = THIS_MODULE
2319 .id_table = msb_id_tbl,
2320 .probe = msb_probe,
2321 .remove = msb_remove,
2322 .suspend = msb_suspend,
2323 .resume = msb_resume
2326 static int __init msb_init(void)
2328 int rc = memstick_register_driver(&msb_driver);
2329 if (rc)
2330 pr_err("failed to register memstick driver (error %d)\n", rc);
2332 return rc;
2335 static void __exit msb_exit(void)
2337 memstick_unregister_driver(&msb_driver);
2338 idr_destroy(&msb_disk_idr);
2341 module_init(msb_init);
2342 module_exit(msb_exit);
2344 module_param(cache_flush_timeout, int, S_IRUGO);
2345 MODULE_PARM_DESC(cache_flush_timeout,
2346 "Cache flush timeout in msec (1000 default)");
2347 module_param(debug, int, S_IRUGO | S_IWUSR);
2348 MODULE_PARM_DESC(debug, "Debug level (0-2)");
2350 module_param(verify_writes, bool, S_IRUGO);
2351 MODULE_PARM_DESC(verify_writes, "Read back and check all data that is written");
2353 MODULE_LICENSE("GPL");
2354 MODULE_AUTHOR("Maxim Levitsky");
2355 MODULE_DESCRIPTION("Sony MemoryStick block device driver");