Pull esi-support into release branch
[linux-2.6] / drivers / usb / serial / io_edgeport.h
1 /************************************************************************
2  *
3  *      io_edgeport.h   Edgeport Linux Interface definitions
4  *
5  *      Copyright (C) 2000 Inside Out Networks, Inc.
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  *
13  ************************************************************************/
14
15 #if !defined(_IO_EDGEPORT_H_)
16 #define _IO_EDGEPORT_H_
17
18
19 #define MAX_RS232_PORTS         8       /* Max # of RS-232 ports per device */
20
21 /* typedefs that the insideout headers need */
22 #ifndef TRUE
23         #define TRUE            (1)
24 #endif
25 #ifndef FALSE
26         #define FALSE           (0)
27 #endif
28 #ifndef LOW8
29         #define LOW8(a)         ((unsigned char)(a & 0xff))
30 #endif
31 #ifndef HIGH8
32         #define HIGH8(a)        ((unsigned char)((a & 0xff00) >> 8))
33 #endif
34
35 #ifndef __KERNEL__
36 #define __KERNEL__
37 #endif
38
39 #include "io_usbvend.h"
40
41
42
43 /* The following table is used to map the USBx port number to 
44  * the device serial number (or physical USB path), */
45 #define MAX_EDGEPORTS   64
46
47 struct comMapper {
48         char    SerialNumber[MAX_SERIALNUMBER_LEN+1];   /* Serial number/usb path */
49         int     numPorts;                               /* Number of ports */
50         int     Original[MAX_RS232_PORTS];              /* Port numbers set by IOCTL */
51         int     Port[MAX_RS232_PORTS];                  /* Actual used port numbers */
52 };
53
54
55 #define EDGEPORT_CONFIG_DEVICE "/proc/edgeport"
56
57 /* /proc/edgeport Interface
58  * This interface uses read/write/lseek interface to talk to the edgeport driver
59  * the following read functions are supported: */
60 #define PROC_GET_MAPPING_TO_PATH        1
61 #define PROC_GET_COM_ENTRY              2
62 #define PROC_GET_EDGE_MANUF_DESCRIPTOR  3
63 #define PROC_GET_BOOT_DESCRIPTOR        4
64 #define PROC_GET_PRODUCT_INFO           5
65 #define PROC_GET_STRINGS                6
66 #define PROC_GET_CURRENT_COM_MAPPING    7
67
68 /* The parameters to the lseek() for the read is: */
69 #define PROC_READ_SETUP(Command, Argument)      ((Command) + ((Argument)<<8))
70
71
72 /* the following write functions are supported: */
73 #define PROC_SET_COM_MAPPING            1
74 #define PROC_SET_COM_ENTRY              2
75
76
77 /* The following sturcture is passed to the write */
78 struct procWrite {
79         int     Command;
80         union {
81                 struct comMapper        Entry;
82                 int                     ComMappingBasedOnUSBPort;       /* Boolean value */
83         } u;
84 };
85
86 /*
87  *      Product information read from the Edgeport
88  */
89 struct edgeport_product_info {
90         __u16   ProductId;                      /* Product Identifier */
91         __u8    NumPorts;                       /* Number of ports on edgeport */
92         __u8    ProdInfoVer;                    /* What version of structure is this? */
93
94         __u32   IsServer        :1;             /* Set if Server */
95         __u32   IsRS232         :1;             /* Set if RS-232 ports exist */
96         __u32   IsRS422         :1;             /* Set if RS-422 ports exist */
97         __u32   IsRS485         :1;             /* Set if RS-485 ports exist */
98         __u32   IsReserved      :28;            /* Reserved for later expansion */
99
100         __u8    RomSize;                        /* Size of ROM/E2PROM in K */
101         __u8    RamSize;                        /* Size of external RAM in K */
102         __u8    CpuRev;                         /* CPU revision level (chg only if s/w visible) */
103         __u8    BoardRev;                       /* PCB revision level (chg only if s/w visible) */
104
105         __u8    BootMajorVersion;               /* Boot Firmware version: xx. */
106         __u8    BootMinorVersion;               /*                        yy. */
107         __le16  BootBuildNumber;                /*                        zzzz (LE format) */
108
109         __u8    FirmwareMajorVersion;           /* Operational Firmware version:xx. */
110         __u8    FirmwareMinorVersion;           /*                              yy. */
111         __le16  FirmwareBuildNumber;            /*                              zzzz (LE format) */
112
113         __u8    ManufactureDescDate[3];         /* MM/DD/YY when descriptor template was compiled */
114         __u8    Unused1[1];                     /* Available */
115
116         __u8    iDownloadFile;                  /* What to download to EPiC device */
117         __u8    Unused2[2];                     /* Available */
118 };
119
120 /*
121  *      Edgeport Stringblock String locations
122  */
123 #define EDGESTRING_MANUFNAME            1       /* Manufacture Name */
124 #define EDGESTRING_PRODNAME             2       /* Product Name */
125 #define EDGESTRING_SERIALNUM            3       /* Serial Number */
126 #define EDGESTRING_ASSEMNUM             4       /* Assembly Number */
127 #define EDGESTRING_OEMASSEMNUM          5       /* OEM Assembly Number */
128 #define EDGESTRING_MANUFDATE            6       /* Manufacture Date */
129 #define EDGESTRING_ORIGSERIALNUM        7       /* Serial Number */
130
131 struct string_block {
132         __u16   NumStrings;                     /* Number of strings in block */
133         __u16   Strings[1];                     /* Start of string block */
134 };
135
136
137
138 #endif