Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1028e2f authored by Alexander Gordeev's avatar Alexander Gordeev Committed by Tejun Heo
Browse files

AHCI: Move host activation code into ahci_host_activate()



Currently host activation done by calling either function
ahci_host_activate() or ata_host_activate(). Consolidate
the code by only calling ahci_host_activate() for all AHCI
devices.

Signed-off-by: default avatarAlexander Gordeev <agordeev@redhat.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Cc: linux-ide@vger.kernel.org
parent 1c62854f
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -498,8 +498,7 @@ static int acard_ahci_init_one(struct pci_dev *pdev, const struct pci_device_id
	acard_ahci_pci_print_info(host);

	pci_set_master(pdev);
	return ata_host_activate(host, pdev->irq, ahci_interrupt, IRQF_SHARED,
				 &acard_ahci_sht);
	return ahci_host_activate(host, pdev->irq, &acard_ahci_sht);
}

module_pci_driver(acard_ahci_pci_driver);
+1 −5
Original line number Diff line number Diff line
@@ -1427,11 +1427,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)

	pci_set_master(pdev);

	if (hpriv->flags & AHCI_HFLAG_MULTI_MSI)
	return ahci_host_activate(host, pdev->irq, &ahci_sht);

	return ata_host_activate(host, pdev->irq, ahci_interrupt, IRQF_SHARED,
				 &ahci_sht);
}

module_pci_driver(ahci_pci_driver);
+0 −3
Original line number Diff line number Diff line
@@ -388,9 +388,6 @@ int ahci_port_resume(struct ata_port *ap);
void ahci_set_em_messages(struct ahci_host_priv *hpriv,
			  struct ata_port_info *pi);
int ahci_reset_em(struct ata_host *host);
irqreturn_t ahci_interrupt(int irq, void *dev_instance);
irqreturn_t ahci_hw_interrupt(int irq, void *dev_instance);
irqreturn_t ahci_thread_fn(int irq, void *dev_instance);
void ahci_print_info(struct ata_host *host, const char *scc_s);
int ahci_host_activate(struct ata_host *host, int irq,
		       struct scsi_host_template *sht);
+35 −24
Original line number Diff line number Diff line
@@ -1789,7 +1789,7 @@ static void ahci_port_intr(struct ata_port *ap)
	ahci_handle_port_interrupt(ap, port_mmio, status);
}

irqreturn_t ahci_thread_fn(int irq, void *dev_instance)
static irqreturn_t ahci_thread_fn(int irq, void *dev_instance)
{
	struct ata_port *ap = dev_instance;
	struct ahci_port_priv *pp = ap->private_data;
@@ -1809,7 +1809,6 @@ irqreturn_t ahci_thread_fn(int irq, void *dev_instance)

	return IRQ_HANDLED;
}
EXPORT_SYMBOL_GPL(ahci_thread_fn);

static void ahci_hw_port_interrupt(struct ata_port *ap)
{
@@ -1823,7 +1822,7 @@ static void ahci_hw_port_interrupt(struct ata_port *ap)
	pp->intr_status |= status;
}

irqreturn_t ahci_hw_interrupt(int irq, void *dev_instance)
static irqreturn_t ahci_hw_interrupt(int irq, void *dev_instance)
{
	struct ata_port *ap_this = dev_instance;
	struct ahci_port_priv *pp = ap_this->private_data;
@@ -1877,9 +1876,8 @@ irqreturn_t ahci_hw_interrupt(int irq, void *dev_instance)

	return IRQ_WAKE_THREAD;
}
EXPORT_SYMBOL_GPL(ahci_hw_interrupt);

irqreturn_t ahci_interrupt(int irq, void *dev_instance)
static irqreturn_t ahci_interrupt(int irq, void *dev_instance)
{
	struct ata_host *host = dev_instance;
	struct ahci_host_priv *hpriv;
@@ -1938,7 +1936,6 @@ irqreturn_t ahci_interrupt(int irq, void *dev_instance)

	return IRQ_RETVAL(handled);
}
EXPORT_SYMBOL_GPL(ahci_interrupt);

unsigned int ahci_qc_issue(struct ata_queued_cmd *qc)
{
@@ -2472,23 +2469,7 @@ void ahci_set_em_messages(struct ahci_host_priv *hpriv,
}
EXPORT_SYMBOL_GPL(ahci_set_em_messages);

/**
 *	ahci_host_activate - start AHCI host, request IRQs and register it
 *	@host: target ATA host
 *	@irq: base IRQ number to request
 *	@sht: scsi_host_template to use when registering the host
 *
 *	Similar to ata_host_activate, but requests IRQs according to AHCI-1.1
 *	when multiple MSIs were allocated. That is one MSI per port, starting
 *	from @irq.
 *
 *	LOCKING:
 *	Inherited from calling layer (may sleep).
 *
 *	RETURNS:
 *	0 on success, -errno otherwise.
 */
int ahci_host_activate(struct ata_host *host, int irq,
static int ahci_host_activate_multi_irqs(struct ata_host *host, int irq,
					 struct scsi_host_template *sht)
{
	int i, rc;
@@ -2531,6 +2512,36 @@ int ahci_host_activate(struct ata_host *host, int irq,

	return rc;
}

/**
 *	ahci_host_activate - start AHCI host, request IRQs and register it
 *	@host: target ATA host
 *	@irq: base IRQ number to request
 *	@sht: scsi_host_template to use when registering the host
 *
 *	Similar to ata_host_activate, but requests IRQs according to AHCI-1.1
 *	when multiple MSIs were allocated. That is one MSI per port, starting
 *	from @irq.
 *
 *	LOCKING:
 *	Inherited from calling layer (may sleep).
 *
 *	RETURNS:
 *	0 on success, -errno otherwise.
 */
int ahci_host_activate(struct ata_host *host, int irq,
		       struct scsi_host_template *sht)
{
	struct ahci_host_priv *hpriv = host->private_data;
	int rc;

	if (hpriv->flags & AHCI_HFLAG_MULTI_MSI)
		rc = ahci_host_activate_multi_irqs(host, irq, sht);
	else
		rc = ata_host_activate(host, irq, ahci_interrupt,
				       IRQF_SHARED, sht);
	return rc;
}
EXPORT_SYMBOL_GPL(ahci_host_activate);

MODULE_AUTHOR("Jeff Garzik");
+1 −2
Original line number Diff line number Diff line
@@ -493,8 +493,7 @@ int ahci_platform_init_host(struct platform_device *pdev,
	ahci_init_controller(host);
	ahci_print_info(host, "platform");

	return ata_host_activate(host, irq, ahci_interrupt, IRQF_SHARED,
				 &ahci_platform_sht);
	return ahci_host_activate(host, irq, &ahci_platform_sht);
}
EXPORT_SYMBOL_GPL(ahci_platform_init_host);

Loading