configure.ac: add libusb/libusbx support (for xpp)
[dahdi/tools.git] / xpp / mpp.h
1 #ifndef MPP_H
2 #define MPP_H
3 /*
4  * Written by Oron Peled <oron@actcom.co.il>
5  * Copyright (C) 2008, Xorcom
6  *
7  * All rights reserved.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22  *
23  */
24
25 /*
26  * MPP - Managment Processor Protocol definitions
27  */
28
29 #include <mpptalk_defs.h>
30 #include <stdint.h>
31 #include <xtalk.h>
32
33 #ifdef  __GNUC__
34 #define PACKED  __attribute__((packed))
35 #else
36 #error "We do not know how your compiler packs structures"
37 #endif
38
39 #define MK_PROTO_VERSION(major, minor)  (((major) << 4) | (0x0F & (minor)))
40
41 #define MPP_PROTOCOL_VERSION    MK_PROTO_VERSION(1,4)
42 #define MPP_SUPPORTED_VERSION(x)        ((x) == MK_PROTO_VERSION(1,3) || (x) == MK_PROTO_VERSION(1,4))
43
44 /*
45  * The eeprom_table is common to all eeprom types.
46  */
47 #define LABEL_SIZE      8
48 struct eeprom_table {
49         uint8_t         source;         /* C0 - small eeprom, C2 - large eeprom */
50         uint16_t        vendor;
51         uint16_t        product;
52         uint16_t        release;        /* BCD encoded release */
53         uint8_t         config_byte;    /* Must be 0 */
54         uint8_t         label[LABEL_SIZE];
55 } PACKED;
56
57 #define VERSION_LEN     6
58 struct firmware_versions {
59         char    usb[VERSION_LEN];
60         char    fpga[VERSION_LEN];
61         char    eeprom[VERSION_LEN];
62 } PACKED;
63
64 struct capabilities {
65         uint8_t         ports_fxs;
66         uint8_t         ports_fxo;
67         uint8_t         ports_bri;
68         uint8_t         ports_pri;
69         uint8_t         extra_features; /* BIT(0) - TwinStar */
70         uint8_t         ports_echo;
71         uint8_t         reserved[2];
72         uint32_t        timestamp;
73 } PACKED;
74
75 #define CAP_EXTRA_TWINSTAR(c)           ((c)->extra_features & 0x01)
76 #define CAP_EXTRA_TWINSTAR_SET(c)       do {(c)->extra_features |= 0x01;} while (0)
77 #define CAP_EXTRA_TWINSTAR_CLR(c)       do {(c)->extra_features &= ~0x01;} while (0)
78
79 #define KEYSIZE 16
80
81 struct capkey {
82         uint8_t k[KEYSIZE];
83 } PACKED;
84
85 struct extrainfo {
86         char            text[EXTRAINFO_SIZE];
87 } PACKED;
88
89 struct mpp_header {
90         uint16_t        len;
91         uint16_t        seq;
92         uint8_t         op;     /* MSB: 0 - to device, 1 - from device */
93 } PACKED;
94
95 enum mpp_ser_op {
96         SER_CARD_INFO_GET       = 0x1,
97         SER_STAT_GET            = 0x3,
98 /* Status bits */
99 #define SER_STAT_WATCHDOG_READY(s)      ((s) & 0x01)
100 #define SER_STAT_XPD_ALIVE(s)           ((s) & 0x02)
101 };
102
103 /* Individual commands structure */
104
105 CMD_DEF(MPP, STATUS_GET);
106
107
108 CMD_DEF(MPP, STATUS_GET_REPLY,
109         uint8_t i2cs_data;
110
111 #define STATUS_FPGA_LOADED(x)   ((x) & 0x01)
112         uint8_t status;         /* BIT(0) - FPGA is loaded */
113         struct firmware_versions fw_versions;
114         );
115
116 CMD_DEF(MPP, EEPROM_SET,
117         struct eeprom_table     data;
118         );
119
120 CMD_DEF(MPP, CAPS_GET);
121
122 CMD_DEF(MPP, CAPS_GET_REPLY,
123         struct eeprom_table     data;
124         struct capabilities     capabilities;
125         struct capkey           key;
126         );
127
128 CMD_DEF(MPP, CAPS_SET,
129         struct eeprom_table     data;
130         struct capabilities     capabilities;
131         struct capkey           key;
132         );
133
134 CMD_DEF(MPP, EXTRAINFO_GET);
135
136 CMD_DEF(MPP, EXTRAINFO_GET_REPLY,
137         struct extrainfo        info;
138         );
139
140 CMD_DEF(MPP, EXTRAINFO_SET,
141         struct extrainfo        info;
142         );
143
144 CMD_DEF(MPP, RENUM);
145
146 CMD_DEF(MPP, EEPROM_BLK_RD,
147         uint16_t        offset;
148         uint16_t        len;
149         );
150
151 CMD_DEF(MPP, EEPROM_BLK_RD_REPLY,
152         uint16_t        offset;
153         uint8_t         data[0];
154         );
155
156 CMD_DEF(MPP, DEV_SEND_START,
157         uint8_t         dest;
158         char            ihex_version[VERSION_LEN];
159         );
160
161 CMD_DEF(MPP, DEV_SEND_END);
162
163 CMD_DEF(MPP, DEV_SEND_SEG,
164         uint16_t        offset;
165         uint8_t         data[0];
166         );
167
168 CMD_DEF(MPP, RESET);
169 CMD_DEF(MPP, HALF_RESET);
170
171 CMD_DEF(MPP, SER_SEND,
172         uint8_t data[0];
173         );
174
175 CMD_DEF(MPP, SER_RECV,
176         uint8_t data[0];
177         );
178
179 CMD_DEF(MPP, TWS_WD_MODE_SET,
180         uint8_t         wd_active;
181         );
182
183 CMD_DEF(MPP, TWS_WD_MODE_GET);
184 CMD_DEF(MPP, TWS_WD_MODE_GET_REPLY,
185         uint8_t         wd_active;
186         );
187
188 CMD_DEF(MPP, TWS_PORT_SET,
189         uint8_t         portnum;
190         );
191
192 CMD_DEF(MPP, TWS_PORT_GET);
193 CMD_DEF(MPP, TWS_PORT_GET_REPLY,
194         uint8_t         portnum;
195         );
196
197 CMD_DEF(MPP, TWS_PWR_GET);
198 CMD_DEF(MPP, TWS_PWR_GET_REPLY,
199         uint8_t         power;
200         );
201
202 #endif  /* MPP_H */