ide: drop 'initializing' argument from ide_register_hw()
* Rename init_hwif_data() to ide_init_port_data() and export it. * For all users of ide_register_hw() with 'initializing' argument set hwif->present and hwif->hold are always zero so convert these host drivers to use ide_find_port()+ide_init_port_data()+ide_init_port_hw() instead (also no need for init_hwif_default() call since the setup done by it gets over-ridden by ide_init_port_hw() call). * Drop 'initializing' argument from ide_register_hw(). Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Roman Zippel <zippel@linux-m68k.org> Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
Родитель
57c802e84f
Коммит
cbb010c180
|
@ -45,7 +45,7 @@ bastide_register(unsigned int base, unsigned int aux, int irq,
|
||||||
hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20);
|
hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20);
|
||||||
hw.irq = irq;
|
hw.irq = irq;
|
||||||
|
|
||||||
ide_register_hw(&hw, NULL, 0, hwif);
|
ide_register_hw(&hw, NULL, hwif);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,16 @@
|
||||||
|
|
||||||
void __init ide_arm_init(void)
|
void __init ide_arm_init(void)
|
||||||
{
|
{
|
||||||
|
ide_hwif_t *hwif;
|
||||||
hw_regs_t hw;
|
hw_regs_t hw;
|
||||||
|
|
||||||
memset(&hw, 0, sizeof(hw));
|
memset(&hw, 0, sizeof(hw));
|
||||||
ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206);
|
ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206);
|
||||||
hw.irq = IDE_ARM_IRQ;
|
hw.irq = IDE_ARM_IRQ;
|
||||||
ide_register_hw(&hw, NULL, 1, NULL);
|
|
||||||
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
|
if (hwif) {
|
||||||
|
ide_init_port_data(hwif, hwif->index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -777,9 +777,11 @@ init_e100_ide (void)
|
||||||
ide_offsets,
|
ide_offsets,
|
||||||
0, 0, cris_ide_ack_intr,
|
0, 0, cris_ide_ack_intr,
|
||||||
ide_default_irq(0));
|
ide_default_irq(0));
|
||||||
ide_register_hw(&hw, NULL, 1, &hwif);
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
if (hwif == NULL)
|
if (hwif == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
ide_init_port_data(hwif, hwif->index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
hwif->mmio = 1;
|
hwif->mmio = 1;
|
||||||
hwif->chipset = ide_etrax100;
|
hwif->chipset = ide_etrax100;
|
||||||
hwif->set_pio_mode = &cris_set_pio_mode;
|
hwif->set_pio_mode = &cris_set_pio_mode;
|
||||||
|
|
|
@ -88,7 +88,7 @@ void __init h8300_ide_init(void)
|
||||||
{
|
{
|
||||||
hw_regs_t hw;
|
hw_regs_t hw;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
int idx;
|
int index;
|
||||||
|
|
||||||
if (!request_region(CONFIG_H8300_IDE_BASE, H8300_IDE_GAP*8, "ide-h8300"))
|
if (!request_region(CONFIG_H8300_IDE_BASE, H8300_IDE_GAP*8, "ide-h8300"))
|
||||||
goto out_busy;
|
goto out_busy;
|
||||||
|
@ -100,14 +100,17 @@ void __init h8300_ide_init(void)
|
||||||
hw_setup(&hw);
|
hw_setup(&hw);
|
||||||
|
|
||||||
/* register if */
|
/* register if */
|
||||||
idx = ide_register_hw(&hw, NULL, 1, &hwif);
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
if (idx == -1) {
|
if (hwif == NULL) {
|
||||||
printk(KERN_ERR "ide-h8300: IDE I/F register failed\n");
|
printk(KERN_ERR "ide-h8300: IDE I/F register failed\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
index = hwif->index;
|
||||||
|
ide_init_port_data(hwif, index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
hwif_setup(hwif);
|
hwif_setup(hwif);
|
||||||
printk(KERN_INFO "ide%d: H8/300 generic IDE interface\n", idx);
|
printk(KERN_INFO "ide%d: H8/300 generic IDE interface\n", index);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
out_busy:
|
out_busy:
|
||||||
|
|
|
@ -31,7 +31,6 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
|
||||||
{
|
{
|
||||||
hw_regs_t hw;
|
hw_regs_t hw;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
int index;
|
|
||||||
|
|
||||||
if (!(pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && pnp_irq_valid(dev, 0)))
|
if (!(pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && pnp_irq_valid(dev, 0)))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -41,9 +40,13 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
|
||||||
pnp_port_start(dev, 1));
|
pnp_port_start(dev, 1));
|
||||||
hw.irq = pnp_irq(dev, 0);
|
hw.irq = pnp_irq(dev, 0);
|
||||||
|
|
||||||
index = ide_register_hw(&hw, NULL, 1, &hwif);
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
|
if (hwif) {
|
||||||
|
u8 index = hwif->index;
|
||||||
|
|
||||||
|
ide_init_port_data(hwif, index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
|
|
||||||
if (index != -1) {
|
|
||||||
printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
|
printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
|
||||||
pnp_set_drvdata(dev,hwif);
|
pnp_set_drvdata(dev,hwif);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -116,7 +116,7 @@ EXPORT_SYMBOL(ide_hwifs);
|
||||||
/*
|
/*
|
||||||
* Do not even *think* about calling this!
|
* Do not even *think* about calling this!
|
||||||
*/
|
*/
|
||||||
static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
|
void ide_init_port_data(ide_hwif_t *hwif, unsigned int index)
|
||||||
{
|
{
|
||||||
unsigned int unit;
|
unsigned int unit;
|
||||||
|
|
||||||
|
@ -159,6 +159,7 @@ static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
|
||||||
init_completion(&drive->gendev_rel_comp);
|
init_completion(&drive->gendev_rel_comp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(ide_init_port_data);
|
||||||
|
|
||||||
static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
|
static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
|
||||||
{
|
{
|
||||||
|
@ -210,7 +211,7 @@ static void __init init_ide_data (void)
|
||||||
/* Initialise all interface structures */
|
/* Initialise all interface structures */
|
||||||
for (index = 0; index < MAX_HWIFS; ++index) {
|
for (index = 0; index < MAX_HWIFS; ++index) {
|
||||||
hwif = &ide_hwifs[index];
|
hwif = &ide_hwifs[index];
|
||||||
init_hwif_data(hwif, index);
|
ide_init_port_data(hwif, index);
|
||||||
init_hwif_default(hwif, index);
|
init_hwif_default(hwif, index);
|
||||||
#if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI)
|
#if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI)
|
||||||
hwif->irq =
|
hwif->irq =
|
||||||
|
@ -609,7 +610,7 @@ void ide_unregister(unsigned int index)
|
||||||
tmp_hwif = *hwif;
|
tmp_hwif = *hwif;
|
||||||
|
|
||||||
/* restore hwif data to pristine status */
|
/* restore hwif data to pristine status */
|
||||||
init_hwif_data(hwif, index);
|
ide_init_port_data(hwif, index);
|
||||||
init_hwif_default(hwif, index);
|
init_hwif_default(hwif, index);
|
||||||
|
|
||||||
ide_hwif_restore(hwif, &tmp_hwif);
|
ide_hwif_restore(hwif, &tmp_hwif);
|
||||||
|
@ -690,29 +691,19 @@ EXPORT_SYMBOL_GPL(ide_init_port_hw);
|
||||||
* ide_register_hw - register IDE interface
|
* ide_register_hw - register IDE interface
|
||||||
* @hw: hardware registers
|
* @hw: hardware registers
|
||||||
* @quirkproc: quirkproc function
|
* @quirkproc: quirkproc function
|
||||||
* @initializing: set while initializing built-in drivers
|
|
||||||
* @hwifp: pointer to returned hwif
|
* @hwifp: pointer to returned hwif
|
||||||
*
|
*
|
||||||
* Register an IDE interface, specifying exactly the registers etc.
|
* Register an IDE interface, specifying exactly the registers etc.
|
||||||
* Set init=1 iff calling before probes have taken place.
|
|
||||||
*
|
*
|
||||||
* Returns -1 on error.
|
* Returns -1 on error.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int ide_register_hw(hw_regs_t *hw, void (*quirkproc)(ide_drive_t *),
|
int ide_register_hw(hw_regs_t *hw, void (*quirkproc)(ide_drive_t *),
|
||||||
int initializing, ide_hwif_t **hwifp)
|
ide_hwif_t **hwifp)
|
||||||
{
|
{
|
||||||
int index, retry = 1;
|
int index, retry = 1;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
|
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
|
||||||
if (initializing) {
|
|
||||||
hwif = ide_find_port(hw->io_ports[IDE_DATA_OFFSET]);
|
|
||||||
if (hwif) {
|
|
||||||
index = hwif->index;
|
|
||||||
goto found;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
for (index = 0; index < MAX_HWIFS; ++index) {
|
for (index = 0; index < MAX_HWIFS; ++index) {
|
||||||
|
@ -735,7 +726,7 @@ found:
|
||||||
if (hwif->present)
|
if (hwif->present)
|
||||||
ide_unregister(index);
|
ide_unregister(index);
|
||||||
else if (!hwif->hold) {
|
else if (!hwif->hold) {
|
||||||
init_hwif_data(hwif, index);
|
ide_init_port_data(hwif, index);
|
||||||
init_hwif_default(hwif, index);
|
init_hwif_default(hwif, index);
|
||||||
}
|
}
|
||||||
if (hwif->present)
|
if (hwif->present)
|
||||||
|
@ -744,16 +735,14 @@ found:
|
||||||
ide_init_port_hw(hwif, hw);
|
ide_init_port_hw(hwif, hw);
|
||||||
hwif->quirkproc = quirkproc;
|
hwif->quirkproc = quirkproc;
|
||||||
|
|
||||||
if (initializing == 0) {
|
idx[0] = index;
|
||||||
u8 idx[4] = { index, 0xff, 0xff, 0xff };
|
|
||||||
|
|
||||||
ide_device_add(idx);
|
ide_device_add(idx);
|
||||||
}
|
|
||||||
|
|
||||||
if (hwifp)
|
if (hwifp)
|
||||||
*hwifp = hwif;
|
*hwifp = hwif;
|
||||||
|
|
||||||
return (initializing || hwif->present) ? index : -1;
|
return hwif->present ? index : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(ide_register_hw);
|
EXPORT_SYMBOL(ide_register_hw);
|
||||||
|
@ -1076,7 +1065,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
|
||||||
ide_init_hwif_ports(&hw, (unsigned long) args[0],
|
ide_init_hwif_ports(&hw, (unsigned long) args[0],
|
||||||
(unsigned long) args[1], NULL);
|
(unsigned long) args[1], NULL);
|
||||||
hw.irq = args[2];
|
hw.irq = args[2];
|
||||||
if (ide_register_hw(&hw, NULL, 0, NULL) == -1)
|
if (ide_register_hw(&hw, NULL, NULL) == -1)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,7 +147,7 @@ void __init buddha_init(void)
|
||||||
{
|
{
|
||||||
hw_regs_t hw;
|
hw_regs_t hw;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
int i, index;
|
int i;
|
||||||
|
|
||||||
struct zorro_dev *z = NULL;
|
struct zorro_dev *z = NULL;
|
||||||
u_long buddha_board = 0;
|
u_long buddha_board = 0;
|
||||||
|
@ -213,8 +213,13 @@ fail_base2:
|
||||||
IRQ_AMIGA_PORTS);
|
IRQ_AMIGA_PORTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
index = ide_register_hw(&hw, NULL, 1, &hwif);
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
if (index != -1) {
|
if (hwif) {
|
||||||
|
u8 index = hwif->index;
|
||||||
|
|
||||||
|
ide_init_port_data(hwif, index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
|
|
||||||
hwif->mmio = 1;
|
hwif->mmio = 1;
|
||||||
printk("ide%d: ", index);
|
printk("ide%d: ", index);
|
||||||
switch(type) {
|
switch(type) {
|
||||||
|
|
|
@ -66,15 +66,19 @@ void __init falconide_init(void)
|
||||||
{
|
{
|
||||||
if (MACH_IS_ATARI && ATARIHW_PRESENT(IDE)) {
|
if (MACH_IS_ATARI && ATARIHW_PRESENT(IDE)) {
|
||||||
hw_regs_t hw;
|
hw_regs_t hw;
|
||||||
int index;
|
|
||||||
|
|
||||||
ide_setup_ports(&hw, ATA_HD_BASE, falconide_offsets,
|
ide_setup_ports(&hw, ATA_HD_BASE, falconide_offsets,
|
||||||
0, 0, NULL,
|
0, 0, NULL,
|
||||||
// falconide_iops,
|
// falconide_iops,
|
||||||
IRQ_MFP_IDE);
|
IRQ_MFP_IDE);
|
||||||
index = ide_register_hw(&hw, NULL, 1, NULL);
|
|
||||||
|
|
||||||
if (index != -1)
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
|
if (hwif) {
|
||||||
|
u8 index = hwif->index;
|
||||||
|
|
||||||
|
ide_init_port_data(hwif, index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
|
|
||||||
printk("ide%d: Falcon IDE interface\n", index);
|
printk("ide%d: Falcon IDE interface\n", index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,7 +133,6 @@ found:
|
||||||
ide_ack_intr_t *ack_intr;
|
ide_ack_intr_t *ack_intr;
|
||||||
hw_regs_t hw;
|
hw_regs_t hw;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
int index;
|
|
||||||
unsigned long phys_base, res_start, res_n;
|
unsigned long phys_base, res_start, res_n;
|
||||||
|
|
||||||
if (a4000) {
|
if (a4000) {
|
||||||
|
@ -165,8 +164,13 @@ found:
|
||||||
// &gayle_iops,
|
// &gayle_iops,
|
||||||
IRQ_AMIGA_PORTS);
|
IRQ_AMIGA_PORTS);
|
||||||
|
|
||||||
index = ide_register_hw(&hw, NULL, 1, &hwif);
|
hwif = ide_find_port(base);
|
||||||
if (index != -1) {
|
if (hwif) {
|
||||||
|
u8 index = hwif->index;
|
||||||
|
|
||||||
|
ide_init_port_data(hwif, index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
|
|
||||||
hwif->mmio = 1;
|
hwif->mmio = 1;
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|
|
@ -153,7 +153,7 @@ static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq
|
||||||
hw.irq = irq;
|
hw.irq = irq;
|
||||||
hw.chipset = ide_pci;
|
hw.chipset = ide_pci;
|
||||||
hw.dev = &handle->dev;
|
hw.dev = &handle->dev;
|
||||||
return ide_register_hw(&hw, &ide_undecoded_slave, 0, NULL);
|
return ide_register_hw(&hw, &ide_undecoded_slave, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================
|
/*======================================================================
|
||||||
|
|
|
@ -85,7 +85,6 @@ void __init macide_init(void)
|
||||||
{
|
{
|
||||||
hw_regs_t hw;
|
hw_regs_t hw;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
int index = -1;
|
|
||||||
|
|
||||||
switch (macintosh_config->ide_type) {
|
switch (macintosh_config->ide_type) {
|
||||||
case MAC_IDE_QUADRA:
|
case MAC_IDE_QUADRA:
|
||||||
|
@ -93,40 +92,40 @@ void __init macide_init(void)
|
||||||
0, 0, macide_ack_intr,
|
0, 0, macide_ack_intr,
|
||||||
// quadra_ide_iops,
|
// quadra_ide_iops,
|
||||||
IRQ_NUBUS_F);
|
IRQ_NUBUS_F);
|
||||||
index = ide_register_hw(&hw, NULL, 1, &hwif);
|
|
||||||
break;
|
break;
|
||||||
case MAC_IDE_PB:
|
case MAC_IDE_PB:
|
||||||
ide_setup_ports(&hw, IDE_BASE, macide_offsets,
|
ide_setup_ports(&hw, IDE_BASE, macide_offsets,
|
||||||
0, 0, macide_ack_intr,
|
0, 0, macide_ack_intr,
|
||||||
// macide_pb_iops,
|
// macide_pb_iops,
|
||||||
IRQ_NUBUS_C);
|
IRQ_NUBUS_C);
|
||||||
index = ide_register_hw(&hw, NULL, 1, &hwif);
|
|
||||||
break;
|
break;
|
||||||
case MAC_IDE_BABOON:
|
case MAC_IDE_BABOON:
|
||||||
ide_setup_ports(&hw, BABOON_BASE, macide_offsets,
|
ide_setup_ports(&hw, BABOON_BASE, macide_offsets,
|
||||||
0, 0, NULL,
|
0, 0, NULL,
|
||||||
// macide_baboon_iops,
|
// macide_baboon_iops,
|
||||||
IRQ_BABOON_1);
|
IRQ_BABOON_1);
|
||||||
index = ide_register_hw(&hw, NULL, 1, &hwif);
|
|
||||||
if (index == -1) break;
|
|
||||||
if (macintosh_config->ident == MAC_MODEL_PB190) {
|
|
||||||
|
|
||||||
/* Fix breakage in ide-disk.c: drive capacity */
|
|
||||||
/* is not initialized for drives without a */
|
|
||||||
/* hardware ID, and we can't get that without */
|
|
||||||
/* probing the drive which freezes a 190. */
|
|
||||||
|
|
||||||
ide_drive_t *drive = &ide_hwifs[index].drives[0];
|
|
||||||
drive->capacity64 = drive->cyl*drive->head*drive->sect;
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index != -1) {
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
|
if (hwif) {
|
||||||
|
u8 index = hwif->index;
|
||||||
|
|
||||||
|
ide_init_port_data(hwif, index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
|
|
||||||
|
if (macintosh_config->ide_type == MAC_IDE_BABOON &&
|
||||||
|
macintosh_config->ident == MAC_MODEL_PB190) {
|
||||||
|
/* Fix breakage in ide-disk.c: drive capacity */
|
||||||
|
/* is not initialized for drives without a */
|
||||||
|
/* hardware ID, and we can't get that without */
|
||||||
|
/* probing the drive which freezes a 190. */
|
||||||
|
ide_drive_t *drive = &hwif->drives[0];
|
||||||
|
drive->capacity64 = drive->cyl*drive->head*drive->sect;
|
||||||
|
}
|
||||||
|
|
||||||
hwif->mmio = 1;
|
hwif->mmio = 1;
|
||||||
if (macintosh_config->ide_type == MAC_IDE_QUADRA)
|
if (macintosh_config->ide_type == MAC_IDE_QUADRA)
|
||||||
printk(KERN_INFO "ide%d: Macintosh Quadra IDE interface\n", index);
|
printk(KERN_INFO "ide%d: Macintosh Quadra IDE interface\n", index);
|
||||||
|
|
|
@ -115,7 +115,6 @@ void __init q40ide_init(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
int index;
|
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
if (!MACH_IS_Q40)
|
if (!MACH_IS_Q40)
|
||||||
|
@ -141,10 +140,13 @@ void __init q40ide_init(void)
|
||||||
0, NULL,
|
0, NULL,
|
||||||
// m68kide_iops,
|
// m68kide_iops,
|
||||||
q40ide_default_irq(pcide_bases[i]));
|
q40ide_default_irq(pcide_bases[i]));
|
||||||
index = ide_register_hw(&hw, NULL, 1, &hwif);
|
|
||||||
// **FIXME**
|
hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
|
||||||
if (index != -1)
|
if (hwif) {
|
||||||
|
ide_init_port_data(hwif, hwif->index);
|
||||||
|
ide_init_port_hw(hwif, &hw);
|
||||||
hwif->mmio = 1;
|
hwif->mmio = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
hw.irq = dev->irq;
|
hw.irq = dev->irq;
|
||||||
hw.chipset = ide_pci; /* this enables IRQ sharing */
|
hw.chipset = ide_pci; /* this enables IRQ sharing */
|
||||||
|
|
||||||
rc = ide_register_hw(&hw, &ide_undecoded_slave, 0, &hwif);
|
rc = ide_register_hw(&hw, &ide_undecoded_slave, &hwif);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
printk(KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n", rc);
|
printk(KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n", rc);
|
||||||
pci_disable_device(dev);
|
pci_disable_device(dev);
|
||||||
|
|
|
@ -563,7 +563,8 @@ static void media_bay_step(int i)
|
||||||
ide_init_hwif_ports(&hw, (unsigned long) bay->cd_base, (unsigned long) 0, NULL);
|
ide_init_hwif_ports(&hw, (unsigned long) bay->cd_base, (unsigned long) 0, NULL);
|
||||||
hw.irq = bay->cd_irq;
|
hw.irq = bay->cd_irq;
|
||||||
hw.chipset = ide_pmac;
|
hw.chipset = ide_pmac;
|
||||||
bay->cd_index = ide_register_hw(&hw, NULL, 0, NULL);
|
bay->cd_index =
|
||||||
|
ide_register_hw(&hw, NULL, NULL);
|
||||||
pmu_resume();
|
pmu_resume();
|
||||||
}
|
}
|
||||||
if (bay->cd_index == -1) {
|
if (bay->cd_index == -1) {
|
||||||
|
|
|
@ -198,10 +198,11 @@ typedef struct hw_regs_s {
|
||||||
} hw_regs_t;
|
} hw_regs_t;
|
||||||
|
|
||||||
struct hwif_s * ide_find_port(unsigned long);
|
struct hwif_s * ide_find_port(unsigned long);
|
||||||
|
void ide_init_port_data(struct hwif_s *, unsigned int);
|
||||||
void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
|
void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
|
||||||
|
|
||||||
struct ide_drive_s;
|
struct ide_drive_s;
|
||||||
int ide_register_hw(hw_regs_t *, void (*)(struct ide_drive_s *), int,
|
int ide_register_hw(hw_regs_t *, void (*)(struct ide_drive_s *),
|
||||||
struct hwif_s **);
|
struct hwif_s **);
|
||||||
|
|
||||||
void ide_setup_ports( hw_regs_t *hw,
|
void ide_setup_ports( hw_regs_t *hw,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче