/*****************************************************************************

            (c) Cambridge Silicon Radio Limited 2011
            All rights reserved and confidential information of CSR

            Refer to LICENSE.txt included with this source for details
            on the license terms.

*****************************************************************************/

/* Note: this is an auto-generated file. */

#ifndef CSR_WIFI_ROUTER_PRIM_H__
#define CSR_WIFI_ROUTER_PRIM_H__

#include <linux/types.h>
#include "csr_prim_defs.h"
#include "csr_sched.h"
#include "csr_wifi_common.h"
#include "csr_result.h"
#include "csr_wifi_fsm_event.h"

#ifdef __cplusplus
extern "C" {
#endif

#define CSR_WIFI_ROUTER_PRIM                                            (0x0400)

typedef CsrPrim CsrWifiRouterPrim;

typedef void (*CsrWifiRouterFrameFreeFunction)(void *frame);

/*******************************************************************************

  NAME
    CsrWifiRouterAppType

  DESCRIPTION

 VALUES
    CSR_WIFI_ROUTER_APP_TYPE_SME   -
    CSR_WIFI_ROUTER_APP_TYPE_PAL   -
    CSR_WIFI_ROUTER_APP_TYPE_NME   -
    CSR_WIFI_ROUTER_APP_TYPE_OTHER -

*******************************************************************************/
typedef u8 CsrWifiRouterAppType;
#define CSR_WIFI_ROUTER_APP_TYPE_SME     ((CsrWifiRouterAppType) 0x0)
#define CSR_WIFI_ROUTER_APP_TYPE_PAL     ((CsrWifiRouterAppType) 0x1)
#define CSR_WIFI_ROUTER_APP_TYPE_NME     ((CsrWifiRouterAppType) 0x2)
#define CSR_WIFI_ROUTER_APP_TYPE_OTHER   ((CsrWifiRouterAppType) 0x3)

/*******************************************************************************

  NAME
    CsrWifiRouterEncapsulation

  DESCRIPTION
    Indicates the type of encapsulation used for the subscription

 VALUES
    CSR_WIFI_ROUTER_ENCAPSULATION_ETHERNET
                   - Ethernet encapsulation
    CSR_WIFI_ROUTER_ENCAPSULATION_LLC_SNAP
                   - LLC/SNAP encapsulation

*******************************************************************************/
typedef u8 CsrWifiRouterEncapsulation;
#define CSR_WIFI_ROUTER_ENCAPSULATION_ETHERNET   ((CsrWifiRouterEncapsulation) 0x00)
#define CSR_WIFI_ROUTER_ENCAPSULATION_LLC_SNAP   ((CsrWifiRouterEncapsulation) 0x01)

/*******************************************************************************

  NAME
    CsrWifiRouterOui

  DESCRIPTION

 VALUES
    CSR_WIFI_ROUTER_OUI_RFC_1042 -
    CSR_WIFI_ROUTER_OUI_BT       -

*******************************************************************************/
typedef u32 CsrWifiRouterOui;
#define CSR_WIFI_ROUTER_OUI_RFC_1042   ((CsrWifiRouterOui) 0x000000)
#define CSR_WIFI_ROUTER_OUI_BT         ((CsrWifiRouterOui) 0x001958)

/*******************************************************************************

  NAME
    CsrWifiRouterPriority

  DESCRIPTION
    As defined in the IEEE 802.11 standards

 VALUES
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP0
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP1
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP2
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP3
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP4
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP5
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP6
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_QOS_UP7
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_CONTENTION
                   - See IEEE 802.11 Standard
    CSR_WIFI_ROUTER_PRIORITY_MANAGEMENT
                   - See IEEE 802.11 Standard

*******************************************************************************/
typedef u16 CsrWifiRouterPriority;
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP0      ((CsrWifiRouterPriority) 0x0000)
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP1      ((CsrWifiRouterPriority) 0x0001)
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP2      ((CsrWifiRouterPriority) 0x0002)
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP3      ((CsrWifiRouterPriority) 0x0003)
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP4      ((CsrWifiRouterPriority) 0x0004)
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP5      ((CsrWifiRouterPriority) 0x0005)
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP6      ((CsrWifiRouterPriority) 0x0006)
#define CSR_WIFI_ROUTER_PRIORITY_QOS_UP7      ((CsrWifiRouterPriority) 0x0007)
#define CSR_WIFI_ROUTER_PRIORITY_CONTENTION   ((CsrWifiRouterPriority) 0x8000)
#define CSR_WIFI_ROUTER_PRIORITY_MANAGEMENT   ((CsrWifiRouterPriority) 0x8010)


/* Downstream */
#define CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST            (0x0000)

#define CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_REQ           ((CsrWifiRouterPrim) (0x0000 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_REQ         ((CsrWifiRouterPrim) (0x0001 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_ROUTER_MA_PACKET_REQ                     ((CsrWifiRouterPrim) (0x0002 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_ROUTER_MA_PACKET_RES                     ((CsrWifiRouterPrim) (0x0003 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_ROUTER_MA_PACKET_CANCEL_REQ              ((CsrWifiRouterPrim) (0x0004 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST))


#define CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_HIGHEST           (0x0004 + CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST)

/* Upstream */
#define CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST              (0x0000 + CSR_PRIM_UPSTREAM)

#define CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_CFM           ((CsrWifiRouterPrim)(0x0000 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_CFM         ((CsrWifiRouterPrim)(0x0001 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_ROUTER_MA_PACKET_CFM                     ((CsrWifiRouterPrim)(0x0002 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_ROUTER_MA_PACKET_IND                     ((CsrWifiRouterPrim)(0x0003 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST))

#define CSR_WIFI_ROUTER_PRIM_UPSTREAM_HIGHEST             (0x0003 + CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST)

#define CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT             (CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_LOWEST)
#define CSR_WIFI_ROUTER_PRIM_UPSTREAM_COUNT               (CSR_WIFI_ROUTER_PRIM_UPSTREAM_HIGHEST   + 1 - CSR_WIFI_ROUTER_PRIM_UPSTREAM_LOWEST)

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketSubscribeReq

  DESCRIPTION
    A task can use this primitive to subscribe for a particular OUI/protocol
    and transmit and receive frames matching the subscription.
    NOTE: Multiple subscriptions for a given protocol and OUI will result in
    the first subscription receiving the data and not the subsequent
    subscriptions.

  MEMBERS
    common        - Common header for use with the CsrWifiFsm Module
    interfaceTag  - Interface Identifier; unique identifier of an interface
    encapsulation - Specifies the encapsulation type, which will be used for the
                    subscription
    protocol      - Together with the OUI, specifies the protocol, which a task
                    wants to subscribe to
    oui           - Specifies the OUI for the protocol, which a task wants to
                    subscribe to

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent            common;
    u16                  interfaceTag;
    CsrWifiRouterEncapsulation encapsulation;
    u16                  protocol;
    u32                  oui;
} CsrWifiRouterMaPacketSubscribeReq;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketUnsubscribeReq

  DESCRIPTION
    A task sends this primitive to unsubscribe a subscription

  MEMBERS
    common             - Common header for use with the CsrWifiFsm Module
    interfaceTag       - Interface Identifier; unique identifier of an interface
    subscriptionHandle - The handle of the subscription

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
    u8        subscriptionHandle;
} CsrWifiRouterMaPacketUnsubscribeReq;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketReq

  DESCRIPTION
    A task sends this primitive to transmit a frame.

  MEMBERS
    common             - Common header for use with the CsrWifiFsm Module
    interfaceTag       - Interface Identifier; unique identifier of an interface
    subscriptionHandle - The handle of the subscription
    frameLength        - Length of the frame to be sent in bytes
    frame              - Pointer to the frame to be sent
    freeFunction       - Pointer to function to be used to free the frame
    priority           - Priority of the frame, which should be sent
    hostTag            - An application shall set the bits b31..b28 using one of
                         the CSR_WIFI_ROUTER_APP_TYPE_* masks. Bits b0..b27 can
                         be used by the requestor without any restrictions, but
                         the hostTag shall be unique so the hostTag for
                         CSR_WIFI_ROUTER_APP _TYPE_OTHER should be constructured
                         in the following way [ CSR_WIFI_ROUTER_APP_TYPE_OTHER
                         (4 bits) | SubscriptionHandle (8 bits) | Sequence no.
                         (20 bits) ]. If the hostTag is not unique, the
                         behaviour of the system is unpredicatable with respect
                         to data/management frame transfer.
    cfmRequested       - Indicates if the requestor needs a confirm for packet
                         requests sent under this subscription. If set to TRUE,
                         the router will send a confirm, else it will not send
                         any confirm

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent                common;
    u16                      interfaceTag;
    u8                       subscriptionHandle;
    u16                      frameLength;
    u8                      *frame;
    CsrWifiRouterFrameFreeFunction freeFunction;
    CsrWifiRouterPriority          priority;
    u32                      hostTag;
    u8                        cfmRequested;
} CsrWifiRouterMaPacketReq;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketRes

  DESCRIPTION
    A task send this primitive to confirm the reception of the received
    frame.

  MEMBERS
    common             - Common header for use with the CsrWifiFsm Module
    interfaceTag       - Interface Identifier; unique identifier of an interface
    subscriptionHandle - The handle of the subscription
    result             - Status of the operation

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
    u8        subscriptionHandle;
    CsrResult       result;
} CsrWifiRouterMaPacketRes;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketCancelReq

  DESCRIPTION
    This primitive is used to request cancellation of a previously send
    CsrWifiRouterMaPacketReq.
    The frame may already have been transmitted so there is no guarantees
    that the CsrWifiRouterMaPacketCancelReq actually cancels the transmission
    of the frame in question.
    If the cancellation fails, the Router will send, if required,
    CsrWifiRouterMaPacketCfm.
    If the cancellation succeeds, the Router will not send
    CsrWifiRouterMaPacketCfm.

  MEMBERS
    common         - Common header for use with the CsrWifiFsm Module
    interfaceTag   - Interface Identifier; unique identifier of an interface
    hostTag        - The hostTag for the frame, which should be cancelled.
    priority       - Priority of the frame, which should be cancelled
    peerMacAddress - Destination MAC address of the frame, which should be
                     cancelled

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent       common;
    u16             interfaceTag;
    u32             hostTag;
    CsrWifiRouterPriority priority;
    CsrWifiMacAddress     peerMacAddress;
} CsrWifiRouterMaPacketCancelReq;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketSubscribeCfm

  DESCRIPTION
    The router sends this primitive to confirm the result of the
    subscription.

  MEMBERS
    common             - Common header for use with the CsrWifiFsm Module
    interfaceTag       - Interface Identifier; unique identifier of an interface
    subscriptionHandle - Handle to the subscription
                         This handle must be used in all subsequent requests
    status             - Status of the operation
    allocOffset        - Size of the offset for the frames of the subscription

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
    u8        subscriptionHandle;
    CsrResult       status;
    u16       allocOffset;
} CsrWifiRouterMaPacketSubscribeCfm;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketUnsubscribeCfm

  DESCRIPTION
    The router sends this primitive to confirm the result of the
    unsubscription.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface
    status       - Status of the operation

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
    CsrResult       status;
} CsrWifiRouterMaPacketUnsubscribeCfm;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketCfm

  DESCRIPTION
    The router sends the primitive to confirm the result of the transmission
    of the packet of the corresponding CSR_WIFI_ROUTER MA_PACKET_REQ request.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface
    result       - Status of the operation
    hostTag      - The hostTrag will match the hostTag sent in the request.
    rate         - Transmission/Reception rate

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
    CsrResult       result;
    u32       hostTag;
    u16       rate;
} CsrWifiRouterMaPacketCfm;

/*******************************************************************************

  NAME
    CsrWifiRouterMaPacketInd

  DESCRIPTION
    The router sends the primitive to a subscribed task when it receives a
    frame matching the subscription.

  MEMBERS
    common             - Common header for use with the CsrWifiFsm Module
    interfaceTag       - Interface Identifier; unique identifier of an interface
    subscriptionHandle - The handle of the subscription
    result             - Status of the operation
    frameLength        - Length of the received frame in bytes
    frame              - Pointer to the received frame
    freeFunction       - Pointer to function to be used to free the frame
    rssi               - Received signal strength indication in dBm
    snr                - Signal to Noise Ratio
    rate               - Transmission/Reception rate

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent                common;
    u16                      interfaceTag;
    u8                       subscriptionHandle;
    CsrResult                      result;
    u16                      frameLength;
    u8                      *frame;
    CsrWifiRouterFrameFreeFunction freeFunction;
    s16                       rssi;
    s16                       snr;
    u16                      rate;
} CsrWifiRouterMaPacketInd;


#ifdef __cplusplus
}
#endif

#endif /* CSR_WIFI_ROUTER_PRIM_H__ */

