[WSD] Change ib_listen to return an error value rather than set it
[mirror/winof/.git] / tools / fwupdate / user / mtcr.h
1 /*\r
2  * Copyright (c) 2004-2005 Mellanox Technologies Ltd.  All rights reserved.\r
3  *\r
4  * This software is available to you under the OpenIB.org BSD license\r
5  * below:\r
6  *\r
7  *     Redistribution and use in source and binary forms, with or\r
8  *     without modification, are permitted provided that the following\r
9  *     conditions are met:\r
10  *\r
11  *      - Redistributions of source code must retain the above\r
12  *        copyright notice, this list of conditions and the following\r
13  *        disclaimer.\r
14  *\r
15  *      - Redistributions in binary form must reproduce the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer in the documentation and/or other materials\r
18  *        provided with the distribution.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
27  * SOFTWARE.\r
28  *\r
29  * $Id$\r
30  */\r
31 \r
32 #ifndef _MST_H\r
33 #define _MST_H\r
34 \r
35 #include <sys/types.h>\r
36 \r
37 #ifdef WIN32\r
38 \r
39 #define MTCR_API\r
40 \r
41 typedef unsigned __int8  u_int8_t;\r
42 typedef __int8           int8_t;\r
43 typedef unsigned __int16 u_int16_t;\r
44 typedef __int16          int16_t;\r
45 typedef unsigned __int32 u_int32_t;\r
46 typedef __int32          int32_t;\r
47 typedef unsigned __int64 u_int64_t;\r
48 typedef __int64          int64_t;\r
49 #if defined(_WIN64)\r
50     typedef __int64 MT_long_ptr_t;\r
51     typedef unsigned __int64 MT_ulong_ptr_t;\r
52 #else\r
53     typedef long MT_long_ptr_t;\r
54     typedef unsigned long MT_ulong_ptr_t;\r
55 #endif\r
56         \r
57 #else  /* UNIX */\r
58 \r
59 #define MTCR_API\r
60 \r
61 #endif\r
62 \r
63 \r
64 #ifdef __cplusplus\r
65 extern "C" {\r
66 #endif\r
67 \r
68 typedef struct mib_private_t {\r
69     int  dummy;\r
70 } MIB_Private;\r
71 \r
72 typedef enum { MACCELERATE, MRESTORE, MREAD4, MWRITE4, MREAD64, MWRITE64 } mif_ioctl_cmd_t;\r
73 \r
74 typedef enum MType_t {MST_PCI, MST_PCICONF, MST_CALBR, MST_USB, MST_IB, MST_IF, MST_PPC, MST_USB_DIMAX} MType;\r
75 typedef enum DType_t {MST_GAMLA, MST_TAVOR, MST_DIMM, MST_NOADDR} DType;\r
76 #define MST_ANAFA2 MST_TAVOR\r
77 #define MST_EEPROM MST_GAMLA\r
78 enum Mdevs_t {\r
79     MDEVS_GAMLA     = 0x01, // Each device that actually is a Gamla\r
80     MDEVS_I2CM      = 0x02, // Each device that can work as I2C master\r
81     MDEVS_MEM       = 0x04, // Each device that is a memory driver (vtop)\r
82     MDEVS_TAVOR_DDR = 0x08, // Each device that maps to Tavor DDR\r
83     MDEVS_TAVOR_UAR = 0x10, // Each device that maps to Tavor UAR\r
84     MDEVS_TAVOR_CR  = 0x20, // Each device that maps to Tavor CR\r
85     MDEVS_IF        = 0x40, // Standard device  interface\r
86     MDEVS_REM       = 0x80, // Remote devices\r
87     MDEVS_PPC       = 0x100, // PPC devices\r
88     MDEVS_TAVOR     = (MDEVS_TAVOR_DDR|MDEVS_TAVOR_UAR|MDEVS_TAVOR_CR),\r
89     MDEVS_ALL       = 0xffffffff\r
90 };\r
91 \r
92 // All fields in follow structure are not supposed to be used\r
93 // or modified by user programs. Except i2c_slave that may be\r
94 // modified before each access to target I2C slave address\r
95 typedef struct mfile_t {\r
96     MType         tp;           // type of driver\r
97     DType         dtype;        // target device to access to\r
98     DType         itype;        // interface device to access via\r
99     int           is_i2cm;      // use device as I2C master\r
100     unsigned char i2c_slave;\r
101 #ifdef __WIN__\r
102     MT_ulong_ptr_t fd;\r
103 #else\r
104     int           fd;\r
105 #endif\r
106     int           sock;         // in not -1 - remote interface\r
107     void          *ptr;\r
108     MIB_Private   mib;          // Data for IB interface (if relevant)\r
109     unsigned int  i2c_RESERVED; // Reserved for internal usage (i2c internal)\r
110 } mfile;\r
111 \r
112 typedef struct mif_param_st {\r
113        mif_ioctl_cmd_t cmd;\r
114 \r
115         DType dtype;\r
116 \r
117         char addr;\r
118         int len;\r
119         int imm;\r
120         int offset;\r
121         void * buf;\r
122 } mif_param_t;\r
123 \r
124 #ifdef WIN32\r
125 #define FromHandle(h)   ((MT_long_ptr_t)(h))\r
126 #define ToHandle(h)             ((HANDLE)(h))\r
127 #else\r
128 #define FromHandle(h)   ((int)(h))\r
129 #define ToHandle(h)             ((HANDLE)(h))\r
130 #endif\r
131 \r
132 /*\r
133  * Get list of MST (Mellanox Software Tools) devices.\r
134  * Put all device names as null-terminated strings to buf.\r
135  *\r
136  * Return number of devices found or -1 if buf overflow\r
137  */\r
138 MTCR_API int mdevices(char *buf, int len, int mask);\r
139 \r
140 /*\r
141  * Open Mellanox Software tools (mst) driver.\r
142  * Return valid mfile ptr or 0 on failure\r
143  */\r
144 \r
145 /*\r
146  * Open Mellanox Software tools (mst) driver. Device type==TAVOR\r
147  * Return valid mfile ptr or 0 on failure\r
148  */\r
149 MTCR_API mfile *mopen(int hca_num);\r
150 \r
151 /*\r
152  * Close Mellanox driver\r
153  * req. descriptor\r
154  */\r
155 MTCR_API int mclose(mfile *mf);\r
156 \r
157 /*\r
158  * Accelerate device if possible.\r
159  * When device is I2C master - overclock it\r
160  */\r
161 MTCR_API void maccelerate(mfile *mf);\r
162 \r
163 /*\r
164  * Restore normal settings, if device was accelerated.\r
165  */\r
166 MTCR_API void mrestore(mfile *mf);\r
167 \r
168 /*\r
169  * Read 4 bytes, return number of succ. read bytes or -1 on failure\r
170  */\r
171 MTCR_API int mread4(mfile *mf, unsigned int offset, u_int32_t *value);\r
172 \r
173 /*\r
174  * Write 4 bytes, return number of succ. written bytes or -1 on failure\r
175  */\r
176 MTCR_API int mwrite4(mfile *mf, unsigned int offset, u_int32_t value);\r
177 \r
178 /*\r
179  * Read up to 64 bytes, return number of succ. read bytes or -1 on failure\r
180  *\r
181  * This makes sense only w/ CALIBRE/DevaSys interfaces *to EEPROM reading only*\r
182  */\r
183 MTCR_API int mread64(mfile *mf, unsigned int offset, void *data, int length);\r
184 \r
185 /*\r
186  * Write up to 64 bytes, return number of succ. written bytes or -1 on failure\r
187  *\r
188  * This makes sense only w/ CALIBRE/DevaSys interfaces *to EEPROM burning only*\r
189  */\r
190 MTCR_API int mwrite64(mfile *mf, unsigned int offset, void *data, int length);\r
191 \r
192 /*\r
193  * Set a new value for i2c_slave\r
194  * Return previous value\r
195  */\r
196 MTCR_API unsigned char mset_i2c_slave(mfile *mf, unsigned char new_i2c_slave);\r
197 \r
198 /*\r
199  * get free phys. contigous pages \r
200  * order should be in range [0..9]\r
201  * the size of allocated memory will be (2^order * 4096)\r
202  * return pointer to virtual address mapped to the allocated area\r
203  * on failure returns 0 and errno is set\r
204  */\r
205 MTCR_API void *mget_free_pages (mfile *mf, unsigned int order);\r
206 \r
207 /*\r
208  * free phys. contigous pages \r
209  * order should be in range [0..9]\r
210  * vma is freed\r
211  * on success returns 0\r
212  * on failure returns -1 and errno is set\r
213  */\r
214 MTCR_API int mfree_pages (mfile *mf, void *addr, unsigned int order);\r
215 \r
216 /*\r
217  * translate virtual address to physical address\r
218  * return physical address on success, or 0 on error\r
219  */\r
220 MTCR_API unsigned long mvtop (mfile *mf, void *va);\r
221 \r
222 #ifdef __cplusplus\r
223 }\r
224 #endif\r
225 \r
226 \r
227 #endif\r