linux-old/drivers/usb/auermain.h
<<
>>
Prefs
   1/*****************************************************************************/
   2/*
   3 *      auermain.h  --  Auerswald PBX/System Telephone usb driver.
   4 *
   5 *      Copyright (C) 2002  Wolfgang Mües (wolfgang@iksw-muees.de)
   6 *
   7 *      This program is free software; you can redistribute it and/or modify
   8 *      it under the terms of the GNU General Public License as published by
   9 *      the Free Software Foundation; either version 2 of the License, or
  10 *      (at your option) any later version.
  11 *
  12 *      This program is distributed in the hope that it will be useful,
  13 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 *      GNU General Public License for more details.
  16 *
  17 *      You should have received a copy of the GNU General Public License
  18 *      along with this program; if not, write to the Free Software
  19 *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20 */
  21 /*****************************************************************************/
  22
  23#ifndef AUERMAIN_H
  24#define AUERMAIN_H
  25
  26#include <linux/devfs_fs_kernel.h>
  27#include <linux/usb.h>
  28#include "auerchain.h"
  29#include "auerbuf.h"
  30#include "auerserv.h"
  31#include "auerisdn.h"
  32
  33/*-------------------------------------------------------------------*/
  34/* Private declarations for Auerswald USB driver                     */
  35
  36/* Auerswald Vendor ID */
  37#define ID_AUERSWALD    0x09BF
  38
  39#ifndef AUER_MINOR_BASE         /* allow external override */
  40#define AUER_MINOR_BASE 112     /* auerswald driver minor number */
  41#endif
  42
  43/* we can have up to this number of device plugged in at once */
  44#define AUER_MAX_DEVICES 16
  45
  46/* prefix for the device descriptors in /dev/usb */
  47#define AU_PREFIX       "auer"
  48
  49/* Number of read buffers for each device */
  50#define AU_RBUFFERS     10
  51
  52/* Number of chain elements for each control chain */
  53#define AUCH_ELEMENTS   20
  54
  55/* Number of retries in communication */
  56#define AU_RETRIES      10
  57
  58/*-------------------------------------------------------------------*/
  59/* vendor specific protocol                                          */
  60/* Header Byte */
  61#define AUH_INDIRMASK   0x80    /* mask for direct/indirect bit */
  62#define AUH_DIRECT      0x00    /* data is for USB device */
  63#define AUH_INDIRECT    0x80    /* USB device is relay */
  64
  65#define AUH_SPLITMASK   0x40    /* mask for split bit */
  66#define AUH_UNSPLIT     0x00    /* data block is full-size */
  67#define AUH_SPLIT       0x40    /* data block is part of a larger one,
  68                                   split-byte follows */
  69#define AUH_SYNC        0x40    /* Sync to start of HDLC frame for B1,B2 */
  70
  71#define AUH_TYPEMASK    0x3F    /* mask for type of data transfer */
  72#define AUH_TYPESIZE    0x40    /* different types */
  73#define AUH_DCHANNEL    0x00    /* D channel data */
  74#define AUH_B1CHANNEL   0x01    /* B1 channel transparent */
  75#define AUH_B2CHANNEL   0x02    /* B2 channel transparent */
  76/*                0x03..0x0F       reserved for driver internal use */
  77#define AUH_COMMAND     0x10    /* Command channel */
  78#define AUH_BPROT       0x11    /* Configuration block protocol */
  79#define AUH_DPROTANA    0x12    /* D channel protocol analyzer */
  80#define AUH_TAPI        0x13    /* telephone api data (ATD) */
  81/*                0x14..0x3F       reserved for other protocols */
  82#define AUH_UNASSIGNED  0xFF    /* if char device has no assigned service */
  83#define AUH_FIRSTUSERCH 0x11    /* first channel which is available for driver users */
  84
  85#define AUH_SIZE        1       /* Size of Header Byte */
  86
  87/* Split Byte. Only present if split bit in header byte set.*/
  88#define AUS_STARTMASK   0x80    /* mask for first block of splitted frame */
  89#define AUS_FIRST       0x80    /* first block */
  90#define AUS_FOLLOW      0x00    /* following block */
  91
  92#define AUS_ENDMASK     0x40    /* mask for last block of splitted frame */
  93#define AUS_END         0x40    /* last block */
  94#define AUS_NOEND       0x00    /* not the last block */
  95
  96#define AUS_LENMASK     0x3F    /* mask for block length information */
  97
  98/* Request types */
  99#define AUT_RREQ        (USB_DIR_IN  | USB_TYPE_VENDOR | USB_RECIP_OTHER)       /* Read Request */
 100#define AUT_WREQ        (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER)       /* Write Request */
 101
 102/* Vendor Requests */
 103#define AUV_GETINFO     0x00    /* GetDeviceInfo */
 104#define AUV_WBLOCK      0x01    /* Write Block */
 105#define AUV_RBLOCK      0x02    /* Read Block */
 106#define AUV_CHANNELCTL  0x03    /* Channel Control */
 107#define AUV_DUMMY       0x04    /* Dummy Out for retry */
 108
 109/* Device Info Types */
 110#define AUDI_NUMBCH     0x0000  /* Number of supported B channels */
 111#define AUDI_OUTFSIZE   0x0001  /* Size of OUT B channel fifos */
 112#define AUDI_MBCTRANS   0x0002  /* max. Blocklength of control transfer */
 113
 114/* Interrupt endpoint definitions */
 115#define AU_IRQENDP      1       /* Endpoint number */
 116#define AU_IRQCMDID     16      /* Command-block ID */
 117#define AU_BLOCKRDY     0       /* Command: Block data ready on ctl endpoint */
 118#define AU_IRQMINSIZE   5       /* Nr. of bytes decoded in this driver */
 119
 120/* B channel Interrupt endpoint definitions */
 121#define AU_IRQENDPBI    2       /* Input Endpoint number */
 122#define AU_IRQENDPBO    3       /* Output Endpoint number for 4410, 2206 */
 123#define AU_IRQENDPBO_2  2       /* Output Endpoint number for 2104 */
 124
 125/* Device String Descriptors */
 126#define AUSI_VENDOR     1       /* "Auerswald GmbH & Co. KG" */
 127#define AUSI_DEVICE     2       /* Name of the Device */
 128#define AUSI_SERIALNR   3       /* Serial Number */
 129#define AUSI_MSN        4       /* "MSN ..." (first) Multiple Subscriber Number */
 130
 131#define AUSI_DLEN       100     /* Max. Length of Device Description */
 132
 133#define AUV_RETRY       0x101   /* First Firmware version which can do control retries */
 134
 135/* ...................................................................*/
 136/* USB device context */
 137struct auerswald {
 138        struct semaphore mutex;         /* protection in user context */
 139        char name[16];                  /* name of the /dev/usb entry */
 140        unsigned int dtindex;           /* index in the device table */
 141        devfs_handle_t devfs;           /* devfs device node */
 142        struct usb_device *usbdev;      /* USB device handle */
 143        int open_count;                 /* count the number of open character channels */
 144        char dev_desc[AUSI_DLEN];       /* for storing a textual description */
 145        unsigned int maxControlLength;  /* max. Length of control paket (without header) */
 146        struct urb *inturbp;            /* interrupt urb */
 147        char *intbufp;                  /* data buffer for interrupt urb */
 148        unsigned int irqsize;           /* size of interrupt endpoint 1 */
 149        struct auerchain controlchain;  /* for chaining of control messages */
 150        struct auerbufctl bufctl;       /* Buffer control for control transfers */
 151        struct auerscon *services[AUH_TYPESIZE];/* context pointers for each service */
 152        unsigned int version;           /* Version of the device */
 153        wait_queue_head_t bufferwait;   /* wait for a control buffer */
 154        volatile unsigned int disconnecting;/* 1: removal in progress */
 155        struct auerisdn isdn;           /* ISDN-Related parameters */
 156};
 157
 158/* array of pointers to our devices that are currently connected */
 159extern struct auerswald *auerdev_table[AUER_MAX_DEVICES];
 160
 161/* lock to protect the auerdev_table structure */
 162extern struct semaphore auerdev_table_mutex;
 163
 164void auerswald_removeservice(struct auerswald *cp, struct auerscon *scp);
 165
 166int auerswald_addservice(struct auerswald *cp, struct auerscon *scp);
 167
 168void auerchar_ctrlwrite_complete(struct urb *urb);
 169
 170void auerswald_delete(struct auerswald *cp);
 171
 172#endif  /* AUERMAIN_H */
 173
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.