#ifndef __CC32LIB_H__
#define __CC32LIB_H__
//****************************************************************************
// Copyright (C) 2000-2004 ARW Elektronik Germany
//
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// This product is not authorized for use as critical component in
// life support systems without the express written approval of
// ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)
//
//****************************************************************************
//****************************************************************************
//
// cc32lib.h -- header for a simple access library for the
// PCICC32 PCI to CAMAC Interface
//
// $Log: libcc32.h,v $
// Revision 1.9 2005/10/03 17:46:31 klaus
// simple cosmetic changes, upgrade lib to libcc32.so.3.0.0
//
// Revision 1.8 2004/11/29 20:43:12 klaus
// added _qx functions to get Q and X for every transfer. Release libcc32.so.2.
//
// Revision 1.7 2004/08/13 19:48:25 klaus
// changed license from GPL to LGPL
//
// Revision 1.6 2004/08/12 20:00:41 klaus
// conversion to kernel-version 2.6, released version 6.0
//
// Revision 1.5 2003/05/29 08:29:08 klaus
// added _cplusplus extention
//
// Revision 1.4 2002/04/17 19:41:06 klaus
// added support for autoread
//
// Revision 1.3 2002/04/14 18:25:38 klaus
// added interrupt handling, driver 4.4. ...3.5.tar.gz
//
// Revision 1.2 2001/11/20 20:12:50 klaus
// included new header and CVS log
//
//****************************************************************************
/*--- INCLUDES --------------------------------------------------------------------------*/
#include <asm/types.h>
/*--- TYPEDEFS --------------------------------------------------------------------------*/
typedef void* CC32_HANDLE; /* type of the device handle */
/*--- DEFINES ---------------------------------------------------------------------------*/
/*--- PROTOTYPES ------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C"
{
#endif
/* open a path to a device. E.g. "/dev/pcicc32_1" */
int cc32_open(char *cszPath, CC32_HANDLE *handle);
/* close the opened path */
int cc32_close(CC32_HANDLE handle);
/* read only a word - 16 bits - from a address made out of N,A,F */
__u16 cc32_read_word(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F);
/* read only a word - 16 bits - from a address made out of N,A,F, get Q and X */
__u16 cc32_read_word_qx(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F, int *Q, int *X);
/* read a long - 32 bits - from a address made out of N,A,F and get the result Q and X */
__u32 cc32_read_long(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F);
/* read a long - 32 bits - from a address made out of N,A,F get Q and X */
__u32 cc32_read_long_qx(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F, int *Q, int *X);
/* read a long - 32 bits - without any interpretaion */
__u32 cc32_read_long_all(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F);
/* write a word - 16 bits - to a destination made out of N,A,F */
void cc32_write_word(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F, __u16 uwData);
/* write a word - 16 bits - to a destination made out of N,A,F, get Q and X */
void cc32_write_word_qx(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F, __u16 uwData, int *Q, int *X);
/* write a long - 32 bits - uninterpreted to a destination made out of N,A,F */
void cc32_write_long(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F, __u32 ulData);
/* write a long - 32 bits - uninterpreted to a destination made out of N,A,F, get Q and X */
void cc32_write_long_qx(CC32_HANDLE handle, unsigned int N, unsigned int A, unsigned int F, __u32 ulData, int *Q, int *X);
/* poll the state of the timeout line and the LAM state. The timeout line is cleared if it was set */
int cc32_poll_event(CC32_HANDLE handle, int *nTimeout, int *nLam);
/* control interrupts caused by timeouts or LAMs */
int cc32_interrupt_disable(CC32_HANDLE handle);
int cc32_interrupt_enable(CC32_HANDLE handle);
/* same as cc32_poll_event(), but wait for a state change of timeout or LAMs. */
int cc32_wait_event(CC32_HANDLE handle, int *nTimeout, int *nLam);
/* switch cc32 autoread on or off - return the last switch state */
int cc32_autoread_on(CC32_HANDLE handle);
int cc32_autoread_off(CC32_HANDLE handle);
#ifdef __cplusplus
}
#endif
#endif /* __CC32LIB_H__ */