• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/scsi/

Lines Matching refs:hostdata

247 NCR_700_offset_period_to_sxfer(struct NCR_700_Host_Parameters *hostdata,
252 __u8 min_xferp = (hostdata->chip710
254 __u8 max_offset = (hostdata->chip710
260 if(period < hostdata->min_period) {
262 period = hostdata->min_period;
264 XFERP = (period*4 * hostdata->sync_clock)/1000 - 4;
279 struct NCR_700_Host_Parameters *hostdata =
280 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
282 return NCR_700_offset_period_to_sxfer(hostdata,
289 struct NCR_700_Host_Parameters *hostdata, struct device *dev)
301 memory = dma_alloc_noncoherent(hostdata->dev, TOTAL_MEM_SIZE,
309 hostdata->msgin = memory + MSGIN_OFFSET;
310 hostdata->msgout = memory + MSGOUT_OFFSET;
311 hostdata->status = memory + STATUS_OFFSET;
312 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET);
313 hostdata->dev = dev;
340 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot)
343 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0]
344 - (unsigned long)&hostdata->slots[0].SG[0]);
345 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset));
347 hostdata->free_list = &hostdata->slots[j];
349 hostdata->slots[j-1].ITL_forw = &hostdata->slots[j];
350 hostdata->slots[j].state = NCR_700_SLOT_FREE;
360 script_patch_32(hostdata->dev, script, MessageLocation,
362 script_patch_32(hostdata->dev, script, StatusAddress,
364 script_patch_32(hostdata->dev, script, ReceiveMsgAddress,
367 hostdata->script = script;
368 hostdata->pScript = pScript;
369 dma_sync_single_for_device(hostdata->dev, pScript, sizeof(SCRIPT), DMA_TO_DEVICE);
370 hostdata->state = NCR_700_HOST_FREE;
371 hostdata->cmd = NULL;
376 host->unique_id = (unsigned long)hostdata->base;
377 hostdata->eh_complete = NULL;
378 host->hostdata[0] = (unsigned long)hostdata;
381 if (hostdata->chip710)
382 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f;
384 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f;
385 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0);
391 hostdata->chip710 ? "53c710" :
392 (hostdata->fast ? "53c700-66" : "53c700"),
393 hostdata->rev, hostdata->differential ?
404 spi_signalling(host) = hostdata->differential ? SPI_SIGNAL_HVD :
413 struct NCR_700_Host_Parameters *hostdata =
414 (struct NCR_700_Host_Parameters *)host->hostdata[0];
416 dma_free_noncoherent(hostdata->dev, TOTAL_MEM_SIZE,
417 hostdata->script, hostdata->pScript);
441 struct NCR_700_Host_Parameters *hostdata =
442 (struct NCR_700_Host_Parameters *)host->hostdata[0];
446 if(hostdata->chip710) {
454 if(hostdata->fast)
511 find_empty_slot(struct NCR_700_Host_Parameters *hostdata)
513 struct NCR_700_command_slot *slot = hostdata->free_list;
517 if(hostdata->command_slot_count != NCR_700_COMMAND_SLOTS_PER_HOST)
518 printk(KERN_ERR "SLOTS FULL, but count is %d, should be %d\n", hostdata->command_slot_count, NCR_700_COMMAND_SLOTS_PER_HOST);
527 hostdata->free_list = slot->ITL_forw;
537 hostdata->command_slot_count++;
544 struct NCR_700_Host_Parameters *hostdata)
556 slot->ITL_forw = hostdata->free_list;
557 hostdata->free_list = slot;
558 hostdata->command_slot_count--;
565 save_for_reselection(struct NCR_700_Host_Parameters *hostdata,
575 hostdata->state = NCR_700_HOST_FREE;
576 hostdata->cmd = NULL;
580 NCR_700_unmap(struct NCR_700_Host_Parameters *hostdata, struct scsi_cmnd *SCp,
589 NCR_700_scsi_done(struct NCR_700_Host_Parameters *hostdata,
592 hostdata->state = NCR_700_HOST_FREE;
593 hostdata->cmd = NULL;
599 dma_unmap_single(hostdata->dev, slot->pCmd,
609 dma_unmap_single(hostdata->dev, slot->dma_handle,
618 NCR_700_unmap(hostdata, SCp, slot);
620 free_slot(slot, hostdata);
651 struct NCR_700_Host_Parameters *hostdata =
652 (struct NCR_700_Host_Parameters *)host->hostdata[0];
654 __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP);
656 if(hostdata->chip710) {
660 switch (hostdata->burst_length) {
677 hostdata->dcntl_extra |= COMPAT_700_MODE;
679 NCR_700_writeb(hostdata->dcntl_extra, host, DCNTL_REG);
680 NCR_700_writeb(burst_length | hostdata->dmode_extra,
682 NCR_700_writeb(burst_disable | hostdata->ctest7_extra |
683 (hostdata->differential ? DIFF : 0),
689 NCR_700_writeb(BURST_LENGTH_8 | hostdata->dmode_extra,
691 NCR_700_writeb(hostdata->differential ?
693 if(hostdata->fast) {
713 if(hostdata->clock > 75) {
714 printk(KERN_ERR "53c700: Clock speed %dMHz is too high: 75Mhz is the maximum this chip can be driven at\n", hostdata->clock);
719 NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG);
720 hostdata->sync_clock = hostdata->clock/2;
721 } else if(hostdata->clock > 50 && hostdata->clock <= 75) {
725 NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG);
726 hostdata->sync_clock = hostdata->clock*2;
727 hostdata->sync_clock /= 3;
729 } else if(hostdata->clock > 37 && hostdata->clock <= 50) {
733 NCR_700_writeb(ASYNC_DIV_2_0 | hostdata->dcntl_extra, host, DCNTL_REG);
734 hostdata->sync_clock = hostdata->clock;
735 } else if(hostdata->clock > 25 && hostdata->clock <=37) {
739 NCR_700_writeb(ASYNC_DIV_1_5 | hostdata->dcntl_extra, host, DCNTL_REG);
740 hostdata->sync_clock = hostdata->clock;
744 NCR_700_writeb(ASYNC_DIV_1_0 | hostdata->dcntl_extra, host, DCNTL_REG);
746 hostdata->sync_clock = hostdata->clock;
752 min_period = 1000*(4+min_xferp)/(4*hostdata->sync_clock);
753 hostdata->min_period = NCR_700_MIN_PERIOD;
755 hostdata->min_period = min_period;
761 struct NCR_700_Host_Parameters *hostdata =
762 (struct NCR_700_Host_Parameters *)host->hostdata[0];
763 if(hostdata->chip710) {
788 struct NCR_700_Host_Parameters *hostdata,
799 switch(hostdata->msgin[2]) {
803 __u8 period = hostdata->msgin[3];
804 __u8 offset = hostdata->msgin[4];
829 hostdata->msgout[0] = A_REJECT_MSG;
830 dma_cache_sync(hostdata->dev, hostdata->msgout, 1, DMA_TO_DEVICE);
831 script_patch_16(hostdata->dev, hostdata->script,
835 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
842 hostdata->msgout[0] = A_REJECT_MSG;
843 dma_cache_sync(hostdata->dev, hostdata->msgout, 1, DMA_TO_DEVICE);
844 script_patch_16(hostdata->dev, hostdata->script, MessageCount,
846 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
854 spi_print_msg(hostdata->msgin);
857 hostdata->msgout[0] = A_REJECT_MSG;
858 dma_cache_sync(hostdata->dev, hostdata->msgout, 1, DMA_TO_DEVICE);
859 script_patch_16(hostdata->dev, hostdata->script, MessageCount,
863 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
870 process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata,
885 spi_print_msg(hostdata->msgin);
889 switch(hostdata->msgin[0]) {
892 resume_offset = process_extended_message(host, hostdata, SCp,
909 hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
928 pun, lun, hostdata->msgin[1],
937 spi_print_msg(hostdata->msgin);
940 hostdata->msgout[0] = A_REJECT_MSG;
941 dma_cache_sync(hostdata->dev, hostdata->msgout, 1, DMA_TO_DEVICE);
942 script_patch_16(hostdata->dev, hostdata->script, MessageCount,
946 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
952 dma_cache_sync(hostdata->dev, hostdata->msgin, MSG_ARRAY_SIZE, DMA_FROM_DEVICE);
959 struct NCR_700_Host_Parameters *hostdata)
971 hostdata->status[0]));
978 if(status_byte(hostdata->status[0]) == CHECK_CONDITION ||
979 status_byte(hostdata->status[0]) == COMMAND_TERMINATED) {
987 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]);
994 SCp, hostdata->status[0]);
1003 NCR_700_unmap(hostdata, SCp, slot);
1004 dma_unmap_single(hostdata->dev, slot->pCmd,
1021 cmnd[7] = hostdata->status[0];
1025 slot->pCmd = dma_map_single(hostdata->dev, cmnd, MAX_COMMAND_SIZE, DMA_TO_DEVICE);
1026 slot->dma_handle = dma_map_single(hostdata->dev, SCp->sense_buffer, SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
1031 slot->resume_offset = hostdata->pScript;
1032 dma_cache_sync(hostdata->dev, slot->SG, sizeof(slot->SG[0])*2, DMA_TO_DEVICE);
1033 dma_cache_sync(hostdata->dev, SCp->sense_buffer, SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
1038 hostdata->state = NCR_700_HOST_FREE;
1039 hostdata->cmd = NULL;
1045 //if(status_byte(hostdata->status[0]) == GOOD &&
1049 // dma_sync_single_for_cpu(hostdata->dev,
1056 // hostdata->tag_negotiated |= (1<<scmd_id(SCp));
1060 // hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
1063 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]);
1083 hostdata->msgin[0], hostdata->msgin[1]);
1094 save_for_reselection(hostdata, SCp, dsp);
1099 __u8 reselection_id = hostdata->reselection_id;
1102 lun = hostdata->msgin[0] & 0x1f;
1104 hostdata->reselection_id = 0xff;
1114 if(hostdata->msgin[1] == A_SIMPLE_TAG_MSG) {
1115 struct scsi_cmnd *SCp = scsi_find_tag(SDp, hostdata->msgin[2]);
1118 host->host_no, reselection_id, lun, hostdata->msgin[2]);
1125 hostdata->msgin[2], slot, slot->tag);
1139 hostdata->msgin[0], hostdata->msgin[1],
1140 hostdata->msgin[2]);
1142 if(hostdata->state != NCR_700_HOST_BUSY)
1146 hostdata->cmd = slot->cmnd;
1149 script_patch_32_abs(hostdata->dev, hostdata->script,
1151 script_patch_16(hostdata->dev, hostdata->script,
1153 script_patch_32_abs(hostdata->dev, hostdata->script,
1162 NCR_700_writeb(NCR_700_get_SXFER(hostdata->cmd->device),
1164 dma_cache_sync(hostdata->dev, hostdata->msgin,
1166 dma_cache_sync(hostdata->dev, hostdata->msgout,
1170 dma_cache_sync(hostdata->dev, slot->cmnd->cmnd,
1194 host->host_no, reselection_id, lun, dsp, dsp - hostdata->pScript, hostdata->state, hostdata->command_slot_count);
1197 __u32 SG = (__u32)bS_to_cpu(hostdata->script[A_SGScriptStartAddress_used[0]]);
1201 if(SG >= to32bit(&hostdata->slots[i].pSG[0])
1202 && SG <= to32bit(&hostdata->slots[i].pSG[NCR_700_SG_SEGMENTS]))
1205 printk(KERN_INFO "IDENTIFIED SG segment as being %08x in slot %p, cmd %p, slot->resume_offset=%08x\n", SG, &hostdata->slots[i], hostdata->slots[i].cmnd, hostdata->slots[i].resume_offset);
1206 SCp = hostdata->slots[i].cmnd;
1214 hostdata->cmd = NULL;
1217 if(hostdata->reselection_id == 0xff) {
1223 reselection_id = hostdata->reselection_id;
1230 hostdata->reselection_id = reselection_id;
1232 hostdata->msgin[1] = 0;
1233 dma_cache_sync(hostdata->dev, hostdata->msgin,
1235 if(hostdata->tag_negotiated & (1<<reselection_id)) {
1236 resume_offset = hostdata->pScript + Ent_GetReselectionWithTag;
1238 resume_offset = hostdata->pScript + Ent_GetReselectionData;
1246 resume_offset = process_message(host, hostdata, SCp,
1252 NCR_700_phase[j], dsp - hostdata->pScript);
1264 host->host_no, pun, lun, dsps & 0xfff, dsp, dsp - hostdata->pScript);
1268 host->host_no, pun, lun, dsps, dsp - hostdata->pScript);
1287 struct NCR_700_Host_Parameters *hostdata =
1288 (struct NCR_700_Host_Parameters *)host->hostdata[0];
1289 struct scsi_cmnd *SCp = hostdata->cmd;
1293 id = NCR_700_readb(host, hostdata->chip710 ?
1308 hostdata->reselection_id = id = bitmap_to_number(id);
1312 if(hostdata->state == NCR_700_HOST_BUSY && SCp != NULL) {
1315 DEBUG((" ID %d WARNING: RESELECTION OF BUSY HOST, saving cmd %p, slot %p, addr %x [%04x], resume %x!\n", id, hostdata->cmd, slot, dsp, dsp - hostdata->pScript, resume_offset));
1317 switch(dsp - hostdata->pScript) {
1320 save_for_reselection(hostdata, SCp, Ent_Disconnect2 + hostdata->pScript);
1324 save_for_reselection(hostdata, SCp, Ent_Disconnect4 + hostdata->pScript);
1328 save_for_reselection(hostdata, SCp, Ent_Disconnect6 + hostdata->pScript);
1332 save_for_reselection(hostdata, SCp, Ent_Disconnect8 + hostdata->pScript);
1336 process_script_interrupt(A_GOOD_STATUS_AFTER_STATUS, dsp, SCp, host, hostdata);
1344 hostdata->state = NCR_700_HOST_BUSY;
1345 hostdata->cmd = NULL;
1347 hostdata->msgin[1] = 0;
1348 dma_cache_sync(hostdata->dev, hostdata->msgin, MSG_ARRAY_SIZE,
1353 resume_offset = hostdata->pScript + Ent_SelectedAsTarget;
1354 } else if(hostdata->tag_negotiated & (1<<id)) {
1355 resume_offset = hostdata->pScript + Ent_GetReselectionWithTag;
1357 resume_offset = hostdata->pScript + Ent_GetReselectionData;
1364 const struct NCR_700_Host_Parameters *hostdata
1365 = (struct NCR_700_Host_Parameters *)host->hostdata[0];
1366 if(hostdata->chip710) {
1375 const struct NCR_700_Host_Parameters *hostdata
1376 = (struct NCR_700_Host_Parameters *)host->hostdata[0];
1377 if(hostdata->chip710) {
1396 struct NCR_700_Host_Parameters *hostdata =
1397 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1400 if(hostdata->state != NCR_700_HOST_FREE) {
1410 hostdata->state = NCR_700_HOST_BUSY;
1411 hostdata->cmd = SCp;
1416 hostdata->msgout[0] = NCR_700_identify((SCp->cmnd[0] != REQUEST_SENSE &&
1431 if((hostdata->tag_negotiated & (1<<scmd_id(SCp)))
1434 count += scsi_populate_tag_msg(SCp, &hostdata->msgout[count]);
1437 if(hostdata->fast &&
1439 count += spi_populate_sync_msg(&hostdata->msgout[count],
1445 script_patch_16(hostdata->dev, hostdata->script, MessageCount, count);
1448 script_patch_ID(hostdata->dev, hostdata->script,
1451 script_patch_32_abs(hostdata->dev, hostdata->script, CommandAddress,
1453 script_patch_16(hostdata->dev, hostdata->script, CommandCount,
1457 script_patch_32_abs(hostdata->dev, hostdata->script,
1462 slot->resume_offset = hostdata->pScript;
1464 dma_cache_sync(hostdata->dev, hostdata->msgout, count, DMA_TO_DEVICE);
1465 dma_cache_sync(hostdata->dev, hostdata->msgin, MSG_ARRAY_SIZE,
1467 dma_cache_sync(hostdata->dev, SCp->cmnd, SCp->cmd_len, DMA_TO_DEVICE);
1468 dma_cache_sync(hostdata->dev, hostdata->status, 1, DMA_FROM_DEVICE);
1483 struct NCR_700_Host_Parameters *hostdata =
1484 (struct NCR_700_Host_Parameters *)host->hostdata[0];
1502 struct scsi_cmnd *SCp = hostdata->cmd;
1506 state = hostdata->state;
1507 SCp = hostdata->cmd;
1526 (dsp - (__u32)(hostdata->pScript))/4,
1538 hostdata->state = NCR_700_HOST_BUSY;
1541 host->host_no, SCp, SCp == NULL ? NULL : SCp->host_scribble, dsp, dsp - hostdata->pScript);
1553 &hostdata->slots[i];
1561 free_slot(slot, hostdata);
1569 * hostdata->state_lock */
1576 hostdata->state = NCR_700_HOST_FREE;
1577 hostdata->cmd = NULL;
1579 if(hostdata->eh_complete != NULL)
1580 complete(hostdata->eh_complete);
1585 NCR_700_scsi_done(hostdata, SCp, DID_NO_CONNECT<<16);
1590 if(dsp == Ent_SendMessage + 8 + hostdata->pScript) {
1595 int count = (hostdata->script[Ent_SendMessage/4] & 0xffffff) - ((NCR_700_readl(host, DBC_REG) & 0xffffff) + NCR_700_data_residual(host));
1596 printk("scsi%d (%d:%d) PHASE MISMATCH IN SEND MESSAGE %d remain, return %p[%04x], phase %s\n", host->host_no, pun, lun, count, (void *)temp, temp - hostdata->pScript, sbcl_to_string(NCR_700_readb(host, SBCL_REG)));
1598 resume_offset = hostdata->pScript + Ent_SendMessagePhaseMismatch;
1644 dma_cache_sync(hostdata->dev, slot->SG, sizeof(slot->SG), DMA_TO_DEVICE);
1647 resume_offset = hostdata->pScript + Ent_MsgInDuringData;
1653 host->host_no, pun, lun, dsp - hostdata->pScript, sbcl_to_string(sbcl));
1660 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1664 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1668 resume_offset = process_script_interrupt(dsps, dsp, SCp, host, hostdata);
1673 dsp, dsp - hostdata->pScript);
1674 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1678 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1696 if(hostdata->state != NCR_700_HOST_BUSY) {
1698 host->host_no, resume_offset, resume_offset - hostdata->pScript);
1699 hostdata->state = NCR_700_HOST_BUSY;
1711 if(hostdata->state == NCR_700_HOST_FREE) {
1717 int j = (i + hostdata->saved_slot_position)
1720 if(hostdata->slots[j].state != NCR_700_SLOT_QUEUED)
1722 if(NCR_700_start_command(hostdata->slots[j].cmnd)) {
1724 host->host_no, &hostdata->slots[j],
1725 hostdata->slots[j].cmnd));
1726 hostdata->saved_slot_position = j + 1;
1740 struct NCR_700_Host_Parameters *hostdata =
1741 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1746 if(hostdata->command_slot_count >= NCR_700_COMMAND_SLOTS_PER_HOST) {
1759 && (!(hostdata->tag_negotiated & (1<<scmd_id(SCp)))
1775 slot = find_empty_slot(hostdata);
1789 && (hostdata->tag_negotiated &(1<<scmd_id(SCp))) == 0
1792 hostdata->tag_negotiated |= (1<<scmd_id(SCp));
1797 && (hostdata->tag_negotiated &(1<<scmd_id(SCp)))) {
1799 hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
1802 if((hostdata->tag_negotiated &(1<<scmd_id(SCp)))
1874 dma_cache_sync(hostdata->dev, slot->SG, sizeof(slot->SG), DMA_TO_DEVICE);
1880 slot->pCmd = dma_map_single(hostdata->dev, SCp->cmnd,
1912 struct NCR_700_Host_Parameters *hostdata =
1913 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1923 while (hostdata->eh_complete != NULL) {
1929 hostdata->eh_complete = &complete;
1936 hostdata->eh_complete = NULL;
1938 if(hostdata->fast)
1965 struct NCR_700_Host_Parameters *hostdata =
1966 (struct NCR_700_Host_Parameters *)SHp->hostdata[0];
1968 if(!hostdata->fast)
1971 if(period < hostdata->min_period)
1972 period = hostdata->min_period;
1984 struct NCR_700_Host_Parameters *hostdata =
1985 (struct NCR_700_Host_Parameters *)SHp->hostdata[0];
1986 int max_offset = hostdata->chip710
1989 if(!hostdata->fast)
1996 if(spi_offset(STp) == 0 && (spi_period(STp) < hostdata->min_period ||
1998 spi_period(STp) = hostdata->min_period;
2009 SDp->hostdata = kzalloc(sizeof(struct NCR_700_Device_Parameters),
2012 if (!SDp->hostdata)
2021 struct NCR_700_Host_Parameters *hostdata =
2022 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
2033 if(hostdata->fast) {
2047 kfree(SDp->hostdata);
2048 SDp->hostdata = NULL;
2068 struct NCR_700_Host_Parameters *hostdata =
2069 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
2084 hostdata->tag_negotiated &= ~(1 << sdev_id(SDp));