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

Commit ffe75ef6 authored by Jeff Garzik's avatar Jeff Garzik
Browse files

Merge branch 'upstream'

parents 9dc26323 e710245b
Loading
Loading
Loading
Loading
+1072 −0

File changed.

Preview size limit exceeded, changes collapsed.

+25 −6
Original line number Diff line number Diff line
@@ -672,19 +672,38 @@ static irqreturn_t ahci_interrupt (int irq, void *dev_instance, struct pt_regs *

        for (i = 0; i < host_set->n_ports; i++) {
		struct ata_port *ap;
		u32 tmp;

		VPRINTK("port %u\n", i);
		if (!(irq_stat & (1 << i)))
			continue;

		ap = host_set->ports[i];
		tmp = irq_stat & (1 << i);
		if (tmp && ap) {
		if (ap) {
			struct ata_queued_cmd *qc;
			qc = ata_qc_from_tag(ap, ap->active_tag);
			if (ahci_host_intr(ap, qc))
				irq_ack |= (1 << i);
			if (!ahci_host_intr(ap, qc))
				if (ata_ratelimit()) {
					struct pci_dev *pdev =
					  to_pci_dev(ap->host_set->dev);
					printk(KERN_WARNING
					  "ahci(%s): unhandled interrupt on port %u\n",
					  pci_name(pdev), i);
				}

			VPRINTK("port %u\n", i);
		} else {
			VPRINTK("port %u (no irq)\n", i);
			if (ata_ratelimit()) {
				struct pci_dev *pdev =
				  to_pci_dev(ap->host_set->dev);
				printk(KERN_WARNING
				  "ahci(%s): interrupt on disabled port %u\n",
				  pci_name(pdev), i);
			}
		}

		irq_ack |= (1 << i);
	}

	if (irq_ack) {
		writel(irq_ack, mmio + HOST_IRQ_STAT);
		handled = 1;
+259 −174

File changed.

Preview size limit exceeded, changes collapsed.

+494 −170

File changed.

Preview size limit exceeded, changes collapsed.

+6 −10
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ struct ata_scsi_args {

/* libata-core.c */
extern int atapi_enabled;
extern int ata_qc_complete_noop(struct ata_queued_cmd *qc, u8 drv_stat);
extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap,
				      struct ata_device *dev);
extern void ata_qc_free(struct ata_queued_cmd *qc);
@@ -53,6 +54,9 @@ extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);


/* libata-scsi.c */
extern void atapi_request_sense(struct ata_port *ap, struct ata_device *dev,
			 struct scsi_cmnd *cmd);
extern void ata_scsi_scan_host(struct ata_port *ap);
extern int ata_scsi_error(struct Scsi_Host *host);
extern unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
			       unsigned int buflen);
@@ -77,18 +81,10 @@ extern unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
extern void ata_scsi_badcmd(struct scsi_cmnd *cmd,
			    void (*done)(struct scsi_cmnd *),
			    u8 asc, u8 ascq);
extern void ata_scsi_set_sense(struct scsi_cmnd *cmd,
			       u8 sk, u8 asc, u8 ascq);
extern void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
                        unsigned int (*actor) (struct ata_scsi_args *args,
                                           u8 *rbuf, unsigned int buflen));

static inline void ata_bad_scsiop(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
{
	ata_scsi_badcmd(cmd, done, 0x20, 0x00);
}

static inline void ata_bad_cdb(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
{
	ata_scsi_badcmd(cmd, done, 0x24, 0x00);
}

#endif /* __LIBATA_H__ */
Loading