diff options
author | Alois Schlögl <alois.schloegl@ist.ac.at> | 2012-09-17 19:22:52 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-17 19:45:28 -0700 |
commit | 2eae6bdc12f4e49b7f94f032b82d664dcf3881bc (patch) | |
tree | 15158b8c45927f10f964b11b538725bcf8e1a695 /drivers/staging/ced1401/use1401.h | |
parent | 57991b6bfc2b0faafb7d42edbd1673903d76b853 (diff) | |
download | kernel_goldelico_gta04-2eae6bdc12f4e49b7f94f032b82d664dcf3881bc.zip kernel_goldelico_gta04-2eae6bdc12f4e49b7f94f032b82d664dcf3881bc.tar.gz kernel_goldelico_gta04-2eae6bdc12f4e49b7f94f032b82d664dcf3881bc.tar.bz2 |
Staging: add ced1401 USB driver
This was imported from the
http://pub.ist.ac.at/~schloegl/src/ced1401/.git git repo at the request
of Alois. The driver originally came from Cambridge Electronic Design
Ltd and was authored by Greg P Smith and others, but Alois did the
maintance work to get it into a semi-building state and pushed to get it
into the main kernel tree here.
Cc: Alois Schlögl <alois.schloegl@ist.ac.at>
Cc: Greg P. Smith <greg@ced.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/ced1401/use1401.h')
-rw-r--r-- | drivers/staging/ced1401/use1401.h | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/drivers/staging/ced1401/use1401.h b/drivers/staging/ced1401/use1401.h new file mode 100644 index 0000000..86294e2 --- /dev/null +++ b/drivers/staging/ced1401/use1401.h @@ -0,0 +1,287 @@ +/**************************************************************************** +** use1401.h +** Copyright (C) Cambridge Electronic Design Ltd, 1992-2010 +** Authors: Paul Cox, Tim Bergel, Greg Smith +** See CVS for revisions. +** +** Because the size of a long is different between 32-bit and 64-bit on some +** systems, we avoid this in this interface. +****************************************************************************/ +#ifndef __USE1401_H__ +#define __USE1401_H__ +#include "machine.h" + +// Some definitions to make things compatible. If you want to use Use1401 directly +// from a Windows program you should define U14_NOT_DLL, in which case you also +// MUST make sure that your application startup code calls U14InitLib(). +// DLL_USE1401 is defined when you are building the Use1401 dll, not otherwise. +#ifdef _IS_WINDOWS_ +#ifndef U14_NOT_DLL +#ifdef DLL_USE1401 +#define U14API(retType) retType DllExport __stdcall +#else +#define U14API(retType) retType DllImport __stdcall +#endif +#endif + +#define U14ERRBASE -500 +#define U14LONG long +#endif + +#ifdef LINUX +#define U14ERRBASE -1000 +#define U14LONG int +#endif + +#ifdef _QT +#ifndef U14_NOT_DLL +#undef U14API +#define U14API(retType) retType __declspec(dllimport) __stdcall +#endif +#undef U14LONG +#define U14LONG int +#endif + +#ifndef U14API +#define U14API(retType) retType +#endif + +#ifndef U14LONG +#define U14LONG long +#endif + +/// Error codes: We need them here as user space can see them. +#define U14ERR_NOERROR 0 // no problems + +/// Device error codes, but these don't need to be extended - a succession is assumed +#define U14ERR_STD 4 // standard 1401 connected +#define U14ERR_U1401 5 // u1401 connected +#define U14ERR_PLUS 6 // 1401 plus connected +#define U14ERR_POWER 7 // Power1401 connected +#define U14ERR_U14012 8 // u1401 mkII connected +#define U14ERR_POWER2 9 +#define U14ERR_U14013 10 +#define U14ERR_POWER3 11 + +/// NBNB Error numbers need shifting as some linux error codes start at 512 +#define U14ERR(n) (n+U14ERRBASE) +#define U14ERR_OFF U14ERR(0) /* 1401 there but switched off */ +#define U14ERR_NC U14ERR(-1) /* 1401 not connected */ +#define U14ERR_ILL U14ERR(-2) /* if present it is ill */ +#define U14ERR_NOIF U14ERR(-3) /* I/F card missing */ +#define U14ERR_TIME U14ERR(-4) /* 1401 failed to come ready */ +#define U14ERR_BADSW U14ERR(-5) /* I/F card bad switches */ +#define U14ERR_PTIME U14ERR(-6) /* 1401plus failed to come ready */ +#define U14ERR_NOINT U14ERR(-7) /* couldn't grab the int vector */ +#define U14ERR_INUSE U14ERR(-8) /* 1401 is already in use */ +#define U14ERR_NODMA U14ERR(-9) /* couldn't get DMA channel */ +#define U14ERR_BADHAND U14ERR(-10) /* handle provided was bad */ +#define U14ERR_BAD1401NUM U14ERR(-11) /* 1401 number provided was bad */ + +#define U14ERR_NO_SUCH_FN U14ERR(-20) /* no such function */ +#define U14ERR_NO_SUCH_SUBFN U14ERR(-21) /* no such sub function */ +#define U14ERR_NOOUT U14ERR(-22) /* no room in output buffer */ +#define U14ERR_NOIN U14ERR(-23) /* no input in buffer */ +#define U14ERR_STRLEN U14ERR(-24) /* string longer than buffer */ +#define U14ERR_ERR_STRLEN U14ERR(-24) /* string longer than buffer */ +#define U14ERR_LOCKFAIL U14ERR(-25) /* failed to lock memory */ +#define U14ERR_UNLOCKFAIL U14ERR(-26) /* failed to unlock memory */ +#define U14ERR_ALREADYSET U14ERR(-27) /* area already set up */ +#define U14ERR_NOTSET U14ERR(-28) /* area not set up */ +#define U14ERR_BADAREA U14ERR(-29) /* illegal area number */ +#define U14ERR_FAIL U14ERR(-30) /* we failed for some other reason*/ + +#define U14ERR_NOFILE U14ERR(-40) /* command file not found */ +#define U14ERR_READERR U14ERR(-41) /* error reading command file */ +#define U14ERR_UNKNOWN U14ERR(-42) /* unknown command */ +#define U14ERR_HOSTSPACE U14ERR(-43) /* not enough host space to load */ +#define U14ERR_LOCKERR U14ERR(-44) /* could not lock resource/command*/ +#define U14ERR_CLOADERR U14ERR(-45) /* CLOAD command failed */ + +#define U14ERR_TOXXXERR U14ERR(-60) /* tohost/1401 failed */ +#define U14ERR_NO386ENH U14ERR(-80) /* not 386 enhanced mode */ +#define U14ERR_NO1401DRIV U14ERR(-81) /* no device driver */ +#define U14ERR_DRIVTOOOLD U14ERR(-82) /* device driver too old */ + +#define U14ERR_TIMEOUT U14ERR(-90) /* timeout occurred */ + +#define U14ERR_BUFF_SMALL U14ERR(-100) /* buffer for getstring too small */ +#define U14ERR_CBALREADY U14ERR(-101) /* there is already a callback */ +#define U14ERR_BADDEREG U14ERR(-102) /* bad parameter to deregcallback */ +#define U14ERR_NOMEMORY U14ERR(-103) /* no memory for allocation */ + +#define U14ERR_DRIVCOMMS U14ERR(-110) /* failed talking to driver */ +#define U14ERR_OUTOFMEMORY U14ERR(-111) /* needed memory and couldnt get it*/ + +/// 1401 type codes. +#define U14TYPE1401 0 /* standard 1401 */ +#define U14TYPEPLUS 1 /* 1401 plus */ +#define U14TYPEU1401 2 /* u1401 */ +#define U14TYPEPOWER 3 /* power1401 */ +#define U14TYPEU14012 4 /* u1401 mk II */ +#define U14TYPEPOWER2 5 /* power1401 mk II */ +#define U14TYPEU14013 6 /* u1401-3 */ +#define U14TYPEPOWER3 7 /* power1401-3 */ +#define U14TYPEUNKNOWN -1 /* dont know */ + +/// Transfer flags to allow driver capabilities to be interrogated + +/// Constants for transfer flags +#define U14TF_USEDMA 1 /* Transfer flag for use DMA */ +#define U14TF_MULTIA 2 /* Transfer flag for multi areas */ +#define U14TF_FIFO 4 /* for FIFO interface card */ +#define U14TF_USB2 8 /* for USB2 interface and 1401 */ +#define U14TF_NOTIFY 16 /* for event notifications */ +#define U14TF_SHORT 32 /* for PCI can short cycle */ +#define U14TF_PCI2 64 /* for new PCI card 1401-70 */ +#define U14TF_CIRCTH 128 /* Circular-mode to host */ +#define U14TF_DIAG 256 /* Diagnostics/debug functions */ +#define U14TF_CIRC14 512 /* Circular-mode to 1401 */ + +/// Definitions of element sizes for DMA transfers - to allow byte-swapping +#define ESZBYTES 0 /* BYTE element size value */ +#define ESZWORDS 1 /* WORD element size value */ +#define ESZLONGS 2 /* long element size value */ +#define ESZUNKNOWN 0 /* unknown element size value */ + +/// These define required access types for the debug/diagnostics function +#define BYTE_SIZE 1 /* 8-bit access */ +#define WORD_SIZE 2 /* 16-bit access */ +#define LONG_SIZE 3 /* 32-bit access */ + +/// Stuff used by U14_GetTransfer +#define GET_TX_MAXENTRIES 257 /* (max length / page size + 1) */ + +#ifdef _IS_WINDOWS_ +#pragma pack(1) + +typedef struct /* used for U14_GetTransfer results */ +{ /* Info on a single mapped block */ + U14LONG physical; + U14LONG size; +} TXENTRY; + +typedef struct TGetTxBlock /* used for U14_GetTransfer results */ +{ /* matches structure in VXD */ + U14LONG size; + U14LONG linear; + short seg; + short reserved; + short avail; /* number of available entries */ + short used; /* number of used entries */ + TXENTRY entries[GET_TX_MAXENTRIES]; /* Array of mapped block info */ +} TGET_TX_BLOCK; + +typedef TGET_TX_BLOCK *LPGET_TX_BLOCK; + +#pragma pack() +#endif + +#ifdef LINUX +typedef struct /* used for U14_GetTransfer results */ +{ /* Info on a single mapped block */ + long long physical; + long size; +} TXENTRY; + +typedef struct TGetTxBlock /* used for U14_GetTransfer results */ +{ /* matches structure in VXD */ + long long linear; /* linear address */ + long size; /* total size of the mapped area, holds id when called */ + short seg; /* segment of the address for Win16 */ + short reserved; + short avail; /* number of available entries */ + short used; /* number of used entries */ + TXENTRY entries[GET_TX_MAXENTRIES]; /* Array of mapped block info */ +} TGET_TX_BLOCK; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +U14API(int) U14WhenToTimeOut(short hand); // when to timeout in ms +U14API(short) U14PassedTime(int iTime); // non-zero if iTime passed + +U14API(short) U14LastErrCode(short hand); + +U14API(short) U14Open1401(short n1401); +U14API(short) U14Close1401(short hand); +U14API(short) U14Reset1401(short hand); +U14API(short) U14ForceReset(short hand); +U14API(short) U14TypeOf1401(short hand); +U14API(short) U14NameOf1401(short hand, char* pBuf, WORD wMax); + +U14API(short) U14Stat1401(short hand); +U14API(short) U14CharCount(short hand); +U14API(short) U14LineCount(short hand); + +U14API(short) U14SendString(short hand, const char* pString); +U14API(short) U14GetString(short hand, char* pBuffer, WORD wMaxLen); +U14API(short) U14SendChar(short hand, char cChar); +U14API(short) U14GetChar(short hand, char* pcChar); + +U14API(short) U14LdCmd(short hand, const char* command); +U14API(DWORD) U14Ld(short hand, const char* vl, const char* str); + +U14API(short) U14SetTransArea(short hand, WORD wArea, void *pvBuff, + DWORD dwLength, short eSz); +U14API(short) U14UnSetTransfer(short hand, WORD wArea); +U14API(short) U14SetTransferEvent(short hand, WORD wArea, BOOL bEvent, + BOOL bToHost, DWORD dwStart, DWORD dwLength); +U14API(int) U14TestTransferEvent(short hand, WORD wArea); +U14API(int) U14WaitTransferEvent(short hand, WORD wArea, int msTimeOut); +U14API(short) U14GetTransfer(short hand, TGET_TX_BLOCK *pTransBlock); + +U14API(short) U14ToHost(short hand, char* pAddrHost,DWORD dwSize,DWORD dw1401, + short eSz); +U14API(short) U14To1401(short hand, const char* pAddrHost,DWORD dwSize,DWORD dw1401, + short eSz); + +U14API(short) U14SetCircular(short hand, WORD wArea, BOOL bToHost, void *pvBuff, + DWORD dwLength); + +U14API(int) U14GetCircBlk(short hand, WORD wArea, DWORD *pdwOffs); +U14API(int) U14FreeCircBlk(short hand, WORD wArea, DWORD dwOffs, DWORD dwSize, + DWORD *pdwOffs); + +U14API(short) U14StrToLongs(const char* pszBuff, U14LONG *palNums, short sMaxLongs); +U14API(short) U14LongsFrom1401(short hand, U14LONG *palBuff, short sMaxLongs); + +U14API(void) U14SetTimeout(short hand, int lTimeout); +U14API(int) U14GetTimeout(short hand); +U14API(short) U14OutBufSpace(short hand); +U14API(int) U14BaseAddr1401(short hand); +U14API(int) U14DriverVersion(short hand); +U14API(int) U14DriverType(short hand); +U14API(short) U14DriverName(short hand, char* pBuf, WORD wMax); +U14API(short) U14GetUserMemorySize(short hand, DWORD *pMemorySize); +U14API(short) U14KillIO1401(short hand); + +U14API(short) U14BlkTransState(short hand); +U14API(short) U14StateOf1401(short hand); + +U14API(short) U14Grab1401(short hand); +U14API(short) U14Free1401(short hand); +U14API(short) U14Peek1401(short hand, DWORD dwAddr, int nSize, int nRepeats); +U14API(short) U14Poke1401(short hand, DWORD dwAddr, DWORD dwValue, int nSize, int nRepeats); +U14API(short) U14Ramp1401(short hand, DWORD dwAddr, DWORD dwDef, DWORD dwEnable, int nSize, int nRepeats); +U14API(short) U14RampAddr(short hand, DWORD dwDef, DWORD dwEnable, int nSize, int nRepeats); +U14API(short) U14StopDebugLoop(short hand); +U14API(short) U14GetDebugData(short hand, U14LONG *plValue); + +U14API(short) U14StartSelfTest(short hand); +U14API(short) U14CheckSelfTest(short hand, U14LONG *pData); +U14API(short) U14TransferFlags(short hand); +U14API(void) U14GetErrorString(short nErr, char* pStr, WORD wMax); +U14API(int) U14MonitorRev(short hand); +U14API(void) U14CloseAll(void); + +U14API(short) U14WorkingSet(DWORD dwMinKb, DWORD dwMaxKb); +U14API(int) U14InitLib(void); + +#ifdef __cplusplus +} +#endif + +#endif /* End of ifndef __USE1401_H__ */ |