@@ -189,7 +189,9 @@ aw_r_intc_gicp_map_intr(device_t dev, struct intr_map_data *data,
189189 return (EINVAL );
190190
191191 ret = PIC_MAP_INTR (sc -> parent , data , isrcp );
192- (* isrcp )-> isrc_dev = sc -> dev ;
192+ /* FIXME: Modifying the value of "pic" here is very suspicious, this
193+ ** really shouldn't be done though it may work */
194+ (* isrcp )-> isrc_event .ie_pic = sc -> dev ;
193195 return (ret );
194196}
195197
@@ -243,7 +245,7 @@ aw_r_intc_gicp_pre_ithread(device_t dev, struct intr_irqsrc *isrc)
243245
244246 sc = device_get_softc (dev );
245247
246- PIC_PRE_ITHREAD (sc -> parent , isrc );
248+ INTR_EVENT_PRE_ITHREAD (sc -> parent , isrc );
247249}
248250
249251static void
@@ -253,7 +255,7 @@ aw_r_intc_gicp_post_ithread(device_t dev, struct intr_irqsrc *isrc)
253255
254256 sc = device_get_softc (dev );
255257
256- PIC_POST_ITHREAD (sc -> parent , isrc );
258+ INTR_EVENT_POST_ITHREAD (sc -> parent , isrc );
257259}
258260
259261static void
@@ -263,7 +265,7 @@ aw_r_intc_gicp_post_filter(device_t dev, struct intr_irqsrc *isrc)
263265
264266 sc = device_get_softc (dev );
265267
266- PIC_POST_FILTER (sc -> parent , isrc );
268+ INTR_EVENT_POST_FILTER (sc -> parent , isrc );
267269}
268270
269271static device_method_t aw_r_intc_gicp_methods [] = {
@@ -272,6 +274,11 @@ static device_method_t aw_r_intc_gicp_methods[] = {
272274 DEVMETHOD (device_attach , aw_r_intc_gicp_attach ),
273275 DEVMETHOD (device_detach , aw_r_intc_gicp_detach ),
274276
277+ /* Interrupt event interface */
278+ DEVMETHOD (intr_event_post_filter , aw_r_intc_gicp_post_filter ),
279+ DEVMETHOD (intr_event_post_ithread , aw_r_intc_gicp_post_ithread ),
280+ DEVMETHOD (intr_event_pre_ithread , aw_r_intc_gicp_pre_ithread ),
281+
275282 /* Interrupt controller interface */
276283 DEVMETHOD (pic_activate_intr , aw_r_intc_gicp_activate_intr ),
277284 DEVMETHOD (pic_disable_intr , aw_r_intc_gicp_disable_intr ),
@@ -280,18 +287,13 @@ static device_method_t aw_r_intc_gicp_methods[] = {
280287 DEVMETHOD (pic_deactivate_intr , aw_r_intc_gicp_deactivate_intr ),
281288 DEVMETHOD (pic_setup_intr , aw_r_intc_gicp_setup_intr ),
282289 DEVMETHOD (pic_teardown_intr , aw_r_intc_gicp_teardown_intr ),
283- DEVMETHOD (pic_post_filter , aw_r_intc_gicp_post_filter ),
284- DEVMETHOD (pic_post_ithread , aw_r_intc_gicp_post_ithread ),
285- DEVMETHOD (pic_pre_ithread , aw_r_intc_gicp_pre_ithread ),
286290
287291 DEVMETHOD_END
288292};
289293
290- static driver_t aw_r_intc_gicp_driver = {
291- "aw_r_intc_gicp" ,
292- aw_r_intc_gicp_methods ,
293- sizeof (struct aw_r_intc_gicp_softc ),
294- };
294+ PRIVATE_DEFINE_CLASSN (aw_r_intc_gicp , aw_r_intc_gicp_driver ,
295+ aw_r_intc_gicp_methods , sizeof (struct aw_r_intc_gicp_softc ),
296+ pic_base_class );
295297
296298EARLY_DRIVER_MODULE (aw_r_intc_gicp , simplebus , aw_r_intc_gicp_driver , 0 , 0 ,
297299 BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE );
0 commit comments