Changeset b9e97fb in mainline


Ignore:
Timestamp:
2005-08-31T10:53:34Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8f91729
Parents:
9756131
Message:

Better types for ia32 drivers, so that they can be reused in amd64.
Build script cleanup amd64.
New code / not working yet / in amd64.

Files:
2 added
19 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/Makefile.inc

    r9756131 rb9e97fb  
    2121        arch/context.S \
    2222        arch/drivers/ega.c \
    23         arch/supplib.c
     23        arch/drivers/i8042.c \
     24        arch/drivers/i8254.c \
     25        arch/drivers/i8259.c \
     26        arch/supplib.c \
     27        arch/delay.S \
     28        arch/amd64.c \
     29        arch/bios/bios.c
     30
  • arch/amd64/include/asm.h

    r9756131 rb9e97fb  
    3535
    3636void asm_delay_loop(__u32 t);
     37void asm_fake_loop(__u32 t);
     38
    3739
    3840/* TODO: implement the real stuff */
     
    5557                :"=m"(out)
    5658                :"m"(port)
    57                 :"dx","al"
     59                :"%dx","%al"
    5860                );
    5961        return out;
     
    6870                :
    6971                :"m"( port), "m" (b)
    70                 :"dx","al"
     72                :"%dx","%al"
    7173                );
    7274}
     
    116118}
    117119
     120/** Return raw priority level
     121 *
     122 * Return EFLAFS.
     123 */
     124static inline pri_t cpu_priority_read(void) {
     125        pri_t v;
     126        __asm__ volatile (
     127                "pushfq\n"
     128                "popq %0\n"
     129                : "=r" (v)
     130        );
     131        return v;
     132}
     133
     134extern size_t interrupt_handler_size;
     135extern void interrupt_handlers(void);
    118136
    119137#endif
  • arch/amd64/include/interrupt.h

    r9756131 rb9e97fb  
    11/*
    2  * Copyright (C) 2005 Martin Decky
     2 * Copyright (C) 2001-2004 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 #ifndef __amd64_INTERRUPT_H__
    30 #define __amd64_INTERRUPT_H__
     29#ifndef __INTERRUPT_H__
     30#define __INTERRUPT_H__
    3131
    32 extern void interrupt(void);
     32#include <arch/types.h>
     33#include <arch/pm.h>
     34
     35#define IVT_ITEMS               IDT_ITEMS
     36
     37#define IVT_EXCBASE             0
     38#define EXCLAST                 31
     39
     40#define IVT_IRQBASE             (IVT_EXCBASE+EXCLAST+1)
     41#define IRQLAST                 15
     42
     43#define IVT_FREEBASE            (IVT_IRQBASE+IRQLAST+1)
     44
     45#define IRQ_CLK         0
     46#define IRQ_KBD         1
     47#define IRQ_PIC1        2
     48#define IRQ_PIC_SPUR    7
     49
     50/* this one must have four least significant bits set to ones */
     51#define VECTOR_APIC_SPUR        (IVT_ITEMS-1)
     52
     53#if (((VECTOR_APIC_SPUR + 1)%16) || VECTOR_APIC_SPUR >= IVT_ITEMS)
     54#error Wrong definition of VECTOR_APIC_SPUR
     55#endif
     56
     57#define VECTOR_PIC_SPUR         (IVT_IRQBASE+IRQ_PIC_SPUR)
     58#define VECTOR_CLK              (IVT_IRQBASE+IRQ_CLK)
     59#define VECTOR_KBD              (IVT_IRQBASE+IRQ_KBD)
     60
     61#define VECTOR_SYSCALL                  (IVT_FREEBASE+0)
     62#define VECTOR_TLB_SHOOTDOWN_IPI        (IVT_FREEBASE+1)
     63#define VECTOR_WAKEUP_IPI               (IVT_FREEBASE+2)
     64
     65typedef void (* iroutine)(__u8 n, __native stack[]);
     66
     67extern void (* disable_irqs_function)(__u16 irqmask);
     68extern void (* enable_irqs_function)(__u16 irqmask);
     69extern void (* eoi_function)(void);
     70
     71extern iroutine trap_register(__u8 n, iroutine f);
     72
     73extern void trap_dispatcher(__u8 n, __native stack[]);
     74
     75extern void null_interrupt(__u8 n, __native stack[]);
     76extern void gp_fault(__u8 n, __native stack[]);
     77extern void nm_fault(__u8 n, __native stack[]);
     78extern void ss_fault(__u8 n, __native stack[]);
     79extern void page_fault(__u8 n, __native stack[]);
     80extern void syscall(__u8 n, __native stack[]);
     81extern void tlb_shootdown_ipi(__u8 n, __native stack[]);
     82extern void wakeup_ipi(__u8 n, __native stack[]);
     83
     84extern void trap_virtual_enable_irqs(__u16 irqmask);
     85extern void trap_virtual_disable_irqs(__u16 irqmask);
     86extern void trap_virtual_eoi(void);
    3387
    3488#endif
  • arch/amd64/include/pm.h

    r9756131 rb9e97fb  
    3737
    3838#define IDT_ITEMS 64
    39 #define GDT_ITEMS 7
     39#define GDT_ITEMS 8
    4040
    4141#define NULL_DES        0
     
    4747#define TSS_DES         6
    4848
    49 #define selector(des)   ((des)<<3)
     49#define gdtselector(des)        ((des)<<3)
     50#define idtselector(des)        ((des)<<4)
    5051
    5152#define PL_KERNEL       0
     
    5758#define AR_WRITABLE     (1<<1)
    5859#define AR_READABLE     (1<<1)
    59 #define AR_INTERRUPT    (0xe)
    6060#define AR_TSS          (0x9)
     61#define AR_INTERRUPT    (0xe)
     62#define AR_TRAP         (0xf)
    6163
    6264#define DPL_KERNEL      (PL_KERNEL<<5)
     
    6668
    6769#ifndef __ASM__
    68 
    69 struct ptr_16_32 {
    70         __u16 limit;
    71         __u32 base;
    72 } __attribute__ ((packed));
    7370
    7471struct descriptor {
     
    8582} __attribute__ ((packed));
    8683
     84struct tss_descriptor {
     85        unsigned limit_0_15: 16;
     86        unsigned base_0_15: 16;
     87        unsigned base_16_23: 8;
     88        unsigned type: 4;
     89        unsigned reserve1 : 1;
     90        unsigned dpl : 2;
     91        unsigned present : 1;
     92        unsigned limit_16_19: 4;
     93        unsigned available: 1;
     94        unsigned reserve2: 2;
     95        unsigned granularity : 1;
     96        unsigned base_24_31: 8;
     97        unsigned base_32_63 : 32;
     98        unsigned reserve3 : 32;
     99} __attribute__ ((packed));
     100
    87101struct idescriptor {
    88102        unsigned offset_0_15: 16;
    89103        unsigned selector: 16;
    90         unsigned unused: 8;
    91         unsigned access: 8;
     104        unsigned ist:3;
     105        unsigned unused: 5;
     106        unsigned type: 5;
     107        unsigned dpl: 2;
     108        unsigned present : 1;
    92109        unsigned offset_16_31: 16;
     110        unsigned offset_32_63: 16;
     111        unsigned reserved : 32;
    93112} __attribute__ ((packed));
    94113
     114struct ptr_16_64 {
     115        __u16 limit;
     116        __u64 base;
     117} __attribute__ ((packed));
    95118
    96119struct tss {
    97         __u16 link;
    98         unsigned : 16;
    99         __u32 esp0;
    100         __u16 ss0;
    101         unsigned : 16;
    102         __u32 esp1;
    103         __u16 ss1;
    104         unsigned : 16;
    105         __u32 esp2;
    106         __u16 ss2;
    107         unsigned : 16;
    108         __u32 cr3;
    109         __u32 eip;
    110         __u32 eflags;
    111         __u32 eax;
    112         __u32 ecx;
    113         __u32 edx;
    114         __u32 ebx;
    115         __u32 esp;
    116         __u32 ebp;
    117         __u32 esi;
    118         __u32 edi;
    119         __u16 es;
    120         unsigned : 16;
    121         __u16 cs;
    122         unsigned : 16;
    123         __u16 ss;
    124         unsigned : 16;
    125         __u16 ds;
    126         unsigned : 16;
    127         __u16 fs;
    128         unsigned : 16;
    129         __u16 gs;
    130         unsigned : 16;
    131         __u16 ldtr;
    132         unsigned : 16;
    133         unsigned : 16;
    134         __u16 io_map_base;
     120        __u32 reserve1;
     121        __u64 rsp0;
     122        __u64 rsp1;
     123        __u64 rsp2;
     124        __u64 reserve2;
     125        __u64 ist1;
     126        __u64 ist2;
     127        __u64 ist3;
     128        __u64 ist4;
     129        __u64 ist5;
     130        __u64 ist6;
     131        __u64 ist7;
     132        __u64 reserve3;
     133        __u16 reserve4;
     134        __u16 iomap;
    135135} __attribute__ ((packed));
    136136
    137 extern struct ptr_16_32 gdtr;
    138137extern struct tss *tss_p;
    139138
     
    141140extern struct idescriptor idt[];
    142141
     142extern struct ptr_16_64 gdtr;
     143
    143144extern void pm_init(void);
    144145
    145 extern void gdt_setbase(struct descriptor *d, __address base);
    146 extern void gdt_setlimit(struct descriptor *d, __u32 limit);
     146extern void gdt_tss_setbase(struct descriptor *d, __address base);
     147extern void gdt_tss_setlimit(struct descriptor *d, __u32 limit);
    147148
    148149extern void idt_init(void);
  • arch/amd64/include/types.h

    r9756131 rb9e97fb  
    3737typedef unsigned short __u16;
    3838typedef unsigned int __u32;
    39 typedef long long __u64;
     39typedef unsigned long long __u64;
    4040
    4141typedef __u64 __address;
  • arch/amd64/src/boot/boot.S

    r9756131 rb9e97fb  
    6767        # Load gdtr, idtr
    6868        lgdt gdtr_inst
     69        # Load idtr, but it contains mess - we should not get interrupt
     70        # anyway
    6971        lidt idtr_inst
    7072       
     
    7375        movl %eax,%cr0                  # switch to protected mode
    7476
    75         jmpl $selector(KTEXT32_DES), $now_in_prot
     77        jmpl $gdtselector(KTEXT32_DES), $now_in_prot
    7678
    7779no_long_mode:
     
    8385now_in_prot: 
    8486        # Set up stack & data descriptors
    85         movw $selector(KDATA_DES), %ax
     87        movw $gdtselector(KDATA_DES), %ax
    8688        movw %ax, %ds
    8789        movw %ax, %fs
     
    111113       
    112114        # At this point we are in compatibility mode
    113         jmpl $selector(KTEXT_DES), $start64
     115        jmpl $gdtselector(KTEXT_DES), $start64
    114116
    115117.code64
     
    117119        movq START_STACK_64, %rsp
    118120       
    119         lidt idtr_inst
    120        
    121121        call main_bsp   # never returns
    1221221:
    123123        jmp 1b
    124                        
    125 
     124                               
    126125.section K_DATA_START
    127126.align 4096
     127
     128# Identical mapping of first 16MB and the same of -2GB -> 0     
    128129.global ptl_2
    129130ptl_2: 
     
    154155.global gdtr_inst                               
    155156gdtr_inst:
    156         .word selector(GDT_ITEMS)
     157        .word gdtselector(GDT_ITEMS)
    157158        .long KA2PA(gdt)
    158159
    159160.global idtr_inst
    160161idtr_inst:
    161         .word 0
     162        .word idtselector(IDT_ITEMS)
    162163        .long KA2PA(idt)
  • arch/amd64/src/dummy.s

    r9756131 rb9e97fb  
    2929.text
    3030
    31 .global cpu_priority_high
    32 .global cpu_priority_low
    33 .global cpu_priority_read
    34 .global cpu_priority_restore
    3531.global userspace
    3632.global before_thread_runs_arch
     
    4137.global cpu_print_report
    4238.global get_memory_size
    43 .global arch_pre_mm_init
    44 .global arch_post_mm_init
    4539.global arch_late_init
    4640.global calibrate_delay_loop
    47 .global asm_delay_loop
    4841.global cpu_halt
    4942.global page_arch_init
    5043.global frame_arch_init
    5144.global dummy
    52 .global asm_delay_loop
     45.global trap_register
     46.global trap_virtual_eoi
     47.global trap_virtual_enable_irqs
     48.global rdtsc
     49.global trap_virtual_disable_irqs
     50.global enable_irqs_function
     51.global disable_irqs_function
     52.global eoi_function
     53.global syscall
     54       
     55.global null_interrupt
     56.global interrupt_handler_size
     57.global gp_fault
     58.global nm_fault
     59.global ss_fault
     60.global tss_p
     61.global interrupt_handlers
    5362.global memcpy
    5463
    55 cpu_priority_high:
    56 cpu_priority_low:
    57 cpu_priority_restore:
    58 cpu_priority_read:
    59 asm_delay_loop:
     64null_interrupt:
     65interrupt_handler_size:
     66interrupt_handlers:     
     67gp_fault:
     68nm_fault:
     69ss_fault:
     70tss_p: 
     71       
     72eoi_function:
     73syscall:       
     74enable_irqs_function:
     75disable_irqs_function: 
     76rdtsc:
     77trap_virtual_eoi:
     78trap_virtual_enable_irqs:
     79trap_virtual_disable_irqs:     
     80trap_register: 
    6081before_thread_runs_arch:
    6182userspace:
    6283calibrate_delay_loop:
    63 asm_delay_loop:
    6484panic_printf:
    6585cpu_identify:
     
    6888cpu_print_report:
    6989get_memory_size:
    70 arch_pre_mm_init:
    71 arch_post_mm_init:
    7290arch_late_init:
    7391calibrate_delay_loop:
  • arch/amd64/src/pm.c

    r9756131 rb9e97fb  
    3030#include <arch/mm/page.h>
    3131#include <arch/types.h>
    32 
     32#include <arch/interrupt.h>
     33#include <arch/asm.h>
     34
     35#include <config.h>
     36
     37#include <memstr.h>
     38#include <mm/heap.h>
     39#include <debug.h>
    3340
    3441/*
     
    7279          .longmode    = 1,
    7380          .special     = 0,
    74           .granularity = 0,
     81          .granularity = 1,
    7582          .base_24_31  = 0 },
    7683        /* UDATA descriptor */
     
    96103          .granularity = 1,
    97104          .base_24_31  = 0 },
    98         /* TSS descriptor - set up will be completed later */
     105        /* TSS descriptor - set up will be completed later,
     106         * on AMD64 it is 64-bit - 2 items in table */
     107        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    99108        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
    100109};
    101110
     111struct ptr_16_64 gdtr = {.limit = sizeof(gdtr), .base= (__u64) &gdtr };
     112
    102113struct idescriptor idt[IDT_ITEMS];
    103114
    104115static struct tss tss;
    105116
    106 /* Does not compile correctly if it does not exist */
     117/* TODO: Does not compile correctly if it does not exist ???? */
    107118int __attribute__ ((section ("K_DATA_START"))) __fake;
     119
     120void gdt_tss_setbase(struct descriptor *d, __address base)
     121{
     122        struct tss_descriptor *td = (struct tss_descriptor *) d;
     123
     124        td->base_0_15 = base & 0xffff;
     125        td->base_16_23 = ((base) >> 16) & 0xff;
     126        td->base_24_31 = ((base) >> 24) & 0xff;
     127        td->base_32_63 = ((base) >> 32);
     128}
     129
     130void gdt_tss_setlimit(struct descriptor *d, __u32 limit)
     131{
     132        struct tss_descriptor *td = (struct tss_descriptor *) d;
     133
     134        td->limit_0_15 = limit & 0xffff;
     135        td->limit_16_19 = (limit >> 16) & 0xf;
     136}
     137
     138void idt_setoffset(struct idescriptor *d, __address offset)
     139{
     140        /*
     141         * Offset is a linear address.
     142         */
     143        d->offset_0_15 = offset & 0xffff;
     144        d->offset_16_31 = offset >> 16 & 0xffff;
     145        d->offset_32_63 = offset >> 32;
     146}
     147
     148void tss_initialize(struct tss *t)
     149{
     150        memsetb((__address) t, sizeof(struct tss), 0);
     151}
     152
     153/*
     154 * This function takes care of proper setup of IDT and IDTR.
     155 */
     156void idt_init(void)
     157{
     158        struct idescriptor *d;
     159        int i;
     160
     161        for (i = 0; i < IDT_ITEMS; i++) {
     162                d = &idt[i];
     163
     164                d->unused = 0;
     165                d->selector = idtselector(KTEXT_DES);
     166
     167                d->present = 1;
     168                d->type = AR_INTERRUPT; /* masking interrupt */
     169
     170                if (i == VECTOR_SYSCALL) {
     171                        /*
     172                         * The syscall interrupt gate must be calleable from userland.
     173                         */
     174                        d->dpl |= PL_USER;
     175                }
     176               
     177                idt_setoffset(d, ((__address) interrupt_handlers) + i*interrupt_handler_size);
     178                trap_register(i, null_interrupt);
     179        }
     180        trap_register(13, gp_fault);
     181        trap_register( 7, nm_fault);
     182        trap_register(12, ss_fault);
     183}
     184
     185
     186/* Clean IOPL(12,13) and NT(14) flags in EFLAGS register */
     187static void clean_IOPL_NT_flags(void)
     188{
     189        asm
     190        (
     191                "pushfq;"
     192                "pop %%rax;"
     193                "and $~(0x7000),%%rax;"
     194                "pushq %%rax;"
     195                "popfq;"
     196                :
     197                :
     198                :"%rax"
     199        );
     200}
     201
     202/* Clean AM(18) flag in CR0 register */
     203static void clean_AM_flag(void)
     204{
     205        asm
     206        (
     207                "mov %%cr0,%%rax;"
     208                "and $~(0x40000),%%rax;"
     209                "mov %%rax,%%cr0;"
     210                :
     211                :
     212                :"%rax"
     213        );
     214}
     215
     216void pm_init(void)
     217{
     218        struct descriptor *gdt_p = (struct descriptor *) PA2KA(gdtr.base);
     219        struct tss_descriptor *tss_d;
     220
     221        /*
     222         * Each CPU has its private GDT and TSS.
     223         * All CPUs share one IDT.
     224         */
     225
     226        if (config.cpu_active == 1) {
     227                idt_init();
     228                /*
     229                 * NOTE: bootstrap CPU has statically allocated TSS, because
     230                 * the heap hasn't been initialized so far.
     231                 */
     232                tss_p = &tss;
     233        }
     234        else {
     235                tss_p = (struct tss *) malloc(sizeof(struct tss));
     236                if (!tss_p)
     237                        panic("could not allocate TSS\n");
     238        }
     239
     240        tss_initialize(tss_p);
     241
     242        tss_d = (struct tss_descriptor *) &gdt_p[TSS_DES];
     243        tss_d[TSS_DES].present = 1;
     244        tss_d[TSS_DES].type = AR_TSS;
     245        tss_d[TSS_DES].dpl = PL_KERNEL;
     246       
     247        gdt_tss_setbase(&gdt_p[TSS_DES], (__address) tss_p);
     248        gdt_tss_setlimit(&gdt_p[TSS_DES], sizeof(struct tss) - 1);
     249
     250        /*
     251         * As of this moment, the current CPU has its own GDT pointing
     252         * to its own TSS. We just need to load the TR register.
     253         */
     254        __asm__("ltr %0" : : "r" ((__u16) gdtselector(TSS_DES)));
     255       
     256        clean_IOPL_NT_flags();    /* Disable I/O on nonprivileged levels */
     257        clean_AM_flag();          /* Disable alignment check */
     258}
  • arch/ia32/include/i8042.h

    r9756131 rb9e97fb  
    3333
    3434extern void i8042_init(void);
    35 extern void i8042_interrupt(__u8 n, __u32 stack[]);
     35extern void i8042_interrupt(__u8 n, __native stack[]);
    3636
    3737#endif
  • arch/ia32/include/i8254.h

    r9756131 rb9e97fb  
    3333
    3434extern void i8254_init(void);
    35 extern void i8254_interrupt(__u8 n, __u32 stack[]);
     35extern void i8254_interrupt(__u8 n, __native stack[]);
    3636extern void i8254_calibrate_delay_loop(void);
    3737extern void i8254_normal_operation(void);
  • arch/ia32/include/i8259.h

    r9756131 rb9e97fb  
    4747extern void pic_disable_irqs(__u16 irqmask);
    4848extern void pic_eoi(void);
    49 extern void pic_spurious(__u8 n, __u32 stack[]);
     49extern void pic_spurious(__u8 n, __native stack[]);
    5050
    5151#endif
  • arch/ia32/include/interrupt.h

    r9756131 rb9e97fb  
    6363#define VECTOR_WAKEUP_IPI               (IVT_FREEBASE+2)
    6464
    65 typedef void (* iroutine)(__u8 n, __u32 stack[]);
    66 
    67 extern iroutine ivt[IVT_ITEMS];
     65typedef void (* iroutine)(__u8 n, __native stack[]);
    6866
    6967extern void (* disable_irqs_function)(__u16 irqmask);
     
    7371extern iroutine trap_register(__u8 n, iroutine f);
    7472
    75 extern void trap_dispatcher(__u8 n, __u32 stack[]);
     73extern void trap_dispatcher(__u8 n, __native stack[]);
    7674
    77 extern void null_interrupt(__u8 n, __u32 stack[]);
    78 extern void gp_fault(__u8 n, __u32 stack[]);
    79 extern void nm_fault(__u8 n, __u32 stack[]);
    80 extern void ss_fault(__u8 n, __u32 stack[]);
    81 extern void page_fault(__u8 n, __u32 stack[]);
    82 extern void syscall(__u8 n, __u32 stack[]);
    83 extern void tlb_shootdown_ipi(__u8 n, __u32 stack[]);
    84 extern void wakeup_ipi(__u8 n, __u32 stack[]);
     75extern void null_interrupt(__u8 n, __native stack[]);
     76extern void gp_fault(__u8 n, __native stack[]);
     77extern void nm_fault(__u8 n, __native stack[]);
     78extern void ss_fault(__u8 n, __native stack[]);
     79extern void page_fault(__u8 n, __native stack[]);
     80extern void syscall(__u8 n, __native stack[]);
     81extern void tlb_shootdown_ipi(__u8 n, __native stack[]);
     82extern void wakeup_ipi(__u8 n, __native stack[]);
    8583
    8684extern void trap_virtual_enable_irqs(__u16 irqmask);
  • arch/ia32/include/pm.h

    r9756131 rb9e97fb  
    133133
    134134extern struct descriptor gdt[];
    135 extern struct idescriptor idt[];
    136135
    137136extern void pm_init(void);
  • arch/ia32/src/acpi/acpi.c

    r9756131 rb9e97fb  
    4242
    4343struct acpi_signature_map signature_map[] = {
    44         { "APIC", (struct acpi_sdt_header **) &acpi_madt, "Multiple APIC Description Table" }
     44        { (__u8 *)"APIC", (struct acpi_sdt_header **) &acpi_madt, "Multiple APIC Description Table" }
    4545};
    4646
  • arch/ia32/src/drivers/i8042.c

    r9756131 rb9e97fb  
    4949}
    5050
    51 void i8042_interrupt(__u8 n, __u32 stack[])
     51void i8042_interrupt(__u8 n, __native stack[])
    5252{
    5353        __u8 x;
  • arch/ia32/src/drivers/i8254.c

    r9756131 rb9e97fb  
    123123}
    124124
    125 void i8254_interrupt(__u8 n, __u32 stack[])
     125void i8254_interrupt(__u8 n, __native stack[])
    126126{
    127127        trap_virtual_eoi();
  • arch/ia32/src/drivers/i8259.c

    r9756131 rb9e97fb  
    116116}
    117117
    118 void pic_spurious(__u8 n, __u32 stack[])
     118void pic_spurious(__u8 n, __native stack[])
    119119{
    120120        printf("cpu%d: PIC spurious interrupt\n", CPU->id);
  • src/build.amd64

    r9756131 rb9e97fb  
    55(cd ../arch/amd64/src;make gencontext;./gencontext)
    66# Create links to ia32 architecture
    7 ln -sf ../../../arch/ia32/src/drivers ../arch/amd64/src/
    8 ln -sf ../../../arch/ia32/include/ega.h ../arch/amd64/include/
     7for a in drivers bios; do
     8  ln -sf ../../../arch/ia32/src/$a ../arch/amd64/src/
     9done
    910
     11for a in ega.h i8042.h i8259.h i8254.h cpuid.h interrupt.h bios; do
     12  ln -sf ../../../arch/ia32/include/$a ../arch/amd64/include/
     13done
     14
     15make dist-clean ARCH=ia32
    1016make all ARCH=amd64
  • src/clean.amd64

    r9756131 rb9e97fb  
    22
    33make dist-clean ARCH=amd64
     4make dist-clean ARCH=ia32
     5
     6find ../arch/amd64 -type l | xargs rm
     7rm ../arch/amd64/src/context_offset.h
Note: See TracChangeset for help on using the changeset viewer.