irqp = arm_pic_init_cpu(env);
こんなかんじで platform から初期化する。どんな割り込みモデルを持っているかを知っているのはプラットフォームだから。ターゲットは知りえない。これで、割り込みルーチンが登録される。
arm_pic_init_cpu では arm 用に設定した qemu_irq のポインタが返ってくる。A9 のモデルは2つしかないから IRQ と FIQ 二つが返ってくる。そのあとに sysbus_connect_irq でつなげてるわ。FIQ は使っていない。
ターゲット側は sysbus_init_irq で登録する。
ARM9 も一つのデバイスで、qdev_get_gpio_in で入力の IRQ を返す。これに各ターゲット側をつなげていく。例えば gpio で qemu_set_irq をすれば、その irq 登録関数が呼ばれる。それは cpu のデバイスの irq の in だ。
複雑、、、