aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2010-08-01 06:23:14 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2010-08-02 02:59:52 -0400
commit20802224298ce9dfd99a7e26b675fc0c8ae26cac (patch)
treea00ead28ffc6b5032f1d83a22f7503fdc2c1f0ec
parent872e330e38806d835bd6c311c93ab998e2fb9058 (diff)
firewire: core: add forgotten dummy driver methods, remove unused ones
There is an at least theoretic race condition in which .start_iso etc. could still be called between when the dummy driver is bound to the card and when the children devices are being shut down. Add dummy_start_iso and friends. On the other hand, .enable, .set_config_rom, .read_csr, write_csr do not need to be implemented by the dummy driver, as commented. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
-rw-r--r--drivers/firewire/core-card.c64
1 files changed, 38 insertions, 26 deletions
diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c
index 6d1cfae6aad4..417b8a4b1af1 100644
--- a/drivers/firewire/core-card.c
+++ b/drivers/firewire/core-card.c
@@ -538,15 +538,13 @@ EXPORT_SYMBOL(fw_card_add);
538 * as all IO to the card will be handled (and failed) by the dummy driver 538 * as all IO to the card will be handled (and failed) by the dummy driver
539 * instead of calling into the module. Only functions for iso context 539 * instead of calling into the module. Only functions for iso context
540 * shutdown still need to be provided by the card driver. 540 * shutdown still need to be provided by the card driver.
541 *
542 * .read/write_csr() should never be called anymore after the dummy driver
543 * was bound since they are only used within request handler context.
544 * .set_config_rom() is never called since the card is taken out of card_list
545 * before switching to the dummy driver.
541 */ 546 */
542 547
543static int dummy_enable(struct fw_card *card,
544 const __be32 *config_rom, size_t length)
545{
546 BUG();
547 return -1;
548}
549
550static int dummy_read_phy_reg(struct fw_card *card, int address) 548static int dummy_read_phy_reg(struct fw_card *card, int address)
551{ 549{
552 return -ENODEV; 550 return -ENODEV;
@@ -558,17 +556,6 @@ static int dummy_update_phy_reg(struct fw_card *card, int address,
558 return -ENODEV; 556 return -ENODEV;
559} 557}
560 558
561static int dummy_set_config_rom(struct fw_card *card,
562 const __be32 *config_rom, size_t length)
563{
564 /*
565 * We take the card out of card_list before setting the dummy
566 * driver, so this should never get called.
567 */
568 BUG();
569 return -1;
570}
571
572static void dummy_send_request(struct fw_card *card, struct fw_packet *packet) 559static void dummy_send_request(struct fw_card *card, struct fw_packet *packet)
573{ 560{
574 packet->callback(packet, card, RCODE_CANCELLED); 561 packet->callback(packet, card, RCODE_CANCELLED);
@@ -590,15 +577,40 @@ static int dummy_enable_phys_dma(struct fw_card *card,
590 return -ENODEV; 577 return -ENODEV;
591} 578}
592 579
580static struct fw_iso_context *dummy_allocate_iso_context(struct fw_card *card,
581 int type, int channel, size_t header_size)
582{
583 return ERR_PTR(-ENODEV);
584}
585
586static int dummy_start_iso(struct fw_iso_context *ctx,
587 s32 cycle, u32 sync, u32 tags)
588{
589 return -ENODEV;
590}
591
592static int dummy_set_iso_channels(struct fw_iso_context *ctx, u64 *channels)
593{
594 return -ENODEV;
595}
596
597static int dummy_queue_iso(struct fw_iso_context *ctx, struct fw_iso_packet *p,
598 struct fw_iso_buffer *buffer, unsigned long payload)
599{
600 return -ENODEV;
601}
602
593static const struct fw_card_driver dummy_driver_template = { 603static const struct fw_card_driver dummy_driver_template = {
594 .enable = dummy_enable, 604 .read_phy_reg = dummy_read_phy_reg,
595 .read_phy_reg = dummy_read_phy_reg, 605 .update_phy_reg = dummy_update_phy_reg,
596 .update_phy_reg = dummy_update_phy_reg, 606 .send_request = dummy_send_request,
597 .set_config_rom = dummy_set_config_rom, 607 .send_response = dummy_send_response,
598 .send_request = dummy_send_request, 608 .cancel_packet = dummy_cancel_packet,
599 .cancel_packet = dummy_cancel_packet, 609 .enable_phys_dma = dummy_enable_phys_dma,
600 .send_response = dummy_send_response, 610 .allocate_iso_context = dummy_allocate_iso_context,
601 .enable_phys_dma = dummy_enable_phys_dma, 611 .start_iso = dummy_start_iso,
612 .set_iso_channels = dummy_set_iso_channels,
613 .queue_iso = dummy_queue_iso,
602}; 614};
603 615
604void fw_card_release(struct kref *kref) 616void fw_card_release(struct kref *kref)