summaryrefslogtreecommitdiffstats
path: root/include/net/irda/irlmp.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1999-06-13 16:29:25 +0000
committerRalf Baechle <ralf@linux-mips.org>1999-06-13 16:29:25 +0000
commitdb7d4daea91e105e3859cf461d7e53b9b77454b2 (patch)
tree9bb65b95440af09e8aca63abe56970dd3360cc57 /include/net/irda/irlmp.h
parent9c1c01ead627bdda9211c9abd5b758d6c687d8ac (diff)
Merge with Linux 2.2.8.
Diffstat (limited to 'include/net/irda/irlmp.h')
-rw-r--r--include/net/irda/irlmp.h159
1 files changed, 82 insertions, 77 deletions
diff --git a/include/net/irda/irlmp.h b/include/net/irda/irlmp.h
index a10a08fe1..31785883a 100644
--- a/include/net/irda/irlmp.h
+++ b/include/net/irda/irlmp.h
@@ -1,12 +1,12 @@
/*********************************************************************
*
* Filename: irlmp.h
- * Version: 0.3
+ * Version: 0.9
* Description: IrDA Link Management Protocol (LMP) layer
* Status: Experimental.
* Author: Dag Brattli <dagb@cs.uit.no>
* Created at: Sun Aug 17 20:54:32 1997
- * Modified at: Mon Dec 7 21:11:32 1998
+ * Modified at: Fri Apr 23 09:15:07 1999
* Modified by: Dag Brattli <dagb@cs.uit.no>
*
* Copyright (c) 1998 Dag Brattli <dagb@cs.uit.no>, All Rights Reserved.
@@ -25,20 +25,25 @@
#ifndef IRLMP_H
#define IRLMP_H
+#include <asm/param.h> /* for HZ */
+
#include <linux/config.h>
#include <linux/types.h>
-#include "irmod.h"
-#include "qos.h"
-#include "irlap.h"
-#include "irlmp_event.h"
-#include "irqueue.h"
+#include <net/irda/irda.h>
+#include <net/irda/qos.h>
+#include <net/irda/irlap.h>
+#include <net/irda/irlmp_event.h>
+#include <net/irda/irqueue.h>
+#include <net/irda/discovery.h>
/* LSAP-SEL's */
#define LSAP_MASK 0x7f
#define LSAP_IAS 0x00
#define LSAP_ANY 0xff
+#define DEV_ADDR_ANY 0xffffffff
+
/* Predefined LSAPs used by the various servers */
#define TSAP_IRLAN 0x05
#define LSAP_IRLPT 0x06
@@ -51,23 +56,7 @@
#define LM_MAX_CONNECTIONS 10
-/* Hint bit positions for first hint byte */
-#define HINT_PNP 0x01
-#define HINT_PDA 0x02
-#define HINT_COMPUTER 0x04
-#define HINT_PRINTER 0x08
-#define HINT_MODEM 0x10
-#define HINT_FAX 0x20
-#define HINT_LAN 0x40
-#define HINT_EXTENSION 0x80
-
-/* Hint bit positions for second hint byte (first extension byte) */
-#define HINT_TELEPHONY 0x01
-#define HINT_FILE_SERVER 0x02
-#define HINT_COMM 0x04
-#define HINT_MESSAGE 0x08
-#define HINT_HTTP 0x10
-#define HINT_OBEX 0x20
+#define LM_IDLE_TIMEOUT 2*HZ /* 2 seconds for now */
typedef enum {
S_PNP,
@@ -80,23 +69,27 @@ typedef enum {
S_TELEPHONY,
S_COMM,
S_OBEX,
+ S_ANY,
+ S_END,
} SERVICE;
-#define S_END 0xff
+typedef void (*DISCOVERY_CALLBACK1) (discovery_t *);
+typedef void (*DISCOVERY_CALLBACK2) (hashbin_t *);
-#define CLIENT 1
-#define SERVER 2
+typedef struct {
+ QUEUE queue; /* Must be first */
-typedef void (*DISCOVERY_CALLBACK) ( DISCOVERY*);
+ __u16 hints; /* Hint bits */
+} irlmp_service_t;
-struct irlmp_registration {
+typedef struct {
QUEUE queue; /* Must be first */
- int service; /* LAN, OBEX, COMM etc. */
- int type; /* Client or server or both */
+ __u16 hint_mask;
- DISCOVERY_CALLBACK discovery_callback;
-};
+ DISCOVERY_CALLBACK1 callback1;
+ DISCOVERY_CALLBACK2 callback2;
+} irlmp_client_t;
struct lap_cb; /* Forward decl. */
@@ -138,18 +131,15 @@ struct lap_cb {
IRLMP_STATE lap_state;
- struct irlap_cb *irlap; /* Instance of IrLAP layer */
-
+ struct irlap_cb *irlap; /* Instance of IrLAP layer */
hashbin_t *lsaps; /* LSAP associated with this link */
- __u8 caddr; /* Connection address */
-
+ __u8 caddr; /* Connection address */
__u32 saddr; /* Source device address */
__u32 daddr; /* Destination device address */
- hashbin_t *cachelog; /* Discovered devices for this link */
-
struct qos_info *qos; /* LAP QoS for this session */
+ struct timer_list idle_timer;
};
/*
@@ -171,10 +161,8 @@ struct irlmp_cb {
__u8 conflict_flag;
- /* int discovery; */
-
- DISCOVERY discovery_rsp; /* Discovery response to use by IrLAP */
- DISCOVERY discovery_cmd; /* Discovery command to use by IrLAP */
+ discovery_t discovery_cmd; /* Discovery command to use by IrLAP */
+ discovery_t discovery_rsp; /* Discovery response to use by IrLAP */
int free_lsap_sel;
@@ -185,55 +173,72 @@ struct irlmp_cb {
hashbin_t *links; /* IrLAP connection table */
hashbin_t *unconnected_lsaps;
- hashbin_t *registry;
+ hashbin_t *clients;
+ hashbin_t *services;
- __u8 hint[2]; /* Hint bits */
+ hashbin_t *cachelog;
+ int running;
+
+ spinlock_t lock;
+
+ __u16_host_order hints; /* Hint bits */
};
/* Prototype declarations */
int irlmp_init(void);
void irlmp_cleanup(void);
-
struct lsap_cb *irlmp_open_lsap( __u8 slsap, struct notify_t *notify);
void irlmp_close_lsap( struct lsap_cb *self);
-void irlmp_register_layer( int service, int type, int do_discovery,
- DISCOVERY_CALLBACK);
-void irlmp_unregister_layer( int service, int type);
-
-void irlmp_register_irlap( struct irlap_cb *self, __u32 saddr,
- struct notify_t *);
-void irlmp_unregister_irlap( __u32 saddr);
-
-void irlmp_connect_request( struct lsap_cb *, __u8 dlsap_sel, __u32 daddr,
- struct qos_info *, struct sk_buff *);
-void irlmp_connect_indication( struct lsap_cb *self, struct sk_buff *skb);
-void irlmp_connect_response( struct lsap_cb *, struct sk_buff *);
-void irlmp_connect_confirm( struct lsap_cb *, struct sk_buff *);
-
-
-void irlmp_disconnect_indication( struct lsap_cb *self, LM_REASON reason,
- struct sk_buff *userdata);
-void irlmp_disconnect_request( struct lsap_cb *, struct sk_buff *userdata);
-
-void irlmp_discovery_confirm( struct lap_cb *, hashbin_t *discovery_log);
-void irlmp_discovery_indication( struct lap_cb *, DISCOVERY *discovery);
-void irlmp_discovery_request( int nslots);
-DISCOVERY *irlmp_get_discovery_response(void);
-
-void irlmp_data_request( struct lsap_cb *, struct sk_buff *);
-void irlmp_udata_request( struct lsap_cb *, struct sk_buff *);
-void irlmp_data_indication( struct lsap_cb *, struct sk_buff *);
-void irlmp_udata_indication( struct lsap_cb *, struct sk_buff *);
+__u16 irlmp_service_to_hint(int service);
+__u32 irlmp_register_service(__u16 hints);
+int irlmp_unregister_service(__u32 handle);
+__u32 irlmp_register_client(__u16 hint_mask, DISCOVERY_CALLBACK1 callback1,
+ DISCOVERY_CALLBACK2 callback2);
+int irlmp_unregister_client(__u32 handle);
+int irlmp_update_client(__u32 handle, __u16 hint_mask,
+ DISCOVERY_CALLBACK1, DISCOVERY_CALLBACK2);
+
+void irlmp_register_link(struct irlap_cb *, __u32 saddr, struct notify_t *);
+void irlmp_unregister_link(__u32 saddr);
+
+int irlmp_connect_request(struct lsap_cb *, __u8 dlsap_sel,
+ __u32 saddr, __u32 daddr,
+ struct qos_info *, struct sk_buff *);
+void irlmp_connect_indication(struct lsap_cb *self, struct sk_buff *skb);
+void irlmp_connect_response(struct lsap_cb *, struct sk_buff *);
+void irlmp_connect_confirm(struct lsap_cb *, struct sk_buff *);
+struct lsap_cb *irlmp_dup(struct lsap_cb *self, void *instance);
+
+void irlmp_disconnect_indication(struct lsap_cb *self, LM_REASON reason,
+ struct sk_buff *userdata);
+void irlmp_disconnect_request(struct lsap_cb *, struct sk_buff *userdata);
+
+void irlmp_discovery_confirm(hashbin_t *discovery_log);
+void irlmp_discovery_request(int nslots);
+void irlmp_do_discovery(int nslots);
+discovery_t *irlmp_get_discovery_response(void);
+
+void irlmp_data_request(struct lsap_cb *, struct sk_buff *);
+inline void irlmp_udata_request(struct lsap_cb *, struct sk_buff *);
+inline void irlmp_data_indication(struct lsap_cb *, struct sk_buff *);
+inline void irlmp_udata_indication(struct lsap_cb *, struct sk_buff *);
void irlmp_status_request(void);
-void irlmp_status_indication( LINK_STATUS link, LOCK_STATUS lock);
+void irlmp_status_indication(LINK_STATUS link, LOCK_STATUS lock);
-int irlmp_slsap_inuse( __u8 slsap);
+int irlmp_slsap_inuse(__u8 slsap);
__u8 irlmp_find_free_slsap(void);
+LM_REASON irlmp_convert_lap_reason(LAP_REASON);
-LM_REASON irlmp_convert_lap_reason( LAP_REASON);
+__u32 irlmp_get_saddr(struct lsap_cb *self);
+__u32 irlmp_get_daddr(struct lsap_cb *self);
+extern char *lmp_reasons[];
+extern int sysctl_discovery_slots;
+extern int sysctl_discovery;
extern struct irlmp_cb *irlmp;
+static inline hashbin_t *irlmp_get_cachelog(void) { return irlmp->cachelog; }
+
#endif