Magic Lantern Forum

Developing Magic Lantern => Reverse Engineering => Topic started by: a1ex on January 23, 2018, 07:16:12 PM

Title: Interrupt IDs
Post by: a1ex on January 23, 2018, 07:16:12 PM
After writing these notes (https://bitbucket.org/hudson/magic-lantern/src/qemu/contrib/qemu/HACKING.rst) (in particular, the section about interrupts (https://bitbucket.org/hudson/magic-lantern/src/qemu/contrib/qemu/HACKING.rst#rst-header-interrupts-and-exceptions)), I've noticed we didn't document what all these interrupts are used for. This info is interesting for emulation and understanding how Canon code works; they are not used directly in ML code.

So, here's my first attempt to list all the interrupts we know about. Sources of info:

- startup-log (https://builds.magiclantern.fm/jenkins/view/Experiments/job/startup-log/)s or emulation logs (https://builds.magiclantern.fm/jenkins/job/QEMU-tests/) with register_interrupt calls enabled (some have names in Canon code):
Code: [Select]
grep --text -nro " register_interrupt(.*)" startup-logs/ tests/*/gdb.log | grep -o register_interrupt.*

- interrupts declared in QEMU, model_list.c (https://bitbucket.org/hudson/magic-lantern/src/qemu/contrib/qemu/eos/model_list.c)
Code: [Select]
cat qemu-2.5.0/hw/eos/model_list.c | grep -o "\..*interrupt.*=.*,"

- interrupts scattered in QEMU source: eos_trigger_int (either hardcoded IDs or arrays)
Code: [Select]
FILES=$(cat qemu-2.5.0/hw/eos/Makefile.objs | grep -E "eos/\w+.o" | grep -oE "\w+.o" | cut -d . -f 1 | sed -e 's/$/.c/' | sed -e 's!^!qemu-2.5.0/hw/eos/!')
cat $FILES | grep "eos_trigger_int\|^\w.*(" | grep -B 1 eos_trigger_int
cat $FILES | grep -zoE " [a-zA-Z_]*interrupt[a-zA-Z]*\[[^[]*] = {[^{]*}" | tr "\\n" " " | tr "\\0" "\\n"

- Omar interrupts (https://www.magiclantern.fm/forum/index.php?topic=13408.msg194424#msg194424)

Results (machine output, take with a grain of salt):

Code: [Select]
0x01:
0x02:
0x03: WdtInt
0x06:
0x09: dryos_timer
0x0A: dryos_timer
0x0D: Omar
0x0E: UTimerDriver
0x0F:
0x10: OC4_14, hptimer
0x16:
0x18: hptimer
0x19: OCH_SPx
0x1A: OCH_SPx, hptimer
0x1B: OCHxEPx, dryos_timer
0x1C: OCH_SPx, Omar, hptimer
0x1D: OCHxEPx
0x1E: OCH_SPx, UTimerDriver, hptimer
0x1F: OCHxEPx
0x20: ICAPCHx
0x21: ICAPCHx
0x22: ICAPCHx
0x23: ICAPCHx
0x24: ICAPCHx
0x25: ICAPCHx
0x26: ICAPCHx
0x27: ICAPCHx
0x28: OC4_14, hptimer
0x29: OCHxEPx, sd_dma
0x2A: MREQ_ISR, mpu_mreq
0x2C: DmaAD
0x2D: DmaDA, Omar
0x2E: UTimerDriver, uart_rx
0x2F: BLTDMA, BLTDMAC0, BltDmac, dma
0x30: CFDMADriver, cf_dma
0x32: SDDMADriver, SdDmaInt, sd_dma
0x33:
0x34:
0x35: SlowMossy
0x36: SIO3_ISR, mpu_sio3
0x37: INTC_SIO4
0x38: uart_rx
0x39: OCH_SPx, uart_rx
0x3A: uart_tx
0x3C: Omar
0x3E: UTimerDriver
0x40:
0x41: WRDMAC1
0x42: ASIFAdc
0x43: ASIFDac
0x44: HDMIDET, MICDET, USBDET
0x45: VIDEODET
0x47: MICDET, VARISW3
0x49: OCHxEPx
0x4A: CFDriver, MREQ2_ICU, cf_driver, sd_driver
0x4B: SDDriver, SdConInt, sd_driver
0x4D: Omar
0x4E: UTimerDriver
0x50: EMEGENCY, EMERGENCY_ISR, MREQ_ISR, mpu_mreq
0x51: CAPREADY, CARDDOOR_ISR
0x52: IMGPOWDET, MREQ_ISR, mpu_mreq
0x53: CAPREADY, HDMIDET
0x54: DOS_ISR, EMEGENCY, HDMIDET, MICDET, USBDET, VIDEODET
0x55: ASCHK_ISR, FUNCSW, USBDET, VIDEODET
0x56: HDMIDET, IMGPOWDET, MICDET, TOEDET, USBDET, VARISW3, VIDEODET
0x57: DOSCHK_ISR, TOEDET, USBDET, VARISW3
0x58: EDmacWR0, WEDmac0, edmac
0x59: EDmacWR1, OCH_SPx, WEDmac1, edmac
0x5A: EDmacWR2, LENSIF_SEL, WEDmac2, edmac
0x5B: EDmacWR3, WEDmac3, edmac
0x5C: EDmacWR4, Omar, WEDmac4, edmac
0x5D: EDmacRD0, REDmac0
0x5E: EDmacRD1, REDmac1, UTimerDriver, edmac
0x5F: EDmacRD2, REDmac2, edmac
0x60: CompleteReadOperation
0x61: AfComplete
0x62: AfOverRun
0x63: Obinteg
0x64: JP51_INT_R, JpCore, jpcore
0x65: ADKIZ, ADMERG, IntDefectCorrect, prepro_execute
0x66: Integral, WB Integ, WbInteg
0x67: Block, WbBlock
0x68: EngInt PBVD, Engine PB VD, PB_VD, display
0x69: EngInt PBERROR, EngInt PBVD, OCHxEPx, PB_ERR, Pb error
0x6A: HEAD1, Head1, head
0x6B: HEAD2, Head2, head
0x6C: HEADERROR, HeadError
0x6D: EDmacWR5, Omar, WEDmac5, edmac
0x6E: EDmacRD3, REDmac3, UTimerDriver, edmac
0x70: HarbInt
0x74: BLTDMA, BLTDMAC1, BltDmac, dma
0x75: BltDmac, dma
0x76: BltDmac, dma
0x77: HDMIDET, USBDET
0x79: OCH_SPx
0x7A: XINT_7
0x7C: Omar
0x7E: UTimerDriver
0x80:
0x81:
0x82: CFDriver, cf_driver
0x83: WEDmac8, edmac
0x84:
0x86:
0x88:
0x89: OCHxEPx
0x8A: INT_LM, WEDmac9, edmac
0x8B: REDmac6
0x8C:
0x8D:
0x90: WEDmac6
0x91: REDmac4
0x92: REDmac5, REDmac7, edmac
0x93: CompleteOperation
0x94:
0x95: edmac
0x96: REDmac10, edmac
0x97: REDmac11, edmac
0x98: CAMIF_0
0x99: OCH_SPx
0x9A: CompleteOperation
0x9B:
0x9C: Omar, SEQ
0x9E: REDmac13, edmac
0x9F: edmac
0xA0: BltDmac, EekoBltDmac, dma
0xA1: BltDmac, EekoBltDmac, dma
0xA3: Jp57, JpCore2
0xA5: RDDMAC15, edmac
0xA8: BltDmac, CAMIF_1, dma
0xA9: BltDmac, OCHxEPx, dma
0xAA: CompleteOperation
0xB0: SSIO_SIOINT
0xB1: SDDriver, sd_driver
0xB2: OCH_SPx
0xB3: OCH_SPx
0xB8: CFDMADriver, SDDMADriver, sd_dma
0xB9: OCH_SPx
0xBA: OCH_SPx
0xBB: OCH_SPx
0xBC: Omar
0xBE: SdDmaInt0, sd_dma
0xC0: WEDmac6, edmac
0xC1: REDmac4, edmac
0xC5: SAFARI_INT
0xC6: SAFARI_INT_ERROR
0xC8: REDmac5, edmac
0xC9: Fencing_A, OCHxEPx
0xCA: INT_LM, WEDmac10, edmac
0xCB: WEDmac11, edmac
0xCD: Omar
0xCE: SerialFlash
0xD0: Fencing_B
0xD1: Fencing_C
0xD2: WEDmac12, edmac
0xD3: WEDmac13, edmac
0xD9: HEAD3, Head3, ICAPCHx, head
0xDA: WEDmac14
0xDB: WRDMAC15, edmac
0xDC: Omar
0xDD:
0xDE: SerialFlash
0xE0: HEAD4, head
0xE1: SsgStopIrq
0xE2: REDmac8, edmac
0xE3: CFDMADriver, cf_dma
0xE4: GaUSB20Hal
0xE6:
0xE8:
0xE9: ICAPCHx
0xEE: SdConInt0, sd_driver
0xF9: ICAPCHx, WEDmac7
0xFC: OCH_SPx, Omar
0xFD:
0xFE: SerialFlash, dryos_timer, serial_flash
0xFF:
0x102: RDDMAC13
0x109: ICAPCHx
0x10C: BltDmac
0x10D:
0x10E: SerialFlash
0x111: Eeko WakeUp
0x115:
0x117:
0x119: ICAPCHx
0x125:
0x127:
0x129: ICAPCHx
0x12A: mpu_mreq
0x12D:
0x137:
0x139: ICAPCHx
0x13A: CAPREADY
0x13E: xdmac
0x140: ICOCCHx
0x141: ICAPCHx
0x142: ICAPCHx
0x145:
0x147: SIO3_ISR, mpu_sio3
0x148: ICAPCHx
0x149: ICAPCHx
0x14A: ICAPCHx
0x14E: xdmac
0x150: ICAPCHx
0x151: ICAPCHx
0x152: ICAPCHx
0x157:
0x158: OCH_SPx
0x159: ICAPCHx, OCH_SPx
0x15A: OCH_SPx
0x15D: uart_rx
0x15E: xdmac
0x162: SerialFlash
0x167:
0x169: ICAPCHx
0x16D: uart_tx
0x16E: xdmac
0x171: SDDMADriver, sd_dma
0x172: SDDriver, sd_driver
0x174:
0x177:
0x178: DOS_ISR, MICDET
0x179: ICAPCHx
0x17B: SerialFlash, serial_flash
0x187:
0x189: ICAPCHx
0x18B: WdtInt

TODO:

- group by camera generation, DIGIC version etc
- other sources of info (such as strings present in the interrupt handling function, or other notes about them)
- brute-force interrupts (trigger manually) and see what the firmware is trying to do
- auto-build the above list on Jenkins (so it will be always up to date, at least with QEMU sources)
Title: Re: Interrupt IDs
Post by: Ant123 on January 23, 2018, 08:27:41 PM
0x145: MZRM
Title: Re: Interrupt IDs
Post by: a1ex on March 12, 2018, 06:00:09 PM
TODO:

- group by camera generation, DIGIC version etc

Code: [Select]
       DIGIC 3                   DIGIC 4                   DIGIC 5                   DIGIC 6                   Eeko D5
0x01:                            ?                         ?
0x02:                            ?                         ?
0x03:                            WdtInt
0x06:                                                                                ?
0x09:                            dryos_timer
0x0A:                            dryos_timer               dryos_timer
0x0D:                                                                                Omar
0x0E:                                                                                UTimerDriver
0x0F:                            ?
0x10:  HPTimer, OC4_14           HPTimer, OC4_14           HPTimer, OC4_14
0x16:                                                                                ?
0x18:  HPTimer, dryos_timer
0x19:                                                                                OCH_SPx
0x1A:  HPTimer, OCH_SPx          OCH_SPx                   OCH_SPx                   ?
0x1B:  OCHxEPx                   OCHxEPx                   OCHxEPx                   dryos_timer
0x1C:  HPTimer, OCH_SPx          OCH_SPx                   OCH_SPx                   Omar
0x1D:  OCHxEPx                   OCHxEPx                   OCHxEPx
0x1E:  HPTimer, OCH_SPx          OCH_SPx                   OCH_SPx                   UTimerDriver
0x1F:  OCHxEPx                   OCHxEPx                   OCHxEPx
0x20:  ICAPCHx                   ICAPCHx                   ICAPCHx
0x21:  ICAPCHx                   ICAPCHx                   ICAPCHx
0x22:  ICAPCHx                   ICAPCHx                   ICAPCHx
0x23:  ICAPCHx                   ICAPCHx                   ICAPCHx
0x24:  ICAPCHx                   ICAPCHx                   ICAPCHx
0x25:  ICAPCHx                   ICAPCHx                   ICAPCHx
0x26:  ICAPCHx                   ICAPCHx                   ICAPCHx                   ?
0x27:  ICAPCHx                   ICAPCHx                   ICAPCHx
0x28:                                                                                HPTimer, OC4_14
0x29:  sd_dma                                                                        OCHxEPx
0x2A:                                                                                MREQ
0x2C:                            DmaAD                     DmaAD
0x2D:                            DmaDA                     DmaDA                     Omar
0x2E:  uart_rx                   uart_rx                   uart_rx                   UTimerDriver
0x2F:  BLTDMAC0                  BltDmac, dma              BLTDMA, dma
0x30:  cf_dma
0x32:  sd_dma                    sd_dma
0x33:  SIO0                      SIO0                      SIO0
0x34:  SIO1                      SIO1                      SIO1
0x35:  SIO2                      SIO2                      SIO2                      SlowMossy
0x36:  SIO3                      SIO3                      SIO3
0x37:                            SIO_Int                   INTC_SIO4
0x38:                            uart_rx
0x39:                                                                                OCH_SPx                   uart_rx
0x3A:  uart_tx                   uart_tx                   uart_tx
0x3C:                                                                                Omar
0x3E:                                                                                UTimerDriver
0x40:                            ?                         ?
0x41:                            ?                                                   WRDMAC1
0x42:                            ASIFAdc                   ASIFAdc
0x43:                            ASIFDac                   ASIFDac
0x44:                            USBDET                    HDMIDET, MICDET
0x45:                            VIDEODET
0x47:                            MICDET                    VARISW3
0x49:                                                                                OCHxEPx
0x4A:  cf_driver, sd_driver                                                          MREQ2_ICU
0x4B:  sd_driver                 sd_driver
0x4D:                                                                                Omar
0x4E:                                                                                UTimerDriver
0x50:  EMEGENCY, EMERGENCY       MREQ                      MREQ
0x51:  CARDDOOR                  CAPREADY                  CAPREADY
0x52:  MREQ                      IMGPOWDET                 IMGPOWDET
0x53:  CAPREADY                  HDMIDET                   HDMIDET
0x54:  VIDEODET                  EMEGENCY, HDMIDET, USBD   DOS, HDMIDET, MICDET
0x55:  ASCHK, USBDET, VIDEODET   FUNCSW, USBDET            VIDEODET
0x56:  IMGPOWDET, TOEDET         HDMIDET, VIDEODET         MICDET, USBDET, VARISW3
0x57:  DOSCHK, USBDET            DOSCHK, TOEDET, VARISW3   USBDET
0x58:  EDmacWR0, WEDmac0         EDMAC#0, WEDmac0          EDMAC#0, WEDmac0
0x59:  EDmacWR1, WEDmac1         EDMAC#1, WEDmac1          EDMAC#1, WEDmac1          OCH_SPx
0x5A:  EDmacWR2, WEDmac2         EDMAC#2, WEDmac2          EDMAC#2, WEDmac2          LENSIF_SEL
0x5B:  EDmacWR3, WEDmac3         EDMAC#3, WEDmac3          EDMAC#3, WEDmac3
0x5C:  EDmacWR4, WEDmac4         EDMAC#4, WEDmac4          EDMAC#4, WEDmac4          Omar
0x5D:  EDmacRD0, REDmac0         EDMAC#8, REDmac0          EDMAC#8, REDmac0
0x5E:  EDmacRD1, REDmac1         EDMAC#9, REDmac1          EDMAC#9, REDmac1          UTimerDriver
0x5F:  EDmacRD2, REDmac2         EDMAC#10, REDmac2         EDMAC#10, REDmac2
0x60:  CompleteReadOperation     CompleteReadOperation     CompleteReadOperation
0x61:  AfComplete                AfComplete                AfComplete
0x62:  AfOverRun                 AfOverRun                 AfOverRun
0x63:  Obinteg                   Obinteg                   Obinteg
0x64:  JP51_INT_R, JpCore        JpCore                    JpCore
0x65:  ADKIZ, IntDefectCorrect   ADKIZ, ADMERG                                       ?
0x66:  Integral, WbInteg         WbInteg                   WB Integ
0x67:  Block, WbBlock            WbBlock                   WbBlock
0x68:  EngInt PBVD, Engine PB    EngInt PBVD, PB_VD        EngInt PBVD
0x69:                            EngInt PBVD, PB_ERR, Pb   EngInt PBERROR, Pb erro   OCHxEPx
0x6A:                            HEAD1                     HEAD1
0x6B:                            Head2                     HEAD2
0x6C:                            HEADERROR                 HEADERROR
0x6D:  EDmacWR5, WEDmac5         EDMAC#5, WEDmac5          EDMAC#5, WEDmac5          Omar
0x6E:  EDmacRD3, REDmac3         EDMAC#11, REDmac3         EDMAC#11, REDmac3         UTimerDriver
0x70:  HarbInt
0x74:  BLTDMAC1                  BltDmac, dma              BLTDMA, dma
0x75:                            BltDmac, dma                                        ?
0x76:                            BltDmac, dma
0x77:                                                      HDMIDET, USBDET
0x79:                                                                                OCH_SPx
0x7A:                                                                                XINT_7
0x7C:                                                                                Omar
0x7E:                                                                                UTimerDriver
0x80:                            ?
0x81:                            ?
0x82:                            cf_driver                 cf_driver
0x83:                            EDMAC#17, WEDmac8         EDMAC#17, WEDmac8
0x84:                            ?                         ?
0x86:                                                                                ?
0x88:                            ?
0x89:                            ?                                                   OCHxEPx
0x8A:                            EDMAC#18, WEDmac9         EDMAC#18, WEDmac9         INT_LM
0x8B:                            EDMAC#24, REDmac6         EDMAC#24, REDmac6
0x8C:                            ?                         ?
0x8D:                                                                                ?
0x90:  WEDmac6
0x91:  REDmac4
0x92:  REDmac5                   EDMAC#25, REDmac7         EDMAC#25, REDmac7
0x93:                            CompleteOperation
0x94:                            ?                         ?
0x96:                                                      EDMAC#28, REDmac10
0x97:                                                      EDMAC#29, REDmac11
0x98:                                                                                CAMIF_0
0x99:                                                                                OCH_SPx
0x9A:                            CompleteOperation
0x9B:                            ?
0x9C:                            SEQ                       SEQ                       Omar
0x9D:                                                      EDMAC#40, REDmac12
0x9E:                                                      EDMAC#41, REDmac13
0xA0:                            BltDmac, dma              EekoBltDmac, dma
0xA1:                            BltDmac, dma                                                                  EekoBltDmac
0xA3:                            JpCore2                   Jp57
0xA5:                                                      EDMAC#43, RDDMAC15
0xA8:                            BltDmac, dma                                        CAMIF_1
0xA9:                            BltDmac, dma                                        OCHxEPx
0xAA:                            CompleteOperation
0xB0:                                                      SSIO_SIOINT
0xB1:                            sd_driver
0xB2:                                                                                                          OCH_SPx
0xB3:                                                                                                          OCH_SPx
0xB8:                            cf_dma, sd_dma
0xB9:                                                                                OCH_SPx
0xBA:                                                                                                          OCH_SPx
0xBB:                                                                                                          OCH_SPx
0xBC:                                                                                Omar
0xBE:                                                                                SdDmaInt0, sd_dma
0xC0:                            EDMAC#6, WEDmac6          EDMAC#6, WEDmac6
0xC1:                            EDMAC#12, REDmac4         EDMAC#12, REDmac4
0xC5:                                                      SAFARI_INT
0xC6:                                                      SAFARI_INT_ERROR
0xC8:                            EDMAC#13, REDmac5
0xC9:                            Fencing_A                 Fencing_A                 OCHxEPx
0xCA:                                                      EDMAC#19, WEDmac10        INT_LM
0xCB:                                                      EDMAC#20, WEDmac11
0xCD:                                                                                Omar
0xCE:                                                                                SerialFlash
0xD0:                            Fencing_B                 Fencing_B
0xD1:                            Fencing_C                 Fencing_C
0xD2:                                                      EDMAC#21, WEDmac12
0xD3:                                                      EDMAC#22, WEDmac13
0xD9:                            HEAD3                     HEAD3                     ICAPCHx
0xDA:                                                      EDMAC#32, WEDmac14
0xDB:                                                      EDMAC#33, WRDMAC15
0xDC:                                                                                Omar
0xDD:                                                                                ?
0xDE:                                                                                SerialFlash
0xE0:                            HEAD4                     HEAD4
0xE1:                            SsgStopIrq
0xE2:                                                      EDMAC#26, REDmac8
0xE3:                            cf_dma                    cf_dma
0xE4:                                                      GaUSB20Hal
0xE6:                                                                                ?
0xE8:                                                                                ?
0xE9:                                                                                ICAPCHx
0xEA:                            ?
0xEE:                                                                                SdConInt0, sd_driver
0xF9:                            EDMAC#16, WEDmac7         EDMAC#16, WEDmac7         ICAPCHx
0xFC:                                                                                Omar                      OCH_SPx
0xFD:                                                                                ?
0xFE:                                                                                SerialFlash               dryos_timer
0xFF:                                                                                ?
0x102:                                                     Eeko                      RDDMAC13
0x109:                                                                               ICAPCHx
0x10A:                                                     Eeko
0x10C:                                                                               BltDmac
0x10D:                                                                               ?
0x10E:                                                                               SerialFlash
0x110:                                                     Eeko
0x111:                                                     Eeko WakeUp
0x115:                                                                               ?
0x117:                                                                               ?
0x118:                                                     Eeko
0x119:                                                     Eeko                      ICAPCHx
0x124:                                                     Eeko
0x125:                                                                               ?
0x127:                                                                               ?
0x129:                                                                               ICAPCHx
0x12A:                                                                               mreq
0x12D:                                                                               ?
0x137:                                                                               ?
0x139:                                                                               ICAPCHx
0x13A:                                                                               CAPREADY
0x13E:                                                                               xdmac
0x140:                                                                                                         ICOCCHx
0x141:                                                                                                         ICAPCHx
0x142:                                                                                                         ICAPCHx
0x145:                                                                               MZRM
0x147:                                                                               SIO3
0x148:                                                                                                         ICAPCHx
0x149:                                                                               ICAPCHx                   ICAPCHx
0x14A:                                                                                                         ICAPCHx
0x14E:                                                                               xdmac
0x150:                                                                                                         ICAPCHx
0x151:                                                                                                         ICAPCHx
0x152:                                                                                                         ICAPCHx
0x157:                                                                               ?
0x158:                                                                                                         OCH_SPx
0x159:                                                                               ICAPCHx                   OCH_SPx
0x15A:                                                                                                         OCH_SPx
0x15D:                                                                               uart_rx
0x15E:                                                                               xdmac
0x162:                                                     SerialFlash
0x167:                                                                               ?
0x169:                                                                               ICAPCHx
0x16D:                                                                               uart_tx
0x171:                                                     sd_dma
0x172:                                                     sd_driver
0x174:                                                                               ?
0x177:                                                                               ?
0x178:                                                     DOS, MICDET
0x179:                                                                               ICAPCHx
0x17B:                                                     SerialFlash
0x187:                                                                               ?
0x189:                                                                               ICAPCHx
0x18B:                                                                               WdtInt