aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Perches <joe@perches.com>2014-05-04 20:05:12 -0400
committerJens Axboe <axboe@fb.com>2014-05-05 16:58:06 -0400
commit40569c6144242087c9663c5d0c93138882dd52e8 (patch)
treea8f10d3d206e549add93ac77b2c315e76c73f228
parenta803393bf8b2b0dd69d9aa87471e7afee91fbdc0 (diff)
cdrom: Remove unnecessary prototype for cdrom_mrw_exit
Move the function to appropriate locations instead. Signed-off-by: Joe Perches <joe@perches.com> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/cdrom/cdrom.c238
1 files changed, 121 insertions, 117 deletions
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index f614847aad8f..c8ca3426c5b0 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -338,8 +338,6 @@ do { \
338 338
339/* Not-exported routines. */ 339/* Not-exported routines. */
340 340
341static int cdrom_mrw_exit(struct cdrom_device_info *cdi);
342
343static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di); 341static int cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di);
344 342
345static void cdrom_sysctl_register(void); 343static void cdrom_sysctl_register(void);
@@ -359,113 +357,29 @@ static int cdrom_dummy_generic_packet(struct cdrom_device_info *cdi,
359 return -EIO; 357 return -EIO;
360} 358}
361 359
362/* This macro makes sure we don't have to check on cdrom_device_ops 360static int cdrom_flush_cache(struct cdrom_device_info *cdi)
363 * existence in the run-time routines below. Change_capability is a
364 * hack to have the capability flags defined const, while we can still
365 * change it here without gcc complaining at every line.
366 */
367#define ENSURE(call, bits) if (cdo->call == NULL) *change_capability &= ~(bits)
368
369int register_cdrom(struct cdrom_device_info *cdi)
370{
371 static char banner_printed;
372 struct cdrom_device_ops *cdo = cdi->ops;
373 int *change_capability = (int *)&cdo->capability; /* hack */
374
375 cd_dbg(CD_OPEN, "entering register_cdrom\n");
376
377 if (cdo->open == NULL || cdo->release == NULL)
378 return -EINVAL;
379 if (!banner_printed) {
380 pr_info("Uniform CD-ROM driver " REVISION "\n");
381 banner_printed = 1;
382 cdrom_sysctl_register();
383 }
384
385 ENSURE(drive_status, CDC_DRIVE_STATUS );
386 if (cdo->check_events == NULL && cdo->media_changed == NULL)
387 *change_capability = ~(CDC_MEDIA_CHANGED | CDC_SELECT_DISC);
388 ENSURE(tray_move, CDC_CLOSE_TRAY | CDC_OPEN_TRAY);
389 ENSURE(lock_door, CDC_LOCK);
390 ENSURE(select_speed, CDC_SELECT_SPEED);
391 ENSURE(get_last_session, CDC_MULTI_SESSION);
392 ENSURE(get_mcn, CDC_MCN);
393 ENSURE(reset, CDC_RESET);
394 ENSURE(generic_packet, CDC_GENERIC_PACKET);
395 cdi->mc_flags = 0;
396 cdo->n_minors = 0;
397 cdi->options = CDO_USE_FFLAGS;
398
399 if (autoclose==1 && CDROM_CAN(CDC_CLOSE_TRAY))
400 cdi->options |= (int) CDO_AUTO_CLOSE;
401 if (autoeject==1 && CDROM_CAN(CDC_OPEN_TRAY))
402 cdi->options |= (int) CDO_AUTO_EJECT;
403 if (lockdoor==1)
404 cdi->options |= (int) CDO_LOCK;
405 if (check_media_type==1)
406 cdi->options |= (int) CDO_CHECK_TYPE;
407
408 if (CDROM_CAN(CDC_MRW_W))
409 cdi->exit = cdrom_mrw_exit;
410
411 if (cdi->disk)
412 cdi->cdda_method = CDDA_BPC_FULL;
413 else
414 cdi->cdda_method = CDDA_OLD;
415
416 if (!cdo->generic_packet)
417 cdo->generic_packet = cdrom_dummy_generic_packet;
418
419 cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
420 mutex_lock(&cdrom_mutex);
421 list_add(&cdi->list, &cdrom_list);
422 mutex_unlock(&cdrom_mutex);
423 return 0;
424}
425#undef ENSURE
426
427void unregister_cdrom(struct cdrom_device_info *cdi)
428{
429 cd_dbg(CD_OPEN, "entering unregister_cdrom\n");
430
431 mutex_lock(&cdrom_mutex);
432 list_del(&cdi->list);
433 mutex_unlock(&cdrom_mutex);
434
435 if (cdi->exit)
436 cdi->exit(cdi);
437
438 cdi->ops->n_minors--;
439 cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name);
440}
441
442int cdrom_get_media_event(struct cdrom_device_info *cdi,
443 struct media_event_desc *med)
444{ 361{
445 struct packet_command cgc; 362 struct packet_command cgc;
446 unsigned char buffer[8];
447 struct event_header *eh = (struct event_header *) buffer;
448
449 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ);
450 cgc.cmd[0] = GPCMD_GET_EVENT_STATUS_NOTIFICATION;
451 cgc.cmd[1] = 1; /* IMMED */
452 cgc.cmd[4] = 1 << 4; /* media event */
453 cgc.cmd[8] = sizeof(buffer);
454 cgc.quiet = 1;
455
456 if (cdi->ops->generic_packet(cdi, &cgc))
457 return 1;
458 363
459 if (be16_to_cpu(eh->data_len) < sizeof(*med)) 364 init_cdrom_command(&cgc, NULL, 0, CGC_DATA_NONE);
460 return 1; 365 cgc.cmd[0] = GPCMD_FLUSH_CACHE;
461 366
462 if (eh->nea || eh->notification_class != 0x4) 367 cgc.timeout = 5 * 60 * HZ;
463 return 1;
464 368
465 memcpy(med, &buffer[sizeof(*eh)], sizeof(*med)); 369 return cdi->ops->generic_packet(cdi, &cgc);
466 return 0;
467} 370}
468 371
372/* This macro makes sure we don't have to check on cdrom_device_ops
373 * existence in the run-time routines below. Change_capability is a
374 * hack to have the capability flags defined const, while we can still
375 * change it here without gcc complaining at every line.
376 */
377#define ENSURE(call, bits) \
378do { \
379 if (cdo->call == NULL) \
380 *change_capability &= ~(bits); \
381} while (0)
382
469/* 383/*
470 * the first prototypes used 0x2c as the page code for the mrw mode page, 384 * the first prototypes used 0x2c as the page code for the mrw mode page,
471 * subsequently this was changed to 0x03. probe the one used by this drive 385 * subsequently this was changed to 0x03. probe the one used by this drive
@@ -582,18 +496,6 @@ static int cdrom_mrw_bgformat_susp(struct cdrom_device_info *cdi, int immed)
582 return cdi->ops->generic_packet(cdi, &cgc); 496 return cdi->ops->generic_packet(cdi, &cgc);
583} 497}
584 498
585static int cdrom_flush_cache(struct cdrom_device_info *cdi)
586{
587 struct packet_command cgc;
588
589 init_cdrom_command(&cgc, NULL, 0, CGC_DATA_NONE);
590 cgc.cmd[0] = GPCMD_FLUSH_CACHE;
591
592 cgc.timeout = 5 * 60 * HZ;
593
594 return cdi->ops->generic_packet(cdi, &cgc);
595}
596
597static int cdrom_mrw_exit(struct cdrom_device_info *cdi) 499static int cdrom_mrw_exit(struct cdrom_device_info *cdi)
598{ 500{
599 disc_information di; 501 disc_information di;
@@ -627,17 +529,19 @@ static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space)
627 cgc.buffer = buffer; 529 cgc.buffer = buffer;
628 cgc.buflen = sizeof(buffer); 530 cgc.buflen = sizeof(buffer);
629 531
630 if ((ret = cdrom_mode_sense(cdi, &cgc, cdi->mrw_mode_page, 0))) 532 ret = cdrom_mode_sense(cdi, &cgc, cdi->mrw_mode_page, 0);
533 if (ret)
631 return ret; 534 return ret;
632 535
633 mph = (struct mode_page_header *) buffer; 536 mph = (struct mode_page_header *)buffer;
634 offset = be16_to_cpu(mph->desc_length); 537 offset = be16_to_cpu(mph->desc_length);
635 size = be16_to_cpu(mph->mode_data_length) + 2; 538 size = be16_to_cpu(mph->mode_data_length) + 2;
636 539
637 buffer[offset + 3] = space; 540 buffer[offset + 3] = space;
638 cgc.buflen = size; 541 cgc.buflen = size;
639 542
640 if ((ret = cdrom_mode_select(cdi, &cgc))) 543 ret = cdrom_mode_select(cdi, &cgc);
544 if (ret)
641 return ret; 545 return ret;
642 546
643 pr_info("%s: mrw address space %s selected\n", 547 pr_info("%s: mrw address space %s selected\n",
@@ -645,6 +549,106 @@ static int cdrom_mrw_set_lba_space(struct cdrom_device_info *cdi, int space)
645 return 0; 549 return 0;
646} 550}
647 551
552int register_cdrom(struct cdrom_device_info *cdi)
553{
554 static char banner_printed;
555 struct cdrom_device_ops *cdo = cdi->ops;
556 int *change_capability = (int *)&cdo->capability; /* hack */
557
558 cd_dbg(CD_OPEN, "entering register_cdrom\n");
559
560 if (cdo->open == NULL || cdo->release == NULL)
561 return -EINVAL;
562 if (!banner_printed) {
563 pr_info("Uniform CD-ROM driver " REVISION "\n");
564 banner_printed = 1;
565 cdrom_sysctl_register();
566 }
567
568 ENSURE(drive_status, CDC_DRIVE_STATUS);
569 if (cdo->check_events == NULL && cdo->media_changed == NULL)
570 *change_capability = ~(CDC_MEDIA_CHANGED | CDC_SELECT_DISC);
571 ENSURE(tray_move, CDC_CLOSE_TRAY | CDC_OPEN_TRAY);
572 ENSURE(lock_door, CDC_LOCK);
573 ENSURE(select_speed, CDC_SELECT_SPEED);
574 ENSURE(get_last_session, CDC_MULTI_SESSION);
575 ENSURE(get_mcn, CDC_MCN);
576 ENSURE(reset, CDC_RESET);
577 ENSURE(generic_packet, CDC_GENERIC_PACKET);
578 cdi->mc_flags = 0;
579 cdo->n_minors = 0;
580 cdi->options = CDO_USE_FFLAGS;
581
582 if (autoclose == 1 && CDROM_CAN(CDC_CLOSE_TRAY))
583 cdi->options |= (int) CDO_AUTO_CLOSE;
584 if (autoeject == 1 && CDROM_CAN(CDC_OPEN_TRAY))
585 cdi->options |= (int) CDO_AUTO_EJECT;
586 if (lockdoor == 1)
587 cdi->options |= (int) CDO_LOCK;
588 if (check_media_type == 1)
589 cdi->options |= (int) CDO_CHECK_TYPE;
590
591 if (CDROM_CAN(CDC_MRW_W))
592 cdi->exit = cdrom_mrw_exit;
593
594 if (cdi->disk)
595 cdi->cdda_method = CDDA_BPC_FULL;
596 else
597 cdi->cdda_method = CDDA_OLD;
598
599 if (!cdo->generic_packet)
600 cdo->generic_packet = cdrom_dummy_generic_packet;
601
602 cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name);
603 mutex_lock(&cdrom_mutex);
604 list_add(&cdi->list, &cdrom_list);
605 mutex_unlock(&cdrom_mutex);
606 return 0;
607}
608#undef ENSURE
609
610void unregister_cdrom(struct cdrom_device_info *cdi)
611{
612 cd_dbg(CD_OPEN, "entering unregister_cdrom\n");
613
614 mutex_lock(&cdrom_mutex);
615 list_del(&cdi->list);
616 mutex_unlock(&cdrom_mutex);
617
618 if (cdi->exit)
619 cdi->exit(cdi);
620
621 cdi->ops->n_minors--;
622 cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name);
623}
624
625int cdrom_get_media_event(struct cdrom_device_info *cdi,
626 struct media_event_desc *med)
627{
628 struct packet_command cgc;
629 unsigned char buffer[8];
630 struct event_header *eh = (struct event_header *)buffer;
631
632 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_READ);
633 cgc.cmd[0] = GPCMD_GET_EVENT_STATUS_NOTIFICATION;
634 cgc.cmd[1] = 1; /* IMMED */
635 cgc.cmd[4] = 1 << 4; /* media event */
636 cgc.cmd[8] = sizeof(buffer);
637 cgc.quiet = 1;
638
639 if (cdi->ops->generic_packet(cdi, &cgc))
640 return 1;
641
642 if (be16_to_cpu(eh->data_len) < sizeof(*med))
643 return 1;
644
645 if (eh->nea || eh->notification_class != 0x4)
646 return 1;
647
648 memcpy(med, &buffer[sizeof(*eh)], sizeof(*med));
649 return 0;
650}
651
648static int cdrom_get_random_writable(struct cdrom_device_info *cdi, 652static int cdrom_get_random_writable(struct cdrom_device_info *cdi,
649 struct rwrt_feature_desc *rfd) 653 struct rwrt_feature_desc *rfd)
650{ 654{