summaryrefslogtreecommitdiff
path: root/kernel/wcusb.h
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-02-04 23:00:48 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-02-04 23:00:48 +0000
commit7e068801fbf82413ac0a5e63e586c268bd457434 (patch)
tree9b61e9a4e07167e0b7d347e4336245724befa29c /kernel/wcusb.h
parent29daeebad888269fa0ee2ca7e54e238c8498ca2d (diff)
Move kernel stuff to under kernel/
(merged branch /zaptel/team/tzafrir/move ) Closes issue #7117. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@3793 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'kernel/wcusb.h')
-rw-r--r--kernel/wcusb.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/kernel/wcusb.h b/kernel/wcusb.h
new file mode 100644
index 0000000..f22d0ac
--- /dev/null
+++ b/kernel/wcusb.h
@@ -0,0 +1,142 @@
+
+#ifndef _WCUSB_H
+#define _WCUSB_H
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/module.h>
+#include <linux/usb.h>
+
+#include <linux/version.h>
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,19)
+#define USB2420
+#endif
+
+#include "zaptel.h"
+
+#define WC_MAX_IFACES 128
+
+#define POWERSAVE_TIME 4000 /* Powersaving timeout for devices with a proslic */
+
+/* Various registers and data ports on the tigerjet part */
+#define WCUSB_SPORT0 0x26
+#define WCUSB_SPORT1 0x27
+#define WCUSB_SPORT2 0x28
+#define WCUSB_SPORT_CTRL 0x29
+
+#define WC_AUX0 0x1
+#define WC_AUX1 0x2
+#define WC_AUX2 0x4
+#define WC_AUX3 0x8
+
+#define CONTROL_TIMEOUT_MS (500) /* msec */
+#define CONTROL_TIMEOUT_JIFFIES ((CONTROL_TIMEOUT_MS * HZ) / 1000)
+
+#define REQUEST_NORMAL 4
+
+#define FLAG_RUNNING (1 << 0)
+
+/* Important data structures and data types */
+
+
+/* States for the Proslic read state machine */
+typedef enum {
+ STATE_WCREAD_WRITEREG,
+ STATE_WCREAD_READRES,
+ STATE_WCWRITE_WRITEREG,
+ STATE_WCWRITE_WRITERES,
+} proslic_state_t;
+
+/* Used for current stream state */
+typedef enum {
+ STREAM_NORMAL, /* Sends normal (unmodified) audio data */
+ STREAM_DTMF, /* (For keypad device) Sends dtmf data */
+} stream_t;
+
+/* States for the Keypad state machine */
+typedef enum {
+ STATE_FOR_LOOP_1_OUT,
+ STATE_FOR_LOOP_2_IN,
+ STATE_FOR_LOOP_PROC_DATA,
+ STATE_FOR_LOOP_CLEAR_DIGIT,
+} keypad_state_t;
+
+/* Device types. For radical changes in a new device, use a switch based on the device type */
+typedef enum {
+ WC_KEYPAD, /* The tigerjet phone with the keypad. That was a bugger to implement */
+ WC_PROSLIC, /* For various devices with a proslic */
+} dev_type_t;
+
+struct wc_keypad_data {
+ keypad_state_t state; /* Current state in the keypad detect routine */
+#ifdef USB2420
+ struct urb urb; /* urb used for the keypad data transport ... can't remember whether it is used or not */
+#else
+ urb_t urb; /* urb used for the keypad data transport ... can't remember whether it is used or not */
+#endif
+ int running;
+ char data;
+ char data12;
+ char tmp;
+ int scanned_event;
+ int i;
+ int count;
+ /* DTMF tone generation stuff for zaptel */
+ struct zt_tone_state ts;
+ struct zt_tone *tone;
+};
+
+struct stinky_urb {
+#ifdef USB2420
+ struct urb urb;
+#ifndef LINUX26
+ struct iso_packet_descriptor isoframe[1];
+#endif
+#else
+ urb_t urb;
+ iso_packet_descriptor_t isoframe[1];
+#endif
+};
+
+struct wc_usb_pvt {
+ const char *variety;
+ struct usb_device *dev;
+ dev_type_t devclass;
+ int usecount;
+ int dead;
+ struct zt_span span;
+ struct zt_chan chan;
+ struct stinky_urb dataread[2];
+ struct stinky_urb datawrite[2];
+#ifdef USB2420
+ struct urb control;
+ struct usb_ctrlrequest dr;
+#else
+ urb_t control;
+ devrequest dr;
+#endif
+ proslic_state_t controlstate;
+ int urbcount;
+ int flags;
+ int timer;
+ int lowpowertimer;
+ int idletxhookstate;
+ int hookstate;
+ __u8 newtxhook;
+ __u8 txhook;
+ int pos;
+ unsigned char auxstatus;
+ unsigned char wcregindex;
+ unsigned char wcregbuf[4];
+ unsigned char wcregval;
+ short readchunk[ZT_MAX_CHUNKSIZE * 2];
+ short writechunk[ZT_MAX_CHUNKSIZE * 2];
+ stream_t sample;
+ void *pvt_data;
+};
+
+struct wc_usb_desc {
+ char *name;
+ int flags;
+};
+#endif