@@ -275,12 +275,11 @@ static ioapic_t *find_ioapic_for_irq(uint32_t irq_src) {
275275 return NULL ;
276276}
277277
278- void configure_isa_irq (unsigned irq_src , uint8_t vector , ioapic_dest_mode_t dst_mode ,
279- uint8_t dst_ids ) {
278+ void configure_irq (unsigned irq_src , uint8_t vector , ioapic_dest_mode_t dst_mode ,
279+ uint8_t dst_ids , ioapic_polarity_t polarity ,
280+ ioapic_trigger_mode_t trigger_mode ) {
280281 irq_override_t * irq_override = get_system_isa_bus_irq (IOAPIC_IRQ_TYPE_INT , irq_src );
281282 ioapic_redirtbl_entry_t entry ;
282- ioapic_polarity_t polarity = IOAPIC_POLARITY_AH ;
283- ioapic_trigger_mode_t trigger_mode = IOAPIC_TRIGGER_MODE_EDGE ;
284283 ioapic_t * ioapic ;
285284
286285 if (irq_override ) {
@@ -293,9 +292,13 @@ void configure_isa_irq(unsigned irq_src, uint8_t vector, ioapic_dest_mode_t dst_
293292
294293 if (irq_override -> polarity == IOAPIC_IRQ_OVR_POLARITY_AL )
295294 polarity = IOAPIC_POLARITY_AL ;
295+ else if (irq_override -> polarity == IOAPIC_IRQ_OVR_POLARITY_AH )
296+ polarity = IOAPIC_POLARITY_AH ;
296297
297298 if (irq_override -> trigger_mode == IOAPIC_IRQ_OVR_TRIGGER_LT )
298299 trigger_mode = IOAPIC_TRIGGER_MODE_LEVEL ;
300+ else if (irq_override -> trigger_mode == IOAPIC_IRQ_OVR_TRIGGER_ET )
301+ trigger_mode = IOAPIC_TRIGGER_MODE_EDGE ;
299302 }
300303 else {
301304 ioapic = find_ioapic_for_irq (irq_src );
@@ -311,3 +314,31 @@ void configure_isa_irq(unsigned irq_src, uint8_t vector, ioapic_dest_mode_t dst_
311314 entry .int_mask = IOAPIC_INT_UNMASK ;
312315 set_ioapic_redirtbl_entry (ioapic , irq_src , & entry );
313316}
317+
318+ void configure_isa_irq (unsigned irq_src , uint8_t vector , ioapic_dest_mode_t dst_mode ,
319+ uint8_t dst_ids ) {
320+ configure_irq (irq_src , vector , dst_mode , dst_ids , IOAPIC_POLARITY_AH ,
321+ IOAPIC_TRIGGER_MODE_EDGE );
322+ }
323+
324+ void mask_irq (unsigned irq_src ) {
325+ irq_override_t * irq_override = get_system_isa_bus_irq (IOAPIC_IRQ_TYPE_INT , irq_src );
326+ ioapic_redirtbl_entry_t entry ;
327+ ioapic_t * ioapic ;
328+
329+ if (irq_override ) {
330+ irq_src = irq_override -> dst ;
331+
332+ if (irq_override -> dst_id == IOAPIC_DEST_ID_UNKNOWN )
333+ ioapic = find_ioapic_for_irq (irq_src );
334+ else
335+ ioapic = get_ioapic (irq_override -> dst_id );
336+ }
337+ else {
338+ ioapic = find_ioapic_for_irq (irq_src );
339+ }
340+
341+ get_ioapic_redirtbl_entry (ioapic , irq_src , & entry );
342+ entry .int_mask = IOAPIC_INT_MASK ;
343+ set_ioapic_redirtbl_entry (ioapic , irq_src , & entry );
344+ }
0 commit comments