Print this page
XXXX introduce drv_sectohz


 440         int     ret;
 441 
 442         ret = ddi_soft_state_init(&ahci_statep, sizeof (ahci_ctl_t), 0);
 443         if (ret != 0) {
 444                 goto err_out;
 445         }
 446 
 447 #if AHCI_DEBUG
 448         mutex_init(&ahci_log_mutex, NULL, MUTEX_DRIVER, NULL);
 449 #endif
 450 
 451         if ((ret = sata_hba_init(&modlinkage)) != 0) {
 452 #if AHCI_DEBUG
 453                 mutex_destroy(&ahci_log_mutex);
 454 #endif
 455                 ddi_soft_state_fini(&ahci_statep);
 456                 goto err_out;
 457         }
 458 
 459         /* watchdog tick */
 460         ahci_watchdog_tick = drv_usectohz(
 461             (clock_t)ahci_watchdog_timeout * 1000000);
 462 
 463         ret = mod_install(&modlinkage);
 464         if (ret != 0) {
 465                 sata_hba_fini(&modlinkage);
 466 #if AHCI_DEBUG
 467                 mutex_destroy(&ahci_log_mutex);
 468 #endif
 469                 ddi_soft_state_fini(&ahci_statep);
 470                 goto err_out;
 471         }
 472 
 473         return (ret);
 474 
 475 err_out:
 476         cmn_err(CE_WARN, "!ahci: Module init failed");
 477         return (ret);
 478 }
 479 
 480 /*
 481  * ahci module uninitialize.


1795         int pkt_timeout_ticks;
1796         uint32_t timeout_tags;
1797         int rval;
1798         int instance = ddi_get_instance(ahci_ctlp->ahcictl_dip);
1799         uint8_t port = addrp->aa_port;
1800 
1801         ASSERT(MUTEX_HELD(&ahci_portp->ahciport_mutex));
1802 
1803         AHCIDBG(AHCIDBG_ENTRY, ahci_ctlp, "ahci_do_sync_start enter: "
1804             "port %d:%d spkt 0x%p", port, addrp->aa_pmport, spkt);
1805 
1806         if (spkt->satapkt_op_mode & SATA_OPMODE_POLLING) {
1807                 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_POLLING;
1808                 if ((rval = ahci_deliver_satapkt(ahci_ctlp, ahci_portp,
1809                     addrp, spkt)) == AHCI_FAILURE) {
1810                         ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_POLLING;
1811                         return (rval);
1812                 }
1813 
1814                 pkt_timeout_ticks =
1815                     drv_usectohz((clock_t)spkt->satapkt_time * 1000000);
1816 
1817                 while (spkt->satapkt_reason == SATA_PKT_BUSY) {
1818                         mutex_exit(&ahci_portp->ahciport_mutex);
1819 
1820                         /* Simulate the interrupt */
1821                         ahci_port_intr(ahci_ctlp, ahci_portp, port);
1822 
1823                         drv_usecwait(AHCI_10MS_USECS);
1824 
1825                         mutex_enter(&ahci_portp->ahciport_mutex);
1826                         pkt_timeout_ticks -= AHCI_10MS_TICKS;
1827                         if (pkt_timeout_ticks < 0) {
1828                                 cmn_err(CE_WARN, "!ahci%d: ahci_do_sync_start "
1829                                     "port %d satapkt 0x%p timed out\n",
1830                                     instance, port, (void *)spkt);
1831                                 timeout_tags = (0x1 << rval);
1832                                 mutex_exit(&ahci_portp->ahciport_mutex);
1833                                 ahci_timeout_pkts(ahci_ctlp, ahci_portp,
1834                                     port, timeout_tags);
1835                                 mutex_enter(&ahci_portp->ahciport_mutex);




 440         int     ret;
 441 
 442         ret = ddi_soft_state_init(&ahci_statep, sizeof (ahci_ctl_t), 0);
 443         if (ret != 0) {
 444                 goto err_out;
 445         }
 446 
 447 #if AHCI_DEBUG
 448         mutex_init(&ahci_log_mutex, NULL, MUTEX_DRIVER, NULL);
 449 #endif
 450 
 451         if ((ret = sata_hba_init(&modlinkage)) != 0) {
 452 #if AHCI_DEBUG
 453                 mutex_destroy(&ahci_log_mutex);
 454 #endif
 455                 ddi_soft_state_fini(&ahci_statep);
 456                 goto err_out;
 457         }
 458 
 459         /* watchdog tick */
 460         ahci_watchdog_tick = drv_sectohz(ahci_watchdog_timeout);

 461 
 462         ret = mod_install(&modlinkage);
 463         if (ret != 0) {
 464                 sata_hba_fini(&modlinkage);
 465 #if AHCI_DEBUG
 466                 mutex_destroy(&ahci_log_mutex);
 467 #endif
 468                 ddi_soft_state_fini(&ahci_statep);
 469                 goto err_out;
 470         }
 471 
 472         return (ret);
 473 
 474 err_out:
 475         cmn_err(CE_WARN, "!ahci: Module init failed");
 476         return (ret);
 477 }
 478 
 479 /*
 480  * ahci module uninitialize.


1794         int pkt_timeout_ticks;
1795         uint32_t timeout_tags;
1796         int rval;
1797         int instance = ddi_get_instance(ahci_ctlp->ahcictl_dip);
1798         uint8_t port = addrp->aa_port;
1799 
1800         ASSERT(MUTEX_HELD(&ahci_portp->ahciport_mutex));
1801 
1802         AHCIDBG(AHCIDBG_ENTRY, ahci_ctlp, "ahci_do_sync_start enter: "
1803             "port %d:%d spkt 0x%p", port, addrp->aa_pmport, spkt);
1804 
1805         if (spkt->satapkt_op_mode & SATA_OPMODE_POLLING) {
1806                 ahci_portp->ahciport_flags |= AHCI_PORT_FLAG_POLLING;
1807                 if ((rval = ahci_deliver_satapkt(ahci_ctlp, ahci_portp,
1808                     addrp, spkt)) == AHCI_FAILURE) {
1809                         ahci_portp->ahciport_flags &= ~AHCI_PORT_FLAG_POLLING;
1810                         return (rval);
1811                 }
1812 
1813                 pkt_timeout_ticks =
1814                     drv_sectohz((clock_t)spkt->satapkt_time);
1815 
1816                 while (spkt->satapkt_reason == SATA_PKT_BUSY) {
1817                         mutex_exit(&ahci_portp->ahciport_mutex);
1818 
1819                         /* Simulate the interrupt */
1820                         ahci_port_intr(ahci_ctlp, ahci_portp, port);
1821 
1822                         drv_usecwait(AHCI_10MS_USECS);
1823 
1824                         mutex_enter(&ahci_portp->ahciport_mutex);
1825                         pkt_timeout_ticks -= AHCI_10MS_TICKS;
1826                         if (pkt_timeout_ticks < 0) {
1827                                 cmn_err(CE_WARN, "!ahci%d: ahci_do_sync_start "
1828                                     "port %d satapkt 0x%p timed out\n",
1829                                     instance, port, (void *)spkt);
1830                                 timeout_tags = (0x1 << rval);
1831                                 mutex_exit(&ahci_portp->ahciport_mutex);
1832                                 ahci_timeout_pkts(ahci_ctlp, ahci_portp,
1833                                     port, timeout_tags);
1834                                 mutex_enter(&ahci_portp->ahciport_mutex);