Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 68830
b: refs/heads/master
c: 394dbf3
h: refs/heads/master
v: v3
  • Loading branch information
Matthew Wilcox authored and James Bottomley committed Oct 12, 2007
1 parent 439be7e commit ceffbc0
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 64 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4a2d31c811542d37258b3976975395cb1c0fba1c
refs/heads/master: 394dbf3f4005622fa52f1805eb950f08ce20f636
104 changes: 41 additions & 63 deletions trunk/drivers/scsi/advansys.c
Original file line number Diff line number Diff line change
Expand Up @@ -1380,7 +1380,6 @@ typedef struct asc_dvc_cfg {
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
Expand Down Expand Up @@ -1831,7 +1830,6 @@ static void AscMemDWordCopyPtrToLram(PortAddr, ushort, uchar *, int);
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);
Expand Down Expand Up @@ -2827,7 +2825,6 @@ typedef struct adv_dvc_cfg {
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;
Expand Down Expand Up @@ -3000,7 +2997,6 @@ static void DvcDelayMicroSecond(ADV_DVC_VAR *, ushort);
*/
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 *);
Expand Down Expand Up @@ -3597,6 +3593,7 @@ typedef struct adv_req {
* 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 {
Expand Down Expand Up @@ -4672,25 +4669,19 @@ static void asc_scsi_done_list(struct scsi_cmnd *scp)
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);
scp->host_scribble = NULL;

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);

Expand Down Expand Up @@ -4929,8 +4920,6 @@ static int asc_execute_scsi_cmnd(struct scsi_cmnd *scp)
*/
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.
Expand Down Expand Up @@ -4994,7 +4983,7 @@ static int asc_build_req(asc_board_t *boardp, struct scsi_cmnd *scp)
*/
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);
Expand All @@ -5012,15 +5001,14 @@ static int asc_build_req(asc_board_t *boardp, struct scsi_cmnd *scp)
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);
Expand Down Expand Up @@ -5081,7 +5069,6 @@ adv_build_req(asc_board_t *boardp, struct scsi_cmnd *scp,
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
Expand Down Expand Up @@ -5168,7 +5155,7 @@ adv_build_req(asc_board_t *boardp, struct scsi_cmnd *scp,
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 {
Expand All @@ -5189,35 +5176,33 @@ adv_build_req(asc_board_t *boardp, struct scsi_cmnd *scp,
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;

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;
Expand Down Expand Up @@ -10219,30 +10204,21 @@ static ushort __devinit AscInitGetConfig(ASC_DVC_VAR *asc_dvc)
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));
Expand All @@ -10265,7 +10241,6 @@ static ushort __devinit AscInitFromAscDvcVar(ASC_DVC_VAR *asc_dvc)
}
#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) {
Expand Down Expand Up @@ -10295,7 +10270,9 @@ static ushort __devinit AscInitFromAscDvcVar(ASC_DVC_VAR *asc_dvc)
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)
Expand Down Expand Up @@ -13599,11 +13576,11 @@ static ADVEEP_38C1600_CONFIG ADVEEP_38C1600_Config_Field_IsChar __devinitdata =
* 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;

Expand Down Expand Up @@ -17094,6 +17071,7 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
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.
Expand Down Expand Up @@ -17180,7 +17158,6 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
#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().
Expand Down Expand Up @@ -17220,7 +17197,6 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
break;
}
} else {
adv_dvc_varp->cfg->dev = dev;
/*
* For Wide boards set PCI information before calling
* AdvInitGetConfig().
Expand Down Expand Up @@ -17289,7 +17265,9 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
}
} 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);
Expand Down Expand Up @@ -17345,7 +17323,7 @@ advansys_board_found(int iop, struct device *dev, int bus_type)
* 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:
Expand Down

0 comments on commit ceffbc0

Please sign in to comment.