Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset ffe276f in mainline


Ignore:
Timestamp:
2010-05-22T22:56:00Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master
Children:
c555155
Parents:
86a3f89b
Message:

restructure constants
change the return type of pic_get_pending()
coding style changes

Location:
kernel/arch/ppc32
Files:
1 deleted
8 edited

Legend:

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

    r86a3f89b rffe276f  
    6060}
    6161
     62static inline uint32_t msr_read(void)
     63{
     64        uint32_t msr;
     65       
     66        asm volatile (
     67                "mfmsr %[msr]\n"
     68                : [msr] "=r" (msr)
     69        );
     70       
     71        return msr;
     72}
     73
     74static inline void msr_write(uint32_t msr)
     75{
     76        asm volatile (
     77                "mtmsr %[msr]\n"
     78                :: [msr] "r" (msr)
     79        );
     80}
     81
    6282/** Enable interrupts.
    6383 *
  • kernel/arch/ppc32/include/asm/regname.h

    r86a3f89b rffe276f  
    217217#define hid0     1008
    218218
    219 /* MSR bits */
    220 #define msr_dr  (1 << 4)
    221 #define msr_ir  (1 << 5)
    222 #define msr_pr  (1 << 14)
    223 #define msr_ee  (1 << 15)
    224 
    225 /* HID0 bits */
    226 #define hid0_sten  (1 << 24)
    227 #define hid0_ice   (1 << 15)
    228 #define hid0_dce   (1 << 14)
    229 #define hid0_icfi  (1 << 11)
    230 #define hid0_dci   (1 << 10)
    231 
    232219#endif
    233220
  • kernel/arch/ppc32/include/drivers/pic.h

    r86a3f89b rffe276f  
    3939#include <ddi/irq.h>
    4040
    41 #define PIC_PENDING_LOW    8
    42 #define PIC_PENDING_HIGH   4
    43 #define PIC_MASK_LOW       9
    44 #define PIC_MASK_HIGH      5
    45 #define PIC_ACK_LOW        10
    46 #define PIC_ACK_HIGH       6
     41#define PIC_PENDING_LOW   8
     42#define PIC_PENDING_HIGH  4
     43#define PIC_MASK_LOW      9
     44#define PIC_MASK_HIGH     5
     45#define PIC_ACK_LOW       10
     46#define PIC_ACK_HIGH      6
    4747
    48 extern void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg);
    49 extern void pic_enable_interrupt(inr_t intnum);
    50 extern void pic_disable_interrupt(inr_t intnum);
    51 extern void pic_ack_interrupt(void *arg, inr_t intnum);
    52 extern int pic_get_pending(void);
     48extern void pic_init(uintptr_t, size_t, cir_t *, void **);
     49extern void pic_enable_interrupt(inr_t);
     50extern void pic_disable_interrupt(inr_t);
     51extern void pic_ack_interrupt(void *, inr_t);
     52extern uint8_t pic_get_pending(void);
    5353
    5454#endif
  • kernel/arch/ppc32/include/exception.h

    r86a3f89b rffe276f  
    2727 */
    2828
    29 /** @addtogroup ppc32   
     29/** @addtogroup ppc32
    3030 * @{
    3131 */
     
    3737
    3838#include <typedefs.h>
    39 #include <arch/regutils.h>
     39#include <arch/cpu.h>
    4040
    4141typedef struct istate {
     
    8686}
    8787
    88 /** Return true if exception happened while in userspace */
     88/** Return true if exception happened while in userspace
     89 *
     90 * The contexts of MSR register was stored in SRR1.
     91 *
     92 */
    8993static inline int istate_from_uspace(istate_t *istate)
    9094{
    91         /* true if privilege level PR (copied from MSR) == 1 */
    9295        return (istate->srr1 & MSR_PR) != 0;
    9396}
  • kernel/arch/ppc32/src/asm.S

    r86a3f89b rffe276f  
    2828
    2929#include <arch/asm/regname.h>
     30#include <arch/cpu.h>
    3031
    3132.text
     
    4344
    4445userspace_asm:
    45 
     46       
    4647        # r3 = uspace_uarg
    4748        # r4 = stack
     
    4950       
    5051        # disable interrupts
    51 
     52       
    5253        mfmsr r31
    5354        rlwinm r31, r31, 0, 17, 15
     
    6061        # set problem state, enable interrupts
    6162       
    62         ori r31, r31, msr_pr
    63         ori r31, r31, msr_ee
     63        ori r31, r31, MSR_PR
     64        ori r31, r31, MSR_EE
    6465        mtsrr1 r31
    6566       
     
    6768       
    6869        mr sp, r4
    69 
     70       
    7071        # %r6 is defined to hold pcb_ptr - set it to 0
    71 
     72       
    7273        xor r6, r6, r6
    7374       
     
    141142       
    142143        # reset decrementer
    143 
     144       
    144145        li r31, 1000
    145146        mtdec r31
     
    201202        lwz r12, 156(sp)
    202203        lwz sp, 160(sp)
    203 
     204       
    204205        rfi
    205206
     
    213214memcpy_from_uspace:
    214215memcpy_to_uspace:
    215 
     216       
    216217        srwi. r7, r5, 3
    217218        addi r6, r3, -4
    218219        addi r4, r4, -4
    219         beq     2f
     220        beq 2f
    220221       
    221222        andi. r0, r6, 3
     
    225226        1:
    226227       
    227         lwz r7, 4(r4)
    228         lwzu r8, 8(r4)
    229         stw r7, 4(r6)
    230         stwu r8, 8(r6)
    231         bdnz 1b
    232        
    233         andi. r5, r5, 7
     228                lwz r7, 4(r4)
     229                lwzu r8, 8(r4)
     230                stw r7, 4(r6)
     231                stwu r8, 8(r6)
     232                bdnz 1b
     233               
     234                andi. r5, r5, 7
    234235       
    235236        2:
    236237       
    237         cmplwi 0, r5, 4
    238         blt 3f
    239        
    240         lwzu r0, 4(r4)
    241         addi r5, r5, -4
    242         stwu r0, 4(r6)
     238                cmplwi 0, r5, 4
     239                blt 3f
     240               
     241                lwzu r0, 4(r4)
     242                addi r5, r5, -4
     243                stwu r0, 4(r6)
    243244       
    244245        3:
    245246       
    246         cmpwi 0, r5, 0
    247         beqlr
    248         mtctr r5
    249         addi r4, r4, 3
    250         addi r6, r6, 3
     247                cmpwi 0, r5, 0
     248                beqlr
     249                mtctr r5
     250                addi r4, r4, 3
     251                addi r6, r6, 3
    251252       
    252253        4:
    253254       
    254         lbzu r0, 1(r4)
    255         stbu r0, 1(r6)
    256         bdnz 4b
    257         blr
     255                lbzu r0, 1(r4)
     256                stbu r0, 1(r6)
     257                bdnz 4b
     258                blr
    258259       
    259260        5:
    260261       
    261         subfic r0, r0, 4
    262         mtctr r0
     262                subfic r0, r0, 4
     263                mtctr r0
    263264       
    264265        6:
    265266       
    266         lbz r7, 4(r4)
    267         addi r4, r4, 1
    268         stb r7, 4(r6)
    269         addi r6, r6, 1
    270         bdnz 6b
    271         subf r5, r0, r5
    272         rlwinm. r7, r5, 32-3, 3, 31
    273         beq 2b
    274         mtctr r7
    275         b 1b
     267                lbz r7, 4(r4)
     268                addi r4, r4, 1
     269                stb r7, 4(r6)
     270                addi r6, r6, 1
     271                bdnz 6b
     272                subf r5, r0, r5
     273                rlwinm. r7, r5, 32-3, 3, 31
     274                beq 2b
     275                mtctr r7
     276                b 1b
    276277
    277278memcpy_from_uspace_failover_address:
  • kernel/arch/ppc32/src/drivers/pic.c

    r86a3f89b rffe276f  
    3232/** @file
    3333 */
    34 
    3534
    3635#include <arch/drivers/pic.h>
     
    7978}
    8079
    81 /** Return number of pending interrupt */
    82 int pic_get_pending(void)
     80/** Return number of pending interrupts
     81 *
     82 */
     83uint8_t pic_get_pending(void)
    8384{
    8485        if (pic) {
    85                 int pending;
     86                uint32_t pending;
    8687               
    8788                pending = pic[PIC_PENDING_LOW];
    88                 if (pending)
     89                if (pending != 0)
    8990                        return fnzb32(pending);
    9091               
    9192                pending = pic[PIC_PENDING_HIGH];
    92                 if (pending)
     93                if (pending != 0)
    9394                        return fnzb32(pending) + 32;
    9495        }
    9596       
    96         return -1;
     97        return 255;
    9798}
    9899
  • kernel/arch/ppc32/src/exception.S

    r86a3f89b rffe276f  
    2828
    2929#include <arch/asm/regname.h>
     30#include <arch/cpu.h>
    3031#include <arch/mm/page.h>
    3132
     
    3435.macro CONTEXT_STORE
    3536       
    36         # save R12 in SPRG1, backup CR in R12
     37        # save r12 in SPRG1, backup CR in r12
    3738        # save SP in SPRG2
    38 
     39       
    3940        mtsprg1 r12
    4041        mfcr r12
     
    288289       
    289290        mfmsr r12
    290         ori r12, r12, (msr_ir | msr_dr)@l
     291        ori r12, r12, (MSR_IR | MSR_DR)@l
    291292        mtsrr1 r12
    292293       
     
    307308       
    308309        mfmsr r12
    309         ori r12, r12, (msr_ir | msr_dr)@l
     310        ori r12, r12, (MSR_IR | MSR_DR)@l
    310311        mtsrr1 r12
    311312       
  • kernel/arch/ppc32/src/interrupt.c

    r86a3f89b rffe276f  
    4444#include <print.h>
    4545
    46 
    4746void start_decrementer(void)
    4847{
    4948        asm volatile (
    50                 "mtdec %0\n"
    51                 :
    52                 : "r" (1000)
     49                "mtdec %[dec]\n"
     50                :: [dec] "r" (1000)
    5351        );
    5452}
    5553
    56 
    57 /** Handler of external interrupts */
     54/** External interrupts handler
     55 *
     56 */
    5857static void exception_external(int n, istate_t *istate)
    5958{
    60         int inum;
     59        uint8_t inum;
    6160       
    62         while ((inum = pic_get_pending()) != -1) {
     61        while ((inum = pic_get_pending()) != 255) {
    6362                irq_t *irq = irq_dispatch_and_lock(inum);
    6463                if (irq) {
     
    8079                        }
    8180                       
    82                         spinlock_unlock(&irq->lock);
     81                        irq_spinlock_unlock(&irq->lock, false);
    8382                } else {
    8483                        /*
     
    8685                         */
    8786#ifdef CONFIG_DEBUG
    88                         printf("cpu%u: spurious interrupt (inum=%d)\n", CPU->id, inum);
     87                        printf("cpu%" PRIs ": spurious interrupt (inum=%" PRIu8 ")\n",
     88                            CPU->id, inum);
    8989#endif
    9090                }
    9191        }
    9292}
    93 
    9493
    9594static void exception_decrementer(int n, istate_t *istate)
     
    9897        clock();
    9998}
    100 
    10199
    102100/* Initialize basic tables for exception dispatching */
Note: See TracChangeset for help on using the changeset viewer.