Lines Matching defs:immu

60 #include <sys/immu.h>
515 "immu-flush-gran");
523 "immu-flush-gran");
537 get_conf_opt("immu-enable", &immu_enable);
538 get_conf_opt("immu-dvma-enable", &immu_dvma_enable);
539 get_conf_opt("immu-gfxdvma-enable", &immu_gfxdvma_enable);
540 get_conf_opt("immu-intrmap-enable", &immu_intrmap_enable);
541 get_conf_opt("immu-qinv-enable", &immu_qinv_enable);
544 get_conf_opt("immu-quirk-usbpage0", &immu_quirk_usbpage0);
545 get_conf_opt("immu-quirk-usbfullpa", &immu_quirk_usbfullpa);
546 get_conf_opt("immu-quirk-usbrmrr", &immu_quirk_usbrmrr);
549 get_conf_opt("immu-dmar-print", &immu_dmar_print);
552 get_conf_tunables("immu-flush-gran", &immu_flush_gran);
561 get_bootopt("immu-enable", &immu_enable);
562 get_bootopt("immu-dvma-enable", &immu_dvma_enable);
563 get_bootopt("immu-gfxdvma-enable", &immu_gfxdvma_enable);
564 get_bootopt("immu-intrmap-enable", &immu_intrmap_enable);
565 get_bootopt("immu-qinv-enable", &immu_qinv_enable);
568 get_bootopt("immu-quirk-usbpage0", &immu_quirk_usbpage0);
569 get_bootopt("immu-quirk-usbfullpa", &immu_quirk_usbfullpa);
570 get_bootopt("immu-quirk-usbrmrr", &immu_quirk_usbrmrr);
573 get_bootopt("immu-dmar-print", &immu_dmar_print);
587 "immu-dvma-unity-drivers",
596 "immu-dvma-xlate-drivers",
605 "immu-dvma-premap-drivers",
614 "immu-dvma-nopremap-drivers",
745 DDI_PROP_DONTPASS | DDI_PROP_ROOTNEX_GLOBAL, "immu-blacklist",
796 immu_t *immu;
806 immu = kmem_zalloc(sizeof (immu_t), KM_SLEEP);
808 mutex_init(&(immu->immu_lock), NULL, MUTEX_DRIVER, NULL);
810 mutex_enter(&(immu->immu_lock));
812 immu->immu_dmar_unit = dmar_unit;
813 immu->immu_dip = immu_dmar_unit_dip(dmar_unit);
815 nodename = ddi_node_name(immu->immu_dip);
816 instance = ddi_get_instance(immu->immu_dip);
818 immu->immu_name = immu_alloc_name(nodename, instance);
819 if (immu->immu_name == NULL)
827 mutex_init(&(immu->immu_intr_lock), NULL, MUTEX_DRIVER,
831 mutex_init(&(immu->immu_regs_lock), NULL, MUTEX_DEFAULT, NULL);
832 cv_init(&(immu->immu_regs_cv), NULL, CV_DEFAULT, NULL);
833 immu->immu_regs_busy = B_FALSE;
836 immu->immu_dvma_coherent = B_FALSE;
839 rw_init(&(immu->immu_ctx_rwlock), NULL, RW_DEFAULT, NULL);
842 list_create(&(immu->immu_domain_list), sizeof (domain_t),
846 immu->immu_dvma_gfx_only = B_FALSE;
847 list_create(&(immu->immu_dvma_lpc_list), sizeof (immu_devi_t),
849 list_create(&(immu->immu_dvma_gfx_list), sizeof (immu_devi_t),
853 mutex_init(&(immu->immu_intrmap_lock), NULL, MUTEX_DEFAULT, NULL);
856 mutex_init(&(immu->immu_qinv_lock), NULL, MUTEX_DEFAULT, NULL);
859 * insert this immu unit into the system-wide list
861 list_insert_tail(&immu_list, immu);
871 immu->immu_pgtable_cache = kmem_cache_create(pcachename,
872 sizeof (pgtable_t), 0, pgtable_ctor, pgtable_dtor, NULL, immu,
874 immu->immu_hdl_cache = kmem_cache_create(hcachename,
876 NULL, NULL, immu, NULL, 0);
878 mutex_exit(&(immu->immu_lock));
880 ddi_err(DER_LOG, immu->immu_dip, "unit setup");
882 immu_dmar_set_immu(dmar_unit, immu);
925 immu_t *immu;
932 immu = list_head(&immu_list);
933 for (; immu; immu = list_next(&immu_list, immu)) {
935 mutex_enter(&(immu->immu_lock));
937 immu_intr_register(immu);
938 immu_dvma_startup(immu);
939 immu_intrmap_startup(immu);
940 immu_qinv_startup(immu);
945 * set immu->immu_running field
949 immu_regs_startup(immu);
951 mutex_exit(&(immu->immu_lock));
955 iommulib_ops->ilops_data = (void *)immu;
956 (void) iommulib_iommu_register(immu->immu_dip, iommulib_ops,
957 &immu->immu_iommulib_handle);
987 /* ddip and immu can be NULL */
1054 * Do this before parsing immu ACPI table
1213 immu_t *immu;
1223 immu = list_head(&immu_list);
1224 for (; immu; immu = list_next(&immu_list, immu)) {
1226 /* if immu is not running, we dont quiesce */
1227 if (immu->immu_regs_running == B_FALSE)
1231 rw_enter(&(immu->immu_ctx_rwlock), RW_WRITER);
1232 immu_flush_context_gbl(immu, &immu->immu_ctx_inv_wait);
1233 immu_flush_iotlb_gbl(immu, &immu->immu_ctx_inv_wait);
1234 rw_exit(&(immu->immu_ctx_rwlock));
1235 immu_regs_wbf_flush(immu);
1237 mutex_enter(&(immu->immu_lock));
1243 immu_regs_shutdown(immu);
1244 immu_regs_suspend(immu);
1246 /* if immu is still running, we failed */
1247 if (immu->immu_regs_running == B_TRUE)
1250 immu->immu_regs_quiesced = B_TRUE;
1252 mutex_exit(&(immu->immu_lock));
1271 immu_t *immu;
1281 immu = list_head(&immu_list);
1282 for (; immu; immu = list_next(&immu_list, immu)) {
1284 mutex_enter(&(immu->immu_lock));
1286 /* if immu was not quiesced, i.e was not running before */
1287 if (immu->immu_regs_quiesced == B_FALSE) {
1288 mutex_exit(&(immu->immu_lock));
1292 if (immu_regs_resume(immu) != DDI_SUCCESS) {
1294 mutex_exit(&(immu->immu_lock));
1299 rw_enter(&(immu->immu_ctx_rwlock), RW_WRITER);
1300 immu_flush_context_gbl(immu, &immu->immu_ctx_inv_wait);
1301 immu_flush_iotlb_gbl(immu, &immu->immu_ctx_inv_wait);
1302 rw_exit(&(immu->immu_ctx_rwlock));
1307 * set immu->immu_regs_running field
1311 immu_regs_startup(immu);
1313 if (immu->immu_regs_running == B_FALSE) {
1318 immu->immu_regs_quiesced = B_FALSE;
1321 mutex_exit(&(immu->immu_lock));