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>
This commit is contained in:
Родитель
872e330e38
Коммит
2080222429
|
@ -538,15 +538,13 @@ EXPORT_SYMBOL(fw_card_add);
|
|||
* as all IO to the card will be handled (and failed) by the dummy driver
|
||||
* instead of calling into the module. Only functions for iso context
|
||||
* shutdown still need to be provided by the card driver.
|
||||
*
|
||||
* .read/write_csr() should never be called anymore after the dummy driver
|
||||
* was bound since they are only used within request handler context.
|
||||
* .set_config_rom() is never called since the card is taken out of card_list
|
||||
* before switching to the dummy driver.
|
||||
*/
|
||||
|
||||
static int dummy_enable(struct fw_card *card,
|
||||
const __be32 *config_rom, size_t length)
|
||||
{
|
||||
BUG();
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int dummy_read_phy_reg(struct fw_card *card, int address)
|
||||
{
|
||||
return -ENODEV;
|
||||
|
@ -558,17 +556,6 @@ static int dummy_update_phy_reg(struct fw_card *card, int address,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int dummy_set_config_rom(struct fw_card *card,
|
||||
const __be32 *config_rom, size_t length)
|
||||
{
|
||||
/*
|
||||
* We take the card out of card_list before setting the dummy
|
||||
* driver, so this should never get called.
|
||||
*/
|
||||
BUG();
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void dummy_send_request(struct fw_card *card, struct fw_packet *packet)
|
||||
{
|
||||
packet->callback(packet, card, RCODE_CANCELLED);
|
||||
|
@ -590,15 +577,40 @@ static int dummy_enable_phys_dma(struct fw_card *card,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
static struct fw_iso_context *dummy_allocate_iso_context(struct fw_card *card,
|
||||
int type, int channel, size_t header_size)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
static int dummy_start_iso(struct fw_iso_context *ctx,
|
||||
s32 cycle, u32 sync, u32 tags)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int dummy_set_iso_channels(struct fw_iso_context *ctx, u64 *channels)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int dummy_queue_iso(struct fw_iso_context *ctx, struct fw_iso_packet *p,
|
||||
struct fw_iso_buffer *buffer, unsigned long payload)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static const struct fw_card_driver dummy_driver_template = {
|
||||
.enable = dummy_enable,
|
||||
.read_phy_reg = dummy_read_phy_reg,
|
||||
.update_phy_reg = dummy_update_phy_reg,
|
||||
.set_config_rom = dummy_set_config_rom,
|
||||
.send_request = dummy_send_request,
|
||||
.cancel_packet = dummy_cancel_packet,
|
||||
.send_response = dummy_send_response,
|
||||
.enable_phys_dma = dummy_enable_phys_dma,
|
||||
.read_phy_reg = dummy_read_phy_reg,
|
||||
.update_phy_reg = dummy_update_phy_reg,
|
||||
.send_request = dummy_send_request,
|
||||
.send_response = dummy_send_response,
|
||||
.cancel_packet = dummy_cancel_packet,
|
||||
.enable_phys_dma = dummy_enable_phys_dma,
|
||||
.allocate_iso_context = dummy_allocate_iso_context,
|
||||
.start_iso = dummy_start_iso,
|
||||
.set_iso_channels = dummy_set_iso_channels,
|
||||
.queue_iso = dummy_queue_iso,
|
||||
};
|
||||
|
||||
void fw_card_release(struct kref *kref)
|
||||
|
|
Загрузка…
Ссылка в новой задаче