Changeset 190 for trunk/src/os2ahci/ahci.c
- Timestamp:
- Jul 17, 2017, 4:31:51 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/os2ahci/ahci.c
r188 r190 661 661 DPRINTF(1,"ahci_complete_init: completing initialization of adapter #%d\n", ad_no(ai)); 662 662 663 /* register IRQ handlers; each IRQ level is registered only once */ 664 for (i = 0; i < irq_used_cnt; i++) 665 { 666 if (irq_used[i] == ai->irq) break; /* we already have this IRQ registered */ 667 } 668 if (i >= irq_used_cnt) 669 { 670 if (i >= MAX_IRQ_HANDLERS) return -1; /* no more handlers available */ 671 DPRINTF(2,"registering interrupt #%d\n", ai->irq); 672 if (Dev32Help_SetIRQ(ahci_intr, ai->irq, 1, ai->irq) != 0) 673 { 674 DPRINTF(0,"failed to register shared interrupt\n"); 675 if (Dev32Help_SetIRQ(ahci_intr, ai->irq, 0, ai->irq) != 0) 663 if (!ai->int_set) 664 { 665 /* register IRQ handler; each IRQ level is registered only once */ 666 p = 1; /* int count */ 667 if (!(ai->flags & AHCI_HFLAG_NO_MSI)) 668 { 669 if (PsdMsiAlloc(ai->bus_dev_func, &p, &ai->irq)) p = 1; /* shared flag */ 670 else 676 671 { 677 dprintf(0,"failed to register interrupt %d\n", ai->irq); 672 /* we have an msi interrupt */ 673 ai->irq_pin = 0; 674 p = 0; /* exclusive flag */ 675 } 676 } 677 for (i = 0; i < irq_used_cnt; i++) 678 { 679 if (irq_used[i] == ai->irq) break; /* we already have this IRQ registered */ 680 } 681 if (i >= irq_used_cnt) 682 { 683 if (i >= MAX_IRQ_HANDLERS) return -1; /* no more handlers available */ 684 DPRINTF(2,"registering interrupt #%d\n", ai->irq); 685 686 rc = Dev32Help_SetIRQ(ahci_intr, ai->irq, p, ai->irq); 687 if (rc && p) /* if failed and was shared */ 688 { 689 p = 0; /* try exclusive */ 690 rc = Dev32Help_SetIRQ(ahci_intr, ai->irq, p, ai->irq); 691 } 692 if (rc) 693 { 694 dprintf(0,"failed to register interrupt %d\n", ai->irq); 678 695 return(-1); 679 696 } 680 } 681 irq_used[irq_used_cnt++] = ai->irq; 697 irq_used[irq_used_cnt++] = ai->irq; 698 ai->int_set = 1; 699 RmUpdateAddIrq(rm_drvh, ai->rm_adh, ai->irq, ai->irq_pin, p?RS_IRQ_SHARED:RS_IRQ_EXCLUSIVE); 700 } 682 701 } 683 702 … … 1396 1415 */ 1397 1416 #pragma aux ahci_intr parm [eax] 1398 int ahci_intr(u 16irq)1417 int ahci_intr(u32 irq) 1399 1418 { 1400 1419 u32 irq_stat; … … 1570 1589 1571 1590 vNext = pIorb->pNxtIORB; 1591 1572 1592 iorb_complete(vIorb, pIorb); 1573 1593 } … … 1768 1788 ai->ports[p].devs[d].dev_type = UIB_TYPE_DISK; 1769 1789 pDevName = ai->ports[p].devs[d].dev_name; 1770 str ncpy(pDevName, ata_dev_name(id_buf), sizeof(ai->ports[0].devs[0].dev_name));1790 strlcpy(pDevName, ata_dev_name(id_buf), sizeof(ai->ports[0].devs[0].dev_name)); 1771 1791 1772 1792 if (id_buf[ATA_ID_CONFIG] & 0x8000U) … … 1797 1817 } 1798 1818 1799 DPRINTF(2,"found device %d.%d.%d: removable = %d, dev_type = %d, atapi = %d, "1800 "ncq_max = %d\n",ad_no(ai), p, d,1819 DPRINTF(2,"found device %d.%d.%d: removable=%d dev_type=%d atapi=%d ncq_max=%d\n", 1820 ad_no(ai), p, d, 1801 1821 ai->ports[p].devs[d].removable, 1802 1822 ai->ports[p].devs[d].dev_type, … … 1819 1839 if (ai->ports[p].devs[d].removable) 1820 1840 { 1821 s printf(dev_name, RM_CD_PREFIX "%s", p, d, pDevName);1841 snprintf(dev_name, sizeof(dev_name), RM_CD_PREFIX "%s", p, d, pDevName); 1822 1842 } 1823 1843 else 1824 1844 { 1825 s printf(dev_name, RM_HD_PREFIX "%s", p, d, pDevName);1845 snprintf(dev_name, sizeof(dev_name), RM_HD_PREFIX "%s", p, d, pDevName); 1826 1846 } 1827 1847
Note:
See TracChangeset
for help on using the changeset viewer.