| Index: chromeos/drivers/ath6kl/include/aggr_recv_api.h
|
| diff --git a/chromeos/drivers/ath6kl/include/aggr_recv_api.h b/chromeos/drivers/ath6kl/include/aggr_recv_api.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..185354eddcde73f2550a192b1d98a07a86038079
|
| --- /dev/null
|
| +++ b/chromeos/drivers/ath6kl/include/aggr_recv_api.h
|
| @@ -0,0 +1,136 @@
|
| +/*
|
| + *
|
| + * Copyright (c) 2004-2007 Atheros Communications Inc.
|
| + * All rights reserved.
|
| + *
|
| + *
|
| +// This program is free software; you can redistribute it and/or modify
|
| +// it under the terms of the GNU General Public License version 2 as
|
| +// published by the Free Software Foundation;
|
| +//
|
| +// Software distributed under the License is distributed on an "AS
|
| +// IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
| +// implied. See the License for the specific language governing
|
| +// rights and limitations under the License.
|
| +//
|
| +//
|
| + *
|
| + */
|
| +
|
| +#ifndef __AGGR_RECV_API_H__
|
| +#define __AGGR_RECV_API_H__
|
| +
|
| +#ifdef __cplusplus
|
| +extern "C" {
|
| +#endif
|
| +
|
| +typedef void (* RX_CALLBACK)(void * dev, void *osbuf);
|
| +
|
| +typedef void (* ALLOC_NETBUFS)(A_NETBUF_QUEUE_T *q, A_UINT16 num);
|
| +
|
| +/*
|
| + * aggr_init:
|
| + * Initialises the data structures, allocates data queues and
|
| + * os buffers. Netbuf allocator is the input param, used by the
|
| + * aggr module for allocation of NETBUFs from driver context.
|
| + * These NETBUFs are used for AMSDU processing.
|
| + * Returns the context for the aggr module.
|
| + */
|
| +void *
|
| +aggr_init(ALLOC_NETBUFS netbuf_allocator);
|
| +
|
| +
|
| +/*
|
| + * aggr_register_rx_dispatcher:
|
| + * Registers OS call back function to deliver the
|
| + * frames to OS. This is generally the topmost layer of
|
| + * the driver context, after which the frames go to
|
| + * IP stack via the call back function.
|
| + * This dispatcher is active only when aggregation is ON.
|
| + */
|
| +void
|
| +aggr_register_rx_dispatcher(void *cntxt, void * dev, RX_CALLBACK fn);
|
| +
|
| +
|
| +/*
|
| + * aggr_process_bar:
|
| + * When target receives BAR, it communicates to host driver
|
| + * for modifying window parameters. Target indicates this via the
|
| + * event: WMI_ADDBA_REQ_EVENTID. Host will dequeue all frames
|
| + * up to the indicated sequence number.
|
| + */
|
| +void
|
| +aggr_process_bar(void *cntxt, A_UINT8 tid, A_UINT16 seq_no);
|
| +
|
| +
|
| +/*
|
| + * aggr_recv_addba_req_evt:
|
| + * This event is to initiate/modify the receive side window.
|
| + * Target will send WMI_ADDBA_REQ_EVENTID event to host - to setup
|
| + * recv re-ordering queues. Target will negotiate ADDBA with peer,
|
| + * and indicate via this event after succesfully completing the
|
| + * negotiation. This happens in two situations:
|
| + * 1. Initial setup of aggregation
|
| + * 2. Renegotiation of current recv window.
|
| + * Window size for re-ordering is limited by target buffer
|
| + * space, which is reflected in win_sz.
|
| + * (Re)Start the periodic timer to deliver long standing frames,
|
| + * in hold_q to OS.
|
| + */
|
| +void
|
| +aggr_recv_addba_req_evt(void * cntxt, A_UINT8 tid, A_UINT16 seq_no, A_UINT8 win_sz);
|
| +
|
| +
|
| +/*
|
| + * aggr_recv_delba_req_evt:
|
| + * Target indicates deletion of a BA window for a tid via the
|
| + * WMI_DELBA_EVENTID. Host would deliver all the frames in the
|
| + * hold_q, reset tid config and disable the periodic timer, if
|
| + * aggr is not enabled on any tid.
|
| + */
|
| +void
|
| +aggr_recv_delba_req_evt(void * cntxt, A_UINT8 tid);
|
| +
|
| +
|
| +
|
| +/*
|
| + * aggr_process_recv_frm:
|
| + * Called only for data frames. When aggr is ON for a tid, the buffer
|
| + * is always consumed, and osbuf would be NULL. For a non-aggr case,
|
| + * osbuf is not modified.
|
| + * AMSDU frames are consumed and are later freed. They are sliced and
|
| + * diced to individual frames and dispatched to stack.
|
| + * After consuming a osbuf(when aggr is ON), a previously registered
|
| + * callback may be called to deliver frames in order.
|
| + */
|
| +void
|
| +aggr_process_recv_frm(void *cntxt, A_UINT8 tid, A_UINT16 seq_no, A_BOOL is_amsdu, void **osbuf);
|
| +
|
| +
|
| +/*
|
| + * aggr_module_destroy:
|
| + * Frees up all the queues and frames in them. Releases the cntxt to OS.
|
| + */
|
| +void
|
| +aggr_module_destroy(void *cntxt);
|
| +
|
| +/*
|
| + * Dumps the aggregation stats
|
| + */
|
| +void
|
| +aggr_dump_stats(void *cntxt, PACKET_LOG **log_buf);
|
| +
|
| +/*
|
| + * aggr_reset_state -- Called when it is deemed necessary to clear the aggregate
|
| + * hold Q state. Examples include when a Connect event or disconnect event is
|
| + * received.
|
| + */
|
| +void
|
| +aggr_reset_state(void *cntxt);
|
| +
|
| +
|
| +#ifdef __cplusplus
|
| +}
|
| +#endif
|
| +
|
| +#endif /*__AGGR_RECV_API_H__ */
|
|
|