Lines Matching defs:hostdata

231 NCR_700_offset_period_to_sxfer(struct NCR_700_Host_Parameters *hostdata,
236 __u8 min_xferp = (hostdata->chip710
238 __u8 max_offset = (hostdata->chip710
244 if(period < hostdata->min_period) {
246 period = hostdata->min_period;
248 XFERP = (period*4 * hostdata->sync_clock)/1000 - 4;
263 struct NCR_700_Host_Parameters *hostdata =
264 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
266 return NCR_700_offset_period_to_sxfer(hostdata,
294 struct NCR_700_Host_Parameters *hostdata, struct device *dev)
308 hostdata->noncoherent = 1;
318 hostdata->msgin = memory + MSGIN_OFFSET;
319 hostdata->msgout = memory + MSGOUT_OFFSET;
320 hostdata->status = memory + STATUS_OFFSET;
321 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET);
322 hostdata->dev = dev;
346 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot)
349 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0]
350 - (unsigned long)&hostdata->slots[0].SG[0]);
351 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset));
353 hostdata->free_list = &hostdata->slots[j];
355 hostdata->slots[j-1].ITL_forw = &hostdata->slots[j];
356 hostdata->slots[j].state = NCR_700_SLOT_FREE;
366 script_patch_32(hostdata, script, MessageLocation,
368 script_patch_32(hostdata, script, StatusAddress,
370 script_patch_32(hostdata, script, ReceiveMsgAddress,
373 hostdata->script = script;
374 hostdata->pScript = pScript;
375 dma_sync_single_for_device(hostdata->dev, pScript, sizeof(SCRIPT), DMA_TO_DEVICE);
376 hostdata->state = NCR_700_HOST_FREE;
377 hostdata->cmd = NULL;
382 host->unique_id = (unsigned long)hostdata->base;
383 hostdata->eh_complete = NULL;
384 host->hostdata[0] = (unsigned long)hostdata;
387 if (hostdata->chip710)
388 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f;
390 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f;
391 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0);
397 hostdata->chip710 ? "53c710" :
398 (hostdata->fast ? "53c700-66" : "53c700"),
399 hostdata->rev, hostdata->differential ?
410 spi_signalling(host) = hostdata->differential ? SPI_SIGNAL_HVD :
419 struct NCR_700_Host_Parameters *hostdata =
420 (struct NCR_700_Host_Parameters *)host->hostdata[0];
422 if (hostdata->noncoherent)
423 dma_free_noncoherent(hostdata->dev, TOTAL_MEM_SIZE,
424 hostdata->script, hostdata->pScript,
427 dma_free_coherent(hostdata->dev, TOTAL_MEM_SIZE,
428 hostdata->script, hostdata->pScript);
452 struct NCR_700_Host_Parameters *hostdata =
453 (struct NCR_700_Host_Parameters *)host->hostdata[0];
457 if(hostdata->chip710) {
465 if(hostdata->fast)
522 find_empty_slot(struct NCR_700_Host_Parameters *hostdata)
524 struct NCR_700_command_slot *slot = hostdata->free_list;
528 if(hostdata->command_slot_count != NCR_700_COMMAND_SLOTS_PER_HOST)
529 printk(KERN_ERR "SLOTS FULL, but count is %d, should be %d\n", hostdata->command_slot_count, NCR_700_COMMAND_SLOTS_PER_HOST);
538 hostdata->free_list = slot->ITL_forw;
548 hostdata->command_slot_count++;
555 struct NCR_700_Host_Parameters *hostdata)
567 slot->ITL_forw = hostdata->free_list;
568 hostdata->free_list = slot;
569 hostdata->command_slot_count--;
576 save_for_reselection(struct NCR_700_Host_Parameters *hostdata,
586 hostdata->state = NCR_700_HOST_FREE;
587 hostdata->cmd = NULL;
591 NCR_700_unmap(struct NCR_700_Host_Parameters *hostdata, struct scsi_cmnd *SCp,
600 NCR_700_scsi_done(struct NCR_700_Host_Parameters *hostdata,
603 hostdata->state = NCR_700_HOST_FREE;
604 hostdata->cmd = NULL;
610 dma_unmap_single(hostdata->dev, slot->pCmd,
615 dma_unmap_single(hostdata->dev, slot->dma_handle,
624 NCR_700_unmap(hostdata, SCp, slot);
626 free_slot(slot, hostdata);
657 struct NCR_700_Host_Parameters *hostdata =
658 (struct NCR_700_Host_Parameters *)host->hostdata[0];
660 __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP);
662 if(hostdata->chip710) {
666 switch (hostdata->burst_length) {
683 hostdata->dcntl_extra |= COMPAT_700_MODE;
685 NCR_700_writeb(hostdata->dcntl_extra, host, DCNTL_REG);
686 NCR_700_writeb(burst_length | hostdata->dmode_extra,
688 NCR_700_writeb(burst_disable | hostdata->ctest7_extra |
689 (hostdata->differential ? DIFF : 0),
695 NCR_700_writeb(BURST_LENGTH_8 | hostdata->dmode_extra,
697 NCR_700_writeb(hostdata->differential ?
699 if(hostdata->fast) {
719 if(hostdata->clock > 75) {
720 printk(KERN_ERR "53c700: Clock speed %dMHz is too high: 75Mhz is the maximum this chip can be driven at\n", hostdata->clock);
725 NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG);
726 hostdata->sync_clock = hostdata->clock/2;
727 } else if(hostdata->clock > 50 && hostdata->clock <= 75) {
731 NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG);
732 hostdata->sync_clock = hostdata->clock*2;
733 hostdata->sync_clock /= 3;
735 } else if(hostdata->clock > 37 && hostdata->clock <= 50) {
739 NCR_700_writeb(ASYNC_DIV_2_0 | hostdata->dcntl_extra, host, DCNTL_REG);
740 hostdata->sync_clock = hostdata->clock;
741 } else if(hostdata->clock > 25 && hostdata->clock <=37) {
745 NCR_700_writeb(ASYNC_DIV_1_5 | hostdata->dcntl_extra, host, DCNTL_REG);
746 hostdata->sync_clock = hostdata->clock;
750 NCR_700_writeb(ASYNC_DIV_1_0 | hostdata->dcntl_extra, host, DCNTL_REG);
752 hostdata->sync_clock = hostdata->clock;
758 min_period = 1000*(4+min_xferp)/(4*hostdata->sync_clock);
759 hostdata->min_period = NCR_700_MIN_PERIOD;
761 hostdata->min_period = min_period;
767 struct NCR_700_Host_Parameters *hostdata =
768 (struct NCR_700_Host_Parameters *)host->hostdata[0];
769 if(hostdata->chip710) {
794 struct NCR_700_Host_Parameters *hostdata,
805 switch(hostdata->msgin[2]) {
809 __u8 period = hostdata->msgin[3];
810 __u8 offset = hostdata->msgin[4];
835 hostdata->msgout[0] = A_REJECT_MSG;
836 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
837 script_patch_16(hostdata, hostdata->script,
841 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
848 hostdata->msgout[0] = A_REJECT_MSG;
849 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
850 script_patch_16(hostdata, hostdata->script, MessageCount, 1);
851 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
859 spi_print_msg(hostdata->msgin);
862 hostdata->msgout[0] = A_REJECT_MSG;
863 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
864 script_patch_16(hostdata, hostdata->script, MessageCount, 1);
867 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
874 process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata,
889 spi_print_msg(hostdata->msgin);
893 switch(hostdata->msgin[0]) {
896 resume_offset = process_extended_message(host, hostdata, SCp,
913 hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
934 pun, lun, hostdata->msgin[1],
943 spi_print_msg(hostdata->msgin);
946 hostdata->msgout[0] = A_REJECT_MSG;
947 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
948 script_patch_16(hostdata, hostdata->script, MessageCount, 1);
951 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
957 dma_sync_from_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
964 struct NCR_700_Host_Parameters *hostdata)
976 hostdata->status[0]));
983 if (hostdata->status[0] == SAM_STAT_CHECK_CONDITION ||
984 hostdata->status[0] == SAM_STAT_COMMAND_TERMINATED) {
992 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]);
999 SCp, hostdata->status[0]);
1008 NCR_700_unmap(hostdata, SCp, slot);
1009 dma_unmap_single(hostdata->dev, slot->pCmd,
1026 cmnd[7] = hostdata->status[0];
1030 slot->pCmd = dma_map_single(hostdata->dev, cmnd, MAX_COMMAND_SIZE, DMA_TO_DEVICE);
1031 slot->dma_handle = dma_map_single(hostdata->dev, SCp->sense_buffer, SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
1036 slot->resume_offset = hostdata->pScript;
1037 dma_sync_to_dev(hostdata, slot->SG, sizeof(slot->SG[0])*2);
1038 dma_sync_from_dev(hostdata, SCp->sense_buffer, SCSI_SENSE_BUFFERSIZE);
1043 hostdata->state = NCR_700_HOST_FREE;
1044 hostdata->cmd = NULL;
1050 //if(status_byte(hostdata->status[0]) == GOOD &&
1054 // dma_sync_single_for_cpu(hostdata->dev,
1061 // hostdata->tag_negotiated |= (1<<scmd_id(SCp));
1065 // hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
1068 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]);
1088 hostdata->msgin[0], hostdata->msgin[1]);
1099 save_for_reselection(hostdata, SCp, dsp);
1104 __u8 reselection_id = hostdata->reselection_id;
1107 lun = hostdata->msgin[0] & 0x1f;
1109 hostdata->reselection_id = 0xff;
1119 if(hostdata->msgin[1] == A_SIMPLE_TAG_MSG) {
1122 SCp = scsi_host_find_tag(SDp->host, hostdata->msgin[2]);
1125 host->host_no, reselection_id, lun, hostdata->msgin[2]);
1132 hostdata->msgin[2], slot, slot->tag);
1134 struct NCR_700_Device_Parameters *p = SDp->hostdata;
1148 hostdata->msgin[0], hostdata->msgin[1],
1149 hostdata->msgin[2]);
1151 if(hostdata->state != NCR_700_HOST_BUSY)
1155 hostdata->cmd = slot->cmnd;
1158 script_patch_32_abs(hostdata, hostdata->script,
1160 script_patch_16(hostdata, hostdata->script,
1162 script_patch_32_abs(hostdata, hostdata->script,
1171 NCR_700_writeb(NCR_700_get_SXFER(hostdata->cmd->device),
1173 dma_sync_from_dev(hostdata, hostdata->msgin,
1175 dma_sync_to_dev(hostdata, hostdata->msgout,
1179 dma_sync_to_dev(hostdata, slot->cmnd->cmnd,
1203 host->host_no, reselection_id, lun, dsp, dsp - hostdata->pScript, hostdata->state, hostdata->command_slot_count);
1207 __u32 SG = (__u32)bS_to_cpu(hostdata->script[A_SGScriptStartAddress_used[0]]);
1211 if(SG >= to32bit(&hostdata->slots[i].pSG[0])
1212 && SG <= to32bit(&hostdata->slots[i].pSG[NCR_700_SG_SEGMENTS]))
1215 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);
1216 SCp = hostdata->slots[i].cmnd;
1224 hostdata->cmd = NULL;
1227 if(hostdata->reselection_id == 0xff) {
1233 reselection_id = hostdata->reselection_id;
1240 hostdata->reselection_id = reselection_id;
1242 hostdata->msgin[1] = 0;
1243 dma_sync_to_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
1244 if(hostdata->tag_negotiated & (1<<reselection_id)) {
1245 resume_offset = hostdata->pScript + Ent_GetReselectionWithTag;
1247 resume_offset = hostdata->pScript + Ent_GetReselectionData;
1255 resume_offset = process_message(host, hostdata, SCp,
1261 NCR_700_phase[j], dsp - hostdata->pScript);
1273 host->host_no, pun, lun, dsps & 0xfff, dsp, dsp - hostdata->pScript);
1277 host->host_no, pun, lun, dsps, dsp - hostdata->pScript);
1296 struct NCR_700_Host_Parameters *hostdata =
1297 (struct NCR_700_Host_Parameters *)host->hostdata[0];
1298 struct scsi_cmnd *SCp = hostdata->cmd;
1302 id = NCR_700_readb(host, hostdata->chip710 ?
1317 hostdata->reselection_id = id = bitmap_to_number(id);
1321 if(hostdata->state == NCR_700_HOST_BUSY && SCp != NULL) {
1324 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));
1326 switch(dsp - hostdata->pScript) {
1329 save_for_reselection(hostdata, SCp, Ent_Disconnect2 + hostdata->pScript);
1333 save_for_reselection(hostdata, SCp, Ent_Disconnect4 + hostdata->pScript);
1337 save_for_reselection(hostdata, SCp, Ent_Disconnect6 + hostdata->pScript);
1341 save_for_reselection(hostdata, SCp, Ent_Disconnect8 + hostdata->pScript);
1345 process_script_interrupt(A_GOOD_STATUS_AFTER_STATUS, dsp, SCp, host, hostdata);
1353 hostdata->state = NCR_700_HOST_BUSY;
1354 hostdata->cmd = NULL;
1356 hostdata->msgin[1] = 0;
1357 dma_sync_to_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
1361 resume_offset = hostdata->pScript + Ent_SelectedAsTarget;
1362 } else if(hostdata->tag_negotiated & (1<<id)) {
1363 resume_offset = hostdata->pScript + Ent_GetReselectionWithTag;
1365 resume_offset = hostdata->pScript + Ent_GetReselectionData;
1372 const struct NCR_700_Host_Parameters *hostdata
1373 = (struct NCR_700_Host_Parameters *)host->hostdata[0];
1374 if(hostdata->chip710) {
1383 const struct NCR_700_Host_Parameters *hostdata
1384 = (struct NCR_700_Host_Parameters *)host->hostdata[0];
1385 if(hostdata->chip710) {
1404 struct NCR_700_Host_Parameters *hostdata =
1405 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1409 if(hostdata->state != NCR_700_HOST_FREE) {
1419 hostdata->state = NCR_700_HOST_BUSY;
1420 hostdata->cmd = SCp;
1425 hostdata->msgout[0] = NCR_700_identify((SCp->cmnd[0] != REQUEST_SENSE &&
1440 if((hostdata->tag_negotiated & (1<<scmd_id(SCp)))
1443 count += spi_populate_tag_msg(&hostdata->msgout[count], SCp);
1446 if(hostdata->fast &&
1448 count += spi_populate_sync_msg(&hostdata->msgout[count],
1454 script_patch_16(hostdata, hostdata->script, MessageCount, count);
1456 script_patch_ID(hostdata, hostdata->script, Device_ID, 1<<scmd_id(SCp));
1458 script_patch_32_abs(hostdata, hostdata->script, CommandAddress,
1460 script_patch_16(hostdata, hostdata->script, CommandCount, SCp->cmd_len);
1463 script_patch_32_abs(hostdata, hostdata->script,
1468 slot->resume_offset = hostdata->pScript;
1470 dma_sync_to_dev(hostdata, hostdata->msgout, count);
1471 dma_sync_from_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
1472 dma_sync_to_dev(hostdata, SCp->cmnd, SCp->cmd_len);
1473 dma_sync_from_dev(hostdata, hostdata->status, 1);
1488 struct NCR_700_Host_Parameters *hostdata =
1489 (struct NCR_700_Host_Parameters *)host->hostdata[0];
1507 struct scsi_cmnd *SCp = hostdata->cmd;
1528 (dsp - (__u32)(hostdata->pScript))/4,
1540 hostdata->state = NCR_700_HOST_BUSY;
1543 host->host_no, SCp, SCp == NULL ? NULL : SCp->host_scribble, dsp, dsp - hostdata->pScript);
1555 &hostdata->slots[i];
1563 free_slot(slot, hostdata);
1571 * hostdata->state_lock */
1578 hostdata->state = NCR_700_HOST_FREE;
1579 hostdata->cmd = NULL;
1581 if(hostdata->eh_complete != NULL)
1582 complete(hostdata->eh_complete);
1587 NCR_700_scsi_done(hostdata, SCp, DID_NO_CONNECT<<16);
1592 if(dsp == Ent_SendMessage + 8 + hostdata->pScript) {
1597 int count = (hostdata->script[Ent_SendMessage/4] & 0xffffff) - ((NCR_700_readl(host, DBC_REG) & 0xffffff) + NCR_700_data_residual(host));
1598 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)));
1600 resume_offset = hostdata->pScript + Ent_SendMessagePhaseMismatch;
1646 dma_sync_to_dev(hostdata, slot->SG, sizeof(slot->SG));
1649 resume_offset = hostdata->pScript + Ent_MsgInDuringData;
1655 host->host_no, pun, lun, dsp - hostdata->pScript, sbcl_to_string(sbcl));
1662 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1666 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1670 resume_offset = process_script_interrupt(dsps, dsp, SCp, host, hostdata);
1675 dsp, dsp - hostdata->pScript);
1676 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1680 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1712 if(hostdata->state != NCR_700_HOST_BUSY) {
1714 host->host_no, resume_offset, resume_offset - hostdata->pScript);
1715 hostdata->state = NCR_700_HOST_BUSY;
1727 if(hostdata->state == NCR_700_HOST_FREE) {
1733 int j = (i + hostdata->saved_slot_position)
1736 if(hostdata->slots[j].state != NCR_700_SLOT_QUEUED)
1738 if(NCR_700_start_command(hostdata->slots[j].cmnd)) {
1740 host->host_no, &hostdata->slots[j],
1741 hostdata->slots[j].cmnd));
1742 hostdata->saved_slot_position = j + 1;
1755 struct NCR_700_Host_Parameters *hostdata =
1756 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1760 if(hostdata->command_slot_count >= NCR_700_COMMAND_SLOTS_PER_HOST) {
1773 && (!(hostdata->tag_negotiated & (1<<scmd_id(SCp)))
1789 slot = find_empty_slot(hostdata);
1800 && (hostdata->tag_negotiated &(1<<scmd_id(SCp))) == 0
1803 hostdata->tag_negotiated |= (1<<scmd_id(SCp));
1814 && (hostdata->tag_negotiated &(1<<scmd_id(SCp)))) {
1816 hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
1819 if ((hostdata->tag_negotiated & (1<<scmd_id(SCp))) &&
1825 struct NCR_700_Device_Parameters *p = SCp->device->hostdata;
1892 dma_sync_to_dev(hostdata, slot->SG, sizeof(slot->SG));
1898 slot->pCmd = dma_map_single(hostdata->dev, SCp->cmnd,
1940 struct NCR_700_Host_Parameters *hostdata =
1941 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1951 while (hostdata->eh_complete != NULL) {
1957 hostdata->eh_complete = &complete;
1965 hostdata->eh_complete = NULL;
1967 if(hostdata->fast)
1978 struct NCR_700_Host_Parameters *hostdata =
1979 (struct NCR_700_Host_Parameters *)SHp->hostdata[0];
1981 if(!hostdata->fast)
1984 if(period < hostdata->min_period)
1985 period = hostdata->min_period;
1997 struct NCR_700_Host_Parameters *hostdata =
1998 (struct NCR_700_Host_Parameters *)SHp->hostdata[0];
1999 int max_offset = hostdata->chip710
2002 if(!hostdata->fast)
2009 if(spi_offset(STp) == 0 && (spi_period(STp) < hostdata->min_period ||
2011 spi_period(STp) = hostdata->min_period;
2022 SDp->hostdata = kzalloc(sizeof(struct NCR_700_Device_Parameters),
2025 if (!SDp->hostdata)
2034 struct NCR_700_Host_Parameters *hostdata =
2035 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
2043 if(hostdata->fast) {
2057 kfree(SDp->hostdata);
2058 SDp->hostdata = NULL;