Changeset f70598c7 in rtems


Ignore:
Timestamp:
Oct 26, 1999, 1:34:42 AM (20 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
9982674
Parents:
3a0a97a
Message:

Patch from Erik Ivanenko <erik.ivanenko@…> to fix some
reported bugs in the start code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/i386/i386ex/start/start.S

    r3a0a97a rf70598c7  
    3636 */
    3737
     38
    3839#include "asm.h"
    3940#include "macros.inc"
    4041#include "80386ex.inc"
    4142
     43
    4244/*
    4345 * NEW_GAS Needed for binutils 2.9.1.0.7 and higher
     
    5052        PUBLIC (Interrupt_descriptor_table)
    5153        PUBLIC ( SYM(IDTR) )
    52         PUBLIC( SYM(_initInternalRegisters) )
     54/*      PUBLIC( SYM(_initInternalRegisters) )  */
    5355       
    5456BEGIN_DATA
     
    8183*/
    8284       
    83 
     85        .code16
    8486        .section .reset                       
    85 
    8687                PUBLIC ( SYM(reset) )
    87 SYM(reset):     
     88SYM(reset):
    8889        nop
    8990        cli
    9091        jmp     SYM(_initInternalRegisters) /* different section in this file */
    91         .code32                             /* in case this section moves     */
     92/*      .code32                              in case this section moves     */
    9293        nop                                 /* required by CHIP LAB to pad out size */
    9394        nop
     
    9596        nop
    9697        nop
    97 
    98        
     98        nop
     99        nop
     100        nop
     101        nop
     102        nop
     103        nop
    99104       
    100105        .section .initial
    101         nop     /* nops required to correct 32 bit jmp relative */
    102         nop     /*    offset from .reset section */
    103        
     106        /* nop */               /* required for linker -- initial jump is to "label - 2"   */
     107        /* nop */               /* ie. _initInternalRegisters -2 ( which now == .initial ) */   
    104108/*
    105109 * Enable access to peripheral register at expanded I/O addresses
    106110 */
    107111SYM(_initInternalRegisters):   
    108         .code16
     112
     113        /* .code16 */
    109114        movw    $0x8000 , ax           
    110115        outb    al      , $REMAPCFGH
     
    112117        outb    al,$REMAPCFGL
    113118        outw    ax,      $REMAPCFG ;
    114        
    115 
    116119/*
    117120 * Configure operation of the A20 Address Line
     
    124127        orb     $0x02   , al   # Bit 1 Fast A20 = 0 (always 0) else enabled.
    125128        outb    al      , dx
     129
    126130
    127131SYM(Watchdog):
     
    243247
    244248        SetExRegByte( LCR0,     0x80 )  # latch DLL0, DLH0
    245         SetExRegByte( DLL0, 0x51 )      # 0x51 sets to 9600 baud 0x7 -> 115,200
     249        SetExRegByte( DLL0, 0x51 )      # 0x51 sets to 9600 baud, 0x28=19.2k, 0x7 -> 115.2k
    246250        SetExRegByte( DLH0, 0x00 )  # 0x145 is 2400 baud
    247251        SetExRegByte( LCR0, 0x03 )  # enable r/w buffers, IER0 accessible
     
    311315       
    312316        cli                               # !
    313        
     317/*      SetExRegByte(OCW3S, 0x20)  # address the Slave status port
     318        movw    $OCW3S  , dx   
     319        inb     dx      , al    # Read the IRR.
     320
     321        SetExRegByte(OCW3M, 0x20)  # address the Master status port
     322        movw    $OCW3M  , dx   
     323        inb     dx      , al    # Read the IRR.
     324*/     
     325               
    314326        SetExRegByte(ICW1S  , 0x11 ) # EDGE TRIGGERED
    315327        SetExRegByte(ICW2S  , 0x28 ) # Slave base vector after Master
     
    320332        SetExRegByte(ICW2M  , 0x20 ) # base vector starts at byte 32
    321333        SetExRegByte(ICW3M  , 0x04)  # IR2 is cascaded internally
    322         SetExRegByte(ICW4M  , 0x01 ) # idem
    323        
    324         SetExRegByte(OCW1M  , 0xde ) # IR0  only = 0xfe.  for IR5 and IR0 active use 0xde
     334        SetExRegByte(ICW4M  , 0x01 ) # fully nested mode
     335       
     336        SetExRegByte(OCW1M  , 0xde )    # IR0  only = 0xfe. 
     337                                        # for IR5 and IR0 active use 0xde
     338                                        # for IR0 and IR2 use 0xfa
    325339        SetExRegByte(INTCFG , 0x00 )
    326340       
    327         /*
    328          *  The addr32 override should ensure that the address for
    329          *  i8259s_cache is put in 32-bit address space.
    330          */
    331 
    332 #if defined(NEW_GAS)
    333         addr32 movw $0xFFFB, SYM(i8259s_cache) # set up same values in cache
    334 #else
    335         movw    $0xFFFB, SYM(i8259s_cache)     # set up same values in cache
    336 #endif
    337341       
    338342SYM(SetCS4):   
     
    352356* So, move the whole data section down.
    353357********************************************************/
    354 
     358 
    355359        movw $ _ram_data_offset , di
    356360        movw $ _ram_data_segment, cx
     
    382386        SetExRegWord(UCSMSKH, 0x0007)   
    383387        SetExRegWord(UCSMSKL, 0xFC01)     # configure upper chip select
    384 
     388       
     389        /*
     390         * SRAM chip select:     16 bit bus size,starting 16Mb, size 512k,
     391         *                       4 waits
     392         */
     393       
     394#ifdef UT_I386EX
     395
     396SYM(SetCS1):
     397        SetExRegWord(CS1ADL,  0x0000)
     398        SetExRegWord(CS1ADH,  0x000E)
     399        SetExRegWord(CS1MSKH, 0x0000)
     400        SetExRegWord(CS1MSKL, 0x0001)
     401
     402SYM(SetCS2):
     403        SetExRegWord(CS2ADL,  0x0704)
     404        SetExRegWord(CS2ADH,  0x0100)
     405        SetExRegWord(CS2MSKH, 0x0003)
     406        SetExRegWord(CS2MSKL, 0xfc01)
     407
     408        /*
     409         * Real-time clock:     8 bit bus size, starting@16Mb+512K, size 32k
     410         *                       4 waits 
     411         */
     412SYM(SetCS3):
     413        SetExRegWord(CS3ADL,  0x0504)
     414        SetExRegWord(CS3ADH,  0x0108)
     415        SetExRegWord(CS3MSKH, 0x0000)
     416        SetExRegWord(CS3MSKL, 0x7c01)
     417
     418#endif
    385419/***************************
    386420 * Switch to Protected Mode
    387421 ***************************/
     422
    388423        mov     cr0, eax
    389424        orw     $0x1, ax
     
    419454        movl    $stack_origin, esp      # this is the high starting address
    420455        movl    $stack_origin, ebp
     456
    421457/*
    422458 *  Zero out the BSS segment
     
    433469        stosl                           #   clear a long in the bss
    434470
     471
    435472/*
    436473 *  Transfer control to User's Board Support Package
     
    439476        pushl   $0                       # argv
    440477        pushl   $0                       # argc
     478
     479        movw    $0xFFFB, SYM(i8259s_cache)      # ICU mask values reflect
     480                                                # initial ICU state
    441481        call SYM(boot_card)
    442482        addl    $12,esp
Note: See TracChangeset for help on using the changeset viewer.