Annotation of qemu/roms/SLOF/board-js2x/slof/pci-interrupts.fs, revision 1.1

1.1     ! root        1: \ *****************************************************************************
        !             2: \ * Copyright (c) 2004, 2008 IBM Corporation
        !             3: \ * All rights reserved.
        !             4: \ * This program and the accompanying materials
        !             5: \ * are made available under the terms of the BSD License
        !             6: \ * which accompanies this distribution, and is available at
        !             7: \ * http://www.opensource.org/licenses/bsd-license.php
        !             8: \ *
        !             9: \ * Contributors:
        !            10: \ *     IBM Corporation - initial implementation
        !            11: \ ****************************************************************************/
        !            12: 
        !            13: \ define function pointer as forward declaration for get-interrupt-line
        !            14: \ this is board wireing and southbridge dependent
        !            15: \ returns the wired interrupt line for this config addr
        !            16: \ ( config-addr -- irq-line )
        !            17: DEFER pci-get-irq-line
        !            18: 
        !            19: \ define function pointer as forward declaration for get-interrupt-sense-type
        !            20: \ this is board wireing and southbridge dependent
        !            21: \ returns the wired interrupt sense type for this config addr
        !            22: \ 0 - Edge rising
        !            23: \ 1 - Level low
        !            24: \ 2 - Level high
        !            25: \ 3 - Edge falling
        !            26: \ ( config-addr -- irq-sense )
        !            27: DEFER pci-get-irq-sense
        !            28: 
        !            29: 
        !            30: \ *****************************************************************************
        !            31: \ Generic IRQ routines
        !            32: \ *****************************************************************************
        !            33: 
        !            34: 
        !            35: 
        !            36: : unknown-slot ( -- 0 )
        !            37: \      cr pci-vec ABORT" Unknown slot "
        !            38:        0
        !            39: ;
        !            40: \ 0c s" /ht/@1/@2"    PCI-X INTA & INTC Pnpirq0 -> irq12
        !            41: \ 0e s" /ht/@1/@2"    PCI-X INTB & INTD Pnpirq1 -> irq14
        !            42: \ 10 s" /ht/@8,1"     ATA         
        !            43: \ 0f s" /ht/@1/@1"    Obsidian     Pnpirq2 -> irq15
        !            44: \ 10 s" /ht/@7/@2"    Video / Exar Serial  PirqA
        !            45: \ 11 s" /ht/@2/@4"    Ethernet     PirqB
        !            46: \ 12 s" /ht/@2/@4,1"  Ethernet     PirqC
        !            47: \ 13 s" /ht/@7/@0"    USB          PirqD
        !            48: \ 13 s" /ht/@7/@0,1"  USB          PirqD
        !            49: \ 13 s" /ht/@7/@0,2"  USB          PirqD
        !            50: 
        !            51: \ 14 s" /ht/@3/@0"    PCIe gpio28
        !            52: \ 15 s" /ht/@4/@0"    PCIe gpio29
        !            53: \ 16 s" /ht/@5/@0"    PCIe gpio30
        !            54: \ 17 s" /ht/@6/@0"    PCIe gpio31
        !            55: 
        !            56: 
        !            57: \ -----------------------------------------------------------------------------
        !            58: \ Get the interrupt pin for a device on ht u4
        !            59: : u4-get-irq-line ( config-addr -- irq-line )
        !            60: \      cr s" u4-get-irq-line " type
        !            61:        pci-device-vec c@ CASE 
        !            62:                1 OF pci-device-vec-len 1 >= IF  
        !            63:                                pci-device-vec 1+ c@ CASE 
        !            64:                                        1 OF f ENDOF
        !            65:                                        2 OF dup pci-interrupt@ CASE
        !            66:                                                        1 OF c ENDOF
        !            67:                                                        3 OF e ENDOF
        !            68:                                                        2 OF c ENDOF
        !            69:                                                        4 OF e ENDOF
        !            70:                                                ENDCASE
        !            71:                                        ENDOF 
        !            72:                                        dup OF unknown-slot  ENDOF
        !            73:                                ENDCASE
        !            74:                        ELSE
        !            75:                                unknown-slot
        !            76:                        THEN
        !            77:                ENDOF
        !            78:                2 OF pci-device-vec-len 1 >= IF  
        !            79:                                 pci-device-vec 1+ c@ CASE
        !            80:                                        4 OF dup pci-addr2fn 1 >= IF 12 ELSE 11 THEN  ENDOF 
        !            81:                                        dup OF unknown-slot  ENDOF
        !            82:                                ENDCASE
        !            83:                        ELSE
        !            84:                                unknown-slot
        !            85:                        THEN
        !            86:                ENDOF
        !            87:                3 OF 14 ENDOF
        !            88:                4 OF 15 ENDOF
        !            89:                5 OF 16 ENDOF
        !            90:                6 OF 17 ENDOF
        !            91:                7 OF pci-device-vec-len 1 >= IF  
        !            92:                                pci-device-vec 1+ c@ CASE 
        !            93:                                        0 OF 13  ENDOF 
        !            94:                                        2 OF 10  ENDOF 
        !            95:                                        dup OF unknown-slot  ENDOF
        !            96:                                ENDCASE
        !            97:                        ELSE
        !            98:                                unknown-slot
        !            99:                        THEN
        !           100:                ENDOF
        !           101:                8 OF 10 ENDOF
        !           102:                 dup OF unknown-slot  ENDOF     
        !           103:         ENDCASE
        !           104:        swap drop
        !           105: ;
        !           106: 
        !           107: \ -----------------------------------------------------------------------------
        !           108: \ Get the interrupt sense type for a device on ht u4
        !           109: : u4-get-irq-sense ( config-addr -- irq-sense )
        !           110: \      cr s" u4-get-irq-sense " type
        !           111:         u4-get-irq-line CASE 
        !           112:        0c OF 00 ENDOF
        !           113:        0e OF 00 ENDOF
        !           114:        dup OF 01  ENDOF
        !           115:         ENDCASE
        !           116: ;
        !           117: 
        !           118: \ 10 s" /ht/@4,1"    set-pci-interrupt \ ATA
        !           119: \ 13 s" /ht/@3/@0"   set-pci-interrupt \ USB
        !           120: \ 13 s" /ht/@3/@0,1" set-pci-interrupt \ USB
        !           121: \ 13 s" /ht/@3/@0,2" set-pci-interrupt \ USB
        !           122: \ 1c s" /ht/@2/@1"   set-pci-interrupt \ Ethernet
        !           123: \ 1d s" /ht/@2/@1,1" set-pci-interrupt \ Ethernet
        !           124: 
        !           125: \ -----------------------------------------------------------------------------
        !           126: \ Get the interrupt pin for a device on ht u3
        !           127: : u3-get-irq-line ( config-addr -- irq-line )
        !           128: \      cr s" u3-get-irq-line " type
        !           129:        pci-device-vec c@ CASE 
        !           130:                2 OF pci-device-vec-len 1 >= IF  
        !           131:                                pci-device-vec 1+ c@ CASE 
        !           132:                                        1 OF dup pci-addr2fn 1 >= IF 1d ELSE 1c THEN  ENDOF 
        !           133:                                        dup OF unknown-slot  ENDOF
        !           134:                                ENDCASE
        !           135:                        ELSE
        !           136:                                unknown-slot
        !           137:                        THEN
        !           138:                ENDOF
        !           139:                3 OF 13 ENDOF
        !           140:                4 OF 10 ENDOF
        !           141:                 dup OF unknown-slot  ENDOF     
        !           142:         ENDCASE
        !           143:        swap drop
        !           144: ;
        !           145: 
        !           146: \ -----------------------------------------------------------------------------
        !           147: \ Get the interrupt sense type for a device on ht u3
        !           148: : u3-get-irq-sense ( config-addr -- irq-sense )
        !           149: \      cr s" u3-get-irq-sense " type
        !           150:         u3-get-irq-line CASE 
        !           151:        dup OF 01  ENDOF
        !           152:         ENDCASE
        !           153: ;
        !           154: 
        !           155: 
        !           156: 
        !           157: \ -----------------------------------------------------------------------------
        !           158: \ Get the interrupt pin for a device on attu
        !           159: : pcie-get-irq-line ( config-addr -- irq-line )
        !           160: \      cr s" pcie-get-irq-line " type
        !           161:        drop
        !           162:        3
        !           163: ;
        !           164: 
        !           165: 
        !           166: \ -----------------------------------------------------------------------------
        !           167: \ Get the interrupt sense type for a device on attu
        !           168: : pcie-get-irq-sense ( config-addr -- irq-sense )
        !           169: \      cr s" pcie-get-irq-sense " type
        !           170:        drop
        !           171:         01
        !           172: ;
        !           173: 
        !           174: \ -----------------------------------------------------------------------------
        !           175: \ Set up the special routines for HT irq handling
        !           176: : ht-irq-init ( -- )
        !           177: \      cr s" ht-irq-init " type
        !           178:        u4? IF
        !           179:                        ['] u4-get-irq-line TO pci-get-irq-line
        !           180:                        ['] u4-get-irq-sense TO pci-get-irq-sense
        !           181:        ELSE
        !           182:                ['] u3-get-irq-line TO pci-get-irq-line
        !           183:                ['] u3-get-irq-sense TO pci-get-irq-sense
        !           184:        THEN
        !           185: ;
        !           186: 
        !           187: \ -----------------------------------------------------------------------------
        !           188: \ Set up the special routines for PCI-e irq handling
        !           189: : pcie-irq-init ( -- )
        !           190: \      cr s" pcie-irq-init " type
        !           191:         ['] pcie-get-irq-sense TO pci-get-irq-sense
        !           192:         ['] pcie-get-irq-line TO pci-get-irq-line
        !           193: ;
        !           194: 
        !           195: \ -----------------------------------------------------------------------------
        !           196: \ Set up the special routines for irq handling
        !           197: 0 VALUE mpic
        !           198: : pci-irq-init ( mpic puid -- mpic )
        !           199:         over TO mpic
        !           200:         18 rshift FF and
        !           201:         CASE
        !           202:                 F1 OF pcie-irq-init ENDOF
        !           203:                 F2 OF ht-irq-init ENDOF
        !           204:                 dup OF ABORT" Wrong PUID! in pci-irq-init" ENDOF
        !           205:         ENDCASE
        !           206: ;
        !           207: 
        !           208: \ -----------------------------------------------------------------------------
        !           209: \ Set the interrupt pin for a device
        !           210: : pci-set-irq-line ( config-addr -- )
        !           211: \      cr pci-vec
        !           212:         dup pci-get-irq-line 
        !           213: \      ." ->" dup .
        !           214:         swap pci-irq-line!
        !           215: ;
        !           216: 
        !           217: \ -----------------------------------------------------------------------------
        !           218: \ Add an irq entry for the device at config-addr into the irq map
        !           219: \ each entry consists of 7 integer values
        !           220: \ Structure of an entry:
        !           221: \             +----------+---+---+------------+--------------+---------+---------------+
        !           222: \  Number#    |    0     | 1 | 2 |     3      |      4       |    5    |      6        |
        !           223: \             +----------+---+---+------------+--------------+---------+---------------+
        !           224: \  meaning    |  config  |   |   |      int#  |  phandle     | intr nr | pos edge (0)  |
        !           225: \             |   addr   |   |   | (1=a, 2=b, |  intr contr  |         | act ll   (1)  |
        !           226: \             +----------+---+---+------------+--------------+---------+---------------+
        !           227: \  value      | pci slot | 0 | 0 |    1       |        mpic  |     7   |     0|1       |
        !           228: \             +----------+---+---+------------+--------------+---------+---------------+
        !           229: : pci-gen-irq-entry ( prop-addr prop-len config-addr -- prop-addr prop-len )
        !           230:         dup >r encode-int+ 0    encode-64+      \ config addr
        !           231:         r@ pci-interrupt@       encode-int+     \ interrupt type
        !           232:         mpic                    encode-int+     \ phandle to MPIC
        !           233:         r@ pci-irq-line@        encode-int+     \ interrupt number
        !           234:         r> pci-get-irq-sense    encode-int+     \ trigger type
        !           235: ;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.