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