internal PCIInterrupt GeneratePCIIRQ(int gsi) { lock (pci_ints) { if (pci_ints.ContainsKey(gsi)) { return(pci_ints[gsi]); } GlobalSystemInterrupt gsi_obj = GetGSI(gsi); if (gsi_obj == null) { return(null); } PCIInterrupt ret = new PCIInterrupt(gsi_obj); pci_ints[gsi] = ret; return(ret); } }
private ISAInterrupt GenerateISAIRQ(int i) { /* Parse interrupt source overrides to find out the gsi of this irq */ int gsi_num = i; bool is_level_trigger = false; bool is_low_active = false; foreach (var iso in isos) { if (iso.Bus == 0 && iso.Source == i) { gsi_num = (int)iso.GSI; System.Diagnostics.Debugger.Log(0, "acpipc", "IRQ: " + i.ToString() + " remaps to GSI: " + gsi_num.ToString()); switch ((iso.Flags >> 2) & 0x3) { case 0: is_level_trigger = false; break; case 1: is_level_trigger = false; break; case 3: is_level_trigger = true; break; } switch (iso.Flags & 0x3) { case 0: if (is_level_trigger) { is_low_active = true; } else { is_low_active = false; } break; case 1: is_low_active = false; break; case 3: is_low_active = true; break; } } } GlobalSystemInterrupt gsi = GetGSI(gsi_num); if (gsi == null) { System.Diagnostics.Debugger.Log(0, "acpipc", "GetGSI(" + gsi_num.ToString() + ") returned false"); return(null); } ISAInterrupt ret = new ISAInterrupt(gsi); ret.is_level_trigger = is_level_trigger; ret.is_low_active = is_low_active; ret.irq = i; System.Diagnostics.Debugger.Log(0, "acpipc", "Created ISA Interrupt handler for IRQ " + i.ToString()); return(ret); }
internal ACPIInterrupt(GlobalSystemInterrupt global_interrupt, bool level_trigger, bool low_active) : base(global_interrupt) { gsi = global_interrupt; is_level_trigger = level_trigger; is_low_active = low_active; }
internal ACPIInterrupt(GlobalSystemInterrupt global_interrupt) : base(global_interrupt) { gsi = global_interrupt; }
internal ISAInterrupt(GlobalSystemInterrupt global_interrupt) : base(global_interrupt, false, false) { }
internal PCIInterrupt(GlobalSystemInterrupt global_interrupt) : base(global_interrupt, true, true) { }