summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h')
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h370
1 files changed, 0 insertions, 370 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h b/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h
deleted file mode 100644
index 366465565a..0000000000
--- a/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright (c) 2010-2013 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef GEN5200_BESTCOMM_H
-#define GEN5200_BESTCOMM_H
-
-#include "bestcomm_ops.h"
-
-#include <assert.h>
-
-#include <rtems.h>
-
-#include <bsp/mpc5200.h>
-#include <bsp/bestcomm/bestcomm_api.h>
-#include <bsp/bestcomm/bestcomm_glue.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @defgroup BestComm BestComm Support
- *
- * @ingroup BestCommm
- *
- * @brief BestComm support.
- *
- * @{
- */
-
-typedef struct {
- uint32_t *tdt_begin;
- uint32_t *tdt_last;
- volatile uint32_t (*var_table)[32];
- uint32_t fdt_and_pragmas;
- uint32_t reserved_0;
- uint32_t reserved_1;
- uint32_t *context_begin;
- uint32_t reserved_2;
-} bestcomm_task_entry;
-
-#define BESTCOMM_TASK_ENTRY_TABLE ((volatile bestcomm_task_entry *) 0xf0008000)
-
-#define BESTCOMM_IRQ_EVENT RTEMS_EVENT_13
-
-typedef struct {
- int task_index;
- rtems_id event_task_id;
-} bestcomm_irq;
-
-void bestcomm_irq_create(bestcomm_irq *self, int task_index);
-
-void bestcomm_irq_destroy(const bestcomm_irq *self);
-
-static inline void bestcomm_irq_enable(const bestcomm_irq *self)
-{
- bestcomm_glue_irq_enable(self->task_index);
-}
-
-static inline void bestcomm_irq_disable(const bestcomm_irq *self)
-{
- bestcomm_glue_irq_disable(self->task_index);
-}
-
-static inline void bestcomm_irq_clear(const bestcomm_irq *self)
-{
- SDMA_CLEAR_IEVENT(&mpc5200.sdma.IntPend, self->task_index);
-}
-
-static inline int bestcomm_irq_get_task_index(const bestcomm_irq *self)
-{
- return self->task_index;
-}
-
-static inline rtems_id bestcomm_irq_get_event_task_id(const bestcomm_irq *self)
-{
- return self->event_task_id;
-}
-
-static inline void bestcomm_irq_set_event_task_id(bestcomm_irq *self, rtems_id id)
-{
- self->event_task_id = id;
-}
-
-static inline void bestcomm_irq_wakeup_event_task(const bestcomm_irq *self)
-{
- rtems_status_code sc = rtems_event_send(self->event_task_id, BESTCOMM_IRQ_EVENT);
- assert(sc == RTEMS_SUCCESSFUL);
-}
-
-static inline void bestcomm_irq_wait(const bestcomm_irq *self)
-{
- rtems_event_set events;
- rtems_status_code sc = rtems_event_receive(
- BESTCOMM_IRQ_EVENT,
- RTEMS_EVENT_ALL | RTEMS_WAIT,
- RTEMS_NO_TIMEOUT,
- &events
- );
- assert(sc == RTEMS_SUCCESSFUL);
- assert(events == BESTCOMM_IRQ_EVENT);
-}
-
-static inline bool bestcomm_irq_peek(const bestcomm_irq *self)
-{
- rtems_event_set events;
- rtems_status_code sc = rtems_event_receive(0, 0, 0, &events);
- assert(sc == RTEMS_SUCCESSFUL);
-
- return (events & BESTCOMM_IRQ_EVENT) != 0;
-}
-
-typedef struct {
- volatile uint16_t *task_control_register;
-
- volatile uint32_t (*variable_table)[32];
-
- TaskId task_index;
-
- bestcomm_irq irq;
-
- uint32_t *tdt_begin;
-
- size_t tdt_opcode_count;
-} bestcomm_task;
-
-void bestcomm_task_create(bestcomm_task *self, TaskId task_index);
-
-void bestcomm_task_create_and_load(
- bestcomm_task *self,
- TaskId task_index,
- const uint32_t *tdt_source_begin,
- size_t tdt_size
-);
-
-void bestcomm_task_destroy(bestcomm_task *self);
-
-void bestcomm_task_load(bestcomm_task *self, const uint32_t *tdt_source_begin, size_t tdt_size);
-
-static inline void bestcomm_task_set_priority(bestcomm_task *self, int priority)
-{
- /* Allow higher priority initiator to block current initiator */
- mpc5200.sdma.ipr[self->task_index] = SDMA_IPR_PRIOR(priority);
-}
-
-static inline void bestcomm_task_irq_enable(const bestcomm_task *self)
-{
- bestcomm_irq_enable(&self->irq);
-}
-
-static inline void bestcomm_task_irq_disable(const bestcomm_task *self)
-{
- bestcomm_irq_disable(&self->irq);
-}
-
-static inline void bestcomm_task_irq_clear(const bestcomm_task *self)
-{
- bestcomm_irq_clear(&self->irq);
-}
-
-static inline rtems_id bestcomm_task_get_event_task_id(const bestcomm_task *self)
-{
- return bestcomm_irq_get_event_task_id(&self->irq);
-}
-
-static inline void bestcomm_task_set_event_task_id(bestcomm_task *self, rtems_id id)
-{
- bestcomm_irq_set_event_task_id(&self->irq, id);
-}
-
-static inline void bestcomm_task_associate_with_current_task(bestcomm_task *self)
-{
- bestcomm_task_set_event_task_id(self, rtems_task_self());
-}
-
-static inline void bestcomm_task_start(const bestcomm_task *self)
-{
- *self->task_control_register = SDMA_TCR_EN | SDMA_TCR_HIGH_EN;
-}
-
-static inline void bestcomm_task_start_with_autostart(const bestcomm_task *self)
-{
- *self->task_control_register = (uint16_t)
- (SDMA_TCR_EN | SDMA_TCR_HIGH_EN | SDMA_TCR_AUTO_START | SDMA_TCR_AS(self->task_index));
-}
-
-static inline void bestcomm_task_stop(const bestcomm_task *self)
-{
- *self->task_control_register = 0;
-}
-
-static inline void bestcomm_task_wakeup_event_task(const bestcomm_task *self)
-{
- bestcomm_irq_wakeup_event_task(&self->irq);
-}
-
-static inline void bestcomm_task_wait(const bestcomm_task *self)
-{
- bestcomm_irq_wait(&self->irq);
-}
-
-static inline bool bestcomm_task_peek(const bestcomm_task *self)
-{
- return bestcomm_irq_peek(&self->irq);
-}
-
-static inline bool bestcomm_task_is_running(const bestcomm_task *self)
-{
- return (*self->task_control_register & SDMA_TCR_EN) != 0;
-}
-
-static inline uint32_t bestcomm_get_task_variable(const bestcomm_task *self, size_t index)
-{
- assert(index < VAR_COUNT);
- return (*self->variable_table)[index];
-}
-
-static inline volatile uint32_t *bestcomm_task_get_address_of_variable(const bestcomm_task *self, size_t index)
-{
- assert(index < VAR_COUNT);
- return &(*self->variable_table)[index];
-}
-
-static inline void bestcomm_task_set_variable(const bestcomm_task *self, size_t index, uint32_t value)
-{
- assert(index < VAR_COUNT);
- (*self->variable_table)[index] = value;
-}
-
-static inline uint32_t bestcomm_task_get_increment_and_condition(const bestcomm_task *self, size_t index)
-{
- assert(index < INC_COUNT);
- return (*self->variable_table)[INC(index)];
-}
-
-static inline void bestcomm_task_set_increment_and_condition_32(
- const bestcomm_task *self,
- size_t index,
- uint32_t inc_and_cond
-)
-{
- assert(index < INC_COUNT);
- (*self->variable_table)[INC(index)] = inc_and_cond;
-}
-
-static inline void bestcomm_task_set_increment_and_condition(
- const bestcomm_task *self,
- size_t index,
- int16_t inc,
- int cond
-)
-{
- bestcomm_task_set_increment_and_condition_32(self, index, INC_INIT(cond, inc));
-}
-
-static inline void bestcomm_task_set_increment(const bestcomm_task *self, size_t index, int16_t inc)
-{
- bestcomm_task_set_increment_and_condition_32(self, index, INC_INIT(0, inc));
-}
-
-void bestcomm_task_clear_variables(const bestcomm_task *self);
-
-static inline uint32_t bestcomm_task_get_opcode(const bestcomm_task *self, size_t index)
-{
- assert(index < self->tdt_opcode_count);
- return self->tdt_begin[index];
-}
-
-static inline void bestcomm_task_set_opcode(bestcomm_task *self, size_t index, uint32_t opcode)
-{
- assert(index < self->tdt_opcode_count);
- self->tdt_begin[index] = opcode;
-}
-
-static inline void bestcomm_task_set_initiator(const bestcomm_task *self, int initiator)
-{
- rtems_interrupt_level level;
- rtems_interrupt_disable(level);
- *self->task_control_register = BSP_BFLD16SET(*self->task_control_register, initiator, 3, 7);
- rtems_interrupt_enable(level);
-}
-
-static inline volatile bestcomm_task_entry *bestcomm_task_get_task_entry(const bestcomm_task *self)
-{
- return &BESTCOMM_TASK_ENTRY_TABLE[self->task_index];
-}
-
-static inline void bestcomm_task_set_pragma(const bestcomm_task *self, int bit_pos, bool enable)
-{
- volatile bestcomm_task_entry *entry = bestcomm_task_get_task_entry(self);
- uint32_t mask = BSP_BIT32(bit_pos);
- uint32_t bit = enable ? mask : 0;
- entry->fdt_and_pragmas = (entry->fdt_and_pragmas & ~mask) | bit;
-}
-
-static inline void bestcomm_task_enable_precise_increment(const bestcomm_task *self, bool enable)
-{
- bestcomm_task_set_pragma(self, SDMA_PRAGMA_BIT_PRECISE_INC, enable);
-}
-
-static inline void bestcomm_task_enable_error_reset(const bestcomm_task *self, bool enable)
-{
- bestcomm_task_set_pragma(self, SDMA_PRAGMA_BIT_RST_ERROR_NO, !enable);
-}
-
-static inline void bestcomm_task_enable_pack_data(const bestcomm_task *self, bool enable)
-{
- bestcomm_task_set_pragma(self, SDMA_PRAGMA_BIT_PACK, enable);
-}
-
-static inline void bestcomm_task_enable_integer_mode(const bestcomm_task *self, bool enable)
-{
- bestcomm_task_set_pragma(self, SDMA_PRAGMA_BIT_INTEGER, enable);
-}
-
-static inline void bestcomm_task_enable_speculative_read(const bestcomm_task *self, bool enable)
-{
- bestcomm_task_set_pragma(self, SDMA_PRAGMA_BIT_SPECREAD, enable);
-}
-
-static inline void bestcomm_task_enable_combined_write(const bestcomm_task *self, bool enable)
-{
- bestcomm_task_set_pragma(self, SDMA_PRAGMA_BIT_CW, enable);
-}
-
-static inline void bestcomm_task_enable_read_buffer(const bestcomm_task *self, bool enable)
-{
- bestcomm_task_set_pragma(self, SDMA_PRAGMA_BIT_RL, enable);
-}
-
-static inline volatile uint16_t *bestcomm_task_get_task_control_register(const bestcomm_task *self)
-{
- return self->task_control_register;
-}
-
-static inline int bestcomm_task_get_task_index(const bestcomm_task *self)
-{
- return self->task_index;
-}
-
-static inline void bestcomm_task_free_tdt(bestcomm_task *self)
-{
- bestcomm_free(self->tdt_begin);
- self->tdt_begin = NULL;
-}
-
-static inline void bestcomm_task_clear_pragmas(const bestcomm_task *self)
-{
- volatile bestcomm_task_entry *entry = bestcomm_task_get_task_entry(self);
- entry->fdt_and_pragmas &= ~0xffU;
-}
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GEN5200_BESTCOMM_H */