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

            (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"

#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;

#endif /* CSR_WIFI_ROUTER_PRIM_H__ */

