Pointers
DIRQs are allocated dynamically from the kernel resident heap.
The IRQI array is a static part of the OS2KRNL load module.
DIRQ owner id: intdirq (0xff78).
IRQI
┌────────────────┬──────┬──────┬────┬────────────────────────────────────────┐│Field Name │Offset│Length│Type│Description │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │irqi_pdirqHead │+0 │4 │D │Head of shared DD chain (0 = not set) │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │irqi_usIRQNum │+4 │2 │W │IRQ number │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │irqi_usFlags │+6 │2 │W │IRQ Flags │ └────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
irqi_usFlags flag definitions
┌────────────────┬────────┬────────────────────────────────────────┐ │Name │Bit Mask│Description │ ├────────────────┼────────┼────────────────────────────────────────┤ │ │0x0003 │reserved │ ├────────────────┼────────┼────────────────────────────────────────┤ │irqf_fVDM │0x0004 │If set, this IRQ is a candidate for │ │ │ │routing to a VDM, if it is not claimed │ │ │ │by a PDD │ ├────────────────┼────────┼────────────────────────────────────────┤ │irqf_fNPX │0x0008 │If set, the IRQ is the NPX interrupt │ │ │ │level │ ├────────────────┼────────┼────────────────────────────────────────┤ │irqf_fSharing │0x0010 │If set, the IRQ is sharable. If clear │ │ │ │the IRQ can not be shared by DD. │ ├────────────────┼────────┼────────────────────────────────────────┤ │irqf_fSys │0x0020 │If set, the IRQ is owned by the system │ │ │ │and the handler can not be changed or │ │ │ │removed by a device driver. Set │ │ │ │initially for the slave, IRQ 2. │ ├────────────────┼────────┼────────────────────────────────────────┤ │irqf_fShared │0x0040 │If set, the IRQ can be shared by more │ │ │ │than 1 DD. This bit reflects the shared│ │ │ │parameter of the first dh_SetIRQ issued │ │ │ │for this level. │ └────────────────┴────────┴────────────────────────────────────────┘
DIRQ
┌────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │Field Name │Offset│Length│Type│Description │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dirq_pdirqLink │+0 │4 │D │Next DIRQ structure in list │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dirq_f16pfn │+4 │4 │D │DD's interrupt handler │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dirq_usDS │+8 │2 │W │DD's data segment │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dirq_usIRQNum │+a │2 │W │IRQ number │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │dirq_pdirqFreeList │+c │4 │D │list of unset DIRQs │ └────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘