Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ozpd.h
Go to the documentation of this file.
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;
31  struct oz_hdr hdr;
32  struct sk_buff *skb;
34 };
35 
37  struct list_head link;
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;
50  u8 report[1];
52 };
53 
54 /* Data structure that holds information on a specific peripheral device (PD).
55  */
56 struct oz_pd {
57  struct list_head link;
60  unsigned state;
61  unsigned state_flags;
62  unsigned send_flags;
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;
85  unsigned isoc_latency;
89  struct list_head *tx_pool;
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 */