ide: remove IDE_ARCH_LOCK (v2)
* Add ->{get,release}_lock methods to struct ide_port_info and struct ide_host. * Convert core IDE code, m68k IDE code and falconide support to use ->{get,release}_lock methods instead of ide_{get,release}_lock(). * Remove IDE_ARCH_LOCK. v2: * Build fix from Geert updating ide_{get,release}_lock() callers in falconide.c. Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Michael Schmitz <schmitz@debian.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
@@ -36,11 +36,6 @@
|
|||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
|
||||||
#ifdef CONFIG_ATARI
|
|
||||||
#include <linux/interrupt.h>
|
|
||||||
#include <asm/atari_stdma.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_MAC
|
#ifdef CONFIG_MAC
|
||||||
#include <asm/macints.h>
|
#include <asm/macints.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -92,36 +87,5 @@
|
|||||||
#define outsw_swapw(port, addr, n) raw_outsw_swapw((u16 *)port, addr, n)
|
#define outsw_swapw(port, addr, n) raw_outsw_swapw((u16 *)port, addr, n)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_BLK_DEV_FALCON_IDE
|
|
||||||
#define IDE_ARCH_LOCK
|
|
||||||
|
|
||||||
extern int falconide_intr_lock;
|
|
||||||
|
|
||||||
static __inline__ void ide_release_lock (void)
|
|
||||||
{
|
|
||||||
if (MACH_IS_ATARI) {
|
|
||||||
if (falconide_intr_lock == 0) {
|
|
||||||
printk("ide_release_lock: bug\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
falconide_intr_lock = 0;
|
|
||||||
stdma_release();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline__ void
|
|
||||||
ide_get_lock(irq_handler_t handler, void *data)
|
|
||||||
{
|
|
||||||
if (MACH_IS_ATARI) {
|
|
||||||
if (falconide_intr_lock == 0) {
|
|
||||||
if (in_interrupt() > 0)
|
|
||||||
panic( "Falcon IDE hasn't ST-DMA lock in interrupt" );
|
|
||||||
stdma_lock(handler, data);
|
|
||||||
falconide_intr_lock = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_BLK_DEV_FALCON_IDE */
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* _M68K_IDE_H */
|
#endif /* _M68K_IDE_H */
|
||||||
|
@@ -40,8 +40,27 @@
|
|||||||
* which is shared between several drivers.
|
* which is shared between several drivers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int falconide_intr_lock;
|
static int falconide_intr_lock;
|
||||||
EXPORT_SYMBOL(falconide_intr_lock);
|
|
||||||
|
static void falconide_release_lock(void)
|
||||||
|
{
|
||||||
|
if (falconide_intr_lock == 0) {
|
||||||
|
printk(KERN_ERR "%s: bug\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
falconide_intr_lock = 0;
|
||||||
|
stdma_release();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void falconide_get_lock(irq_handler_t handler, void *data)
|
||||||
|
{
|
||||||
|
if (falconide_intr_lock == 0) {
|
||||||
|
if (in_interrupt() > 0)
|
||||||
|
panic("Falcon IDE hasn't ST-DMA lock in interrupt");
|
||||||
|
stdma_lock(handler, data);
|
||||||
|
falconide_intr_lock = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void falconide_input_data(ide_drive_t *drive, struct request *rq,
|
static void falconide_input_data(ide_drive_t *drive, struct request *rq,
|
||||||
void *buf, unsigned int len)
|
void *buf, unsigned int len)
|
||||||
@@ -81,6 +100,8 @@ static const struct ide_tp_ops falconide_tp_ops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct ide_port_info falconide_port_info = {
|
static const struct ide_port_info falconide_port_info = {
|
||||||
|
.get_lock = falconide_get_lock,
|
||||||
|
.release_lock = falconide_release_lock,
|
||||||
.tp_ops = &falconide_tp_ops,
|
.tp_ops = &falconide_tp_ops,
|
||||||
.host_flags = IDE_HFLAG_NO_DMA | IDE_HFLAG_SERIALIZE,
|
.host_flags = IDE_HFLAG_NO_DMA | IDE_HFLAG_SERIALIZE,
|
||||||
};
|
};
|
||||||
@@ -132,9 +153,9 @@ static int __init falconide_init(void)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
ide_get_lock(NULL, NULL);
|
falconide_get_lock(NULL, NULL);
|
||||||
rc = ide_host_register(host, &falconide_port_info, hws);
|
rc = ide_host_register(host, &falconide_port_info, hws);
|
||||||
ide_release_lock();
|
falconide_release_lock();
|
||||||
|
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_free;
|
goto err_free;
|
||||||
|
@@ -501,8 +501,8 @@ static inline int ide_lock_host(struct ide_host *host, ide_hwif_t *hwif)
|
|||||||
if (host->host_flags & IDE_HFLAG_SERIALIZE) {
|
if (host->host_flags & IDE_HFLAG_SERIALIZE) {
|
||||||
rc = test_and_set_bit_lock(IDE_HOST_BUSY, &host->host_busy);
|
rc = test_and_set_bit_lock(IDE_HOST_BUSY, &host->host_busy);
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
/* for atari only */
|
if (host->get_lock)
|
||||||
ide_get_lock(ide_intr, hwif);
|
host->get_lock(ide_intr, hwif);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
@@ -511,8 +511,8 @@ static inline int ide_lock_host(struct ide_host *host, ide_hwif_t *hwif)
|
|||||||
static inline void ide_unlock_host(struct ide_host *host)
|
static inline void ide_unlock_host(struct ide_host *host)
|
||||||
{
|
{
|
||||||
if (host->host_flags & IDE_HFLAG_SERIALIZE) {
|
if (host->host_flags & IDE_HFLAG_SERIALIZE) {
|
||||||
/* for atari only */
|
if (host->release_lock)
|
||||||
ide_release_lock();
|
host->release_lock();
|
||||||
clear_bit_unlock(IDE_HOST_BUSY, &host->host_busy);
|
clear_bit_unlock(IDE_HOST_BUSY, &host->host_busy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1325,6 +1325,8 @@ struct ide_host *ide_host_alloc(const struct ide_port_info *d, hw_regs_t **hws)
|
|||||||
|
|
||||||
if (d) {
|
if (d) {
|
||||||
host->init_chipset = d->init_chipset;
|
host->init_chipset = d->init_chipset;
|
||||||
|
host->get_lock = d->get_lock;
|
||||||
|
host->release_lock = d->release_lock;
|
||||||
host->host_flags = d->host_flags;
|
host->host_flags = d->host_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -202,12 +202,6 @@ static inline void ide_std_init_ports(hw_regs_t *hw,
|
|||||||
|
|
||||||
#define MAX_HWIFS 10
|
#define MAX_HWIFS 10
|
||||||
|
|
||||||
/* Currently only Atari needs it */
|
|
||||||
#ifndef IDE_ARCH_LOCK
|
|
||||||
# define ide_release_lock() do {} while (0)
|
|
||||||
# define ide_get_lock(hdlr, data) do {} while (0)
|
|
||||||
#endif /* IDE_ARCH_LOCK */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now for the data we need to maintain per-drive: ide_drive_t
|
* Now for the data we need to maintain per-drive: ide_drive_t
|
||||||
*/
|
*/
|
||||||
@@ -845,8 +839,14 @@ struct ide_host {
|
|||||||
ide_hwif_t *ports[MAX_HOST_PORTS + 1];
|
ide_hwif_t *ports[MAX_HOST_PORTS + 1];
|
||||||
unsigned int n_ports;
|
unsigned int n_ports;
|
||||||
struct device *dev[2];
|
struct device *dev[2];
|
||||||
|
|
||||||
int (*init_chipset)(struct pci_dev *);
|
int (*init_chipset)(struct pci_dev *);
|
||||||
|
|
||||||
|
void (*get_lock)(irq_handler_t, void *);
|
||||||
|
void (*release_lock)(void);
|
||||||
|
|
||||||
irq_handler_t irq_handler;
|
irq_handler_t irq_handler;
|
||||||
|
|
||||||
unsigned long host_flags;
|
unsigned long host_flags;
|
||||||
void *host_priv;
|
void *host_priv;
|
||||||
ide_hwif_t *cur_port; /* for hosts requiring serialization */
|
ide_hwif_t *cur_port; /* for hosts requiring serialization */
|
||||||
@@ -1358,7 +1358,12 @@ enum {
|
|||||||
|
|
||||||
struct ide_port_info {
|
struct ide_port_info {
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
int (*init_chipset)(struct pci_dev *);
|
int (*init_chipset)(struct pci_dev *);
|
||||||
|
|
||||||
|
void (*get_lock)(irq_handler_t, void *);
|
||||||
|
void (*release_lock)(void);
|
||||||
|
|
||||||
void (*init_iops)(ide_hwif_t *);
|
void (*init_iops)(ide_hwif_t *);
|
||||||
void (*init_hwif)(ide_hwif_t *);
|
void (*init_hwif)(ide_hwif_t *);
|
||||||
int (*init_dma)(ide_hwif_t *,
|
int (*init_dma)(ide_hwif_t *,
|
||||||
|
Reference in New Issue
Block a user