Merge tag 'sound-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / ozwpan / ozpd.h
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 */
28 struct 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
36 struct 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
46 struct 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 */
56 struct 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
102 struct oz_pd *oz_pd_alloc(u8 *mac_addr);
103 void oz_pd_destroy(struct oz_pd *pd);
104 void oz_pd_get(struct oz_pd *pd);
105 void oz_pd_put(struct oz_pd *pd);
106 void oz_pd_set_state(struct oz_pd *pd, unsigned state);
107 void oz_pd_indicate_farewells(struct oz_pd *pd);
108 int oz_pd_sleep(struct oz_pd *pd);
109 void oz_pd_stop(struct oz_pd *pd);
110 void oz_pd_heartbeat(struct oz_pd *pd, u16 apps);
111 int oz_services_start(struct oz_pd *pd, u16 apps, int resume);
112 void oz_services_stop(struct oz_pd *pd, u16 apps, int pause);
113 int oz_prepare_frame(struct oz_pd *pd, int empty);
114 void oz_send_queued_frames(struct oz_pd *pd, int backlog);
115 void oz_retire_tx_frames(struct oz_pd *pd, u8 lpn);
116 int oz_isoc_stream_create(struct oz_pd *pd, u8 ep_num);
117 int oz_isoc_stream_delete(struct oz_pd *pd, u8 ep_num);
118 int oz_send_isoc_unit(struct oz_pd *pd, u8 ep_num, u8 *data, int len);
119 void oz_handle_app_elt(struct oz_pd *pd, u8 app_id, struct oz_elt *elt);
120 void oz_apps_init(void);
121 void oz_apps_term(void);
122
123 #endif /* Sentry */