Ignore:
File:
1 edited

Legend:

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

    r3a1c048 r96b02eb9  
    3838
    3939#include <arch/pm.h>
    40 #include <arch/types.h>
     40#include <arch/cpu.h>
    4141#include <typedefs.h>
    4242#include <config.h>
    43 
    44 extern uint32_t interrupt_handler_size;
    45 
    46 extern void paging_on(void);
    47 
    48 extern void interrupt_handlers(void);
    49 
    50 extern void enable_l_apic_in_msr(void);
    51 
    52 
    53 extern void asm_delay_loop(uint32_t t);
    54 extern void asm_fake_loop(uint32_t t);
    55 
     43#include <trace.h>
    5644
    5745/** Halt CPU
     
    6048 *
    6149 */
    62 static inline void cpu_halt(void)
    63 {
    64         asm volatile (
    65                 "0:\n"
    66                 "       hlt\n"
    67                 "       jmp 0b\n"
    68         );
    69 }
    70 
    71 static 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) \
     50NO_TRACE static inline __attribute__((noreturn)) void cpu_halt(void)
     51{
     52        while (true) {
     53                asm volatile (
     54                        "hlt\n"
     55                );
     56        }
     57}
     58
     59NO_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) \
    7767        { \
    78                 unative_t res; \
     68                sysarg_t res; \
    7969                asm volatile ( \
    8070                        "movl %%" #reg ", %[res]" \
     
    8474        }
    8575
    86 #define GEN_WRITE_REG(reg) static inline void write_ ##reg (unative_t regn) \
     76#define GEN_WRITE_REG(reg) NO_TRACE static inline void write_ ##reg (sysarg_t regn) \
    8777        { \
    8878                asm volatile ( \
     
    119109 *
    120110 */
    121 static inline void pio_write_8(ioport8_t *port, uint8_t val)
     111NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t val)
    122112{
    123113        asm volatile (
    124114                "outb %b[val], %w[port]\n"
    125                 :: [val] "a" (val), [port] "d" (port)
     115                :: [val] "a" (val),
     116                   [port] "d" (port)
    126117        );
    127118}
     
    135126 *
    136127 */
    137 static inline void pio_write_16(ioport16_t *port, uint16_t val)
     128NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t val)
    138129{
    139130        asm volatile (
    140131                "outw %w[val], %w[port]\n"
    141                 :: [val] "a" (val), [port] "d" (port)
     132                :: [val] "a" (val),
     133                   [port] "d" (port)
    142134        );
    143135}
     
    151143 *
    152144 */
    153 static inline void pio_write_32(ioport32_t *port, uint32_t val)
     145NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t val)
    154146{
    155147        asm volatile (
    156148                "outl %[val], %w[port]\n"
    157                 :: [val] "a" (val), [port] "d" (port)
     149                :: [val] "a" (val),
     150                   [port] "d" (port)
    158151        );
    159152}
     
    167160 *
    168161 */
    169 static inline uint8_t pio_read_8(ioport8_t *port)
     162NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port)
    170163{
    171164        uint8_t val;
     
    188181 *
    189182 */
    190 static inline uint16_t pio_read_16(ioport16_t *port)
     183NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port)
    191184{
    192185        uint16_t val;
     
    209202 *
    210203 */
    211 static inline uint32_t pio_read_32(ioport32_t *port)
     204NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port)
    212205{
    213206        uint32_t val;
     
    230223 *
    231224 */
    232 static inline ipl_t interrupts_enable(void)
     225NO_TRACE static inline ipl_t interrupts_enable(void)
    233226{
    234227        ipl_t v;
     
    252245 *
    253246 */
    254 static inline ipl_t interrupts_disable(void)
     247NO_TRACE static inline ipl_t interrupts_disable(void)
    255248{
    256249        ipl_t v;
     
    273266 *
    274267 */
    275 static inline void interrupts_restore(ipl_t ipl)
     268NO_TRACE static inline void interrupts_restore(ipl_t ipl)
    276269{
    277270        asm volatile (
     
    287280 *
    288281 */
    289 static inline ipl_t interrupts_read(void)
     282NO_TRACE static inline ipl_t interrupts_read(void)
    290283{
    291284        ipl_t v;
     
    300293}
    301294
     295/** Check interrupts state.
     296 *
     297 * @return True if interrupts are disabled.
     298 *
     299 */
     300NO_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
    302313/** Write to MSR */
    303 static inline void write_msr(uint32_t msr, uint64_t value)
     314NO_TRACE static inline void write_msr(uint32_t msr, uint64_t value)
    304315{
    305316        asm volatile (
    306317                "wrmsr"
    307                 :: "c" (msr), "a" ((uint32_t) (value)),
     318                :: "c" (msr),
     319                   "a" ((uint32_t) (value)),
    308320                   "d" ((uint32_t) (value >> 32))
    309321        );
    310322}
    311323
    312 static inline uint64_t read_msr(uint32_t msr)
     324NO_TRACE static inline uint64_t read_msr(uint32_t msr)
    313325{
    314326        uint32_t ax, dx;
     
    316328        asm volatile (
    317329                "rdmsr"
    318                 : "=a" (ax), "=d" (dx)
     330                : "=a" (ax),
     331                  "=d" (dx)
    319332                : "c" (msr)
    320333        );
     
    331344 *
    332345 */
    333 static inline uintptr_t get_stack_base(void)
     346NO_TRACE static inline uintptr_t get_stack_base(void)
    334347{
    335348        uintptr_t v;
     
    344357}
    345358
    346 /** Return current IP address */
    347 static 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 static inline void invlpg(uintptr_t addr)
     364NO_TRACE static inline void invlpg(uintptr_t addr)
    365365{
    366366        asm volatile (
    367367                "invlpg %[addr]\n"
    368                 :: [addr] "m" (*(unative_t *) addr)
     368                :: [addr] "m" (*(sysarg_t *) addr)
    369369        );
    370370}
     
    375375 *
    376376 */
    377 static inline void gdtr_load(ptr_16_32_t *gdtr_reg)
     377NO_TRACE static inline void gdtr_load(ptr_16_32_t *gdtr_reg)
    378378{
    379379        asm volatile (
     
    388388 *
    389389 */
    390 static inline void gdtr_store(ptr_16_32_t *gdtr_reg)
     390NO_TRACE static 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 static inline void idtr_load(ptr_16_32_t *idtr_reg)
     403NO_TRACE static inline void idtr_load(ptr_16_32_t *idtr_reg)
    404404{
    405405        asm volatile (
     
    414414 *
    415415 */
    416 static inline void tr_load(uint16_t sel)
     416NO_TRACE static inline void tr_load(uint16_t sel)
    417417{
    418418        asm volatile (
     
    422422}
    423423
     424extern void paging_on(void);
     425extern void enable_l_apic_in_msr(void);
     426
     427extern void asm_delay_loop(uint32_t);
     428extern void asm_fake_loop(uint32_t);
     429
     430extern uintptr_t int_syscall;
     431
     432extern uintptr_t int_0;
     433extern uintptr_t int_1;
     434extern uintptr_t int_2;
     435extern uintptr_t int_3;
     436extern uintptr_t int_4;
     437extern uintptr_t int_5;
     438extern uintptr_t int_6;
     439extern uintptr_t int_7;
     440extern uintptr_t int_8;
     441extern uintptr_t int_9;
     442extern uintptr_t int_10;
     443extern uintptr_t int_11;
     444extern uintptr_t int_12;
     445extern uintptr_t int_13;
     446extern uintptr_t int_14;
     447extern uintptr_t int_15;
     448extern uintptr_t int_16;
     449extern uintptr_t int_17;
     450extern uintptr_t int_18;
     451extern uintptr_t int_19;
     452extern uintptr_t int_20;
     453extern uintptr_t int_21;
     454extern uintptr_t int_22;
     455extern uintptr_t int_23;
     456extern uintptr_t int_24;
     457extern uintptr_t int_25;
     458extern uintptr_t int_26;
     459extern uintptr_t int_27;
     460extern uintptr_t int_28;
     461extern uintptr_t int_29;
     462extern uintptr_t int_30;
     463extern uintptr_t int_31;
     464extern uintptr_t int_32;
     465extern uintptr_t int_33;
     466extern uintptr_t int_34;
     467extern uintptr_t int_35;
     468extern uintptr_t int_36;
     469extern uintptr_t int_37;
     470extern uintptr_t int_38;
     471extern uintptr_t int_39;
     472extern uintptr_t int_40;
     473extern uintptr_t int_41;
     474extern uintptr_t int_42;
     475extern uintptr_t int_43;
     476extern uintptr_t int_44;
     477extern uintptr_t int_45;
     478extern uintptr_t int_46;
     479extern uintptr_t int_47;
     480extern uintptr_t int_48;
     481extern uintptr_t int_49;
     482extern uintptr_t int_50;
     483extern uintptr_t int_51;
     484extern uintptr_t int_52;
     485extern uintptr_t int_53;
     486extern uintptr_t int_54;
     487extern uintptr_t int_55;
     488extern uintptr_t int_56;
     489extern uintptr_t int_57;
     490extern uintptr_t int_58;
     491extern uintptr_t int_59;
     492extern uintptr_t int_60;
     493extern uintptr_t int_61;
     494extern uintptr_t int_62;
     495extern uintptr_t int_63;
     496
    424497#endif
    425498
Note: See TracChangeset for help on using the changeset viewer.