# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.1593 -> 1.1594 # drivers/scsi/scsiiom.c 1.5 -> 1.6 # drivers/scsi/tmscsim.c 1.30 -> 1.31 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 04/02/22 hch@bird.bsdonline.org 1.1594 # implemente slave_configure # -------------------------------------------- # diff -Nru a/drivers/scsi/scsiiom.c b/drivers/scsi/scsiiom.c --- a/drivers/scsi/scsiiom.c Sun Feb 22 19:09:36 2004 +++ b/drivers/scsi/scsiiom.c Sun Feb 22 19:09:36 2004 @@ -59,7 +59,7 @@ * (pSRB->pcmd->cmnd[0] == TEST_UNIT_READY)) && pACB->scan_devices) ||*/ (pSRB->SRBFlag & AUTO_REQSENSE) ) disc_allowed = 0; - if ( (pDCB->SyncMode & SYNC_ENABLE) && (pDCB->TargetLUN == 0) && (pDCB->Inquiry7 & 0x10) && + if ( (pDCB->SyncMode & SYNC_ENABLE) && (pDCB->TargetLUN == 0) && ( ( ( (pSRB->pcmd->cmnd[0] == REQUEST_SENSE) || (pSRB->SRBFlag & AUTO_REQSENSE) ) && !(pDCB->SyncMode & SYNC_NEGO_DONE) ) || (pSRB->pcmd->cmnd[0] == INQUIRY) ) ) try_sync_nego = 1; @@ -1313,50 +1313,6 @@ /* pACB->DeviceCnt--; */ }; - -static UCHAR __inline__ -dc390_tagq_blacklist (char* name) -{ - UCHAR i; - for(i=0; iVers & 0x07) >= 2 || (ptr->RDF & 0x0F) == 2 ) - { - if ( (ptr->Flags & SCSI_INQ_CMDQUEUE) && - (pDCB->DevMode & TAG_QUEUEING_) && - /* ((pDCB->DevType == TYPE_DISK) - || (pDCB->DevType == TYPE_MOD)) &&*/ - !dc390_tagq_blacklist (((char*)ptr)+8) ) - { - if (pDCB->MaxCommand ==1) pDCB->MaxCommand = pDCB->pDCBACB->TagMaxNum; - pDCB->SyncMode |= EN_TAG_QUEUEING /* | EN_ATN_STOP */; - //pDCB->TagMask = 0; - } - else - pDCB->MaxCommand = 1; - } -}; - - -static void -dc390_add_dev (PACB pACB, PDCB pDCB, PSCSI_INQDATA ptr) -{ - UCHAR bval1 = ptr->DevType & SCSI_DEVTYPE; - pDCB->DevType = bval1; - /* if (bval1 == TYPE_DISK || bval1 == TYPE_MOD) */ - dc390_disc_tagq_set (pDCB, ptr); -}; - - void dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB ) { @@ -1576,10 +1532,6 @@ ((driver_byte(pcmd->result) & DRIVER_SENSE) && (pcmd->sense_buffer[0] & 0x70) == 0x70 && (pcmd->sense_buffer[2] & 0xf) == ILLEGAL_REQUEST) || host_byte(pcmd->result) & DID_ERROR ) { - /* device not present: remove */ - //dc390_Going_remove (pDCB, pSRB); - dc390_remove_dev (pACB, pDCB); DCB_removed = 1; - if( (pcmd->device->id == pACB->pScsiHost->max_id - 1) && ((pcmd->device->lun == 0) || (pcmd->device->lun == pACB->pScsiHost->max_lun - 1)) ) pACB->scan_devices = 0; @@ -1610,7 +1562,6 @@ else { /* device found: add */ - dc390_add_dev (pACB, pDCB, ptr); if (pACB->scan_devices) pACB->DeviceCnt++; } if( (pcmd->device->id == pACB->pScsiHost->max_id - 1) && diff -Nru a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c --- a/drivers/scsi/tmscsim.c Sun Feb 22 19:09:36 2004 +++ b/drivers/scsi/tmscsim.c Sun Feb 22 19:09:36 2004 @@ -2058,7 +2058,27 @@ sdev->hostdata = dcb; return 0; } - + +static int dc390_slave_configure(struct scsi_device *sdev) +{ + PDCB dcb = sdev->hostdata; + + if (sdev->tagged_supported) { +#if 0 /* XXX(hch): add back.. */ + char *name = ((char*)ptr)+8; + unsigned int i; + + for (i = 0; i < BADDEVCNT; i++) + if (!memcmp(name, dc390_baddevname1[i], 28)) + goto out; +#endif + dcb->MaxCommand = dcb->pDCBACB->TagMaxNum; + dcb->SyncMode |= EN_TAG_QUEUEING; + } + + return 0; +} + static void dc390_slave_destroy(struct scsi_device *sdev) { PACB acb = (PACB) sdev->host->hostdata; @@ -2326,6 +2346,7 @@ .detect = DC390_detect, .release = DC390_release, .slave_alloc = dc390_slave_alloc, + .slave_configure= dc390_slave_configure, .slave_destroy = dc390_slave_destroy, .queuecommand = DC390_queue_command, .eh_abort_handler = DC390_abort,