pHba 150 drivers/scsi/dpt_i2o.c static inline int dpt_dma64(adpt_hba *pHba) pHba 152 drivers/scsi/dpt_i2o.c return (sizeof(dma_addr_t) > 4 && (pHba)->dma64); pHba 193 drivers/scsi/dpt_i2o.c adpt_hba *pHba; pHba 212 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = next) { pHba 213 drivers/scsi/dpt_i2o.c next = pHba->next; pHba 215 drivers/scsi/dpt_i2o.c if (adpt_i2o_activate_hba(pHba) < 0) { pHba 216 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 239 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = pHba->next) { pHba 240 drivers/scsi/dpt_i2o.c if (adpt_i2o_online_hba(pHba) < 0) { pHba 241 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 250 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = next) { pHba 251 drivers/scsi/dpt_i2o.c next = pHba->next; pHba 252 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Reading the hardware resource table.\n", pHba->name); pHba 253 drivers/scsi/dpt_i2o.c if (adpt_i2o_lct_get(pHba) < 0){ pHba 254 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 258 drivers/scsi/dpt_i2o.c if (adpt_i2o_parse_lct(pHba) < 0){ pHba 259 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 262 drivers/scsi/dpt_i2o.c adpt_inquiry(pHba); pHba 271 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = next) { pHba 272 drivers/scsi/dpt_i2o.c next = pHba->next; pHba 273 drivers/scsi/dpt_i2o.c if (adpt_scsi_host_alloc(pHba, sht) < 0){ pHba 274 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 277 drivers/scsi/dpt_i2o.c pHba->initialized = TRUE; pHba 278 drivers/scsi/dpt_i2o.c pHba->state &= ~DPTI_STATE_RESET; pHba 281 drivers/scsi/dpt_i2o.c NULL, MKDEV(DPTI_I2O_MAJOR, pHba->unit), NULL, pHba 282 drivers/scsi/dpt_i2o.c "dpti%d", pHba->unit); pHba 286 drivers/scsi/dpt_i2o.c pHba->unit); pHba 302 drivers/scsi/dpt_i2o.c static void adpt_release(adpt_hba *pHba) pHba 304 drivers/scsi/dpt_i2o.c struct Scsi_Host *shost = pHba->host; pHba 308 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 313 drivers/scsi/dpt_i2o.c static void adpt_inquiry(adpt_hba* pHba) pHba 328 drivers/scsi/dpt_i2o.c buf = dma_alloc_coherent(&pHba->pDev->dev, 80, &addr, GFP_KERNEL); pHba 330 drivers/scsi/dpt_i2o.c printk(KERN_ERR"%s: Could not allocate buffer\n",pHba->name); pHba 339 drivers/scsi/dpt_i2o.c if (dpt_dma64(pHba)) pHba 375 drivers/scsi/dpt_i2o.c if (dpt_dma64(pHba)) { pHba 387 drivers/scsi/dpt_i2o.c rcode = adpt_i2o_post_wait(pHba, msg, reqlen<<2, 120); pHba 389 drivers/scsi/dpt_i2o.c sprintf(pHba->detail, "Adaptec I2O RAID"); pHba 390 drivers/scsi/dpt_i2o.c printk(KERN_INFO "%s: Inquiry Error (%d)\n",pHba->name,rcode); pHba 392 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, 80, buf, addr); pHba 394 drivers/scsi/dpt_i2o.c memset(pHba->detail, 0, sizeof(pHba->detail)); pHba 395 drivers/scsi/dpt_i2o.c memcpy(&(pHba->detail), "Vendor: Adaptec ", 16); pHba 396 drivers/scsi/dpt_i2o.c memcpy(&(pHba->detail[16]), " Model: ", 8); pHba 397 drivers/scsi/dpt_i2o.c memcpy(&(pHba->detail[24]), (u8*) &buf[16], 16); pHba 398 drivers/scsi/dpt_i2o.c memcpy(&(pHba->detail[40]), " FW: ", 4); pHba 399 drivers/scsi/dpt_i2o.c memcpy(&(pHba->detail[44]), (u8*) &buf[32], 4); pHba 400 drivers/scsi/dpt_i2o.c pHba->detail[48] = '\0'; /* precautionary */ pHba 401 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, 80, buf, addr); pHba 403 drivers/scsi/dpt_i2o.c adpt_i2o_status_get(pHba); pHba 411 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 413 drivers/scsi/dpt_i2o.c pHba = (adpt_hba *) host->hostdata[0]; pHba 424 drivers/scsi/dpt_i2o.c adpt_hba* pHba = NULL; pHba 441 drivers/scsi/dpt_i2o.c pHba = (adpt_hba*)cmd->device->host->hostdata[0]; pHba 442 drivers/scsi/dpt_i2o.c if (!pHba) { pHba 447 drivers/scsi/dpt_i2o.c if ((pHba->state) & DPTI_STATE_RESET) pHba 458 drivers/scsi/dpt_i2o.c if ((pDev = adpt_find_device(pHba, (u32)cmd->device->channel, (u32)cmd->device->id, cmd->device->lun)) == NULL) { pHba 476 drivers/scsi/dpt_i2o.c return adpt_scsi_to_i2o(pHba, cmd, pDev); pHba 535 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 537 drivers/scsi/dpt_i2o.c pHba = (adpt_hba *) host->hostdata[0]; pHba 538 drivers/scsi/dpt_i2o.c return (char *) (pHba->detail); pHba 546 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 551 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = pHba->next) { pHba 552 drivers/scsi/dpt_i2o.c if (pHba->host == host) { pHba 557 drivers/scsi/dpt_i2o.c if (pHba == NULL) { pHba 560 drivers/scsi/dpt_i2o.c host = pHba->host; pHba 563 drivers/scsi/dpt_i2o.c seq_printf(m, "%s\n", pHba->detail); pHba 565 drivers/scsi/dpt_i2o.c pHba->host->host_no, pHba->name, host->irq); pHba 567 drivers/scsi/dpt_i2o.c host->can_queue, (int) pHba->reply_fifo_size , host->sg_tablesize); pHba 572 drivers/scsi/dpt_i2o.c d = pHba->channel[chan].device[id]; pHba 591 drivers/scsi/dpt_i2o.c static u32 adpt_ioctl_to_context(adpt_hba * pHba, void *reply) pHba 599 drivers/scsi/dpt_i2o.c spin_lock_irqsave(pHba->host->host_lock, flags); pHba 600 drivers/scsi/dpt_i2o.c nr = ARRAY_SIZE(pHba->ioctl_reply_context); pHba 602 drivers/scsi/dpt_i2o.c if (pHba->ioctl_reply_context[i] == NULL) { pHba 603 drivers/scsi/dpt_i2o.c pHba->ioctl_reply_context[i] = reply; pHba 607 drivers/scsi/dpt_i2o.c spin_unlock_irqrestore(pHba->host->host_lock, flags); pHba 610 drivers/scsi/dpt_i2o.c "ioctl commands\n", pHba->name); pHba 621 drivers/scsi/dpt_i2o.c static void *adpt_ioctl_from_context(adpt_hba *pHba, u32 context) pHba 626 drivers/scsi/dpt_i2o.c void *p = pHba->ioctl_reply_context[context]; pHba 627 drivers/scsi/dpt_i2o.c pHba->ioctl_reply_context[context] = NULL; pHba 640 drivers/scsi/dpt_i2o.c adpt_hba* pHba = NULL; /* host bus adapter structure */ pHba 645 drivers/scsi/dpt_i2o.c pHba = (adpt_hba*) cmd->device->host->hostdata[0]; pHba 646 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Trying to Abort\n",pHba->name); pHba 648 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: Unable to abort: No device in cmnd\n",pHba->name); pHba 659 drivers/scsi/dpt_i2o.c if (pHba->host) pHba 660 drivers/scsi/dpt_i2o.c spin_lock_irq(pHba->host->host_lock); pHba 661 drivers/scsi/dpt_i2o.c rcode = adpt_i2o_post_wait(pHba, msg, sizeof(msg), FOREVER); pHba 662 drivers/scsi/dpt_i2o.c if (pHba->host) pHba 663 drivers/scsi/dpt_i2o.c spin_unlock_irq(pHba->host->host_lock); pHba 666 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Abort cmd not supported\n",pHba->name); pHba 669 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Abort failed.\n",pHba->name); pHba 672 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Abort complete.\n",pHba->name); pHba 683 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 689 drivers/scsi/dpt_i2o.c pHba = (void*) cmd->device->host->hostdata[0]; pHba 690 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Trying to reset device\n",pHba->name); pHba 692 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Reset Device: Device Not found\n",pHba->name); pHba 701 drivers/scsi/dpt_i2o.c if (pHba->host) pHba 702 drivers/scsi/dpt_i2o.c spin_lock_irq(pHba->host->host_lock); pHba 705 drivers/scsi/dpt_i2o.c rcode = adpt_i2o_post_wait(pHba, msg,sizeof(msg), FOREVER); pHba 707 drivers/scsi/dpt_i2o.c if (pHba->host) pHba 708 drivers/scsi/dpt_i2o.c spin_unlock_irq(pHba->host->host_lock); pHba 711 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Device reset not supported\n",pHba->name); pHba 714 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Device reset failed\n",pHba->name); pHba 717 drivers/scsi/dpt_i2o.c printk(KERN_INFO"%s: Device reset successful\n",pHba->name); pHba 727 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 731 drivers/scsi/dpt_i2o.c pHba = (adpt_hba*)cmd->device->host->hostdata[0]; pHba 733 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Bus reset: SCSI Bus %d: tid: %d\n",pHba->name, cmd->device->channel,pHba->channel[cmd->device->channel].tid ); pHba 735 drivers/scsi/dpt_i2o.c msg[1] = (I2O_HBA_BUS_RESET<<24|HOST_TID<<12|pHba->channel[cmd->device->channel].tid); pHba 738 drivers/scsi/dpt_i2o.c if (pHba->host) pHba 739 drivers/scsi/dpt_i2o.c spin_lock_irq(pHba->host->host_lock); pHba 740 drivers/scsi/dpt_i2o.c rcode = adpt_i2o_post_wait(pHba, msg,sizeof(msg), FOREVER); pHba 741 drivers/scsi/dpt_i2o.c if (pHba->host) pHba 742 drivers/scsi/dpt_i2o.c spin_unlock_irq(pHba->host->host_lock); pHba 744 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Bus reset failed.\n",pHba->name); pHba 747 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Bus reset success.\n",pHba->name); pHba 755 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 759 drivers/scsi/dpt_i2o.c pHba = (adpt_hba*)cmd->device->host->hostdata[0]; pHba 760 drivers/scsi/dpt_i2o.c strncpy(name, pHba->name, sizeof(name)); pHba 761 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Hba Reset: scsi id %d: tid: %d\n", name, cmd->device->channel, pHba->channel[cmd->device->channel].tid); pHba 762 drivers/scsi/dpt_i2o.c rcode = adpt_hba_reset(pHba); pHba 784 drivers/scsi/dpt_i2o.c static int adpt_hba_reset(adpt_hba* pHba) pHba 788 drivers/scsi/dpt_i2o.c pHba->state |= DPTI_STATE_RESET; pHba 791 drivers/scsi/dpt_i2o.c if ((rcode=adpt_i2o_activate_hba(pHba)) < 0) { pHba 792 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: Could not activate\n", pHba->name); pHba 793 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 798 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 801 drivers/scsi/dpt_i2o.c PDEBUG("%s: in HOLD state\n",pHba->name); pHba 803 drivers/scsi/dpt_i2o.c if ((rcode=adpt_i2o_online_hba(pHba)) < 0) { pHba 804 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 807 drivers/scsi/dpt_i2o.c PDEBUG("%s: in OPERATIONAL state\n",pHba->name); pHba 809 drivers/scsi/dpt_i2o.c if ((rcode=adpt_i2o_lct_get(pHba)) < 0){ pHba 810 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 814 drivers/scsi/dpt_i2o.c if ((rcode=adpt_i2o_reparse_lct(pHba)) < 0){ pHba 815 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 818 drivers/scsi/dpt_i2o.c pHba->state &= ~DPTI_STATE_RESET; pHba 820 drivers/scsi/dpt_i2o.c adpt_fail_posted_scbs(pHba); pHba 832 drivers/scsi/dpt_i2o.c adpt_hba *pHba, *pNext; pHba 841 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = pNext) { pHba 842 drivers/scsi/dpt_i2o.c pNext = pHba->next; pHba 843 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 865 drivers/scsi/dpt_i2o.c adpt_hba* pHba = NULL; pHba 961 drivers/scsi/dpt_i2o.c pHba = kzalloc(sizeof(adpt_hba), GFP_KERNEL); pHba 962 drivers/scsi/dpt_i2o.c if (!pHba) { pHba 974 drivers/scsi/dpt_i2o.c p->next = pHba; pHba 976 drivers/scsi/dpt_i2o.c hba_chain = pHba; pHba 978 drivers/scsi/dpt_i2o.c pHba->next = NULL; pHba 979 drivers/scsi/dpt_i2o.c pHba->unit = hba_count; pHba 980 drivers/scsi/dpt_i2o.c sprintf(pHba->name, "dpti%d", hba_count); pHba 985 drivers/scsi/dpt_i2o.c pHba->pDev = pDev; pHba 986 drivers/scsi/dpt_i2o.c pHba->base_addr_phys = base_addr0_phys; pHba 989 drivers/scsi/dpt_i2o.c pHba->base_addr_virt = base_addr_virt; pHba 990 drivers/scsi/dpt_i2o.c pHba->msg_addr_virt = msg_addr_virt; pHba 991 drivers/scsi/dpt_i2o.c pHba->irq_mask = base_addr_virt+0x30; pHba 992 drivers/scsi/dpt_i2o.c pHba->post_port = base_addr_virt+0x40; pHba 993 drivers/scsi/dpt_i2o.c pHba->reply_port = base_addr_virt+0x44; pHba 995 drivers/scsi/dpt_i2o.c pHba->hrt = NULL; pHba 996 drivers/scsi/dpt_i2o.c pHba->lct = NULL; pHba 997 drivers/scsi/dpt_i2o.c pHba->lct_size = 0; pHba 998 drivers/scsi/dpt_i2o.c pHba->status_block = NULL; pHba 999 drivers/scsi/dpt_i2o.c pHba->post_count = 0; pHba 1000 drivers/scsi/dpt_i2o.c pHba->state = DPTI_STATE_RESET; pHba 1001 drivers/scsi/dpt_i2o.c pHba->pDev = pDev; pHba 1002 drivers/scsi/dpt_i2o.c pHba->devices = NULL; pHba 1003 drivers/scsi/dpt_i2o.c pHba->dma64 = dma64; pHba 1006 drivers/scsi/dpt_i2o.c spin_lock_init(&pHba->state_lock); pHba 1023 drivers/scsi/dpt_i2o.c if (request_irq (pDev->irq, adpt_isr, IRQF_SHARED, pHba->name, pHba)) { pHba 1024 drivers/scsi/dpt_i2o.c printk(KERN_ERR"%s: Couldn't register IRQ %d\n", pHba->name, pDev->irq); pHba 1025 drivers/scsi/dpt_i2o.c adpt_i2o_delete_hba(pHba); pHba 1033 drivers/scsi/dpt_i2o.c static void adpt_i2o_delete_hba(adpt_hba* pHba) pHba 1046 drivers/scsi/dpt_i2o.c if(pHba->host){ pHba 1047 drivers/scsi/dpt_i2o.c free_irq(pHba->host->irq, pHba); pHba 1051 drivers/scsi/dpt_i2o.c if(p1 == pHba) { pHba 1064 drivers/scsi/dpt_i2o.c iounmap(pHba->base_addr_virt); pHba 1065 drivers/scsi/dpt_i2o.c pci_release_regions(pHba->pDev); pHba 1066 drivers/scsi/dpt_i2o.c if(pHba->msg_addr_virt != pHba->base_addr_virt){ pHba 1067 drivers/scsi/dpt_i2o.c iounmap(pHba->msg_addr_virt); pHba 1069 drivers/scsi/dpt_i2o.c if(pHba->FwDebugBuffer_P) pHba 1070 drivers/scsi/dpt_i2o.c iounmap(pHba->FwDebugBuffer_P); pHba 1071 drivers/scsi/dpt_i2o.c if(pHba->hrt) { pHba 1072 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, pHba 1073 drivers/scsi/dpt_i2o.c pHba->hrt->num_entries * pHba->hrt->entry_len << 2, pHba 1074 drivers/scsi/dpt_i2o.c pHba->hrt, pHba->hrt_pa); pHba 1076 drivers/scsi/dpt_i2o.c if(pHba->lct) { pHba 1077 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, pHba->lct_size, pHba 1078 drivers/scsi/dpt_i2o.c pHba->lct, pHba->lct_pa); pHba 1080 drivers/scsi/dpt_i2o.c if(pHba->status_block) { pHba 1081 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, sizeof(i2o_status_block), pHba 1082 drivers/scsi/dpt_i2o.c pHba->status_block, pHba->status_block_pa); pHba 1084 drivers/scsi/dpt_i2o.c if(pHba->reply_pool) { pHba 1085 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, pHba 1086 drivers/scsi/dpt_i2o.c pHba->reply_fifo_size * REPLY_FRAME_SIZE * 4, pHba 1087 drivers/scsi/dpt_i2o.c pHba->reply_pool, pHba->reply_pool_pa); pHba 1090 drivers/scsi/dpt_i2o.c for(d = pHba->devices; d ; d = next){ pHba 1094 drivers/scsi/dpt_i2o.c for(i = 0 ; i < pHba->top_scsi_channel ; i++){ pHba 1096 drivers/scsi/dpt_i2o.c if(pHba->channel[i].device[j] != NULL){ pHba 1097 drivers/scsi/dpt_i2o.c for(pDev = pHba->channel[i].device[j]; pDev; pDev = pNext){ pHba 1104 drivers/scsi/dpt_i2o.c pci_dev_put(pHba->pDev); pHba 1107 drivers/scsi/dpt_i2o.c MKDEV(DPTI_I2O_MAJOR, pHba->unit)); pHba 1108 drivers/scsi/dpt_i2o.c kfree(pHba); pHba 1119 drivers/scsi/dpt_i2o.c static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u64 lun) pHba 1126 drivers/scsi/dpt_i2o.c d = pHba->channel[chan].device[id]; pHba 1146 drivers/scsi/dpt_i2o.c static int adpt_i2o_post_wait(adpt_hba* pHba, u32* msg, int len, int timeout) pHba 1183 drivers/scsi/dpt_i2o.c if((status = adpt_i2o_post_this(pHba, msg, len)) == 0){ pHba 1185 drivers/scsi/dpt_i2o.c if(pHba->host) pHba 1186 drivers/scsi/dpt_i2o.c spin_unlock_irq(pHba->host->host_lock); pHba 1198 drivers/scsi/dpt_i2o.c if(pHba->host) pHba 1199 drivers/scsi/dpt_i2o.c spin_lock_irq(pHba->host->host_lock); pHba 1204 drivers/scsi/dpt_i2o.c printk(KERN_INFO"dpti%d: POST WAIT TIMEOUT\n",pHba->unit); pHba 1233 drivers/scsi/dpt_i2o.c static s32 adpt_i2o_post_this(adpt_hba* pHba, u32* data, int len) pHba 1241 drivers/scsi/dpt_i2o.c m = readl(pHba->post_port); pHba 1246 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"dpti%d: Timeout waiting for message frame!\n", pHba->unit); pHba 1252 drivers/scsi/dpt_i2o.c msg = pHba->msg_addr_virt + m; pHba 1257 drivers/scsi/dpt_i2o.c writel(m, pHba->post_port); pHba 1301 drivers/scsi/dpt_i2o.c static s32 adpt_i2o_reset_hba(adpt_hba* pHba) pHba 1309 drivers/scsi/dpt_i2o.c if(pHba->initialized == FALSE) { // First time reset should be quick pHba 1312 drivers/scsi/dpt_i2o.c adpt_i2o_quiesce_hba(pHba); pHba 1317 drivers/scsi/dpt_i2o.c m = readl(pHba->post_port); pHba 1328 drivers/scsi/dpt_i2o.c status = dma_alloc_coherent(&pHba->pDev->dev, 4, &addr, GFP_KERNEL); pHba 1330 drivers/scsi/dpt_i2o.c adpt_send_nop(pHba, m); pHba 1345 drivers/scsi/dpt_i2o.c memcpy_toio(pHba->msg_addr_virt+m, msg, sizeof(msg)); pHba 1347 drivers/scsi/dpt_i2o.c writel(m, pHba->post_port); pHba 1352 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: IOP Reset Timeout\n",pHba->name); pHba 1364 drivers/scsi/dpt_i2o.c PDEBUG("%s: Reset in progress...\n", pHba->name); pHba 1369 drivers/scsi/dpt_i2o.c m = readl(pHba->post_port); pHba 1374 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s:Timeout waiting for IOP Reset.\n",pHba->name); pHba 1384 drivers/scsi/dpt_i2o.c adpt_send_nop(pHba, m); pHba 1386 drivers/scsi/dpt_i2o.c adpt_i2o_status_get(pHba); pHba 1388 drivers/scsi/dpt_i2o.c pHba->status_block->iop_state != ADAPTER_STATE_RESET) { pHba 1390 drivers/scsi/dpt_i2o.c pHba->name); pHba 1392 drivers/scsi/dpt_i2o.c PDEBUG("%s: Reset completed.\n", pHba->name); pHba 1395 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, 4, status, addr); pHba 1405 drivers/scsi/dpt_i2o.c static int adpt_i2o_parse_lct(adpt_hba* pHba) pHba 1411 drivers/scsi/dpt_i2o.c i2o_lct *lct = pHba->lct; pHba 1419 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: LCT is empty???\n",pHba->name); pHba 1443 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, tid, 0x8000, -1, buf, 32)<0) { pHba 1450 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Channel number %d out of range \n", pHba->name, bus_no); pHba 1454 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: SCSI ID %d out of range \n", pHba->name, bus_no); pHba 1457 drivers/scsi/dpt_i2o.c if(bus_no > pHba->top_scsi_channel){ pHba 1458 drivers/scsi/dpt_i2o.c pHba->top_scsi_channel = bus_no; pHba 1460 drivers/scsi/dpt_i2o.c if(scsi_id > pHba->top_scsi_id){ pHba 1461 drivers/scsi/dpt_i2o.c pHba->top_scsi_id = scsi_id; pHba 1463 drivers/scsi/dpt_i2o.c if(scsi_lun > pHba->top_scsi_lun){ pHba 1464 drivers/scsi/dpt_i2o.c pHba->top_scsi_lun = scsi_lun; pHba 1471 drivers/scsi/dpt_i2o.c printk(KERN_CRIT"%s: Out of memory for I2O device data.\n",pHba->name); pHba 1475 drivers/scsi/dpt_i2o.c d->controller = pHba; pHba 1482 drivers/scsi/dpt_i2o.c adpt_i2o_report_hba_unit(pHba, d); pHba 1483 drivers/scsi/dpt_i2o.c adpt_i2o_install_device(pHba, d); pHba 1486 drivers/scsi/dpt_i2o.c for(d = pHba->devices; d ; d = d->next) { pHba 1492 drivers/scsi/dpt_i2o.c if(bus_no > pHba->top_scsi_channel){ pHba 1493 drivers/scsi/dpt_i2o.c pHba->top_scsi_channel = bus_no; pHba 1495 drivers/scsi/dpt_i2o.c pHba->channel[bus_no].type = d->lct_data.class_id; pHba 1496 drivers/scsi/dpt_i2o.c pHba->channel[bus_no].tid = tid; pHba 1497 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, tid, 0x0200, -1, buf, 28)>=0) pHba 1499 drivers/scsi/dpt_i2o.c pHba->channel[bus_no].scsi_id = buf[1]; pHba 1505 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Channel number %d out of range - LCT\n", pHba->name, bus_no); pHba 1512 drivers/scsi/dpt_i2o.c for(d = pHba->devices; d ; d = d->next) { pHba 1520 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, tid, 0x8000, -1, buf, 32)>=0) { pHba 1530 drivers/scsi/dpt_i2o.c if( pHba->channel[bus_no].device[scsi_id] == NULL){ pHba 1535 drivers/scsi/dpt_i2o.c pHba->channel[bus_no].device[scsi_id] = pDev; pHba 1537 drivers/scsi/dpt_i2o.c for( pDev = pHba->channel[bus_no].device[scsi_id]; pHba 1554 drivers/scsi/dpt_i2o.c if(scsi_id > pHba->top_scsi_id){ pHba 1555 drivers/scsi/dpt_i2o.c pHba->top_scsi_id = scsi_id; pHba 1557 drivers/scsi/dpt_i2o.c if(scsi_lun > pHba->top_scsi_lun){ pHba 1558 drivers/scsi/dpt_i2o.c pHba->top_scsi_lun = scsi_lun; pHba 1576 drivers/scsi/dpt_i2o.c static int adpt_i2o_install_device(adpt_hba* pHba, struct i2o_device *d) pHba 1579 drivers/scsi/dpt_i2o.c d->controller=pHba; pHba 1581 drivers/scsi/dpt_i2o.c d->next=pHba->devices; pHba 1583 drivers/scsi/dpt_i2o.c if (pHba->devices != NULL){ pHba 1584 drivers/scsi/dpt_i2o.c pHba->devices->prev=d; pHba 1586 drivers/scsi/dpt_i2o.c pHba->devices=d; pHba 1596 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 1607 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = pHba->next) { pHba 1608 drivers/scsi/dpt_i2o.c if (pHba->unit == minor) { pHba 1612 drivers/scsi/dpt_i2o.c if (pHba == NULL) { pHba 1623 drivers/scsi/dpt_i2o.c pHba->in_use = 1; pHba 1633 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 1640 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = pHba->next) { pHba 1641 drivers/scsi/dpt_i2o.c if (pHba->unit == minor) { pHba 1646 drivers/scsi/dpt_i2o.c if (pHba == NULL) { pHba 1650 drivers/scsi/dpt_i2o.c pHba->in_use = 0; pHba 1656 drivers/scsi/dpt_i2o.c static int adpt_i2o_passthru(adpt_hba* pHba, u32 __user *arg) pHba 1699 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Could not allocate reply buffer\n",pHba->name); pHba 1704 drivers/scsi/dpt_i2o.c msg[3] = adpt_ioctl_to_context(pHba, reply); pHba 1710 drivers/scsi/dpt_i2o.c sg_list = kcalloc(pHba->sg_tablesize, sizeof(*sg_list), GFP_KERNEL); pHba 1719 drivers/scsi/dpt_i2o.c if (sg_count > pHba->sg_tablesize){ pHba 1720 drivers/scsi/dpt_i2o.c printk(KERN_DEBUG"%s:IOCTL SG List too large (%u)\n", pHba->name,sg_count); pHba 1729 drivers/scsi/dpt_i2o.c printk(KERN_DEBUG"%s:Bad SG element %d - not simple (%x)\n",pHba->name,i, sg[i].flag_count); pHba 1735 drivers/scsi/dpt_i2o.c p = dma_alloc_coherent(&pHba->pDev->dev, sg_size, &addr, GFP_KERNEL); pHba 1738 drivers/scsi/dpt_i2o.c pHba->name,sg_size,i,sg_count); pHba 1747 drivers/scsi/dpt_i2o.c printk(KERN_DEBUG"%s: Could not copy SG buf %d FROM user\n",pHba->name,i); pHba 1762 drivers/scsi/dpt_i2o.c if (pHba->host) { pHba 1763 drivers/scsi/dpt_i2o.c scsi_block_requests(pHba->host); pHba 1764 drivers/scsi/dpt_i2o.c spin_lock_irqsave(pHba->host->host_lock, flags); pHba 1766 drivers/scsi/dpt_i2o.c rcode = adpt_i2o_post_wait(pHba, msg, size, FOREVER); pHba 1770 drivers/scsi/dpt_i2o.c if (pHba->host) { pHba 1771 drivers/scsi/dpt_i2o.c spin_unlock_irqrestore(pHba->host->host_lock, flags); pHba 1772 drivers/scsi/dpt_i2o.c scsi_unblock_requests(pHba->host); pHba 1815 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Could not copy %p TO user %x\n",pHba->name, sg_list[j], sg[j].addr_bus); pHba 1827 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Could not copy message context FROM user\n",pHba->name); pHba 1831 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Could not copy reply TO user\n",pHba->name); pHba 1843 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, pHba 1954 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 1963 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = pHba->next) { pHba 1964 drivers/scsi/dpt_i2o.c if (pHba->unit == minor) { pHba 1969 drivers/scsi/dpt_i2o.c if(pHba == NULL){ pHba 1973 drivers/scsi/dpt_i2o.c while((volatile u32) pHba->state & DPTI_STATE_RESET ) pHba 1984 drivers/scsi/dpt_i2o.c return adpt_i2o_passthru(pHba, argp); pHba 1993 drivers/scsi/dpt_i2o.c HbaInfo.drvrHBAnum = pHba->unit; pHba 1994 drivers/scsi/dpt_i2o.c HbaInfo.baseAddr = (ulong) pHba->base_addr_phys; pHba 1995 drivers/scsi/dpt_i2o.c HbaInfo.blinkState = adpt_read_blink_led(pHba); pHba 1996 drivers/scsi/dpt_i2o.c HbaInfo.pciBusNum = pHba->pDev->bus->number; pHba 1997 drivers/scsi/dpt_i2o.c HbaInfo.pciDeviceNum=PCI_SLOT(pHba->pDev->devfn); pHba 1998 drivers/scsi/dpt_i2o.c HbaInfo.Interrupt = pHba->pDev->irq; pHba 2001 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Could not copy HbaInfo TO user\n",pHba->name); pHba 2010 drivers/scsi/dpt_i2o.c value = (u32)adpt_read_blink_led(pHba); pHba 2017 drivers/scsi/dpt_i2o.c struct Scsi_Host *shost = pHba->host; pHba 2021 drivers/scsi/dpt_i2o.c adpt_hba_reset(pHba); pHba 2027 drivers/scsi/dpt_i2o.c adpt_rescan(pHba); pHba 2086 drivers/scsi/dpt_i2o.c adpt_hba* pHba = dev_id; pHba 2094 drivers/scsi/dpt_i2o.c if (pHba == NULL){ pHba 2098 drivers/scsi/dpt_i2o.c if(pHba->host) pHba 2099 drivers/scsi/dpt_i2o.c spin_lock_irqsave(pHba->host->host_lock, flags); pHba 2101 drivers/scsi/dpt_i2o.c while( readl(pHba->irq_mask) & I2O_INTERRUPT_PENDING_B) { pHba 2102 drivers/scsi/dpt_i2o.c m = readl(pHba->reply_port); pHba 2106 drivers/scsi/dpt_i2o.c m = readl(pHba->reply_port); pHba 2113 drivers/scsi/dpt_i2o.c if (pHba->reply_pool_pa <= m && pHba 2114 drivers/scsi/dpt_i2o.c m < pHba->reply_pool_pa + pHba 2115 drivers/scsi/dpt_i2o.c (pHba->reply_fifo_size * REPLY_FRAME_SIZE * 4)) { pHba 2116 drivers/scsi/dpt_i2o.c reply = (u8 *)pHba->reply_pool + pHba 2117 drivers/scsi/dpt_i2o.c (m - pHba->reply_pool_pa); pHba 2128 drivers/scsi/dpt_i2o.c PDEBUG("%s: Failed message\n",pHba->name); pHba 2130 drivers/scsi/dpt_i2o.c printk(KERN_ERR"%s: Bad preserved MFA (%x)- dropping frame\n",pHba->name,old_m); pHba 2131 drivers/scsi/dpt_i2o.c writel(m,pHba->reply_port); pHba 2135 drivers/scsi/dpt_i2o.c msg = pHba->msg_addr_virt + old_m; pHba 2138 drivers/scsi/dpt_i2o.c adpt_send_nop(pHba, old_m); pHba 2142 drivers/scsi/dpt_i2o.c void *p = adpt_ioctl_from_context(pHba, readl(reply+12)); pHba 2160 drivers/scsi/dpt_i2o.c cmd = scsi_host_find_tag(pHba->host, pHba 2163 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Apparent SCSI cmd in Post Wait Context - cmd=%p context=%x\n", pHba->name, cmd, context); pHba 2172 drivers/scsi/dpt_i2o.c cmd = scsi_host_find_tag(pHba->host, pHba 2179 drivers/scsi/dpt_i2o.c writel(m, pHba->reply_port); pHba 2184 drivers/scsi/dpt_i2o.c out: if(pHba->host) pHba 2185 drivers/scsi/dpt_i2o.c spin_unlock_irqrestore(pHba->host->host_lock, flags); pHba 2189 drivers/scsi/dpt_i2o.c static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_device* d) pHba 2232 drivers/scsi/dpt_i2o.c pHba->name, cmd->cmnd[0]); pHba 2261 drivers/scsi/dpt_i2o.c if (dpt_dma64(pHba)) { pHba 2282 drivers/scsi/dpt_i2o.c if (dpt_dma64(pHba)) pHba 2304 drivers/scsi/dpt_i2o.c rcode = adpt_i2o_post_this(pHba, msg, reqlen<<2); pHba 2312 drivers/scsi/dpt_i2o.c static s32 adpt_scsi_host_alloc(adpt_hba* pHba, struct scsi_host_template *sht) pHba 2318 drivers/scsi/dpt_i2o.c printk("%s: scsi_host_alloc returned NULL\n", pHba->name); pHba 2321 drivers/scsi/dpt_i2o.c host->hostdata[0] = (unsigned long)pHba; pHba 2322 drivers/scsi/dpt_i2o.c pHba->host = host; pHba 2324 drivers/scsi/dpt_i2o.c host->irq = pHba->pDev->irq; pHba 2333 drivers/scsi/dpt_i2o.c host->max_channel = pHba->top_scsi_channel + 1; pHba 2335 drivers/scsi/dpt_i2o.c host->unique_id = (u32)sys_tbl_pa + pHba->unit; pHba 2336 drivers/scsi/dpt_i2o.c host->sg_tablesize = pHba->sg_tablesize; pHba 2337 drivers/scsi/dpt_i2o.c host->can_queue = pHba->post_fifo_size; pHba 2346 drivers/scsi/dpt_i2o.c adpt_hba* pHba; pHba 2360 drivers/scsi/dpt_i2o.c pHba = (adpt_hba*) cmd->device->host->hostdata[0]; pHba 2371 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: SCSI CMD underflow\n",pHba->name); pHba 2384 drivers/scsi/dpt_i2o.c pHba->name, (u32)cmd->device->channel, (u32)cmd->device->id, cmd->device->lun, hba_status, dev_status, cmd->cmnd[0]); pHba 2396 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: SCSI CMD parity error\n",pHba->name); pHba 2424 drivers/scsi/dpt_i2o.c pHba->name, detailed_status & I2O_SCSI_DSC_MASK, (u32)cmd->device->channel, (u32)cmd->device->id, cmd->device->lun, pHba 2441 drivers/scsi/dpt_i2o.c pHba->name, (u32)cmd->device->channel, (u32)cmd->device->id, cmd->device->lun, pHba 2453 drivers/scsi/dpt_i2o.c pHba->name, (u32)cmd->device->channel, (u32)cmd->device->id, cmd->device->lun, pHba 2466 drivers/scsi/dpt_i2o.c static s32 adpt_rescan(adpt_hba* pHba) pHba 2471 drivers/scsi/dpt_i2o.c if(pHba->host) pHba 2472 drivers/scsi/dpt_i2o.c spin_lock_irqsave(pHba->host->host_lock, flags); pHba 2473 drivers/scsi/dpt_i2o.c if ((rcode=adpt_i2o_lct_get(pHba)) < 0) pHba 2475 drivers/scsi/dpt_i2o.c if ((rcode=adpt_i2o_reparse_lct(pHba)) < 0) pHba 2478 drivers/scsi/dpt_i2o.c out: if(pHba->host) pHba 2479 drivers/scsi/dpt_i2o.c spin_unlock_irqrestore(pHba->host->host_lock, flags); pHba 2484 drivers/scsi/dpt_i2o.c static s32 adpt_i2o_reparse_lct(adpt_hba* pHba) pHba 2490 drivers/scsi/dpt_i2o.c i2o_lct *lct = pHba->lct; pHba 2499 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: LCT is empty???\n",pHba->name); pHba 2508 drivers/scsi/dpt_i2o.c for (d = pHba->devices; d; d = d->next) { pHba 2516 drivers/scsi/dpt_i2o.c printk(KERN_INFO "%s: LCT has %d entries.\n", pHba->name,max); pHba 2527 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, tid, 0x8000, -1, buf, 32)<0) { pHba 2528 drivers/scsi/dpt_i2o.c printk(KERN_ERR"%s: Could not query device\n",pHba->name); pHba 2535 drivers/scsi/dpt_i2o.c pHba->name, bus_no); pHba 2541 drivers/scsi/dpt_i2o.c pDev = pHba->channel[bus_no].device[scsi_id]; pHba 2558 drivers/scsi/dpt_i2o.c d->controller = pHba; pHba 2564 drivers/scsi/dpt_i2o.c adpt_i2o_report_hba_unit(pHba, d); pHba 2565 drivers/scsi/dpt_i2o.c adpt_i2o_install_device(pHba, d); pHba 2567 drivers/scsi/dpt_i2o.c pDev = pHba->channel[bus_no].device[scsi_id]; pHba 2575 drivers/scsi/dpt_i2o.c pHba->channel[bus_no].device[scsi_id] = pDev; pHba 2596 drivers/scsi/dpt_i2o.c if(scsi_id > pHba->top_scsi_id){ pHba 2597 drivers/scsi/dpt_i2o.c pHba->top_scsi_id = scsi_id; pHba 2599 drivers/scsi/dpt_i2o.c if(scsi_lun > pHba->top_scsi_lun){ pHba 2600 drivers/scsi/dpt_i2o.c pHba->top_scsi_lun = scsi_lun; pHba 2610 drivers/scsi/dpt_i2o.c pHba->name,bus_no,scsi_id,scsi_lun); pHba 2632 drivers/scsi/dpt_i2o.c for (pI2o_dev = pHba->devices; pI2o_dev; pI2o_dev = pI2o_dev->next) { pHba 2641 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Device (%d,%d,%llu) offline\n",pHba->name,pDev->scsi_channel,pDev->scsi_id,pDev->scsi_lun); pHba 2650 drivers/scsi/dpt_i2o.c static void adpt_fail_posted_scbs(adpt_hba* pHba) pHba 2655 drivers/scsi/dpt_i2o.c shost_for_each_device(d, pHba->host) { pHba 2677 drivers/scsi/dpt_i2o.c static int adpt_i2o_activate_hba(adpt_hba* pHba) pHba 2681 drivers/scsi/dpt_i2o.c if(pHba->initialized ) { pHba 2682 drivers/scsi/dpt_i2o.c if (adpt_i2o_status_get(pHba) < 0) { pHba 2683 drivers/scsi/dpt_i2o.c if((rcode = adpt_i2o_reset_hba(pHba)) != 0){ pHba 2684 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Could NOT reset.\n", pHba->name); pHba 2687 drivers/scsi/dpt_i2o.c if (adpt_i2o_status_get(pHba) < 0) { pHba 2693 drivers/scsi/dpt_i2o.c if(pHba->status_block->iop_state == ADAPTER_STATE_FAULTED) { pHba 2694 drivers/scsi/dpt_i2o.c printk(KERN_CRIT "%s: hardware fault\n", pHba->name); pHba 2698 drivers/scsi/dpt_i2o.c if (pHba->status_block->iop_state == ADAPTER_STATE_READY || pHba 2699 drivers/scsi/dpt_i2o.c pHba->status_block->iop_state == ADAPTER_STATE_OPERATIONAL || pHba 2700 drivers/scsi/dpt_i2o.c pHba->status_block->iop_state == ADAPTER_STATE_HOLD || pHba 2701 drivers/scsi/dpt_i2o.c pHba->status_block->iop_state == ADAPTER_STATE_FAILED) { pHba 2702 drivers/scsi/dpt_i2o.c adpt_i2o_reset_hba(pHba); pHba 2703 drivers/scsi/dpt_i2o.c if (adpt_i2o_status_get(pHba) < 0 || pHba->status_block->iop_state != ADAPTER_STATE_RESET) { pHba 2704 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: Failed to initialize.\n", pHba->name); pHba 2709 drivers/scsi/dpt_i2o.c if((rcode = adpt_i2o_reset_hba(pHba)) != 0){ pHba 2710 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Could NOT reset.\n", pHba->name); pHba 2716 drivers/scsi/dpt_i2o.c if (adpt_i2o_init_outbound_q(pHba) < 0) { pHba 2722 drivers/scsi/dpt_i2o.c if (adpt_i2o_hrt_get(pHba) < 0) { pHba 2733 drivers/scsi/dpt_i2o.c static int adpt_i2o_online_hba(adpt_hba* pHba) pHba 2735 drivers/scsi/dpt_i2o.c if (adpt_i2o_systab_send(pHba) < 0) pHba 2739 drivers/scsi/dpt_i2o.c if (adpt_i2o_enable_hba(pHba) < 0) pHba 2746 drivers/scsi/dpt_i2o.c static s32 adpt_send_nop(adpt_hba*pHba,u32 m) pHba 2753 drivers/scsi/dpt_i2o.c m = readl(pHba->post_port); pHba 2758 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: Timeout waiting for message frame!\n",pHba->name); pHba 2763 drivers/scsi/dpt_i2o.c msg = (u32 __iomem *)(pHba->msg_addr_virt + m); pHba 2769 drivers/scsi/dpt_i2o.c writel(m, pHba->post_port); pHba 2774 drivers/scsi/dpt_i2o.c static s32 adpt_i2o_init_outbound_q(adpt_hba* pHba) pHba 2785 drivers/scsi/dpt_i2o.c m = readl(pHba->post_port); pHba 2791 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Timeout waiting for message frame\n",pHba->name); pHba 2797 drivers/scsi/dpt_i2o.c msg=(u32 __iomem *)(pHba->msg_addr_virt+m); pHba 2799 drivers/scsi/dpt_i2o.c status = dma_alloc_coherent(&pHba->pDev->dev, 4, &addr, GFP_KERNEL); pHba 2801 drivers/scsi/dpt_i2o.c adpt_send_nop(pHba, m); pHba 2803 drivers/scsi/dpt_i2o.c pHba->name); pHba 2817 drivers/scsi/dpt_i2o.c writel(m, pHba->post_port); pHba 2829 drivers/scsi/dpt_i2o.c printk(KERN_WARNING"%s: Timeout Initializing\n",pHba->name); pHba 2842 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, 4, status, addr); pHba 2845 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, 4, status, addr); pHba 2847 drivers/scsi/dpt_i2o.c if(pHba->reply_pool != NULL) { pHba 2848 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, pHba 2849 drivers/scsi/dpt_i2o.c pHba->reply_fifo_size * REPLY_FRAME_SIZE * 4, pHba 2850 drivers/scsi/dpt_i2o.c pHba->reply_pool, pHba->reply_pool_pa); pHba 2853 drivers/scsi/dpt_i2o.c pHba->reply_pool = dma_alloc_coherent(&pHba->pDev->dev, pHba 2854 drivers/scsi/dpt_i2o.c pHba->reply_fifo_size * REPLY_FRAME_SIZE * 4, pHba 2855 drivers/scsi/dpt_i2o.c &pHba->reply_pool_pa, GFP_KERNEL); pHba 2856 drivers/scsi/dpt_i2o.c if (!pHba->reply_pool) { pHba 2857 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: Could not allocate reply pool\n", pHba->name); pHba 2860 drivers/scsi/dpt_i2o.c memset(pHba->reply_pool, 0 , pHba->reply_fifo_size * REPLY_FRAME_SIZE * 4); pHba 2862 drivers/scsi/dpt_i2o.c for(i = 0; i < pHba->reply_fifo_size; i++) { pHba 2863 drivers/scsi/dpt_i2o.c writel(pHba->reply_pool_pa + (i * REPLY_FRAME_SIZE * 4), pHba 2864 drivers/scsi/dpt_i2o.c pHba->reply_port); pHba 2867 drivers/scsi/dpt_i2o.c adpt_i2o_status_get(pHba); pHba 2883 drivers/scsi/dpt_i2o.c static s32 adpt_i2o_status_get(adpt_hba* pHba) pHba 2890 drivers/scsi/dpt_i2o.c if(pHba->status_block == NULL) { pHba 2891 drivers/scsi/dpt_i2o.c pHba->status_block = dma_alloc_coherent(&pHba->pDev->dev, pHba 2893 drivers/scsi/dpt_i2o.c &pHba->status_block_pa, GFP_KERNEL); pHba 2894 drivers/scsi/dpt_i2o.c if(pHba->status_block == NULL) { pHba 2897 drivers/scsi/dpt_i2o.c pHba->unit); pHba 2901 drivers/scsi/dpt_i2o.c memset(pHba->status_block, 0, sizeof(i2o_status_block)); pHba 2902 drivers/scsi/dpt_i2o.c status_block = (u8*)(pHba->status_block); pHba 2906 drivers/scsi/dpt_i2o.c m = readl(pHba->post_port); pHba 2912 drivers/scsi/dpt_i2o.c pHba->name); pHba 2919 drivers/scsi/dpt_i2o.c msg=(u32 __iomem *)(pHba->msg_addr_virt+m); pHba 2927 drivers/scsi/dpt_i2o.c writel( dma_low(pHba->status_block_pa), &msg[6]); pHba 2928 drivers/scsi/dpt_i2o.c writel( dma_high(pHba->status_block_pa), &msg[7]); pHba 2932 drivers/scsi/dpt_i2o.c writel(m, pHba->post_port); pHba 2938 drivers/scsi/dpt_i2o.c pHba->unit); pHba 2946 drivers/scsi/dpt_i2o.c pHba->post_fifo_size = pHba->status_block->max_inbound_frames; pHba 2947 drivers/scsi/dpt_i2o.c if (pHba->post_fifo_size > MAX_TO_IOP_MESSAGES) { pHba 2948 drivers/scsi/dpt_i2o.c pHba->post_fifo_size = MAX_TO_IOP_MESSAGES; pHba 2951 drivers/scsi/dpt_i2o.c pHba->reply_fifo_size = pHba->status_block->max_outbound_frames; pHba 2952 drivers/scsi/dpt_i2o.c if (pHba->reply_fifo_size > MAX_FROM_IOP_MESSAGES) { pHba 2953 drivers/scsi/dpt_i2o.c pHba->reply_fifo_size = MAX_FROM_IOP_MESSAGES; pHba 2957 drivers/scsi/dpt_i2o.c if (dpt_dma64(pHba)) { pHba 2958 drivers/scsi/dpt_i2o.c pHba->sg_tablesize pHba 2959 drivers/scsi/dpt_i2o.c = ((pHba->status_block->inbound_frame_size * 4 pHba 2963 drivers/scsi/dpt_i2o.c pHba->sg_tablesize pHba 2964 drivers/scsi/dpt_i2o.c = ((pHba->status_block->inbound_frame_size * 4 pHba 2968 drivers/scsi/dpt_i2o.c if (pHba->sg_tablesize > SG_LIST_ELEMENTS) { pHba 2969 drivers/scsi/dpt_i2o.c pHba->sg_tablesize = SG_LIST_ELEMENTS; pHba 2974 drivers/scsi/dpt_i2o.c printk("dpti%d: State = ",pHba->unit); pHba 2975 drivers/scsi/dpt_i2o.c switch(pHba->status_block->iop_state) { pHba 2998 drivers/scsi/dpt_i2o.c printk("%x (unknown!!)\n",pHba->status_block->iop_state); pHba 3007 drivers/scsi/dpt_i2o.c static int adpt_i2o_lct_get(adpt_hba* pHba) pHba 3013 drivers/scsi/dpt_i2o.c if ((pHba->lct_size == 0) || (pHba->lct == NULL)){ pHba 3014 drivers/scsi/dpt_i2o.c pHba->lct_size = pHba->status_block->expected_lct_size; pHba 3017 drivers/scsi/dpt_i2o.c if (pHba->lct == NULL) { pHba 3018 drivers/scsi/dpt_i2o.c pHba->lct = dma_alloc_coherent(&pHba->pDev->dev, pHba 3019 drivers/scsi/dpt_i2o.c pHba->lct_size, &pHba->lct_pa, pHba 3021 drivers/scsi/dpt_i2o.c if(pHba->lct == NULL) { pHba 3023 drivers/scsi/dpt_i2o.c pHba->name); pHba 3027 drivers/scsi/dpt_i2o.c memset(pHba->lct, 0, pHba->lct_size); pHba 3035 drivers/scsi/dpt_i2o.c msg[6] = 0xD0000000|pHba->lct_size; pHba 3036 drivers/scsi/dpt_i2o.c msg[7] = (u32)pHba->lct_pa; pHba 3038 drivers/scsi/dpt_i2o.c if ((ret=adpt_i2o_post_wait(pHba, msg, sizeof(msg), 360))) { pHba 3040 drivers/scsi/dpt_i2o.c pHba->name, ret); pHba 3045 drivers/scsi/dpt_i2o.c if ((pHba->lct->table_size << 2) > pHba->lct_size) { pHba 3046 drivers/scsi/dpt_i2o.c pHba->lct_size = pHba->lct->table_size << 2; pHba 3047 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, pHba->lct_size, pHba 3048 drivers/scsi/dpt_i2o.c pHba->lct, pHba->lct_pa); pHba 3049 drivers/scsi/dpt_i2o.c pHba->lct = NULL; pHba 3051 drivers/scsi/dpt_i2o.c } while (pHba->lct == NULL); pHba 3053 drivers/scsi/dpt_i2o.c PDEBUG("%s: Hardware resource table read.\n", pHba->name); pHba 3057 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, 0 , 0x8000, -1, buf, sizeof(buf))>=0) { pHba 3058 drivers/scsi/dpt_i2o.c pHba->FwDebugBufferSize = buf[1]; pHba 3059 drivers/scsi/dpt_i2o.c pHba->FwDebugBuffer_P = ioremap(pHba->base_addr_phys + buf[0], pHba 3060 drivers/scsi/dpt_i2o.c pHba->FwDebugBufferSize); pHba 3061 drivers/scsi/dpt_i2o.c if (pHba->FwDebugBuffer_P) { pHba 3062 drivers/scsi/dpt_i2o.c pHba->FwDebugFlags_P = pHba->FwDebugBuffer_P + pHba 3064 drivers/scsi/dpt_i2o.c pHba->FwDebugBLEDvalue_P = pHba->FwDebugBuffer_P + pHba 3066 drivers/scsi/dpt_i2o.c pHba->FwDebugBLEDflag_P = pHba->FwDebugBLEDvalue_P + 1; pHba 3067 drivers/scsi/dpt_i2o.c pHba->FwDebugStrLength_P = pHba->FwDebugBuffer_P + pHba 3069 drivers/scsi/dpt_i2o.c pHba->FwDebugBuffer_P += buf[2]; pHba 3070 drivers/scsi/dpt_i2o.c pHba->FwDebugFlags = 0; pHba 3079 drivers/scsi/dpt_i2o.c adpt_hba* pHba = hba_chain; pHba 3083 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, sys_tbl_len, pHba 3089 drivers/scsi/dpt_i2o.c sys_tbl = dma_alloc_coherent(&pHba->pDev->dev, pHba 3101 drivers/scsi/dpt_i2o.c for(pHba = hba_chain; pHba; pHba = pHba->next) { pHba 3104 drivers/scsi/dpt_i2o.c if (adpt_i2o_status_get(pHba)) { pHba 3109 drivers/scsi/dpt_i2o.c sys_tbl->iops[count].org_id = pHba->status_block->org_id; pHba 3110 drivers/scsi/dpt_i2o.c sys_tbl->iops[count].iop_id = pHba->unit + 2; pHba 3112 drivers/scsi/dpt_i2o.c sys_tbl->iops[count].i2o_version = pHba->status_block->i2o_version; pHba 3113 drivers/scsi/dpt_i2o.c sys_tbl->iops[count].iop_state = pHba->status_block->iop_state; pHba 3114 drivers/scsi/dpt_i2o.c sys_tbl->iops[count].msg_type = pHba->status_block->msg_type; pHba 3115 drivers/scsi/dpt_i2o.c sys_tbl->iops[count].frame_size = pHba->status_block->inbound_frame_size; pHba 3117 drivers/scsi/dpt_i2o.c sys_tbl->iops[count].iop_capabilities = pHba->status_block->iop_capabilities; pHba 3118 drivers/scsi/dpt_i2o.c addr = pHba->base_addr_phys + 0x40; pHba 3144 drivers/scsi/dpt_i2o.c static void adpt_i2o_report_hba_unit(adpt_hba* pHba, struct i2o_device *d) pHba 3151 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, unit, 0xF100, 3, buf, 16)>=0) pHba 3156 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, unit, 0xF100, 4, buf, 16)>=0) pHba 3161 drivers/scsi/dpt_i2o.c if(adpt_i2o_query_scalar(pHba, unit, 0xF100, 6, buf, 8)>=0) pHba 3249 drivers/scsi/dpt_i2o.c static s32 adpt_i2o_hrt_get(adpt_hba* pHba) pHba 3255 drivers/scsi/dpt_i2o.c if (pHba->hrt == NULL) { pHba 3256 drivers/scsi/dpt_i2o.c pHba->hrt = dma_alloc_coherent(&pHba->pDev->dev, pHba 3257 drivers/scsi/dpt_i2o.c size, &pHba->hrt_pa, GFP_KERNEL); pHba 3258 drivers/scsi/dpt_i2o.c if (pHba->hrt == NULL) { pHba 3259 drivers/scsi/dpt_i2o.c printk(KERN_CRIT "%s: Hrt Get failed; Out of memory.\n", pHba->name); pHba 3269 drivers/scsi/dpt_i2o.c msg[5]= (u32)pHba->hrt_pa; /* Dump it here */ pHba 3271 drivers/scsi/dpt_i2o.c if ((ret = adpt_i2o_post_wait(pHba, msg, sizeof(msg),20))) { pHba 3272 drivers/scsi/dpt_i2o.c printk(KERN_ERR "%s: Unable to get HRT (status=%#10x)\n", pHba->name, ret); pHba 3276 drivers/scsi/dpt_i2o.c if (pHba->hrt->num_entries * pHba->hrt->entry_len << 2 > size) { pHba 3277 drivers/scsi/dpt_i2o.c int newsize = pHba->hrt->num_entries * pHba->hrt->entry_len << 2; pHba 3278 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, size, pHba 3279 drivers/scsi/dpt_i2o.c pHba->hrt, pHba->hrt_pa); pHba 3281 drivers/scsi/dpt_i2o.c pHba->hrt = NULL; pHba 3283 drivers/scsi/dpt_i2o.c } while(pHba->hrt == NULL); pHba 3290 drivers/scsi/dpt_i2o.c static int adpt_i2o_query_scalar(adpt_hba* pHba, int tid, pHba 3302 drivers/scsi/dpt_i2o.c resblk_va = dma_alloc_coherent(&pHba->pDev->dev, pHba 3305 drivers/scsi/dpt_i2o.c printk(KERN_CRIT "%s: query scalar failed; Out of memory.\n", pHba->name); pHba 3309 drivers/scsi/dpt_i2o.c opblk_va = dma_alloc_coherent(&pHba->pDev->dev, pHba 3312 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, sizeof(u8) * (8+buflen), pHba 3315 drivers/scsi/dpt_i2o.c pHba->name); pHba 3322 drivers/scsi/dpt_i2o.c size = adpt_i2o_issue_params(I2O_CMD_UTIL_PARAMS_GET, pHba, tid, pHba 3325 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, sizeof(opblk), opblk_va, opblk_pa); pHba 3327 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, sizeof(u8) * (8+buflen), pHba 3329 drivers/scsi/dpt_i2o.c printk(KERN_WARNING "%s: issue params failed; Timed out.\n", pHba->name); pHba 3332 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, sizeof(u8) * (8+buflen), pHba 3334 drivers/scsi/dpt_i2o.c printk(KERN_WARNING "%s: issue params failed; Interrupted.\n", pHba->name); pHba 3340 drivers/scsi/dpt_i2o.c dma_free_coherent(&pHba->pDev->dev, sizeof(u8) * (8+buflen), pHba 3357 drivers/scsi/dpt_i2o.c static int adpt_i2o_issue_params(int cmd, adpt_hba* pHba, int tid, pHba 3375 drivers/scsi/dpt_i2o.c if ((wait_status = adpt_i2o_post_wait(pHba, msg, sizeof(msg), 20))) { pHba 3383 drivers/scsi/dpt_i2o.c pHba->name, pHba 3394 drivers/scsi/dpt_i2o.c static s32 adpt_i2o_quiesce_hba(adpt_hba* pHba) pHba 3399 drivers/scsi/dpt_i2o.c adpt_i2o_status_get(pHba); pHba 3403 drivers/scsi/dpt_i2o.c if((pHba->status_block->iop_state != ADAPTER_STATE_READY) && pHba 3404 drivers/scsi/dpt_i2o.c (pHba->status_block->iop_state != ADAPTER_STATE_OPERATIONAL)){ pHba 3413 drivers/scsi/dpt_i2o.c if((ret = adpt_i2o_post_wait(pHba, msg, sizeof(msg), 240))) { pHba 3415 drivers/scsi/dpt_i2o.c pHba->unit, -ret); pHba 3417 drivers/scsi/dpt_i2o.c printk(KERN_INFO"dpti%d: Quiesced.\n",pHba->unit); pHba 3420 drivers/scsi/dpt_i2o.c adpt_i2o_status_get(pHba); pHba 3428 drivers/scsi/dpt_i2o.c static int adpt_i2o_enable_hba(adpt_hba* pHba) pHba 3433 drivers/scsi/dpt_i2o.c adpt_i2o_status_get(pHba); pHba 3434 drivers/scsi/dpt_i2o.c if(!pHba->status_block){ pHba 3438 drivers/scsi/dpt_i2o.c if(pHba->status_block->iop_state == ADAPTER_STATE_OPERATIONAL) pHba 3441 drivers/scsi/dpt_i2o.c if(pHba->status_block->iop_state != ADAPTER_STATE_READY) pHba 3449 drivers/scsi/dpt_i2o.c if ((ret = adpt_i2o_post_wait(pHba, msg, sizeof(msg), 240))) { pHba 3451 drivers/scsi/dpt_i2o.c pHba->name, ret); pHba 3453 drivers/scsi/dpt_i2o.c PDEBUG("%s: Enabled.\n", pHba->name); pHba 3456 drivers/scsi/dpt_i2o.c adpt_i2o_status_get(pHba); pHba 3461 drivers/scsi/dpt_i2o.c static int adpt_i2o_systab_send(adpt_hba* pHba) pHba 3470 drivers/scsi/dpt_i2o.c msg[4] = (0<<16) | ((pHba->unit+2) << 12); /* Host 0 IOP ID (unit + 2) */ pHba 3485 drivers/scsi/dpt_i2o.c if ((ret=adpt_i2o_post_wait(pHba, msg, sizeof(msg), 120))) { pHba 3487 drivers/scsi/dpt_i2o.c pHba->name, ret); pHba 3491 drivers/scsi/dpt_i2o.c PINFO("%s: SysTab set.\n", pHba->name); pHba 3537 drivers/scsi/dpt_i2o.c adpt_hba *pHba, *next; pHba 3547 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = pHba->next) { pHba 3548 drivers/scsi/dpt_i2o.c error = scsi_add_host(pHba->host, &pHba->pDev->dev); pHba 3551 drivers/scsi/dpt_i2o.c scsi_scan_host(pHba->host); pHba 3555 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = next) { pHba 3556 drivers/scsi/dpt_i2o.c next = pHba->next; pHba 3557 drivers/scsi/dpt_i2o.c scsi_remove_host(pHba->host); pHba 3564 drivers/scsi/dpt_i2o.c adpt_hba *pHba, *next; pHba 3566 drivers/scsi/dpt_i2o.c for (pHba = hba_chain; pHba; pHba = next) { pHba 3567 drivers/scsi/dpt_i2o.c next = pHba->next; pHba 3568 drivers/scsi/dpt_i2o.c adpt_release(pHba); pHba 268 drivers/scsi/dpti.h static void adpt_i2o_report_hba_unit(adpt_hba* pHba, struct i2o_device *d); pHba 269 drivers/scsi/dpti.h static int adpt_i2o_query_scalar(adpt_hba* pHba, int tid, pHba 274 drivers/scsi/dpti.h static int adpt_i2o_issue_params(int cmd, adpt_hba* pHba, int tid, pHba 277 drivers/scsi/dpti.h static int adpt_i2o_post_wait(adpt_hba* pHba, u32* msg, int len, int timeout); pHba 278 drivers/scsi/dpti.h static int adpt_i2o_lct_get(adpt_hba* pHba); pHba 279 drivers/scsi/dpti.h static int adpt_i2o_parse_lct(adpt_hba* pHba); pHba 280 drivers/scsi/dpti.h static int adpt_i2o_activate_hba(adpt_hba* pHba); pHba 281 drivers/scsi/dpti.h static int adpt_i2o_enable_hba(adpt_hba* pHba); pHba 282 drivers/scsi/dpti.h static int adpt_i2o_install_device(adpt_hba* pHba, struct i2o_device *d); pHba 283 drivers/scsi/dpti.h static s32 adpt_i2o_post_this(adpt_hba* pHba, u32* data, int len); pHba 284 drivers/scsi/dpti.h static s32 adpt_i2o_quiesce_hba(adpt_hba* pHba); pHba 285 drivers/scsi/dpti.h static s32 adpt_i2o_status_get(adpt_hba* pHba); pHba 286 drivers/scsi/dpti.h static s32 adpt_i2o_init_outbound_q(adpt_hba* pHba); pHba 287 drivers/scsi/dpti.h static s32 adpt_i2o_hrt_get(adpt_hba* pHba); pHba 288 drivers/scsi/dpti.h static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_device* dptdevice); pHba 290 drivers/scsi/dpti.h static s32 adpt_scsi_host_alloc(adpt_hba* pHba,struct scsi_host_template * sht); pHba 291 drivers/scsi/dpti.h static s32 adpt_hba_reset(adpt_hba* pHba); pHba 292 drivers/scsi/dpti.h static s32 adpt_i2o_reset_hba(adpt_hba* pHba); pHba 293 drivers/scsi/dpti.h static s32 adpt_rescan(adpt_hba* pHba); pHba 294 drivers/scsi/dpti.h static s32 adpt_i2o_reparse_lct(adpt_hba* pHba); pHba 295 drivers/scsi/dpti.h static s32 adpt_send_nop(adpt_hba*pHba,u32 m); pHba 296 drivers/scsi/dpti.h static void adpt_i2o_delete_hba(adpt_hba* pHba); pHba 297 drivers/scsi/dpti.h static void adpt_inquiry(adpt_hba* pHba); pHba 298 drivers/scsi/dpti.h static void adpt_fail_posted_scbs(adpt_hba* pHba); pHba 299 drivers/scsi/dpti.h static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u64 lun); pHba 301 drivers/scsi/dpti.h static int adpt_i2o_online_hba(adpt_hba* pHba); pHba 303 drivers/scsi/dpti.h static int adpt_i2o_systab_send(adpt_hba* pHba);