Merge tag 'for-6.2-rc7-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[linux-2.6-block.git] / drivers / memstick / core / ms_block.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *  ms_block.c - Sony MemoryStick (legacy) storage support
4
5  *  Copyright (C) 2013 Maxim Levitsky <maximlevitsky@gmail.com>
6  *
7  * Minor portions of the driver were copied from mspro_block.c which is
8  * Copyright (C) 2007 Alex Dubov <oakad@yahoo.com>
9  */
10 #define DRIVER_NAME "ms_block"
11 #define pr_fmt(fmt) DRIVER_NAME ": " fmt
12
13 #include <linux/module.h>
14 #include <linux/blk-mq.h>
15 #include <linux/memstick.h>
16 #include <linux/idr.h>
17 #include <linux/hdreg.h>
18 #include <linux/delay.h>
19 #include <linux/slab.h>
20 #include <linux/random.h>
21 #include <linux/bitmap.h>
22 #include <linux/scatterlist.h>
23 #include <linux/jiffies.h>
24 #include <linux/workqueue.h>
25 #include <linux/mutex.h>
26 #include "ms_block.h"
27
28 static int debug;
29 static int cache_flush_timeout = 1000;
30 static bool verify_writes;
31
32 /*
33  * Copies section of 'sg_from' starting from offset 'offset' and with length
34  * 'len' To another scatterlist of to_nents enties
35  */
36 static size_t msb_sg_copy(struct scatterlist *sg_from,
37         struct scatterlist *sg_to, int to_nents, size_t offset, size_t len)
38 {
39         size_t copied = 0;
40
41         while (offset > 0) {
42                 if (offset >= sg_from->length) {
43                         if (sg_is_last(sg_from))
44                                 return 0;
45
46                         offset -= sg_from->length;
47                         sg_from = sg_next(sg_from);
48                         continue;
49                 }
50
51                 copied = min(len, sg_from->length - offset);
52                 sg_set_page(sg_to, sg_page(sg_from),
53                         copied, sg_from->offset + offset);
54
55                 len -= copied;
56                 offset = 0;
57
58                 if (sg_is_last(sg_from) || !len)
59                         goto out;
60
61                 sg_to = sg_next(sg_to);
62                 to_nents--;
63                 sg_from = sg_next(sg_from);
64         }
65
66         while (len > sg_from->length && to_nents--) {
67                 len -= sg_from->length;
68                 copied += sg_from->length;
69
70                 sg_set_page(sg_to, sg_page(sg_from),
71                                 sg_from->length, sg_from->offset);
72
73                 if (sg_is_last(sg_from) || !len)
74                         goto out;
75
76                 sg_from = sg_next(sg_from);
77                 sg_to = sg_next(sg_to);
78         }
79
80         if (len && to_nents) {
81                 sg_set_page(sg_to, sg_page(sg_from), len, sg_from->offset);
82                 copied += len;
83         }
84 out:
85         sg_mark_end(sg_to);
86         return copied;
87 }
88
89 /*
90  * Compares section of 'sg' starting from offset 'offset' and with length 'len'
91  * to linear buffer of length 'len' at address 'buffer'
92  * Returns 0 if equal and  -1 otherwice
93  */
94 static int msb_sg_compare_to_buffer(struct scatterlist *sg,
95                                         size_t offset, u8 *buffer, size_t len)
96 {
97         int retval = 0, cmplen;
98         struct sg_mapping_iter miter;
99
100         sg_miter_start(&miter, sg, sg_nents(sg),
101                                         SG_MITER_ATOMIC | SG_MITER_FROM_SG);
102
103         while (sg_miter_next(&miter) && len > 0) {
104                 if (offset >= miter.length) {
105                         offset -= miter.length;
106                         continue;
107                 }
108
109                 cmplen = min(miter.length - offset, len);
110                 retval = memcmp(miter.addr + offset, buffer, cmplen) ? -1 : 0;
111                 if (retval)
112                         break;
113
114                 buffer += cmplen;
115                 len -= cmplen;
116                 offset = 0;
117         }
118
119         if (!retval && len)
120                 retval = -1;
121
122         sg_miter_stop(&miter);
123         return retval;
124 }
125
126
127 /* Get zone at which block with logical address 'lba' lives
128  * Flash is broken into zones.
129  * Each zone consists of 512 eraseblocks, out of which in first
130  * zone 494 are used and 496 are for all following zones.
131  * Therefore zone #0 hosts blocks 0-493, zone #1 blocks 494-988, etc...
132  */
133 static int msb_get_zone_from_lba(int lba)
134 {
135         if (lba < 494)
136                 return 0;
137         return ((lba - 494) / 496) + 1;
138 }
139
140 /* Get zone of physical block. Trivial */
141 static int msb_get_zone_from_pba(int pba)
142 {
143         return pba / MS_BLOCKS_IN_ZONE;
144 }
145
146 /* Debug test to validate free block counts */
147 static int msb_validate_used_block_bitmap(struct msb_data *msb)
148 {
149         int total_free_blocks = 0;
150         int i;
151
152         if (!debug)
153                 return 0;
154
155         for (i = 0; i < msb->zone_count; i++)
156                 total_free_blocks += msb->free_block_count[i];
157
158         if (msb->block_count - bitmap_weight(msb->used_blocks_bitmap,
159                                         msb->block_count) == total_free_blocks)
160                 return 0;
161
162         pr_err("BUG: free block counts don't match the bitmap");
163         msb->read_only = true;
164         return -EINVAL;
165 }
166
167 /* Mark physical block as used */
168 static void msb_mark_block_used(struct msb_data *msb, int pba)
169 {
170         int zone = msb_get_zone_from_pba(pba);
171
172         if (test_bit(pba, msb->used_blocks_bitmap)) {
173                 pr_err(
174                 "BUG: attempt to mark already used pba %d as used", pba);
175                 msb->read_only = true;
176                 return;
177         }
178
179         if (msb_validate_used_block_bitmap(msb))
180                 return;
181
182         /* No races because all IO is single threaded */
183         __set_bit(pba, msb->used_blocks_bitmap);
184         msb->free_block_count[zone]--;
185 }
186
187 /* Mark physical block as free */
188 static void msb_mark_block_unused(struct msb_data *msb, int pba)
189 {
190         int zone = msb_get_zone_from_pba(pba);
191
192         if (!test_bit(pba, msb->used_blocks_bitmap)) {
193                 pr_err("BUG: attempt to mark already unused pba %d as unused" , pba);
194                 msb->read_only = true;
195                 return;
196         }
197
198         if (msb_validate_used_block_bitmap(msb))
199                 return;
200
201         /* No races because all IO is single threaded */
202         __clear_bit(pba, msb->used_blocks_bitmap);
203         msb->free_block_count[zone]++;
204 }
205
206 /* Invalidate current register window */
207 static void msb_invalidate_reg_window(struct msb_data *msb)
208 {
209         msb->reg_addr.w_offset = offsetof(struct ms_register, id);
210         msb->reg_addr.w_length = sizeof(struct ms_id_register);
211         msb->reg_addr.r_offset = offsetof(struct ms_register, id);
212         msb->reg_addr.r_length = sizeof(struct ms_id_register);
213         msb->addr_valid = false;
214 }
215
216 /* Start a state machine */
217 static int msb_run_state_machine(struct msb_data *msb, int   (*state_func)
218                 (struct memstick_dev *card, struct memstick_request **req))
219 {
220         struct memstick_dev *card = msb->card;
221
222         WARN_ON(msb->state != -1);
223         msb->int_polling = false;
224         msb->state = 0;
225         msb->exit_error = 0;
226
227         memset(&card->current_mrq, 0, sizeof(card->current_mrq));
228
229         card->next_request = state_func;
230         memstick_new_req(card->host);
231         wait_for_completion(&card->mrq_complete);
232
233         WARN_ON(msb->state != -1);
234         return msb->exit_error;
235 }
236
237 /* State machines call that to exit */
238 static int msb_exit_state_machine(struct msb_data *msb, int error)
239 {
240         WARN_ON(msb->state == -1);
241
242         msb->state = -1;
243         msb->exit_error = error;
244         msb->card->next_request = h_msb_default_bad;
245
246         /* Invalidate reg window on errors */
247         if (error)
248                 msb_invalidate_reg_window(msb);
249
250         complete(&msb->card->mrq_complete);
251         return -ENXIO;
252 }
253
254 /* read INT register */
255 static int msb_read_int_reg(struct msb_data *msb, long timeout)
256 {
257         struct memstick_request *mrq = &msb->card->current_mrq;
258
259         WARN_ON(msb->state == -1);
260
261         if (!msb->int_polling) {
262                 msb->int_timeout = jiffies +
263                         msecs_to_jiffies(timeout == -1 ? 500 : timeout);
264                 msb->int_polling = true;
265         } else if (time_after(jiffies, msb->int_timeout)) {
266                 mrq->data[0] = MEMSTICK_INT_CMDNAK;
267                 return 0;
268         }
269
270         if ((msb->caps & MEMSTICK_CAP_AUTO_GET_INT) &&
271                                 mrq->need_card_int && !mrq->error) {
272                 mrq->data[0] = mrq->int_reg;
273                 mrq->need_card_int = false;
274                 return 0;
275         } else {
276                 memstick_init_req(mrq, MS_TPC_GET_INT, NULL, 1);
277                 return 1;
278         }
279 }
280
281 /* Read a register */
282 static int msb_read_regs(struct msb_data *msb, int offset, int len)
283 {
284         struct memstick_request *req = &msb->card->current_mrq;
285
286         if (msb->reg_addr.r_offset != offset ||
287             msb->reg_addr.r_length != len || !msb->addr_valid) {
288
289                 msb->reg_addr.r_offset = offset;
290                 msb->reg_addr.r_length = len;
291                 msb->addr_valid = true;
292
293                 memstick_init_req(req, MS_TPC_SET_RW_REG_ADRS,
294                         &msb->reg_addr, sizeof(msb->reg_addr));
295                 return 0;
296         }
297
298         memstick_init_req(req, MS_TPC_READ_REG, NULL, len);
299         return 1;
300 }
301
302 /* Write a card register */
303 static int msb_write_regs(struct msb_data *msb, int offset, int len, void *buf)
304 {
305         struct memstick_request *req = &msb->card->current_mrq;
306
307         if (msb->reg_addr.w_offset != offset ||
308                 msb->reg_addr.w_length != len  || !msb->addr_valid) {
309
310                 msb->reg_addr.w_offset = offset;
311                 msb->reg_addr.w_length = len;
312                 msb->addr_valid = true;
313
314                 memstick_init_req(req, MS_TPC_SET_RW_REG_ADRS,
315                         &msb->reg_addr, sizeof(msb->reg_addr));
316                 return 0;
317         }
318
319         memstick_init_req(req, MS_TPC_WRITE_REG, buf, len);
320         return 1;
321 }
322
323 /* Handler for absence of IO */
324 static int h_msb_default_bad(struct memstick_dev *card,
325                                                 struct memstick_request **mrq)
326 {
327         return -ENXIO;
328 }
329
330 /*
331  * This function is a handler for reads of one page from device.
332  * Writes output to msb->current_sg, takes sector address from msb->reg.param
333  * Can also be used to read extra data only. Set params accordintly.
334  */
335 static int h_msb_read_page(struct memstick_dev *card,
336                                         struct memstick_request **out_mrq)
337 {
338         struct msb_data *msb = memstick_get_drvdata(card);
339         struct memstick_request *mrq = *out_mrq = &card->current_mrq;
340         struct scatterlist sg[2];
341         u8 command, intreg;
342
343         if (mrq->error) {
344                 dbg("read_page, unknown error");
345                 return msb_exit_state_machine(msb, mrq->error);
346         }
347 again:
348         switch (msb->state) {
349         case MSB_RP_SEND_BLOCK_ADDRESS:
350                 /* msb_write_regs sometimes "fails" because it needs to update
351                  * the reg window, and thus it returns request for that.
352                  * Then we stay in this state and retry
353                  */
354                 if (!msb_write_regs(msb,
355                         offsetof(struct ms_register, param),
356                         sizeof(struct ms_param_register),
357                         (unsigned char *)&msb->regs.param))
358                         return 0;
359
360                 msb->state = MSB_RP_SEND_READ_COMMAND;
361                 return 0;
362
363         case MSB_RP_SEND_READ_COMMAND:
364                 command = MS_CMD_BLOCK_READ;
365                 memstick_init_req(mrq, MS_TPC_SET_CMD, &command, 1);
366                 msb->state = MSB_RP_SEND_INT_REQ;
367                 return 0;
368
369         case MSB_RP_SEND_INT_REQ:
370                 msb->state = MSB_RP_RECEIVE_INT_REQ_RESULT;
371                 /* If dont actually need to send the int read request (only in
372                  * serial mode), then just fall through
373                  */
374                 if (msb_read_int_reg(msb, -1))
375                         return 0;
376                 fallthrough;
377
378         case MSB_RP_RECEIVE_INT_REQ_RESULT:
379                 intreg = mrq->data[0];
380                 msb->regs.status.interrupt = intreg;
381
382                 if (intreg & MEMSTICK_INT_CMDNAK)
383                         return msb_exit_state_machine(msb, -EIO);
384
385                 if (!(intreg & MEMSTICK_INT_CED)) {
386                         msb->state = MSB_RP_SEND_INT_REQ;
387                         goto again;
388                 }
389
390                 msb->int_polling = false;
391                 msb->state = (intreg & MEMSTICK_INT_ERR) ?
392                         MSB_RP_SEND_READ_STATUS_REG : MSB_RP_SEND_OOB_READ;
393                 goto again;
394
395         case MSB_RP_SEND_READ_STATUS_REG:
396                  /* read the status register to understand source of the INT_ERR */
397                 if (!msb_read_regs(msb,
398                         offsetof(struct ms_register, status),
399                         sizeof(struct ms_status_register)))
400                         return 0;
401
402                 msb->state = MSB_RP_RECEIVE_STATUS_REG;
403                 return 0;
404
405         case MSB_RP_RECEIVE_STATUS_REG:
406                 msb->regs.status = *(struct ms_status_register *)mrq->data;
407                 msb->state = MSB_RP_SEND_OOB_READ;
408                 fallthrough;
409
410         case MSB_RP_SEND_OOB_READ:
411                 if (!msb_read_regs(msb,
412                         offsetof(struct ms_register, extra_data),
413                         sizeof(struct ms_extra_data_register)))
414                         return 0;
415
416                 msb->state = MSB_RP_RECEIVE_OOB_READ;
417                 return 0;
418
419         case MSB_RP_RECEIVE_OOB_READ:
420                 msb->regs.extra_data =
421                         *(struct ms_extra_data_register *) mrq->data;
422                 msb->state = MSB_RP_SEND_READ_DATA;
423                 fallthrough;
424
425         case MSB_RP_SEND_READ_DATA:
426                 /* Skip that state if we only read the oob */
427                 if (msb->regs.param.cp == MEMSTICK_CP_EXTRA) {
428                         msb->state = MSB_RP_RECEIVE_READ_DATA;
429                         goto again;
430                 }
431
432                 sg_init_table(sg, ARRAY_SIZE(sg));
433                 msb_sg_copy(msb->current_sg, sg, ARRAY_SIZE(sg),
434                         msb->current_sg_offset,
435                         msb->page_size);
436
437                 memstick_init_req_sg(mrq, MS_TPC_READ_LONG_DATA, sg);
438                 msb->state = MSB_RP_RECEIVE_READ_DATA;
439                 return 0;
440
441         case MSB_RP_RECEIVE_READ_DATA:
442                 if (!(msb->regs.status.interrupt & MEMSTICK_INT_ERR)) {
443                         msb->current_sg_offset += msb->page_size;
444                         return msb_exit_state_machine(msb, 0);
445                 }
446
447                 if (msb->regs.status.status1 & MEMSTICK_UNCORR_ERROR) {
448                         dbg("read_page: uncorrectable error");
449                         return msb_exit_state_machine(msb, -EBADMSG);
450                 }
451
452                 if (msb->regs.status.status1 & MEMSTICK_CORR_ERROR) {
453                         dbg("read_page: correctable error");
454                         msb->current_sg_offset += msb->page_size;
455                         return msb_exit_state_machine(msb, -EUCLEAN);
456                 } else {
457                         dbg("read_page: INT error, but no status error bits");
458                         return msb_exit_state_machine(msb, -EIO);
459                 }
460         }
461
462         BUG();
463 }
464
465 /*
466  * Handler of writes of exactly one block.
467  * Takes address from msb->regs.param.
468  * Writes same extra data to blocks, also taken
469  * from msb->regs.extra
470  * Returns -EBADMSG if write fails due to uncorrectable error, or -EIO if
471  * device refuses to take the command or something else
472  */
473 static int h_msb_write_block(struct memstick_dev *card,
474                                         struct memstick_request **out_mrq)
475 {
476         struct msb_data *msb = memstick_get_drvdata(card);
477         struct memstick_request *mrq = *out_mrq = &card->current_mrq;
478         struct scatterlist sg[2];
479         u8 intreg, command;
480
481         if (mrq->error)
482                 return msb_exit_state_machine(msb, mrq->error);
483
484 again:
485         switch (msb->state) {
486
487         /* HACK: Jmicon handling of TPCs between 8 and
488          *      sizeof(memstick_request.data) is broken due to hardware
489          *      bug in PIO mode that is used for these TPCs
490          *      Therefore split the write
491          */
492
493         case MSB_WB_SEND_WRITE_PARAMS:
494                 if (!msb_write_regs(msb,
495                         offsetof(struct ms_register, param),
496                         sizeof(struct ms_param_register),
497                         &msb->regs.param))
498                         return 0;
499
500                 msb->state = MSB_WB_SEND_WRITE_OOB;
501                 return 0;
502
503         case MSB_WB_SEND_WRITE_OOB:
504                 if (!msb_write_regs(msb,
505                         offsetof(struct ms_register, extra_data),
506                         sizeof(struct ms_extra_data_register),
507                         &msb->regs.extra_data))
508                         return 0;
509                 msb->state = MSB_WB_SEND_WRITE_COMMAND;
510                 return 0;
511
512
513         case MSB_WB_SEND_WRITE_COMMAND:
514                 command = MS_CMD_BLOCK_WRITE;
515                 memstick_init_req(mrq, MS_TPC_SET_CMD, &command, 1);
516                 msb->state = MSB_WB_SEND_INT_REQ;
517                 return 0;
518
519         case MSB_WB_SEND_INT_REQ:
520                 msb->state = MSB_WB_RECEIVE_INT_REQ;
521                 if (msb_read_int_reg(msb, -1))
522                         return 0;
523                 fallthrough;
524
525         case MSB_WB_RECEIVE_INT_REQ:
526                 intreg = mrq->data[0];
527                 msb->regs.status.interrupt = intreg;
528
529                 /* errors mean out of here, and fast... */
530                 if (intreg & (MEMSTICK_INT_CMDNAK))
531                         return msb_exit_state_machine(msb, -EIO);
532
533                 if (intreg & MEMSTICK_INT_ERR)
534                         return msb_exit_state_machine(msb, -EBADMSG);
535
536
537                 /* for last page we need to poll CED */
538                 if (msb->current_page == msb->pages_in_block) {
539                         if (intreg & MEMSTICK_INT_CED)
540                                 return msb_exit_state_machine(msb, 0);
541                         msb->state = MSB_WB_SEND_INT_REQ;
542                         goto again;
543
544                 }
545
546                 /* for non-last page we need BREQ before writing next chunk */
547                 if (!(intreg & MEMSTICK_INT_BREQ)) {
548                         msb->state = MSB_WB_SEND_INT_REQ;
549                         goto again;
550                 }
551
552                 msb->int_polling = false;
553                 msb->state = MSB_WB_SEND_WRITE_DATA;
554                 fallthrough;
555
556         case MSB_WB_SEND_WRITE_DATA:
557                 sg_init_table(sg, ARRAY_SIZE(sg));
558
559                 if (msb_sg_copy(msb->current_sg, sg, ARRAY_SIZE(sg),
560                         msb->current_sg_offset,
561                         msb->page_size) < msb->page_size)
562                         return msb_exit_state_machine(msb, -EIO);
563
564                 memstick_init_req_sg(mrq, MS_TPC_WRITE_LONG_DATA, sg);
565                 mrq->need_card_int = 1;
566                 msb->state = MSB_WB_RECEIVE_WRITE_CONFIRMATION;
567                 return 0;
568
569         case MSB_WB_RECEIVE_WRITE_CONFIRMATION:
570                 msb->current_page++;
571                 msb->current_sg_offset += msb->page_size;
572                 msb->state = MSB_WB_SEND_INT_REQ;
573                 goto again;
574         default:
575                 BUG();
576         }
577
578         return 0;
579 }
580
581 /*
582  * This function is used to send simple IO requests to device that consist
583  * of register write + command
584  */
585 static int h_msb_send_command(struct memstick_dev *card,
586                                         struct memstick_request **out_mrq)
587 {
588         struct msb_data *msb = memstick_get_drvdata(card);
589         struct memstick_request *mrq = *out_mrq = &card->current_mrq;
590         u8 intreg;
591
592         if (mrq->error) {
593                 dbg("send_command: unknown error");
594                 return msb_exit_state_machine(msb, mrq->error);
595         }
596 again:
597         switch (msb->state) {
598
599         /* HACK: see h_msb_write_block */
600         case MSB_SC_SEND_WRITE_PARAMS: /* write param register*/
601                 if (!msb_write_regs(msb,
602                         offsetof(struct ms_register, param),
603                         sizeof(struct ms_param_register),
604                         &msb->regs.param))
605                         return 0;
606                 msb->state = MSB_SC_SEND_WRITE_OOB;
607                 return 0;
608
609         case MSB_SC_SEND_WRITE_OOB:
610                 if (!msb->command_need_oob) {
611                         msb->state = MSB_SC_SEND_COMMAND;
612                         goto again;
613                 }
614
615                 if (!msb_write_regs(msb,
616                         offsetof(struct ms_register, extra_data),
617                         sizeof(struct ms_extra_data_register),
618                         &msb->regs.extra_data))
619                         return 0;
620
621                 msb->state = MSB_SC_SEND_COMMAND;
622                 return 0;
623
624         case MSB_SC_SEND_COMMAND:
625                 memstick_init_req(mrq, MS_TPC_SET_CMD, &msb->command_value, 1);
626                 msb->state = MSB_SC_SEND_INT_REQ;
627                 return 0;
628
629         case MSB_SC_SEND_INT_REQ:
630                 msb->state = MSB_SC_RECEIVE_INT_REQ;
631                 if (msb_read_int_reg(msb, -1))
632                         return 0;
633                 fallthrough;
634
635         case MSB_SC_RECEIVE_INT_REQ:
636                 intreg = mrq->data[0];
637
638                 if (intreg & MEMSTICK_INT_CMDNAK)
639                         return msb_exit_state_machine(msb, -EIO);
640                 if (intreg & MEMSTICK_INT_ERR)
641                         return msb_exit_state_machine(msb, -EBADMSG);
642
643                 if (!(intreg & MEMSTICK_INT_CED)) {
644                         msb->state = MSB_SC_SEND_INT_REQ;
645                         goto again;
646                 }
647
648                 return msb_exit_state_machine(msb, 0);
649         }
650
651         BUG();
652 }
653
654 /* Small handler for card reset */
655 static int h_msb_reset(struct memstick_dev *card,
656                                         struct memstick_request **out_mrq)
657 {
658         u8 command = MS_CMD_RESET;
659         struct msb_data *msb = memstick_get_drvdata(card);
660         struct memstick_request *mrq = *out_mrq = &card->current_mrq;
661
662         if (mrq->error)
663                 return msb_exit_state_machine(msb, mrq->error);
664
665         switch (msb->state) {
666         case MSB_RS_SEND:
667                 memstick_init_req(mrq, MS_TPC_SET_CMD, &command, 1);
668                 mrq->need_card_int = 0;
669                 msb->state = MSB_RS_CONFIRM;
670                 return 0;
671         case MSB_RS_CONFIRM:
672                 return msb_exit_state_machine(msb, 0);
673         }
674         BUG();
675 }
676
677 /* This handler is used to do serial->parallel switch */
678 static int h_msb_parallel_switch(struct memstick_dev *card,
679                                         struct memstick_request **out_mrq)
680 {
681         struct msb_data *msb = memstick_get_drvdata(card);
682         struct memstick_request *mrq = *out_mrq = &card->current_mrq;
683         struct memstick_host *host = card->host;
684
685         if (mrq->error) {
686                 dbg("parallel_switch: error");
687                 msb->regs.param.system &= ~MEMSTICK_SYS_PAM;
688                 return msb_exit_state_machine(msb, mrq->error);
689         }
690
691         switch (msb->state) {
692         case MSB_PS_SEND_SWITCH_COMMAND:
693                 /* Set the parallel interface on memstick side */
694                 msb->regs.param.system |= MEMSTICK_SYS_PAM;
695
696                 if (!msb_write_regs(msb,
697                         offsetof(struct ms_register, param),
698                         1,
699                         (unsigned char *)&msb->regs.param))
700                         return 0;
701
702                 msb->state = MSB_PS_SWICH_HOST;
703                 return 0;
704
705         case MSB_PS_SWICH_HOST:
706                  /* Set parallel interface on our side + send a dummy request
707                   * to see if card responds
708                   */
709                 host->set_param(host, MEMSTICK_INTERFACE, MEMSTICK_PAR4);
710                 memstick_init_req(mrq, MS_TPC_GET_INT, NULL, 1);
711                 msb->state = MSB_PS_CONFIRM;
712                 return 0;
713
714         case MSB_PS_CONFIRM:
715                 return msb_exit_state_machine(msb, 0);
716         }
717
718         BUG();
719 }
720
721 static int msb_switch_to_parallel(struct msb_data *msb);
722
723 /* Reset the card, to guard against hw errors beeing treated as bad blocks */
724 static int msb_reset(struct msb_data *msb, bool full)
725 {
726
727         bool was_parallel = msb->regs.param.system & MEMSTICK_SYS_PAM;
728         struct memstick_dev *card = msb->card;
729         struct memstick_host *host = card->host;
730         int error;
731
732         /* Reset the card */
733         msb->regs.param.system = MEMSTICK_SYS_BAMD;
734
735         if (full) {
736                 error =  host->set_param(host,
737                                         MEMSTICK_POWER, MEMSTICK_POWER_OFF);
738                 if (error)
739                         goto out_error;
740
741                 msb_invalidate_reg_window(msb);
742
743                 error = host->set_param(host,
744                                         MEMSTICK_POWER, MEMSTICK_POWER_ON);
745                 if (error)
746                         goto out_error;
747
748                 error = host->set_param(host,
749                                         MEMSTICK_INTERFACE, MEMSTICK_SERIAL);
750                 if (error) {
751 out_error:
752                         dbg("Failed to reset the host controller");
753                         msb->read_only = true;
754                         return -EFAULT;
755                 }
756         }
757
758         error = msb_run_state_machine(msb, h_msb_reset);
759         if (error) {
760                 dbg("Failed to reset the card");
761                 msb->read_only = true;
762                 return -ENODEV;
763         }
764
765         /* Set parallel mode */
766         if (was_parallel)
767                 msb_switch_to_parallel(msb);
768         return 0;
769 }
770
771 /* Attempts to switch interface to parallel mode */
772 static int msb_switch_to_parallel(struct msb_data *msb)
773 {
774         int error;
775
776         error = msb_run_state_machine(msb, h_msb_parallel_switch);
777         if (error) {
778                 pr_err("Switch to parallel failed");
779                 msb->regs.param.system &= ~MEMSTICK_SYS_PAM;
780                 msb_reset(msb, true);
781                 return -EFAULT;
782         }
783
784         msb->caps |= MEMSTICK_CAP_AUTO_GET_INT;
785         return 0;
786 }
787
788 /* Changes overwrite flag on a page */
789 static int msb_set_overwrite_flag(struct msb_data *msb,
790                                                 u16 pba, u8 page, u8 flag)
791 {
792         if (msb->read_only)
793                 return -EROFS;
794
795         msb->regs.param.block_address = cpu_to_be16(pba);
796         msb->regs.param.page_address = page;
797         msb->regs.param.cp = MEMSTICK_CP_OVERWRITE;
798         msb->regs.extra_data.overwrite_flag = flag;
799         msb->command_value = MS_CMD_BLOCK_WRITE;
800         msb->command_need_oob = true;
801
802         dbg_verbose("changing overwrite flag to %02x for sector %d, page %d",
803                                                         flag, pba, page);
804         return msb_run_state_machine(msb, h_msb_send_command);
805 }
806
807 static int msb_mark_bad(struct msb_data *msb, int pba)
808 {
809         pr_notice("marking pba %d as bad", pba);
810         msb_reset(msb, true);
811         return msb_set_overwrite_flag(
812                         msb, pba, 0, 0xFF & ~MEMSTICK_OVERWRITE_BKST);
813 }
814
815 static int msb_mark_page_bad(struct msb_data *msb, int pba, int page)
816 {
817         dbg("marking page %d of pba %d as bad", page, pba);
818         msb_reset(msb, true);
819         return msb_set_overwrite_flag(msb,
820                 pba, page, ~MEMSTICK_OVERWRITE_PGST0);
821 }
822
823 /* Erases one physical block */
824 static int msb_erase_block(struct msb_data *msb, u16 pba)
825 {
826         int error, try;
827
828         if (msb->read_only)
829                 return -EROFS;
830
831         dbg_verbose("erasing pba %d", pba);
832
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;
839
840
841                 error = msb_run_state_machine(msb, h_msb_send_command);
842                 if (!error || msb_reset(msb, true))
843                         break;
844         }
845
846         if (error) {
847                 pr_err("erase failed, marking pba %d as bad", pba);
848                 msb_mark_bad(msb, pba);
849         }
850
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;
855 }
856
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)
861 {
862         int try, error;
863
864         if (pba == MS_BLOCK_INVALID) {
865                 unsigned long flags;
866                 struct sg_mapping_iter miter;
867                 size_t len = msb->page_size;
868
869                 dbg_verbose("read unmapped sector. returning 0xFF");
870
871                 local_irq_save(flags);
872                 sg_miter_start(&miter, sg, sg_nents(sg),
873                                 SG_MITER_ATOMIC | SG_MITER_TO_SG);
874
875                 while (sg_miter_next(&miter) && len > 0) {
876
877                         int chunklen;
878
879                         if (offset && offset >= miter.length) {
880                                 offset -= miter.length;
881                                 continue;
882                         }
883
884                         chunklen = min(miter.length - offset, len);
885                         memset(miter.addr + offset, 0xFF, chunklen);
886                         len -= chunklen;
887                         offset = 0;
888                 }
889
890                 sg_miter_stop(&miter);
891                 local_irq_restore(flags);
892
893                 if (offset)
894                         return -EFAULT;
895
896                 if (extra)
897                         memset(extra, 0xFF, sizeof(*extra));
898                 return 0;
899         }
900
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;
904         }
905
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;
910
911                 msb->current_sg = sg;
912                 msb->current_sg_offset = offset;
913                 error = msb_run_state_machine(msb, h_msb_read_page);
914
915
916                 if (error == -EUCLEAN) {
917                         pr_notice("correctable error on pba %d, page %d",
918                                 pba, page);
919                         error = 0;
920                 }
921
922                 if (!error && extra)
923                         *extra = msb->regs.extra_data;
924
925                 if (!error || msb_reset(msb, true))
926                         break;
927
928         }
929
930         /* Mark bad pages */
931         if (error == -EBADMSG) {
932                 pr_err("uncorrectable error on read of pba %d, page %d",
933                         pba, page);
934
935                 if (msb->regs.extra_data.overwrite_flag &
936                                         MEMSTICK_OVERWRITE_PGST0)
937                         msb_mark_page_bad(msb, pba, page);
938                 return -EBADMSG;
939         }
940
941         if (error)
942                 pr_err("read of pba %d, page %d failed with error %d",
943                         pba, page, error);
944         return error;
945 }
946
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)
950 {
951         int error;
952
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;
957
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;
961         }
962
963         error = msb_run_state_machine(msb, h_msb_read_page);
964         *extra = msb->regs.extra_data;
965
966         if (error == -EUCLEAN) {
967                 pr_notice("correctable error on pba %d, page %d",
968                         pba, page);
969                 return 0;
970         }
971
972         return error;
973 }
974
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)
978 {
979         struct scatterlist sg;
980         int page = 0, error;
981
982         sg_init_one(&sg, msb->block_buffer, msb->block_size);
983
984         while (page < msb->pages_in_block) {
985
986                 error = msb_read_page(msb, pba, page,
987                                 NULL, &sg, page * msb->page_size);
988                 if (error)
989                         return error;
990                 page++;
991         }
992
993         if (msb_sg_compare_to_buffer(orig_sg, offset,
994                                 msb->block_buffer, msb->block_size))
995                 return -EIO;
996         return 0;
997 }
998
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)
1002 {
1003         int error, current_try = 1;
1004
1005         BUG_ON(sg->length < msb->page_size);
1006
1007         if (msb->read_only)
1008                 return -EROFS;
1009
1010         if (pba == MS_BLOCK_INVALID) {
1011                 pr_err(
1012                         "BUG: write: attempt to write MS_BLOCK_INVALID block");
1013                 return -EINVAL;
1014         }
1015
1016         if (pba >= msb->block_count || lba >= msb->logical_block_count) {
1017                 pr_err(
1018                 "BUG: write: attempt to write beyond the end of device");
1019                 return -EINVAL;
1020         }
1021
1022         if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) {
1023                 pr_err("BUG: write: lba zone mismatch");
1024                 return -EINVAL;
1025         }
1026
1027         if (pba == msb->boot_block_locations[0] ||
1028                 pba == msb->boot_block_locations[1]) {
1029                 pr_err("BUG: write: attempt to write to boot blocks!");
1030                 return -EINVAL;
1031         }
1032
1033         while (1) {
1034
1035                 if (msb->read_only)
1036                         return -EROFS;
1037
1038                 msb->regs.param.cp = MEMSTICK_CP_BLOCK;
1039                 msb->regs.param.page_address = 0;
1040                 msb->regs.param.block_address = cpu_to_be16(pba);
1041
1042                 msb->regs.extra_data.management_flag = 0xFF;
1043                 msb->regs.extra_data.overwrite_flag = 0xF8;
1044                 msb->regs.extra_data.logical_address = cpu_to_be16(lba);
1045
1046                 msb->current_sg = sg;
1047                 msb->current_sg_offset = offset;
1048                 msb->current_page = 0;
1049
1050                 error = msb_run_state_machine(msb, h_msb_write_block);
1051
1052                 /* Sector we just wrote to is assumed erased since its pba
1053                  * was erased. If it wasn't erased, write will succeed
1054                  * and will just clear the bits that were set in the block
1055                  * thus test that what we have written,
1056                  * matches what we expect.
1057                  * We do trust the blocks that we erased
1058                  */
1059                 if (!error && (verify_writes ||
1060                                 !test_bit(pba, msb->erased_blocks_bitmap)))
1061                         error = msb_verify_block(msb, pba, sg, offset);
1062
1063                 if (!error)
1064                         break;
1065
1066                 if (current_try > 1 || msb_reset(msb, true))
1067                         break;
1068
1069                 pr_err("write failed, trying to erase the pba %d", pba);
1070                 error = msb_erase_block(msb, pba);
1071                 if (error)
1072                         break;
1073
1074                 current_try++;
1075         }
1076         return error;
1077 }
1078
1079 /* Finds a free block for write replacement */
1080 static u16 msb_get_free_block(struct msb_data *msb, int zone)
1081 {
1082         u16 pos;
1083         int pba = zone * MS_BLOCKS_IN_ZONE;
1084         int i;
1085
1086         get_random_bytes(&pos, sizeof(pos));
1087
1088         if (!msb->free_block_count[zone]) {
1089                 pr_err("NO free blocks in the zone %d, to use for a write, (media is WORN out) switching to RO mode", zone);
1090                 msb->read_only = true;
1091                 return MS_BLOCK_INVALID;
1092         }
1093
1094         pos %= msb->free_block_count[zone];
1095
1096         dbg_verbose("have %d choices for a free block, selected randomly: %d",
1097                 msb->free_block_count[zone], pos);
1098
1099         pba = find_next_zero_bit(msb->used_blocks_bitmap,
1100                                                         msb->block_count, pba);
1101         for (i = 0; i < pos; ++i)
1102                 pba = find_next_zero_bit(msb->used_blocks_bitmap,
1103                                                 msb->block_count, pba + 1);
1104
1105         dbg_verbose("result of the free blocks scan: pba %d", pba);
1106
1107         if (pba == msb->block_count || (msb_get_zone_from_pba(pba)) != zone) {
1108                 pr_err("BUG: can't get a free block");
1109                 msb->read_only = true;
1110                 return MS_BLOCK_INVALID;
1111         }
1112
1113         msb_mark_block_used(msb, pba);
1114         return pba;
1115 }
1116
1117 static int msb_update_block(struct msb_data *msb, u16 lba,
1118         struct scatterlist *sg, int offset)
1119 {
1120         u16 pba, new_pba;
1121         int error, try;
1122
1123         pba = msb->lba_to_pba_table[lba];
1124         dbg_verbose("start of a block update at lba  %d, pba %d", lba, pba);
1125
1126         if (pba != MS_BLOCK_INVALID) {
1127                 dbg_verbose("setting the update flag on the block");
1128                 msb_set_overwrite_flag(msb, pba, 0,
1129                                 0xFF & ~MEMSTICK_OVERWRITE_UDST);
1130         }
1131
1132         for (try = 0; try < 3; try++) {
1133                 new_pba = msb_get_free_block(msb,
1134                         msb_get_zone_from_lba(lba));
1135
1136                 if (new_pba == MS_BLOCK_INVALID) {
1137                         error = -EIO;
1138                         goto out;
1139                 }
1140
1141                 dbg_verbose("block update: writing updated block to the pba %d",
1142                                                                 new_pba);
1143                 error = msb_write_block(msb, new_pba, lba, sg, offset);
1144                 if (error == -EBADMSG) {
1145                         msb_mark_bad(msb, new_pba);
1146                         continue;
1147                 }
1148
1149                 if (error)
1150                         goto out;
1151
1152                 dbg_verbose("block update: erasing the old block");
1153                 msb_erase_block(msb, pba);
1154                 msb->lba_to_pba_table[lba] = new_pba;
1155                 return 0;
1156         }
1157 out:
1158         if (error) {
1159                 pr_err("block update error after %d tries,  switching to r/o mode", try);
1160                 msb->read_only = true;
1161         }
1162         return error;
1163 }
1164
1165 /* Converts endiannes in the boot block for easy use */
1166 static void msb_fix_boot_page_endianness(struct ms_boot_page *p)
1167 {
1168         p->header.block_id = be16_to_cpu(p->header.block_id);
1169         p->header.format_reserved = be16_to_cpu(p->header.format_reserved);
1170         p->entry.disabled_block.start_addr
1171                 = be32_to_cpu(p->entry.disabled_block.start_addr);
1172         p->entry.disabled_block.data_size
1173                 = be32_to_cpu(p->entry.disabled_block.data_size);
1174         p->entry.cis_idi.start_addr
1175                 = be32_to_cpu(p->entry.cis_idi.start_addr);
1176         p->entry.cis_idi.data_size
1177                 = be32_to_cpu(p->entry.cis_idi.data_size);
1178         p->attr.block_size = be16_to_cpu(p->attr.block_size);
1179         p->attr.number_of_blocks = be16_to_cpu(p->attr.number_of_blocks);
1180         p->attr.number_of_effective_blocks
1181                 = be16_to_cpu(p->attr.number_of_effective_blocks);
1182         p->attr.page_size = be16_to_cpu(p->attr.page_size);
1183         p->attr.memory_manufacturer_code
1184                 = be16_to_cpu(p->attr.memory_manufacturer_code);
1185         p->attr.memory_device_code = be16_to_cpu(p->attr.memory_device_code);
1186         p->attr.implemented_capacity
1187                 = be16_to_cpu(p->attr.implemented_capacity);
1188         p->attr.controller_number = be16_to_cpu(p->attr.controller_number);
1189         p->attr.controller_function = be16_to_cpu(p->attr.controller_function);
1190 }
1191
1192 static int msb_read_boot_blocks(struct msb_data *msb)
1193 {
1194         int pba = 0;
1195         struct scatterlist sg;
1196         struct ms_extra_data_register extra;
1197         struct ms_boot_page *page;
1198
1199         msb->boot_block_locations[0] = MS_BLOCK_INVALID;
1200         msb->boot_block_locations[1] = MS_BLOCK_INVALID;
1201         msb->boot_block_count = 0;
1202
1203         dbg_verbose("Start of a scan for the boot blocks");
1204
1205         if (!msb->boot_page) {
1206                 page = kmalloc_array(2, sizeof(struct ms_boot_page),
1207                                      GFP_KERNEL);
1208                 if (!page)
1209                         return -ENOMEM;
1210
1211                 msb->boot_page = page;
1212         } else
1213                 page = msb->boot_page;
1214
1215         msb->block_count = MS_BLOCK_MAX_BOOT_ADDR;
1216
1217         for (pba = 0; pba < MS_BLOCK_MAX_BOOT_ADDR; pba++) {
1218
1219                 sg_init_one(&sg, page, sizeof(*page));
1220                 if (msb_read_page(msb, pba, 0, &extra, &sg, 0)) {
1221                         dbg("boot scan: can't read pba %d", pba);
1222                         continue;
1223                 }
1224
1225                 if (extra.management_flag & MEMSTICK_MANAGEMENT_SYSFLG) {
1226                         dbg("management flag doesn't indicate boot block %d",
1227                                                                         pba);
1228                         continue;
1229                 }
1230
1231                 if (be16_to_cpu(page->header.block_id) != MS_BLOCK_BOOT_ID) {
1232                         dbg("the pba at %d doesn't contain boot block ID", pba);
1233                         continue;
1234                 }
1235
1236                 msb_fix_boot_page_endianness(page);
1237                 msb->boot_block_locations[msb->boot_block_count] = pba;
1238
1239                 page++;
1240                 msb->boot_block_count++;
1241
1242                 if (msb->boot_block_count == 2)
1243                         break;
1244         }
1245
1246         if (!msb->boot_block_count) {
1247                 pr_err("media doesn't contain master page, aborting");
1248                 return -EIO;
1249         }
1250
1251         dbg_verbose("End of scan for boot blocks");
1252         return 0;
1253 }
1254
1255 static int msb_read_bad_block_table(struct msb_data *msb, int block_nr)
1256 {
1257         struct ms_boot_page *boot_block;
1258         struct scatterlist sg;
1259         u16 *buffer = NULL;
1260         int offset = 0;
1261         int i, error = 0;
1262         int data_size, data_offset, page, page_offset, size_to_read;
1263         u16 pba;
1264
1265         BUG_ON(block_nr > 1);
1266         boot_block = &msb->boot_page[block_nr];
1267         pba = msb->boot_block_locations[block_nr];
1268
1269         if (msb->boot_block_locations[block_nr] == MS_BLOCK_INVALID)
1270                 return -EINVAL;
1271
1272         data_size = boot_block->entry.disabled_block.data_size;
1273         data_offset = sizeof(struct ms_boot_page) +
1274                         boot_block->entry.disabled_block.start_addr;
1275         if (!data_size)
1276                 return 0;
1277
1278         page = data_offset / msb->page_size;
1279         page_offset = data_offset % msb->page_size;
1280         size_to_read =
1281                 DIV_ROUND_UP(data_size + page_offset, msb->page_size) *
1282                         msb->page_size;
1283
1284         dbg("reading bad block of boot block at pba %d, offset %d len %d",
1285                 pba, data_offset, data_size);
1286
1287         buffer = kzalloc(size_to_read, GFP_KERNEL);
1288         if (!buffer)
1289                 return -ENOMEM;
1290
1291         /* Read the buffer */
1292         sg_init_one(&sg, buffer, size_to_read);
1293
1294         while (offset < size_to_read) {
1295                 error = msb_read_page(msb, pba, page, NULL, &sg, offset);
1296                 if (error)
1297                         goto out;
1298
1299                 page++;
1300                 offset += msb->page_size;
1301
1302                 if (page == msb->pages_in_block) {
1303                         pr_err(
1304                         "bad block table extends beyond the boot block");
1305                         break;
1306                 }
1307         }
1308
1309         /* Process the bad block table */
1310         for (i = page_offset; i < data_size / sizeof(u16); i++) {
1311
1312                 u16 bad_block = be16_to_cpu(buffer[i]);
1313
1314                 if (bad_block >= msb->block_count) {
1315                         dbg("bad block table contains invalid block %d",
1316                                                                 bad_block);
1317                         continue;
1318                 }
1319
1320                 if (test_bit(bad_block, msb->used_blocks_bitmap))  {
1321                         dbg("duplicate bad block %d in the table",
1322                                 bad_block);
1323                         continue;
1324                 }
1325
1326                 dbg("block %d is marked as factory bad", bad_block);
1327                 msb_mark_block_used(msb, bad_block);
1328         }
1329 out:
1330         kfree(buffer);
1331         return error;
1332 }
1333
1334 static int msb_ftl_initialize(struct msb_data *msb)
1335 {
1336         int i;
1337
1338         if (msb->ftl_initialized)
1339                 return 0;
1340
1341         msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
1342         msb->logical_block_count = msb->zone_count * 496 - 2;
1343
1344         msb->used_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
1345         msb->erased_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
1346         msb->lba_to_pba_table =
1347                 kmalloc_array(msb->logical_block_count, sizeof(u16),
1348                               GFP_KERNEL);
1349
1350         if (!msb->used_blocks_bitmap || !msb->lba_to_pba_table ||
1351                                                 !msb->erased_blocks_bitmap) {
1352                 bitmap_free(msb->used_blocks_bitmap);
1353                 bitmap_free(msb->erased_blocks_bitmap);
1354                 kfree(msb->lba_to_pba_table);
1355                 return -ENOMEM;
1356         }
1357
1358         for (i = 0; i < msb->zone_count; i++)
1359                 msb->free_block_count[i] = MS_BLOCKS_IN_ZONE;
1360
1361         memset(msb->lba_to_pba_table, MS_BLOCK_INVALID,
1362                         msb->logical_block_count * sizeof(u16));
1363
1364         dbg("initial FTL tables created. Zone count = %d, Logical block count = %d",
1365                 msb->zone_count, msb->logical_block_count);
1366
1367         msb->ftl_initialized = true;
1368         return 0;
1369 }
1370
1371 static int msb_ftl_scan(struct msb_data *msb)
1372 {
1373         u16 pba, lba, other_block;
1374         u8 overwrite_flag, management_flag, other_overwrite_flag;
1375         int error;
1376         struct ms_extra_data_register extra;
1377         u8 *overwrite_flags = kzalloc(msb->block_count, GFP_KERNEL);
1378
1379         if (!overwrite_flags)
1380                 return -ENOMEM;
1381
1382         dbg("Start of media scanning");
1383         for (pba = 0; pba < msb->block_count; pba++) {
1384
1385                 if (pba == msb->boot_block_locations[0] ||
1386                         pba == msb->boot_block_locations[1]) {
1387                         dbg_verbose("pba %05d -> [boot block]", pba);
1388                         msb_mark_block_used(msb, pba);
1389                         continue;
1390                 }
1391
1392                 if (test_bit(pba, msb->used_blocks_bitmap)) {
1393                         dbg_verbose("pba %05d -> [factory bad]", pba);
1394                         continue;
1395                 }
1396
1397                 memset(&extra, 0, sizeof(extra));
1398                 error = msb_read_oob(msb, pba, 0, &extra);
1399
1400                 /* can't trust the page if we can't read the oob */
1401                 if (error == -EBADMSG) {
1402                         pr_notice(
1403                         "oob of pba %d damaged, will try to erase it", pba);
1404                         msb_mark_block_used(msb, pba);
1405                         msb_erase_block(msb, pba);
1406                         continue;
1407                 } else if (error) {
1408                         pr_err("unknown error %d on read of oob of pba %d - aborting",
1409                                 error, pba);
1410
1411                         kfree(overwrite_flags);
1412                         return error;
1413                 }
1414
1415                 lba = be16_to_cpu(extra.logical_address);
1416                 management_flag = extra.management_flag;
1417                 overwrite_flag = extra.overwrite_flag;
1418                 overwrite_flags[pba] = overwrite_flag;
1419
1420                 /* Skip bad blocks */
1421                 if (!(overwrite_flag & MEMSTICK_OVERWRITE_BKST)) {
1422                         dbg("pba %05d -> [BAD]", pba);
1423                         msb_mark_block_used(msb, pba);
1424                         continue;
1425                 }
1426
1427                 /* Skip system/drm blocks */
1428                 if ((management_flag & MEMSTICK_MANAGEMENT_FLAG_NORMAL) !=
1429                         MEMSTICK_MANAGEMENT_FLAG_NORMAL) {
1430                         dbg("pba %05d -> [reserved management flag %02x]",
1431                                                         pba, management_flag);
1432                         msb_mark_block_used(msb, pba);
1433                         continue;
1434                 }
1435
1436                 /* Erase temporary tables */
1437                 if (!(management_flag & MEMSTICK_MANAGEMENT_ATFLG)) {
1438                         dbg("pba %05d -> [temp table] - will erase", pba);
1439
1440                         msb_mark_block_used(msb, pba);
1441                         msb_erase_block(msb, pba);
1442                         continue;
1443                 }
1444
1445                 if (lba == MS_BLOCK_INVALID) {
1446                         dbg_verbose("pba %05d -> [free]", pba);
1447                         continue;
1448                 }
1449
1450                 msb_mark_block_used(msb, pba);
1451
1452                 /* Block has LBA not according to zoning*/
1453                 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) {
1454                         pr_notice("pba %05d -> [bad lba %05d] - will erase",
1455                                                                 pba, lba);
1456                         msb_erase_block(msb, pba);
1457                         continue;
1458                 }
1459
1460                 /* No collisions - great */
1461                 if (msb->lba_to_pba_table[lba] == MS_BLOCK_INVALID) {
1462                         dbg_verbose("pba %05d -> [lba %05d]", pba, lba);
1463                         msb->lba_to_pba_table[lba] = pba;
1464                         continue;
1465                 }
1466
1467                 other_block = msb->lba_to_pba_table[lba];
1468                 other_overwrite_flag = overwrite_flags[other_block];
1469
1470                 pr_notice("Collision between pba %d and pba %d",
1471                         pba, other_block);
1472
1473                 if (!(overwrite_flag & MEMSTICK_OVERWRITE_UDST)) {
1474                         pr_notice("pba %d is marked as stable, use it", pba);
1475                         msb_erase_block(msb, other_block);
1476                         msb->lba_to_pba_table[lba] = pba;
1477                         continue;
1478                 }
1479
1480                 if (!(other_overwrite_flag & MEMSTICK_OVERWRITE_UDST)) {
1481                         pr_notice("pba %d is marked as stable, use it",
1482                                                                 other_block);
1483                         msb_erase_block(msb, pba);
1484                         continue;
1485                 }
1486
1487                 pr_notice("collision between blocks %d and %d, without stable flag set on both, erasing pba %d",
1488                                 pba, other_block, other_block);
1489
1490                 msb_erase_block(msb, other_block);
1491                 msb->lba_to_pba_table[lba] = pba;
1492         }
1493
1494         dbg("End of media scanning");
1495         kfree(overwrite_flags);
1496         return 0;
1497 }
1498
1499 static void msb_cache_flush_timer(struct timer_list *t)
1500 {
1501         struct msb_data *msb = from_timer(msb, t, cache_flush_timer);
1502
1503         msb->need_flush_cache = true;
1504         queue_work(msb->io_queue, &msb->io_work);
1505 }
1506
1507
1508 static void msb_cache_discard(struct msb_data *msb)
1509 {
1510         if (msb->cache_block_lba == MS_BLOCK_INVALID)
1511                 return;
1512
1513         del_timer_sync(&msb->cache_flush_timer);
1514
1515         dbg_verbose("Discarding the write cache");
1516         msb->cache_block_lba = MS_BLOCK_INVALID;
1517         bitmap_zero(&msb->valid_cache_bitmap, msb->pages_in_block);
1518 }
1519
1520 static int msb_cache_init(struct msb_data *msb)
1521 {
1522         timer_setup(&msb->cache_flush_timer, msb_cache_flush_timer, 0);
1523
1524         if (!msb->cache)
1525                 msb->cache = kzalloc(msb->block_size, GFP_KERNEL);
1526         if (!msb->cache)
1527                 return -ENOMEM;
1528
1529         msb_cache_discard(msb);
1530         return 0;
1531 }
1532
1533 static int msb_cache_flush(struct msb_data *msb)
1534 {
1535         struct scatterlist sg;
1536         struct ms_extra_data_register extra;
1537         int page, offset, error;
1538         u16 pba, lba;
1539
1540         if (msb->read_only)
1541                 return -EROFS;
1542
1543         if (msb->cache_block_lba == MS_BLOCK_INVALID)
1544                 return 0;
1545
1546         lba = msb->cache_block_lba;
1547         pba = msb->lba_to_pba_table[lba];
1548
1549         dbg_verbose("Flushing the write cache of pba %d (LBA %d)",
1550                                                 pba, msb->cache_block_lba);
1551
1552         sg_init_one(&sg, msb->cache , msb->block_size);
1553
1554         /* Read all missing pages in cache */
1555         for (page = 0; page < msb->pages_in_block; page++) {
1556
1557                 if (test_bit(page, &msb->valid_cache_bitmap))
1558                         continue;
1559
1560                 offset = page * msb->page_size;
1561
1562                 dbg_verbose("reading non-present sector %d of cache block %d",
1563                         page, lba);
1564                 error = msb_read_page(msb, pba, page, &extra, &sg, offset);
1565
1566                 /* Bad pages are copied with 00 page status */
1567                 if (error == -EBADMSG) {
1568                         pr_err("read error on sector %d, contents probably damaged", page);
1569                         continue;
1570                 }
1571
1572                 if (error)
1573                         return error;
1574
1575                 if ((extra.overwrite_flag & MEMSTICK_OV_PG_NORMAL) !=
1576                                                         MEMSTICK_OV_PG_NORMAL) {
1577                         dbg("page %d is marked as bad", page);
1578                         continue;
1579                 }
1580
1581                 set_bit(page, &msb->valid_cache_bitmap);
1582         }
1583
1584         /* Write the cache now */
1585         error = msb_update_block(msb, msb->cache_block_lba, &sg, 0);
1586         pba = msb->lba_to_pba_table[msb->cache_block_lba];
1587
1588         /* Mark invalid pages */
1589         if (!error) {
1590                 for (page = 0; page < msb->pages_in_block; page++) {
1591
1592                         if (test_bit(page, &msb->valid_cache_bitmap))
1593                                 continue;
1594
1595                         dbg("marking page %d as containing damaged data",
1596                                 page);
1597                         msb_set_overwrite_flag(msb,
1598                                 pba , page, 0xFF & ~MEMSTICK_OV_PG_NORMAL);
1599                 }
1600         }
1601
1602         msb_cache_discard(msb);
1603         return error;
1604 }
1605
1606 static int msb_cache_write(struct msb_data *msb, int lba,
1607         int page, bool add_to_cache_only, struct scatterlist *sg, int offset)
1608 {
1609         int error;
1610         struct scatterlist sg_tmp[10];
1611
1612         if (msb->read_only)
1613                 return -EROFS;
1614
1615         if (msb->cache_block_lba == MS_BLOCK_INVALID ||
1616                                                 lba != msb->cache_block_lba)
1617                 if (add_to_cache_only)
1618                         return 0;
1619
1620         /* If we need to write different block */
1621         if (msb->cache_block_lba != MS_BLOCK_INVALID &&
1622                                                 lba != msb->cache_block_lba) {
1623                 dbg_verbose("first flush the cache");
1624                 error = msb_cache_flush(msb);
1625                 if (error)
1626                         return error;
1627         }
1628
1629         if (msb->cache_block_lba  == MS_BLOCK_INVALID) {
1630                 msb->cache_block_lba  = lba;
1631                 mod_timer(&msb->cache_flush_timer,
1632                         jiffies + msecs_to_jiffies(cache_flush_timeout));
1633         }
1634
1635         dbg_verbose("Write of LBA %d page %d to cache ", lba, page);
1636
1637         sg_init_table(sg_tmp, ARRAY_SIZE(sg_tmp));
1638         msb_sg_copy(sg, sg_tmp, ARRAY_SIZE(sg_tmp), offset, msb->page_size);
1639
1640         sg_copy_to_buffer(sg_tmp, sg_nents(sg_tmp),
1641                 msb->cache + page * msb->page_size, msb->page_size);
1642
1643         set_bit(page, &msb->valid_cache_bitmap);
1644         return 0;
1645 }
1646
1647 static int msb_cache_read(struct msb_data *msb, int lba,
1648                                 int page, struct scatterlist *sg, int offset)
1649 {
1650         int pba = msb->lba_to_pba_table[lba];
1651         struct scatterlist sg_tmp[10];
1652         int error = 0;
1653
1654         if (lba == msb->cache_block_lba &&
1655                         test_bit(page, &msb->valid_cache_bitmap)) {
1656
1657                 dbg_verbose("Read of LBA %d (pba %d) sector %d from cache",
1658                                                         lba, pba, page);
1659
1660                 sg_init_table(sg_tmp, ARRAY_SIZE(sg_tmp));
1661                 msb_sg_copy(sg, sg_tmp, ARRAY_SIZE(sg_tmp),
1662                         offset, msb->page_size);
1663                 sg_copy_from_buffer(sg_tmp, sg_nents(sg_tmp),
1664                         msb->cache + msb->page_size * page,
1665                                                         msb->page_size);
1666         } else {
1667                 dbg_verbose("Read of LBA %d (pba %d) sector %d from device",
1668                                                         lba, pba, page);
1669
1670                 error = msb_read_page(msb, pba, page, NULL, sg, offset);
1671                 if (error)
1672                         return error;
1673
1674                 msb_cache_write(msb, lba, page, true, sg, offset);
1675         }
1676         return error;
1677 }
1678
1679 /* Emulated geometry table
1680  * This table content isn't that importaint,
1681  * One could put here different values, providing that they still
1682  * cover whole disk.
1683  * 64 MB entry is what windows reports for my 64M memstick
1684  */
1685
1686 static const struct chs_entry chs_table[] = {
1687 /*        size sectors cylynders  heads */
1688         { 4,    16,    247,       2  },
1689         { 8,    16,    495,       2  },
1690         { 16,   16,    495,       4  },
1691         { 32,   16,    991,       4  },
1692         { 64,   16,    991,       8  },
1693         {128,   16,    991,       16 },
1694         { 0 }
1695 };
1696
1697 /* Load information about the card */
1698 static int msb_init_card(struct memstick_dev *card)
1699 {
1700         struct msb_data *msb = memstick_get_drvdata(card);
1701         struct memstick_host *host = card->host;
1702         struct ms_boot_page *boot_block;
1703         int error = 0, i, raw_size_in_megs;
1704
1705         msb->caps = 0;
1706
1707         if (card->id.class >= MEMSTICK_CLASS_ROM &&
1708                                 card->id.class <= MEMSTICK_CLASS_ROM)
1709                 msb->read_only = true;
1710
1711         msb->state = -1;
1712         error = msb_reset(msb, false);
1713         if (error)
1714                 return error;
1715
1716         /* Due to a bug in Jmicron driver written by Alex Dubov,
1717          * its serial mode barely works,
1718          * so we switch to parallel mode right away
1719          */
1720         if (host->caps & MEMSTICK_CAP_PAR4)
1721                 msb_switch_to_parallel(msb);
1722
1723         msb->page_size = sizeof(struct ms_boot_page);
1724
1725         /* Read the boot page */
1726         error = msb_read_boot_blocks(msb);
1727         if (error)
1728                 return -EIO;
1729
1730         boot_block = &msb->boot_page[0];
1731
1732         /* Save intersting attributes from boot page */
1733         msb->block_count = boot_block->attr.number_of_blocks;
1734         msb->page_size = boot_block->attr.page_size;
1735
1736         msb->pages_in_block = boot_block->attr.block_size * 2;
1737         msb->block_size = msb->page_size * msb->pages_in_block;
1738
1739         if ((size_t)msb->page_size > PAGE_SIZE) {
1740                 /* this isn't supported by linux at all, anyway*/
1741                 dbg("device page %d size isn't supported", msb->page_size);
1742                 return -EINVAL;
1743         }
1744
1745         msb->block_buffer = kzalloc(msb->block_size, GFP_KERNEL);
1746         if (!msb->block_buffer)
1747                 return -ENOMEM;
1748
1749         raw_size_in_megs = (msb->block_size * msb->block_count) >> 20;
1750
1751         for (i = 0; chs_table[i].size; i++) {
1752
1753                 if (chs_table[i].size != raw_size_in_megs)
1754                         continue;
1755
1756                 msb->geometry.cylinders = chs_table[i].cyl;
1757                 msb->geometry.heads = chs_table[i].head;
1758                 msb->geometry.sectors = chs_table[i].sec;
1759                 break;
1760         }
1761
1762         if (boot_block->attr.transfer_supporting == 1)
1763                 msb->caps |= MEMSTICK_CAP_PAR4;
1764
1765         if (boot_block->attr.device_type & 0x03)
1766                 msb->read_only = true;
1767
1768         dbg("Total block count = %d", msb->block_count);
1769         dbg("Each block consists of %d pages", msb->pages_in_block);
1770         dbg("Page size = %d bytes", msb->page_size);
1771         dbg("Parallel mode supported: %d", !!(msb->caps & MEMSTICK_CAP_PAR4));
1772         dbg("Read only: %d", msb->read_only);
1773
1774 #if 0
1775         /* Now we can switch the interface */
1776         if (host->caps & msb->caps & MEMSTICK_CAP_PAR4)
1777                 msb_switch_to_parallel(msb);
1778 #endif
1779
1780         error = msb_cache_init(msb);
1781         if (error)
1782                 return error;
1783
1784         error = msb_ftl_initialize(msb);
1785         if (error)
1786                 return error;
1787
1788
1789         /* Read the bad block table */
1790         error = msb_read_bad_block_table(msb, 0);
1791
1792         if (error && error != -ENOMEM) {
1793                 dbg("failed to read bad block table from primary boot block, trying from backup");
1794                 error = msb_read_bad_block_table(msb, 1);
1795         }
1796
1797         if (error)
1798                 return error;
1799
1800         /* *drum roll* Scan the media */
1801         error = msb_ftl_scan(msb);
1802         if (error) {
1803                 pr_err("Scan of media failed");
1804                 return error;
1805         }
1806
1807         return 0;
1808
1809 }
1810
1811 static int msb_do_write_request(struct msb_data *msb, int lba,
1812         int page, struct scatterlist *sg, size_t len, int *sucessfuly_written)
1813 {
1814         int error = 0;
1815         off_t offset = 0;
1816         *sucessfuly_written = 0;
1817
1818         while (offset < len) {
1819                 if (page == 0 && len - offset >= msb->block_size) {
1820
1821                         if (msb->cache_block_lba == lba)
1822                                 msb_cache_discard(msb);
1823
1824                         dbg_verbose("Writing whole lba %d", lba);
1825                         error = msb_update_block(msb, lba, sg, offset);
1826                         if (error)
1827                                 return error;
1828
1829                         offset += msb->block_size;
1830                         *sucessfuly_written += msb->block_size;
1831                         lba++;
1832                         continue;
1833                 }
1834
1835                 error = msb_cache_write(msb, lba, page, false, sg, offset);
1836                 if (error)
1837                         return error;
1838
1839                 offset += msb->page_size;
1840                 *sucessfuly_written += msb->page_size;
1841
1842                 page++;
1843                 if (page == msb->pages_in_block) {
1844                         page = 0;
1845                         lba++;
1846                 }
1847         }
1848         return 0;
1849 }
1850
1851 static int msb_do_read_request(struct msb_data *msb, int lba,
1852                 int page, struct scatterlist *sg, int len, int *sucessfuly_read)
1853 {
1854         int error = 0;
1855         int offset = 0;
1856         *sucessfuly_read = 0;
1857
1858         while (offset < len) {
1859
1860                 error = msb_cache_read(msb, lba, page, sg, offset);
1861                 if (error)
1862                         return error;
1863
1864                 offset += msb->page_size;
1865                 *sucessfuly_read += msb->page_size;
1866
1867                 page++;
1868                 if (page == msb->pages_in_block) {
1869                         page = 0;
1870                         lba++;
1871                 }
1872         }
1873         return 0;
1874 }
1875
1876 static void msb_io_work(struct work_struct *work)
1877 {
1878         struct msb_data *msb = container_of(work, struct msb_data, io_work);
1879         int page, error, len;
1880         sector_t lba;
1881         struct scatterlist *sg = msb->prealloc_sg;
1882         struct request *req;
1883
1884         dbg_verbose("IO: work started");
1885
1886         while (1) {
1887                 spin_lock_irq(&msb->q_lock);
1888
1889                 if (msb->need_flush_cache) {
1890                         msb->need_flush_cache = false;
1891                         spin_unlock_irq(&msb->q_lock);
1892                         msb_cache_flush(msb);
1893                         continue;
1894                 }
1895
1896                 req = msb->req;
1897                 if (!req) {
1898                         dbg_verbose("IO: no more requests exiting");
1899                         spin_unlock_irq(&msb->q_lock);
1900                         return;
1901                 }
1902
1903                 spin_unlock_irq(&msb->q_lock);
1904
1905                 /* process the request */
1906                 dbg_verbose("IO: processing new request");
1907                 blk_rq_map_sg(msb->queue, req, sg);
1908
1909                 lba = blk_rq_pos(req);
1910
1911                 sector_div(lba, msb->page_size / 512);
1912                 page = sector_div(lba, msb->pages_in_block);
1913
1914                 if (rq_data_dir(msb->req) == READ)
1915                         error = msb_do_read_request(msb, lba, page, sg,
1916                                 blk_rq_bytes(req), &len);
1917                 else
1918                         error = msb_do_write_request(msb, lba, page, sg,
1919                                 blk_rq_bytes(req), &len);
1920
1921                 if (len && !blk_update_request(req, BLK_STS_OK, len)) {
1922                         __blk_mq_end_request(req, BLK_STS_OK);
1923                         spin_lock_irq(&msb->q_lock);
1924                         msb->req = NULL;
1925                         spin_unlock_irq(&msb->q_lock);
1926                 }
1927
1928                 if (error && msb->req) {
1929                         blk_status_t ret = errno_to_blk_status(error);
1930
1931                         dbg_verbose("IO: ending one sector of the request with error");
1932                         blk_mq_end_request(req, ret);
1933                         spin_lock_irq(&msb->q_lock);
1934                         msb->req = NULL;
1935                         spin_unlock_irq(&msb->q_lock);
1936                 }
1937
1938                 if (msb->req)
1939                         dbg_verbose("IO: request still pending");
1940         }
1941 }
1942
1943 static DEFINE_IDR(msb_disk_idr); /*set of used disk numbers */
1944 static DEFINE_MUTEX(msb_disk_lock); /* protects against races in open/release */
1945
1946 static void msb_data_clear(struct msb_data *msb)
1947 {
1948         kfree(msb->boot_page);
1949         bitmap_free(msb->used_blocks_bitmap);
1950         bitmap_free(msb->erased_blocks_bitmap);
1951         kfree(msb->lba_to_pba_table);
1952         kfree(msb->cache);
1953         msb->card = NULL;
1954 }
1955
1956 static int msb_bd_getgeo(struct block_device *bdev,
1957                                  struct hd_geometry *geo)
1958 {
1959         struct msb_data *msb = bdev->bd_disk->private_data;
1960         *geo = msb->geometry;
1961         return 0;
1962 }
1963
1964 static void msb_bd_free_disk(struct gendisk *disk)
1965 {
1966         struct msb_data *msb = disk->private_data;
1967
1968         mutex_lock(&msb_disk_lock);
1969         idr_remove(&msb_disk_idr, msb->disk_id);
1970         mutex_unlock(&msb_disk_lock);
1971
1972         kfree(msb);
1973 }
1974
1975 static blk_status_t msb_queue_rq(struct blk_mq_hw_ctx *hctx,
1976                                  const struct blk_mq_queue_data *bd)
1977 {
1978         struct memstick_dev *card = hctx->queue->queuedata;
1979         struct msb_data *msb = memstick_get_drvdata(card);
1980         struct request *req = bd->rq;
1981
1982         dbg_verbose("Submit request");
1983
1984         spin_lock_irq(&msb->q_lock);
1985
1986         if (msb->card_dead) {
1987                 dbg("Refusing requests on removed card");
1988
1989                 WARN_ON(!msb->io_queue_stopped);
1990
1991                 spin_unlock_irq(&msb->q_lock);
1992                 blk_mq_start_request(req);
1993                 return BLK_STS_IOERR;
1994         }
1995
1996         if (msb->req) {
1997                 spin_unlock_irq(&msb->q_lock);
1998                 return BLK_STS_DEV_RESOURCE;
1999         }
2000
2001         blk_mq_start_request(req);
2002         msb->req = req;
2003
2004         if (!msb->io_queue_stopped)
2005                 queue_work(msb->io_queue, &msb->io_work);
2006
2007         spin_unlock_irq(&msb->q_lock);
2008         return BLK_STS_OK;
2009 }
2010
2011 static int msb_check_card(struct memstick_dev *card)
2012 {
2013         struct msb_data *msb = memstick_get_drvdata(card);
2014
2015         return (msb->card_dead == 0);
2016 }
2017
2018 static void msb_stop(struct memstick_dev *card)
2019 {
2020         struct msb_data *msb = memstick_get_drvdata(card);
2021         unsigned long flags;
2022
2023         dbg("Stopping all msblock IO");
2024
2025         blk_mq_stop_hw_queues(msb->queue);
2026         spin_lock_irqsave(&msb->q_lock, flags);
2027         msb->io_queue_stopped = true;
2028         spin_unlock_irqrestore(&msb->q_lock, flags);
2029
2030         del_timer_sync(&msb->cache_flush_timer);
2031         flush_workqueue(msb->io_queue);
2032
2033         spin_lock_irqsave(&msb->q_lock, flags);
2034         if (msb->req) {
2035                 blk_mq_requeue_request(msb->req, false);
2036                 msb->req = NULL;
2037         }
2038         spin_unlock_irqrestore(&msb->q_lock, flags);
2039 }
2040
2041 static void msb_start(struct memstick_dev *card)
2042 {
2043         struct msb_data *msb = memstick_get_drvdata(card);
2044         unsigned long flags;
2045
2046         dbg("Resuming IO from msblock");
2047
2048         msb_invalidate_reg_window(msb);
2049
2050         spin_lock_irqsave(&msb->q_lock, flags);
2051         if (!msb->io_queue_stopped || msb->card_dead) {
2052                 spin_unlock_irqrestore(&msb->q_lock, flags);
2053                 return;
2054         }
2055         spin_unlock_irqrestore(&msb->q_lock, flags);
2056
2057         /* Kick cache flush anyway, its harmless */
2058         msb->need_flush_cache = true;
2059         msb->io_queue_stopped = false;
2060
2061         blk_mq_start_hw_queues(msb->queue);
2062
2063         queue_work(msb->io_queue, &msb->io_work);
2064
2065 }
2066
2067 static const struct block_device_operations msb_bdops = {
2068         .owner          = THIS_MODULE,
2069         .getgeo         = msb_bd_getgeo,
2070         .free_disk      = msb_bd_free_disk, 
2071 };
2072
2073 static const struct blk_mq_ops msb_mq_ops = {
2074         .queue_rq       = msb_queue_rq,
2075 };
2076
2077 /* Registers the block device */
2078 static int msb_init_disk(struct memstick_dev *card)
2079 {
2080         struct msb_data *msb = memstick_get_drvdata(card);
2081         int rc;
2082         unsigned long capacity;
2083
2084         mutex_lock(&msb_disk_lock);
2085         msb->disk_id = idr_alloc(&msb_disk_idr, card, 0, 256, GFP_KERNEL);
2086         mutex_unlock(&msb_disk_lock);
2087
2088         if (msb->disk_id  < 0)
2089                 return msb->disk_id;
2090
2091         rc = blk_mq_alloc_sq_tag_set(&msb->tag_set, &msb_mq_ops, 2,
2092                                      BLK_MQ_F_SHOULD_MERGE);
2093         if (rc)
2094                 goto out_release_id;
2095
2096         msb->disk = blk_mq_alloc_disk(&msb->tag_set, card);
2097         if (IS_ERR(msb->disk)) {
2098                 rc = PTR_ERR(msb->disk);
2099                 goto out_free_tag_set;
2100         }
2101         msb->queue = msb->disk->queue;
2102
2103         blk_queue_max_hw_sectors(msb->queue, MS_BLOCK_MAX_PAGES);
2104         blk_queue_max_segments(msb->queue, MS_BLOCK_MAX_SEGS);
2105         blk_queue_max_segment_size(msb->queue,
2106                                    MS_BLOCK_MAX_PAGES * msb->page_size);
2107         blk_queue_logical_block_size(msb->queue, msb->page_size);
2108
2109         sprintf(msb->disk->disk_name, "msblk%d", msb->disk_id);
2110         msb->disk->fops = &msb_bdops;
2111         msb->disk->private_data = msb;
2112
2113         capacity = msb->pages_in_block * msb->logical_block_count;
2114         capacity *= (msb->page_size / 512);
2115         set_capacity(msb->disk, capacity);
2116         dbg("Set total disk size to %lu sectors", capacity);
2117
2118         msb->io_queue = alloc_ordered_workqueue("ms_block", WQ_MEM_RECLAIM);
2119         if (!msb->io_queue) {
2120                 rc = -ENOMEM;
2121                 goto out_cleanup_disk;
2122         }
2123
2124         INIT_WORK(&msb->io_work, msb_io_work);
2125         sg_init_table(msb->prealloc_sg, MS_BLOCK_MAX_SEGS+1);
2126
2127         if (msb->read_only)
2128                 set_disk_ro(msb->disk, 1);
2129
2130         msb_start(card);
2131         rc = device_add_disk(&card->dev, msb->disk, NULL);
2132         if (rc)
2133                 goto out_destroy_workqueue;
2134         dbg("Disk added");
2135         return 0;
2136
2137 out_destroy_workqueue:
2138         destroy_workqueue(msb->io_queue);
2139 out_cleanup_disk:
2140         put_disk(msb->disk);
2141 out_free_tag_set:
2142         blk_mq_free_tag_set(&msb->tag_set);
2143 out_release_id:
2144         mutex_lock(&msb_disk_lock);
2145         idr_remove(&msb_disk_idr, msb->disk_id);
2146         mutex_unlock(&msb_disk_lock);
2147         return rc;
2148 }
2149
2150 static int msb_probe(struct memstick_dev *card)
2151 {
2152         struct msb_data *msb;
2153         int rc = 0;
2154
2155         msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
2156         if (!msb)
2157                 return -ENOMEM;
2158         memstick_set_drvdata(card, msb);
2159         msb->card = card;
2160         spin_lock_init(&msb->q_lock);
2161
2162         rc = msb_init_card(card);
2163         if (rc)
2164                 goto out_free;
2165
2166         rc = msb_init_disk(card);
2167         if (!rc) {
2168                 card->check = msb_check_card;
2169                 card->stop = msb_stop;
2170                 card->start = msb_start;
2171                 return 0;
2172         }
2173 out_free:
2174         memstick_set_drvdata(card, NULL);
2175         msb_data_clear(msb);
2176         kfree(msb);
2177         return rc;
2178 }
2179
2180 static void msb_remove(struct memstick_dev *card)
2181 {
2182         struct msb_data *msb = memstick_get_drvdata(card);
2183         unsigned long flags;
2184
2185         if (!msb->io_queue_stopped)
2186                 msb_stop(card);
2187
2188         dbg("Removing the disk device");
2189
2190         /* Take care of unhandled + new requests from now on */
2191         spin_lock_irqsave(&msb->q_lock, flags);
2192         msb->card_dead = true;
2193         spin_unlock_irqrestore(&msb->q_lock, flags);
2194         blk_mq_start_hw_queues(msb->queue);
2195
2196         /* Remove the disk */
2197         del_gendisk(msb->disk);
2198         blk_mq_free_tag_set(&msb->tag_set);
2199         msb->queue = NULL;
2200
2201         mutex_lock(&msb_disk_lock);
2202         msb_data_clear(msb);
2203         mutex_unlock(&msb_disk_lock);
2204
2205         put_disk(msb->disk);
2206         memstick_set_drvdata(card, NULL);
2207 }
2208
2209 #ifdef CONFIG_PM
2210
2211 static int msb_suspend(struct memstick_dev *card, pm_message_t state)
2212 {
2213         msb_stop(card);
2214         return 0;
2215 }
2216
2217 static int msb_resume(struct memstick_dev *card)
2218 {
2219         struct msb_data *msb = memstick_get_drvdata(card);
2220         struct msb_data *new_msb = NULL;
2221         bool card_dead = true;
2222
2223 #ifndef CONFIG_MEMSTICK_UNSAFE_RESUME
2224         msb->card_dead = true;
2225         return 0;
2226 #endif
2227         mutex_lock(&card->host->lock);
2228
2229         new_msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
2230         if (!new_msb)
2231                 goto out;
2232
2233         new_msb->card = card;
2234         memstick_set_drvdata(card, new_msb);
2235         spin_lock_init(&new_msb->q_lock);
2236         sg_init_table(msb->prealloc_sg, MS_BLOCK_MAX_SEGS+1);
2237
2238         if (msb_init_card(card))
2239                 goto out;
2240
2241         if (msb->block_size != new_msb->block_size)
2242                 goto out;
2243
2244         if (memcmp(msb->boot_page, new_msb->boot_page,
2245                                         sizeof(struct ms_boot_page)))
2246                 goto out;
2247
2248         if (msb->logical_block_count != new_msb->logical_block_count ||
2249                 memcmp(msb->lba_to_pba_table, new_msb->lba_to_pba_table,
2250                                                 msb->logical_block_count))
2251                 goto out;
2252
2253         if (msb->block_count != new_msb->block_count ||
2254             !bitmap_equal(msb->used_blocks_bitmap, new_msb->used_blocks_bitmap,
2255                                                         msb->block_count))
2256                 goto out;
2257
2258         card_dead = false;
2259 out:
2260         if (card_dead)
2261                 dbg("Card was removed/replaced during suspend");
2262
2263         msb->card_dead = card_dead;
2264         memstick_set_drvdata(card, msb);
2265
2266         if (new_msb) {
2267                 msb_data_clear(new_msb);
2268                 kfree(new_msb);
2269         }
2270
2271         msb_start(card);
2272         mutex_unlock(&card->host->lock);
2273         return 0;
2274 }
2275 #else
2276
2277 #define msb_suspend NULL
2278 #define msb_resume NULL
2279
2280 #endif /* CONFIG_PM */
2281
2282 static struct memstick_device_id msb_id_tbl[] = {
2283         {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2284          MEMSTICK_CLASS_FLASH},
2285
2286         {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2287          MEMSTICK_CLASS_ROM},
2288
2289         {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2290          MEMSTICK_CLASS_RO},
2291
2292         {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
2293          MEMSTICK_CLASS_WP},
2294
2295         {MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_DUO, MEMSTICK_CATEGORY_STORAGE_DUO,
2296          MEMSTICK_CLASS_DUO},
2297         {}
2298 };
2299 MODULE_DEVICE_TABLE(memstick, msb_id_tbl);
2300
2301
2302 static struct memstick_driver msb_driver = {
2303         .driver = {
2304                 .name  = DRIVER_NAME,
2305                 .owner = THIS_MODULE
2306         },
2307         .id_table = msb_id_tbl,
2308         .probe    = msb_probe,
2309         .remove   = msb_remove,
2310         .suspend  = msb_suspend,
2311         .resume   = msb_resume
2312 };
2313
2314 static int __init msb_init(void)
2315 {
2316         int rc = memstick_register_driver(&msb_driver);
2317
2318         if (rc)
2319                 pr_err("failed to register memstick driver (error %d)\n", rc);
2320
2321         return rc;
2322 }
2323
2324 static void __exit msb_exit(void)
2325 {
2326         memstick_unregister_driver(&msb_driver);
2327         idr_destroy(&msb_disk_idr);
2328 }
2329
2330 module_init(msb_init);
2331 module_exit(msb_exit);
2332
2333 module_param(cache_flush_timeout, int, S_IRUGO);
2334 MODULE_PARM_DESC(cache_flush_timeout,
2335                                 "Cache flush timeout in msec (1000 default)");
2336 module_param(debug, int, S_IRUGO | S_IWUSR);
2337 MODULE_PARM_DESC(debug, "Debug level (0-2)");
2338
2339 module_param(verify_writes, bool, S_IRUGO);
2340 MODULE_PARM_DESC(verify_writes, "Read back and check all data that is written");
2341
2342 MODULE_LICENSE("GPL");
2343 MODULE_AUTHOR("Maxim Levitsky");
2344 MODULE_DESCRIPTION("Sony MemoryStick block device driver");