Commit | Line | Data |
---|---|---|
bc3157dd CK |
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; | |
33e6ada1 | 32 | struct sk_buff *skb; |
bc3157dd CK |
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; | |
86d03a0f | 85 | unsigned isoc_latency; |
bc3157dd CK |
86 | unsigned max_stream_buffering; |
87 | int nb_queued_frames; | |
33e6ada1 | 88 | int nb_queued_isoc_frames; |
bc3157dd CK |
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 */ |