Commit 270390e1 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

libata-sff: introduce ata_sff_init/exit() and ata_sff_port_init()

In preparation of proper SFF/BMDMA separation, introduce
ata_sff_init/exit() and ata_sff_port_init().  These functions
currently don't do anything.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent c7087652
...@@ -5670,6 +5670,8 @@ struct ata_port *ata_port_alloc(struct ata_host *host) ...@@ -5670,6 +5670,8 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
ap->stats.unhandled_irq = 1; ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1; ap->stats.idle_irq = 1;
#endif #endif
ata_sff_port_init(ap);
return ap; return ap;
} }
...@@ -6584,6 +6586,8 @@ static void __init ata_parse_force_param(void) ...@@ -6584,6 +6586,8 @@ static void __init ata_parse_force_param(void)
static int __init ata_init(void) static int __init ata_init(void)
{ {
int rc = -ENOMEM;
ata_parse_force_param(); ata_parse_force_param();
/* /*
...@@ -6595,24 +6599,31 @@ static int __init ata_init(void) ...@@ -6595,24 +6599,31 @@ static int __init ata_init(void)
*/ */
ata_wq = create_workqueue("ata"); ata_wq = create_workqueue("ata");
if (!ata_wq) if (!ata_wq)
goto free_force_tbl; goto fail;
ata_aux_wq = create_singlethread_workqueue("ata_aux"); ata_aux_wq = create_singlethread_workqueue("ata_aux");
if (!ata_aux_wq) if (!ata_aux_wq)
goto free_wq; goto fail;
rc = ata_sff_init();
if (rc)
goto fail;
printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n");
return 0; return 0;
free_wq: fail:
destroy_workqueue(ata_wq);
free_force_tbl:
kfree(ata_force_tbl); kfree(ata_force_tbl);
return -ENOMEM; if (ata_wq)
destroy_workqueue(ata_wq);
if (ata_aux_wq)
destroy_workqueue(ata_aux_wq);
return rc;
} }
static void __exit ata_exit(void) static void __exit ata_exit(void)
{ {
ata_sff_exit();
kfree(ata_force_tbl); kfree(ata_force_tbl);
destroy_workqueue(ata_wq); destroy_workqueue(ata_wq);
destroy_workqueue(ata_aux_wq); destroy_workqueue(ata_aux_wq);
......
...@@ -3061,3 +3061,26 @@ void ata_pci_bmdma_init(struct ata_host *host) ...@@ -3061,3 +3061,26 @@ void ata_pci_bmdma_init(struct ata_host *host)
EXPORT_SYMBOL_GPL(ata_pci_bmdma_init); EXPORT_SYMBOL_GPL(ata_pci_bmdma_init);
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI */
/**
* ata_sff_port_init - Initialize SFF/BMDMA ATA port
* @ap: Port to initialize
*
* Called on port allocation to initialize SFF/BMDMA specific
* fields.
*
* LOCKING:
* None.
*/
void ata_sff_port_init(struct ata_port *ap)
{
}
int __init ata_sff_init(void)
{
return 0;
}
void __exit ata_sff_exit(void)
{
}
...@@ -203,6 +203,16 @@ static inline int sata_pmp_attach(struct ata_device *dev) ...@@ -203,6 +203,16 @@ static inline int sata_pmp_attach(struct ata_device *dev)
/* libata-sff.c */ /* libata-sff.c */
#ifdef CONFIG_ATA_SFF #ifdef CONFIG_ATA_SFF
extern void ata_pio_task(struct work_struct *work); extern void ata_pio_task(struct work_struct *work);
extern void ata_sff_port_init(struct ata_port *ap);
extern int ata_sff_init(void);
extern void ata_sff_exit(void);
#else /* CONFIG_ATA_SFF */
static inline void ata_sff_port_init(struct ata_port *ap)
{ }
static inline int ata_sff_init(void)
{ return 0; }
static inline void ata_sff_exit(void)
{ }
#endif /* CONFIG_ATA_SFF */ #endif /* CONFIG_ATA_SFF */
#endif /* __LIBATA_H__ */ #endif /* __LIBATA_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment