⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irttp.h

📁 sparc硬件平台上的红外协议
💻 H
字号:
/**********************************************************************                * Filename:      irttp.h* Version:       1.0* Description:   Tiny Transport Protocol (TTP) definitions* Status:        Experimental.* Author:        Dag Brattli <dagb@cs.uit.no>* Created at:    Sun Aug 31 20:14:31 1997* Modified at:   Sun Dec 12 13:09:07 1999* Modified by:   Dag Brattli <dagb@cs.uit.no>* *     Copyright (c) 1998-1999 Dag Brattli <dagb@cs.uit.no>, *     All Rights Reserved.*     Copyright (c) 2000-2002 Jean Tourrilhes <jt@hpl.hp.com>*     *     This program is free software; you can redistribute it and/or *     modify it under the terms of the GNU General Public License as *     published by the Free Software Foundation; either version 2 of *     the License, or (at your option) any later version.**     Neither Dag Brattli nor University of Tromsø admit liability nor*     provide warranty for any of this software. This material is *     provided "AS-IS" and at no charge.*********************************************************************/#ifndef IRTTP_H#define IRTTP_H#include <sys/time.h>#include "skbuff.h"#include "../../public/pub_emmi.h"#include "irda.h"#include "irlmp.h"        /* struct lsap_cb */#include "qos.h"        /* struct qos_info */#include "irqueue.h"#define TTP_MAX_CONNECTIONS    LM_MAX_CONNECTIONS#define TTP_HEADER             1#define TTP_MAX_HEADER         (TTP_HEADER + LMP_MAX_HEADER)#define TTP_SAR_HEADER         5#define TTP_PARAMETERS         0x80#define TTP_MORE               0x80/* Transmission queue sizes *//* Worst case scenario, two window of data - Jean II */#define TTP_TX_MAX_QUEUE    14/* We need to keep at least 5 frames to make sure that we can refill* appropriately the LAP layer. LAP keeps only two buffers, and we need* to have 7 to make a full window - Jean II */#define TTP_TX_LOW_THRESHOLD    5/* Most clients are synchronous with respect to flow control, so we can* keep a low number of Tx buffers in TTP - Jean II */#define TTP_TX_HIGH_THRESHOLD    7/* Receive queue sizes *//* Minimum of credit that the peer should hold.* If the peer has less credits than 9 frames, we will explicitely send* him some credits (through irttp_give_credit() and a specific frame).* Note that when we give credits it's likely that it won't be sent in* this LAP window, but in the next one. So, we make sure that the peer* has something to send while waiting for credits (one LAP window == 7* + 1 frames while he process the credits). - Jean II */#define TTP_RX_MIN_CREDIT    8/* This is the default maximum number of credits held by the peer, so the* default maximum number of frames he can send us before needing flow* control answer from us (this may be negociated differently at TSAP setup).* We want to minimise the number of times we have to explicitely send some* credit to the peer, hoping we can piggyback it on the return data. In* particular, it doesn't make sense for us to send credit more than once* per LAP window.* Moreover, giving credits has some latency, so we need strictly more than* a LAP window, otherwise we may already have credits in our Tx queue.* But on the other hand, we don't want to keep too many Rx buffer here* before starting to flow control the other end, so make it exactly one* LAP window + 1 + MIN_CREDITS. - Jean II */#define TTP_RX_DEFAULT_CREDIT    16/* Maximum number of credits we can allow the peer to have, and therefore* maximum Rx queue size.* Note that we try to deliver packets to the higher layer every time we* receive something, so in normal mode the Rx queue will never contains* more than one or two packets. - Jean II */#define TTP_RX_MAX_CREDIT    21/* What clients should use when calling ttp_open_tsap() */#define DEFAULT_INITIAL_CREDIT    TTP_RX_DEFAULT_CREDIT/* Some priorities for disconnect requests */#define P_NORMAL    0#define P_HIGH      1#define TTP_SAR_DISABLE 0#define TTP_SAR_UNBOUND 0xffffffff/* Parameters */#define TTP_MAX_SDU_SIZE 0x01/**  This structure contains all data assosiated with one instance of a TTP *  connection.*/struct tsap_cb {    irda_queue_t q;            /* Must be first */    magic_t magic;        /* Just in case */	    __u8 stsap_sel;       /* Source TSAP */    __u8 dtsap_sel;       /* Destination TSAP */	    struct lsap_cb *lsap; /* Corresponding LSAP to this TSAP */	    __u8 connected;       /* TSAP connected */	    __u8 initial_credit;  /* Initial credit to give peer */		int avail_credit;    /* Available credit to return to peer */    int remote_credit;   /* Credit held by peer TTP entity */    int send_credit;     /* Credit held by local TTP entity */        struct sk_buff_head tx_queue; /* Frames to be transmitted */    struct sk_buff_head rx_queue; /* Received frames */    struct sk_buff_head rx_fragments;    //int tx_queue_lock;	// int rx_queue_lock;    //spinlock_t lock;	    notify_t notify;       /* Callbacks to client layer */	    struct net_device_stats stats;    struct timeval todo_timer; 	D_UINT32 todo_timerid;	    __u32 max_seg_size;     /* Max data that fit into an IrLAP frame */    __u8  max_header_size;	    int   rx_sdu_busy;     /* RxSdu.busy */    __u32 rx_sdu_size;     /* Current size of a partially received frame */    __u32 rx_max_sdu_size; /* Max receive user data size */	    int tx_sdu_busy;       /* TxSdu.busy */    __u32 tx_max_sdu_size; /* Max transmit user data size */	    int close_pend;        /* Close, but disconnect_pend */    unsigned long disconnect_pend; /* Disconnect, but still data to send */    struct sk_buff *disconnect_skb;};struct irttp_cb {    magic_t    magic;        hashbin_t *tsaps;};int  irttp_init(void);void irttp_cleanup(void);struct tsap_cb *irttp_open_tsap(__u8 stsap_sel, int credit, notify_t *notify);int irttp_close_tsap(struct tsap_cb *self);int irttp_data_request(struct tsap_cb *self, struct sk_buff *skb);int irttp_connect_request(struct tsap_cb *self, __u8 dtsap_sel, 						  __u32 saddr, __u32 daddr,						  struct qos_info *qos, __u32 max_sdu_size, 						  struct sk_buff *userdata);int irttp_connect_response(struct tsap_cb *self, __u32 max_sdu_size, 						   struct sk_buff *userdata);int irttp_disconnect_request(struct tsap_cb *self, struct sk_buff *skb,							 int priority);//void irttp_flow_request(struct tsap_cb *self, LOCAL_FLOW flow);struct tsap_cb *irttp_dup(struct tsap_cb *self, void *instance);static inline  __u32 irttp_get_saddr(struct tsap_cb *self){    return irlmp_get_saddr(self->lsap);}static inline  __u32 irttp_get_daddr(struct tsap_cb *self){    return irlmp_get_daddr(self->lsap);}static inline  __u32 irttp_get_max_seg_size(struct tsap_cb *self){    return self->max_seg_size;}#endif /* IRTTP_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -