Lines Matching defs:ctd

180  * 	private cont_device_t (or ctd for short) data structure. It encapsulates
194 * The ctd structure represents the device private part of a contract of
378 #define EVSENDP(ctd, flag) \
379 ((ctd->cond_contract.ct_ev_info | ctd->cond_contract.ct_ev_crit) & flag)
381 #define EVINFOP(ctd, flag) \
382 ((ctd->cond_contract.ct_ev_crit & flag) == 0)
650 cont_device_t *ctd;
683 ctd = contract_device_create(template->ctmpl_data,
686 if (ctd == NULL) {
694 mutex_enter(&ctd->cond_contract.ct_lock);
695 *ctidp = ctd->cond_contract.ct_id;
696 mutex_exit(&ctd->cond_contract.ct_lock);
751 cont_device_t *ctd = ct->ct_data;
753 ASSERT(ctd->cond_minor);
754 ASSERT(strlen(ctd->cond_minor) < MAXPATHLEN);
755 kmem_free(ctd->cond_minor, strlen(ctd->cond_minor) + 1);
757 ASSERT(ctd->cond_devt != DDI_DEV_T_ANY &&
758 ctd->cond_devt != DDI_DEV_T_NONE && ctd->cond_devt != NODEV);
760 ASSERT(ctd->cond_spec == S_IFBLK || ctd->cond_spec == S_IFCHR);
762 ASSERT(!(ctd->cond_aset & ~CT_DEV_ALLEVENT));
763 ASSERT(ctd->cond_noneg == 0 || ctd->cond_noneg == 1);
765 ASSERT(!(ctd->cond_currev_type & ~CT_DEV_ALLEVENT));
766 ASSERT(!(ctd->cond_currev_ack & ~(CT_ACK | CT_NACK)));
768 ASSERT((ctd->cond_currev_id > 0) ^ (ctd->cond_currev_type == 0));
769 ASSERT((ctd->cond_currev_id > 0) || (ctd->cond_currev_ack == 0));
771 ASSERT(!list_link_active(&ctd->cond_next));
773 kmem_free(ctd, sizeof (cont_device_t));
806 cont_device_t *ctd;
812 ctd = ct->ct_data;
813 dip = ctd->cond_dip;
819 ASSERT(!list_link_active(&ctd->cond_next));
852 list_remove(&(DEVI(dip)->devi_ct), ctd);
853 ctd->cond_dip = NULL; /* no longer linked to dip */
872 cont_device_t *ctd = ct->ct_data;
884 VERIFY(nvlist_add_uint32(nvl, CTDS_STATE, ctd->cond_state) == 0);
885 VERIFY(nvlist_add_uint32(nvl, CTDS_ASET, ctd->cond_aset) == 0);
886 VERIFY(nvlist_add_uint32(nvl, CTDS_NONEG, ctd->cond_noneg) == 0);
893 ASSERT(ctd->cond_minor);
894 VERIFY(nvlist_add_string(nvl, CTDS_MINOR, ctd->cond_minor) == 0);
1017 cont_device_t *ctd = ct->ct_data;
1029 dip = ctd->cond_dip;
1031 ASSERT(ctd->cond_minor);
1032 ASSERT(strlen(ctd->cond_minor) < MAXPATHLEN);
1037 ASSERT(!(ctd->cond_aset & evtype));
1042 ASSERT(is_sync_neg(ctd->cond_state, evtype));
1047 ASSERT(!ctd->cond_noneg);
1073 if (ctd->cond_currev_id != evid) {
1081 ASSERT(ctd->cond_currev_type == evtype);
1098 if (ctd->cond_currev_id != evid) {
1116 ASSERT(ctd->cond_currev_type == evtype);
1122 ctd->cond_currev_ack = cmd;
1201 cont_device_t *ctd;
1241 ctd = kmem_zalloc(sizeof (cont_device_t), KM_SLEEP);
1247 ctd->cond_minor = minor;
1253 ctd->cond_dip = dip;
1254 ctd->cond_devt = dev;
1255 ctd->cond_spec = spec_type;
1261 ctd->cond_state = DEVI_IS_DEVICE_DEGRADED(dip) ?
1265 ctd->cond_aset = dtmpl->ctd_aset;
1266 ctd->cond_noneg = dtmpl->ctd_noneg;
1272 if (contract_ctor(&ctd->cond_contract, device_type, &dtmpl->ctd_ctmpl,
1273 ctd, 0, owner, B_TRUE)) {
1282 contract_device_free(&ctd->cond_contract);
1295 mutex_enter(&ctd->cond_contract.ct_lock);
1296 ctd->cond_contract.ct_ntime.ctm_total = CT_DEV_ACKTIME;
1297 ctd->cond_contract.ct_qtime.ctm_total = CT_DEV_ACKTIME;
1298 ctd->cond_contract.ct_ntime.ctm_start = -1;
1299 ctd->cond_contract.ct_qtime.ctm_start = -1;
1300 mutex_exit(&ctd->cond_contract.ct_lock);
1306 contract_hold(&ctd->cond_contract);
1308 list_insert_tail(&(DEVI(dip)->devi_ct), ctd);
1316 return (ctd);
1328 cont_device_t *ctd;
1386 ctd = contract_device_create(dtmpl, dev, spec_type, curproc, &error);
1395 if (ctd == NULL) {
1404 mutex_enter(&ctd->cond_contract.ct_lock);
1405 *ctpp = &ctd->cond_contract;
1406 mutex_exit(&ctd->cond_contract.ct_lock);
1419 cont_device_t *ctd;
1443 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL;
1444 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) {
1446 mutex_enter(&ctd->cond_contract.ct_lock);
1448 ASSERT(ctd->cond_dip == dip);
1450 if (dev != DDI_DEV_T_ANY && dev != ctd->cond_devt) {
1451 mutex_exit(&ctd->cond_contract.ct_lock);
1454 if (dev != DDI_DEV_T_ANY && spec_type != ctd->cond_spec) {
1455 mutex_exit(&ctd->cond_contract.ct_lock);
1460 if (ctd->cond_noneg) {
1461 mutex_exit(&ctd->cond_contract.ct_lock);
1465 ASSERT(ctd->cond_currev_type == evtype);
1466 if (ctd->cond_currev_ack == CT_NACK) {
1469 mutex_exit(&ctd->cond_contract.ct_lock);
1471 } else if (ctd->cond_currev_ack == CT_ACK) {
1476 mutex_exit(&ctd->cond_contract.ct_lock);
1516 cont_device_t *ctd;
1521 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL;
1522 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) {
1523 mutex_enter(&ctd->cond_contract.ct_lock);
1524 ASSERT(ctd->cond_dip == dip);
1525 ctd->cond_state = state;
1526 mutex_exit(&ctd->cond_contract.ct_lock);
1585 cont_device_t *ctd;
1664 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL;
1665 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) {
1670 mutex_enter(&ctd->cond_contract.ct_lock);
1672 ASSERT(ctd->cond_dip == dip);
1673 ASSERT(ctd->cond_minor);
1674 ASSERT(strncmp(ctd->cond_minor, path, len) == 0 &&
1675 ctd->cond_minor[len] == ':');
1677 if (dev != DDI_DEV_T_ANY && dev != ctd->cond_devt) {
1678 mutex_exit(&ctd->cond_contract.ct_lock);
1681 if (dev != DDI_DEV_T_ANY && spec_type != ctd->cond_spec) {
1682 mutex_exit(&ctd->cond_contract.ct_lock);
1688 ctid = ctd->cond_contract.ct_id;
1707 if (!negend && !(evtype & ctd->cond_aset)) {
1719 if (!broken && !EVSENDP(ctd, evtype) &&
1720 !ctd->cond_neg) {
1723 ctd->cond_contract.ct_id, evtype));
1724 mutex_exit(&ctd->cond_contract.ct_lock);
1732 ct = &ctd->cond_contract;
1740 ASSERT(ctd->cond_currev_id == 0);
1741 ASSERT(ctd->cond_currev_type == 0);
1742 ASSERT(ctd->cond_currev_ack == 0);
1743 ASSERT(ctd->cond_neg == 0);
1744 if (ctd->cond_noneg) {
1751 mutex_exit(&ctd->cond_contract.ct_lock);
1755 ctd->cond_currev_type = event->cte_type;
1758 ctd->cond_neg = 1;
1763 ASSERT(ctd->cond_currev_id == 0);
1764 ASSERT(ctd->cond_currev_type == 0);
1765 ASSERT(ctd->cond_currev_ack == 0);
1766 ASSERT(ctd->cond_neg == 0);
1768 } else if (EVSENDP(ctd, event->cte_type)) {
1772 ASSERT(ctd->cond_currev_id == 0);
1773 ASSERT(ctd->cond_currev_type == 0);
1774 ASSERT(ctd->cond_currev_ack == 0);
1775 ASSERT(ctd->cond_neg == 0);
1776 event->cte_flags = EVINFOP(ctd, event->cte_type) ?
1778 } else if (ctd->cond_neg) {
1781 ASSERT(ctd->cond_noneg == 0);
1782 nevid = ctd->cond_contract.ct_nevent ?
1783 ctd->cond_contract.ct_nevent->cte_id : 0;
1784 ASSERT(ctd->cond_currev_id == nevid);
1786 ctd->cond_currev_id = 0;
1787 ctd->cond_currev_type = 0;
1788 ctd->cond_currev_ack = 0;
1789 ctd->cond_neg = 0;
1793 ctd->cond_contract.ct_id, event->cte_type));
1795 ASSERT(ctd->cond_currev_id == 0);
1796 ASSERT(ctd->cond_currev_type == 0);
1797 ASSERT(ctd->cond_currev_ack == 0);
1798 ASSERT(ctd->cond_neg == 0);
1800 mutex_exit(&ctd->cond_contract.ct_lock);
1809 ASSERT(ctd->cond_noneg == 0);
1816 ctd->cond_contract.ct_id) == 0);
1825 if (ctd->cond_neg) {
1826 ASSERT(ctd->cond_contract.ct_ntime.ctm_start == -1);
1827 ASSERT(ctd->cond_contract.ct_qtime.ctm_start == -1);
1828 ctd->cond_contract.ct_ntime.ctm_start = ddi_get_lbolt();
1829 ctd->cond_contract.ct_qtime.ctm_start =
1830 ctd->cond_contract.ct_ntime.ctm_start;
1838 mutex_exit(&ctd->cond_contract.ct_lock);
1840 mutex_enter(&ctd->cond_contract.ct_lock);
1842 if (ctd->cond_neg) {
1846 ASSERT(!ctd->cond_noneg);
1849 ctd->cond_currev_id = evid;
1851 ctd->cond_contract.ct_ntime.ctm_start = -1;
1852 ctd->cond_contract.ct_qtime.ctm_start = -1;
1854 mutex_exit(&ctd->cond_contract.ct_lock);
2106 cont_device_t *ctd;
2113 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; ctd = next) {
2114 next = list_next(&(DEVI(dip)->devi_ct), ctd);
2115 list_remove(&(DEVI(dip)->devi_ct), ctd);
2116 ct = &ctd->cond_contract;
2121 ASSERT(ctd->cond_dip == dip);
2122 ctd->cond_dip = NULL; /* no longer linked to dip */