123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /* -----------------------------------------------------------------------------
- * Copyright (c) 2011 Ozmo Inc
- * Released under the GNU General Public License Version 2 (GPLv2).
- * -----------------------------------------------------------------------------
- */
- #ifndef _OZPD_H_
- #define _OZPD_H_
- #include <linux/interrupt.h>
- #include "ozeltbuf.h"
- /* PD state
- */
- #define OZ_PD_S_IDLE 0x1
- #define OZ_PD_S_CONNECTED 0x2
- #define OZ_PD_S_SLEEP 0x4
- #define OZ_PD_S_STOPPED 0x8
- /* Timer event types.
- */
- #define OZ_TIMER_TOUT 1
- #define OZ_TIMER_HEARTBEAT 2
- #define OZ_TIMER_STOP 3
- /*
- *External spinlock variable
- */
- extern spinlock_t g_polling_lock;
- /* Data structure that hold information on a frame for transmisson. This is
- * built when the frame is first transmitted and is used to rebuild the frame
- * if a re-transmission is required.
- */
- struct oz_tx_frame {
- struct list_head link;
- struct list_head elt_list;
- struct oz_hdr hdr;
- struct sk_buff *skb;
- int total_size;
- };
- struct oz_isoc_stream {
- struct list_head link;
- u8 ep_num;
- u8 frame_num;
- u8 nb_units;
- int size;
- struct sk_buff *skb;
- struct oz_hdr *oz_hdr;
- };
- struct oz_farewell {
- struct list_head link;
- u8 ep_num;
- u8 index;
- u8 len;
- u8 report[0];
- };
- /* Data structure that holds information on a specific peripheral device (PD).
- */
- struct oz_pd {
- struct list_head link;
- atomic_t ref_count;
- u8 mac_addr[ETH_ALEN];
- unsigned state;
- unsigned state_flags;
- unsigned send_flags;
- u16 total_apps;
- u16 paused_apps;
- u8 session_id;
- u8 param_rsp_status;
- u8 pd_info;
- u8 isoc_sent;
- u32 last_rx_pkt_num;
- u32 last_tx_pkt_num;
- struct timespec last_rx_timestamp;
- u32 trigger_pkt_num;
- unsigned long pulse_time;
- unsigned long pulse_period;
- unsigned long presleep;
- unsigned long keep_alive;
- struct oz_elt_buf elt_buff;
- void *app_ctx[OZ_NB_APPS];
- spinlock_t app_lock[OZ_NB_APPS];
- int max_tx_size;
- u8 mode;
- u8 ms_per_isoc;
- unsigned isoc_latency;
- unsigned max_stream_buffering;
- int nb_queued_frames;
- int nb_queued_isoc_frames;
- spinlock_t tx_frame_lock;
- struct list_head *last_sent_frame;
- struct list_head tx_queue;
- struct list_head farewell_list;
- spinlock_t stream_lock;
- struct list_head stream_list;
- struct net_device *net_dev;
- struct hrtimer heartbeat;
- struct hrtimer timeout;
- u8 timeout_type;
- struct tasklet_struct heartbeat_tasklet;
- struct tasklet_struct timeout_tasklet;
- struct work_struct workitem;
- };
- #define OZ_MAX_QUEUED_FRAMES 4
- struct oz_pd *oz_pd_alloc(const u8 *mac_addr);
- void oz_pd_destroy(struct oz_pd *pd);
- void oz_pd_get(struct oz_pd *pd);
- void oz_pd_put(struct oz_pd *pd);
- void oz_pd_set_state(struct oz_pd *pd, unsigned state);
- void oz_pd_indicate_farewells(struct oz_pd *pd);
- int oz_pd_sleep(struct oz_pd *pd);
- void oz_pd_stop(struct oz_pd *pd);
- void oz_pd_heartbeat(struct oz_pd *pd, u16 apps);
- int oz_services_start(struct oz_pd *pd, u16 apps, int resume);
- void oz_services_stop(struct oz_pd *pd, u16 apps, int pause);
- int oz_prepare_frame(struct oz_pd *pd, int empty);
- void oz_send_queued_frames(struct oz_pd *pd, int backlog);
- void oz_retire_tx_frames(struct oz_pd *pd, u8 lpn);
- int oz_isoc_stream_create(struct oz_pd *pd, u8 ep_num);
- int oz_isoc_stream_delete(struct oz_pd *pd, u8 ep_num);
- int oz_send_isoc_unit(struct oz_pd *pd, u8 ep_num, const u8 *data, int len);
- void oz_handle_app_elt(struct oz_pd *pd, u8 app_id, struct oz_elt *elt);
- void oz_apps_init(void);
- void oz_apps_term(void);
- extern struct kmem_cache *oz_elt_info_cache;
- extern struct kmem_cache *oz_tx_frame_cache;
- #endif /* Sentry */
|