00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef IRTTP_H
00027 #define IRTTP_H
00028
00029 #include <linux/types.h>
00030 #include <linux/skbuff.h>
00031 #include <asm/spinlock.h>
00032
00033 #include <net/irda/irda.h>
00034 #include <net/irda/irlmp.h>
00035 #include <net/irda/qos.h>
00036 #include <net/irda/irqueue.h>
00037
00038 #define TTP_MAX_CONNECTIONS LM_MAX_CONNECTIONS
00039 #define TTP_HEADER 1
00040 #define TTP_MAX_HEADER (TTP_HEADER + LMP_MAX_HEADER)
00041 #define TTP_SAR_HEADER 5
00042 #define TTP_PARAMETERS 0x80
00043 #define TTP_MORE 0x80
00044
00045 #define DEFAULT_INITIAL_CREDIT 14
00046
00047 #define TTP_LOW_THRESHOLD 4
00048 #define TTP_HIGH_THRESHOLD 10
00049 #define TTP_MAX_QUEUE 14
00050
00051
00052 #define P_NORMAL 0
00053 #define P_HIGH 1
00054
00055 #define TTP_SAR_DISABLE 0
00056 #define TTP_SAR_UNBOUND 0xffffffff
00057
00058
00059 #define TTP_MAX_SDU_SIZE 0x01
00060
00061
00062
00063
00064
00065 struct tsap_cb {
00066 queue_t q;
00067 magic_t magic;
00068
00069 __u8 stsap_sel;
00070 __u8 dtsap_sel;
00071
00072 struct lsap_cb *lsap;
00073
00074 __u8 connected;
00075
00076 __u8 initial_credit;
00077
00078 int avail_credit;
00079 int remote_credit;
00080 int send_credit;
00081
00082 struct sk_buff_head tx_queue;
00083 struct sk_buff_head rx_queue;
00084 struct sk_buff_head rx_fragments;
00085 int tx_queue_lock;
00086 int rx_queue_lock;
00087 spinlock_t lock;
00088
00089 notify_t notify;
00090
00091 struct net_device_stats stats;
00092 struct timer_list todo_timer;
00093
00094 __u32 max_seg_size;
00095 __u8 max_header_size;
00096
00097 int rx_sdu_busy;
00098 __u32 rx_sdu_size;
00099 __u32 rx_max_sdu_size;
00100
00101 int tx_sdu_busy;
00102 __u32 tx_max_sdu_size;
00103
00104 int close_pend;
00105 int disconnect_pend;
00106 struct sk_buff *disconnect_skb;
00107 };
00108
00109 struct irttp_cb {
00110 magic_t magic;
00111 hashbin_t *tsaps;
00112 };
00113
00114 int irttp_init(void);
00115 void irttp_cleanup(void);
00116
00117 struct tsap_cb *irttp_open_tsap(__u8 stsap_sel, int credit, notify_t *notify);
00118 int irttp_close_tsap(struct tsap_cb *self);
00119
00120 int irttp_data_request(struct tsap_cb *self, struct sk_buff *skb);
00121 int irttp_udata_request(struct tsap_cb *self, struct sk_buff *skb);
00122
00123 int irttp_connect_request(struct tsap_cb *self, __u8 dtsap_sel,
00124 __u32 saddr, __u32 daddr,
00125 struct qos_info *qos, __u32 max_sdu_size,
00126 struct sk_buff *userdata);
00127 int irttp_connect_response(struct tsap_cb *self, __u32 max_sdu_size,
00128 struct sk_buff *userdata);
00129 int irttp_disconnect_request(struct tsap_cb *self, struct sk_buff *skb,
00130 int priority);
00131 void irttp_flow_request(struct tsap_cb *self, LOCAL_FLOW flow);
00132 struct tsap_cb *irttp_dup(struct tsap_cb *self, void *instance);
00133
00134 static __inline __u32 irttp_get_saddr(struct tsap_cb *self)
00135 {
00136 return irlmp_get_saddr(self->lsap);
00137 }
00138
00139 static __inline __u32 irttp_get_daddr(struct tsap_cb *self)
00140 {
00141 return irlmp_get_daddr(self->lsap);
00142 }
00143
00144 static __inline __u32 irttp_get_max_seg_size(struct tsap_cb *self)
00145 {
00146 return self->max_seg_size;
00147 }
00148
00149 extern struct irttp_cb *irttp;
00150
00151 #endif