/*
 * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * This file was originally distributed by Qualcomm Atheros, Inc.
 * under proprietary terms before Copyright ownership was assigned
 * to the Linux Foundation.
 */

/*
 *
 * This file sysDef.h contains the common definitions used to bring up
 * Sirius system.
 * Author:      V. K. Kandarpa
 * Date:        04/13/2002
 * History:-
 * Date         Modified by    Modification Information
 * --------------------------------------------------------------------
 */

#ifndef __SYSDEF_H
#define __SYSDEF_H

/// Sirius system level definitions
// NOTE: Do not program system timer tick duration to less than 1msec

/// System timer tick duration in nanoseconds
#define SYS_TICK_DUR_NS     10000000    // 10ms
#define SYS_TICK_TO_MICRO_SECOND   10000

/// System timer tick duration in milliseconds
#define SYS_TICK_DUR_MS     (SYS_TICK_DUR_NS/1000000)

/// Clocks in a millisecond
#define SYS_CLOCKS_PER_MS   120000 // 120 MHz

// In Milliseconds
#define SYS_ADD_BA_RSP_DUR   1000

/// System timer tick duration in clocks
#define SYS_TICK_DUR_CLK    (SYS_TICK_DUR_MS * SYS_CLOCKS_PER_MS)

/// Number of timer ticks in a second
#define SYS_TICKS_PER_SECOND (1000/SYS_TICK_DUR_MS)

/// Macro to convert MS to Ticks
#define SYS_MS_TO_TICKS(x)   ((x) / SYS_TICK_DUR_MS)

/// Macro to convert Seconds to Ticks
#define SYS_SEC_TO_TICKS(x)  ((x) * SYS_TICKS_PER_SECOND)

/// Macro to convert Minutes to Ticks
#define SYS_MIN_TO_TICKS(x)  (((x) * 60) * SYS_TICKS_PER_SECOND)

/// MNT task processing interval in seconds
#define SYS_MNT_INTERVAL     60

/// MS to Time Units
#define SYS_MS_TO_TU(x)      ((x * 1000) >> 10)

/// TU to MS
#define SYS_TU_TO_MS(x)      ((x << 10) / 1000)

// ---------  End of Windows & RTAI -----------

/// Message queue definitions

/// gHalMsgQ
# define SYS_HAL_Q_SIZE     200        // Holds up to 25 messages

/// gMMHhiPriorityMsgQ
# define SYS_MMH_HI_PRI_Q_SIZE      200        // Holds up to 25 messages

/// gMMHprotocolMsgQ
# define SYS_MMH_PROT_Q_SIZE     400          // Holds up to 50 messages

/// gMMHdebugMsgQ
# define SYS_MMH_DEBUG_Q_SIZE    800          // Holds up to 100 messages

/// gMAINTmsgQ
# define SYS_MNT_Q_SIZE          200          // Holds up to 25 messages

/// LIM Message Queue
# define SYS_LIM_Q_SIZE          400          // Holds up to 50 messages

/// Scheduler Message Queue
# define SYS_SCH_Q_SIZE          800          // Holds up to 25 messages

/// PMM Message Queue
# define SYS_PMM_Q_SIZE          800          // Holds up to 100 messages

/// TX Message Queue
# define SYS_TX_Q_SIZE           2048    // Holds up to 400 messages

/// RX Message Queue
# define SYS_RX_Q_SIZE           2048   // Holds up to 400 messages

/// PTT  Message Queue
# define SYS_NIM_PTT_Q_SIZE   200             // Holds up to 25 messages

/// Thread definitions
// tHAL

# define SYS_HAL_THREAD_ENTRY_FUNCTION halEntry
# define SYS_HAL_STACK_SIZE            8192
# define SYS_HAL_THREAD_PRIORITY       2

// tDPH

# define SYS_DPH_THREAD_ENTRY_FUNCTION dphEntry
# define SYS_DPH_STACK_SIZE            8192
# define SYS_DPH_THREAD_PRIORITY       15

// tBBT

# define SYS_BBT_THREAD_ENTRY_FUNCTION bbtEntry
# define SYS_BBT_STACK_SIZE            8192
# define SYS_BBT_THREAD_PRIORITY       16

// tSCH

# define SYS_SCH_STACK_SIZE            8192
# define SYS_SCH_THREAD_PRIORITY       17

// tPMM

# define SYS_PMM_STACK_SIZE            8192
# define SYS_PMM_THREAD_PRIORITY       17

// tLIM

# define SYS_LIM_THREAD_ENTRY_FUNCTION limEntry
# define SYS_LIM_STACK_SIZE            8192
# define SYS_LIM_THREAD_PRIORITY       18

// tMAINT

# define SYS_MNT_THREAD_ENTRY_FUNCTION mntEntry
# define SYS_MNT_STACK_SIZE            8192
# define SYS_MNT_THREAD_PRIORITY       25

// tMMH

# define SYS_MMH_THREAD_ENTRY_FUNCTION mmhEntry
# define SYS_MMH_STACK_SIZE            8192
# define SYS_MMH_THREAD_PRIORITY        10

// tNIM_MNT_PKT_GEN

# define SYS_NIM_PTT_THREAD_STACK_SIZE 8192
# define SYS_NIM_PTT_THREAD_PRIORITY   28

#endif // __SYSDEF_H
