Changeset 0f801cd in rtems


Ignore:
Timestamp:
Feb 16, 2011, 8:33:02 AM (9 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, master
Children:
1987020
Parents:
8224b76f
Message:

2011-02-16 Sebastian Huber <sebastian.huber@…>

  • shared/include/powerpc-utility.h: Fixed LINKER_SYMBOL() for assembler compatibilty. Added synchronization, cache, and alternate time base functions.
Location:
c/src/lib/libcpu/powerpc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libcpu/powerpc/ChangeLog

    r8224b76f r0f801cd  
     12011-02-16      Sebastian Huber <sebastian.huber@embedded-brains.de>
     2
     3        * shared/include/powerpc-utility.h: Fixed LINKER_SYMBOL() for
     4        assembler compatibilty.  Added synchronization, cache, and alternate
     5        time base functions.
     6
    172011-02-11      Ralf Corsépius <ralf.corsepius@rtems.org>
    28
  • c/src/lib/libcpu/powerpc/shared/include/powerpc-utility.h

    r8224b76f r0f801cd  
    99
    1010/*
    11  * Copyright (c) 2008
     11 * Copyright (c) 2008, 2010, 2011
    1212 * Embedded Brains GmbH
    1313 * Obere Lagerstr. 30
     
    4949#include <libcpu/cpuIdent.h>
    5050
    51 #define LINKER_SYMBOL(sym) extern char sym []
     51#define LINKER_SYMBOL(sym) extern char sym [];
    5252
    5353/**
     
    210210
    211211  __asm__ volatile ("isync");
     212}
     213
     214static inline void ppc_enforce_in_order_execution_of_io(void)
     215{
     216  RTEMS_COMPILER_MEMORY_BARRIER();
     217
     218  __asm__ volatile ("eieio");
     219}
     220
     221static inline void ppc_data_cache_block_flush(void *addr)
     222{
     223  __asm__ volatile (
     224    "dcbf 0, %0"
     225    :
     226    : "r" (addr)
     227    : "memory"
     228  );
     229}
     230
     231static inline void ppc_data_cache_block_flush_2(
     232  void *base,
     233  void *offset
     234)
     235{
     236  __asm__ volatile (
     237    "dcbf %0, %1"
     238    :
     239    : "b" (base), "r" (offset)
     240    : "memory"
     241  );
     242}
     243
     244static inline void ppc_data_cache_block_invalidate(void *addr)
     245{
     246  __asm__ volatile (
     247    "dcbi 0, %0"
     248    :
     249    : "r" (addr)
     250    : "memory"
     251  );
     252}
     253
     254static inline void ppc_data_cache_block_invalidate_2(
     255  void *base,
     256  void *offset
     257)
     258{
     259  __asm__ volatile (
     260    "dcbi %0, %1"
     261    :
     262    : "b" (base), "r" (offset)
     263    : "memory"
     264  );
     265}
     266
     267static inline void ppc_data_cache_block_store(void *addr)
     268{
     269  __asm__ volatile (
     270    "dcbst 0, %0"
     271    :
     272    : "r" (addr)
     273  );
     274}
     275
     276static inline void ppc_data_cache_block_store_2(
     277  void *base,
     278  void *offset
     279)
     280{
     281  __asm__ volatile (
     282    "dcbst %0, %1"
     283    :
     284    : "b" (base), "r" (offset)
     285    : "memory"
     286  );
     287}
     288
     289static inline void ppc_data_cache_block_touch(void *addr)
     290{
     291  __asm__ volatile (
     292    "dcbt 0, %0"
     293    :
     294    : "r" (addr)
     295  );
     296}
     297
     298static inline void ppc_data_cache_block_touch_2(
     299  void *base,
     300  void *offset
     301)
     302{
     303  __asm__ volatile (
     304    "dcbt %0, %1"
     305    :
     306    : "b" (base), "r" (offset)
     307  );
     308}
     309
     310static inline void ppc_data_cache_block_touch_for_store(void *addr)
     311{
     312  __asm__ volatile (
     313    "dcbtst 0, %0"
     314    :
     315    : "r" (addr)
     316  );
     317}
     318
     319static inline void ppc_data_cache_block_touch_for_store_2(
     320  void *base,
     321  void *offset
     322)
     323{
     324  __asm__ volatile (
     325    "dcbtst %0, %1"
     326    :
     327    : "b" (base), "r" (offset)
     328  );
     329}
     330
     331static inline void ppc_data_cache_block_clear_to_zero(void *addr)
     332{
     333  __asm__ volatile (
     334    "dcbz 0, %0"
     335    :
     336    : "r" (addr)
     337    : "memory"
     338  );
     339}
     340
     341static inline void ppc_data_cache_block_clear_to_zero_2(
     342  void *base,
     343  void *offset
     344)
     345{
     346  __asm__ volatile (
     347    "dcbz %0, %1"
     348    :
     349    : "b" (base), "r" (offset)
     350    : "memory"
     351  );
     352}
     353
     354static inline void ppc_instruction_cache_block_invalidate(void *addr)
     355{
     356  __asm__ volatile (
     357    "icbi 0, %0"
     358    :
     359    : "r" (addr)
     360  );
     361}
     362
     363static inline void ppc_instruction_cache_block_invalidate_2(
     364  void *base,
     365  void *offset
     366)
     367{
     368  __asm__ volatile (
     369    "icbi %0, %1"
     370    :
     371    : "b" (base), "r" (offset)
     372  );
    212373}
    213374
     
    576737}
    577738
     739static inline uint32_t ppc_alternate_time_base(void)
     740{
     741  return PPC_SPECIAL_PURPOSE_REGISTER(FSL_EIS_ATBL);
     742}
     743
     744static inline uint32_t ppc_alternate_time_base_upper(void)
     745{
     746  return PPC_SPECIAL_PURPOSE_REGISTER(FSL_EIS_ATBU);
     747}
     748
     749static inline uint64_t ppc_alternate_time_base_64(void)
     750{
     751  uint32_t atbl;
     752  uint32_t atbu_0;
     753  uint32_t atbu_1;
     754
     755  do {
     756    atbu_0 = ppc_alternate_time_base_upper();
     757    atbl = ppc_alternate_time_base();
     758    atbu_1 = ppc_alternate_time_base_upper();
     759  } while (atbu_0 != atbu_1);
     760
     761  return (((uint64_t) atbu_1) << 32) | ((uint64_t) atbl);
     762}
     763
     764static inline uint32_t ppc_processor_id(void)
     765{
     766  return PPC_SPECIAL_PURPOSE_REGISTER(BOOKE_PIR);
     767}
     768
     769static inline void ppc_set_processor_id(uint32_t val)
     770{
     771  PPC_SET_SPECIAL_PURPOSE_REGISTER(BOOKE_PIR, val);
     772}
     773
    578774void ppc_code_copy(void *dest, const void *src, size_t n);
    579775
Note: See TracChangeset for help on using the changeset viewer.