Changeset be5b08a in rtems


Ignore:
Timestamp:
01/29/06 22:48:33 (16 years ago)
Author:
Eric Norum <WENorum@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
f4f96e9
Parents:
6f10ffe
Message:

Add code to maintain CPU load average.

Location:
c/src/lib/libbsp/m68k/uC5282
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/m68k/uC5282/ChangeLog

    r6f10ffe rbe5b08a  
     12006-01-29  Eric Norum <norume@aps.anl.gov>
     2
     3    * clock/clock.c, network/network.c, startup/bspstart.c:
     4            Add an 'extended BSP' routine which returns the CPU load average.
     5
    162006-01-11      Ralf Corsepius <ralf.corsepius@rtems.org>
    27
  • c/src/lib/libbsp/m68k/uC5282/clock/clock.c

    r6f10ffe rbe5b08a  
    2424
    2525/*
     26 * CPU load counters
     27 * Place in static RAM so updates don't hit the SDRAM
     28 */
     29extern int __SRAMBASE[];
     30#define IDLE_COUNTER      __SRAMBASE[0]
     31#define FILTERED_IDLE     __SRAMBASE[1]
     32#define MAX_IDLE_COUNT    __SRAMBASE[2]
     33#define FILTER_SHIFT    6
     34
     35/*
    2636 * Periodic interval timer interrupt handler
    2737 */
    28 #define Clock_driver_support_at_tick()             \
    29     do {                                           \
    30         MCF5282_PIT3_PCSR |= MCF5282_PIT_PCSR_PIF; \
    31     } while (0)                                    \
     38#define Clock_driver_support_at_tick()                                       \
     39    do {                                                                     \
     40        int idle = IDLE_COUNTER;                                             \
     41        IDLE_COUNTER = 0;                                                    \
     42        if (idle > MAX_IDLE_COUNT)                                           \
     43            MAX_IDLE_COUNT = idle;                                           \
     44        FILTERED_IDLE = idle + FILTERED_IDLE - (FILTERED_IDLE>>FILTER_SHIFT);\
     45        MCF5282_PIT3_PCSR |= MCF5282_PIT_PCSR_PIF;                           \
     46    } while (0)
    3247
    3348/*
     
    6277            preScaleCode++;                                              \
    6378        }                                                                \
     79        IDLE_COUNTER = 0;                                                \
     80        FILTERED_IDLE = 0;                                               \
     81        MAX_IDLE_COUNT = 0;                                              \
    6482        bsp_allocate_interrupt(PIT3_IRQ_LEVEL, PIT3_IRQ_PRIORITY);       \
    6583        MCF5282_INTC0_ICR58 = MCF5282_INTC_ICR_IL(PIT3_IRQ_LEVEL) |      \
     
    6987                MCF5282_PIT3_PCSR &= ~MCF5282_PIT_PCSR_EN;                       \
    7088        rtems_interrupt_enable( level );                                 \
     89                MCF5282_PIT3_PCSR = MCF5282_PIT_PCSR_PRE(preScaleCode) |         \
     90                            MCF5282_PIT_PCSR_OVW |                       \
     91                            MCF5282_PIT_PCSR_PIE |                       \
     92                            MCF5282_PIT_PCSR_RLD;                        \
    7193                MCF5282_PIT3_PMR = BSP_Configuration.microseconds_per_tick - 1;  \
    7294                MCF5282_PIT3_PCSR = MCF5282_PIT_PCSR_PRE(preScaleCode) |         \
     
    7698    } while (0)
    7799
     100/*
     101 * Provide our own version of the idle task
     102 */
     103void _BSP_Thread_Idle_body(void)
     104{
     105    for(;;)
     106        asm volatile ("addq.l #1,__SRAMBASE"); /* Atomic increment */
     107}
     108
     109int rtems_bsp_cpu_load_percentage(void)
     110{
     111    return 100 - ((100 * (FILTERED_IDLE >> FILTER_SHIFT)) / MAX_IDLE_COUNT);
     112}
     113
    78114#include "../../../shared/clockdrv_shell.c"
  • c/src/lib/libbsp/m68k/uC5282/network/network.c

    r6f10ffe rbe5b08a  
    195195 * Allocate buffer descriptors from (non-cached) on-chip static RAM
    196196 * Ensure 128-bit (16-byte) alignment
     197 * Allow some space at the beginning for other diagnostic counters
    197198 */
    198199static mcf5282BufferDescriptor_t *
     
    200201{
    201202    extern char __SRAMBASE[];
    202     static mcf5282BufferDescriptor_t *bdp = (mcf5282BufferDescriptor_t *)__SRAMBASE;
     203    static mcf5282BufferDescriptor_t *bdp = (mcf5282BufferDescriptor_t *)(__SRAMBASE+16);
    203204    mcf5282BufferDescriptor_t *p = bdp;
    204205
  • c/src/lib/libbsp/m68k/uC5282/startup/bspstart.c

    r6f10ffe rbe5b08a  
    222222  Cpu_table.do_zero_of_workspace = TRUE;
    223223  Cpu_table.interrupt_stack_size = 4096;
    224 
     224  {
     225  extern void _BSP_Thread_Idle_body(void);
     226  _CPU_Table.idle_task = _BSP_Thread_Idle_body;
     227  }
    225228  Cpu_table.interrupt_vector_table = (m68k_isr *)0; /* vectors at start of RAM */
    226229
Note: See TracChangeset for help on using the changeset viewer.