1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * ms_block.h - Sony MemoryStick (legacy) storage support 4 5 * Copyright (C) 2013 Maxim Levitsky <maximlevitsky@gmail.com> 6 * 7 * Minor portions of the driver are copied from mspro_block.c which is 8 * Copyright (C) 2007 Alex Dubov <oakad@yahoo.com> 9 * 10 * Also ms structures were copied from old broken driver by same author 11 * These probably come from MS spec 12 */ 13 14 #ifndef MS_BLOCK_NEW_H 15 #define MS_BLOCK_NEW_H 16 17 #define MS_BLOCK_MAX_SEGS 32 18 #define MS_BLOCK_MAX_PAGES ((2 << 16) - 1) 19 20 #define MS_BLOCK_MAX_BOOT_ADDR 0x000c 21 #define MS_BLOCK_BOOT_ID 0x0001 22 #define MS_BLOCK_INVALID 0xffff 23 #define MS_MAX_ZONES 16 24 #define MS_BLOCKS_IN_ZONE 512 25 26 #define MS_BLOCK_MAP_LINE_SZ 16 27 #define MS_BLOCK_PART_SHIFT 3 28 29 30 #define MEMSTICK_UNCORR_ERROR (MEMSTICK_STATUS1_UCFG | \ 31 MEMSTICK_STATUS1_UCEX | MEMSTICK_STATUS1_UCDT) 32 33 #define MEMSTICK_CORR_ERROR (MEMSTICK_STATUS1_FGER | MEMSTICK_STATUS1_EXER | \ 34 MEMSTICK_STATUS1_DTER) 35 36 #define MEMSTICK_INT_ERROR (MEMSTICK_INT_CMDNAK | MEMSTICK_INT_ERR) 37 38 #define MEMSTICK_OVERWRITE_FLAG_NORMAL \ 39 (MEMSTICK_OVERWRITE_PGST1 | \ 40 MEMSTICK_OVERWRITE_PGST0 | \ 41 MEMSTICK_OVERWRITE_BKST) 42 43 #define MEMSTICK_OV_PG_NORMAL \ 44 (MEMSTICK_OVERWRITE_PGST1 | MEMSTICK_OVERWRITE_PGST0) 45 46 #define MEMSTICK_MANAGEMENT_FLAG_NORMAL \ 47 (MEMSTICK_MANAGEMENT_SYSFLG | \ 48 MEMSTICK_MANAGEMENT_SCMS1 | \ 49 MEMSTICK_MANAGEMENT_SCMS0) \ 50 51 struct ms_boot_header { 52 unsigned short block_id; 53 unsigned short format_reserved; 54 unsigned char reserved0[184]; 55 unsigned char data_entry; 56 unsigned char reserved1[179]; 57 } __packed; 58 59 60 struct ms_system_item { 61 unsigned int start_addr; 62 unsigned int data_size; 63 unsigned char data_type_id; 64 unsigned char reserved[3]; 65 } __packed; 66 67 struct ms_system_entry { 68 struct ms_system_item disabled_block; 69 struct ms_system_item cis_idi; 70 unsigned char reserved[24]; 71 } __packed; 72 73 struct ms_boot_attr_info { 74 unsigned char memorystick_class; 75 unsigned char format_unique_value1; 76 unsigned short block_size; 77 unsigned short number_of_blocks; 78 unsigned short number_of_effective_blocks; 79 unsigned short page_size; 80 unsigned char extra_data_size; 81 unsigned char format_unique_value2; 82 unsigned char assembly_time[8]; 83 unsigned char format_unique_value3; 84 unsigned char serial_number[3]; 85 unsigned char assembly_manufacturer_code; 86 unsigned char assembly_model_code[3]; 87 unsigned short memory_manufacturer_code; 88 unsigned short memory_device_code; 89 unsigned short implemented_capacity; 90 unsigned char format_unique_value4[2]; 91 unsigned char vcc; 92 unsigned char vpp; 93 unsigned short controller_number; 94 unsigned short controller_function; 95 unsigned char reserved0[9]; 96 unsigned char transfer_supporting; 97 unsigned short format_unique_value5; 98 unsigned char format_type; 99 unsigned char memorystick_application; 100 unsigned char device_type; 101 unsigned char reserved1[22]; 102 unsigned char format_uniqure_value6[2]; 103 unsigned char reserved2[15]; 104 } __packed; 105 106 struct ms_cis_idi { 107 unsigned short general_config; 108 unsigned short logical_cylinders; 109 unsigned short reserved0; 110 unsigned short logical_heads; 111 unsigned short track_size; 112 unsigned short page_size; 113 unsigned short pages_per_track; 114 unsigned short msw; 115 unsigned short lsw; 116 unsigned short reserved1; 117 unsigned char serial_number[20]; 118 unsigned short buffer_type; 119 unsigned short buffer_size_increments; 120 unsigned short long_command_ecc; 121 unsigned char firmware_version[28]; 122 unsigned char model_name[18]; 123 unsigned short reserved2[5]; 124 unsigned short pio_mode_number; 125 unsigned short dma_mode_number; 126 unsigned short field_validity; 127 unsigned short current_logical_cylinders; 128 unsigned short current_logical_heads; 129 unsigned short current_pages_per_track; 130 unsigned int current_page_capacity; 131 unsigned short mutiple_page_setting; 132 unsigned int addressable_pages; 133 unsigned short single_word_dma; 134 unsigned short multi_word_dma; 135 unsigned char reserved3[128]; 136 } __packed; 137 138 139 struct ms_boot_page { 140 struct ms_boot_header header; 141 struct ms_system_entry entry; 142 struct ms_boot_attr_info attr; 143 } __packed; 144 145 struct msb_data { 146 unsigned int usage_count; 147 struct memstick_dev *card; 148 struct gendisk *disk; 149 struct request_queue *queue; 150 spinlock_t q_lock; 151 struct blk_mq_tag_set tag_set; 152 struct hd_geometry geometry; 153 struct attribute_group attr_group; 154 struct request *req; 155 int caps; 156 int disk_id; 157 158 /* IO */ 159 struct workqueue_struct *io_queue; 160 bool io_queue_stopped; 161 struct work_struct io_work; 162 bool card_dead; 163 164 /* Media properties */ 165 struct ms_boot_page *boot_page; 166 u16 boot_block_locations[2]; 167 int boot_block_count; 168 169 bool read_only; 170 unsigned short page_size; 171 int block_size; 172 int pages_in_block; 173 int zone_count; 174 int block_count; 175 int logical_block_count; 176 177 /* FTL tables */ 178 unsigned long *used_blocks_bitmap; 179 unsigned long *erased_blocks_bitmap; 180 u16 *lba_to_pba_table; 181 int free_block_count[MS_MAX_ZONES]; 182 bool ftl_initialized; 183 184 /* Cache */ 185 unsigned char *cache; 186 unsigned long valid_cache_bitmap; 187 int cache_block_lba; 188 bool need_flush_cache; 189 struct timer_list cache_flush_timer; 190 191 /* Preallocated buffers */ 192 unsigned char *block_buffer; 193 struct scatterlist prealloc_sg[MS_BLOCK_MAX_SEGS+1]; 194 195 196 /* handler's local data */ 197 struct ms_register_addr reg_addr; 198 bool addr_valid; 199 200 u8 command_value; 201 bool command_need_oob; 202 struct scatterlist *current_sg; 203 int current_sg_offset; 204 205 struct ms_register regs; 206 int current_page; 207 208 int state; 209 int exit_error; 210 bool int_polling; 211 unsigned long int_timeout; 212 213 }; 214 215 enum msb_readpage_states { 216 MSB_RP_SEND_BLOCK_ADDRESS = 0, 217 MSB_RP_SEND_READ_COMMAND, 218 219 MSB_RP_SEND_INT_REQ, 220 MSB_RP_RECEIVE_INT_REQ_RESULT, 221 222 MSB_RP_SEND_READ_STATUS_REG, 223 MSB_RP_RECEIVE_STATUS_REG, 224 225 MSB_RP_SEND_OOB_READ, 226 MSB_RP_RECEIVE_OOB_READ, 227 228 MSB_RP_SEND_READ_DATA, 229 MSB_RP_RECEIVE_READ_DATA, 230 }; 231 232 enum msb_write_block_states { 233 MSB_WB_SEND_WRITE_PARAMS = 0, 234 MSB_WB_SEND_WRITE_OOB, 235 MSB_WB_SEND_WRITE_COMMAND, 236 237 MSB_WB_SEND_INT_REQ, 238 MSB_WB_RECEIVE_INT_REQ, 239 240 MSB_WB_SEND_WRITE_DATA, 241 MSB_WB_RECEIVE_WRITE_CONFIRMATION, 242 }; 243 244 enum msb_send_command_states { 245 MSB_SC_SEND_WRITE_PARAMS, 246 MSB_SC_SEND_WRITE_OOB, 247 MSB_SC_SEND_COMMAND, 248 249 MSB_SC_SEND_INT_REQ, 250 MSB_SC_RECEIVE_INT_REQ, 251 252 }; 253 254 enum msb_reset_states { 255 MSB_RS_SEND, 256 MSB_RS_CONFIRM, 257 }; 258 259 enum msb_par_switch_states { 260 MSB_PS_SEND_SWITCH_COMMAND, 261 MSB_PS_SWICH_HOST, 262 MSB_PS_CONFIRM, 263 }; 264 265 struct chs_entry { 266 unsigned long size; 267 unsigned char sec; 268 unsigned short cyl; 269 unsigned char head; 270 }; 271 272 static int msb_reset(struct msb_data *msb, bool full); 273 274 static int h_msb_default_bad(struct memstick_dev *card, 275 struct memstick_request **mrq); 276 277 #define __dbg(level, format, ...) \ 278 do { \ 279 if (debug >= level) \ 280 pr_err(format "\n", ## __VA_ARGS__); \ 281 } while (0) 282 283 284 #define dbg(format, ...) __dbg(1, format, ## __VA_ARGS__) 285 #define dbg_verbose(format, ...) __dbg(2, format, ## __VA_ARGS__) 286 287 #endif 288