Probably interface misuse, because of the way iterating over hashbin is done.
However! Printing of socket number ("IrNET socket %d - ", i++") made conversion
to proper ->start/->next difficult enough to do blindly without hardware.
Said that, please apply.
Remove useless comment while I am it.
Signed-off-by: Alexey Dobriyan <adobriyan@sw.ru>
Cc: Samuel Ortiz <samuel@sortiz.org>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
	
			
		
			
				
	
	
		
			178 lines
		
	
	
	
		
			4.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
	
		
			4.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *	IrNET protocol module : Synchronous PPP over an IrDA socket.
 | 
						|
 *
 | 
						|
 *		Jean II - HPL `00 - <jt@hpl.hp.com>
 | 
						|
 *
 | 
						|
 * This file contains all definitions and declarations necessary for the
 | 
						|
 * IRDA part of the IrNET module (dealing with IrTTP, IrIAS and co).
 | 
						|
 * This file is a private header, so other modules don't want to know
 | 
						|
 * what's in there...
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef IRNET_IRDA_H
 | 
						|
#define IRNET_IRDA_H
 | 
						|
 | 
						|
/***************************** INCLUDES *****************************/
 | 
						|
/* Please add other headers in irnet.h */
 | 
						|
 | 
						|
#include "irnet.h"		/* Module global include */
 | 
						|
 | 
						|
/************************ CONSTANTS & MACROS ************************/
 | 
						|
 | 
						|
/*
 | 
						|
 * Name of the service (socket name) used by IrNET
 | 
						|
 */
 | 
						|
/* IAS object name (or part of it) */
 | 
						|
#define IRNET_SERVICE_NAME	"IrNetv1"
 | 
						|
/* IAS attribute */
 | 
						|
#define IRNET_IAS_VALUE		"IrDA:TinyTP:LsapSel"
 | 
						|
/* LMP notify name for client (only for /proc/net/irda/irlmp) */
 | 
						|
#define IRNET_NOTIFY_NAME	"IrNET socket"
 | 
						|
/* LMP notify name for server (only for /proc/net/irda/irlmp) */
 | 
						|
#define IRNET_NOTIFY_NAME_SERV	"IrNET server"
 | 
						|
 | 
						|
/****************************** TYPES ******************************/
 | 
						|
 | 
						|
/*
 | 
						|
 * This is the main structure where we store all the data pertaining to
 | 
						|
 * the IrNET server (listen for connection requests) and the root
 | 
						|
 * of the IrNET socket list
 | 
						|
 */
 | 
						|
typedef struct irnet_root
 | 
						|
{
 | 
						|
  irnet_socket		s;		/* To pretend we are a client... */
 | 
						|
 | 
						|
  /* Generic stuff */
 | 
						|
  int			magic;		/* Paranoia */
 | 
						|
  int			running;	/* Are we operational ? */
 | 
						|
 | 
						|
  /* Link list of all IrNET instances opened */
 | 
						|
  hashbin_t *		list;
 | 
						|
  spinlock_t		spinlock;	/* Serialize access to the list */
 | 
						|
  /* Note : the way hashbin has been designed is absolutely not
 | 
						|
   * reentrant, beware... So, we blindly protect all with spinlock */
 | 
						|
 | 
						|
  /* Handle for the hint bit advertised in IrLMP */
 | 
						|
  void *		skey;
 | 
						|
 | 
						|
  /* Server socket part */
 | 
						|
  struct ias_object *	ias_obj;	/* Our service name + lsap in IAS */
 | 
						|
 | 
						|
} irnet_root;
 | 
						|
 | 
						|
 | 
						|
/**************************** PROTOTYPES ****************************/
 | 
						|
 | 
						|
/* ----------------------- CONTROL CHANNEL ----------------------- */
 | 
						|
static void
 | 
						|
	irnet_post_event(irnet_socket *,
 | 
						|
			 irnet_event,
 | 
						|
			 __u32,
 | 
						|
			 __u32,
 | 
						|
			 char *,
 | 
						|
			 __u16);
 | 
						|
/* ----------------------- IRDA SUBROUTINES ----------------------- */
 | 
						|
static inline int
 | 
						|
	irnet_open_tsap(irnet_socket *);
 | 
						|
static inline __u8
 | 
						|
	irnet_ias_to_tsap(irnet_socket *,
 | 
						|
			  int,
 | 
						|
			  struct ias_value *);
 | 
						|
static inline int
 | 
						|
	irnet_find_lsap_sel(irnet_socket *);
 | 
						|
static inline int
 | 
						|
	irnet_connect_tsap(irnet_socket *);
 | 
						|
static inline int
 | 
						|
	irnet_discover_next_daddr(irnet_socket *);
 | 
						|
static inline int
 | 
						|
	irnet_discover_daddr_and_lsap_sel(irnet_socket *);
 | 
						|
static inline int
 | 
						|
	irnet_dname_to_daddr(irnet_socket *);
 | 
						|
/* ------------------------ SERVER SOCKET ------------------------ */
 | 
						|
static inline int
 | 
						|
	irnet_daddr_to_dname(irnet_socket *);
 | 
						|
static inline irnet_socket *
 | 
						|
	irnet_find_socket(irnet_socket *);
 | 
						|
static inline int
 | 
						|
	irnet_connect_socket(irnet_socket *,
 | 
						|
			     irnet_socket *,
 | 
						|
			     struct qos_info *,
 | 
						|
			     __u32,
 | 
						|
			     __u8);
 | 
						|
static inline void
 | 
						|
	irnet_disconnect_server(irnet_socket *,
 | 
						|
				struct sk_buff *);
 | 
						|
static inline int
 | 
						|
	irnet_setup_server(void);
 | 
						|
static inline void
 | 
						|
	irnet_destroy_server(void);
 | 
						|
/* ---------------------- IRDA-TTP CALLBACKS ---------------------- */
 | 
						|
static int
 | 
						|
	irnet_data_indication(void *,		/* instance */
 | 
						|
			      void *,		/* sap */
 | 
						|
			      struct sk_buff *);
 | 
						|
static void
 | 
						|
	irnet_disconnect_indication(void *,
 | 
						|
				    void *,
 | 
						|
				    LM_REASON,
 | 
						|
				    struct sk_buff *);
 | 
						|
static void
 | 
						|
	irnet_connect_confirm(void *,
 | 
						|
			      void *,
 | 
						|
			      struct qos_info *,
 | 
						|
			      __u32,
 | 
						|
			      __u8,
 | 
						|
			      struct sk_buff *);
 | 
						|
static void
 | 
						|
	irnet_flow_indication(void *,
 | 
						|
			      void *,
 | 
						|
			      LOCAL_FLOW);
 | 
						|
static void
 | 
						|
	irnet_status_indication(void *,
 | 
						|
				LINK_STATUS,
 | 
						|
				LOCK_STATUS);
 | 
						|
static void
 | 
						|
	irnet_connect_indication(void *,
 | 
						|
				 void *,
 | 
						|
				 struct qos_info *,
 | 
						|
				 __u32,
 | 
						|
				 __u8,
 | 
						|
				 struct sk_buff *);
 | 
						|
/* -------------------- IRDA-IAS/LMP CALLBACKS -------------------- */
 | 
						|
static void
 | 
						|
	irnet_getvalue_confirm(int,
 | 
						|
			       __u16,
 | 
						|
			       struct ias_value *,
 | 
						|
			       void *);
 | 
						|
static void
 | 
						|
	irnet_discovervalue_confirm(int,
 | 
						|
				    __u16,
 | 
						|
				    struct ias_value *,
 | 
						|
				    void *);
 | 
						|
#ifdef DISCOVERY_EVENTS
 | 
						|
static void
 | 
						|
	irnet_discovery_indication(discinfo_t *,
 | 
						|
				   DISCOVERY_MODE,
 | 
						|
				   void *);
 | 
						|
static void
 | 
						|
	irnet_expiry_indication(discinfo_t *,
 | 
						|
				DISCOVERY_MODE,
 | 
						|
				void *);
 | 
						|
#endif
 | 
						|
 | 
						|
/**************************** VARIABLES ****************************/
 | 
						|
 | 
						|
/*
 | 
						|
 * The IrNET server. Listen to connection requests and co...
 | 
						|
 */
 | 
						|
static struct irnet_root	irnet_server;
 | 
						|
 | 
						|
/* Control channel stuff (note : extern) */
 | 
						|
struct irnet_ctrl_channel	irnet_events;
 | 
						|
 | 
						|
/* The /proc/net/irda directory, defined elsewhere... */
 | 
						|
#ifdef CONFIG_PROC_FS
 | 
						|
extern struct proc_dir_entry *proc_irda;
 | 
						|
#endif /* CONFIG_PROC_FS */
 | 
						|
 | 
						|
#endif /* IRNET_IRDA_H */
 |