linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ipr iomem annotations
@ 2004-10-20 23:52 viro
  2004-10-21 21:13 ` Brian King
  0 siblings, 1 reply; 2+ messages in thread
From: viro @ 2004-10-20 23:52 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-scsi

	Annotated.  Original reused the structure that contained pointers into
remapped iomem for storing offsets in such area, so we need to split that
beast.
Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
----
diff -urN RC9-bk4-isurf/drivers/scsi/ipr.c RC9-bk4-ipr/drivers/scsi/ipr.c
--- RC9-bk4-isurf/drivers/scsi/ipr.c	Wed Oct 20 10:56:03 2004
+++ RC9-bk4-ipr/drivers/scsi/ipr.c	Wed Oct 20 19:24:35 2004
@@ -5433,7 +5433,7 @@
 
 	ENTER;
 	free_irq(pdev->irq, ioa_cfg);
-	iounmap((void *) ioa_cfg->hdw_dma_regs);
+	iounmap(ioa_cfg->hdw_dma_regs);
 	pci_release_regions(pdev);
 	ipr_free_mem(ioa_cfg);
 	scsi_host_put(ioa_cfg->host);
@@ -5624,6 +5624,10 @@
 static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg,
 				       struct Scsi_Host *host, struct pci_dev *pdev)
 {
+	const struct ipr_interrupt_offsets *p;
+	struct ipr_interrupts *t;
+	void __iomem *base;
+
 	ioa_cfg->host = host;
 	ioa_cfg->pdev = pdev;
 	ioa_cfg->log_level = ipr_log_level;
@@ -5655,17 +5659,19 @@
 	host->max_cmd_len = IPR_MAX_CDB_LEN;
 	pci_set_drvdata(pdev, ioa_cfg);
 
-	memcpy(&ioa_cfg->regs, &ioa_cfg->chip_cfg->regs, sizeof(ioa_cfg->regs));
-
-	ioa_cfg->regs.set_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.clr_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.sense_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.clr_interrupt_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.sense_interrupt_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.ioarrin_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.sense_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.set_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
-	ioa_cfg->regs.clr_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
+	p = &ioa_cfg->chip_cfg->regs;
+	t = &ioa_cfg->regs;
+	base = ioa_cfg->hdw_dma_regs;
+
+	t->set_interrupt_mask_reg = base + p->set_interrupt_mask_reg;
+	t->clr_interrupt_mask_reg = base + p->clr_interrupt_mask_reg;
+	t->sense_interrupt_mask_reg = base + p->sense_interrupt_mask_reg;
+	t->clr_interrupt_reg = base + p->clr_interrupt_reg;
+	t->sense_interrupt_reg = base + p->sense_interrupt_reg;
+	t->ioarrin_reg = base + p->ioarrin_reg;
+	t->sense_uproc_interrupt_reg = base + p->sense_uproc_interrupt_reg;
+	t->set_uproc_interrupt_reg = base + p->set_uproc_interrupt_reg;
+	t->clr_uproc_interrupt_reg = base + p->clr_uproc_interrupt_reg;
 }
 
 /**
@@ -5681,7 +5687,8 @@
 {
 	struct ipr_ioa_cfg *ioa_cfg;
 	struct Scsi_Host *host;
-	unsigned long ipr_regs, ipr_regs_pci;
+	unsigned long ipr_regs_pci;
+	void __iomem *ipr_regs;
 	u32 rc = PCIBIOS_SUCCESSFUL;
 
 	ENTER;
@@ -5715,8 +5722,7 @@
 		goto out_scsi_host_put;
 	}
 
-	ipr_regs = (unsigned long)ioremap(ipr_regs_pci,
-					  pci_resource_len(pdev, 0));
+	ipr_regs = ioremap(ipr_regs_pci, pci_resource_len(pdev, 0));
 
 	if (!ipr_regs) {
 		dev_err(&pdev->dev,
@@ -5790,7 +5796,7 @@
 cleanup_nolog:
 	ipr_free_mem(ioa_cfg);
 cleanup_nomem:
-	iounmap((void *) ipr_regs);
+	iounmap(ipr_regs);
 out_release_regions:
 	pci_release_regions(pdev);
 out_scsi_host_put:
diff -urN RC9-bk4-isurf/drivers/scsi/ipr.h RC9-bk4-ipr/drivers/scsi/ipr.h
--- RC9-bk4-isurf/drivers/scsi/ipr.h	Wed Oct 20 10:56:03 2004
+++ RC9-bk4-ipr/drivers/scsi/ipr.h	Wed Oct 20 19:24:35 2004
@@ -749,7 +749,7 @@
 	struct ipr_supported_device supp_dev;
 };
 
-struct ipr_interrupts {
+struct ipr_interrupt_offsets {
 	unsigned long set_interrupt_mask_reg;
 	unsigned long clr_interrupt_mask_reg;
 	unsigned long sense_interrupt_mask_reg;
@@ -762,10 +762,23 @@
 	unsigned long clr_uproc_interrupt_reg;
 };
 
+struct ipr_interrupts {
+	void __iomem *set_interrupt_mask_reg;
+	void __iomem *clr_interrupt_mask_reg;
+	void __iomem *sense_interrupt_mask_reg;
+	void __iomem *clr_interrupt_reg;
+
+	void __iomem *sense_interrupt_reg;
+	void __iomem *ioarrin_reg;
+	void __iomem *sense_uproc_interrupt_reg;
+	void __iomem *set_uproc_interrupt_reg;
+	void __iomem *clr_uproc_interrupt_reg;
+};
+
 struct ipr_chip_cfg_t {
 	u32 mailbox;
 	u8 cache_line_size;
-	struct ipr_interrupts regs;
+	struct ipr_interrupt_offsets regs;
 };
 
 enum ipr_shutdown_type {
@@ -884,9 +897,9 @@
 
 	const struct ipr_chip_cfg_t *chip_cfg;
 
-	unsigned long hdw_dma_regs;	/* iomapped PCI memory space */
+	void __iomem *hdw_dma_regs;	/* iomapped PCI memory space */
 	unsigned long hdw_dma_regs_pci;	/* raw PCI memory space */
-	unsigned long ioa_mailbox;
+	void __iomem *ioa_mailbox;
 	struct ipr_interrupts regs;
 
 	u16 saved_pcix_cmd_reg;

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] ipr iomem annotations
  2004-10-20 23:52 [PATCH] ipr iomem annotations viro
@ 2004-10-21 21:13 ` Brian King
  0 siblings, 0 replies; 2+ messages in thread
From: Brian King @ 2004-10-21 21:13 UTC (permalink / raw)
  To: viro; +Cc: Linus Torvalds, linux-scsi

Thanks. Patch looks good.

-Brian

viro@parcelfarce.linux.theplanet.co.uk wrote:
> 	Annotated.  Original reused the structure that contained pointers into
> remapped iomem for storing offsets in such area, so we need to split that
> beast.
> Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
> ----
> diff -urN RC9-bk4-isurf/drivers/scsi/ipr.c RC9-bk4-ipr/drivers/scsi/ipr.c
> --- RC9-bk4-isurf/drivers/scsi/ipr.c	Wed Oct 20 10:56:03 2004
> +++ RC9-bk4-ipr/drivers/scsi/ipr.c	Wed Oct 20 19:24:35 2004
> @@ -5433,7 +5433,7 @@
>  
>  	ENTER;
>  	free_irq(pdev->irq, ioa_cfg);
> -	iounmap((void *) ioa_cfg->hdw_dma_regs);
> +	iounmap(ioa_cfg->hdw_dma_regs);
>  	pci_release_regions(pdev);
>  	ipr_free_mem(ioa_cfg);
>  	scsi_host_put(ioa_cfg->host);
> @@ -5624,6 +5624,10 @@
>  static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg,
>  				       struct Scsi_Host *host, struct pci_dev *pdev)
>  {
> +	const struct ipr_interrupt_offsets *p;
> +	struct ipr_interrupts *t;
> +	void __iomem *base;
> +
>  	ioa_cfg->host = host;
>  	ioa_cfg->pdev = pdev;
>  	ioa_cfg->log_level = ipr_log_level;
> @@ -5655,17 +5659,19 @@
>  	host->max_cmd_len = IPR_MAX_CDB_LEN;
>  	pci_set_drvdata(pdev, ioa_cfg);
>  
> -	memcpy(&ioa_cfg->regs, &ioa_cfg->chip_cfg->regs, sizeof(ioa_cfg->regs));
> -
> -	ioa_cfg->regs.set_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.clr_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.sense_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.clr_interrupt_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.sense_interrupt_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.ioarrin_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.sense_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.set_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
> -	ioa_cfg->regs.clr_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
> +	p = &ioa_cfg->chip_cfg->regs;
> +	t = &ioa_cfg->regs;
> +	base = ioa_cfg->hdw_dma_regs;
> +
> +	t->set_interrupt_mask_reg = base + p->set_interrupt_mask_reg;
> +	t->clr_interrupt_mask_reg = base + p->clr_interrupt_mask_reg;
> +	t->sense_interrupt_mask_reg = base + p->sense_interrupt_mask_reg;
> +	t->clr_interrupt_reg = base + p->clr_interrupt_reg;
> +	t->sense_interrupt_reg = base + p->sense_interrupt_reg;
> +	t->ioarrin_reg = base + p->ioarrin_reg;
> +	t->sense_uproc_interrupt_reg = base + p->sense_uproc_interrupt_reg;
> +	t->set_uproc_interrupt_reg = base + p->set_uproc_interrupt_reg;
> +	t->clr_uproc_interrupt_reg = base + p->clr_uproc_interrupt_reg;
>  }
>  
>  /**
> @@ -5681,7 +5687,8 @@
>  {
>  	struct ipr_ioa_cfg *ioa_cfg;
>  	struct Scsi_Host *host;
> -	unsigned long ipr_regs, ipr_regs_pci;
> +	unsigned long ipr_regs_pci;
> +	void __iomem *ipr_regs;
>  	u32 rc = PCIBIOS_SUCCESSFUL;
>  
>  	ENTER;
> @@ -5715,8 +5722,7 @@
>  		goto out_scsi_host_put;
>  	}
>  
> -	ipr_regs = (unsigned long)ioremap(ipr_regs_pci,
> -					  pci_resource_len(pdev, 0));
> +	ipr_regs = ioremap(ipr_regs_pci, pci_resource_len(pdev, 0));
>  
>  	if (!ipr_regs) {
>  		dev_err(&pdev->dev,
> @@ -5790,7 +5796,7 @@
>  cleanup_nolog:
>  	ipr_free_mem(ioa_cfg);
>  cleanup_nomem:
> -	iounmap((void *) ipr_regs);
> +	iounmap(ipr_regs);
>  out_release_regions:
>  	pci_release_regions(pdev);
>  out_scsi_host_put:
> diff -urN RC9-bk4-isurf/drivers/scsi/ipr.h RC9-bk4-ipr/drivers/scsi/ipr.h
> --- RC9-bk4-isurf/drivers/scsi/ipr.h	Wed Oct 20 10:56:03 2004
> +++ RC9-bk4-ipr/drivers/scsi/ipr.h	Wed Oct 20 19:24:35 2004
> @@ -749,7 +749,7 @@
>  	struct ipr_supported_device supp_dev;
>  };
>  
> -struct ipr_interrupts {
> +struct ipr_interrupt_offsets {
>  	unsigned long set_interrupt_mask_reg;
>  	unsigned long clr_interrupt_mask_reg;
>  	unsigned long sense_interrupt_mask_reg;
> @@ -762,10 +762,23 @@
>  	unsigned long clr_uproc_interrupt_reg;
>  };
>  
> +struct ipr_interrupts {
> +	void __iomem *set_interrupt_mask_reg;
> +	void __iomem *clr_interrupt_mask_reg;
> +	void __iomem *sense_interrupt_mask_reg;
> +	void __iomem *clr_interrupt_reg;
> +
> +	void __iomem *sense_interrupt_reg;
> +	void __iomem *ioarrin_reg;
> +	void __iomem *sense_uproc_interrupt_reg;
> +	void __iomem *set_uproc_interrupt_reg;
> +	void __iomem *clr_uproc_interrupt_reg;
> +};
> +
>  struct ipr_chip_cfg_t {
>  	u32 mailbox;
>  	u8 cache_line_size;
> -	struct ipr_interrupts regs;
> +	struct ipr_interrupt_offsets regs;
>  };
>  
>  enum ipr_shutdown_type {
> @@ -884,9 +897,9 @@
>  
>  	const struct ipr_chip_cfg_t *chip_cfg;
>  
> -	unsigned long hdw_dma_regs;	/* iomapped PCI memory space */
> +	void __iomem *hdw_dma_regs;	/* iomapped PCI memory space */
>  	unsigned long hdw_dma_regs_pci;	/* raw PCI memory space */
> -	unsigned long ioa_mailbox;
> +	void __iomem *ioa_mailbox;
>  	struct ipr_interrupts regs;
>  
>  	u16 saved_pcix_cmd_reg;
> -
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-- 
Brian King
eServer Storage I/O
IBM Linux Technology Center


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-10-21 21:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-10-20 23:52 [PATCH] ipr iomem annotations viro
2004-10-21 21:13 ` Brian King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).