patch-2.1.132 linux/include/net/irda/irmod.h
Next file: linux/include/net/irda/irobex.h
Previous file: linux/include/net/irda/irlmp_frame.h
Back to the patch index
Back to the overall index
- Lines: 264
- Date:
Thu Dec 17 09:01:03 1998
- Orig file:
v2.1.131/linux/include/net/irda/irmod.h
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.1.131/linux/include/net/irda/irmod.h linux/include/net/irda/irmod.h
@@ -0,0 +1,263 @@
+/*********************************************************************
+ *
+ * Filename: irmod.h
+ * Version: 0.3
+ * Description: IrDA module and utilities functions
+ * Status: Experimental.
+ * Author: Dag Brattli <dagb@cs.uit.no>
+ * Created at: Mon Dec 15 13:58:52 1997
+ * Modified at: Mon Dec 7 01:40:35 1998
+ * Modified by: Dag Brattli <dagb@cs.uit.no>
+ *
+ * Copyright (c) 1998 Dag Brattli, All Rights Reserved.
+ *
+ * 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 charg.
+ *
+ ********************************************************************/
+
+#ifndef IRMOD_H
+#define IRMOD_H
+
+#include <linux/skbuff.h>
+#include <linux/miscdevice.h>
+
+#include <net/irda/irqueue.h>
+#include <net/irda/qos.h>
+
+#define IRMGR_IOC_MAGIC 'm'
+#define IRMGR_IOCTNPC _IO(IRMGR_IOC_MAGIC, 1)
+#define IRMGR_IOC_MAXNR 1
+
+/*
+ * Events that we pass to the user space manager
+ */
+typedef enum {
+ EVENT_DEVICE_DISCOVERED = 0,
+ EVENT_REQUEST_MODULE,
+ EVENT_IRLAN_START,
+ EVENT_IRLAN_STOP,
+ EVENT_IRLPT_START,
+ EVENT_IRLPT_STOP,
+ EVENT_IROBEX_START,
+ EVENT_IROBEX_STOP,
+ EVENT_IRDA_STOP,
+ EVENT_NEED_PROCESS_CONTEXT,
+} IRMGR_EVENT;
+
+/*
+ * Event information passed to the IrManager daemon process
+ */
+struct irmanager_event {
+ IRMGR_EVENT event;
+ char devname[10];
+ char info[32];
+ int service;
+ __u32 saddr;
+ __u32 daddr;
+};
+
+typedef void (*TODO_CALLBACK)( void *self, __u32 param);
+
+/*
+ * Same as irmanager_event but this one can be queued and inclueds some
+ * addtional information
+ */
+struct irda_event {
+ QUEUE q; /* Must be first */
+
+ struct irmanager_event event;
+};
+
+/*
+ * Funtions with needs to be called with a process context
+ */
+struct irda_todo {
+ QUEUE q; /* Must be first */
+
+ void *self;
+ TODO_CALLBACK callback;
+ __u32 param;
+};
+
+/*
+ * Main structure for the IrDA device (not much here :-)
+ */
+struct irda {
+ struct miscdevice dev;
+ struct wait_queue *wait_queue;
+
+ QUEUE *event_queue; /* Events queued for the irmanager */
+ QUEUE *todo_queue; /* Todo list */
+};
+
+typedef struct {
+ char irda_call[7]; /* 6 call + SSID (shifted ascii!) */
+} irda_address;
+
+struct sockaddr_irda {
+ short sirda_family;
+ irda_address sirda_call;
+ int sirda_ndigis;
+};
+
+/*
+ * This type is used by the protocols that transmit 16 bits words in
+ * little endian format. A little endian machine stores MSB of word in
+ * byte[1] and LSB in byte[0]. A big endian machine stores MSB in byte[0]
+ * and LSB in byte[1].
+ */
+typedef union {
+ __u16 word;
+ __u8 byte[2];
+} __u16_host_order;
+
+/*
+ * Information monitored by some layers
+ */
+struct irda_statistics
+{
+ int rx_packets; /* total packets received */
+ int tx_packets; /* total packets transmitted */
+ int rx_errors; /* bad packets received */
+ int tx_errors; /* packet transmit problems */
+ int rx_dropped; /* no space in linux buffers */
+ int tx_dropped; /* no space available in linux */
+ int rx_compressed;
+ int tx_compressed;
+ int rx_bytes; /* total bytes received */
+ int tx_bytes; /* total bytes transmitted */
+
+ int multicast; /* multicast packets received */
+ int collisions;
+
+ /* detailed rx_errors: */
+ int rx_length_errors;
+ int rx_over_errors; /* receiver ring buff overflow */
+ int rx_crc_errors; /* recved pkt with crc error */
+ int rx_frame_errors; /* recv'd frame alignment error */
+ int rx_fifo_errors; /* recv'r fifo overrun */
+ int rx_missed_errors; /* receiver missed packet */
+
+ /* detailed tx_errors */
+ int tx_aborted_errors;
+ int tx_carrier_errors;
+ int tx_fifo_errors;
+ int tx_heartbeat_errors;
+ int tx_window_errors;
+};
+
+typedef enum {
+ NO_CHANGE,
+ LOCKED,
+ UNLOCKED,
+} LOCK_STATUS;
+
+/* Misc status information */
+typedef enum {
+ STATUS_OK,
+ STATUS_ABORTED,
+ STATUS_NO_ACTIVITY,
+ STATUS_NOISY,
+ STATUS_REMOTE,
+} LINK_STATUS;
+
+typedef enum { /* FIXME check the two first reason codes */
+ LAP_DISC_INDICATION=1, /* Received a disconnect request from peer */
+ LAP_NO_RESPONSE, /* To many retransmits without response */
+ LAP_RESET_INDICATION, /* To many retransmits, or invalid nr/ns */
+ LAP_FOUND_NONE, /* No devices were discovered */
+ LAP_MEDIA_BUSY,
+ LAP_PRIMARY_CONFLICT,
+} LAP_REASON;
+
+/*
+ * IrLMP disconnect reasons. The order is very important, since they
+ * correspond to disconnect reasons sent in IrLMP disconnect frames, so
+ * please do not touch :-)
+ */
+typedef enum {
+ LM_USER_REQUEST = 1, /* User request */
+ LM_LAP_DISCONNECT, /* Unexpected IrLAP disconnect */
+ LM_CONNECT_FAILURE, /* Failed to establish IrLAP connection */
+ LM_LAP_RESET, /* IrLAP reset */
+ LM_INIT_DISCONNECT, /* Link Management initiated disconnect */
+} LM_REASON; /* FIXME: Just for now */
+
+/*
+ * IrLMP character code values
+ */
+#define CS_ASCII 0x00
+#define CS_ISO_8859_1 0x01
+#define CS_ISO_8859_2 0x02
+#define CS_ISO_8859_3 0x03
+#define CS_ISO_8859_4 0x04
+#define CS_ISO_8859_5 0x05
+#define CS_ISO_8859_6 0x06
+#define CS_ISO_8859_7 0x07
+#define CS_ISO_8859_8 0x08
+#define CS_ISO_8859_9 0x09
+#define CS_UNICODE 0xff
+
+/*
+ * The DISCOVERY structure is used for both discovery requests and responses
+ */
+#define DISCOVERY struct discovery_t
+struct discovery_t {
+ QUEUE queue; /* Must be first! */
+
+ __u32 saddr; /* Which link the device was discovered */
+ __u32 daddr; /* Remote device address */
+ LAP_REASON condition; /* More info about the discovery */
+
+ __u8 hint[2]; /* Discovery hint bits */
+ __u8 charset;
+ char info[32]; /* Usually the name of the device */
+ __u8 info_len; /* Length of device info field */
+
+ int gen_addr_bit; /* Need to generate a new device address? */
+};
+
+typedef enum { FLOW_STOP, FLOW_START } LOCAL_FLOW;
+
+/*
+ * Notify structure used between transport and link management layers
+ */
+struct notify_t {
+ void (*data_indication)( void *instance, void *sap,
+ struct sk_buff *skb);
+ void (*udata_indication)( void *instance, void *sap,
+ struct sk_buff *skb);
+ void (*connect_confirm)( void *instance, void *sap,
+ struct qos_info *qos, int max_sdu_size,
+ struct sk_buff *skb);
+ void (*connect_indication)( void *instance, void *sap,
+ struct qos_info *qos, int max_sdu_size,
+ struct sk_buff *skb);
+ void (*disconnect_indication)( void *instance, void *sap,
+ LM_REASON reason, struct sk_buff *);
+ void (*flow_indication)( void *instance, void *sap, LOCAL_FLOW flow);
+ void *instance; /* Layer instance pointer */
+ char name[16]; /* Name of layer */
+};
+
+#define NOTIFY_MAX_NAME 16
+
+int irmod_init_module(void);
+void irmod_cleanup_module(void);
+
+inline int irda_lock( int *lock);
+inline int irda_unlock( int *lock);
+
+void irda_notify_init( struct notify_t *notify);
+
+void irda_execute_as_process( void *self, TODO_CALLBACK callback, __u32 param);
+void irmanager_notify( struct irmanager_event *event);
+
+#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov