home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.2 / LINUX-1.2 / LINUX-1 / linux / arch / mips / kernel / head.S < prev    next >
Encoding:
Text File  |  1995-01-31  |  14.7 KB  |  737 lines

  1. /*
  2.  *  mips/head.S
  3.  *
  4.  *  Copyright (C) 1994 Waldorf Electronics
  5.  *  Written by Ralf Baechle and Andreas Busse
  6.  *
  7.  *  Head.S contains the MIPS exception handler and startup code.
  8.  */
  9.  
  10. #undef DEBUGPICA /* undef this if you have a different system */
  11.  
  12. #include <linux/tasks.h>
  13.  
  14. #include <asm/segment.h>
  15. #include <asm/cachectl.h>
  16. #include <asm/mipsregs.h>
  17. #include <asm/mipsconfig.h>
  18. #include <asm/stackframe.h>
  19. #include <asm/regdef.h>
  20. #include <asm/bootinfo.h>
  21. #include <asm/segment.h>
  22.  
  23. #define PAGE_SIZE    0x1000
  24.  
  25. /*
  26.  * For now we can't enable write caching. This would cause trouble
  27.  * with the page aliases used by the memory management.
  28.  * The page table's aliases even have to be uncachable, but that
  29.  * doesn't hurt much anyway.
  30.  */
  31. #define PAGE_TABLE    0x0580  /* uncachable */
  32. #define PAGE_SHARED    0x0580  /* cachable, writethrough, no write allocate */
  33. #define MODE_ALIAS    0x0016    /* uncachable */
  34.  
  35.         .globl    _empty_bad_page
  36.         .globl    _empty_bad_page_table
  37.         .globl    _pg0
  38.         .globl    _empty_zero_page
  39.         .globl    _swapper_pg_dir
  40.  
  41.         .text
  42.         .globl    _kernelbase
  43. _kernelbase:
  44.  
  45. /*
  46.  * This is space for the interrupt handlers.
  47.  * They are located at virtual address KSEG[01] (physical 0x0)
  48.  */
  49.         /*
  50.          * TLB refill, EXL == 0
  51.          */
  52.         .set    noreorder
  53.         .set    noat
  54. except_vec0:
  55. #if KERNELBASE == KSEG1
  56.         la    k0,1f
  57.         jr    k0
  58.         nop
  59. 1:
  60. #endif
  61.         dmfc0    k1,CP0_CONTEXT
  62.         dsra    k1,k1,1
  63.         lwu    k0,(k1)            # May cause another exception
  64.         lwu    k1,4(k1)
  65.         dsrl    k0,k0,6            # Convert to EntryLo format
  66.         dsrl    k1,k1,6            # Convert to EntryLo format
  67.         dmtc0    k0,CP0_ENTRYLO0
  68.         dmtc0    k1,CP0_ENTRYLO1
  69.         tlbwr
  70.         eret
  71.  
  72.         /*
  73.          * XTLB refill, EXL == 0
  74.          * Should never be reached
  75.          */
  76.         .org    except_vec0+0x80
  77. except_vec1:    
  78. #if KERNELBASE == KSEG1
  79.         la    k0,1f
  80.         jr    k0
  81.         nop
  82. 1:
  83. #endif
  84.         la    a0,xtlb_text
  85.         jal    _panic
  86.         nop
  87. 1:        j    1b
  88.         nop
  89. xtlb_text:    .asciz    "XTLB Refill exception.\n"
  90.  
  91.         /*
  92.          * Cache Error
  93.          */
  94.         .org    except_vec1+0x80
  95. except_vec2:
  96. #if KERNELBASE == KSEG1
  97.         la    k0,1f
  98.         jr    k0
  99.         nop
  100. 1:
  101. #endif
  102.         /*
  103.          * Should never be reached
  104.          */
  105.         la    a0,xtlb_text
  106.         jal    _panic
  107.         nop
  108. 1:        j    1b
  109.         nop
  110. cache_text:    .asciz    "Cache error exception\n"
  111.  
  112.         /*
  113.          * General exception vector.
  114.          */
  115.         .org    except_vec2+0x80
  116. except_vec3:    /*
  117.          * Register saving is delayed as long as we don't know
  118.          * which registers really need to be saved.
  119.          */
  120. #if KERNELBASE == KSEG1
  121.         la    k0,1f
  122.         jr    k0
  123.         nop
  124. 1:
  125. #endif
  126.         .set    noat
  127.         mfc0    k1,CP0_CAUSE
  128.         la    k0,_exception_handlers
  129.         /*
  130.          * Next lines assumes that the used CPU type has max.
  131.          * 32 different types of exceptions. We might use this
  132.          * to implement software exceptions in the future.
  133.          */
  134.         andi    k1,k1,0x7c
  135.         addu    k0,k0,k1
  136.         lw    k0,(k0)
  137.         FILL_LDS
  138.         jr    k0
  139.         nop
  140.  
  141. /******************************************************************************/
  142.  
  143. /*
  144.  * Kernel entry
  145.  */
  146.         .set    noreorder
  147.         .set    at
  148. kernel_entry:
  149.         jal    refill
  150.         nop
  151.  
  152.         /*
  153.          * Clear BSS first so that there are no surprises...
  154.          */
  155.         la    t0,__edata
  156.         la    t1,__end
  157.         sw    zero,(t0)
  158. 1:        addiu    t0,t0,4
  159.         bnel    t0,t1,1b
  160.         sw    zero,(t0)
  161.  
  162. #ifdef DEBUGPICA
  163.         la      t0,_boot_info
  164.         lw      t0,OFFSET_BOOTINFO_VRAM_BASE(t0)
  165.         li      t1,0x0f00 + '3'
  166.         sh      t1,4(t0)
  167. #endif
  168.  
  169.         .set    noreorder
  170.         jal    _tlbflush
  171.         mtc0    zero,CP0_WIRED
  172.         /*
  173.          * Spread some mines...
  174.          */
  175.         la    t0,_end
  176.         la    t1,0x003ffffc
  177.         la    t2,KERNELBASE
  178.         or    t1,t2
  179.         li    t2,0xdeadbeef
  180. 1:        sw    t2,(t0)
  181.         bne    t0,t1,1b
  182.         addiu    t0,t0,4
  183.         /*
  184.          * Initialize memory management, map lowest 4MB
  185.          */
  186.         .set    reorder
  187.         jal    setup_paging
  188. #if KERNELBASE == KSEG0
  189.         jal    _sys_cacheflush
  190. #endif
  191.  
  192. #ifdef DEBUGPICA
  193.         la      t0,_boot_info
  194.         lw      t0,OFFSET_BOOTINFO_VRAM_BASE(t0)
  195.         li      t1,0x0f00 + '4'
  196.         sh      t1,6(t0)
  197. #endif
  198.         /*
  199.          * Stack for kernel and init
  200.          */
  201.         la    sp,_init_user_stack+PAGE_SIZE-24
  202.         sw    sp,_kernelsp
  203.  
  204. 1:        jal    _start_kernel
  205.         /*
  206.          * Main should never return here, but
  207.          * just in case, we know what happens.
  208.          */
  209.         j    1b
  210.  
  211. /*
  212.  * Setup_paging
  213.  *
  214.  * Wire mappings for page_tables.
  215.  * The page tables are set up, identity-mapping
  216.  * the first 4MB.  The rest are initialized later.
  217.  */
  218.         .set    noreorder
  219. setup_paging:
  220.         /*
  221.           * get base address of map0 table for the
  222.          * the board we're running on
  223.          */
  224.         la    t0,_boot_info
  225.         lw    t1,OFFSET_BOOTINFO_MACHTYPE(t0)
  226.         sll    t1,t1,2            # machtype used as index
  227.         la    t0,map0table
  228.         addu    t0,t0,t1
  229.         lw    t0,(t0)            # get base address
  230.  
  231.         /*
  232.          * Get number of wired TLB entries and
  233.          * loop over selected map0 table.
  234.          */
  235.         lw    t1,(t0)            # number of wired TLB entries
  236.         move    t2,zero            # TLB entry counter
  237.         addiu    t3,t1,1            # wire one additional entry
  238.         beqz    t1,2f            # null, exit
  239.         mtc0    t3,CP0_WIRED        # delay slot
  240.         addiu    t0,t0,8
  241. 1:        lw    t4,24(t0)        # PageMask
  242.         ld    t5,0(t0)        # entryHi
  243.         ld    t6,8(t0)        # entryLo0
  244.         ld    t7,16(t0)        # entryLo1
  245.         addiu    t2,t2,1            # increment ctr
  246.         mtc0    t2,CP0_INDEX        # set TLB entry
  247.         mtc0    t4,CP0_PAGEMASK
  248.         dmtc0    t5,CP0_ENTRYHI
  249.         dmtc0    t6,CP0_ENTRYLO0
  250.         dmtc0    t7,CP0_ENTRYLO1
  251.          tlbwi 
  252.         bne    t1,t2,1b        # next TLB entry
  253.         addiu    t0,t0,32        # delay slot
  254.  
  255.         /*
  256.          * We use only 4k pages. Therefore the PageMask register
  257.          * is expected to be setup for 4k pages.
  258.          */
  259. 2:        li    t0,PM_4K
  260.         mtc0    t0,CP0_PAGEMASK
  261.  
  262.         la    t1,_swapper_pg_dir    # swapper_pg_dir is at 0x1000
  263.         la    t2,_swapper_pg_dir+(PAGE_SIZE-4)
  264. 1:        sw    zero,(t1)
  265.         bne    t1,t2,1b
  266.         addiu    t1,t1,4            # delay slot
  267.  
  268.         /*
  269.          * Setup invalid_pg_table and
  270.          * clear page table for the first 4MB
  271.          */
  272.         la    t0,_pg0            # swapper_pg_dir is at 0x1000
  273.         la    t1,_pg0+PAGE_SIZE
  274.         li    t2,KERNELBASE
  275.         addu    t0,t2
  276.         addu    t1,t2
  277. 1:        sw    zero,(t0)
  278.         addiu    t0,t0,4
  279.         bne    t0,t1,1b
  280.         addiu    t2,t2,4            # delay slot
  281.  
  282.         /*
  283.          * Identity-map the kernel in low 4MB memory for ease
  284.          * of transition. Unlike the Intel version the kernel
  285.          * code/data is automagically being mapped by kseg0.
  286.          */
  287.         la    t0,_pg0+PAGE_TABLE    # set valid bit/user r/w
  288.         sw    t0,_swapper_pg_dir
  289.  
  290.         li    t0,PAGE_SHARED        # set valid bit/user r/w
  291.         la    t1,_pg0
  292.         la    t2,_pg0+PAGE_SIZE
  293.         li    t3,KERNELBASE
  294.         addu    t1,t3
  295.         addu    t2,t3
  296. 1:        sw    t0,(t1)
  297.         addiu    t1,t1,4
  298.         bne    t1,t2,1b
  299.         addiu    t0,t0,PAGE_SIZE        # delay slot
  300.  
  301.         /*
  302.          * Now map the pagetables
  303.          */
  304.         mtc0    zero,CP0_INDEX
  305.         la    t0,TLB_ROOT
  306.         dmtc0    t0,CP0_ENTRYHI
  307.         la    t0,_swapper_pg_dir
  308.         srl    t0,t0,6
  309.         ori    t0,t0,MODE_ALIAS    # uncachable, dirty, valid
  310.         dmtc0    t0,CP0_ENTRYLO0
  311.         dmtc0    zero,CP0_ENTRYLO1
  312.         tlbwi
  313.         /*
  314.          * Make page zero unaccessible to catch zero references
  315.          */
  316.         la    t0,_pg0
  317.         li    t0,KERNELBASE
  318.         addu    t0,t1
  319.         sw    zero,(t0)
  320.         /*
  321.          * Load the context register with a value that allows
  322.          * it to be used as fast as possible in tlb exceptions.
  323.          * It is expected that this register's content never
  324.          * will be changed.
  325.          */
  326.         li    t0,TLBMAP
  327.         dsll    t0,t0,1
  328.         jr    ra
  329.         dmtc0    t0,CP0_CONTEXT        # delay slot
  330.  
  331.         /*
  332.          * Flush the TLB
  333.          *
  334.          * FIXME: knows only how to handle R4x00
  335.          * Read appendix f of the R4000 manual before you change
  336.          * something!
  337.          */
  338.         .globl    _tlbflush
  339. _tlbflush:    li    t0,PM_4K
  340.         mtc0    t0,CP0_PAGEMASK
  341.         lw    t0,_boot_info+OFFSET_BOOTINFO_TLB_ENTRIES(t0)
  342.         dmtc0    zero,CP0_ENTRYLO0
  343.         dmtc0    zero,CP0_ENTRYLO1
  344.         mfc0    t2,CP0_WIRED
  345. 1:        subu    t0,t0,1
  346.         mtc0    t0,CP0_INDEX
  347.         lui    t1,0x0008
  348.         or    t1,t0,t1
  349.         dsll    t1,t1,13
  350.         dmtc0    t1,CP0_ENTRYHI
  351.         bne    t2,t0,1b
  352.         tlbwi                    # delay slot
  353.         jr    ra
  354.         nop
  355.  
  356. /*
  357.  * Refill icache
  358.  */
  359. #include <asm/mipsconfig.h>
  360. #include <asm/regdef.h>
  361. #include <asm/segment.h>
  362.  
  363. #define PAGE_SIZE    0x1000
  364.  
  365. #define CACHELINES    512             /* number of cachelines    */
  366.  
  367.         .set    noreorder
  368.         .text
  369. refill:
  370.         /*
  371.          * Refill icache with cache fill command
  372.          */
  373.         li    t0,KSEG0
  374.         li    t1,CACHELINES
  375. 1:        cache    21,0(t0)
  376.         cache    21,32(t0)
  377.         cache    21,64(t0)
  378.         cache    21,96(t0)
  379.         cache    21,128(t0)
  380.         cache    21,160(t0)
  381.         cache    21,192(t0)
  382.         cache    21,224(t0)
  383.         cache    21,256(t0)
  384.         cache    21,288(t0)
  385.         cache    21,320(t0)
  386.         cache    21,352(t0)
  387.         cache    21,384(t0)
  388.         cache    21,416(t0)
  389.         cache    21,448(t0)
  390.         cache    21,480(t0)
  391.         subu    t1,t1,1
  392.         bnez    t1,1b
  393.         addiu    t0,t0,512            # delay slot
  394.  
  395.         jr    ra
  396.         nop
  397.  
  398. /*
  399.  * Just for debugging...
  400.  */
  401.         .globl    _beep
  402. _beep:        lw    t0,beepflag
  403.         nop
  404.         bnez    t0,1f
  405.         lbu    t0,0xe0000061
  406.         xori    t0,t0,3
  407.         sb    t0,0xe0000061
  408.         li    t0,1
  409.         sw    t0,beepflag
  410. 1:        jr    ra
  411.         nop
  412.  
  413. /*
  414.  * Compute kernel code checksum to check kernel code against corruption
  415.  */
  416.         .globl    _csum
  417. #if 0
  418. _csum:        jal    _sys_cacheflush
  419.         move    t8,ra            # delay slot
  420. #else
  421. _csum:        move    t8,ra
  422. #endif
  423.         li    t0,KSEG1
  424.         la    t1,final
  425.         li    t2,KSEG1
  426.         or    t0,t2
  427.         or    t1,t2
  428.         move    v0,zero
  429. 1:        lw    t2,(t0)
  430.         addiu    t0,t0,4
  431.         bne    t0,t1,1b
  432.         xor    v0,v0,t2
  433.         jr    t8
  434.         nop
  435. final:
  436.  
  437.         .data
  438. /*
  439.  * Initial mapping tables for supported Mips boards.
  440.  * First item is always the number of wired TLB entries,
  441.  * following by EntryHi/EntryLo pairs and page mask.
  442.  * Since everything must be quad-aligned (8) we insert
  443.  * some dummy zeros.
  444.  */
  445.  
  446. /*
  447.  * Address table of mapping tables for supported Mips boards.
  448.  * Add your own stuff here but don't forget to define your
  449.  * target system in bootinfo.h
  450.  */
  451.  
  452. map0table:    .word    map0_dummy        # machtype = unknown
  453.         .word    map0_tyne        # Deskstation Tyne
  454.         .word    map0_pica61        # Acer Pica-61
  455.  
  456. map0_dummy:    .word    0            # 0 entries
  457.  
  458. /*
  459.  * Initial mappings for Deskstation Tyne boards.
  460.  */
  461.         .align  8
  462.  
  463. map0_tyne:     .word   3            # no. of wired TLB entries
  464.         .word    0            # pad for alignment
  465.  
  466. # TLB entry 1: ISA I/O
  467.  
  468.         .quad    0xffffffffe0000000    # TLB #0 EntryHi
  469.         .quad   0x24000017        # TLB #0 EntryLo0
  470.         .quad    0            # TLB #0 EntryLo1
  471.         .word   PM_64K            # page mask
  472.         .word   0            # pad for alignment
  473.  
  474. # TLB entry 2: ISA memory space
  475.  
  476.         .quad    0xffffffffe1000000    # TLB #1 EntryHi
  477.         .quad   0x04000017        # TLB #1 EntryLo0
  478.         .quad    0            # TLB #1 EntryLo1
  479.         .word   PM_1M
  480.         .word    0            # pad for alignment
  481.  
  482. # TLB entry 3: ISA DMA cache
  483.  
  484.         .quad    0xffffffffe2000000    # TLB #2 EntryHi
  485.         .quad     0x04020017        # TLB #2 EntryLo0
  486.         .quad    0            # TLB #2 EntryLo1
  487.         .word    PM_1M
  488.         .word     0            # pad for alignment
  489.  
  490. /*
  491.  * Initial mapping for ACER PICA-61 boards.
  492.  * FIXME: These are rather preliminary since many drivers,
  493.  * such as serial, parallel, scsi and ethernet need some
  494.  * changes to distinguish between "local" (built-in) and
  495.  * "optional" (ISA/PCI) I/O hardware.
  496.  * Local video ram is mapped to the same location as the
  497.  * bios maps it to. Console driver has been changed
  498.  * accordingly (new video type: VIDEO_TYPE_PICA_S3).
  499.  */
  500.  
  501. map0_pica61:    .word      9            # no. wired TLB entries
  502.         .word    0            # dummy
  503.  
  504. # TLB entry 1: PROM
  505.  
  506. #        .quad    0xffffffffe1000000    # BIOS mapping
  507.         .quad    0xffffffffe4000000    # new mapping
  508.         .quad    0x03ffc013
  509.         .quad    0x00000001        # global, not valid
  510.         .word    PM_256K
  511.         .word    0
  512.  
  513. # TLB entry 2: local I/O space
  514.  
  515.         .quad   0xffffffffe0000000
  516.         .quad     0x02000017
  517.         .quad    0x00000001        # global, not valid
  518.         .word    PM_64K
  519.         .word    0
  520.  
  521. # TLB entry 3: DRAM config register
  522.  
  523.         .quad    0xffffffffe00e0000
  524.         .quad    0x02003817
  525.         .quad    0x02003c17
  526.         .word    PM_64K
  527.         .word    0
  528.  
  529. # TLB entry 4: Interrupt source register
  530.  
  531.         .quad    0xffffffffe0100000
  532.         .quad    0x03c00017
  533.         .quad    0x00000001        # global, not valid
  534.         .word    PM_4K
  535.         .word    0
  536.  
  537. # TLB entry 5: Local video control
  538.  
  539.         .quad    0xffffffffe0200000
  540.         .quad    0x01800017
  541.         .quad    0x01804017
  542.         .word    PM_1M
  543.         .word    0
  544.  
  545. # TLB entry 6: Extended video control
  546.  
  547.         .quad    0xffffffffe0400000
  548.         .quad    0x01808017
  549.         .quad    0x0180c017
  550.         .word    PM_1M
  551.         .word    0
  552.  
  553. # TLB entry 7: Local video memory (BIOS mapping)
  554.  
  555.         .quad    0xffffffffe0800000
  556.         .quad    0x01000017
  557.         .quad    0x01010017
  558.         .word   PM_4M
  559.         .word    0
  560.  
  561. # TLB entry 8: Local video memory (mapped to where Linux expects it)
  562. # not needed anymore
  563. #        .quad    0xffffffffe1000000
  564. #        .quad    0x01000017
  565. #        .quad    0x01010017
  566. #        .word   PM_4M
  567. #        .word    0
  568.  
  569. # TLB entry 9: ISA I/O and ISA memory space (both 16M)
  570.  
  571.         .quad    0xffffffffe2000000
  572.         .quad    0x02400017
  573.         .quad    0x02440017
  574.         .word    PM_16M
  575.         .word    0
  576.  
  577. # TLB entry 10: PCR (???)
  578.  
  579.         .quad    0xffffffffffffe000
  580.         .quad    0x00000001        # nonsense...
  581.         .quad    0x0001ffd7
  582.         .word    PM_4K
  583.         .word    0
  584.  
  585.  
  586. /* ------------------------------------------------
  587.  * Mapping as presented by the PICA BIOS.
  588.  * This table works. Please leave unmodified!
  589.  * ------------------------------------------------ */
  590. #if 0
  591. map0_pica61:    .word    11            # no. wired TLB entries
  592.         .word    0            # dummy
  593.  
  594. # TLB entry 0: Don't know what this is good for...
  595.  
  596.         .quad    0xfffffffffffe2000
  597.         .quad    0x0000029e
  598.         .quad    0x00000000
  599.         .word    PM_4K
  600.         .word    0
  601.  
  602. # TLB entry 1: PROM
  603.  
  604.         .quad    0xffffffffe1000000
  605.         .quad    0x03ffc013
  606.         .quad    0x00000001        # nonsense ...
  607.         .word    PM_256K
  608.         .word    0
  609.  
  610. # TLB entry 2: local I/O space
  611.  
  612.         .quad   0xffffffffe0000000
  613.         .quad     0x02000017
  614.         .quad    0x00000001        # nonsense ...
  615.         .word    PM_64K
  616.         .word    0
  617.  
  618. # TLB entry 3: DRAM config register
  619.  
  620.         .quad    0xffffffffe00e0000
  621.         .quad    0x02003817
  622.         .quad    0x02003c17
  623.         .word    PM_64K
  624.         .word    0
  625.  
  626. # TLB entry 4: Interrupt source register
  627.  
  628.         .quad    0xffffffffe0100000
  629.         .quad    0x03c00017
  630.         .quad    0x00000001        # nonsense ...
  631.         .word    PM_4K
  632.         .word    0
  633.  
  634. # TLB entry 5: Local video control
  635.  
  636.         .quad    0xffffffffe0200000
  637.         .quad    0x01800017
  638.         .quad    0x01804017
  639.         .word    PM_1M
  640.         .word    0
  641.  
  642. # TLB entry 6: Extended video control
  643.  
  644.         .quad    0xffffffffe0400000
  645.         .quad    0x01808017
  646.         .quad    0x0180c017
  647.         .word    PM_1M
  648.         .word    0
  649.  
  650. # TLB entry 7: Local video memory
  651.  
  652.         .quad    0xffffffffe0800000
  653.         .quad    0x01000017
  654.         .quad    0x01010017
  655.         .word   PM_4M
  656.         .word    0
  657.  
  658. # TLB entry 8: ISA I/O space
  659.  
  660.         .quad    0xffffffffe2000000
  661.         .quad    0x02400017
  662.         .quad    0x02440017
  663.         .word    PM_16M
  664.         .word    0
  665.  
  666. # TLB entry 9: PCR (???)
  667.  
  668.         .quad    0xffffffffffffe000
  669.         .quad    0x00000001        # nonsense...
  670.         .quad    0x0001ffd7
  671.         .word    PM_4K
  672.         .word    0
  673.  
  674. # TLB entry 10: Extended video prom
  675.  
  676.         .quad    0xffffffff10000000
  677.         .quad    0x0000141f
  678.         .quad    0x00000001        # nonsense
  679.         .word   PM_64K
  680.         .word    0
  681. #endif
  682.  
  683. /*
  684.  * page 0 is made non-existent, so that kernel NULL pointer references get
  685.  * caught. Thus the swapper page directory has been moved to 0x1000
  686.  *
  687.  * XXX Actually, the swapper page directory is at 0x1000 plus 1 megabyte,
  688.  * with the introduction of the compressed boot code.  Theoretically,
  689.  * the original design of overlaying the startup code with the swapper
  690.  * page directory is still possible --- it would reduce the size of the kernel
  691.  * by 2-3k.  This would be a good thing to do at some point.....
  692.  */
  693.             .text
  694.  
  695.             .org    0x1000
  696. _swapper_pg_dir        =    0x1000
  697. /*
  698.  * The page tables are initialized to only 4MB here - the final page
  699.  * tables are set up later depending on memory size.
  700.  */
  701.             .org    0x2000
  702. _pg0            =    0x2000
  703.  
  704.             .org    0x3000
  705. _empty_bad_page        =    0x3000
  706.  
  707.             .org    0x4000
  708. _empty_bad_page_table    =    0x4000
  709.  
  710.             .org    0x5000
  711. _empty_zero_page    =    0x5000
  712.  
  713.             .org    0x6000
  714.  
  715. #if defined (CONFIG_DESKSTATION_TYNE) && !defined (CONFIG_ACER_PICA_61)
  716. #if 0
  717. /*
  718.  * tmp_floppy_area is used by the floppy-driver when DMA cannot
  719.  * reach to a buffer-block. It needs to be aligned, so that it isn't
  720.  * on a 64kB border.
  721.  */
  722.             .globl    _tmp_floppy_area
  723. _tmp_floppy_area:    .fill    1024,1,0
  724. #endif
  725. /*
  726.  * floppy_track_buffer is used to buffer one track of floppy data: it
  727.  * has to be separate from the tmp_floppy area, as otherwise a single-
  728.  * sector read/write can mess it up. It can contain one full cylinder (sic) of
  729.  * data (36*2*512 bytes).
  730.  */
  731.             .globl    _floppy_track_buffer
  732. _floppy_track_buffer:    .fill    512*2*36,1,0
  733. #endif /* defined (CONFIG_DESKSTATION_TYNE) && !defined (CONFIG_ACER_PICA_61) */
  734.             .globl    _kernelsp
  735. _kernelsp:        .word    0
  736. beepflag:        .word    0
  737.