/* * Copyright (c) 2013-2014 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. */ #ifndef _WDI_EVENT_H_ #define _WDI_EVENT_H_ #include "athdefs.h" #include "cdf_nbuf.h" #define WDI_EVENT_BASE 0x100 /* Event starting number */ enum WDI_EVENT { WDI_EVENT_TX_STATUS = WDI_EVENT_BASE, WDI_EVENT_RX_DESC, WDI_EVENT_RX_DESC_REMOTE, WDI_EVENT_RATE_FIND, WDI_EVENT_RATE_UPDATE, WDI_EVENT_RX_PEER_INVALID, /* End of new event items */ WDI_EVENT_LAST }; struct wdi_event_rx_peer_invalid_msg { cdf_nbuf_t msdu; struct ieee80211_frame *wh; uint8_t vdev_id; }; #define WDI_NUM_EVENTS (WDI_EVENT_LAST - WDI_EVENT_BASE) #define WDI_EVENT_NOTIFY_BASE 0x200 enum WDI_EVENT_NOTIFY { WDI_EVENT_SUB_DEALLOCATE = WDI_EVENT_NOTIFY_BASE, /* End of new notification types */ WDI_EVENT_NOTIFY_LAST }; /* Opaque event callback */ typedef void (*wdi_event_cb)(void *pdev, enum WDI_EVENT event, void *data); /* Opaque event notify */ typedef void (*wdi_event_notify)(enum WDI_EVENT_NOTIFY notify, enum WDI_EVENT event); /** * @typedef wdi_event_subscribe * @brief Used by consumers to subscribe to WDI event notifications. * @details * The event_subscribe struct includes pointers to other event_subscribe * objects. These pointers are simply to simplify the management of * lists of event subscribers. These pointers are set during the * event_sub() function, and shall not be modified except by the * WDI event management SW, until after the object's event subscription * is canceled by calling event_unsub(). */ typedef struct wdi_event_subscribe_t { wdi_event_cb callback; /* subscriber event callback structure head */ void *context; /* subscriber object that processes the event callback */ struct { /* private - the event subscriber SW shall not use this struct */ struct wdi_event_subscribe_t *next; struct wdi_event_subscribe_t *prev; } priv; } wdi_event_subscribe; #endif