Lines Matching defs:hostdata

232 NCR_700_offset_period_to_sxfer(struct NCR_700_Host_Parameters *hostdata,
237 __u8 min_xferp = (hostdata->chip710
239 __u8 max_offset = (hostdata->chip710
245 if(period < hostdata->min_period) {
247 period = hostdata->min_period;
249 XFERP = (period*4 * hostdata->sync_clock)/1000 - 4;
264 struct NCR_700_Host_Parameters *hostdata =
265 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
267 return NCR_700_offset_period_to_sxfer(hostdata,
295 struct NCR_700_Host_Parameters *hostdata, struct device *dev)
309 hostdata->noncoherent = 1;
319 hostdata->msgin = memory + MSGIN_OFFSET;
320 hostdata->msgout = memory + MSGOUT_OFFSET;
321 hostdata->status = memory + STATUS_OFFSET;
322 hostdata->slots = (struct NCR_700_command_slot *)(memory + SLOTS_OFFSET);
323 hostdata->dev = dev;
347 memset(hostdata->slots, 0, sizeof(struct NCR_700_command_slot)
350 dma_addr_t offset = (dma_addr_t)((unsigned long)&hostdata->slots[j].SG[0]
351 - (unsigned long)&hostdata->slots[0].SG[0]);
352 hostdata->slots[j].pSG = (struct NCR_700_SG_List *)((unsigned long)(pSlots + offset));
354 hostdata->free_list = &hostdata->slots[j];
356 hostdata->slots[j-1].ITL_forw = &hostdata->slots[j];
357 hostdata->slots[j].state = NCR_700_SLOT_FREE;
367 script_patch_32(hostdata, script, MessageLocation,
369 script_patch_32(hostdata, script, StatusAddress,
371 script_patch_32(hostdata, script, ReceiveMsgAddress,
374 hostdata->script = script;
375 hostdata->pScript = pScript;
376 dma_sync_single_for_device(hostdata->dev, pScript, sizeof(SCRIPT), DMA_TO_DEVICE);
377 hostdata->state = NCR_700_HOST_FREE;
378 hostdata->cmd = NULL;
383 host->unique_id = (unsigned long)hostdata->base;
384 hostdata->eh_complete = NULL;
385 host->hostdata[0] = (unsigned long)hostdata;
388 if (hostdata->chip710)
389 hostdata->rev = (NCR_700_readb(host, CTEST8_REG)>>4) & 0x0f;
391 hostdata->rev = (NCR_700_readb(host, CTEST7_REG)>>4) & 0x0f;
392 hostdata->fast = (NCR_700_readb(host, CTEST9_REG) == 0);
398 hostdata->chip710 ? "53c710" :
399 (hostdata->fast ? "53c700-66" : "53c700"),
400 hostdata->rev, hostdata->differential ?
411 spi_signalling(host) = hostdata->differential ? SPI_SIGNAL_HVD :
420 struct NCR_700_Host_Parameters *hostdata =
421 (struct NCR_700_Host_Parameters *)host->hostdata[0];
423 if (hostdata->noncoherent)
424 dma_free_noncoherent(hostdata->dev, TOTAL_MEM_SIZE,
425 hostdata->script, hostdata->pScript,
428 dma_free_coherent(hostdata->dev, TOTAL_MEM_SIZE,
429 hostdata->script, hostdata->pScript);
453 struct NCR_700_Host_Parameters *hostdata =
454 (struct NCR_700_Host_Parameters *)host->hostdata[0];
458 if(hostdata->chip710) {
466 if(hostdata->fast)
523 find_empty_slot(struct NCR_700_Host_Parameters *hostdata)
525 struct NCR_700_command_slot *slot = hostdata->free_list;
529 if(hostdata->command_slot_count != NCR_700_COMMAND_SLOTS_PER_HOST)
530 printk(KERN_ERR "SLOTS FULL, but count is %d, should be %d\n", hostdata->command_slot_count, NCR_700_COMMAND_SLOTS_PER_HOST);
539 hostdata->free_list = slot->ITL_forw;
549 hostdata->command_slot_count++;
556 struct NCR_700_Host_Parameters *hostdata)
568 slot->ITL_forw = hostdata->free_list;
569 hostdata->free_list = slot;
570 hostdata->command_slot_count--;
577 save_for_reselection(struct NCR_700_Host_Parameters *hostdata,
587 hostdata->state = NCR_700_HOST_FREE;
588 hostdata->cmd = NULL;
592 NCR_700_unmap(struct NCR_700_Host_Parameters *hostdata, struct scsi_cmnd *SCp,
601 NCR_700_scsi_done(struct NCR_700_Host_Parameters *hostdata,
604 hostdata->state = NCR_700_HOST_FREE;
605 hostdata->cmd = NULL;
611 dma_unmap_single(hostdata->dev, slot->pCmd,
616 dma_unmap_single(hostdata->dev, slot->dma_handle,
625 NCR_700_unmap(hostdata, SCp, slot);
627 free_slot(slot, hostdata);
658 struct NCR_700_Host_Parameters *hostdata =
659 (struct NCR_700_Host_Parameters *)host->hostdata[0];
661 __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP);
663 if(hostdata->chip710) {
667 switch (hostdata->burst_length) {
684 hostdata->dcntl_extra |= COMPAT_700_MODE;
686 NCR_700_writeb(hostdata->dcntl_extra, host, DCNTL_REG);
687 NCR_700_writeb(burst_length | hostdata->dmode_extra,
689 NCR_700_writeb(burst_disable | hostdata->ctest7_extra |
690 (hostdata->differential ? DIFF : 0),
696 NCR_700_writeb(BURST_LENGTH_8 | hostdata->dmode_extra,
698 NCR_700_writeb(hostdata->differential ?
700 if(hostdata->fast) {
720 if(hostdata->clock > 75) {
721 printk(KERN_ERR "53c700: Clock speed %dMHz is too high: 75Mhz is the maximum this chip can be driven at\n", hostdata->clock);
726 NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG);
727 hostdata->sync_clock = hostdata->clock/2;
728 } else if(hostdata->clock > 50 && hostdata->clock <= 75) {
732 NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG);
733 hostdata->sync_clock = hostdata->clock*2;
734 hostdata->sync_clock /= 3;
736 } else if(hostdata->clock > 37 && hostdata->clock <= 50) {
740 NCR_700_writeb(ASYNC_DIV_2_0 | hostdata->dcntl_extra, host, DCNTL_REG);
741 hostdata->sync_clock = hostdata->clock;
742 } else if(hostdata->clock > 25 && hostdata->clock <=37) {
746 NCR_700_writeb(ASYNC_DIV_1_5 | hostdata->dcntl_extra, host, DCNTL_REG);
747 hostdata->sync_clock = hostdata->clock;
751 NCR_700_writeb(ASYNC_DIV_1_0 | hostdata->dcntl_extra, host, DCNTL_REG);
753 hostdata->sync_clock = hostdata->clock;
759 min_period = 1000*(4+min_xferp)/(4*hostdata->sync_clock);
760 hostdata->min_period = NCR_700_MIN_PERIOD;
762 hostdata->min_period = min_period;
768 struct NCR_700_Host_Parameters *hostdata =
769 (struct NCR_700_Host_Parameters *)host->hostdata[0];
770 if(hostdata->chip710) {
795 struct NCR_700_Host_Parameters *hostdata,
806 switch(hostdata->msgin[2]) {
810 __u8 period = hostdata->msgin[3];
811 __u8 offset = hostdata->msgin[4];
836 hostdata->msgout[0] = A_REJECT_MSG;
837 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
838 script_patch_16(hostdata, hostdata->script,
842 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
849 hostdata->msgout[0] = A_REJECT_MSG;
850 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
851 script_patch_16(hostdata, hostdata->script, MessageCount, 1);
852 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
860 spi_print_msg(hostdata->msgin);
863 hostdata->msgout[0] = A_REJECT_MSG;
864 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
865 script_patch_16(hostdata, hostdata->script, MessageCount, 1);
868 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
875 process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata,
890 spi_print_msg(hostdata->msgin);
894 switch(hostdata->msgin[0]) {
897 resume_offset = process_extended_message(host, hostdata, SCp,
914 hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
935 pun, lun, hostdata->msgin[1],
944 spi_print_msg(hostdata->msgin);
947 hostdata->msgout[0] = A_REJECT_MSG;
948 dma_sync_to_dev(hostdata, hostdata->msgout, 1);
949 script_patch_16(hostdata, hostdata->script, MessageCount, 1);
952 resume_offset = hostdata->pScript + Ent_SendMessageWithATN;
958 dma_sync_from_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
965 struct NCR_700_Host_Parameters *hostdata)
977 hostdata->status[0]));
984 if(status_byte(hostdata->status[0]) == CHECK_CONDITION ||
985 status_byte(hostdata->status[0]) == COMMAND_TERMINATED) {
993 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]);
1000 SCp, hostdata->status[0]);
1009 NCR_700_unmap(hostdata, SCp, slot);
1010 dma_unmap_single(hostdata->dev, slot->pCmd,
1027 cmnd[7] = hostdata->status[0];
1031 slot->pCmd = dma_map_single(hostdata->dev, cmnd, MAX_COMMAND_SIZE, DMA_TO_DEVICE);
1032 slot->dma_handle = dma_map_single(hostdata->dev, SCp->sense_buffer, SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
1037 slot->resume_offset = hostdata->pScript;
1038 dma_sync_to_dev(hostdata, slot->SG, sizeof(slot->SG[0])*2);
1039 dma_sync_from_dev(hostdata, SCp->sense_buffer, SCSI_SENSE_BUFFERSIZE);
1044 hostdata->state = NCR_700_HOST_FREE;
1045 hostdata->cmd = NULL;
1051 //if(status_byte(hostdata->status[0]) == GOOD &&
1055 // dma_sync_single_for_cpu(hostdata->dev,
1062 // hostdata->tag_negotiated |= (1<<scmd_id(SCp));
1066 // hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
1069 NCR_700_scsi_done(hostdata, SCp, hostdata->status[0]);
1089 hostdata->msgin[0], hostdata->msgin[1]);
1100 save_for_reselection(hostdata, SCp, dsp);
1105 __u8 reselection_id = hostdata->reselection_id;
1108 lun = hostdata->msgin[0] & 0x1f;
1110 hostdata->reselection_id = 0xff;
1120 if(hostdata->msgin[1] == A_SIMPLE_TAG_MSG) {
1123 SCp = scsi_host_find_tag(SDp->host, hostdata->msgin[2]);
1126 host->host_no, reselection_id, lun, hostdata->msgin[2]);
1133 hostdata->msgin[2], slot, slot->tag);
1135 struct NCR_700_Device_Parameters *p = SDp->hostdata;
1149 hostdata->msgin[0], hostdata->msgin[1],
1150 hostdata->msgin[2]);
1152 if(hostdata->state != NCR_700_HOST_BUSY)
1156 hostdata->cmd = slot->cmnd;
1159 script_patch_32_abs(hostdata, hostdata->script,
1161 script_patch_16(hostdata, hostdata->script,
1163 script_patch_32_abs(hostdata, hostdata->script,
1172 NCR_700_writeb(NCR_700_get_SXFER(hostdata->cmd->device),
1174 dma_sync_from_dev(hostdata, hostdata->msgin,
1176 dma_sync_to_dev(hostdata, hostdata->msgout,
1180 dma_sync_to_dev(hostdata, slot->cmnd->cmnd,
1204 host->host_no, reselection_id, lun, dsp, dsp - hostdata->pScript, hostdata->state, hostdata->command_slot_count);
1208 __u32 SG = (__u32)bS_to_cpu(hostdata->script[A_SGScriptStartAddress_used[0]]);
1212 if(SG >= to32bit(&hostdata->slots[i].pSG[0])
1213 && SG <= to32bit(&hostdata->slots[i].pSG[NCR_700_SG_SEGMENTS]))
1216 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);
1217 SCp = hostdata->slots[i].cmnd;
1225 hostdata->cmd = NULL;
1228 if(hostdata->reselection_id == 0xff) {
1234 reselection_id = hostdata->reselection_id;
1241 hostdata->reselection_id = reselection_id;
1243 hostdata->msgin[1] = 0;
1244 dma_sync_to_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
1245 if(hostdata->tag_negotiated & (1<<reselection_id)) {
1246 resume_offset = hostdata->pScript + Ent_GetReselectionWithTag;
1248 resume_offset = hostdata->pScript + Ent_GetReselectionData;
1256 resume_offset = process_message(host, hostdata, SCp,
1262 NCR_700_phase[j], dsp - hostdata->pScript);
1274 host->host_no, pun, lun, dsps & 0xfff, dsp, dsp - hostdata->pScript);
1278 host->host_no, pun, lun, dsps, dsp - hostdata->pScript);
1297 struct NCR_700_Host_Parameters *hostdata =
1298 (struct NCR_700_Host_Parameters *)host->hostdata[0];
1299 struct scsi_cmnd *SCp = hostdata->cmd;
1303 id = NCR_700_readb(host, hostdata->chip710 ?
1318 hostdata->reselection_id = id = bitmap_to_number(id);
1322 if(hostdata->state == NCR_700_HOST_BUSY && SCp != NULL) {
1325 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));
1327 switch(dsp - hostdata->pScript) {
1330 save_for_reselection(hostdata, SCp, Ent_Disconnect2 + hostdata->pScript);
1334 save_for_reselection(hostdata, SCp, Ent_Disconnect4 + hostdata->pScript);
1338 save_for_reselection(hostdata, SCp, Ent_Disconnect6 + hostdata->pScript);
1342 save_for_reselection(hostdata, SCp, Ent_Disconnect8 + hostdata->pScript);
1346 process_script_interrupt(A_GOOD_STATUS_AFTER_STATUS, dsp, SCp, host, hostdata);
1354 hostdata->state = NCR_700_HOST_BUSY;
1355 hostdata->cmd = NULL;
1357 hostdata->msgin[1] = 0;
1358 dma_sync_to_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
1362 resume_offset = hostdata->pScript + Ent_SelectedAsTarget;
1363 } else if(hostdata->tag_negotiated & (1<<id)) {
1364 resume_offset = hostdata->pScript + Ent_GetReselectionWithTag;
1366 resume_offset = hostdata->pScript + Ent_GetReselectionData;
1373 const struct NCR_700_Host_Parameters *hostdata
1374 = (struct NCR_700_Host_Parameters *)host->hostdata[0];
1375 if(hostdata->chip710) {
1384 const struct NCR_700_Host_Parameters *hostdata
1385 = (struct NCR_700_Host_Parameters *)host->hostdata[0];
1386 if(hostdata->chip710) {
1405 struct NCR_700_Host_Parameters *hostdata =
1406 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1410 if(hostdata->state != NCR_700_HOST_FREE) {
1420 hostdata->state = NCR_700_HOST_BUSY;
1421 hostdata->cmd = SCp;
1426 hostdata->msgout[0] = NCR_700_identify((SCp->cmnd[0] != REQUEST_SENSE &&
1441 if((hostdata->tag_negotiated & (1<<scmd_id(SCp)))
1444 count += spi_populate_tag_msg(&hostdata->msgout[count], SCp);
1447 if(hostdata->fast &&
1449 count += spi_populate_sync_msg(&hostdata->msgout[count],
1455 script_patch_16(hostdata, hostdata->script, MessageCount, count);
1457 script_patch_ID(hostdata, hostdata->script, Device_ID, 1<<scmd_id(SCp));
1459 script_patch_32_abs(hostdata, hostdata->script, CommandAddress,
1461 script_patch_16(hostdata, hostdata->script, CommandCount, SCp->cmd_len);
1464 script_patch_32_abs(hostdata, hostdata->script,
1469 slot->resume_offset = hostdata->pScript;
1471 dma_sync_to_dev(hostdata, hostdata->msgout, count);
1472 dma_sync_from_dev(hostdata, hostdata->msgin, MSG_ARRAY_SIZE);
1473 dma_sync_to_dev(hostdata, SCp->cmnd, SCp->cmd_len);
1474 dma_sync_from_dev(hostdata, hostdata->status, 1);
1489 struct NCR_700_Host_Parameters *hostdata =
1490 (struct NCR_700_Host_Parameters *)host->hostdata[0];
1508 struct scsi_cmnd *SCp = hostdata->cmd;
1511 SCp = hostdata->cmd;
1530 (dsp - (__u32)(hostdata->pScript))/4,
1542 hostdata->state = NCR_700_HOST_BUSY;
1545 host->host_no, SCp, SCp == NULL ? NULL : SCp->host_scribble, dsp, dsp - hostdata->pScript);
1557 &hostdata->slots[i];
1565 free_slot(slot, hostdata);
1573 * hostdata->state_lock */
1580 hostdata->state = NCR_700_HOST_FREE;
1581 hostdata->cmd = NULL;
1583 if(hostdata->eh_complete != NULL)
1584 complete(hostdata->eh_complete);
1589 NCR_700_scsi_done(hostdata, SCp, DID_NO_CONNECT<<16);
1594 if(dsp == Ent_SendMessage + 8 + hostdata->pScript) {
1599 int count = (hostdata->script[Ent_SendMessage/4] & 0xffffff) - ((NCR_700_readl(host, DBC_REG) & 0xffffff) + NCR_700_data_residual(host));
1600 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)));
1602 resume_offset = hostdata->pScript + Ent_SendMessagePhaseMismatch;
1648 dma_sync_to_dev(hostdata, slot->SG, sizeof(slot->SG));
1651 resume_offset = hostdata->pScript + Ent_MsgInDuringData;
1657 host->host_no, pun, lun, dsp - hostdata->pScript, sbcl_to_string(sbcl));
1664 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1668 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1672 resume_offset = process_script_interrupt(dsps, dsp, SCp, host, hostdata);
1677 dsp, dsp - hostdata->pScript);
1678 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1682 NCR_700_scsi_done(hostdata, SCp, DID_ERROR<<16);
1714 if(hostdata->state != NCR_700_HOST_BUSY) {
1716 host->host_no, resume_offset, resume_offset - hostdata->pScript);
1717 hostdata->state = NCR_700_HOST_BUSY;
1729 if(hostdata->state == NCR_700_HOST_FREE) {
1735 int j = (i + hostdata->saved_slot_position)
1738 if(hostdata->slots[j].state != NCR_700_SLOT_QUEUED)
1740 if(NCR_700_start_command(hostdata->slots[j].cmnd)) {
1742 host->host_no, &hostdata->slots[j],
1743 hostdata->slots[j].cmnd));
1744 hostdata->saved_slot_position = j + 1;
1758 struct NCR_700_Host_Parameters *hostdata =
1759 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1763 if(hostdata->command_slot_count >= NCR_700_COMMAND_SLOTS_PER_HOST) {
1776 && (!(hostdata->tag_negotiated & (1<<scmd_id(SCp)))
1792 slot = find_empty_slot(hostdata);
1806 && (hostdata->tag_negotiated &(1<<scmd_id(SCp))) == 0
1809 hostdata->tag_negotiated |= (1<<scmd_id(SCp));
1820 && (hostdata->tag_negotiated &(1<<scmd_id(SCp)))) {
1822 hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
1825 if ((hostdata->tag_negotiated & (1<<scmd_id(SCp))) &&
1831 struct NCR_700_Device_Parameters *p = SCp->device->hostdata;
1898 dma_sync_to_dev(hostdata, slot->SG, sizeof(slot->SG));
1904 slot->pCmd = dma_map_single(hostdata->dev, SCp->cmnd,
1946 struct NCR_700_Host_Parameters *hostdata =
1947 (struct NCR_700_Host_Parameters *)SCp->device->host->hostdata[0];
1957 while (hostdata->eh_complete != NULL) {
1963 hostdata->eh_complete = &complete;
1971 hostdata->eh_complete = NULL;
1973 if(hostdata->fast)
1984 struct NCR_700_Host_Parameters *hostdata =
1985 (struct NCR_700_Host_Parameters *)SHp->hostdata[0];
1987 if(!hostdata->fast)
1990 if(period < hostdata->min_period)
1991 period = hostdata->min_period;
2003 struct NCR_700_Host_Parameters *hostdata =
2004 (struct NCR_700_Host_Parameters *)SHp->hostdata[0];
2005 int max_offset = hostdata->chip710
2008 if(!hostdata->fast)
2015 if(spi_offset(STp) == 0 && (spi_period(STp) < hostdata->min_period ||
2017 spi_period(STp) = hostdata->min_period;
2028 SDp->hostdata = kzalloc(sizeof(struct NCR_700_Device_Parameters),
2031 if (!SDp->hostdata)
2040 struct NCR_700_Host_Parameters *hostdata =
2041 (struct NCR_700_Host_Parameters *)SDp->host->hostdata[0];
2049 if(hostdata->fast) {
2063 kfree(SDp->hostdata);
2064 SDp->hostdata = NULL;