blob: 06a2214714b7abcede273bc5461c35fed2216db7 [file] [log] [blame]
/*****************************************************************************
(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_LIB_H__
#define CSR_WIFI_ROUTER_LIB_H__
#include "csr_sched.h"
#include "csr_macro.h"
#include "csr_msg_transport.h"
#include "csr_wifi_lib.h"
#include "csr_wifi_router_prim.h"
#include "csr_wifi_router_task.h"
#ifdef __cplusplus
extern "C" {
#endif
/*----------------------------------------------------------------------------*
* CsrWifiRouterFreeUpstreamMessageContents
*
* DESCRIPTION
* Free the allocated memory in a CSR_WIFI_ROUTER upstream message. Does not
* free the message itself, and can only be used for upstream messages.
*
* PARAMETERS
* Deallocates the resources in a CSR_WIFI_ROUTER upstream message
*----------------------------------------------------------------------------*/
void CsrWifiRouterFreeUpstreamMessageContents(u16 eventClass, void *message);
/*----------------------------------------------------------------------------*
* CsrWifiRouterFreeDownstreamMessageContents
*
* DESCRIPTION
* Free the allocated memory in a CSR_WIFI_ROUTER downstream message. Does not
* free the message itself, and can only be used for downstream messages.
*
* PARAMETERS
* Deallocates the resources in a CSR_WIFI_ROUTER downstream message
*----------------------------------------------------------------------------*/
void CsrWifiRouterFreeDownstreamMessageContents(u16 eventClass, void *message);
/*----------------------------------------------------------------------------*
* Enum to string functions
*----------------------------------------------------------------------------*/
const char* CsrWifiRouterAppTypeToString(CsrWifiRouterAppType value);
const char* CsrWifiRouterEncapsulationToString(CsrWifiRouterEncapsulation value);
const char* CsrWifiRouterOuiToString(CsrWifiRouterOui value);
const char* CsrWifiRouterPriorityToString(CsrWifiRouterPriority value);
/*----------------------------------------------------------------------------*
* CsrPrim Type toString function.
* Converts a message type to the String name of the Message
*----------------------------------------------------------------------------*/
const char* CsrWifiRouterPrimTypeToString(CsrPrim msgType);
/*----------------------------------------------------------------------------*
* Lookup arrays for PrimType name Strings
*----------------------------------------------------------------------------*/
extern const char *CsrWifiRouterUpstreamPrimNames[CSR_WIFI_ROUTER_PRIM_UPSTREAM_COUNT];
extern const char *CsrWifiRouterDownstreamPrimNames[CSR_WIFI_ROUTER_PRIM_DOWNSTREAM_COUNT];
/*******************************************************************************
NAME
CsrWifiRouterMaPacketCancelReqSend
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.
PARAMETERS
queue - Message Source Task Queue (Cfm's will be sent to this Queue)
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
*******************************************************************************/
#define CsrWifiRouterMaPacketCancelReqCreate(msg__, dst__, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketCancelReq), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_CANCEL_REQ, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->hostTag = (hostTag__); \
msg__->priority = (priority__); \
msg__->peerMacAddress = (peerMacAddress__);
#define CsrWifiRouterMaPacketCancelReqSendTo(dst__, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__) \
{ \
CsrWifiRouterMaPacketCancelReq *msg__; \
CsrWifiRouterMaPacketCancelReqCreate(msg__, dst__, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__); \
CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketCancelReqSend(src__, interfaceTag__, hostTag__, priority__, peerMacAddress__) \
CsrWifiRouterMaPacketCancelReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, hostTag__, priority__, peerMacAddress__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketReqSend
DESCRIPTION
A task sends this primitive to transmit a frame.
PARAMETERS
queue - Message Source Task Queue (Cfm's will be sent to this Queue)
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
*******************************************************************************/
#define CsrWifiRouterMaPacketReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketReq), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_REQ, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->subscriptionHandle = (subscriptionHandle__); \
msg__->frameLength = (frameLength__); \
msg__->frame = (frame__); \
msg__->freeFunction = (freeFunction__); \
msg__->priority = (priority__); \
msg__->hostTag = (hostTag__); \
msg__->cfmRequested = (cfmRequested__);
#define CsrWifiRouterMaPacketReqSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__) \
{ \
CsrWifiRouterMaPacketReq *msg__; \
CsrWifiRouterMaPacketReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__); \
CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketReqSend(src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__) \
CsrWifiRouterMaPacketReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, subscriptionHandle__, frameLength__, frame__, freeFunction__, priority__, hostTag__, cfmRequested__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketIndSend
DESCRIPTION
The router sends the primitive to a subscribed task when it receives a
frame matching the subscription.
PARAMETERS
queue - Destination Task Queue
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
*******************************************************************************/
#define CsrWifiRouterMaPacketIndCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketInd), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_IND, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->subscriptionHandle = (subscriptionHandle__); \
msg__->result = (result__); \
msg__->frameLength = (frameLength__); \
msg__->frame = (frame__); \
msg__->freeFunction = (freeFunction__); \
msg__->rssi = (rssi__); \
msg__->snr = (snr__); \
msg__->rate = (rate__);
#define CsrWifiRouterMaPacketIndSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__) \
{ \
CsrWifiRouterMaPacketInd *msg__; \
CsrWifiRouterMaPacketIndCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__); \
CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketIndSend(dst__, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__) \
CsrWifiRouterMaPacketIndSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, subscriptionHandle__, result__, frameLength__, frame__, freeFunction__, rssi__, snr__, rate__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketResSend
DESCRIPTION
A task send this primitive to confirm the reception of the received
frame.
PARAMETERS
interfaceTag - Interface Identifier; unique identifier of an interface
subscriptionHandle - The handle of the subscription
result - Status of the operation
*******************************************************************************/
#define CsrWifiRouterMaPacketResCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketRes), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_RES, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->subscriptionHandle = (subscriptionHandle__); \
msg__->result = (result__);
#define CsrWifiRouterMaPacketResSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, result__) \
{ \
CsrWifiRouterMaPacketRes *msg__; \
CsrWifiRouterMaPacketResCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, result__); \
CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketResSend(src__, interfaceTag__, subscriptionHandle__, result__) \
CsrWifiRouterMaPacketResSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, subscriptionHandle__, result__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketCfmSend
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.
PARAMETERS
queue - Destination Task Queue
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
*******************************************************************************/
#define CsrWifiRouterMaPacketCfmCreate(msg__, dst__, src__, interfaceTag__, result__, hostTag__, rate__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketCfm), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_CFM, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->result = (result__); \
msg__->hostTag = (hostTag__); \
msg__->rate = (rate__);
#define CsrWifiRouterMaPacketCfmSendTo(dst__, src__, interfaceTag__, result__, hostTag__, rate__) \
{ \
CsrWifiRouterMaPacketCfm *msg__; \
CsrWifiRouterMaPacketCfmCreate(msg__, dst__, src__, interfaceTag__, result__, hostTag__, rate__); \
CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketCfmSend(dst__, interfaceTag__, result__, hostTag__, rate__) \
CsrWifiRouterMaPacketCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, result__, hostTag__, rate__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketSubscribeReqSend
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.
PARAMETERS
queue - Message Source Task Queue (Cfm's will be sent to this Queue)
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
*******************************************************************************/
#define CsrWifiRouterMaPacketSubscribeReqCreate(msg__, dst__, src__, interfaceTag__, encapsulation__, protocol__, oui__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketSubscribeReq), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_REQ, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->encapsulation = (encapsulation__); \
msg__->protocol = (protocol__); \
msg__->oui = (oui__);
#define CsrWifiRouterMaPacketSubscribeReqSendTo(dst__, src__, interfaceTag__, encapsulation__, protocol__, oui__) \
{ \
CsrWifiRouterMaPacketSubscribeReq *msg__; \
CsrWifiRouterMaPacketSubscribeReqCreate(msg__, dst__, src__, interfaceTag__, encapsulation__, protocol__, oui__); \
CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketSubscribeReqSend(src__, interfaceTag__, encapsulation__, protocol__, oui__) \
CsrWifiRouterMaPacketSubscribeReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, encapsulation__, protocol__, oui__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketSubscribeCfmSend
DESCRIPTION
The router sends this primitive to confirm the result of the
subscription.
PARAMETERS
queue - Destination Task Queue
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
*******************************************************************************/
#define CsrWifiRouterMaPacketSubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, status__, allocOffset__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketSubscribeCfm), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_SUBSCRIBE_CFM, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->subscriptionHandle = (subscriptionHandle__); \
msg__->status = (status__); \
msg__->allocOffset = (allocOffset__);
#define CsrWifiRouterMaPacketSubscribeCfmSendTo(dst__, src__, interfaceTag__, subscriptionHandle__, status__, allocOffset__) \
{ \
CsrWifiRouterMaPacketSubscribeCfm *msg__; \
CsrWifiRouterMaPacketSubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__, status__, allocOffset__); \
CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketSubscribeCfmSend(dst__, interfaceTag__, subscriptionHandle__, status__, allocOffset__) \
CsrWifiRouterMaPacketSubscribeCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, subscriptionHandle__, status__, allocOffset__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketUnsubscribeReqSend
DESCRIPTION
A task sends this primitive to unsubscribe a subscription
PARAMETERS
queue - Message Source Task Queue (Cfm's will be sent to this Queue)
interfaceTag - Interface Identifier; unique identifier of an interface
subscriptionHandle - The handle of the subscription
*******************************************************************************/
#define CsrWifiRouterMaPacketUnsubscribeReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketUnsubscribeReq), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_REQ, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->subscriptionHandle = (subscriptionHandle__);
#define CsrWifiRouterMaPacketUnsubscribeReqSendTo(dst__, src__, interfaceTag__, subscriptionHandle__) \
{ \
CsrWifiRouterMaPacketUnsubscribeReq *msg__; \
CsrWifiRouterMaPacketUnsubscribeReqCreate(msg__, dst__, src__, interfaceTag__, subscriptionHandle__); \
CsrMsgTransport(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketUnsubscribeReqSend(src__, interfaceTag__, subscriptionHandle__) \
CsrWifiRouterMaPacketUnsubscribeReqSendTo(CSR_WIFI_ROUTER_IFACEQUEUE, src__, interfaceTag__, subscriptionHandle__)
/*******************************************************************************
NAME
CsrWifiRouterMaPacketUnsubscribeCfmSend
DESCRIPTION
The router sends this primitive to confirm the result of the
unsubscription.
PARAMETERS
queue - Destination Task Queue
interfaceTag - Interface Identifier; unique identifier of an interface
status - Status of the operation
*******************************************************************************/
#define CsrWifiRouterMaPacketUnsubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, status__) \
msg__ = kmalloc(sizeof(CsrWifiRouterMaPacketUnsubscribeCfm), GFP_KERNEL); \
CsrWifiFsmEventInit(&msg__->common, CSR_WIFI_ROUTER_PRIM, CSR_WIFI_ROUTER_MA_PACKET_UNSUBSCRIBE_CFM, dst__, src__); \
msg__->interfaceTag = (interfaceTag__); \
msg__->status = (status__);
#define CsrWifiRouterMaPacketUnsubscribeCfmSendTo(dst__, src__, interfaceTag__, status__) \
{ \
CsrWifiRouterMaPacketUnsubscribeCfm *msg__; \
CsrWifiRouterMaPacketUnsubscribeCfmCreate(msg__, dst__, src__, interfaceTag__, status__); \
CsrSchedMessagePut(dst__, CSR_WIFI_ROUTER_PRIM, msg__); \
}
#define CsrWifiRouterMaPacketUnsubscribeCfmSend(dst__, interfaceTag__, status__) \
CsrWifiRouterMaPacketUnsubscribeCfmSendTo(dst__, CSR_WIFI_ROUTER_IFACEQUEUE, interfaceTag__, status__)
#ifdef __cplusplus
}
#endif
#endif /* CSR_WIFI_ROUTER_LIB_H__ */