Changeset 76 for trunk/src/os2ahci/ahci.c
- Timestamp:
- Feb 18, 2011, 10:09:10 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/os2ahci/ahci.c
r75 r76 591 591 592 592 dprintf("resetting port %d.%d\n", ad_no(ai), p); 593 ddprintf(" PORT_CMD_ISSUE = 0x%lx\n", readl(port_mmio + PORT_CMD_ISSUE)); 594 ddprintf(" PORT_SCR_ACT = 0x%lx\n", readl(port_mmio + PORT_SCR_ACT)); 595 ddprintf(" PORT_SCR_ERR = 0x%lx\n", readl(port_mmio + PORT_SCR_ERR)); 596 ddprintf(" PORT_TFDATA = 0x%lx\n", readl(port_mmio + PORT_TFDATA)); 597 ddprintf(" PORT_IRQ_STAT = 0x%lx\n", readl(port_mmio + PORT_IRQ_STAT)); 598 ddprintf(" PORT_IRQ_MASK = 0x%lx\n", readl(port_mmio + PORT_IRQ_MASK)); 599 ddprintf(" HOST_IRQ_STAT = 0x%lx\n", readl(ai->mmio + HOST_IRQ_STAT)); 593 600 594 601 /* stop port engines (we don't care whether there is an error doing so) */ … … 597 604 /* clear SError */ 598 605 tmp = readl(port_mmio + PORT_SCR_ERR); 599 ddprintf(" PORT_SCR_ERR = 0x%lx\n", tmp);600 606 writel(port_mmio + PORT_SCR_ERR, tmp); 601 607 602 608 /* clear pending port IRQs */ 603 609 tmp = readl(port_mmio + PORT_IRQ_STAT); 604 ddprintf("PORT_IRQ_STAT was 0x%lx\n", tmp);605 610 if (tmp) { 606 611 writel(port_mmio + PORT_IRQ_STAT, tmp); 607 612 } 608 ddprintf(" PORT_IRQ_STAT = 0x%lx\n", tmp);609 ddprintf(" PORT_IRQ_MASK = 0x%lx\n", readl(port_mmio + PORT_IRQ_MASK));610 ddprintf(" HOST_IRQ_STAT = 0x%lx\n", readl(ai->mmio + HOST_IRQ_STAT));611 613 writel(ai->mmio + HOST_IRQ_STAT, 1UL << p); 612 614 … … 701 703 PORT_IRQ_UNK_FIS | 702 704 PORT_IRQ_SDB_FIS | 705 PORT_IRQ_DMAS_FIS | 706 PORT_IRQ_PIOS_FIS | 703 707 PORT_IRQ_D2H_REG_FIS); 704 708 } else { … … 759 763 760 764 /* disable port interrupts */ 761 writel(port_mmio + PORT_IRQ_MASK, PORT_IRQ_TF_ERR);765 writel(port_mmio + PORT_IRQ_MASK, 0); 762 766 763 767 /* disable FIS reception */ … … 839 843 840 844 return((timeout <= 0) ? -1 : 0); 845 } 846 847 /****************************************************************************** 848 * Determine whether a port is busy executing commands. 849 */ 850 ahci_port_busy(AD_INFO *ai, int p) 851 { 852 u8 _far *port_mmio = port_base(ai, p); 853 854 return(readl(port_mmio + PORT_SCR_ACT) != 0 || 855 readl(port_mmio + PORT_CMD_ISSUE) != 0); 841 856 } 842 857 … … 931 946 ADD_StartTimerMS(&aws->timer, timeout, (PFN) timeout_callback, iorb, 0); 932 947 933 /* update IORB */ 948 /* issue command to hardware */ 949 *cmds |= (1UL << port->cmd_slot); 934 950 aws->queued_hw = 1; 935 951 aws->cmd_slot = port->cmd_slot; 936 952 937 /* issue command to hardware */938 953 ddprintf("issuing command on slot %d\n", port->cmd_slot); 939 *cmds |= (1UL << port->cmd_slot);940 954 if (aws->is_ncq) { 941 955 writel(port_mmio + PORT_SCR_ACT, (1UL << port->cmd_slot)); … … 1423 1437 1424 1438 /****************************************************************************** 1425 * Execute ATA command. 1439 * Execute ATA command. Please note that this is allowed for both ATA and 1440 * ATAPI devices because ATAPI devices will process some ATA commands as well. 1426 1441 */ 1427 1442 void ahci_execute_ata(IORBH _far *iorb) … … 1433 1448 dphex(((IORB_ADAPTER_PASSTHRU _far *) iorb)->pControllerCmd, 1434 1449 ((IORB_ADAPTER_PASSTHRU _far *) iorb)->ControllerCmdLen, 1435 "ahci_execute_cdb(%d.%d.%d): ", a, p, d); 1436 1437 if (ad_infos[a].ports[p].devs[d].atapi) { 1438 iorb_seterr(iorb, IOERR_CMD_NOT_SUPPORTED); 1439 iorb_done(iorb); 1440 } else { 1441 ahci_exec_iorb(iorb, 0, ata_execute_ata); 1442 } 1450 "ahci_execute_ata(%d.%d.%d): ", a, p, d); 1451 1452 ahci_exec_iorb(iorb, 0, ata_execute_ata); 1443 1453 } 1444 1454
Note:
See TracChangeset
for help on using the changeset viewer.