1 /* 2 * Sony MemoryStick support 3 * 4 * Copyright (C) 2007 Alex Dubov <oakad@yahoo.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * Special thanks to Carlos Corbacho for providing various MemoryStick cards 11 * that made this driver possible. 12 * 13 */ 14 15 #include <linux/memstick.h> 16 #include <linux/idr.h> 17 #include <linux/fs.h> 18 #include <linux/delay.h> 19 20 #define DRIVER_NAME "memstick" 21 22 static unsigned int cmd_retries = 3; 23 module_param(cmd_retries, uint, 0644); 24 25 static struct workqueue_struct *workqueue; 26 static DEFINE_IDR(memstick_host_idr); 27 static DEFINE_SPINLOCK(memstick_host_lock); 28 29 static int memstick_dev_match(struct memstick_dev *card, 30 struct memstick_device_id *id) 31 { 32 if (id->match_flags & MEMSTICK_MATCH_ALL) { 33 if ((id->type == card->id.type) 34 && (id->category == card->id.category) 35 && (id->class == card->id.class)) 36 return 1; 37 } 38 39 return 0; 40 } 41 42 static int memstick_bus_match(struct device *dev, struct device_driver *drv) 43 { 44 struct memstick_dev *card = container_of(dev, struct memstick_dev, 45 dev); 46 struct memstick_driver *ms_drv = container_of(drv, 47 struct memstick_driver, 48 driver); 49 struct memstick_device_id *ids = ms_drv->id_table; 50 51 if (ids) { 52 while (ids->match_flags) { 53 if (memstick_dev_match(card, ids)) 54 return 1; 55 ++ids; 56 } 57 } 58 return 0; 59 } 60 61 static int memstick_uevent(struct device *dev, struct kobj_uevent_env *env) 62 { 63 struct memstick_dev *card = container_of(dev, struct memstick_dev, 64 dev); 65 66 if (add_uevent_var(env, "MEMSTICK_TYPE=%02X", card->id.type)) 67 return -ENOMEM; 68 69 if (add_uevent_var(env, "MEMSTICK_CATEGORY=%02X", card->id.category)) 70 return -ENOMEM; 71 72 if (add_uevent_var(env, "MEMSTICK_CLASS=%02X", card->id.class)) 73 return -ENOMEM; 74 75 return 0; 76 } 77 78 static int memstick_device_probe(struct device *dev) 79 { 80 struct memstick_dev *card = container_of(dev, struct memstick_dev, 81 dev); 82 struct memstick_driver *drv = container_of(dev->driver, 83 struct memstick_driver, 84 driver); 85 int rc = -ENODEV; 86 87 if (dev->driver && drv->probe) { 88 rc = drv->probe(card); 89 if (!rc) 90 get_device(dev); 91 } 92 return rc; 93 } 94 95 static int memstick_device_remove(struct device *dev) 96 { 97 struct memstick_dev *card = container_of(dev, struct memstick_dev, 98 dev); 99 struct memstick_driver *drv = container_of(dev->driver, 100 struct memstick_driver, 101 driver); 102 103 if (dev->driver && drv->remove) { 104 drv->remove(card); 105 card->dev.driver = NULL; 106 } 107 108 put_device(dev); 109 return 0; 110 } 111 112 #ifdef CONFIG_PM 113 114 static int memstick_device_suspend(struct device *dev, pm_message_t state) 115 { 116 struct memstick_dev *card = container_of(dev, struct memstick_dev, 117 dev); 118 struct memstick_driver *drv = container_of(dev->driver, 119 struct memstick_driver, 120 driver); 121 122 if (dev->driver && drv->suspend) 123 return drv->suspend(card, state); 124 return 0; 125 } 126 127 static int memstick_device_resume(struct device *dev) 128 { 129 struct memstick_dev *card = container_of(dev, struct memstick_dev, 130 dev); 131 struct memstick_driver *drv = container_of(dev->driver, 132 struct memstick_driver, 133 driver); 134 135 if (dev->driver && drv->resume) 136 return drv->resume(card); 137 return 0; 138 } 139 140 #else 141 142 #define memstick_device_suspend NULL 143 #define memstick_device_resume NULL 144 145 #endif /* CONFIG_PM */ 146 147 #define MEMSTICK_ATTR(name, format) \ 148 static ssize_t name##_show(struct device *dev, struct device_attribute *attr, \ 149 char *buf) \ 150 { \ 151 struct memstick_dev *card = container_of(dev, struct memstick_dev, \ 152 dev); \ 153 return sprintf(buf, format, card->id.name); \ 154 } 155 156 MEMSTICK_ATTR(type, "%02X"); 157 MEMSTICK_ATTR(category, "%02X"); 158 MEMSTICK_ATTR(class, "%02X"); 159 160 #define MEMSTICK_ATTR_RO(name) __ATTR(name, S_IRUGO, name##_show, NULL) 161 162 static struct device_attribute memstick_dev_attrs[] = { 163 MEMSTICK_ATTR_RO(type), 164 MEMSTICK_ATTR_RO(category), 165 MEMSTICK_ATTR_RO(class), 166 __ATTR_NULL 167 }; 168 169 static struct bus_type memstick_bus_type = { 170 .name = "memstick", 171 .dev_attrs = memstick_dev_attrs, 172 .match = memstick_bus_match, 173 .uevent = memstick_uevent, 174 .probe = memstick_device_probe, 175 .remove = memstick_device_remove, 176 .suspend = memstick_device_suspend, 177 .resume = memstick_device_resume 178 }; 179 180 static void memstick_free(struct class_device *cdev) 181 { 182 struct memstick_host *host = container_of(cdev, struct memstick_host, 183 cdev); 184 kfree(host); 185 } 186 187 static struct class memstick_host_class = { 188 .name = "memstick_host", 189 .release = memstick_free 190 }; 191 192 static void memstick_free_card(struct device *dev) 193 { 194 struct memstick_dev *card = container_of(dev, struct memstick_dev, 195 dev); 196 kfree(card); 197 } 198 199 static int memstick_dummy_check(struct memstick_dev *card) 200 { 201 return 0; 202 } 203 204 /** 205 * memstick_detect_change - schedule media detection on memstick host 206 * @host - host to use 207 */ 208 void memstick_detect_change(struct memstick_host *host) 209 { 210 queue_work(workqueue, &host->media_checker); 211 } 212 EXPORT_SYMBOL(memstick_detect_change); 213 214 /** 215 * memstick_next_req - called by host driver to obtain next request to process 216 * @host - host to use 217 * @mrq - pointer to stick the request to 218 * 219 * Host calls this function from idle state (*mrq == NULL) or after finishing 220 * previous request (*mrq should point to it). If previous request was 221 * unsuccessful, it is retried for predetermined number of times. Return value 222 * of 0 means that new request was assigned to the host. 223 */ 224 int memstick_next_req(struct memstick_host *host, struct memstick_request **mrq) 225 { 226 int rc = -ENXIO; 227 228 if ((*mrq) && (*mrq)->error && host->retries) { 229 (*mrq)->error = rc; 230 host->retries--; 231 return 0; 232 } 233 234 if (host->card && host->card->next_request) 235 rc = host->card->next_request(host->card, mrq); 236 237 if (!rc) 238 host->retries = cmd_retries > 1 ? cmd_retries - 1 : 1; 239 else 240 *mrq = NULL; 241 242 return rc; 243 } 244 EXPORT_SYMBOL(memstick_next_req); 245 246 /** 247 * memstick_new_req - notify the host that some requests are pending 248 * @host - host to use 249 */ 250 void memstick_new_req(struct memstick_host *host) 251 { 252 host->retries = cmd_retries; 253 host->request(host); 254 } 255 EXPORT_SYMBOL(memstick_new_req); 256 257 /** 258 * memstick_init_req_sg - set request fields needed for bulk data transfer 259 * @mrq - request to use 260 * @tpc - memstick Transport Protocol Command 261 * @sg - TPC argument 262 */ 263 void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc, 264 struct scatterlist *sg) 265 { 266 mrq->tpc = tpc; 267 if (tpc & 8) 268 mrq->data_dir = WRITE; 269 else 270 mrq->data_dir = READ; 271 272 mrq->sg = *sg; 273 mrq->long_data = 1; 274 275 if (tpc == MS_TPC_SET_CMD || tpc == MS_TPC_EX_SET_CMD) 276 mrq->need_card_int = 1; 277 else 278 mrq->need_card_int = 0; 279 } 280 EXPORT_SYMBOL(memstick_init_req_sg); 281 282 /** 283 * memstick_init_req - set request fields needed for short data transfer 284 * @mrq - request to use 285 * @tpc - memstick Transport Protocol Command 286 * @buf - TPC argument buffer 287 * @length - TPC argument size 288 * 289 * The intended use of this function (transfer of data items several bytes 290 * in size) allows us to just copy the value between request structure and 291 * user supplied buffer. 292 */ 293 void memstick_init_req(struct memstick_request *mrq, unsigned char tpc, 294 void *buf, size_t length) 295 { 296 mrq->tpc = tpc; 297 if (tpc & 8) 298 mrq->data_dir = WRITE; 299 else 300 mrq->data_dir = READ; 301 302 mrq->data_len = length > sizeof(mrq->data) ? sizeof(mrq->data) : length; 303 if (mrq->data_dir == WRITE) 304 memcpy(mrq->data, buf, mrq->data_len); 305 306 mrq->long_data = 0; 307 308 if (tpc == MS_TPC_SET_CMD || tpc == MS_TPC_EX_SET_CMD) 309 mrq->need_card_int = 1; 310 else 311 mrq->need_card_int = 0; 312 } 313 EXPORT_SYMBOL(memstick_init_req); 314 315 /* 316 * Functions prefixed with "h_" are protocol callbacks. They can be called from 317 * interrupt context. Return value of 0 means that request processing is still 318 * ongoing, while special error value of -EAGAIN means that current request is 319 * finished (and request processor should come back some time later). 320 */ 321 322 static int h_memstick_read_dev_id(struct memstick_dev *card, 323 struct memstick_request **mrq) 324 { 325 struct ms_id_register id_reg; 326 327 if (!(*mrq)) { 328 memstick_init_req(&card->current_mrq, MS_TPC_READ_REG, NULL, 329 sizeof(struct ms_id_register)); 330 *mrq = &card->current_mrq; 331 return 0; 332 } else { 333 if (!(*mrq)->error) { 334 memcpy(&id_reg, (*mrq)->data, sizeof(id_reg)); 335 card->id.match_flags = MEMSTICK_MATCH_ALL; 336 card->id.type = id_reg.type; 337 card->id.category = id_reg.category; 338 card->id.class = id_reg.class; 339 } 340 complete(&card->mrq_complete); 341 dev_dbg(&card->dev, "if_mode = %02x\n", id_reg.if_mode); 342 return -EAGAIN; 343 } 344 } 345 346 static int h_memstick_set_rw_addr(struct memstick_dev *card, 347 struct memstick_request **mrq) 348 { 349 if (!(*mrq)) { 350 memstick_init_req(&card->current_mrq, MS_TPC_SET_RW_REG_ADRS, 351 (char *)&card->reg_addr, 352 sizeof(card->reg_addr)); 353 *mrq = &card->current_mrq; 354 return 0; 355 } else { 356 complete(&card->mrq_complete); 357 return -EAGAIN; 358 } 359 } 360 361 /** 362 * memstick_set_rw_addr - issue SET_RW_REG_ADDR request and wait for it to 363 * complete 364 * @card - media device to use 365 */ 366 int memstick_set_rw_addr(struct memstick_dev *card) 367 { 368 card->next_request = h_memstick_set_rw_addr; 369 memstick_new_req(card->host); 370 wait_for_completion(&card->mrq_complete); 371 372 return card->current_mrq.error; 373 } 374 EXPORT_SYMBOL(memstick_set_rw_addr); 375 376 static struct memstick_dev *memstick_alloc_card(struct memstick_host *host) 377 { 378 struct memstick_dev *card = kzalloc(sizeof(struct memstick_dev), 379 GFP_KERNEL); 380 struct memstick_dev *old_card = host->card; 381 struct ms_id_register id_reg; 382 383 if (card) { 384 card->host = host; 385 snprintf(card->dev.bus_id, sizeof(card->dev.bus_id), 386 "%s", host->cdev.class_id); 387 card->dev.parent = host->cdev.dev; 388 card->dev.bus = &memstick_bus_type; 389 card->dev.release = memstick_free_card; 390 card->check = memstick_dummy_check; 391 392 card->reg_addr.r_offset = offsetof(struct ms_register, id); 393 card->reg_addr.r_length = sizeof(id_reg); 394 card->reg_addr.w_offset = offsetof(struct ms_register, id); 395 card->reg_addr.w_length = sizeof(id_reg); 396 397 init_completion(&card->mrq_complete); 398 399 host->card = card; 400 if (memstick_set_rw_addr(card)) 401 goto err_out; 402 403 card->next_request = h_memstick_read_dev_id; 404 memstick_new_req(host); 405 wait_for_completion(&card->mrq_complete); 406 407 if (card->current_mrq.error) 408 goto err_out; 409 } 410 host->card = old_card; 411 return card; 412 err_out: 413 host->card = old_card; 414 kfree(card); 415 return NULL; 416 } 417 418 static void memstick_power_on(struct memstick_host *host) 419 { 420 host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_ON); 421 host->set_param(host, MEMSTICK_INTERFACE, MEMSTICK_SERIAL); 422 } 423 424 static void memstick_check(struct work_struct *work) 425 { 426 struct memstick_host *host = container_of(work, struct memstick_host, 427 media_checker); 428 struct memstick_dev *card; 429 430 dev_dbg(host->cdev.dev, "memstick_check started\n"); 431 mutex_lock(&host->lock); 432 if (!host->card) 433 memstick_power_on(host); 434 435 card = memstick_alloc_card(host); 436 437 if (!card) { 438 if (host->card) { 439 device_unregister(&host->card->dev); 440 host->card = NULL; 441 } 442 } else { 443 dev_dbg(host->cdev.dev, "new card %02x, %02x, %02x\n", 444 card->id.type, card->id.category, card->id.class); 445 if (host->card) { 446 if (memstick_set_rw_addr(host->card) 447 || !memstick_dev_match(host->card, &card->id) 448 || !(host->card->check(host->card))) { 449 device_unregister(&host->card->dev); 450 host->card = NULL; 451 } 452 } 453 454 if (!host->card) { 455 host->card = card; 456 if (device_register(&card->dev)) { 457 kfree(host->card); 458 host->card = NULL; 459 } 460 } else 461 kfree(card); 462 } 463 464 if (!host->card) 465 host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); 466 467 mutex_unlock(&host->lock); 468 dev_dbg(host->cdev.dev, "memstick_check finished\n"); 469 } 470 471 /** 472 * memstick_alloc_host - allocate a memstick_host structure 473 * @extra: size of the user private data to allocate 474 * @dev: parent device of the host 475 */ 476 struct memstick_host *memstick_alloc_host(unsigned int extra, 477 struct device *dev) 478 { 479 struct memstick_host *host; 480 481 host = kzalloc(sizeof(struct memstick_host) + extra, GFP_KERNEL); 482 if (host) { 483 mutex_init(&host->lock); 484 INIT_WORK(&host->media_checker, memstick_check); 485 host->cdev.class = &memstick_host_class; 486 host->cdev.dev = dev; 487 class_device_initialize(&host->cdev); 488 } 489 return host; 490 } 491 EXPORT_SYMBOL(memstick_alloc_host); 492 493 /** 494 * memstick_add_host - start request processing on memstick host 495 * @host - host to use 496 */ 497 int memstick_add_host(struct memstick_host *host) 498 { 499 int rc; 500 501 if (!idr_pre_get(&memstick_host_idr, GFP_KERNEL)) 502 return -ENOMEM; 503 504 spin_lock(&memstick_host_lock); 505 rc = idr_get_new(&memstick_host_idr, host, &host->id); 506 spin_unlock(&memstick_host_lock); 507 if (rc) 508 return rc; 509 510 snprintf(host->cdev.class_id, BUS_ID_SIZE, 511 "memstick%u", host->id); 512 513 rc = class_device_add(&host->cdev); 514 if (rc) { 515 spin_lock(&memstick_host_lock); 516 idr_remove(&memstick_host_idr, host->id); 517 spin_unlock(&memstick_host_lock); 518 return rc; 519 } 520 521 host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); 522 memstick_detect_change(host); 523 return 0; 524 } 525 EXPORT_SYMBOL(memstick_add_host); 526 527 /** 528 * memstick_remove_host - stop request processing on memstick host 529 * @host - host to use 530 */ 531 void memstick_remove_host(struct memstick_host *host) 532 { 533 flush_workqueue(workqueue); 534 mutex_lock(&host->lock); 535 if (host->card) 536 device_unregister(&host->card->dev); 537 host->card = NULL; 538 host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); 539 mutex_unlock(&host->lock); 540 541 spin_lock(&memstick_host_lock); 542 idr_remove(&memstick_host_idr, host->id); 543 spin_unlock(&memstick_host_lock); 544 class_device_del(&host->cdev); 545 } 546 EXPORT_SYMBOL(memstick_remove_host); 547 548 /** 549 * memstick_free_host - free memstick host 550 * @host - host to use 551 */ 552 void memstick_free_host(struct memstick_host *host) 553 { 554 mutex_destroy(&host->lock); 555 class_device_put(&host->cdev); 556 } 557 EXPORT_SYMBOL(memstick_free_host); 558 559 /** 560 * memstick_suspend_host - notify bus driver of host suspension 561 * @host - host to use 562 */ 563 void memstick_suspend_host(struct memstick_host *host) 564 { 565 mutex_lock(&host->lock); 566 host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); 567 mutex_unlock(&host->lock); 568 } 569 EXPORT_SYMBOL(memstick_suspend_host); 570 571 /** 572 * memstick_resume_host - notify bus driver of host resumption 573 * @host - host to use 574 */ 575 void memstick_resume_host(struct memstick_host *host) 576 { 577 mutex_lock(&host->lock); 578 if (host->card) 579 memstick_power_on(host); 580 mutex_unlock(&host->lock); 581 memstick_detect_change(host); 582 } 583 EXPORT_SYMBOL(memstick_resume_host); 584 585 int memstick_register_driver(struct memstick_driver *drv) 586 { 587 drv->driver.bus = &memstick_bus_type; 588 589 return driver_register(&drv->driver); 590 } 591 EXPORT_SYMBOL(memstick_register_driver); 592 593 void memstick_unregister_driver(struct memstick_driver *drv) 594 { 595 driver_unregister(&drv->driver); 596 } 597 EXPORT_SYMBOL(memstick_unregister_driver); 598 599 600 static int __init memstick_init(void) 601 { 602 int rc; 603 604 workqueue = create_freezeable_workqueue("kmemstick"); 605 if (!workqueue) 606 return -ENOMEM; 607 608 rc = bus_register(&memstick_bus_type); 609 if (!rc) 610 rc = class_register(&memstick_host_class); 611 612 if (!rc) 613 return 0; 614 615 bus_unregister(&memstick_bus_type); 616 destroy_workqueue(workqueue); 617 618 return rc; 619 } 620 621 static void __exit memstick_exit(void) 622 { 623 class_unregister(&memstick_host_class); 624 bus_unregister(&memstick_bus_type); 625 destroy_workqueue(workqueue); 626 idr_destroy(&memstick_host_idr); 627 } 628 629 module_init(memstick_init); 630 module_exit(memstick_exit); 631 632 MODULE_AUTHOR("Alex Dubov"); 633 MODULE_LICENSE("GPL"); 634 MODULE_DESCRIPTION("Sony MemoryStick core driver"); 635