summaryrefslogtreecommitdiffstats
path: root/src/ssx/ssx/ssx_core.c
blob: 7fa484a2fdd4bd06f178e4e65a830e221680b536 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// $Id: ssx_core.c,v 1.2 2014/02/03 01:30:44 daviddu Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ssx/ssx/ssx_core.c,v $
//-----------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2013
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
//-----------------------------------------------------------------------------

/// \file ssx_core.c
/// \brief Core routines for the SSX kernel.
///
///  The entry points in this file are routines that are expected to be needed
///  at runtime by all SSX applications.  This file also serves as a place for
///  kernel global variables to be realized.

#define __SSX_CORE_C__

#include "ssx.h"

#if !SSX_TIMER_SUPPORT

/// If there is no timer support, then any call of the timer interrupt handler
/// is considered a fatal error.

void
__ssx_timer_handler()
{
    SSX_PANIC(SSX_NO_TIMER_SUPPORT);
}

#endif  /* SSX_TIMER_SUPPORT */


/// Initialize an SsxDeque sentinel node
///
/// \param deque The sentinel node of the deque
///
/// SSX has no way of knowing whether the \a deque is currently in use, so
/// this API must only be called on unitialized or otherwise unused sentinel
/// nodes.
///
/// \retval 0 success
///
/// \retval -SSX_INVALID_DEQUE_SENTINEL The \a deque pointer was null

int
ssx_deque_sentinel_create(SsxDeque *deque)
{
    if (SSX_ERROR_CHECK_API) {
        SSX_ERROR_IF(deque == 0, SSX_INVALID_DEQUE_SENTINEL);
    }

    deque->next = deque->previous = deque;
    return 0;
}


/// Initialize an SsxDeque element
///
/// \param element Typically the SsxDeque object of a queable structure
///
/// SSX has no way of knowing whether the \a element is currently in use, so
/// this API must only be called on unitialized or otherwise unused deque
/// elements. 
///
/// \retval 0 success
///
/// \retval -SSX_INVALID_DEQUE_ELEMENT The \a element pointer was null

int
ssx_deque_element_create(SsxDeque *element)
{
    if (SSX_ERROR_CHECK_API) {
        SSX_ERROR_IF(element == 0, SSX_INVALID_DEQUE_ELEMENT);
    }

    element->next = 0;
    return 0;
}

#undef __SSX_CORE_C__
OpenPOWER on IntegriCloud