uboot/cpu/ixp/npe/include/IxOsal.h
<<
>>
Prefs
   1/**
   2 * @file IxOsal.h
   3 *
   4 * @brief Top include file for OSAL 
   5 * 
   6 * 
   7 * @par
   8 * IXP400 SW Release version 2.0
   9 * 
  10 * -- Copyright Notice --
  11 * 
  12 * @par
  13 * Copyright 2001-2005, Intel Corporation.
  14 * All rights reserved.
  15 * 
  16 * @par
  17 * Redistribution and use in source and binary forms, with or without
  18 * modification, are permitted provided that the following conditions
  19 * are met:
  20 * 1. Redistributions of source code must retain the above copyright
  21 *    notice, this list of conditions and the following disclaimer.
  22 * 2. Redistributions in binary form must reproduce the above copyright
  23 *    notice, this list of conditions and the following disclaimer in the
  24 *    documentation and/or other materials provided with the distribution.
  25 * 3. Neither the name of the Intel Corporation nor the names of its contributors
  26 *    may be used to endorse or promote products derived from this software
  27 *    without specific prior written permission.
  28 * 
  29 * @par
  30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
  31 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  32 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  33 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
  34 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  35 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  36 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  37 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  38 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  39 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  40 * SUCH DAMAGE.
  41 * 
  42 * @par
  43 * -- End of Copyright Notice --
  44 */
  45
  46#ifndef IxOsal_H
  47#define IxOsal_H
  48
  49/* Basic types */
  50#include "IxOsalTypes.h"
  51
  52/* Include assert */
  53#include "IxOsalAssert.h"
  54
  55/* 
  56 * Config header gives users option to choose IO MEM 
  57 * and buffer management modules 
  58 */
  59
  60#include "IxOsalConfig.h"
  61
  62/*
  63 * Symbol file needed by some OS.
  64 */
  65#include "IxOsalUtilitySymbols.h"
  66
  67/* OS-specific header */
  68#include "IxOsalOs.h"
  69
  70
  71/**
  72 * @defgroup IxOsal Operating System Abstraction Layer (IxOsal) API
  73 *
  74 * @brief This service provides a thin layer of OS dependency services. 
  75 *
  76 * This file contains the API to the functions which are some what OS dependant and would
  77 * require porting to a particular OS. 
  78 * A primary focus of the component development is to make them as OS independent as possible.
  79 * All other components should abstract their OS dependency to this module.
  80 * Services overview
  81 *      -# Data types, constants, defines
  82 *      -# Interrupts
  83 *              - bind interrupts to handlers
  84 *              - unbind interrupts from handlers
  85 *              - disables all interrupts 
  86 *              - enables all interrupts 
  87 *              - selectively disables interrupts 
  88 *              - enables an interrupt level 
  89 *              - disables an interrupt level 
  90 *      -# Memory
  91 *              - allocates memory
  92 *              - frees memory 
  93 *              - copies memory zones 
  94 *              - fills a memory zone 
  95 *              - allocates cache-safe memory 
  96 *              - frees cache-safe memory 
  97 *              - physical to virtual address translation 
  98 *              - virtual to physical address translation 
  99 *              - cache to memory flush 
 100 *              - cache line invalidate 
 101 *      -# Threads
 102 *              - creates a new thread 
 103 *              - starts a newly created thread 
 104 *              - kills an existing thread 
 105 *              - exits a running thread 
 106 *              - sets the priority of an existing thread 
 107 *              - suspends thread execution 
 108 *              - resumes thread execution 
 109 *      -# IPC
 110 *              - creates a message queue 
 111 *              - deletes a message queue 
 112 *              - sends a message to a message queue 
 113 *              - receives a message from a message queue
 114 *      -# Thread Synchronisation
 115 *              - initializes a mutex 
 116 *              - locks a mutex 
 117 *              - unlocks a mutex 
 118 *              - non-blocking attempt to lock a mutex 
 119 *              - destroys a mutex object 
 120 *              - initializes a fast mutex 
 121 *              - non-blocking attempt to lock a fast mutex 
 122 *              - unlocks a fast mutex 
 123 *              - destroys a fast mutex object 
 124 *              - initializes a semaphore 
 125 *              - posts to (increments) a semaphore 
 126 *              - waits on (decrements) a semaphore 
 127 *              - non-blocking wait on semaphore 
 128 *              - gets semaphore value 
 129 *              - destroys a semaphore object 
 130 *              - yields execution of current thread 
 131 *      -# Time functions
 132 *              - yielding sleep for a number of milliseconds 
 133 *              - busy sleep for a number of microseconds 
 134 *              - value of the timestamp counter 
 135 *              - resolution of the timestamp counter 
 136 *              - system clock rate, in ticks 
 137 *              - current system time 
 138 *              - converts ixOsalTimeVal into ticks 
 139 *              - converts ticks into ixOsalTimeVal 
 140 *              - converts ixOsalTimeVal to milliseconds 
 141 *              - converts milliseconds to IxOsalTimeval 
 142 *              - "equal" comparison for IxOsalTimeval 
 143 *              - "less than" comparison for IxOsalTimeval 
 144 *              - "greater than" comparison for IxOsalTimeval 
 145 *              - "add" operator for IxOsalTimeval 
 146 *              - "subtract" operator for IxOsalTimeval 
 147 *      -# Logging
 148 *              - sets the current logging verbosity level 
 149 *              - interrupt-safe logging function 
 150 *      -# Timer services
 151 *              - schedules a repeating timer 
 152 *              - schedules a single-shot timer 
 153 *              - cancels a running timer 
 154 *              - displays all the running timers 
 155 *      -# Optional Modules
 156 *              - Buffer management module
 157 *              - I/O memory and endianess support module
 158 *
 159 * @{
 160 */
 161
 162
 163/*
 164 * Prototypes
 165 */
 166
 167/* ==========================  Interrupts  ================================
 168 * 
 169 */
 170
 171/** 
 172 * @ingroup IxOsal
 173 *
 174 * @brief Binds an interrupt handler to an interrupt level
 175 *
 176 * @param irqLevel (in)   - interrupt level
 177 * @param irqHandler (in) - interrupt handler
 178 * @param parameter (in)  - custom parameter to be passed to the
 179 *                          interrupt handler
 180 *
 181 * Binds an interrupt handler to an interrupt level. The operation will
 182 * fail if the wrong level is selected, if the handler is NULL, or if the
 183 * interrupt is already bound. This functions binds the specified C
 184 * routine to an interrupt level. When called, the "parameter" value will
 185 * be passed to the routine.
 186 *
 187 * Reentrant: no
 188 * IRQ safe:  no
 189 *
 190 * @return IX_SUCCESS if the operation succeeded or IX_FAIL otherwise
 191 */
 192PUBLIC IX_STATUS ixOsalIrqBind (UINT32 irqLevel,
 193                                IxOsalVoidFnVoidPtr irqHandler,
 194                                void *parameter);
 195
 196/** 
 197 * @ingroup IxOsal
 198 *
 199 * @brief Unbinds an interrupt handler from an interrupt level
 200 *
 201 * @param irqLevel (in)   - interrupt level
 202 *
 203 * Unbinds the selected interrupt level from any previously registered
 204 * handler 
 205 *
 206 * @li Reentrant: no
 207 * @li IRQ safe:  no
 208 *
 209 * @return IX_SUCCESS if the operation succeeded or IX_FAIL otherwise
 210 */
 211PUBLIC IX_STATUS ixOsalIrqUnbind (UINT32 irqLevel);
 212
 213
 214/** 
 215 * @ingroup IxOsal
 216 *
 217 * @brief Disables all interrupts
 218 *
 219 * @param - none
 220 *
 221 * Disables all the interrupts and prevents tasks scheduling 
 222 *
 223 * @li Reentrant: no
 224 * @li IRQ safe:  yes
 225 *
 226 * @return interrupt enable status prior to locking
 227 */
 228PUBLIC UINT32 ixOsalIrqLock (void);
 229
 230/** 
 231 * @ingroup IxOsal
 232 *
 233 * @brief Enables all interrupts
 234 *
 235 * @param irqEnable (in) - interrupt enable status, prior to interrupt
 236 *                         locking 
 237 *
 238 * Enables the interrupts and task scheduling, cancelling the effect
 239 * of ixOsalIrqLock() 
 240 *
 241 * @li Reentrant: no
 242 * @li IRQ safe:  yes
 243 *
 244 * @return IX_SUCCESS if the operation succeeded or IX_FAIL otherwise
 245 */
 246PUBLIC void ixOsalIrqUnlock (UINT32 irqEnable);
 247
 248/** 
 249 * @ingroup IxOsal
 250 *
 251 * @brief Selectively disables interrupts
 252 *
 253 * @param irqLevel ­ new interrupt level
 254 *
 255 * Disables the interrupts below the specified interrupt level 
 256 * 
 257 * @li Reentrant: no
 258 * @li IRQ safe:  yes
 259 *
 260 * @note Depending on the implementation this function can disable all
 261 *       the interrupts 
 262 *
 263 * @return previous interrupt level
 264 */
 265PUBLIC UINT32 ixOsalIrqLevelSet (UINT32 irqLevel);
 266
 267/** 
 268 * @ingroup IxOsal
 269 *
 270 * @brief Enables an interrupt level
 271 *
 272 * @param irqLevel ­ interrupt level to enable
 273 *
 274 * Enables the specified interrupt level
 275 *
 276 * @li Reentrant: no
 277 * @li IRQ safe:  yes
 278 *
 279 * @return - none
 280 */
 281PUBLIC void ixOsalIrqEnable (UINT32 irqLevel);
 282
 283/** 
 284 * @ingroup IxOsal
 285 *
 286 * @brief Disables an interrupt level
 287 *
 288 * @param irqLevel ­ interrupt level to disable
 289 *
 290 * Disables the specified interrupt level
 291 *
 292 * @li Reentrant: no
 293 * @li IRQ safe:  yes
 294 *
 295 * @return - none
 296 */
 297PUBLIC void ixOsalIrqDisable (UINT32 irqLevel);
 298
 299
 300/* =============================  Memory  =================================
 301 * 
 302 */
 303
 304/** 
 305 * @ingroup IxOsal
 306 *
 307 * @brief Allocates memory
 308 *
 309 * @param size - memory size to allocate, in bytes
 310 *
 311 * Allocates a memory zone of a given size
 312 *
 313 * @li Reentrant: no
 314 * @li IRQ safe:  no
 315 *
 316 * @return Pointer to the allocated zone or NULL if the allocation failed
 317 */
 318PUBLIC void *ixOsalMemAlloc (UINT32 size);
 319
 320/** 
 321 * @ingroup IxOsal
 322 *
 323 * @brief Frees memory
 324 *
 325 * @param ptr - pointer to the memory zone
 326 *
 327 * Frees a previously allocated memory zone
 328 *
 329 * @li Reentrant: no
 330 * @li IRQ safe:  no
 331 *
 332 * @return - none
 333 */
 334PUBLIC void ixOsalMemFree (void *ptr);
 335
 336/** 
 337 * @ingroup IxOsal
 338 *
 339 * @brief Copies memory zones
 340 *
 341 * @param dest  - destination memory zone
 342 * @param src   - source memory zone
 343 * @param count - number of bytes to copy
 344 *
 345 * Copies count bytes from the source memory zone pointed by src into the
 346 * memory zone pointed by dest.
 347 *
 348 * @li Reentrant: no
 349 * @li IRQ safe:  yes
 350 *
 351 * @return Pointer to the destination memory zone
 352 */
 353PUBLIC void *ixOsalMemCopy (void *dest, void *src, UINT32 count);
 354
 355/** 
 356 * @ingroup IxOsal
 357 *
 358 * @brief Fills a memory zone
 359 *
 360 * @param ptr - pointer to the memory zone
 361 * @param filler - byte to fill the memory zone with
 362 * @param count - number of bytes to fill
 363 *
 364 * Fills a memory zone with a given constant byte
 365 *
 366 * @li Reentrant: no
 367 * @li IRQ safe:  yes
 368 *
 369 * @return Pointer to the memory zone
 370 */
 371PUBLIC void *ixOsalMemSet (void *ptr, UINT8 filler, UINT32 count);
 372
 373/** 
 374 * @ingroup IxOsal
 375 *
 376 * @brief Allocates cache-safe memory
 377 *
 378 * @param size - size, in bytes, of the allocated zone
 379 *
 380 * Allocates a cache-safe memory zone of at least "size" bytes and returns
 381 * the pointer to the memory zone. This memory zone, depending on the
 382 * platform, is either uncached or aligned on a cache line boundary to make
 383 * the CACHE_FLUSH and CACHE_INVALIDATE macros safe to use. The memory
 384 * allocated with this function MUST be freed with ixOsalCacheDmaFree(),
 385 * otherwise memory corruption can occur.
 386 *
 387 * @li Reentrant: no
 388 * @li IRQ safe:  no
 389 *
 390 * @return Pointer to the memory zone or NULL if allocation failed
 391 *
 392 * @note It is important to note that cache coherence is maintained in
 393 * software by using the IX_OSAL_CACHE_FLUSH and IX_OSAL_CACHE_INVALIDATE
 394 * macros to maintain consistency between cache and external memory.
 395 */
 396PUBLIC void *ixOsalCacheDmaMalloc (UINT32 size);
 397
 398/* Macros for ixOsalCacheDmaMalloc*/
 399#define IX_OSAL_CACHE_DMA_MALLOC(size) ixOsalCacheDmaMalloc(size)
 400
 401/** 
 402 * @ingroup IxOsal
 403 *
 404 * @brief Frees cache-safe memory
 405 *
 406 * @param ptr   - pointer to the memory zone
 407 *
 408 * Frees a memory zone previously allocated with ixOsalCacheDmaMalloc()
 409 *
 410 * @li Reentrant: no
 411 * @li IRQ safe:  no
 412 *
 413 * @return - none
 414 */
 415PUBLIC void ixOsalCacheDmaFree (void *ptr);
 416
 417#define IX_OSAL_CACHE_DMA_FREE(ptr)             ixOsalCacheDmaFree(ptr)
 418
 419/** 
 420 * @ingroup IxOsal
 421 *
 422 * @brief physical to virtual address translation
 423 *
 424 * @param physAddr - physical address
 425 *
 426 * Converts a physical address into its equivalent MMU-mapped virtual address
 427 *
 428 * @li Reentrant: no
 429 * @li IRQ safe:  yes
 430 *
 431 * @return Corresponding virtual address, as UINT32
 432 */
 433#define IX_OSAL_MMU_PHYS_TO_VIRT(physAddr) \
 434    IX_OSAL_OS_MMU_PHYS_TO_VIRT(physAddr)
 435
 436
 437/** 
 438 * @ingroup IxOsal
 439 *
 440 * @brief virtual to physical address translation
 441 *
 442 * @param virtAddr - virtual address
 443 *
 444 * Converts a virtual address into its equivalent MMU-mapped physical address
 445 *
 446 * @li Reentrant: no
 447 * @li IRQ safe:  yes
 448 *
 449 * @return Corresponding physical address, as UINT32
 450 */
 451#define IX_OSAL_MMU_VIRT_TO_PHYS(virtAddr)  \
 452    IX_OSAL_OS_MMU_VIRT_TO_PHYS(virtAddr)
 453
 454
 455
 456/** 
 457 * @ingroup IxOsal
 458 *
 459 * @brief cache to memory flush
 460 *
 461 * @param addr - memory address to flush from cache
 462 * @param size - number of bytes to flush (rounded up to a cache line)
 463 *
 464 * Flushes the cached value of the memory zone pointed by "addr" into memory,
 465 * rounding up to a cache line. Use before the zone is to be read by a
 466 * processing unit which is not cache coherent with the main CPU.
 467 *
 468 * @li Reentrant: no
 469 * @li IRQ safe:  yes
 470 *
 471 * @return - none
 472 */
 473#define IX_OSAL_CACHE_FLUSH(addr, size)  IX_OSAL_OS_CACHE_FLUSH(addr, size)
 474
 475
 476
 477/** 
 478 * @ingroup IxOsal
 479 *
 480 * @brief cache line invalidate
 481 *
 482 * @param addr - memory address to invalidate in cache
 483 * @param size - number of bytes to invalidate (rounded up to a cache line)
 484 *
 485 * Invalidates the cached value of the memory zone pointed by "addr",
 486 * rounding up to a cache line. Use before reading the zone from the main
 487 * CPU, if the zone has been updated by a processing unit which is not cache
 488 * coherent with the main CPU.
 489 *
 490 * @li Reentrant: no
 491 * @li IRQ safe:  yes
 492 *
 493 * @return - none
 494 */
 495#define IX_OSAL_CACHE_INVALIDATE(addr, size)  IX_OSAL_OS_CACHE_INVALIDATE(addr, size)
 496
 497
 498/* =============================  Threads  =================================
 499 * 
 500 */
 501
 502/** 
 503 * @ingroup IxOsal
 504 *
 505 * @brief Creates a new thread
 506 *
 507 * @param thread - handle of the thread to be created
 508 * @param threadAttr - pointer to a thread attribute object
 509 * @param startRoutine - thread entry point
 510 * @param arg - argument given to the thread
 511 *
 512 * Creates a thread given a thread handle and a thread attribute object. The
 513 * same thread attribute object can be used to create separate threads. "NULL"
 514 * can be specified as the attribute, in which case the default values will
 515 * be used. The thread needs to be explicitly started using ixOsalThreadStart().
 516 *
 517 * @li Reentrant: no
 518 * @li IRQ safe:  no
 519 *
 520 * @return - IX_SUCCESS/IX_FAIL
 521 */
 522PUBLIC IX_STATUS ixOsalThreadCreate (IxOsalThread * thread,
 523                                     IxOsalThreadAttr * threadAttr,
 524                                     IxOsalVoidFnVoidPtr startRoutine,
 525                                     void *arg);
 526
 527/** 
 528 * @ingroup IxOsal
 529 *
 530 * @brief Starts a newly created thread
 531 *
 532 * @param thread - handle of the thread to be started
 533 *
 534 * Starts a thread given its thread handle. This function is to be called
 535 * only once, following the thread initialization.
 536 *
 537 * @li Reentrant: no
 538 * @li IRQ safe:  no
 539 *
 540 * @return - IX_SUCCESS/IX_FAIL
 541 */
 542PUBLIC IX_STATUS ixOsalThreadStart (IxOsalThread * thread);
 543
 544/** 
 545 * @ingroup IxOsal
 546 *
 547 * @brief Kills an existing thread
 548 *
 549 * @param thread - handle of the thread to be killed
 550 *
 551 * Kills a thread given its thread handle.
 552 *
 553 * @li Reentrant: no
 554 * @li IRQ safe:  no
 555 *
 556 * @note It is not possible to kill threads in Linux kernel mode. This 
 557 * function will only send a SIGTERM signal, and it is the responsibility
 558 * of the thread to check for the presence of this signal with
 559 * signal_pending().
 560 *
 561 * @return -  IX_SUCCESS/IX_FAIL
 562 */
 563PUBLIC IX_STATUS ixOsalThreadKill (IxOsalThread * thread);
 564
 565/** 
 566 * @ingroup IxOsal
 567 *
 568 * @brief Exits a running thread
 569 *
 570 * Terminates the calling thread
 571 *
 572 * @li Reentrant: no
 573 * @li IRQ safe:  no
 574 *
 575 * @return - This function never returns
 576 */
 577PUBLIC void ixOsalThreadExit (void);
 578
 579/** 
 580 * @ingroup IxOsal
 581 *
 582 * @brief Sets the priority of an existing thread
 583 *
 584 * @param thread - handle of the thread
 585 * @param priority - new priority, between 0 and 255 (0 being the highest)
 586 *
 587 * Sets the thread priority
 588 *
 589 * @li Reentrant: no
 590 * @li IRQ safe:  no
 591 *
 592 * @return - IX_SUCCESS/IX_FAIL
 593 */
 594PUBLIC IX_STATUS ixOsalThreadPrioritySet (IxOsalThread * thread,
 595                                          UINT32 priority);
 596
 597/** 
 598 * @ingroup IxOsal
 599 *
 600 * @brief Suspends thread execution
 601 *
 602 * @param thread - handle of the thread
 603 *
 604 * Suspends the thread execution
 605 *
 606 * @li Reentrant: no
 607 * @li IRQ safe:  no
 608 *
 609 * @return - IX_SUCCESS/IX_FAIL
 610 */
 611PUBLIC IX_STATUS ixOsalThreadSuspend (IxOsalThread * thread);
 612
 613/** 
 614 * @ingroup IxOsal
 615 *
 616 * @brief Resumes thread execution
 617 *
 618 * @param thread - handle of the thread
 619 *
 620 * Resumes the thread execution
 621 *
 622 * @li Reentrant: no
 623 * @li IRQ safe:  no
 624 *
 625 * @return - IX_SUCCESS/IX_FAIL
 626 */
 627PUBLIC IX_STATUS ixOsalThreadResume (IxOsalThread * thread);
 628
 629
 630/* =======================  Message Queues (IPC) ==========================
 631 * 
 632 */
 633
 634/** 
 635 * @ingroup IxOsal
 636 *
 637 * @brief Creates a message queue
 638 *
 639 * @param queue - queue handle
 640 * @param msgCount - maximum number of messages to hold in the queue
 641 * @param msgLen - maximum length of each message, in bytes
 642 *
 643 * Creates a message queue of msgCount messages, each containing msgLen bytes
 644 *
 645 * @li Reentrant: no
 646 * @li IRQ safe:  no
 647 *
 648 * @return - IX_SUCCESS/IX_FAIL
 649 */
 650PUBLIC IX_STATUS ixOsalMessageQueueCreate (IxOsalMessageQueue * queue,
 651                                           UINT32 msgCount, UINT32 msgLen);
 652
 653/** 
 654 * @ingroup IxOsal
 655 *
 656 * @brief Deletes a message queue
 657 *
 658 * @param queue - queue handle
 659 *
 660 * Deletes a message queue
 661 *
 662 * @li Reentrant: no
 663 * @li IRQ safe:  no
 664 *
 665 * @return - IX_SUCCESS/IX_FAIL
 666 */
 667PUBLIC IX_STATUS ixOsalMessageQueueDelete (IxOsalMessageQueue * queue);
 668
 669/** 
 670 * @ingroup IxOsal
 671 *
 672 * @brief Sends a message to a message queue
 673 *
 674 * @param queue - queue handle
 675 * @param message - message to send
 676 *
 677 * Sends a message to the message queue. The message will be copied (at the
 678 * configured size of the message) into the queue.
 679 *
 680 * @li Reentrant: yes
 681 * @li IRQ safe:  yes
 682 *
 683 * @return - IX_SUCCESS/IX_FAIL
 684 */
 685PUBLIC IX_STATUS ixOsalMessageQueueSend (IxOsalMessageQueue * queue,
 686                                         UINT8 * message);
 687
 688/** 
 689 * @ingroup IxOsal
 690 *
 691 * @brief Receives a message from a message queue
 692 *
 693 * @param queue - queue handle
 694 * @param message - pointer to where the message should be copied to
 695 *
 696 * Retrieves the first message from the message queue
 697 *
 698 * @li Reentrant: yes
 699 * @li IRQ safe:  yes
 700 *
 701 * @return - IX_SUCCESS/IX_FAIL
 702 */
 703PUBLIC IX_STATUS ixOsalMessageQueueReceive (IxOsalMessageQueue * queue,
 704                                            UINT8 * message);
 705
 706
 707/* =======================  Thread Synchronisation ========================
 708 * 
 709 */
 710
 711/** 
 712 * @ingroup IxOsal
 713 *
 714 * @brief initializes a mutex
 715 *
 716 * @param mutex - mutex handle
 717 *
 718 * Initializes a mutex object
 719 *
 720 * @li Reentrant: no
 721 * @li IRQ safe:  no
 722 *
 723 * @return - IX_SUCCESS/IX_FAIL
 724 */
 725PUBLIC IX_STATUS ixOsalMutexInit (IxOsalMutex * mutex);
 726
 727/** 
 728 * @ingroup IxOsal
 729 *
 730 * @brief locks a mutex
 731 *
 732 * @param mutex - mutex handle
 733 * @param timeout - timeout in ms; IX_OSAL_WAIT_FOREVER (-1) to wait forever
 734 *                  or IX_OSAL_WAIT_NONE to return immediately
 735 *
 736 * Locks a mutex object
 737 *
 738 * @li Reentrant: yes
 739 * @li IRQ safe:  no
 740 *
 741 * @return - IX_SUCCESS/IX_FAIL
 742 */
 743PUBLIC IX_STATUS ixOsalMutexLock (IxOsalMutex * mutex, INT32 timeout);
 744
 745/** 
 746 * @ingroup IxOsal
 747 *
 748 * @brief Unlocks a mutex
 749 *
 750 * @param mutex - mutex handle
 751 *
 752 * Unlocks a mutex object
 753 *
 754 * @li Reentrant: yes
 755 * @li IRQ safe:  yes
 756 *
 757 * @return - IX_SUCCESS/IX_FAIL
 758 */
 759PUBLIC IX_STATUS ixOsalMutexUnlock (IxOsalMutex * mutex);
 760
 761/** 
 762 * @ingroup IxOsal
 763 *
 764 * @brief Non-blocking attempt to lock a mutex
 765 *
 766 * @param mutex - mutex handle
 767 *
 768 * Attempts to lock a mutex object, returning immediately with IX_SUCCESS if
 769 * the lock was successful or IX_FAIL if the lock failed
 770 *
 771 * @li Reentrant: yes
 772 * @li IRQ safe:  no
 773 *
 774 * @return - IX_SUCCESS/IX_FAIL
 775 */
 776PUBLIC IX_STATUS ixOsalMutexTryLock (IxOsalMutex * mutex);
 777
 778/** 
 779 * @ingroup IxOsal
 780 *
 781 * @brief Destroys a mutex object
 782 *
 783 * @param mutex - mutex handle
 784 * @param
 785 *
 786 * Destroys a mutex object; the caller should ensure that no thread is
 787 * blocked on this mutex
 788 *
 789 * @li Reentrant: no
 790 * @li IRQ safe:  no
 791 *
 792 * @return - IX_SUCCESS/IX_FAIL
 793 */
 794PUBLIC IX_STATUS ixOsalMutexDestroy (IxOsalMutex * mutex);
 795
 796/** 
 797 * @ingroup IxOsal
 798 *
 799 * @brief Initializes a fast mutex
 800 *
 801 * @param mutex - fast mutex handle
 802 *
 803 * Initializes a fast mutex object
 804 *
 805 * @li Reentrant: yes
 806 * @li IRQ safe:  yes
 807 *
 808 * @return - IX_SUCCESS/IX_FAIL
 809 */
 810PUBLIC IX_STATUS ixOsalFastMutexInit (IxOsalFastMutex * mutex);
 811
 812/** 
 813 * @ingroup IxOsal
 814 *
 815 * @brief Non-blocking attempt to lock a fast mutex
 816 *
 817 * @param mutex - fast mutex handle
 818 *
 819 * Attempts to lock a fast mutex object, returning immediately with
 820 * IX_SUCCESS if the lock was successful or IX_FAIL if the lock failed
 821 *
 822 * @li Reentrant: yes
 823 * @li IRQ safe:  yes
 824 *
 825 * @return - IX_SUCCESS/IX_FAIL
 826 */
 827PUBLIC IX_STATUS ixOsalFastMutexTryLock (IxOsalFastMutex * mutex);
 828
 829/** 
 830 * @ingroup IxOsal
 831 *
 832 * @brief Unlocks a fast mutex
 833 *
 834 * @param mutex - fast mutex handle
 835 *
 836 * Unlocks a fast mutex object
 837 *
 838 * @li Reentrant: yes
 839 * @li IRQ safe:  yes
 840 *
 841 * @return - IX_SUCCESS/IX_FAIL
 842 */
 843PUBLIC IX_STATUS ixOsalFastMutexUnlock (IxOsalFastMutex * mutex);
 844
 845/** 
 846 * @ingroup IxOsal
 847 *
 848 * @brief Destroys a fast mutex object
 849 *
 850 * @param mutex - fast mutex handle
 851 *
 852 * Destroys a fast mutex object
 853 *
 854 * @li Reentrant: yes
 855 * @li IRQ safe:  yes
 856 *
 857 * @return - IX_SUCCESS/IX_FAIL
 858 */
 859PUBLIC IX_STATUS ixOsalFastMutexDestroy (IxOsalFastMutex * mutex);
 860
 861/** 
 862 * @ingroup IxOsal
 863 *
 864 * @brief Initializes a semaphore
 865 *
 866 * @param semaphore - semaphore handle
 867 * @param value - initial semaphore value
 868 *
 869 * Initializes a semaphore object
 870 *
 871 * @li Reentrant: no
 872 * @li IRQ safe:  no
 873 *
 874 * @return - IX_SUCCESS/IX_FAIL
 875 */
 876PUBLIC IX_STATUS ixOsalSemaphoreInit (IxOsalSemaphore * semaphore,
 877                                      UINT32 value);
 878
 879/** 
 880 * @ingroup IxOsal
 881 *
 882 * @brief Posts to (increments) a semaphore
 883 *
 884 * @param semaphore - semaphore handle
 885 *
 886 * Increments a semaphore object
 887 *
 888 * @li Reentrant: no
 889 * @li IRQ safe:  yes
 890 *
 891 * @return - IX_SUCCESS/IX_FAIL
 892 */
 893PUBLIC IX_STATUS ixOsalSemaphorePost (IxOsalSemaphore * semaphore);
 894
 895/** 
 896 * @ingroup IxOsal
 897 *
 898 * @brief Waits on (decrements) a semaphore
 899 *
 900 * @param semaphore - semaphore handle
 901 * @param timeout - timeout, in ms; IX_OSAL_WAIT_FOREVER (-1) if the thread
 902 * is to block indefinitely or IX_OSAL_WAIT_NONE (0) if the thread is to
 903 * return immediately even if the call fails
 904 *
 905 * Decrements a semaphore, blocking if the semaphore is
 906 * unavailable (value is 0).
 907 *
 908 * @li Reentrant: no
 909 * @li IRQ safe:  no
 910 *
 911 * @return - IX_SUCCESS/IX_FAIL
 912 */
 913PUBLIC IX_STATUS ixOsalSemaphoreWait (IxOsalSemaphore * semaphore,
 914                                      INT32 timeout);
 915
 916/** 
 917 * @ingroup IxOsal
 918 *
 919 * @brief Non-blocking wait on semaphore
 920 *
 921 * @param semaphore - semaphore handle
 922 *
 923 * Decrements a semaphore, not blocking the calling thread if the semaphore
 924 * is unavailable
 925 *
 926 * @li Reentrant: no
 927 * @li IRQ safe:  no
 928 *
 929 * @return - IX_SUCCESS/IX_FAIL
 930 */
 931PUBLIC IX_STATUS ixOsalSemaphoreTryWait (IxOsalSemaphore * semaphore);
 932
 933/** 
 934 * @ingroup IxOsal
 935 *
 936 * @brief Gets semaphore value
 937 *
 938 * @param semaphore - semaphore handle
 939 * @param value - location to store the semaphore value
 940 *
 941 * Retrieves the current value of a semaphore object
 942 *
 943 * @li Reentrant: no
 944 * @li IRQ safe:  no
 945 *
 946 * @return - IX_SUCCESS/IX_FAIL
 947 */
 948PUBLIC IX_STATUS ixOsalSemaphoreGetValue (IxOsalSemaphore * semaphore,
 949                                          UINT32 * value);
 950
 951/** 
 952 * @ingroup IxOsal
 953 *
 954 * @brief Destroys a semaphore object
 955 *
 956 * @param semaphore - semaphore handle
 957 *
 958 * Destroys a semaphore object; the caller should ensure that no thread is
 959 * blocked on this semaphore
 960 *
 961 * @li Reentrant: no
 962 * @li IRQ safe:  no
 963 *
 964 * @return - IX_SUCCESS/IX_FAIL
 965 */
 966PUBLIC IX_STATUS ixOsalSemaphoreDestroy (IxOsalSemaphore * semaphore);
 967
 968/** 
 969 * @ingroup IxOsal
 970 *
 971 * @brief Yields execution of current thread
 972 *
 973 * Yields the execution of the current thread
 974 *
 975 * @li Reentrant: no
 976 * @li IRQ safe:  no
 977 *
 978 * @return - none
 979 */
 980PUBLIC void ixOsalYield (void);
 981
 982
 983/* ========================== Time functions  ===========================
 984 * 
 985 */
 986
 987/** 
 988 * @ingroup IxOsal
 989 *
 990 * @brief Yielding sleep for a number of milliseconds
 991 *
 992 * @param milliseconds - number of milliseconds to sleep
 993 *
 994 * The calling thread will sleep for the specified number of milliseconds.
 995 * This sleep is yielding, hence other tasks will be scheduled by the
 996 * operating system during the sleep period. Calling this function with an
 997 * argument of 0 will place the thread at the end of the current scheduling
 998 * loop.
 999 *
1000 * @li Reentrant: no
1001 * @li IRQ safe:  no
1002 *
1003 * @return - none
1004 */
1005PUBLIC void ixOsalSleep (UINT32 milliseconds);
1006
1007/** 
1008 * @ingroup IxOsal
1009 *
1010 * @brief Busy sleep for a number of microseconds
1011 *
1012 * @param microseconds - number of microseconds to sleep
1013 *
1014 * Sleeps for the specified number of microseconds, without explicitly
1015 * yielding thread execution to the OS scheduler
1016 *
1017 * @li Reentrant: yes
1018 * @li IRQ safe:  yes
1019 *
1020 * @return - none
1021 */
1022PUBLIC void ixOsalBusySleep (UINT32 microseconds);
1023
1024/** 
1025 * @ingroup IxOsal
1026 *
1027 * @brief XXX
1028 *
1029 * Retrieves the current timestamp
1030 *
1031 * @li Reentrant: yes
1032 * @li IRQ safe:  yes
1033 *
1034 * @return - The current timestamp
1035 *
1036 * @note The implementation of this function is platform-specific. Not
1037 * all the platforms provide a high-resolution timestamp counter.
1038 */
1039PUBLIC UINT32 ixOsalTimestampGet (void);
1040
1041/** 
1042 * @ingroup IxOsal
1043 *
1044 * @brief Resolution of the timestamp counter
1045 *
1046 * Retrieves the resolution (frequency) of the timestamp counter.
1047 *
1048 * @li Reentrant: yes
1049 * @li IRQ safe:  yes
1050 *
1051 * @return - The resolution of the timestamp counter
1052 *
1053 * @note The implementation of this function is platform-specific. Not all
1054 * the platforms provide a high-resolution timestamp counter.
1055 */
1056PUBLIC UINT32 ixOsalTimestampResolutionGet (void);
1057
1058/** 
1059 * @ingroup IxOsal
1060 *
1061 * @brief System clock rate, in ticks
1062 *
1063 * Retrieves the resolution (number of ticks per second) of the system clock
1064 *
1065 * @li Reentrant: no
1066 * @li IRQ safe:  no
1067 *
1068 * @return - The system clock rate
1069 *
1070 * @note The implementation of this function is platform and OS-specific.
1071 * The system clock rate is not always available - e.g. Linux does not
1072 * provide this information in user mode
1073 */
1074PUBLIC UINT32 ixOsalSysClockRateGet (void);
1075
1076/** 
1077 * @ingroup IxOsal
1078 *
1079 * @brief Current system time
1080 *
1081 * @param tv - pointer to an IxOsalTimeval structure to store the current
1082 *             time in
1083 *
1084 * Retrieves the current system time (real-time)
1085 *
1086 * @li Reentrant: no
1087 * @li IRQ safe:  no
1088 *
1089 * @return - none
1090 *
1091 * @note The implementation of this function is platform-specific. Not all
1092 * platforms have a real-time clock.
1093 */
1094PUBLIC void ixOsalTimeGet (IxOsalTimeval * tv);
1095
1096
1097
1098/* Internal function to convert timer val to ticks.
1099 * NOTE - This should not be called by the user.
1100 * Use the macro IX_OSAL_TIMEVAL_TO_TICKS 
1101 * OS-independent, implemented in framework.
1102 */
1103PUBLIC UINT32 ixOsalTimevalToTicks (IxOsalTimeval tv);
1104
1105
1106/** 
1107 * @ingroup IxOsal
1108 *
1109 * @brief Converts ixOsalTimeVal into ticks
1110 *
1111 * @param tv - an IxOsalTimeval structure
1112 *
1113 * Converts an IxOsalTimeval structure into OS ticks
1114 *
1115 * @li Reentrant: yes
1116 * @li IRQ safe:  yes
1117 *
1118 * @return - Corresponding number of ticks
1119 * 
1120 * Note: This function is OS-independent. Implemented by core.
1121 */
1122#define IX_OSAL_TIMEVAL_TO_TICKS(tv)  ixOsalTimevalToTicks(tv)
1123
1124
1125
1126/* Internal function to convert ticks to timer val
1127 * NOTE - This should not be called by the user.
1128 * Use the macro IX_OSAL_TICKS_TO_TIMEVAL 
1129 */
1130
1131PUBLIC void ixOsalTicksToTimeval (UINT32 ticks, IxOsalTimeval * pTv);
1132
1133
1134/** 
1135 * @ingroup IxOsal
1136 *
1137 * @brief Converts ticks into ixOsalTimeVal 
1138 *
1139 * @param ticks - number of ticks
1140 * @param pTv - pointer to the destination structure
1141 *
1142 * Converts the specified number of ticks into an IxOsalTimeval structure
1143 *
1144 * @li Reentrant: yes
1145 * @li IRQ safe:  yes
1146 *
1147 * @return - Corresponding IxOsalTimeval structure
1148 * Note: This function is OS-independent. Implemented by core.
1149 */
1150#define IX_OSAL_TICKS_TO_TIMEVAL(ticks, pTv)  \
1151    ixOsalTicksToTimeval(ticks, pTv)
1152
1153
1154
1155
1156/** 
1157 * @ingroup IxOsal
1158 *
1159 * @brief Converts ixOsalTimeVal to milliseconds
1160 *
1161 * @param tv - IxOsalTimeval structure to convert
1162 *
1163 * Converts an IxOsalTimeval structure into milliseconds
1164 *
1165 * @li Reentrant: yes
1166 * @li IRQ safe:  yes
1167 *
1168 * @return - Corresponding number of milliseconds
1169 * Note: This function is OS-independent. Implemented by core.
1170 */
1171#define IX_OSAL_TIMEVAL_TO_MS(tv)     ((tv.secs * 1000) + (tv.nsecs / 1000000))
1172
1173
1174/** 
1175 * @ingroup IxOsal
1176 *
1177 * @brief Converts milliseconds to IxOsalTimeval
1178 *
1179 * @param milliseconds - number of milliseconds to convert
1180 * @param pTv - pointer to the destination structure
1181 *
1182 * Converts a millisecond value into an IxOsalTimeval structure
1183 *
1184 * @li Reentrant: yes
1185 * @li IRQ safe:  yes
1186 *
1187 * @return - Corresponding IxOsalTimeval structure
1188 * Note: This function is OS-independent. Implemented by core.
1189 */
1190#define IX_OSAL_MS_TO_TIMEVAL(milliseconds, pTv)  \
1191            ((IxOsalTimeval *) pTv)->secs = milliseconds / 1000;                          \
1192        ((IxOsalTimeval *) pTv)->nsecs = (milliseconds % 1000) * 1000000
1193
1194
1195/** 
1196 * @ingroup IxOsal
1197 *
1198 * @brief "equal" comparison for IxOsalTimeval
1199 *
1200 * @param tvA, tvB - IxOsalTimeval structures to compare
1201 *
1202 * Compares two IxOsalTimeval structures for equality
1203 *
1204 * @li Reentrant: yes
1205 * @li IRQ safe:  yes
1206 *
1207 * @return - TRUE if the structures are equal
1208 *         - FALSE otherwise
1209 * Note: This function is OS-independant
1210 */
1211#define IX_OSAL_TIME_EQ(tvA, tvB)        \
1212        ((tvA).secs == (tvB).secs && (tvA).nsecs == (tvB).nsecs)
1213
1214
1215/** 
1216 * @ingroup IxOsal
1217 *
1218 * @brief "less than" comparison for IxOsalTimeval
1219 *
1220 * @param tvA, tvB - IxOsalTimeval structures to compare
1221 *
1222 * Compares two IxOsalTimeval structures to determine if the first one is
1223 * less than the second one
1224 *
1225 * @li Reentrant: yes
1226 * @li IRQ safe:  yes
1227 *
1228 * @return - TRUE if tvA < tvB
1229 *         - FALSE otherwise
1230 * Note: This function is OS-independent. Implemented by core.
1231 */
1232#define IX_OSAL_TIME_LT(tvA,tvB) \
1233        ((tvA).secs  < (tvB).secs ||    \
1234        ((tvA).secs == (tvB).secs && (tvA).nsecs < (tvB).nsecs))
1235
1236
1237/** 
1238 * @ingroup IxOsal
1239 *
1240 * @brief "greater than" comparison for IxOsalTimeval
1241 *
1242 * @param tvA, tvB - IxOsalTimeval structures to compare
1243 *
1244 * Compares two IxOsalTimeval structures to determine if the first one is
1245 * greater than the second one
1246 *
1247 * @li Reentrant: yes
1248 * @li IRQ safe:  yes
1249 *
1250 * @return - TRUE if tvA > tvB
1251 *         - FALSE  otherwise
1252 * Note: This function is OS-independent.
1253 */
1254#define IX_OSAL_TIME_GT(tvA, tvB)  \
1255        ((tvA).secs  > (tvB).secs ||    \
1256        ((tvA).secs == (tvB).secs && (tvA).nsecs > (tvB).nsecs))
1257
1258
1259/** 
1260 * @ingroup IxOsal
1261 *
1262 * @brief "add" operator for IxOsalTimeval
1263 *
1264 * @param tvA, tvB - IxOsalTimeval structures to add
1265 *
1266 * Adds the second IxOsalTimevalStruct to the first one (equivalent to
1267 * tvA += tvB)
1268 *
1269 * @li Reentrant: yes
1270 * @li IRQ safe:  yes
1271 *
1272 * @return - none
1273 * Note: This function is OS-independent.
1274 */
1275#define IX_OSAL_TIME_ADD(tvA, tvB)  \
1276        (tvA).secs += (tvB).secs;   \
1277        (tvA).nsecs += (tvB).nsecs; \
1278        if ((tvA).nsecs >= IX_OSAL_BILLION) \
1279        { \
1280        (tvA).secs++; \
1281        (tvA).nsecs -= IX_OSAL_BILLION; }
1282
1283
1284/** 
1285 * @ingroup IxOsal
1286 *
1287 * @brief "subtract" operator for IxOsalTimeval
1288 *
1289 * @param tvA, tvB - IxOsalTimeval structures to subtract
1290 *
1291 * Subtracts the second IxOsalTimevalStruct from the first one (equivalent
1292 * to tvA -= tvB)
1293 *
1294 * @li Reentrant: yes
1295 * @li IRQ safe:  yes
1296 *
1297 * @return - none
1298 * Note: This function is OS-independent. Implemented by core.
1299 */
1300#define IX_OSAL_TIME_SUB(tvA, tvB)   \
1301        if ((tvA).nsecs >= (tvB).nsecs) \
1302        { \
1303          (tvA).secs -= (tvB).secs; \
1304          (tvA).nsecs -= (tvB).nsecs; \
1305        } \
1306        else \
1307        { \
1308          (tvA).secs -= ((tvB).secs + 1); \
1309          (tvA).nsecs += IX_OSAL_BILLION - (tvB).nsecs; \
1310        }
1311
1312
1313/* ============================= Logging  ==============================
1314 * 
1315 */
1316
1317/** 
1318 * @ingroup IxOsal
1319 *
1320 * @brief Interrupt-safe logging function
1321 *
1322 * @param level - identifier prefix for the message
1323 * @param device - output device
1324 * @param format - message format, in a printf format
1325 * @param ... - up to 6 arguments to be printed
1326 *
1327 * IRQ-safe logging function, similar to printf. Accepts up to 6 arguments
1328 * to print (excluding the level, device and the format). This function will
1329 * actually display the message only if the level is lower than the current
1330 * verbosity level or if the IX_OSAL_LOG_USER level is used. An output device
1331 * must be specified (see IxOsalTypes.h).
1332 *
1333 * @li Reentrant: yes
1334 * @li IRQ safe:  yes
1335 *
1336 * @return - Beside the exceptions documented in the note below, the returned
1337 * value is the number of printed characters, or -1 if the parameters are
1338 * incorrect (NULL format, unknown output device)
1339 *
1340 * @note The exceptions to the return value are:
1341 * VxWorks: The return value is 32 if the specified level is 1 and 64
1342 * if the specified level is greater than 1 and less or equal than 9.
1343 * WinCE: If compiled for EBOOT then the return value is always 0.
1344 *
1345 * @note The given print format should take into account the specified 
1346 * output device. IX_OSAL_STDOUT supports all the usual print formats,
1347 * however a custom hex display specified by IX_OSAL_HEX would support
1348 * only a fixed number of hexadecimal digits.
1349 */
1350PUBLIC INT32 ixOsalLog (IxOsalLogLevel level,
1351                        IxOsalLogDevice device,
1352                        char *format,
1353                        int arg1,
1354                        int arg2, int arg3, int arg4, int arg5, int arg6);
1355
1356/** 
1357 * @ingroup IxOsal
1358 *
1359 * @brief sets the current logging verbosity level
1360 *
1361 * @param level - new log verbosity level
1362 *
1363 * Sets the log verbosity level. The default value is IX_OSAL_LOG_ERROR.
1364 *
1365 * @li Reentrant: yes
1366 * @li IRQ safe:  yes
1367 *
1368 * @return - Old log verbosity level
1369 */
1370PUBLIC UINT32 ixOsalLogLevelSet (UINT32 level);
1371
1372
1373/* ============================= Logging  ==============================
1374 * 
1375 */
1376
1377/** 
1378 * @ingroup IxOsal
1379 *
1380 * @brief Schedules a repeating timer
1381 *
1382 * @param timer - handle of the timer object
1383 * @param period - timer trigger period, in milliseconds
1384 * @param priority - timer priority (0 being the highest)
1385 * @param callback - user callback to invoke when the timer triggers
1386 * @param param - custom parameter passed to the callback
1387 *
1388 * Schedules a timer to be called every period milliseconds. The timer
1389 * will invoke the specified callback function possibly in interrupt
1390 * context, passing the given parameter. If several timers trigger at the
1391 * same time contention issues are dealt according to the specified timer
1392 * priorities.
1393 *
1394 * @li Reentrant: no
1395 * @li IRQ safe:  no
1396 *
1397 * @return - IX_SUCCESS/IX_FAIL
1398 */
1399PUBLIC IX_STATUS ixOsalRepeatingTimerSchedule (IxOsalTimer * timer,
1400                                               UINT32 period,
1401                                               UINT32 priority,
1402                                               IxOsalVoidFnVoidPtr callback,
1403                                               void *param);
1404
1405/** 
1406 * @ingroup IxOsal
1407 *
1408 * @brief Schedules a single-shot timer
1409 *
1410 * @param timer - handle of the timer object
1411 * @param period - timer trigger period, in milliseconds
1412 * @param priority - timer priority (0 being the highest)
1413 * @param callback - user callback to invoke when the timer triggers
1414 * @param param - custom parameter passed to the callback
1415 *
1416 * Schedules a timer to be called after period milliseconds. The timer
1417 * will cease to function past its first trigger. The timer will invoke
1418 * the specified callback function, possibly in interrupt context, passing
1419 * the given parameter. If several timers trigger at the same time contention
1420 * issues are dealt according to the specified timer priorities.
1421 *
1422 * @li Reentrant: no
1423 * @li IRQ safe:  no
1424 *
1425 * @return - IX_SUCCESS/IX_FAIL
1426 */
1427PUBLIC IX_STATUS
1428ixOsalSingleShotTimerSchedule (IxOsalTimer * timer,
1429                               UINT32 period,
1430                               UINT32 priority,
1431                               IxOsalVoidFnVoidPtr callback, void *param);
1432
1433/** 
1434 * @ingroup IxOsal
1435 *
1436 * @brief Cancels a running timer
1437 *
1438 * @param timer - handle of the timer object
1439 *
1440 * Cancels a single-shot or repeating timer.
1441 *
1442 * @li Reentrant: no
1443 * @li IRQ safe:  yes
1444 *
1445 * @return - IX_SUCCESS/IX_FAIL
1446 */
1447PUBLIC IX_STATUS ixOsalTimerCancel (IxOsalTimer * timer);
1448
1449/** 
1450 * @ingroup IxOsal
1451 *
1452 * @brief displays all the running timers
1453 *
1454 * Displays a list with all the running timers and their parameters (handle,
1455 * period, type, priority, callback and user parameter)
1456 *
1457 * @li Reentrant: no
1458 * @li IRQ safe:  no
1459 *
1460 * @return - none
1461 */
1462PUBLIC void ixOsalTimersShow (void);
1463
1464
1465/* ============================= Version  ==============================
1466 * 
1467 */
1468
1469/**
1470 * @ingroup IxOsal
1471 *
1472 * @brief provides the name of the Operating System running
1473 *
1474 * @param osName - Pointer to a NULL-terminated string of characters
1475 * that holds the name of the OS running.
1476 * This is both an input and an ouput parameter
1477 * @param maxSize - Input parameter that defines the maximum number of
1478 * bytes that can be stored in osName
1479 *
1480 * Returns a string of characters that describe the Operating System name
1481 *
1482 * @li Reentrant: yes
1483 * @li IRQ safe:  yes
1484 *
1485 * return - IX_SUCCESS for successful retrieval
1486 *        - IX_FAIL if (osType == NULL | maxSize =< 0)
1487 */
1488PUBLIC IX_STATUS ixOsalOsNameGet (INT8* osName, INT32 maxSize);
1489
1490/**
1491 * @ingroup IxOsal
1492 *
1493 * @brief provides the version of the Operating System running
1494 *
1495 * @param osVersion - Pointer to a NULL terminated string of characters
1496 * that holds the version of the OS running.
1497 * This is both an input and an ouput parameter
1498 * @param maxSize - Input parameter that defines the maximum number of
1499 * bytes that can be stored in osVersion
1500 *
1501 * Returns a string of characters that describe the Operating System's version
1502 *
1503 * @li Reentrant: yes
1504 * @li IRQ safe:  yes
1505 *
1506 * return - IX_SUCCESS for successful retrieval
1507 *        - IX_FAIL if (osVersion == NULL | maxSize =< 0)
1508 */
1509PUBLIC IX_STATUS ixOsalOsVersionGet(INT8* osVersion, INT32 maxSize);
1510
1511
1512
1513/**
1514 * @} IxOsal
1515 */
1516
1517#endif /* IxOsal_H */
1518