[go: nahoru, domu]

ozpd.h revision 86d03a0f4f575dda7988800a3da8d6e9f776a819
1/* -----------------------------------------------------------------------------
2 * Copyright (c) 2011 Ozmo Inc
3 * Released under the GNU General Public License Version 2 (GPLv2).
4 * -----------------------------------------------------------------------------
5 */
6#ifndef _OZPD_H_
7#define _OZPD_H_
8
9#include "ozeltbuf.h"
10
11/* PD state
12 */
13#define OZ_PD_S_IDLE		0x1
14#define OZ_PD_S_CONNECTED	0x2
15#define OZ_PD_S_SLEEP		0x4
16#define OZ_PD_S_STOPPED		0x8
17
18/* Timer event types.
19 */
20#define OZ_TIMER_TOUT		1
21#define OZ_TIMER_HEARTBEAT	2
22#define OZ_TIMER_STOP		3
23
24/* Data structure that hold information on a frame for transmisson. This is
25 * built when the frame is first transmitted and is used to rebuild the frame
26 * if a re-transmission is required.
27 */
28struct oz_tx_frame {
29	struct list_head link;
30	struct list_head elt_list;
31	struct oz_hdr hdr;
32	struct sk_buff *skb;
33	int total_size;
34};
35
36struct oz_isoc_stream {
37	struct list_head link;
38	u8 ep_num;
39	u8 frame_num;
40	u8 nb_units;
41	int size;
42	struct sk_buff *skb;
43	struct oz_hdr *oz_hdr;
44};
45
46struct oz_farewell {
47	struct list_head link;
48	u8 ep_num;
49	u8 index;
50	u8 report[1];
51	u8 len;
52};
53
54/* Data structure that holds information on a specific peripheral device (PD).
55 */
56struct oz_pd {
57	struct list_head link;
58	atomic_t	ref_count;
59	u8		mac_addr[ETH_ALEN];
60	unsigned	state;
61	unsigned	state_flags;
62	unsigned	send_flags;
63	u16		total_apps;
64	u16		paused_apps;
65	u8		session_id;
66	u8		param_rsp_status;
67	u8		pd_info;
68	u8		isoc_sent;
69	u32		last_rx_pkt_num;
70	u32		last_tx_pkt_num;
71	u32		trigger_pkt_num;
72	unsigned long	pulse_time_j;
73	unsigned long	timeout_time_j;
74	unsigned long	pulse_period_j;
75	unsigned long	presleep_j;
76	unsigned long	keep_alive_j;
77	unsigned long	last_rx_time_j;
78	struct oz_elt_buf elt_buff;
79	void		*app_ctx[OZ_APPID_MAX];
80	spinlock_t	app_lock[OZ_APPID_MAX];
81	int		max_tx_size;
82	u8		heartbeat_requested;
83	u8		mode;
84	u8		ms_per_isoc;
85	unsigned	isoc_latency;
86	unsigned	max_stream_buffering;
87	int		nb_queued_frames;
88	int		nb_queued_isoc_frames;
89	struct list_head *tx_pool;
90	int		tx_pool_count;
91	spinlock_t	tx_frame_lock;
92	struct list_head *last_sent_frame;
93	struct list_head tx_queue;
94	struct list_head farewell_list;
95	spinlock_t	stream_lock;
96	struct list_head stream_list;
97	struct net_device *net_dev;
98};
99
100#define OZ_MAX_QUEUED_FRAMES	4
101
102struct oz_pd *oz_pd_alloc(u8 *mac_addr);
103void oz_pd_destroy(struct oz_pd *pd);
104void oz_pd_get(struct oz_pd *pd);
105void oz_pd_put(struct oz_pd *pd);
106void oz_pd_set_state(struct oz_pd *pd, unsigned state);
107void oz_pd_indicate_farewells(struct oz_pd *pd);
108int oz_pd_sleep(struct oz_pd *pd);
109void oz_pd_stop(struct oz_pd *pd);
110void oz_pd_heartbeat(struct oz_pd *pd, u16 apps);
111int oz_services_start(struct oz_pd *pd, u16 apps, int resume);
112void oz_services_stop(struct oz_pd *pd, u16 apps, int pause);
113int oz_prepare_frame(struct oz_pd *pd, int empty);
114void oz_send_queued_frames(struct oz_pd *pd, int backlog);
115void oz_retire_tx_frames(struct oz_pd *pd, u8 lpn);
116int oz_isoc_stream_create(struct oz_pd *pd, u8 ep_num);
117int oz_isoc_stream_delete(struct oz_pd *pd, u8 ep_num);
118int oz_send_isoc_unit(struct oz_pd *pd, u8 ep_num, u8 *data, int len);
119void oz_handle_app_elt(struct oz_pd *pd, u8 app_id, struct oz_elt *elt);
120void oz_apps_init(void);
121void oz_apps_term(void);
122
123#endif /* Sentry */
124