cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ms_block.c (57320B)


      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
     28static int debug;
     29static int cache_flush_timeout = 1000;
     30static 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 */
     36static 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	}
     84out:
     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 */
     94static 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 */
    133static 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 */
    141static 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 */
    147static 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 */
    168static 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 */
    188static 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 */
    207static 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 */
    217static 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 */
    238static 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 */
    255static 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 */
    282static 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 */
    303static 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 */
    324static 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 */
    335static 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	}
    347again:
    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 */
    473static 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
    484again:
    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 */
    585static 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	}
    596again:
    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 */
    655static 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 */
    678static 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
    721static int msb_switch_to_parallel(struct msb_data *msb);
    722
    723/* Reset the card, to guard against hw errors beeing treated as bad blocks */
    724static 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) {
    751out_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 */
    772static 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 */
    789static 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
    807static 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
    815static 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 */
    824static 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 */
    858static 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 */
    948static 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 */
    976static 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 */
   1000static 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 */
   1080static 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
   1117static 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	}
   1157out:
   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 */
   1166static 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
   1192static 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
   1255static 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	}
   1329out:
   1330	kfree(buffer);
   1331	return error;
   1332}
   1333
   1334static 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 = kzalloc(msb->block_count / 8, GFP_KERNEL);
   1345	msb->erased_blocks_bitmap = kzalloc(msb->block_count / 8, 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		kfree(msb->used_blocks_bitmap);
   1353		kfree(msb->lba_to_pba_table);
   1354		kfree(msb->erased_blocks_bitmap);
   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
   1371static 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
   1499static 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
   1508static 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
   1520static 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
   1533static 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
   1606static 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
   1647static 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
   1686static 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 */
   1698static 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
   1811static 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
   1851static 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
   1876static 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
   1943static DEFINE_IDR(msb_disk_idr); /*set of used disk numbers */
   1944static DEFINE_MUTEX(msb_disk_lock); /* protects against races in open/release */
   1945
   1946static void msb_data_clear(struct msb_data *msb)
   1947{
   1948	kfree(msb->boot_page);
   1949	kfree(msb->used_blocks_bitmap);
   1950	kfree(msb->lba_to_pba_table);
   1951	kfree(msb->cache);
   1952	msb->card = NULL;
   1953}
   1954
   1955static int msb_bd_getgeo(struct block_device *bdev,
   1956				 struct hd_geometry *geo)
   1957{
   1958	struct msb_data *msb = bdev->bd_disk->private_data;
   1959	*geo = msb->geometry;
   1960	return 0;
   1961}
   1962
   1963static void msb_bd_free_disk(struct gendisk *disk)
   1964{
   1965	struct msb_data *msb = disk->private_data;
   1966
   1967	mutex_lock(&msb_disk_lock);
   1968	idr_remove(&msb_disk_idr, msb->disk_id);
   1969	mutex_unlock(&msb_disk_lock);
   1970
   1971	kfree(msb);
   1972}
   1973
   1974static blk_status_t msb_queue_rq(struct blk_mq_hw_ctx *hctx,
   1975				 const struct blk_mq_queue_data *bd)
   1976{
   1977	struct memstick_dev *card = hctx->queue->queuedata;
   1978	struct msb_data *msb = memstick_get_drvdata(card);
   1979	struct request *req = bd->rq;
   1980
   1981	dbg_verbose("Submit request");
   1982
   1983	spin_lock_irq(&msb->q_lock);
   1984
   1985	if (msb->card_dead) {
   1986		dbg("Refusing requests on removed card");
   1987
   1988		WARN_ON(!msb->io_queue_stopped);
   1989
   1990		spin_unlock_irq(&msb->q_lock);
   1991		blk_mq_start_request(req);
   1992		return BLK_STS_IOERR;
   1993	}
   1994
   1995	if (msb->req) {
   1996		spin_unlock_irq(&msb->q_lock);
   1997		return BLK_STS_DEV_RESOURCE;
   1998	}
   1999
   2000	blk_mq_start_request(req);
   2001	msb->req = req;
   2002
   2003	if (!msb->io_queue_stopped)
   2004		queue_work(msb->io_queue, &msb->io_work);
   2005
   2006	spin_unlock_irq(&msb->q_lock);
   2007	return BLK_STS_OK;
   2008}
   2009
   2010static int msb_check_card(struct memstick_dev *card)
   2011{
   2012	struct msb_data *msb = memstick_get_drvdata(card);
   2013
   2014	return (msb->card_dead == 0);
   2015}
   2016
   2017static void msb_stop(struct memstick_dev *card)
   2018{
   2019	struct msb_data *msb = memstick_get_drvdata(card);
   2020	unsigned long flags;
   2021
   2022	dbg("Stopping all msblock IO");
   2023
   2024	blk_mq_stop_hw_queues(msb->queue);
   2025	spin_lock_irqsave(&msb->q_lock, flags);
   2026	msb->io_queue_stopped = true;
   2027	spin_unlock_irqrestore(&msb->q_lock, flags);
   2028
   2029	del_timer_sync(&msb->cache_flush_timer);
   2030	flush_workqueue(msb->io_queue);
   2031
   2032	spin_lock_irqsave(&msb->q_lock, flags);
   2033	if (msb->req) {
   2034		blk_mq_requeue_request(msb->req, false);
   2035		msb->req = NULL;
   2036	}
   2037	spin_unlock_irqrestore(&msb->q_lock, flags);
   2038}
   2039
   2040static void msb_start(struct memstick_dev *card)
   2041{
   2042	struct msb_data *msb = memstick_get_drvdata(card);
   2043	unsigned long flags;
   2044
   2045	dbg("Resuming IO from msblock");
   2046
   2047	msb_invalidate_reg_window(msb);
   2048
   2049	spin_lock_irqsave(&msb->q_lock, flags);
   2050	if (!msb->io_queue_stopped || msb->card_dead) {
   2051		spin_unlock_irqrestore(&msb->q_lock, flags);
   2052		return;
   2053	}
   2054	spin_unlock_irqrestore(&msb->q_lock, flags);
   2055
   2056	/* Kick cache flush anyway, its harmless */
   2057	msb->need_flush_cache = true;
   2058	msb->io_queue_stopped = false;
   2059
   2060	blk_mq_start_hw_queues(msb->queue);
   2061
   2062	queue_work(msb->io_queue, &msb->io_work);
   2063
   2064}
   2065
   2066static const struct block_device_operations msb_bdops = {
   2067	.owner		= THIS_MODULE,
   2068	.getgeo		= msb_bd_getgeo,
   2069	.free_disk	= msb_bd_free_disk, 
   2070};
   2071
   2072static const struct blk_mq_ops msb_mq_ops = {
   2073	.queue_rq	= msb_queue_rq,
   2074};
   2075
   2076/* Registers the block device */
   2077static int msb_init_disk(struct memstick_dev *card)
   2078{
   2079	struct msb_data *msb = memstick_get_drvdata(card);
   2080	int rc;
   2081	unsigned long capacity;
   2082
   2083	mutex_lock(&msb_disk_lock);
   2084	msb->disk_id = idr_alloc(&msb_disk_idr, card, 0, 256, GFP_KERNEL);
   2085	mutex_unlock(&msb_disk_lock);
   2086
   2087	if (msb->disk_id  < 0)
   2088		return msb->disk_id;
   2089
   2090	rc = blk_mq_alloc_sq_tag_set(&msb->tag_set, &msb_mq_ops, 2,
   2091				     BLK_MQ_F_SHOULD_MERGE);
   2092	if (rc)
   2093		goto out_release_id;
   2094
   2095	msb->disk = blk_mq_alloc_disk(&msb->tag_set, card);
   2096	if (IS_ERR(msb->disk)) {
   2097		rc = PTR_ERR(msb->disk);
   2098		goto out_free_tag_set;
   2099	}
   2100	msb->queue = msb->disk->queue;
   2101
   2102	blk_queue_max_hw_sectors(msb->queue, MS_BLOCK_MAX_PAGES);
   2103	blk_queue_max_segments(msb->queue, MS_BLOCK_MAX_SEGS);
   2104	blk_queue_max_segment_size(msb->queue,
   2105				   MS_BLOCK_MAX_PAGES * msb->page_size);
   2106	blk_queue_logical_block_size(msb->queue, msb->page_size);
   2107
   2108	sprintf(msb->disk->disk_name, "msblk%d", msb->disk_id);
   2109	msb->disk->fops = &msb_bdops;
   2110	msb->disk->private_data = msb;
   2111
   2112	capacity = msb->pages_in_block * msb->logical_block_count;
   2113	capacity *= (msb->page_size / 512);
   2114	set_capacity(msb->disk, capacity);
   2115	dbg("Set total disk size to %lu sectors", capacity);
   2116
   2117	msb->io_queue = alloc_ordered_workqueue("ms_block", WQ_MEM_RECLAIM);
   2118	INIT_WORK(&msb->io_work, msb_io_work);
   2119	sg_init_table(msb->prealloc_sg, MS_BLOCK_MAX_SEGS+1);
   2120
   2121	if (msb->read_only)
   2122		set_disk_ro(msb->disk, 1);
   2123
   2124	msb_start(card);
   2125	rc = device_add_disk(&card->dev, msb->disk, NULL);
   2126	if (rc)
   2127		goto out_cleanup_disk;
   2128	dbg("Disk added");
   2129	return 0;
   2130
   2131out_cleanup_disk:
   2132	blk_cleanup_disk(msb->disk);
   2133out_free_tag_set:
   2134	blk_mq_free_tag_set(&msb->tag_set);
   2135out_release_id:
   2136	mutex_lock(&msb_disk_lock);
   2137	idr_remove(&msb_disk_idr, msb->disk_id);
   2138	mutex_unlock(&msb_disk_lock);
   2139	return rc;
   2140}
   2141
   2142static int msb_probe(struct memstick_dev *card)
   2143{
   2144	struct msb_data *msb;
   2145	int rc = 0;
   2146
   2147	msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
   2148	if (!msb)
   2149		return -ENOMEM;
   2150	memstick_set_drvdata(card, msb);
   2151	msb->card = card;
   2152	spin_lock_init(&msb->q_lock);
   2153
   2154	rc = msb_init_card(card);
   2155	if (rc)
   2156		goto out_free;
   2157
   2158	rc = msb_init_disk(card);
   2159	if (!rc) {
   2160		card->check = msb_check_card;
   2161		card->stop = msb_stop;
   2162		card->start = msb_start;
   2163		return 0;
   2164	}
   2165out_free:
   2166	memstick_set_drvdata(card, NULL);
   2167	msb_data_clear(msb);
   2168	kfree(msb);
   2169	return rc;
   2170}
   2171
   2172static void msb_remove(struct memstick_dev *card)
   2173{
   2174	struct msb_data *msb = memstick_get_drvdata(card);
   2175	unsigned long flags;
   2176
   2177	if (!msb->io_queue_stopped)
   2178		msb_stop(card);
   2179
   2180	dbg("Removing the disk device");
   2181
   2182	/* Take care of unhandled + new requests from now on */
   2183	spin_lock_irqsave(&msb->q_lock, flags);
   2184	msb->card_dead = true;
   2185	spin_unlock_irqrestore(&msb->q_lock, flags);
   2186	blk_mq_start_hw_queues(msb->queue);
   2187
   2188	/* Remove the disk */
   2189	del_gendisk(msb->disk);
   2190	blk_cleanup_queue(msb->queue);
   2191	blk_mq_free_tag_set(&msb->tag_set);
   2192	msb->queue = NULL;
   2193
   2194	mutex_lock(&msb_disk_lock);
   2195	msb_data_clear(msb);
   2196	mutex_unlock(&msb_disk_lock);
   2197
   2198	put_disk(msb->disk);
   2199	memstick_set_drvdata(card, NULL);
   2200}
   2201
   2202#ifdef CONFIG_PM
   2203
   2204static int msb_suspend(struct memstick_dev *card, pm_message_t state)
   2205{
   2206	msb_stop(card);
   2207	return 0;
   2208}
   2209
   2210static int msb_resume(struct memstick_dev *card)
   2211{
   2212	struct msb_data *msb = memstick_get_drvdata(card);
   2213	struct msb_data *new_msb = NULL;
   2214	bool card_dead = true;
   2215
   2216#ifndef CONFIG_MEMSTICK_UNSAFE_RESUME
   2217	msb->card_dead = true;
   2218	return 0;
   2219#endif
   2220	mutex_lock(&card->host->lock);
   2221
   2222	new_msb = kzalloc(sizeof(struct msb_data), GFP_KERNEL);
   2223	if (!new_msb)
   2224		goto out;
   2225
   2226	new_msb->card = card;
   2227	memstick_set_drvdata(card, new_msb);
   2228	spin_lock_init(&new_msb->q_lock);
   2229	sg_init_table(msb->prealloc_sg, MS_BLOCK_MAX_SEGS+1);
   2230
   2231	if (msb_init_card(card))
   2232		goto out;
   2233
   2234	if (msb->block_size != new_msb->block_size)
   2235		goto out;
   2236
   2237	if (memcmp(msb->boot_page, new_msb->boot_page,
   2238					sizeof(struct ms_boot_page)))
   2239		goto out;
   2240
   2241	if (msb->logical_block_count != new_msb->logical_block_count ||
   2242		memcmp(msb->lba_to_pba_table, new_msb->lba_to_pba_table,
   2243						msb->logical_block_count))
   2244		goto out;
   2245
   2246	if (msb->block_count != new_msb->block_count ||
   2247		memcmp(msb->used_blocks_bitmap, new_msb->used_blocks_bitmap,
   2248							msb->block_count / 8))
   2249		goto out;
   2250
   2251	card_dead = false;
   2252out:
   2253	if (card_dead)
   2254		dbg("Card was removed/replaced during suspend");
   2255
   2256	msb->card_dead = card_dead;
   2257	memstick_set_drvdata(card, msb);
   2258
   2259	if (new_msb) {
   2260		msb_data_clear(new_msb);
   2261		kfree(new_msb);
   2262	}
   2263
   2264	msb_start(card);
   2265	mutex_unlock(&card->host->lock);
   2266	return 0;
   2267}
   2268#else
   2269
   2270#define msb_suspend NULL
   2271#define msb_resume NULL
   2272
   2273#endif /* CONFIG_PM */
   2274
   2275static struct memstick_device_id msb_id_tbl[] = {
   2276	{MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
   2277	 MEMSTICK_CLASS_FLASH},
   2278
   2279	{MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
   2280	 MEMSTICK_CLASS_ROM},
   2281
   2282	{MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
   2283	 MEMSTICK_CLASS_RO},
   2284
   2285	{MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_LEGACY, MEMSTICK_CATEGORY_STORAGE,
   2286	 MEMSTICK_CLASS_WP},
   2287
   2288	{MEMSTICK_MATCH_ALL, MEMSTICK_TYPE_DUO, MEMSTICK_CATEGORY_STORAGE_DUO,
   2289	 MEMSTICK_CLASS_DUO},
   2290	{}
   2291};
   2292MODULE_DEVICE_TABLE(memstick, msb_id_tbl);
   2293
   2294
   2295static struct memstick_driver msb_driver = {
   2296	.driver = {
   2297		.name  = DRIVER_NAME,
   2298		.owner = THIS_MODULE
   2299	},
   2300	.id_table = msb_id_tbl,
   2301	.probe    = msb_probe,
   2302	.remove   = msb_remove,
   2303	.suspend  = msb_suspend,
   2304	.resume   = msb_resume
   2305};
   2306
   2307static int __init msb_init(void)
   2308{
   2309	int rc = memstick_register_driver(&msb_driver);
   2310
   2311	if (rc)
   2312		pr_err("failed to register memstick driver (error %d)\n", rc);
   2313
   2314	return rc;
   2315}
   2316
   2317static void __exit msb_exit(void)
   2318{
   2319	memstick_unregister_driver(&msb_driver);
   2320	idr_destroy(&msb_disk_idr);
   2321}
   2322
   2323module_init(msb_init);
   2324module_exit(msb_exit);
   2325
   2326module_param(cache_flush_timeout, int, S_IRUGO);
   2327MODULE_PARM_DESC(cache_flush_timeout,
   2328				"Cache flush timeout in msec (1000 default)");
   2329module_param(debug, int, S_IRUGO | S_IWUSR);
   2330MODULE_PARM_DESC(debug, "Debug level (0-2)");
   2331
   2332module_param(verify_writes, bool, S_IRUGO);
   2333MODULE_PARM_DESC(verify_writes, "Read back and check all data that is written");
   2334
   2335MODULE_LICENSE("GPL");
   2336MODULE_AUTHOR("Maxim Levitsky");
   2337MODULE_DESCRIPTION("Sony MemoryStick block device driver");