Annotation of qemu/roms/SLOF/board-js2x/slof/pci-interrupts.fs, revision 1.1.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.