Merge tag 'sound-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
[pandora-kernel.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        max_stream_buffering;
86         int             nb_queued_frames;
87         int             nb_queued_isoc_frames;
88         struct list_head *tx_pool;
89         int             tx_pool_count;
90         spinlock_t      tx_frame_lock;
91         struct list_head *last_sent_frame;
92         struct list_head tx_queue;
93         struct list_head farewell_list;
94         spinlock_t      stream_lock;
95         struct list_head stream_list;
96         struct net_device *net_dev;
97 };
98
99 #define OZ_MAX_QUEUED_FRAMES    4
100
101 struct oz_pd *oz_pd_alloc(u8 *mac_addr);
102 void oz_pd_destroy(struct oz_pd *pd);
103 void oz_pd_get(struct oz_pd *pd);
104 void oz_pd_put(struct oz_pd *pd);
105 void oz_pd_set_state(struct oz_pd *pd, unsigned state);
106 void oz_pd_indicate_farewells(struct oz_pd *pd);
107 int oz_pd_sleep(struct oz_pd *pd);
108 void oz_pd_stop(struct oz_pd *pd);
109 void oz_pd_heartbeat(struct oz_pd *pd, u16 apps);
110 int oz_services_start(struct oz_pd *pd, u16 apps, int resume);
111 void oz_services_stop(struct oz_pd *pd, u16 apps, int pause);
112 int oz_prepare_frame(struct oz_pd *pd, int empty);
113 void oz_send_queued_frames(struct oz_pd *pd, int backlog);
114 void oz_retire_tx_frames(struct oz_pd *pd, u8 lpn);
115 int oz_isoc_stream_create(struct oz_pd *pd, u8 ep_num);
116 int oz_isoc_stream_delete(struct oz_pd *pd, u8 ep_num);
117 int oz_send_isoc_unit(struct oz_pd *pd, u8 ep_num, u8 *data, int len);
118 void oz_handle_app_elt(struct oz_pd *pd, u8 app_id, struct oz_elt *elt);
119 void oz_apps_init(void);
120 void oz_apps_term(void);
121
122 #endif /* Sentry */