linux/drivers/staging/ozwpan/ozpd.h
<<
>>
Prefs
   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(const 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, const 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