[SCSI] advansys: Move struct device out of the cfg structures

The cfg structures are supposed to be disposable after initialisation;
with the 'dev' used for DMA mapping in there, that's not possible.  Move
the dev to the board.

Also inline AscInitFromAscDvcVar into its only caller, remove some
unnecessary prototypes and sort out a few minor formatting issues.

Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index e79f795..73d974a 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -1380,7 +1380,6 @@
 	uchar sdtr_period_offset[ASC_MAX_TID + 1];
 	ushort pci_slot_info;
 	uchar adapter_info[6];
-	struct device *dev;
 } ASC_DVC_CFG;
 
 #define ASC_DEF_DVC_CNTL       0xFFFF
@@ -1831,7 +1830,6 @@
 static void AscMemWordCopyPtrFromLram(PortAddr, ushort, uchar *, int);
 static ushort AscInitAscDvcVar(ASC_DVC_VAR *);
 static ushort AscInitFromEEP(ASC_DVC_VAR *);
-static ushort AscInitFromAscDvcVar(ASC_DVC_VAR *);
 static ushort AscInitMicroCodeVar(ASC_DVC_VAR *);
 static int AscTestExternalLram(ASC_DVC_VAR *);
 static uchar AscMsgOutSDTR(ASC_DVC_VAR *, uchar, uchar);
@@ -2827,7 +2825,6 @@
 	ushort serial1;		/* EEPROM serial number word 1 */
 	ushort serial2;		/* EEPROM serial number word 2 */
 	ushort serial3;		/* EEPROM serial number word 3 */
-	struct device *dev;	/* pointer to the pci dev structure for this board */
 } ADV_DVC_CFG;
 
 struct adv_dvc_var;
@@ -3000,7 +2997,6 @@
  */
 static int AdvExeScsiQueue(ADV_DVC_VAR *, ADV_SCSI_REQ_Q *);
 static int AdvISR(ADV_DVC_VAR *);
-static int AdvInitGetConfig(ADV_DVC_VAR *);
 static int AdvInitAsc3550Driver(ADV_DVC_VAR *);
 static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *);
 static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *);
@@ -3597,6 +3593,7 @@
  * field. It is guaranteed to be allocated from DMA-able memory.
  */
 typedef struct asc_board {
+	struct device *dev;
 	int id;			/* Board Id */
 	uint flags;		/* Board flags */
 	union {
@@ -4672,7 +4669,6 @@
 	ASC_DBG(2, "asc_scsi_done_list: begin\n");
 	while (scp != NULL) {
 		asc_board_t *boardp;
-		struct device *dev;
 
 		ASC_DBG1(3, "asc_scsi_done_list: scp 0x%lx\n", (ulong)scp);
 		tscp = REQPNEXT(scp);
@@ -4680,17 +4676,12 @@
 
 		boardp = ASC_BOARDP(scp->device->host);
 
-		if (ASC_NARROW_BOARD(boardp))
-			dev = boardp->dvc_cfg.asc_dvc_cfg.dev;
-		else
-			dev = boardp->dvc_cfg.adv_dvc_cfg.dev;
-
 		if (scp->use_sg)
-			dma_unmap_sg(dev,
+			dma_unmap_sg(boardp->dev,
 				     (struct scatterlist *)scp->request_buffer,
 				     scp->use_sg, scp->sc_data_direction);
 		else if (scp->request_bufflen)
-			dma_unmap_single(dev, scp->SCp.dma_handle,
+			dma_unmap_single(boardp->dev, scp->SCp.dma_handle,
 					 scp->request_bufflen,
 					 scp->sc_data_direction);
 
@@ -4929,8 +4920,6 @@
  */
 static int asc_build_req(asc_board_t *boardp, struct scsi_cmnd *scp)
 {
-	struct device *dev = boardp->dvc_cfg.asc_dvc_cfg.dev;
-
 	/*
 	 * Mutually exclusive access is required to 'asc_scsi_q' and
 	 * 'asc_sg_head' until after the request is started.
@@ -4994,7 +4983,7 @@
 		 */
 		ASC_STATS(scp->device->host, cont_cnt);
 		scp->SCp.dma_handle = scp->request_bufflen ?
-		    dma_map_single(dev, scp->request_buffer,
+		    dma_map_single(boardp->dev, scp->request_buffer,
 				   scp->request_bufflen,
 				   scp->sc_data_direction) : 0;
 		asc_scsi_q.q1.data_addr = cpu_to_le32(scp->SCp.dma_handle);
@@ -5012,15 +5001,14 @@
 		struct scatterlist *slp;
 
 		slp = (struct scatterlist *)scp->request_buffer;
-		use_sg =
-		    dma_map_sg(dev, slp, scp->use_sg, scp->sc_data_direction);
+		use_sg = dma_map_sg(boardp->dev, slp, scp->use_sg,
+				    scp->sc_data_direction);
 
 		if (use_sg > scp->device->host->sg_tablesize) {
-			ASC_PRINT3
-			    ("asc_build_req: board %d: use_sg %d > sg_tablesize %d\n",
-			     boardp->id, use_sg,
-			     scp->device->host->sg_tablesize);
-			dma_unmap_sg(dev, slp, scp->use_sg,
+			ASC_PRINT3("asc_build_req: board %d: use_sg %d > "
+				   "sg_tablesize %d\n", boardp->id, use_sg,
+				   scp->device->host->sg_tablesize);
+			dma_unmap_sg(boardp->dev, slp, scp->use_sg,
 				     scp->sc_data_direction);
 			scp->result = HOST_BYTE(DID_ERROR);
 			asc_enqueue(&boardp->done, scp, ASC_BACK);
@@ -5081,7 +5069,6 @@
 	ADV_SCSI_REQ_Q *scsiqp;
 	int i;
 	int ret;
-	struct device *dev = boardp->dvc_cfg.adv_dvc_cfg.dev;
 
 	/*
 	 * Allocate an adv_req_t structure from the board to execute
@@ -5168,7 +5155,7 @@
 		if (scp->request_bufflen) {
 			scsiqp->vdata_addr = scp->request_buffer;
 			scp->SCp.dma_handle =
-			    dma_map_single(dev, scp->request_buffer,
+			    dma_map_single(boardp->dev, scp->request_buffer,
 					   scp->request_bufflen,
 					   scp->sc_data_direction);
 		} else {
@@ -5189,22 +5176,21 @@
 		int use_sg;
 
 		slp = (struct scatterlist *)scp->request_buffer;
-		use_sg =
-		    dma_map_sg(dev, slp, scp->use_sg, scp->sc_data_direction);
+		use_sg = dma_map_sg(boardp->dev, slp, scp->use_sg,
+				    scp->sc_data_direction);
 
 		if (use_sg > ADV_MAX_SG_LIST) {
-			ASC_PRINT3
-			    ("adv_build_req: board %d: use_sg %d > ADV_MAX_SG_LIST %d\n",
-			     boardp->id, use_sg,
-			     scp->device->host->sg_tablesize);
-			dma_unmap_sg(dev, slp, scp->use_sg,
+			ASC_PRINT3("adv_build_req: board %d: use_sg %d > "
+				   "ADV_MAX_SG_LIST %d\n", boardp->id, use_sg,
+				   scp->device->host->sg_tablesize);
+			dma_unmap_sg(boardp->dev, slp, scp->use_sg,
 				     scp->sc_data_direction);
 			scp->result = HOST_BYTE(DID_ERROR);
 			asc_enqueue(&boardp->done, scp, ASC_BACK);
 
 			/*
-			 * Free the 'adv_req_t' structure by adding it back to the
-			 * board free list.
+			 * Free the 'adv_req_t' structure by adding it back
+			 * to the board free list.
 			 */
 			reqp->next_reqp = boardp->adv_reqp;
 			boardp->adv_reqp = reqp;
@@ -5212,12 +5198,11 @@
 			return ASC_ERROR;
 		}
 
-		if ((ret =
-		     adv_get_sglist(boardp, reqp, scp,
-				    use_sg)) != ADV_SUCCESS) {
+		ret = adv_get_sglist(boardp, reqp, scp, use_sg);
+		if (ret != ADV_SUCCESS) {
 			/*
-			 * Free the adv_req_t structure by adding it back to the
-			 * board free list.
+			 * Free the adv_req_t structure by adding it back to
+			 * the board free list.
 			 */
 			reqp->next_reqp = boardp->adv_reqp;
 			boardp->adv_reqp = reqp;
@@ -10219,30 +10204,21 @@
 	return warn_code;
 }
 
-static ushort __devinit AscInitSetConfig(ASC_DVC_VAR *asc_dvc)
+static unsigned short __devinit
+AscInitSetConfig(struct pci_dev *pdev, ASC_DVC_VAR *asc_dvc)
 {
-	ushort warn_code = 0;
+	PortAddr iop_base = asc_dvc->iop_base;
+	unsigned short cfg_msw;
+	unsigned short warn_code = 0;
 
 	asc_dvc->init_state |= ASC_INIT_STATE_BEG_SET_CFG;
 	if (asc_dvc->err_code != 0)
-		return (UW_ERR);
-	if (AscFindSignature(asc_dvc->iop_base)) {
-		warn_code |= AscInitFromAscDvcVar(asc_dvc);
-		asc_dvc->init_state |= ASC_INIT_STATE_END_SET_CFG;
-	} else {
+		return UW_ERR;
+	if (!AscFindSignature(asc_dvc->iop_base)) {
 		asc_dvc->err_code = ASC_IERR_BAD_SIGNATURE;
+		return 0;
 	}
-	return (warn_code);
-}
 
-static ushort __devinit AscInitFromAscDvcVar(ASC_DVC_VAR *asc_dvc)
-{
-	PortAddr iop_base;
-	ushort cfg_msw;
-	ushort warn_code;
-
-	iop_base = asc_dvc->iop_base;
-	warn_code = 0;
 	cfg_msw = AscGetChipCfgMsw(iop_base);
 	if ((cfg_msw & ASC_CFG_MSW_CLR_MASK) != 0) {
 		cfg_msw &= (~(ASC_CFG_MSW_CLR_MASK));
@@ -10265,7 +10241,6 @@
 	}
 #ifdef CONFIG_PCI
 	if (asc_dvc->bus_type & ASC_IS_PCI) {
-		struct pci_dev *pdev = to_pci_dev(asc_dvc->cfg->dev);
 		cfg_msw &= 0xFFC0;
 		AscSetChipCfgMsw(iop_base, cfg_msw);
 		if ((asc_dvc->bus_type & ASC_IS_PCI_ULTRA) == ASC_IS_PCI_ULTRA) {
@@ -10295,7 +10270,9 @@
 		AscSetIsaDmaSpeed(iop_base, asc_dvc->cfg->isa_dma_speed);
 	}
 #endif /* CONFIG_ISA */
-	return (warn_code);
+
+	asc_dvc->init_state |= ASC_INIT_STATE_END_SET_CFG;
+	return warn_code;
 }
 
 static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc)
@@ -13599,11 +13576,11 @@
  * For a non-fatal error return a warning code. If there are no warnings
  * then 0 is returned.
  */
-static int __devinit AdvInitGetConfig(ADV_DVC_VAR *asc_dvc)
+static int __devinit
+AdvInitGetConfig(struct pci_dev *pdev, ADV_DVC_VAR *asc_dvc)
 {
 	unsigned short warn_code = 0;
 	AdvPortAddr iop_base = asc_dvc->iop_base;
-	struct pci_dev *pdev = to_pci_dev(asc_dvc->cfg->dev);
 	u16 cmd;
 	int status;
 
@@ -17094,6 +17071,7 @@
 	memset(boardp, 0, sizeof(asc_board_t));
 	boardp->id = asc_board_count++;
 	spin_lock_init(&boardp->lock);
+	boardp->dev = dev;
 
 	/*
 	 * Handle both narrow and wide boards.
@@ -17180,7 +17158,6 @@
 #endif /* CONFIG_PROC_FS */
 
 	if (ASC_NARROW_BOARD(boardp)) {
-		asc_dvc_varp->cfg->dev = dev;
 		/*
 		 * Set the board bus type and PCI IRQ before
 		 * calling AscInitGetConfig().
@@ -17220,7 +17197,6 @@
 			break;
 		}
 	} else {
-		adv_dvc_varp->cfg->dev = dev;
 		/*
 		 * For Wide boards set PCI information before calling
 		 * AdvInitGetConfig().
@@ -17289,7 +17265,9 @@
 		}
 	} else {
 		ASC_DBG(2, "advansys_board_found: AdvInitGetConfig()\n");
-		if ((ret = AdvInitGetConfig(adv_dvc_varp)) != 0) {
+
+		ret = AdvInitGetConfig(pdev, adv_dvc_varp);
+		if (ret != 0) {
 			ASC_PRINT2
 			    ("AdvInitGetConfig: board %d: warning: 0x%x\n",
 			     boardp->id, ret);
@@ -17345,7 +17323,7 @@
 		 * Modify board configuration.
 		 */
 		ASC_DBG(2, "advansys_board_found: AscInitSetConfig()\n");
-		switch (ret = AscInitSetConfig(asc_dvc_varp)) {
+		switch (ret = AscInitSetConfig(pdev, asc_dvc_varp)) {
 		case 0:	/* No error. */
 			break;
 		case ASC_WARN_IO_PORT_ROTATE: