Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/include/asm.h

    r96b02eb9 r3a1c048  
    3838
    3939#include <arch/pm.h>
    40 #include <arch/cpu.h>
     40#include <arch/types.h>
    4141#include <typedefs.h>
    4242#include <config.h>
    43 #include <trace.h>
     43
     44extern uint32_t interrupt_handler_size;
     45
     46extern void paging_on(void);
     47
     48extern void interrupt_handlers(void);
     49
     50extern void enable_l_apic_in_msr(void);
     51
     52
     53extern void asm_delay_loop(uint32_t t);
     54extern void asm_fake_loop(uint32_t t);
     55
    4456
    4557/** Halt CPU
     
    4860 *
    4961 */
    50 NO_TRACE static inline __attribute__((noreturn)) void cpu_halt(void)
    51 {
    52         while (true) {
    53                 asm volatile (
    54                         "hlt\n"
    55                 );
    56         }
    57 }
    58 
    59 NO_TRACE static inline void cpu_sleep(void)
    60 {
    61         asm volatile (
    62                 "hlt\n"
    63         );
    64 }
    65 
    66 #define GEN_READ_REG(reg) NO_TRACE static inline sysarg_t read_ ##reg (void) \
     62static inline void cpu_halt(void)
     63{
     64        asm volatile (
     65                "0:\n"
     66                "       hlt\n"
     67                "       jmp 0b\n"
     68        );
     69}
     70
     71static inline void cpu_sleep(void)
     72{
     73        asm volatile ("hlt\n");
     74}
     75
     76#define GEN_READ_REG(reg) static inline unative_t read_ ##reg (void) \
    6777        { \
    68                 sysarg_t res; \
     78                unative_t res; \
    6979                asm volatile ( \
    7080                        "movl %%" #reg ", %[res]" \
     
    7484        }
    7585
    76 #define GEN_WRITE_REG(reg) NO_TRACE static inline void write_ ##reg (sysarg_t regn) \
     86#define GEN_WRITE_REG(reg) static inline void write_ ##reg (unative_t regn) \
    7787        { \
    7888                asm volatile ( \
     
    109119 *
    110120 */
    111 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t val)
     121static inline void pio_write_8(ioport8_t *port, uint8_t val)
    112122{
    113123        asm volatile (
    114124                "outb %b[val], %w[port]\n"
    115                 :: [val] "a" (val),
    116                    [port] "d" (port)
     125                :: [val] "a" (val), [port] "d" (port)
    117126        );
    118127}
     
    126135 *
    127136 */
    128 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t val)
     137static inline void pio_write_16(ioport16_t *port, uint16_t val)
    129138{
    130139        asm volatile (
    131140                "outw %w[val], %w[port]\n"
    132                 :: [val] "a" (val),
    133                    [port] "d" (port)
     141                :: [val] "a" (val), [port] "d" (port)
    134142        );
    135143}
     
    143151 *
    144152 */
    145 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t val)
     153static inline void pio_write_32(ioport32_t *port, uint32_t val)
    146154{
    147155        asm volatile (
    148156                "outl %[val], %w[port]\n"
    149                 :: [val] "a" (val),
    150                    [port] "d" (port)
     157                :: [val] "a" (val), [port] "d" (port)
    151158        );
    152159}
     
    160167 *
    161168 */
    162 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port)
     169static inline uint8_t pio_read_8(ioport8_t *port)
    163170{
    164171        uint8_t val;
     
    181188 *
    182189 */
    183 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port)
     190static inline uint16_t pio_read_16(ioport16_t *port)
    184191{
    185192        uint16_t val;
     
    202209 *
    203210 */
    204 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port)
     211static inline uint32_t pio_read_32(ioport32_t *port)
    205212{
    206213        uint32_t val;
     
    223230 *
    224231 */
    225 NO_TRACE static inline ipl_t interrupts_enable(void)
     232static inline ipl_t interrupts_enable(void)
    226233{
    227234        ipl_t v;
     
    245252 *
    246253 */
    247 NO_TRACE static inline ipl_t interrupts_disable(void)
     254static inline ipl_t interrupts_disable(void)
    248255{
    249256        ipl_t v;
     
    266273 *
    267274 */
    268 NO_TRACE static inline void interrupts_restore(ipl_t ipl)
     275static inline void interrupts_restore(ipl_t ipl)
    269276{
    270277        asm volatile (
     
    280287 *
    281288 */
    282 NO_TRACE static inline ipl_t interrupts_read(void)
     289static inline ipl_t interrupts_read(void)
    283290{
    284291        ipl_t v;
     
    293300}
    294301
    295 /** Check interrupts state.
    296  *
    297  * @return True if interrupts are disabled.
    298  *
    299  */
    300 NO_TRACE static inline bool interrupts_disabled(void)
    301 {
    302         ipl_t v;
    303        
    304         asm volatile (
    305                 "pushf\n"
    306                 "popl %[v]\n"
    307                 : [v] "=r" (v)
    308         );
    309        
    310         return ((v & EFLAGS_IF) == 0);
    311 }
    312 
    313302/** Write to MSR */
    314 NO_TRACE static inline void write_msr(uint32_t msr, uint64_t value)
     303static inline void write_msr(uint32_t msr, uint64_t value)
    315304{
    316305        asm volatile (
    317306                "wrmsr"
    318                 :: "c" (msr),
    319                    "a" ((uint32_t) (value)),
     307                :: "c" (msr), "a" ((uint32_t) (value)),
    320308                   "d" ((uint32_t) (value >> 32))
    321309        );
    322310}
    323311
    324 NO_TRACE static inline uint64_t read_msr(uint32_t msr)
     312static inline uint64_t read_msr(uint32_t msr)
    325313{
    326314        uint32_t ax, dx;
     
    328316        asm volatile (
    329317                "rdmsr"
    330                 : "=a" (ax),
    331                   "=d" (dx)
     318                : "=a" (ax), "=d" (dx)
    332319                : "c" (msr)
    333320        );
     
    344331 *
    345332 */
    346 NO_TRACE static inline uintptr_t get_stack_base(void)
     333static inline uintptr_t get_stack_base(void)
    347334{
    348335        uintptr_t v;
     
    357344}
    358345
     346/** Return current IP address */
     347static inline uintptr_t * get_ip()
     348{
     349        uintptr_t *ip;
     350       
     351        asm volatile (
     352                "mov %%eip, %[ip]"
     353                : [ip] "=r" (ip)
     354        );
     355       
     356        return ip;
     357}
     358
    359359/** Invalidate TLB Entry.
    360360 *
     
    362362 *
    363363 */
    364 NO_TRACE static inline void invlpg(uintptr_t addr)
     364static inline void invlpg(uintptr_t addr)
    365365{
    366366        asm volatile (
    367367                "invlpg %[addr]\n"
    368                 :: [addr] "m" (*(sysarg_t *) addr)
     368                :: [addr] "m" (*(unative_t *) addr)
    369369        );
    370370}
     
    375375 *
    376376 */
    377 NO_TRACE static inline void gdtr_load(ptr_16_32_t *gdtr_reg)
     377static inline void gdtr_load(ptr_16_32_t *gdtr_reg)
    378378{
    379379        asm volatile (
     
    388388 *
    389389 */
    390 NO_TRACE static inline void gdtr_store(ptr_16_32_t *gdtr_reg)
     390static inline void gdtr_store(ptr_16_32_t *gdtr_reg)
    391391{
    392392        asm volatile (
    393393                "sgdtl %[gdtr_reg]\n"
    394                 : [gdtr_reg] "=m" (*gdtr_reg)
     394                :: [gdtr_reg] "m" (*gdtr_reg)
    395395        );
    396396}
     
    401401 *
    402402 */
    403 NO_TRACE static inline void idtr_load(ptr_16_32_t *idtr_reg)
     403static inline void idtr_load(ptr_16_32_t *idtr_reg)
    404404{
    405405        asm volatile (
     
    414414 *
    415415 */
    416 NO_TRACE static inline void tr_load(uint16_t sel)
     416static inline void tr_load(uint16_t sel)
    417417{
    418418        asm volatile (
     
    422422}
    423423
    424 extern void paging_on(void);
    425 extern void enable_l_apic_in_msr(void);
    426 
    427 extern void asm_delay_loop(uint32_t);
    428 extern void asm_fake_loop(uint32_t);
    429 
    430 extern uintptr_t int_syscall;
    431 
    432 extern uintptr_t int_0;
    433 extern uintptr_t int_1;
    434 extern uintptr_t int_2;
    435 extern uintptr_t int_3;
    436 extern uintptr_t int_4;
    437 extern uintptr_t int_5;
    438 extern uintptr_t int_6;
    439 extern uintptr_t int_7;
    440 extern uintptr_t int_8;
    441 extern uintptr_t int_9;
    442 extern uintptr_t int_10;
    443 extern uintptr_t int_11;
    444 extern uintptr_t int_12;
    445 extern uintptr_t int_13;
    446 extern uintptr_t int_14;
    447 extern uintptr_t int_15;
    448 extern uintptr_t int_16;
    449 extern uintptr_t int_17;
    450 extern uintptr_t int_18;
    451 extern uintptr_t int_19;
    452 extern uintptr_t int_20;
    453 extern uintptr_t int_21;
    454 extern uintptr_t int_22;
    455 extern uintptr_t int_23;
    456 extern uintptr_t int_24;
    457 extern uintptr_t int_25;
    458 extern uintptr_t int_26;
    459 extern uintptr_t int_27;
    460 extern uintptr_t int_28;
    461 extern uintptr_t int_29;
    462 extern uintptr_t int_30;
    463 extern uintptr_t int_31;
    464 extern uintptr_t int_32;
    465 extern uintptr_t int_33;
    466 extern uintptr_t int_34;
    467 extern uintptr_t int_35;
    468 extern uintptr_t int_36;
    469 extern uintptr_t int_37;
    470 extern uintptr_t int_38;
    471 extern uintptr_t int_39;
    472 extern uintptr_t int_40;
    473 extern uintptr_t int_41;
    474 extern uintptr_t int_42;
    475 extern uintptr_t int_43;
    476 extern uintptr_t int_44;
    477 extern uintptr_t int_45;
    478 extern uintptr_t int_46;
    479 extern uintptr_t int_47;
    480 extern uintptr_t int_48;
    481 extern uintptr_t int_49;
    482 extern uintptr_t int_50;
    483 extern uintptr_t int_51;
    484 extern uintptr_t int_52;
    485 extern uintptr_t int_53;
    486 extern uintptr_t int_54;
    487 extern uintptr_t int_55;
    488 extern uintptr_t int_56;
    489 extern uintptr_t int_57;
    490 extern uintptr_t int_58;
    491 extern uintptr_t int_59;
    492 extern uintptr_t int_60;
    493 extern uintptr_t int_61;
    494 extern uintptr_t int_62;
    495 extern uintptr_t int_63;
    496 
    497424#endif
    498425
Note: See TracChangeset for help on using the changeset viewer.