Changeset 208b5f5 in mainline for kernel/arch/sparc32/src/trap_table.S


Ignore:
Timestamp:
2013-12-29T14:32:55Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4c14b88, 6fa9a99d, 9be30cdf, aacdb8e
Parents:
2a13328
Message:

cherrypick important fixes and updates from lp:~jceel/helenos/leon3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc32/src/trap_table.S

    r2a13328 r208b5f5  
    165165        save
    166166       
    167         ldd [%sp +  0], %l0
    168         ldd [%sp +  8], %l2
     167        ldd [%sp + 0], %l0
     168        ldd [%sp + 8], %l2
    169169        ldd [%sp + 16], %l4
    170170        ldd [%sp + 24], %l6
     
    430430        nop
    431431       
    432        
    433432        1:
    434433                /* Rotate WIM on bit LEFT, we have 8 windows */
     
    442441                mov %g0, %wim
    443442                nop; nop; nop
    444                
     443       
    445444        /* Kernel: */
    446445        restore
     
    563562                mov %psr, %l0
    564563                or %l0, (1 << 5), %l0
     564                or %l0, 0xf00, %l0
    565565                mov %l0, %psr
    566566                nop
     
    568568                nop
    569569                nop
    570                
    571                 /* Get UWB address */
    572                 ##      switch_to_invalid %g5, %g6
    573                 ##      mov %l6, %g1
    574                 ##      switch_back %g5, %g6
    575570               
    576571                /* Flush windows to stack */
     
    582577                add %sp, 128, %o1
    583578               
    584                 /* Return from handler */
     579                /* Return from handler (leave PIL disabled) */
    585580                ld [%sp + 92], %l1
    586581                ld [%sp + 96], %l2
    587582                ld [%sp + 100], %l0
     583                or %l0, 0xf00, %l0
    588584                mov %l0, %psr
    589585                nop
     
    653649                ld [%sp + 116], %g4
    654650                ld [%sp + 120], %g7
     651               
    655652                mov %l3, %sp
    656653                b 10f
     
    659656        9:
    660657                inline_restore_kernel
     658               
    661659                ld [%sp + 104], %g1
    662660                ld [%sp + 108], %g2
     
    664662                ld [%sp + 116], %g4
    665663                ld [%sp + 120], %g7
     664       
     665                /* Restore old sp */
     666                add %sp, 128, %sp
    666667       
    667668        10:
     
    716717                switch_back %g5, %g6
    717718                mov %g7, %sp
    718                 ##      mov %sp, %fp
    719719       
    720720        5:
     
    733733                st %l0, [%sp + 120]
    734734               
    735                 /* Enable traps */
     735                /* Enable traps (without PIL) */
    736736                mov %psr, %l0
    737737                or %l0, (1 << 5), %l0
     738                or %l0, 0xf00, %l0
    738739                mov %l0, %psr
    739740                nop
     
    747748               
    748749                /* Jump to actual subroutine */
    749                 mov %g2, %o0
    750750                call irq_exception
    751751                add %sp, 128, %o1
    752752               
    753                 /* Return from handler */
     753                /* Return from handler (leave PIL disabled) */
    754754                ld [%sp + 92], %l1
    755755                ld [%sp + 96], %l2
    756756                ld [%sp + 100], %l0
     757                or %l0, 0xf00, %l0
    757758                mov %l0, %psr
    758759                nop
     
    766767                 * and save uwb address for future use.
    767768                 */
    768                 if_from_kernel 6f
     769                if_from_kernel 9f
    769770                switch_to_invalid %g5, %g6
    770771                clr %l7
     
    797798                ba 0b
    798799                nop
    799                
     800       
    800801        /*
    801802         * We've restored all user space windows. Now time to
     
    815816                switch_back %g5, %g6
    816817               
    817                 /* If next window is invalid, do inline restore */
    818         6:
    819                 get_wim_number %g6
    820                 get_cwp %g7
    821                 inc %g7
    822                 and %g7, 0x7, %g7
    823                 cmp %g6, %g7
    824                 bne 8f
    825                
    826                 if_from_kernel 7f
    827                
    828                 inline_restore_uspace %g1
    829                 switch_to_invalid %g5, %g6
    830                 mov %g1, %l6
    831                 switch_back %g5, %g6
    832                 b 8f
    833                 nop
    834        
    835         7:
    836                 inline_restore_kernel
    837        
    838         8:
     818                mov %sp, %l3
     819                sub %g2, 128, %sp
    839820                ld [%sp + 104], %g1
    840821                ld [%sp + 108], %g2
     
    842823                ld [%sp + 116], %g4
    843824                ld [%sp + 120], %g7
     825               
     826                mov %l3, %sp
     827                b 10f
     828                nop
     829       
     830        9:
     831                inline_restore_kernel
     832               
     833                ld [%sp + 104], %g1
     834                ld [%sp + 108], %g2
     835                ld [%sp + 112], %g3
     836                ld [%sp + 116], %g4
     837                ld [%sp + 120], %g7
     838               
     839                /* Restore old sp */
     840                add %sp, 128, %sp
     841       
     842        10:
    844843                jmp %l1
    845844                rett %l2
     
    892891                switch_back %g5, %g6
    893892                mov %g7, %sp
    894                 ##      mov %sp, %fp
     893                ## mov %sp, %fp
    895894               
    896895        5:
     
    909908                st %l0, [%sp + 120]
    910909               
    911                 /* Enable traps */
     910                /* Enable traps (without PIL) */
    912911                mov %psr, %l0
    913912                or %l0, (1 << 5), %l0
     913                or %l0, 0xf00, %l0
    914914                mov %l0, %psr
    915915                nop
     
    933933                mov %i5, %o5
    934934               
    935                 /* Return from handler */
     935                /* Return from handler (with PIL disabled) */
    936936                ld [%sp + 92], %l1
    937937                ld [%sp + 96], %l2
     
    940940                mov %psr, %l1
    941941                and %l1, 0xf, %l1
     942                or %l1, 0x00000f00, %l1
    942943                and %l0, 0xfffffff0, %l0
    943944                or %l0, %l1, %l0
     
    10091010                ld [%sp + 116], %g4
    10101011                ld [%sp + 120], %g7
     1012               
    10111013                mov %l1, %sp
     1014                nop
     1015                nop
     1016                nop
     1017               
    10121018                jmp %l2
    10131019                rett %l2 + 4
     
    10351041#define INTERRUPT(_vector, _priority) \
    10361042        .org trap_table + _vector * TRAP_ENTRY_SIZE; \
    1037         mov %psr, %l0 ; \
    1038         mov _priority, %g2 ; \
     1043        mov _priority, %o0 ; \
    10391044        b interrupt_trap ; \
     1045        nop ;
    10401046        nop ;
    10411047
Note: See TracChangeset for help on using the changeset viewer.