Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6: firewire: fw-core: make two variables static firewire: fw-ohci: dma_free_coherent needs IRQs enabled firewire: fw-sbp2: set correct maximum payload (fixes CardBus adapters) ieee1394: sbp2: more correct Kconfig dependencies ieee1394: revert "sbp2: enforce 32bit DMA mapping"
This commit is contained in:
@@ -907,6 +907,8 @@ static void bus_reset_tasklet(unsigned long data)
|
|||||||
int self_id_count, i, j, reg;
|
int self_id_count, i, j, reg;
|
||||||
int generation, new_generation;
|
int generation, new_generation;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
void *free_rom = NULL;
|
||||||
|
dma_addr_t free_rom_bus = 0;
|
||||||
|
|
||||||
reg = reg_read(ohci, OHCI1394_NodeID);
|
reg = reg_read(ohci, OHCI1394_NodeID);
|
||||||
if (!(reg & OHCI1394_NodeID_idValid)) {
|
if (!(reg & OHCI1394_NodeID_idValid)) {
|
||||||
@@ -970,8 +972,8 @@ static void bus_reset_tasklet(unsigned long data)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (ohci->next_config_rom != NULL) {
|
if (ohci->next_config_rom != NULL) {
|
||||||
dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE,
|
free_rom = ohci->config_rom;
|
||||||
ohci->config_rom, ohci->config_rom_bus);
|
free_rom_bus = ohci->config_rom_bus;
|
||||||
ohci->config_rom = ohci->next_config_rom;
|
ohci->config_rom = ohci->next_config_rom;
|
||||||
ohci->config_rom_bus = ohci->next_config_rom_bus;
|
ohci->config_rom_bus = ohci->next_config_rom_bus;
|
||||||
ohci->next_config_rom = NULL;
|
ohci->next_config_rom = NULL;
|
||||||
@@ -990,6 +992,10 @@ static void bus_reset_tasklet(unsigned long data)
|
|||||||
|
|
||||||
spin_unlock_irqrestore(&ohci->lock, flags);
|
spin_unlock_irqrestore(&ohci->lock, flags);
|
||||||
|
|
||||||
|
if (free_rom)
|
||||||
|
dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE,
|
||||||
|
free_rom, free_rom_bus);
|
||||||
|
|
||||||
fw_core_handle_bus_reset(&ohci->card, ohci->node_id, generation,
|
fw_core_handle_bus_reset(&ohci->card, ohci->node_id, generation,
|
||||||
self_id_count, ohci->self_id_buffer);
|
self_id_count, ohci->self_id_buffer);
|
||||||
}
|
}
|
||||||
@@ -1186,7 +1192,7 @@ ohci_set_config_rom(struct fw_card *card, u32 *config_rom, size_t length)
|
|||||||
{
|
{
|
||||||
struct fw_ohci *ohci;
|
struct fw_ohci *ohci;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int retval = 0;
|
int retval = -EBUSY;
|
||||||
__be32 *next_config_rom;
|
__be32 *next_config_rom;
|
||||||
dma_addr_t next_config_rom_bus;
|
dma_addr_t next_config_rom_bus;
|
||||||
|
|
||||||
@@ -1240,10 +1246,7 @@ ohci_set_config_rom(struct fw_card *card, u32 *config_rom, size_t length)
|
|||||||
|
|
||||||
reg_write(ohci, OHCI1394_ConfigROMmap,
|
reg_write(ohci, OHCI1394_ConfigROMmap,
|
||||||
ohci->next_config_rom_bus);
|
ohci->next_config_rom_bus);
|
||||||
} else {
|
retval = 0;
|
||||||
dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE,
|
|
||||||
next_config_rom, next_config_rom_bus);
|
|
||||||
retval = -EBUSY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_irqrestore(&ohci->lock, flags);
|
spin_unlock_irqrestore(&ohci->lock, flags);
|
||||||
@@ -1257,6 +1260,9 @@ ohci_set_config_rom(struct fw_card *card, u32 *config_rom, size_t length)
|
|||||||
*/
|
*/
|
||||||
if (retval == 0)
|
if (retval == 0)
|
||||||
fw_core_initiate_bus_reset(&ohci->card, 1);
|
fw_core_initiate_bus_reset(&ohci->card, 1);
|
||||||
|
else
|
||||||
|
dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE,
|
||||||
|
next_config_rom, next_config_rom_bus);
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@@ -984,6 +984,7 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
|
|||||||
struct fw_unit *unit = sd->unit;
|
struct fw_unit *unit = sd->unit;
|
||||||
struct fw_device *device = fw_device(unit->device.parent);
|
struct fw_device *device = fw_device(unit->device.parent);
|
||||||
struct sbp2_command_orb *orb;
|
struct sbp2_command_orb *orb;
|
||||||
|
unsigned max_payload;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Bidirectional commands are not yet implemented, and unknown
|
* Bidirectional commands are not yet implemented, and unknown
|
||||||
@@ -1017,8 +1018,10 @@ static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
|
|||||||
* specifies the max payload size as 2 ^ (max_payload + 2), so
|
* specifies the max payload size as 2 ^ (max_payload + 2), so
|
||||||
* if we set this to max_speed + 7, we get the right value.
|
* if we set this to max_speed + 7, we get the right value.
|
||||||
*/
|
*/
|
||||||
|
max_payload = min(device->max_speed + 7,
|
||||||
|
device->card->max_receive - 1);
|
||||||
orb->request.misc =
|
orb->request.misc =
|
||||||
COMMAND_ORB_MAX_PAYLOAD(device->max_speed + 7) |
|
COMMAND_ORB_MAX_PAYLOAD(max_payload) |
|
||||||
COMMAND_ORB_SPEED(device->max_speed) |
|
COMMAND_ORB_SPEED(device->max_speed) |
|
||||||
COMMAND_ORB_NOTIFY;
|
COMMAND_ORB_NOTIFY;
|
||||||
|
|
||||||
|
@@ -734,7 +734,7 @@ fw_core_handle_response(struct fw_card *card, struct fw_packet *p)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(fw_core_handle_response);
|
EXPORT_SYMBOL(fw_core_handle_response);
|
||||||
|
|
||||||
const struct fw_address_region topology_map_region =
|
static const struct fw_address_region topology_map_region =
|
||||||
{ .start = 0xfffff0001000ull, .end = 0xfffff0001400ull, };
|
{ .start = 0xfffff0001000ull, .end = 0xfffff0001400ull, };
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -772,7 +772,7 @@ static struct fw_address_handler topology_map = {
|
|||||||
.address_callback = handle_topology_map,
|
.address_callback = handle_topology_map,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct fw_address_region registers_region =
|
static const struct fw_address_region registers_region =
|
||||||
{ .start = 0xfffff0000000ull, .end = 0xfffff0000400ull, };
|
{ .start = 0xfffff0000000ull, .end = 0xfffff0000400ull, };
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -231,7 +231,7 @@ struct fw_card {
|
|||||||
unsigned long reset_jiffies;
|
unsigned long reset_jiffies;
|
||||||
|
|
||||||
unsigned long long guid;
|
unsigned long long guid;
|
||||||
int max_receive;
|
unsigned max_receive;
|
||||||
int link_speed;
|
int link_speed;
|
||||||
int config_rom_generation;
|
int config_rom_generation;
|
||||||
|
|
||||||
|
@@ -97,7 +97,7 @@ config IEEE1394_SBP2
|
|||||||
|
|
||||||
config IEEE1394_SBP2_PHYS_DMA
|
config IEEE1394_SBP2_PHYS_DMA
|
||||||
bool "Enable replacement for physical DMA in SBP2"
|
bool "Enable replacement for physical DMA in SBP2"
|
||||||
depends on IEEE1394 && IEEE1394_SBP2 && EXPERIMENTAL && (X86_32 || PPC_32)
|
depends on IEEE1394_SBP2 && VIRT_TO_BUS && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
This builds sbp2 for use with non-OHCI host adapters which do not
|
This builds sbp2 for use with non-OHCI host adapters which do not
|
||||||
support physical DMA or for when ohci1394 is run with phys_dma=0.
|
support physical DMA or for when ohci1394 is run with phys_dma=0.
|
||||||
|
@@ -773,11 +773,6 @@ static struct sbp2_lu *sbp2_alloc_device(struct unit_directory *ud)
|
|||||||
SBP2_ERR("failed to register lower 4GB address range");
|
SBP2_ERR("failed to register lower 4GB address range");
|
||||||
goto failed_alloc;
|
goto failed_alloc;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (dma_set_mask(hi->host->device.parent, DMA_32BIT_MASK)) {
|
|
||||||
SBP2_ERR("failed to set 4GB DMA mask");
|
|
||||||
goto failed_alloc;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user