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