aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/ozwpan/ozeltbuf.h
diff options
context:
space:
mode:
authorChris Kelly <ckelly@ozmodevices.com>2012-02-20 16:11:37 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-24 12:26:51 -0500
commitbc3157dde35ac3b2ec12229edcfaca58cd7925c0 (patch)
treebcd8140d83c8f984d049bfe7725715cc035b7267 /drivers/staging/ozwpan/ozeltbuf.h
parent1619cb6f2dd9674491e5772bf37b45e03666dc10 (diff)
staging: ozwpan: Added device state support
Added support for maintaining state and data buffering for devices connected via the network. Signed-off-by: Chris Kelly <ckelly@ozmodevices.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/ozwpan/ozeltbuf.h')
-rw-r--r--drivers/staging/ozwpan/ozeltbuf.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/drivers/staging/ozwpan/ozeltbuf.h b/drivers/staging/ozwpan/ozeltbuf.h
new file mode 100644
index 00000000000..03c12f57b9b
--- /dev/null
+++ b/drivers/staging/ozwpan/ozeltbuf.h
@@ -0,0 +1,70 @@
1/* -----------------------------------------------------------------------------
2 * Copyright (c) 2011 Ozmo Inc
3 * Released under the GNU General Public License Version 2 (GPLv2).
4 * -----------------------------------------------------------------------------
5 */
6#ifndef _OZELTBUF_H
7#define _OZELTBUF_H
8
9#include "ozprotocol.h"
10
11/*-----------------------------------------------------------------------------
12 */
13struct oz_pd;
14typedef void (*oz_elt_callback_t)(struct oz_pd *pd, long context);
15
16struct oz_elt_stream {
17 struct list_head link;
18 struct list_head elt_list;
19 atomic_t ref_count;
20 unsigned buf_count;
21 unsigned max_buf_count;
22 u8 frame_number;
23 u8 id;
24};
25
26#define OZ_MAX_ELT_PAYLOAD 255
27struct oz_elt_info {
28 struct list_head link;
29 struct list_head link_order;
30 u8 flags;
31 u8 app_id;
32 oz_elt_callback_t callback;
33 long context;
34 struct oz_elt_stream *stream;
35 u8 data[sizeof(struct oz_elt) + OZ_MAX_ELT_PAYLOAD];
36 int length;
37 unsigned magic;
38};
39/* Flags values */
40#define OZ_EI_F_MARKED 0x1
41
42struct oz_elt_buf {
43 spinlock_t lock;
44 struct list_head stream_list;
45 struct list_head order_list;
46 struct list_head isoc_list;
47 struct list_head *elt_pool;
48 int free_elts;
49 int max_free_elts;
50 u8 tx_seq_num[OZ_NB_APPS];
51};
52
53int oz_elt_buf_init(struct oz_elt_buf *buf);
54void oz_elt_buf_term(struct oz_elt_buf *buf);
55struct oz_elt_info *oz_elt_info_alloc(struct oz_elt_buf *buf);
56void oz_elt_info_free(struct oz_elt_buf *buf, struct oz_elt_info *ei);
57void oz_elt_info_free_chain(struct oz_elt_buf *buf, struct list_head *list);
58int oz_elt_stream_create(struct oz_elt_buf *buf, u8 id, int max_buf_count);
59int oz_elt_stream_delete(struct oz_elt_buf *buf, u8 id);
60void oz_elt_stream_get(struct oz_elt_stream *st);
61void oz_elt_stream_put(struct oz_elt_stream *st);
62int oz_queue_elt_info(struct oz_elt_buf *buf, u8 isoc, u8 id,
63 struct oz_elt_info *ei);
64int oz_select_elts_for_tx(struct oz_elt_buf *buf, u8 isoc, unsigned *len,
65 unsigned max_len, struct list_head *list);
66int oz_are_elts_available(struct oz_elt_buf *buf);
67void oz_trim_elt_pool(struct oz_elt_buf *buf);
68
69#endif /* _OZELTBUF_H */
70