Changeset 16f9782 in mainline for kernel


Ignore:
Timestamp:
2011-08-19T16:46:22Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ab34cc9
Parents:
633bcc6 (diff), 45059d6b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

Location:
kernel
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/Makefile.inc

    r633bcc6 r16f9782  
    6464endif
    6565
     66ifeq ($(PROCESSOR),i486)
     67        CMN2 = -march=i486
     68endif
     69
    6670ifeq ($(PROCESSOR),core)
    6771        CMN2 = -march=prescott
  • kernel/arch/ia32/include/asm.h

    r633bcc6 r16f9782  
    311311}
    312312
     313#ifndef PROCESSOR_i486
    313314/** Write to MSR */
    314315NO_TRACE static inline void write_msr(uint32_t msr, uint64_t value)
     
    335336        return ((uint64_t) dx << 32) | ax;
    336337}
     338#endif
    337339
    338340
  • kernel/arch/ia32/include/atomic.h

    r633bcc6 r16f9782  
    121121        asm volatile (
    122122                "0:\n"
     123#ifndef PROCESSOR_i486
    123124                "pause\n"        /* Pentium 4's HT love this instruction */
     125#endif
    124126                "mov %[count], %[tmp]\n"
    125127                "testl %[tmp], %[tmp]\n"
  • kernel/arch/ia32/include/cycle.h

    r633bcc6 r16f9782  
    4040NO_TRACE static inline uint64_t get_cycle(void)
    4141{
     42#ifdef PROCESSOR_i486
     43        return 0;
     44#else
    4245        uint64_t v;
    4346       
     
    4851       
    4952        return v;
     53#endif
    5054}
    5155
  • kernel/arch/ia32/src/asm.S

    r633bcc6 r16f9782  
    405405        xorl %eax, %eax
    406406        cmpl $(GDT_SELECTOR(KTEXT_DES)), ISTATE_OFFSET_CS(%esp)
     407#ifdef PROCESSOR_i486
     408        jz 0f
     409        movl %eax, %ebp
     4100:
     411#else
    407412        cmovnzl %eax, %ebp
     413#endif
    408414
    409415        movl %ebp, ISTATE_OFFSET_EBP_FRAME(%esp)
  • kernel/arch/ia32/src/boot/boot.S

    r633bcc6 r16f9782  
    9797        pm_status $status_prot
    9898       
    99         movl $(INTEL_CPUID_LEVEL), %eax
    100         cpuid
    101         cmp $0x0, %eax  /* any function > 0? */
    102         jbe pse_unsupported
    103        
    104         movl $(INTEL_CPUID_STANDARD), %eax
    105         cpuid
    106         bt $(INTEL_PSE), %edx
    107         jc pse_supported
    108        
    109         pse_unsupported:
    110                
    111                 pm_error $err_pse
    112        
    113         pse_supported:
    114        
    11599#include "vesa_prot.inc"
    116100       
     
    140124                jmp hlt0
    141125
     126/** Calculate unmapped address of the end of the kernel. */
     127calc_end_of_kernel:
     128        movl $hardcoded_load_address, %edi
     129        andl $0x7fffffff, %edi
     130        movl (%edi), %esi
     131        andl $0x7fffffff, %esi
     132       
     133        movl $hardcoded_ktext_size, %edi
     134        andl $0x7fffffff, %edi
     135        addl (%edi), %esi
     136        andl $0x7fffffff, %esi
     137       
     138        movl $hardcoded_kdata_size, %edi
     139        andl $0x7fffffff, %edi
     140        addl (%edi), %esi
     141        andl $0x7fffffff, %esi
     142        movl %esi, end_of_kernel
     143        ret
     144
     145/** Find free 2M (+4k for alignment) region where to store page tables */
     146find_mem_for_pt:
     147        /* Check if multiboot info is present */
     148        cmpl $0x2BADB002, grub_eax
     149        je check_multiboot_map
     150        ret
     151check_multiboot_map:
     152        /* Copy address of the multiboot info to ebx */
     153        movl grub_ebx, %ebx
     154        /* Check if memory map flag is present */
     155        movl (%ebx), %edx
     156        andl $(1 << 6), %edx
     157        jnz use_multiboot_map
     158        ret
     159use_multiboot_map:
     160        /* Copy address of the memory map to edx */
     161        movl 48(%ebx), %edx
     162        movl %edx, %ecx
     163        addl 44(%ebx), %ecx
     164        /* Find a free region at least 2M in size */
     165        check_memmap_loop:
     166                /* Is this a free region? */
     167                cmp $1, 20(%edx)
     168                jnz next_region
     169                /* Check size */
     170                cmp $0, 16(%edx)
     171                jnz next_region
     172                cmpl $(2 * 1024 * 1024 + 4 * 1024), 12(%edx)
     173                jbe next_region
     174                cmp $0, 8(%edx)
     175                jz found_region
     176        next_region:
     177                cmp %ecx, %edx
     178                jbe next_region_do
     179                ret
     180        next_region_do:
     181                addl (%edx), %edx
     182                addl $4, %edx
     183                jmp check_memmap_loop
     184        found_region:
     185                /* Use end of the found region */
     186                mov 4(%edx), %ecx
     187                add 12(%edx), %ecx
     188                sub $(2 * 1024 * 1024), %ecx
     189                mov %ecx, free_area
     190        ret
     191               
     192
    142193/** Setup mapping for the kernel.
    143194 *
     
    148199.global map_kernel
    149200map_kernel:
     201        /* Paging features */
    150202        movl %cr4, %ecx
    151         orl $(1 << 4), %ecx      /* PSE on */
    152203        andl $(~(1 << 5)), %ecx  /* PAE off */
    153204        movl %ecx, %cr4
    154205       
     206        call calc_end_of_kernel
     207        call find_mem_for_pt
     208        mov end_of_kernel, %esi
     209        mov free_area, %ecx
     210        cmpl %esi, %ecx
     211        jbe use_end_of_kernel
     212        mov %ecx, %esi
     213        /* Align address down to 4k */
     214        andl $(~4095), %esi
     215use_end_of_kernel:
     216       
     217        /* Align address to 4k */
     218        addl $4095, %esi
     219        andl $(~4095), %esi
     220       
     221        /* Allocate space for page tables*/     
     222        movl %esi, pt_loc
     223        movl $ballocs, %edi
     224        andl $0x7fffffff, %edi
     225        movl %esi, (%edi)
     226        addl $4, %edi
     227        movl $(2*1024*1024), (%edi)
     228       
     229        /* Fill page tables */
     230        xorl %ecx, %ecx
     231        xorl %ebx, %ebx
     232       
     233        floop_pt:
     234                movl $((1 << 1) | (1 << 0)), %eax
     235                orl %ebx, %eax
     236                movl %eax, (%esi, %ecx, 4)
     237                addl $(4 * 1024), %ebx
     238               
     239                incl %ecx
     240                cmpl $(512 * 1024), %ecx
     241                jl floop_pt
     242       
     243        /* Fill page directory */
    155244        movl $(page_directory + 0), %esi
    156245        movl $(page_directory + 2048), %edi
    157246        xorl %ecx, %ecx
    158         xorl %ebx, %ebx
     247        movl pt_loc, %ebx
    159248       
    160249        floop:
    161                 movl $((1 << 7) | (1 << 1) | (1 << 0)), %eax
     250                movl $((1 << 1) | (1 << 0)), %eax
    162251                orl %ebx, %eax
    163252                /* Mapping 0x00000000 + %ecx * 4M => 0x00000000 + %ecx * 4M */
     
    165254                /* Mapping 0x80000000 + %ecx * 4M => 0x00000000 + %ecx * 4M */
    166255                movl %eax, (%edi, %ecx, 4)
    167                 addl $(4 * 1024 * 1024), %ebx
     256                addl $(4 * 1024), %ebx
    168257               
    169258                incl %ecx
     
    523612
    524613grub_ebx:
     614        .long 0
     615
     616pt_loc:
     617        .long 0
     618end_of_kernel:
     619        .long 0
     620free_area:
    525621        .long 0
    526622
  • kernel/arch/ia32/src/cpu/cpu.c

    r633bcc6 r16f9782  
    118118                );
    119119        }
    120        
     120
     121#ifndef PROCESSOR_i486
    121122        if (CPU->arch.fi.bits.sep) {
    122123                /* Setup fast SYSENTER/SYSEXIT syscalls */
    123124                syscall_setup_cpu();
    124125        }
     126#endif
    125127}
    126128
  • kernel/arch/ia32/src/proc/scheduler.c

    r633bcc6 r16f9782  
    6060        uintptr_t kstk = (uintptr_t) &THREAD->kstack[STACK_SIZE];
    6161       
     62#ifndef PROCESSOR_i486
    6263        if (CPU->arch.fi.bits.sep) {
    6364                /* Set kernel stack for CP3 -> CPL0 switch via SYSENTER */
    6465                write_msr(IA32_MSR_SYSENTER_ESP, kstk - sizeof(istate_t));
    6566        }
     67#endif
    6668       
    6769        /* Set kernel stack for CPL3 -> CPL0 switch via interrupt */
  • kernel/arch/ia32/src/syscall.c

    r633bcc6 r16f9782  
    3939#include <arch/pm.h>
    4040
     41#ifndef PROCESSOR_i486
    4142/** Enable & setup support for SYSENTER/SYSEXIT */
    4243void syscall_setup_cpu(void)
     
    4950        write_msr(IA32_MSR_SYSENTER_EIP, (uint32_t) sysenter_handler);
    5051}
     52#endif
    5153
    5254/** @}
  • kernel/generic/include/ipc/event.h

    r633bcc6 r16f9782  
    4141#include <ipc/ipc.h>
    4242
    43 typedef struct task task_t;
     43struct task;
    4444
    4545typedef void (*event_callback_t)(void *);
     
    6363
    6464extern void event_init(void);
    65 extern void event_task_init(task_t *);
     65extern void event_task_init(struct task *);
    6666extern void event_cleanup_answerbox(answerbox_t *);
    6767extern void event_set_unmask_callback(event_type_t, event_callback_t);
    68 extern void event_task_set_unmask_callback(task_t *, event_task_type_t,
     68extern void event_task_set_unmask_callback(struct task *, event_task_type_t,
    6969    event_callback_t);
    7070
     
    9797extern int event_notify(event_type_t, bool, sysarg_t, sysarg_t, sysarg_t,
    9898    sysarg_t, sysarg_t);
    99 extern int event_task_notify(task_t *, event_task_type_t, bool, sysarg_t, sysarg_t,
     99extern int event_task_notify(struct task *, event_task_type_t, bool, sysarg_t, sysarg_t,
    100100    sysarg_t, sysarg_t, sysarg_t);
    101101
  • kernel/generic/src/console/console.c

    r633bcc6 r16f9782  
    248248}
    249249
    250 void klog_update(void *e)
     250void klog_update(void *event)
    251251{
    252252        if (!atomic_get(&klog_inited))
  • kernel/generic/src/ipc/event.c

    r633bcc6 r16f9782  
    8181}
    8282
    83 void event_task_init(task_t *t)
     83void event_task_init(task_t *task)
    8484{
    8585        for (unsigned int i = EVENT_END; i < EVENT_TASK_END; i++)
    86                 event_initialize(evno2event(i, t));
     86                event_initialize(evno2event(i, task));
    8787}
    8888
     
    130130}
    131131
    132 void event_task_set_unmask_callback(task_t *t, event_task_type_t evno,
     132void event_task_set_unmask_callback(task_t *task, event_task_type_t evno,
    133133    event_callback_t callback)
    134134{
     
    136136        ASSERT(evno < EVENT_TASK_END);
    137137               
    138         _event_set_unmask_callback(evno2event(evno, t), callback);
     138        _event_set_unmask_callback(evno2event(evno, task), callback);
    139139}
    140140
     
    213213/** Send per-task kernel notification event
    214214 *
    215  * @param t    Destination task.
     215 * @param task Destination task.
    216216 * @param evno Event type.
    217217 * @param mask Mask further notifications after a successful
     
    231231 *
    232232 */
    233 int event_task_notify(task_t *t, event_task_type_t evno, bool mask, sysarg_t a1,
    234     sysarg_t a2, sysarg_t a3, sysarg_t a4, sysarg_t a5)
     233int event_task_notify(task_t *task, event_task_type_t evno, bool mask,
     234    sysarg_t a1, sysarg_t a2, sysarg_t a3, sysarg_t a4, sysarg_t a5)
    235235{
    236236        ASSERT(evno >= (int) EVENT_END);
    237237        ASSERT(evno < EVENT_TASK_END);
    238238       
    239         return event_enqueue(evno2event(evno, t), mask, a1, a2, a3, a4, a5);
     239        return event_enqueue(evno2event(evno, task), mask, a1, a2, a3, a4, a5);
    240240}
    241241
Note: See TracChangeset for help on using the changeset viewer.