blob: b7997c9835c2b301a497efd7d9d00384b341afda [file] [log] [blame]
Alois Schlögl2eae6bd2012-09-17 19:22:52 -07001/****************************************************************************
2** use1401.h
3** Copyright (C) Cambridge Electronic Design Ltd, 1992-2010
4** Authors: Paul Cox, Tim Bergel, Greg Smith
5** See CVS for revisions.
6**
7** Because the size of a long is different between 32-bit and 64-bit on some
8** systems, we avoid this in this interface.
9****************************************************************************/
10#ifndef __USE1401_H__
11#define __USE1401_H__
12#include "machine.h"
13
Elena Ufimtsevae4837702013-05-15 12:57:15 -040014/* Some definitions to make things compatible. If you want to use Use1401 directly */
15/* from a Windows program you should define U14_NOT_DLL, in which case you also */
16/* MUST make sure that your application startup code calls U14InitLib(). */
17/* DLL_USE1401 is defined when you are building the Use1401 dll, not otherwise. */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -070018#ifdef _IS_WINDOWS_
19#ifndef U14_NOT_DLL
20#ifdef DLL_USE1401
Elena Ufimtsevac33033d2013-05-15 17:45:56 -040021#define U14API(retType) (retType DllExport __stdcall)
Alois Schlögl2eae6bd2012-09-17 19:22:52 -070022#else
Elena Ufimtsevac33033d2013-05-15 17:45:56 -040023#define U14API(retType) (retType DllImport __stdcall)
Alois Schlögl2eae6bd2012-09-17 19:22:52 -070024#endif
25#endif
26
27#define U14ERRBASE -500
28#define U14LONG long
29#endif
30
31#ifdef LINUX
32#define U14ERRBASE -1000
33#define U14LONG int
34#endif
35
36#ifdef _QT
37#ifndef U14_NOT_DLL
38#undef U14API
Elena Ufimtsevac33033d2013-05-15 17:45:56 -040039#define U14API(retType) (retType __declspec(dllimport) __stdcall)
Alois Schlögl2eae6bd2012-09-17 19:22:52 -070040#endif
41#undef U14LONG
42#define U14LONG int
43#endif
44
45#ifndef U14API
46#define U14API(retType) retType
47#endif
48
49#ifndef U14LONG
50#define U14LONG long
51#endif
52
Elena Ufimtsevae4837702013-05-15 12:57:15 -040053/* Error codes: We need them here as user space can see them. */
54#define U14ERR_NOERROR 0 /* no problems */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -070055
Elena Ufimtsevae4837702013-05-15 12:57:15 -040056/* Device error codes, but these don't need to be extended - a succession is assumed */
57#define U14ERR_STD 4 /* standard 1401 connected */
58#define U14ERR_U1401 5 /* u1401 connected */
59#define U14ERR_PLUS 6 /* 1401 plus connected */
60#define U14ERR_POWER 7 /* Power1401 connected */
61#define U14ERR_U14012 8 /* u1401 mkII connected */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -070062#define U14ERR_POWER2 9
63#define U14ERR_U14013 10
64#define U14ERR_POWER3 11
65
Elena Ufimtsevae4837702013-05-15 12:57:15 -040066/* NBNB Error numbers need shifting as some linux error codes start at 512 */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -070067#define U14ERR(n) (n+U14ERRBASE)
68#define U14ERR_OFF U14ERR(0) /* 1401 there but switched off */
69#define U14ERR_NC U14ERR(-1) /* 1401 not connected */
70#define U14ERR_ILL U14ERR(-2) /* if present it is ill */
71#define U14ERR_NOIF U14ERR(-3) /* I/F card missing */
72#define U14ERR_TIME U14ERR(-4) /* 1401 failed to come ready */
73#define U14ERR_BADSW U14ERR(-5) /* I/F card bad switches */
74#define U14ERR_PTIME U14ERR(-6) /* 1401plus failed to come ready */
75#define U14ERR_NOINT U14ERR(-7) /* couldn't grab the int vector */
76#define U14ERR_INUSE U14ERR(-8) /* 1401 is already in use */
77#define U14ERR_NODMA U14ERR(-9) /* couldn't get DMA channel */
78#define U14ERR_BADHAND U14ERR(-10) /* handle provided was bad */
79#define U14ERR_BAD1401NUM U14ERR(-11) /* 1401 number provided was bad */
80
81#define U14ERR_NO_SUCH_FN U14ERR(-20) /* no such function */
82#define U14ERR_NO_SUCH_SUBFN U14ERR(-21) /* no such sub function */
83#define U14ERR_NOOUT U14ERR(-22) /* no room in output buffer */
84#define U14ERR_NOIN U14ERR(-23) /* no input in buffer */
85#define U14ERR_STRLEN U14ERR(-24) /* string longer than buffer */
86#define U14ERR_ERR_STRLEN U14ERR(-24) /* string longer than buffer */
87#define U14ERR_LOCKFAIL U14ERR(-25) /* failed to lock memory */
88#define U14ERR_UNLOCKFAIL U14ERR(-26) /* failed to unlock memory */
89#define U14ERR_ALREADYSET U14ERR(-27) /* area already set up */
90#define U14ERR_NOTSET U14ERR(-28) /* area not set up */
91#define U14ERR_BADAREA U14ERR(-29) /* illegal area number */
92#define U14ERR_FAIL U14ERR(-30) /* we failed for some other reason*/
93
94#define U14ERR_NOFILE U14ERR(-40) /* command file not found */
95#define U14ERR_READERR U14ERR(-41) /* error reading command file */
96#define U14ERR_UNKNOWN U14ERR(-42) /* unknown command */
97#define U14ERR_HOSTSPACE U14ERR(-43) /* not enough host space to load */
98#define U14ERR_LOCKERR U14ERR(-44) /* could not lock resource/command*/
99#define U14ERR_CLOADERR U14ERR(-45) /* CLOAD command failed */
100
101#define U14ERR_TOXXXERR U14ERR(-60) /* tohost/1401 failed */
102#define U14ERR_NO386ENH U14ERR(-80) /* not 386 enhanced mode */
103#define U14ERR_NO1401DRIV U14ERR(-81) /* no device driver */
104#define U14ERR_DRIVTOOOLD U14ERR(-82) /* device driver too old */
105
106#define U14ERR_TIMEOUT U14ERR(-90) /* timeout occurred */
107
108#define U14ERR_BUFF_SMALL U14ERR(-100) /* buffer for getstring too small */
109#define U14ERR_CBALREADY U14ERR(-101) /* there is already a callback */
110#define U14ERR_BADDEREG U14ERR(-102) /* bad parameter to deregcallback */
111#define U14ERR_NOMEMORY U14ERR(-103) /* no memory for allocation */
112
113#define U14ERR_DRIVCOMMS U14ERR(-110) /* failed talking to driver */
114#define U14ERR_OUTOFMEMORY U14ERR(-111) /* needed memory and couldnt get it*/
115
Elena Ufimtsevae4837702013-05-15 12:57:15 -0400116/* / 1401 type codes. */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700117#define U14TYPE1401 0 /* standard 1401 */
118#define U14TYPEPLUS 1 /* 1401 plus */
119#define U14TYPEU1401 2 /* u1401 */
120#define U14TYPEPOWER 3 /* power1401 */
121#define U14TYPEU14012 4 /* u1401 mk II */
122#define U14TYPEPOWER2 5 /* power1401 mk II */
123#define U14TYPEU14013 6 /* u1401-3 */
124#define U14TYPEPOWER3 7 /* power1401-3 */
125#define U14TYPEUNKNOWN -1 /* dont know */
126
Elena Ufimtsevae4837702013-05-15 12:57:15 -0400127/* Transfer flags to allow driver capabilities to be interrogated */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700128
Elena Ufimtsevae4837702013-05-15 12:57:15 -0400129/* Constants for transfer flags */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700130#define U14TF_USEDMA 1 /* Transfer flag for use DMA */
131#define U14TF_MULTIA 2 /* Transfer flag for multi areas */
132#define U14TF_FIFO 4 /* for FIFO interface card */
133#define U14TF_USB2 8 /* for USB2 interface and 1401 */
134#define U14TF_NOTIFY 16 /* for event notifications */
135#define U14TF_SHORT 32 /* for PCI can short cycle */
136#define U14TF_PCI2 64 /* for new PCI card 1401-70 */
137#define U14TF_CIRCTH 128 /* Circular-mode to host */
138#define U14TF_DIAG 256 /* Diagnostics/debug functions */
139#define U14TF_CIRC14 512 /* Circular-mode to 1401 */
140
Elena Ufimtsevae4837702013-05-15 12:57:15 -0400141/* Definitions of element sizes for DMA transfers - to allow byte-swapping */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700142#define ESZBYTES 0 /* BYTE element size value */
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400143#define ESZWORDS 1 /* unsigned short element size value */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700144#define ESZLONGS 2 /* long element size value */
145#define ESZUNKNOWN 0 /* unknown element size value */
146
Elena Ufimtsevae4837702013-05-15 12:57:15 -0400147/* These define required access types for the debug/diagnostics function */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700148#define BYTE_SIZE 1 /* 8-bit access */
149#define WORD_SIZE 2 /* 16-bit access */
150#define LONG_SIZE 3 /* 32-bit access */
151
Elena Ufimtsevae4837702013-05-15 12:57:15 -0400152/* Stuff used by U14_GetTransfer */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700153#define GET_TX_MAXENTRIES 257 /* (max length / page size + 1) */
154
155#ifdef _IS_WINDOWS_
156#pragma pack(1)
157
158typedef struct /* used for U14_GetTransfer results */
159{ /* Info on a single mapped block */
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400160 U14LONG physical;
161 U14LONG size;
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700162} TXENTRY;
163
164typedef struct TGetTxBlock /* used for U14_GetTransfer results */
165{ /* matches structure in VXD */
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400166 U14LONG size;
167 U14LONG linear;
168 short seg;
169 short reserved;
170 short avail; /* number of available entries */
171 short used; /* number of used entries */
172 TXENTRY entries[GET_TX_MAXENTRIES]; /* Array of mapped block info */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700173} TGET_TX_BLOCK;
174
175typedef TGET_TX_BLOCK *LPGET_TX_BLOCK;
176
177#pragma pack()
178#endif
179
180#ifdef LINUX
181typedef struct /* used for U14_GetTransfer results */
182{ /* Info on a single mapped block */
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400183 long long physical;
184 long size;
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700185} TXENTRY;
186
187typedef struct TGetTxBlock /* used for U14_GetTransfer results */
188{ /* matches structure in VXD */
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400189 long long linear; /* linear address */
190 long size; /* total size of the mapped area, holds id when called */
191 short seg; /* segment of the address for Win16 */
192 short reserved;
193 short avail; /* number of available entries */
194 short used; /* number of used entries */
195 TXENTRY entries[GET_TX_MAXENTRIES]; /* Array of mapped block info */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700196} TGET_TX_BLOCK;
197#endif
198
199#ifdef __cplusplus
200extern "C" {
201#endif
202
Elena Ufimtsevae4837702013-05-15 12:57:15 -0400203U14API(int) U14WhenToTimeOut(short hand); /* when to timeout in ms */
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400204U14API(short) U14PassedTime(int iTime); /* non-zero if iTime passed */
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700205
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400206U14API(short) U14LastErrCode(short hand);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700207
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400208U14API(short) U14Open1401(short n1401);
209U14API(short) U14Close1401(short hand);
210U14API(short) U14Reset1401(short hand);
211U14API(short) U14ForceReset(short hand);
212U14API(short) U14TypeOf1401(short hand);
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400213U14API(short) U14NameOf1401(short hand, char *pBuf, unsigned short wMax);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700214
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400215U14API(short) U14Stat1401(short hand);
216U14API(short) U14CharCount(short hand);
217U14API(short) U14LineCount(short hand);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700218
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400219U14API(short) U14SendString(short hand, const char *pString);
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400220U14API(short) U14GetString(short hand, char *pBuffer, unsigned short wMaxLen);
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400221U14API(short) U14SendChar(short hand, char cChar);
222U14API(short) U14GetChar(short hand, char *pcChar);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700223
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400224U14API(short) U14LdCmd(short hand, const char *command);
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400225U14API(unsigned int) U14Ld(short hand, const char *vl, const char *str);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700226
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400227U14API(short) U14SetTransArea(short hand, unsigned short wArea, void *pvBuff,
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400228 unsigned int dwLength, short eSz);
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400229U14API(short) U14UnSetTransfer(short hand, unsigned short wArea);
230U14API(short) U14SetTransferEvent(short hand, unsigned short wArea, BOOL bEvent,
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400231 BOOL bToHost, unsigned int dwStart, unsigned int dwLength);
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400232U14API(int) U14TestTransferEvent(short hand, unsigned short wArea);
233U14API(int) U14WaitTransferEvent(short hand, unsigned short wArea, int msTimeOut);
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400234U14API(short) U14GetTransfer(short hand, TGET_TX_BLOCK *pTransBlock);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700235
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400236U14API(short) U14ToHost(short hand, char *pAddrHost, unsigned int dwSize, unsigned int dw1401,
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400237 short eSz);
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400238U14API(short) U14To1401(short hand, const char *pAddrHost, unsigned int dwSize, unsigned int dw1401,
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400239 short eSz);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700240
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400241U14API(short) U14SetCircular(short hand, unsigned short wArea, BOOL bToHost, void *pvBuff,
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400242 unsigned int dwLength);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700243
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400244U14API(int) U14GetCircBlk(short hand, unsigned short wArea, unsigned int *pdwOffs);
245U14API(int) U14FreeCircBlk(short hand, unsigned short wArea, unsigned int dwOffs, unsigned int dwSize,
246 unsigned int *pdwOffs);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700247
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400248U14API(short) U14StrToLongs(const char *pszBuff, U14LONG *palNums, short sMaxLongs);
249U14API(short) U14LongsFrom1401(short hand, U14LONG *palBuff, short sMaxLongs);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700250
251U14API(void) U14SetTimeout(short hand, int lTimeout);
252U14API(int) U14GetTimeout(short hand);
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400253U14API(short) U14OutBufSpace(short hand);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700254U14API(int) U14BaseAddr1401(short hand);
255U14API(int) U14DriverVersion(short hand);
256U14API(int) U14DriverType(short hand);
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400257U14API(short) U14DriverName(short hand, char *pBuf, unsigned short wMax);
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400258U14API(short) U14GetUserMemorySize(short hand, unsigned int *pMemorySize);
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400259U14API(short) U14KillIO1401(short hand);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700260
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400261U14API(short) U14BlkTransState(short hand);
262U14API(short) U14StateOf1401(short hand);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700263
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400264U14API(short) U14Grab1401(short hand);
265U14API(short) U14Free1401(short hand);
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400266U14API(short) U14Peek1401(short hand, unsigned int dwAddr, int nSize, int nRepeats);
267U14API(short) U14Poke1401(short hand, unsigned int dwAddr, unsigned int dwValue, int nSize, int nRepeats);
268U14API(short) U14Ramp1401(short hand, unsigned int dwAddr, unsigned int dwDef, unsigned int dwEnable, int nSize, int nRepeats);
269U14API(short) U14RampAddr(short hand, unsigned int dwDef, unsigned int dwEnable, int nSize, int nRepeats);
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400270U14API(short) U14StopDebugLoop(short hand);
271U14API(short) U14GetDebugData(short hand, U14LONG *plValue);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700272
Elena Ufimtsevad9f83742013-05-15 12:57:17 -0400273U14API(short) U14StartSelfTest(short hand);
274U14API(short) U14CheckSelfTest(short hand, U14LONG *pData);
275U14API(short) U14TransferFlags(short hand);
Elena Ufimtseva4e0825f2013-05-16 12:47:05 -0400276U14API(void) U14GetErrorString(short nErr, char *pStr, unsigned short wMax);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700277U14API(int) U14MonitorRev(short hand);
278U14API(void) U14CloseAll(void);
279
Elena Ufimtseva8c79caa2013-05-16 12:47:06 -0400280U14API(short) U14WorkingSet(unsigned int dwMinKb, unsigned int dwMaxKb);
Alois Schlögl2eae6bd2012-09-17 19:22:52 -0700281U14API(int) U14InitLib(void);
282
283#ifdef __cplusplus
284}
285#endif
286
287#endif /* End of ifndef __USE1401_H__ */
Elena Ufimtsevad1cc1b82013-05-15 12:57:16 -0400288