Subversion Repositories f9daq

Compare Revisions

No changes between revisions

Ignore whitespace Rev 8 → Rev 9

/pcivme-3.2/pvmon/pvmon.c
0,0 → 1,1728
//-------------------------------------------------------------------------------------------
// pvmon.c - the body of a simple tool to access VME BUS resources
//
// (c) 1999-2002 ARW Elektronik
//
// this source code is published under GPL (Open Source). You can use, redistrubute and
// modify it unless this header is not modified or deleted. No warranty is given that
// this software will work like expected.
// This product is not authorized for use as critical component in life support systems
// wihout the express written approval of ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// $Log: pvmon.c,v $
// Revision 1.6 2002/11/14 19:57:56 klaus
// improvement, still bugs active
//
// Revision 1.5 2002/10/20 18:07:48 klaus
// mostly working alpha version
//
// Revision 1.4 2002/10/20 11:49:33 klaus
// first parts working
//
// Revision 1.3 2002/10/19 09:47:30 klaus
// first success compiling project
//
// Revision 1.2 2002/10/19 09:44:38 klaus
// first success compiling project
//
// Revision 1.1.1.1 2002/10/18 22:14:29 klaus
//
// first parts written and published from
// Sven Hannover, Sven Tuecke, Klaus Hitschler, Ralf Dux 1991
//
 
//-------------------------------------------------------------------------------------------
// INCLUDES
//
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
 
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#include <slang.h>
 
#include <../driver/vme.h> /* constants about VME BUS */
#include <mbuffer.h> /* simple message buffering */
#include <pcilibLx.h> /* device access functions */
 
//-------------------------------------------------------------------------------------------
// DEFINES
//
#define VERSION "6.0Lx"
#define True 1
#define False 0
 
#if !defined(FALSE) || !defined(TRUE)
#define FALSE False
#define TRUE True
#endif
 
#define DEVPATH " - No input neccessary!" // not used
#define DEFDEVICENAME "/dev/vmemm_1"
#define DEFAULT_ADDRESS 0x00000000 // default VME window base address
#define DEFAULT_MODIFIER Std_NoPriv_Data // default address modifier
#define DEFAULT_TYPE sizeof(char) // default data BUS access width
#define MAX_TIMEOUT_LOOPS 100000 // maximum loops for waiting reset finished
 
//-------------------------------------------------------------------------------------------
// TYPEDEFS
//
typedef char STRG[BUFFERLENGTH]; /* Allgemeiner Stringtyp */
 
//-------------------------------------------------------------------------------------------
// LOCALS
//
static char UpCase(char Zchn);
static char *ParaStr(int Num);
static unsigned long ParaNum(int Num);
static void SetModifier(void);
static void PrintItem(unsigned long Addr, char Mode, unsigned char *Asc);
static char GetZug(char *Zug);
static void Dump(void);
static char GetStrg(STRG Stg, int Len);
static void Examine(void);
static void Move(void);
static void Fill(void);
static void Hilfe(void);
static int InitAt(char *szDevicePath, int *nInterfaceHandle);
static void CfgName(STRG Stg);
static void LoadKonfig(void);
static void Konfig(void);
static void ReadIrqVect(void);
static void JumpToDos(void);
static void Raus(void);
static void SearchPort(char *Art,
int Anz,
unsigned short modf,
void(*SFunc)(int nHandle, unsigned long Adr,unsigned short AModifier));
static void SearchPorts(void);
static unsigned GibNum(char **PSt,char Anz);
static int _ReadFile(void);
static void SeekPatt(void);
static void TestSet(void);
static void ResetVme(void);
static int OutHex(FILE *OuF, int Siz, unsigned long Adr, int Typ, char Buf[]);
static int _WriteFile(void);
static void ShowModifier(int Mode);
static void ShowRegister(void);
static int HauptMenue(STRG Stg);
static void MyExit(int);
static void SysFail(void);
 
//-------------------------------------------------------------------------------------------
// EXTERNALS
//
 
//-------------------------------------------------------------------------------------------
// GLOBALS
//
static unsigned short AdrMode = Short_NoPriv; /* Mein initialer Adressmodifier */
static char DefZug = 'B'; /* Default Zugriff */
static char DefVec = 'B'; /* Default Zugriff IrqVecs */
static char **ArgV; /* ArgV aus main() */
static STRG InStg; /* Allgemeiner Eingabestring */
 
static char *TsT;
static char Abbruch = 0; /* verzweig wg. SIGINT */
 
static int nInterfaceHandle; /* handle of device */
static char *cszDevicePath; /* path of device */
static int WordMode; /* mode of VME path operation */
 
static char localBuffer[BUFFERLENGTH] = DEFDEVICENAME;
 
//-------------------------------------------------------------------------------------------
// FUNCTIONS
//
//-----------------------------------------------------------------------------
// functions to emulate for this platform
static int getch(void)
{
return SLang_getkey();
}
 
 
static void strlwr(char *str)
{
int i;
char *ptr = str;
 
for (i = 0; ((i < BUFFERLENGTH) && (*ptr)); i++)
{
*ptr = tolower(*ptr);
ptr++;
}
}
 
static int _gets(char *str)
{
if (fgets(str, BUFFERLENGTH, (FILE *)stdin) == NULL)
return EINVAL;
else
{
// remove '\n' from string
int i;
char *ptr = str;
 
for (i = 0; i < BUFFERLENGTH; i++, ptr++)
{
if (*ptr == '\n')
{
*ptr = 0;
break;
}
}
return 0;
}
}
 
//-----------------------------------------------------------------------------
// get out of here
static void Raus(void)
{
DeInit_Interface(nInterfaceHandle);
exit(0);
}
 
//-----------------------------------------------------------------------------
// return the uppercase char
static char UpCase(char Zchn) /* Upcase eines Zeichens */
{
return((Zchn >= 'a' && Zchn <= 'z') ? Zchn - 0x20 : Zchn);
}
 
//-----------------------------------------------------------------------------
// get the n-th parameter as string
static char *ParaStr(int Num) /* Hole n-ten Parameter */
{ /* als String aus InStg */
char *PSt; /* Evt. Ergebnis NULL bei (Num>1) */
 
PSt=InStg; /* Fange bei InStg[0] an */
if (Num > 1)
{ /* Folgeparameter: suche Anfang */
if (*PSt!='\0')
{ /* Leerstring ignorieren */
PSt++;
switch (*PSt)
{ /* Teste evt. Modusparameter */
case 'L':
case 'W':
case 'B':
case 'X':
case 'H':PSt++;
}
 
if (*PSt==' ') PSt++; /* Evt. Delimiter ueberspringen */
}
 
if (*PSt=='\0') PSt=NULL; /* Kein weiterer Parameter da */
else
{
while (PSt!=NULL && Num>2)
{
PSt=strchr(PSt, ' '); /* Suche nach Delimiter */
if (PSt!=NULL) PSt++; /* Delimiter ueberspringen */
Num--; /* Naechster Parameter da */
} /* while */
} /* else */
} /* if */
return(PSt);
}
 
//-----------------------------------------------------------------------------
// get the n-th parameter as unsigned long
static unsigned long ParaNum(int Num) /* Hole n-ten Parameter */
{ /* als Zahl aus InStg */
unsigned long Erg;
char *PSt;
 
PSt=ParaStr(Num); /* Hole Parameterstring */
Erg=0; /* Hole Word aus String */
if (PSt!=NULL) sscanf(PSt, "%lx", &Erg);
return(Erg);
}
 
//-----------------------------------------------------------------------------
// set the address modifier for following accesses
static void SetModifier(void) /* Neuen Adressmodifier setzen */
{
int Idx;
 
if (ParaStr(1)[1]=='H')
{ /* Wenn Hilfsfunktion gewuenscht */
if (ParaStr(2)==NULL)
{ /* Noch ein Parameter da? */
for (Idx=0; Idx<0x40; Idx++)
{ /* Nein: Liste ausgeben */
ShowModifier(Idx);
if ((Idx == 0x10) || (Idx == 0x20) || (Idx == 0x30))
{
printf("\n go on ?\r");
getch();
}
}
printf("\n");
}
else ShowModifier((int)ParaNum(2)); /* Nur gewuenschten Mode anzeigen */
}
else
{
if (ParaStr(2) != NULL)
{
if (ParaStr(1)[1] == 'M')
{
AdrMode=(int)ParaNum(3) & 0x3f;
}
else
{
AdrMode=(int)ParaNum(2) & 0x3f; /* Adressmodifier merken */
}
}
ShowModifier(AdrMode); /* Status Adressmodifier zeigen */
} /* else */
}
 
//-----------------------------------------------------------------------------
// print out an item
static void PrintItem(unsigned long Addr, char Mode, unsigned char *Asc)
{
unsigned long xl;
unsigned int xi;
unsigned char xc;
 
switch (Mode)
{
case 'L': xl=ReadLong(nInterfaceHandle, Addr, AdrMode);
if (GetError(nInterfaceHandle))
{
ClearError(nInterfaceHandle); printf("******** ");
}
else
{
printf("%08lx ", xl);
if (Asc != NULL) *(unsigned long *)Asc=xl;
}
break;
case 'W': xi=ReadWord(nInterfaceHandle, Addr, AdrMode);
if (GetError(nInterfaceHandle))
{
ClearError(nInterfaceHandle); printf("**** ");
}
else
{
printf("%04hx ", xi);
if (Asc != NULL) *(unsigned short *)Asc=xi;
}
break;
case 'B': xc=ReadByte(nInterfaceHandle, Addr, AdrMode);
if (GetError(nInterfaceHandle))
{
ClearError(nInterfaceHandle); printf("**");
}
else
{
printf("%02hx", xc);
if (Asc != NULL) *Asc=xc;
}
break;
}; /* switch */
}
 
//-----------------------------------------------------------------------------
// test whether byte word or long access
static char GetZug(char *Zug) /* Moduszeichen feststellen */
{
switch (ParaStr(1)[1])
{ /* Moduszchn ist angegeben */
case 'L':
case 'W':
case 'B':*Zug = ParaStr(1)[1]; /* Neues Moduszchn festlegen */
}
return(*Zug);
}
 
//-----------------------------------------------------------------------------
// get or set SYSFAIL
static void SysFail(void)
{
if (ParaStr(2) != NULL)
{
if (ParaNum(2) > 0)
SetSfail(nInterfaceHandle);
else
ClrSfail(nInterfaceHandle);
}
 
if (PollSfail(nInterfaceHandle))
printf("SYSFAIL deasserted\n");
else
printf("SYSFAIL asserted\n");
}
 
 
//-----------------------------------------------------------------------------
// dump a range of memory
static void Dump(void) /* Ausgabe eines Bereichs */
{
static unsigned long DefVon=0; /* Default Addr fuer Dump */
 
unsigned long Bis; /* Bis wohin ausgeben */
unsigned int Len; /* Wieviel Bytes/Ausgabe */
unsigned int Idx; /* Index */
char Asc[16]; /* ohne static gehts bei dw nicht */
 
if (ParaStr(2) != NULL) /* Von-Adresse angegeben? */
DefVon=ParaNum(2);
Len=1;
 
switch (GetZug(&DefZug))
{ /* Zugriffsmodus festlegen */
case 'L':Len+=2; /* Auf Long-Adresse biegen */
case 'W':Len++; /* Auf Wort-Adresse biegen */
}
 
DefVon&=-(long)Len; /* Adressen geradebiegen */
if (ParaStr(3) != NULL)
{ /* Bis-Adresse angegeben? */
Bis=ParaNum(3);
}
else
Bis=(DefVon+0x7f) | 0x0f; /* Default fuer Bis errechnen */
 
printf("%08lx: ", DefVon);
for (Idx=0; Idx < (DefVon & 0x0f)/Len*(2*Len+1); Idx++)
printf(" ");
 
memset(Asc, ' ', sizeof(Asc)); /* Initialize String to Spaces */
while ((True) && (!Abbruch))
{
PrintItem(DefVon, DefZug, /* Gebe eine Speicherstelle aus */
&Asc[DefVon & 0x0f]); /* Merke Zeichen in Asc */
DefVon+=Len; /* Zaehler erhoehen */
 
if ((DefVon > Bis) || (!(DefVon & 0x0f)))
{
printf(" ");
for (Idx=0; Idx < sizeof(Asc); Idx++)
{
if (Asc[Idx] < ' ') printf("."); /* Ascii-String ausgeben */
else printf("%c", Asc[Idx]); /* Ctrl-Zeichen als Punkte */
}
 
printf("\n");
if (DefVon <= Bis)
{
printf("%08lx: ", DefVon); /* Neue Zeile bei 16er-Grenze */
memset(Asc, ' ', sizeof(Asc)); /* Init String */
}
else return; /* Ausstieg */
}
else
{ /* Sonst Leerzeichen ausgeben */
printf(((DefVon & 0x0f) == 0x08) ? "|":" ");
}
} /* while */
}
 
//-----------------------------------------------------------------------------
// read a string with editing functions
static char GetStrg(STRG Stg, int Len) /* Lese String ein bis Spc */
{
int Idx; /* Zugriffsindex */
char Zch; /* Eingabezeichen */
 
Idx=0; /* Vorne anfangen */
do
{
Zch=(char)getch(); /* Hole ein Zeichen */
if ((unsigned char)Zch >' ' && Zch!='\t')
{
if (Idx<Len)
{
printf("%c",Zch); /* Zeichen ok, Ausgeben */
Stg[Idx++]=Zch; /* Zeichen ablegen */
}
}
else
{
switch (Zch)
{
case '\b':if (Idx)
{ /* Backspace=Delete? */
Idx--; /* Loesche Zeichen aus String */
printf("\b \b"); /* und vom Bildschirm */
}
case '\t':
case '\r':break; /* Return? Endezeichen 13 */
default:Zch=0; /* Ende mit Endezeichen 0 */
} /* switch */
} /* else */
} while (Zch && Zch!='\r' && Zch!='\n');
 
Stg[Idx]='\0'; /* Stringende eintragen */
return(Zch); /* Returncode = Abschlusstaste */
}
 
//-----------------------------------------------------------------------------
// examine a memory location
static void Examine(void) /* Speicherbereich aendern */
{
unsigned long DefVon; /* Anfangsadresse */
unsigned long Inh; /* Neuer Inhalt */
int Len; /* Item-Laenge */
int Idx; /* Index */
char End; /* Endmodus */
STRG Stg; /* Eingabestring */
 
if (ParaStr(2)!=NULL)
{ /* Adresse benoetigt */
Len=1;
switch (GetZug(&DefZug))
{ /* Zugriffsmodus festlegen */
case 'L':Len+=2; /* Auf Long-Adresse biegen */
case 'W':Len++; /* Auf Wort-Adresse biegen */
}
DefVon=ParaNum(2) & -(long)Len; /* Adressen geradebiegen */
if (ParaStr(3)!=NULL)
{ /* Wert angegeben? */
Inh=ParaNum(3); /* Hole auszugebenden Wert */
switch (DefZug)
{
case 'L': WriteLong(nInterfaceHandle, DefVon,Inh,AdrMode);
break;
case 'W': WriteWord(nInterfaceHandle, DefVon,(short)Inh,AdrMode);
break;
case 'B': WriteByte(nInterfaceHandle, DefVon,(char)Inh,AdrMode);
break;
}; /* switch */
 
if (GetError(nInterfaceHandle))
{ /* Fehlerpruefung: VME-Transfer ok? */
ClearError(nInterfaceHandle); /* Zuruecksetzen Fehlerflag */
printf("Error\n"); /* Zugriff gescheitert */
}
}
else
{
SLang_init_tty(-1, 0, 1);
SLtt_get_terminfo();
End='\n'; /* Bei Einstieg drucke Adresse */
do
{
if (End=='\n' || End=='\177' || !(DefVon % 8))
{
if (End!='\n') printf("\n"); /* Bei Einstieg nicht <CRLF> */
printf("%08lx: ", DefVon); /* Adresse ausgeben */
}
 
PrintItem(DefVon,DefZug,NULL); /* Gebe eine Speicherstelle aus */
printf(".");
SLtt_flush_output();
 
End=GetStrg(Stg,Len << 1); /* Hole begrenzte Eingabezeile */
 
for (Idx=strlen(Stg); Idx<2+(Len << 1); Idx++)
printf(" ");
if (sscanf(Stg,"%lx",&Inh)>0)
{ /* Hexzahl rausholen und ausgeben */
switch (DefZug)
{
case 'L': WriteLong(nInterfaceHandle, DefVon,Inh,AdrMode);
break;
case 'W': WriteWord(nInterfaceHandle, DefVon,(short)Inh,AdrMode);
break;
case 'B': WriteByte(nInterfaceHandle, DefVon,(char)Inh,AdrMode);
break;
}; /* switch */
 
if (GetError(nInterfaceHandle))
ClearError(nInterfaceHandle);/* Fehlerpruefung: VME-Transfer ok? */
} /* if sscanf */
 
if (End == '\177') DefVon-=Len;/* Naechste Speicherzelle ansteuern */
else DefVon+=Len;
} while (End!='\r');
/* Ende bei <CR> */
printf("\n");
 
SLang_reset_tty();
} /* else */
} /* if */
else printf("\a"); /* Fehler: zuwenig Parameter */
}
 
//-----------------------------------------------------------------------------
// fill a range of memory
static void Fill(void) /* Fuellt Speicherbereich mit Wert */
{
char DefZug; /* Zugriffsart */
int Len; /* Item Laenge */
unsigned long Idx; /* Index */
unsigned long End; /* Endadresse */
unsigned long Patt; /* Fuellmuster */
unsigned char Merk_error = 0; /* Haelt error flag */
 
DefZug=' '; /* Modus muss angeben werden */
if (GetZug(&DefZug)!=' ' && ParaStr(4)!=NULL)
{
Len=1;
switch (GetZug(&DefZug))
{ /* Zugriffsmodus festlegen */
case 'L':Len+=2; /* Auf Long-Adresse biegen */
case 'W':Len++; /* Auf Wort-Adresse biegen */
}
Idx=ParaNum(2) & -(long)Len; /* Adressen geradebiegen */
End=ParaNum(3); /* Endadresse festlegen */
Patt=ParaNum(4); /* Pattern merken (geht schneller) */
 
while ((Idx<=End) && (!Abbruch))
{
switch (DefZug)
{
case 'L':WriteLong(nInterfaceHandle, Idx, Patt, AdrMode);
break;
case 'W':WriteWord(nInterfaceHandle, Idx, (short)Patt, AdrMode);
break;
case 'B':WriteByte(nInterfaceHandle, Idx, (char)Patt, AdrMode);
break;
} /* switch */
 
if (GetError(nInterfaceHandle))
{
ClearError(nInterfaceHandle); /* Fehler abfangen */
Merk_error = 1;
}
if ((Idx & 0xffl)==0)
{ /* Ermoegliche Ctrl-C */
printf("\r");
}
Idx+=Len;
} /* while */
if (Merk_error) printf("--> Memory fill failed\a\n");
}
else printf("\a");
}
 
//-----------------------------------------------------------------------------
// moves a range of memory
static void Move(void) /* Schiebt Speicherbereich */
{
char DefZug; /* Zugriffsart */
int Len; /* Item Laenge */
unsigned long Idx; /* Index */
unsigned long End; /* Endadresse */
unsigned long Dest; /* Zieladresse */
unsigned long Wert; /* Kopiewert */
unsigned char Merk_error = 0; /* Haelt error flag */
 
 
DefZug=' '; /* Modus muss angeben werden */
if (GetZug(&DefZug)!=' ' && ParaStr(4)!=NULL)
{
Len=1;
switch (GetZug(&DefZug))
{ /* Zugriffsmodus festlegen */
case 'L':Len+=2; /* Auf Long-Adresse biegen */
case 'W':Len++; /* Auf Wort-Adresse biegen */
}
Idx=ParaNum(2) & -(long)Len; /* Adressen geradebiegen */
End=ParaNum(3); /* Endadresse festlegen */
Dest=ParaNum(4); /* Zieladresse setzen */
 
while ((Idx<=End) && (!Abbruch))
{
switch (DefZug)
{
case 'L': {
Wert = ReadLong(nInterfaceHandle, Idx, AdrMode);
WriteLong(nInterfaceHandle, Dest, Wert, AdrMode);
}
break;
case 'W': {
Wert = ReadWord(nInterfaceHandle, Idx, AdrMode);
WriteWord(nInterfaceHandle, Dest, (short)Wert, AdrMode);
}
break;
case 'B': {
Wert = ReadByte(nInterfaceHandle, Idx, AdrMode);
WriteByte(nInterfaceHandle, Dest, (char)Wert, AdrMode);
}
break;
} /* switch */
 
if (GetError(nInterfaceHandle))
{
ClearError(nInterfaceHandle); /* Fehler abfangen */
Merk_error = 1;
}
 
if ((Idx & 0xffl)==0)
{ /* Ermoegliche Ctrl-C */
printf("\r");
}
 
Idx+=Len;
Dest+=Len;
} /* while */
if (Merk_error) printf("--> Memory move failed\a\n");
}
else printf("\a");
}
 
//-----------------------------------------------------------------------------
// print out help to user
static void Hilfe(void)
{
printf("a[h] [adrmode]\t\t: Change address modifiers, h=help\n");
printf("c\t\t\t: Configure interface\n");
printf("d[m] [start] [end]\t: Dump memory area\n");
printf("e[m] <start> [value]\t: Examine or change memory area\n");
printf("f<m> <start> <end> <x>\t: Fill memory from <start> til <end> with <x>\n");
printf("g<m> <st> <en> [l] [x]\t: Generate random memory test. (loop l, seed x)\n");
printf("h\t\t\t: This help\n");
printf("i\t\t\t: Interface init\n");
printf("l[m]\t\t\t: Get VME interrupt status/ID\n");
printf("m<m> <src> <end> <dest>\t: Move memory area\n");
printf("o\t\t\t: Jump to OS\n");
printf("p[adrmode]\t\t: Port search\n");
printf("q\t\t\t: Quit program\n");
printf("r[x] <f> <start> [end]\t: Read file <f> to VME, x= x or s (HEX)\n");
printf("s[m] <start> <end> <p>\t: Search pattern <p>=different Items\n");
printf("t <start>\t\t: TAS emulation, 'Test and Set' bit 7\n");
printf("v\t\t\t: Generate VME SYSRESET\n");
printf("w[x] <f> <start> <end>\t: Write VME into file <f>, h=Intel Hex\n");
printf("x <start> [val]\t\t: Read/Write to interface register @ start\n");
printf("y[1/0]\t\t\t: Read/set/clear SYSFAIL\n");
printf("z[0..2]\t\t\t: Show interface internals\n");
printf("\n");
printf("m = mode, e.g. b=byte, w=word, l=long (double) word; h = help, x= hex\n");
printf("start(address), end(address), src=source, dest=destination, []=option\n");
}
 
//-----------------------------------------------------------------------------
// initialize the interface to VME
static int InitAt(char *szDevicePath, int *nIfcNum) /* Gibt bei Fehler False aus */
{
int result;
 
if (result = Init_Interface(szDevicePath, AdrMode, nIfcNum)) /* Pruefung des Interfaces */
{
printf("\n");
switch (result)
{
case ENXIO:
printf("Can't find interface driver path!\n");
printf("Please <q>uit or <c>onfigure interface!\n");
return FALSE;
case ENOENT:
printf("Can't find interface driver!\n");
printf("Please <q>uit or <c>onfigure interface!\n");
return FALSE;
case ENODEV:
printf("VMEMM #%d not connected or VME crate switched off!\n", nInterfaceHandle);
printf("Please check connection or switch VME crate on or <c>onfigure.\n");
printf("Then <q>uit and restart again.\n");
return FALSE;
 
default:
printf("Unknown error '%d' occured!\n", result);
printf("Please check the hardware and software setup and restart again.\n");
return FALSE;
 
}
}
 
return(True); /* Kein Fehler */
}
 
//-----------------------------------------------------------------------------
// get the name of the configuration file
static void CfgName(STRG Stg) /* Ermittelt Namen Config-File */
{
Stg[0]='\0';
if (ArgV[0] != NULL)
{
strcpy(Stg,ArgV[0]);
if (strrchr(Stg,'/')!=NULL) /* Versuche Dateinamen abzutrennen */
*(strrchr(Stg,'/')+1)='\0'; /* So daß nur Pfad uebrigbleibt */
else Stg[0]='\0'; /* Kein Pfad: String ist leer */
}
strcat(Stg,"pvmon.cfg"); /* Mache einen Dateinamen */
}
 
//-----------------------------------------------------------------------------
// read in contents of configuration file
static void LoadKonfig(void) /* Wenn Config-Datei da, lese ein */
{
STRG Stg;
FILE *InF;
char c;
__u32 dwLocalAdrMode;
 
CfgName(Stg); /* Hole Dateinamen nach InS */
if ((InF=fopen(Stg,"rt"))!=NULL)
{ /* Wenn das oeffnen geklappt hat */
fscanf(InF,"%*[^=]%*1s%s",Stg);
fscanf(InF,"%*[^=]%*1s%s",cszDevicePath);
fscanf(InF,"%*[^=]%*1s%x",&dwLocalAdrMode);
AdrMode = (__u8)dwLocalAdrMode;
fscanf(InF,"%*[^=]%*1s%c",&c);
fclose(InF); /* Datei wieder schließen */
 
c = tolower(c);
if (c == 'y')
WordMode = setWordMode(1);
else
WordMode = setWordMode(0);
 
} /* if */
}
 
//-----------------------------------------------------------------------------
// provides configuration functionality to user
static void Konfig(void) /* Konfiguration einstellen */
{
STRG InS; /* Eingabestring */
FILE *OuF; /* Ausgabedatei */
short change = 0;
char c;
 
InS[0] = 0;
printf("Pathname of device (%s):",cszDevicePath); /* erfrage den Pfad zum Treiber */
_gets(InS);
if ((InS[0] != '\n') && (InS[0]))
{
strcpy(cszDevicePath, InS);
change |= 1;
}
 
InS[0] = 0;
printf("Default address modifier (%02x):",AdrMode); /* und den default Modifier */
_gets(InS);
if ((InS[0] != '\n') && (InS[0]))
{
sscanf(InS,"%x",&AdrMode);
change |= 4;
}
 
if (WordMode)
c = 'y';
else
c = 'n';
InS[0] = 0;
printf("16 bit VME BUS data path (%c) :", c);
_gets(InS);
if ((InS[0] != '\n') && (InS[0]))
{
sscanf(InS,"%c",&c);
change |= 8;
}
c = tolower(c);
if (c == 'y')
WordMode = setWordMode(1);
else
WordMode = setWordMode(0);
 
if (change)
{
do
{
printf("Save (y/n):"); /* Wiederhole diese Frage bis */
_gets(InS); /* sie ordentlich beantwortet wurde */
strlwr(InS); /* DownCase String */
} while (InS[0]!='y' && InS[0]!='n');
 
if (InS[0]=='y')
{
CfgName(InS); /* Hole Dateinamen nach InS */
if ((OuF=fopen(InS,"wt"))!=NULL)
{
if (WordMode)
c = 'y';
else
c = 'n';
 
fprintf(OuF,"Configuration=%s\n",__DATE__);
fprintf(OuF,"DevicePath=%s\n",cszDevicePath); /* Wenn das oeffnen geklappt hat */
fprintf(OuF,"AddressModifier=%x\n",AdrMode);
fprintf(OuF,"WordMode=%c\n", c);
fclose(OuF); /* Datei schliessen */
 
if (change & 1)
printf("Please restart to put the new driver to work!\n");
}
else printf("Can't open %s. ",InS);
}
}
}
 
//-----------------------------------------------------------------------------
// read user initiated interrupt vector from VME BUS
static void ReadIrqVect(void) /* Interrupt-Vektoren lesen */
{
STRG OSt; /* Ausgabestring */
short Level = 0;
 
switch (GetZug(&DefVec))
{ /* Zugriffsmodus festlegen */
case 'L':sprintf(OSt, "%08hx", ReadVectorLong(nInterfaceHandle)); break;
case 'W':sprintf(OSt, "%04hx", ReadVectorWord(nInterfaceHandle)); break;
case 'B':sprintf(OSt, "%02hx", ReadVectorByte(nInterfaceHandle)); break;
};
 
if (GetError(nInterfaceHandle))
{ /* Im Fehlerfalle 'Error' ausgeben */
ClearError(nInterfaceHandle); /* Fehlerflags zuruecksetzen */
strcpy(OSt, "Error");
}
printf("VME status/ID = %s\n", OSt);
}
 
 
//-----------------------------------------------------------------------------
// temporary jump to (D)OS
static void JumpToDos() /* (D)OS-Shell aufrufen */
{
{
if (system("/bin/sh -c $SHELL") != 0)
printf("Fail to launch a new shell.\n");
}
}
 
//-----------------------------------------------------------------------------
// search responding ports in VME address range
static void SearchPort(char *Art, int Anz, unsigned short modf,
void (*SFunc)(int, unsigned long, unsigned short)) /* Durchsucht Adressraum */
{
unsigned long Idx;
unsigned long Fst; /* Erster gefundener Port */
unsigned long Lst; /* Letzer gefundener Port */
unsigned long Ende; /* Durchsuch Ende */
char Found; /* Schon was gefunden? */
char Sequ; /* Schon eine Portsequenz */
int Err; /* Fehler dagewesen? */
int Tab; /* Tabulator-Zaehler */
unsigned long Step;
 
printf("%s-accesses valid with address modifier %02x to address: ", Art,modf);
 
if (modf > 0x2F)
{
Ende = 0x01000000L; /* alle Standards */
Step = 0x100; /* Stepweite */
}
 
if ((modf < 0x30) && (modf > 0x1f))
{
Ende = 0x00010000L; /* Shorts */
Step = Anz;
}
 
if (modf < 0x20)
{
Ende = 0xFFFF0000L; /* alle Extendets, gemogelt */
Step = 0x10000; /* Step */
}
 
Sequ=False; /* Noch keine Sequenz da */
Found=False;
Tab=0;
Idx=0;
 
do
{ /* do while */
SFunc(nInterfaceHandle, Idx, modf); /* Lese versuchsweise Port */
Err=GetError(nInterfaceHandle); /* Fehlerzustand abfragen */
if (Err) ClearError(nInterfaceHandle); /* Fehler bestaetigen */
else
{
Lst=Idx; /* Merke Port als gueltig */
if (!Sequ)
{ /* Diese Seqenz faengt an? */
Fst=Idx; /* Ja, neue Sequenz, merke */
Sequ=True; /* auch ersten Port */
}
}
 
Idx+= Step; /* Erhoehe Adresse */
 
if ((Err || !(Idx < Ende)) && Sequ)
{ /* Ausgeben bei Sequenzende */
if (!Found)
{ /* oder bei Schleifenende */
if (Idx < Ende) printf("\n"); /* Kein <CRLF> bei Schleifenende */
Found=True;
};
/* Weitere Sequenz: Tab ausgeben */
if (Fst==Lst)
{ /* Sequenz mit nur 1 Element */
printf("%08lx,\t", Fst);
Tab++; /* Merke Tab-Status */
}
else
{
Tab=0; /* Tab-Status wieder zuruecksetzen */
printf("%08lx-%08lx\n", Fst, Lst); /* Sequenz ausgeben */
}
Sequ=False; /* Sequenz gilt als abgeschlossen */
} /* if */
} while ((Idx < Ende) && (!Abbruch)); /* Bis Idx einmal 'rum ist */
 
if (!Found)
printf("\nnothing found"); /* Wenn keinen Zugriff gefunden */
printf("\n"); /* Immer mit <CRLF> abschließen */
}
 
//-----------------------------------------------------------------------------
// search responding ports
static void SearchPorts(void) /* Durchsucht Short-Adressraum */
{ /* nach Wort- und Bytes Zugriffen */
unsigned short modf = AdrMode;
 
if (ParaStr(2)!=NULL)
modf = (unsigned short)ParaNum(2); /* Anderer Adressmodifier */
 
ShowModifier(modf); printf("\n");
SearchPort("Byte", 1, modf, (void(*)(int, unsigned long, unsigned short))ReadByte);
SearchPort("Word", 2, modf, (void(*)(int, unsigned long, unsigned short))ReadWord);
SearchPort("Long", 4, modf, (void(*)(int, unsigned long, unsigned short))ReadLong);
printf("\n");
}
 
//-----------------------------------------------------------------------------
// converts parts of a string to a number
static unsigned int GibNum(char **PSt, char Anz)
{
unsigned int Val; /* Ermittelter Wert */
unsigned int Num; /* Wieviel Zeichen genommen */
char Frm[6]; /* Formatstring */
 
Val=0; /* Default setzen */
strcpy(Frm,"%nx%n"); /* Default Format setzen */
if (*PSt!=NULL)
{ /* Nur wenn String gueltig */
Frm[1]=Anz; /* Uebertrage Anzahl-Zeichen */
*PSt=(sscanf(*PSt,Frm,&Val, /* Hole Nummer aus String */
&Num)!=1) ? NULL : (*PSt)+Num; /* Fehler oder weitersetzen */
} /* if */
return(Val);
}
 
//-----------------------------------------------------------------------------
// read in a file and put the contents to VME
static int _ReadFile(void) /* Lese eine Datei in VME-Mem ein */
{
unsigned long End; /* Endadresse */
unsigned long Idx; /* Laufadresse */
unsigned long Cnt; /* Bytezaehler */
unsigned Adr; /* Adresse Record ab Start */
int Len; /* Recordlaenge */
int Ret; /* Returncode */
int Hex; /* Intel Hex File? */
int Typ; /* Typ des Records */
STRG Nam; /* Dateiname */
STRG Stg; /* Einlese-String */
char *PSt; /* Scanzeiger */
FILE *InF; /* Lesedatei */
 
Ret=1; /* Vorgabe ist Fehler */
if (ParaStr(3)!=NULL)
{ /* Startadr ist obligat */
Hex=(ParaStr(1)[1]=='X'); /* Intel-Hex gewuenscht? */
strcpy(Nam,ParaStr(2)); /* Dateinamen kopieren */
*strchr(Nam,' ')='\0'; /* Restparameter abschneiden */
Cnt=0; /* Noch nichts gelesen */
Idx=ParaNum(3); /* Lege Startadresse fest */
End=(ParaStr(4)==NULL) /* Endadr ist optional */
? 0xffffffffl : ParaNum(4);
 
if (Idx<=End)
{ /* Falsche Werte abweisen */
if ((InF=fopen(Nam,(Hex) ? "rt":"rb"))!=NULL)
{
if (Hex)
{ /* Intel-Hex gewuenscht? */
fscanf(InF,"%x",Idx);
while (!feof(InF))
{ /* Bis zum Ende lesen */
fgets(Stg,sizeof(Stg),InF);
if (strlen(Stg)>1)
{ /* Ignoriere leere Zeilen */
PSt=strchr(Stg,':'); /* Doppelpunkt ist obligat */
if (PSt!=NULL) PSt++; /* Hinter ':' stellen */
Len=GibNum(&PSt,'2'); /* Hole Recordlaenge */
Adr=GibNum(&PSt,'4'); /* Hole Adresse */
Typ=GibNum(&PSt,'2');
if (!Typ)
{ /* Datencode erkannt? */
while (PSt!=NULL && Len)
{
WriteByte(nInterfaceHandle, Idx+Adr++,(char)GibNum(&PSt,'2'),AdrMode);
Cnt++; /* 1 Byte mehr gelesen */
Len--; /* Laenge aufaddieren */
} /* while */
 
if (GetError(nInterfaceHandle))
{ /* Fehlerpruefung: VME-Transfer ok? */
ClearError(nInterfaceHandle); /* Fehlerflag zuruecksetzen */
printf("--> Bus error: Adr=%08lx. ",Idx+Adr);
break; /* Abbruch mit Fehler */
} /* if */
}
else
{
if (Typ==1)
{ /* Endcode erkannt? */
Ret=0; /* Fehlerfrei gelesen */
break; /* Ende while */
} /* Ignoriere andere Typen */
} /* else */
if (PSt==NULL)
{
printf("Format error\n");
break;
} /* if */
} /* if len */
} /* while */
}
else
{ /* Kein Intel-Hex-Format */
do
{
if (feof(InF)) Idx=End; /* Ende der Datei erreicht */
else
{
WriteByte(nInterfaceHandle, Idx,(char)fgetc(InF),AdrMode);
if (GetError(nInterfaceHandle))
{ /* Fehlerpruefung: VME-Transfer ok? */
ClearError(nInterfaceHandle); /* Fehlerflag zuruecksetzen */
printf("--> Bus error: Adr=%08lx. ",Idx);
break; /* Abbruch mit Fehler */
} /* if GetError */
 
Cnt++; /* Ein Byte mehr gelesen */
} /* else */
} while (Idx++<End); /* Bis einschliesslich End lesen */
fclose(InF);
if (Idx==End+1) Ret=0; /* Genug Byte geschafft? */
} /* else Hex */
} /* if fopen */
else printf("Can't read file %s. ",Nam);
} /* if */
printf("%lx Byte(s) read\n",Cnt);
} /* if */
else printf("\a");
return(Ret);
}
 
//-----------------------------------------------------------------------------
// seek for a pattern in VME BUS
static void SeekPatt(void) /* Suche nach Datenmustern */
{
#define Max 32 /* Wieviele Suchbytes max. */
unsigned long DefVon; /* Startadresse */
unsigned long End; /* Endadresse */
int Idx; /* Index */
int Idy; /* Auch Index */
int Len; /* Item Laenge */
int Ok; /* Flag: gefunden oder nicht? */
int Merk_error = 0; /* Fehler Flip-Flop */
 
union
{ /* Suchmuster */
unsigned char xs[Max];
unsigned int xw[Max/2];
unsigned long xl[Max/4];
} Patt;
 
if (ParaStr(4) != NULL)
{ /* Von, Bis und 1 Item obligat */
DefVon=ParaNum(2); /* Startadresse festlegen */
End=ParaNum(3); /* Endadresse festlegen */
Len=1;
switch (GetZug(&DefZug))
{ /* Zugriffsmodus festlegen */
case 'L':Len+=2; /* Auf Long-Adresse biegen */
case 'W':Len++; /* Auf Wort-Adresse biegen */
}
 
DefVon&=-(long)Len; /* Adressen geradebiegen */
Idx=0; /* Suchmuster sammeln */
while (Idx<Max/Len && ParaStr(Idx+4)!=NULL)
{
switch (DefZug)
{
case 'L':Patt.xl[Idx]=ParaNum(Idx+4); break;
case 'W':Patt.xw[Idx]=(unsigned)ParaNum(Idx+4); break;
case 'B':Patt.xs[Idx]=(unsigned char)ParaNum(Idx+4); break;
} /* switch */
Idx++; /* Ein Item mehr da */
} /* while */
 
while ((DefVon<=End) && (!Abbruch))
{ /* Suche nun den Bereich ab */
Ok=True; /* Pattern an dieser Adresse? */
for (Idy=0; Idy<Idx && Ok; Idy++)
{
switch (DefZug)
{
case 'L':if (Patt.xl[Idy] != (unsigned long)ReadLong(nInterfaceHandle, DefVon+(Idy<<2),AdrMode))
Ok=False;
break;
case 'W':if (Patt.xw[Idy] != (unsigned short)ReadWord(nInterfaceHandle, DefVon+(Idy<<1),AdrMode))
Ok=False;
break;
case 'B':if (Patt.xs[Idy] != (unsigned char)ReadByte(nInterfaceHandle, DefVon+Idy,AdrMode))
Ok=False;
break;
} /* switch */
 
if (GetError(nInterfaceHandle))
{ /* Busfehler aufgetreten? */
ClearError(nInterfaceHandle); /* Fehlerflags zuruecksetzen */
Ok=False; /* Gefunden wurde auch nichts */
Merk_error = 1; /* Setze Flip-Flop */
}
} /* for */
if (Ok) printf("%08lx\n",DefVon);/* Was gefunden: Adresse ausgeben */
DefVon+=Len;
 
if ((DefVon & 0xffl)==0)
{ /* Ermoegliche Abbruch mit Ctrl-C */
printf("\r");
}
} /* while */
if (Merk_error) printf("--> Failed to search\n");
}
else printf("\a");
}
 
//-----------------------------------------------------------------------------
// emulate a 68K test and set instruction
static void TestSet() /* Fuehre ein Test and Set auf */
{ /* Bit #7 eines Byte-Ports aus. */
char Erg;
 
if (ParaStr(2)!=NULL)
{ /* Adresse ist obligat */
Erg=TAS(nInterfaceHandle, ParaNum(2),AdrMode); /* Ergebnis merken, damit ein */
if (GetError(nInterfaceHandle))
{ /* Fehler ausgegeben werden kann */
ClearError(nInterfaceHandle);
printf("--> Failed to 'Test and Set'\n"); /* Zugriff gescheitert */
}
else printf("Semafore @ 0x%08lx was%s set before.\n",
ParaNum(2),(Erg) ? "" : " not");
}
else printf("\a");
}
 
//-----------------------------------------------------------------------------
// raise a VME SYSRESET
static void ResetVme(void) /* Generiere SysReset auf VME-Bus */
{ /* Interrupt bei MailBox beachten */
printf("Reset to VME raised.\n");
Reset_VME(nInterfaceHandle);
}
 
//-----------------------------------------------------------------------------
// print out a line in HEX format
static int OutHex(FILE *OuF, int Siz, unsigned long Adr,int Typ, char Buf[])
{
int Chk; /* Pruefsumme */
int Idx; /* Laufindex */
 
fprintf(OuF,":%02X%04X%02X",Siz,Adr,Typ);
Chk=Siz+(Adr & 0xff)+(Adr>>8)+Typ;
for (Idx=0; Idx<Siz; Idx++)
{ /* Pufferinhalt ausgeben */
fprintf(OuF,"%02X",(unsigned char)Buf[Idx]);
Chk+=Buf[Idx]; /* Pruefsumme mitrechnen */
}
fprintf(OuF,"%02X\n",(unsigned char)-Chk); /* Pruefsumme ausgeben */
if (ferror(OuF))
{ /* Irgend ein Schreibfehler? */
printf("Failed to write. ");
return(False);
}
else return(True); /* Fehlerfrei ausgefuehrt */
}
 
//-----------------------------------------------------------------------------
// write a file in HEX and get the data from VME
static int _WriteFile() /* Schreibt eine Datei aus VME */
{
unsigned long End; /* Endadresse */
unsigned long Idx; /* Laufadresse */
unsigned long Cnt; /* Bytezaehler */
int Ret; /* Returncode */
int Adr; /* Adresse Record ab Start */
int Hex; /* Intel Hex File? */
char Buf[16]; /* Output-Puffer */
STRG Nam; /* Dateiname */
FILE *OuF; /* Lesedatei */
 
Ret=1; /* Vorgabe ist Fehler */
if (ParaStr(4)!=NULL)
{ /* Start & Endadr sind obligat */
Hex=(ParaStr(1)[1]=='X'); /* Intel-Hex gewuenscht? */
strcpy(Nam,ParaStr(2)); /* Dateinamen kopieren */
*strchr(Nam,' ')='\0'; /* Restparameter abschneiden */
Cnt=0; /* Noch nichts gelesen */
Idx=ParaNum(3); /* Lege Startadresse fest */
End=ParaNum(4); /* Lege Endadresse fest */
if (Idx<=End)
{ /* Falsche Werte abweisen */
if ((OuF=fopen(Nam,(Hex) ? "wt":"wb"))!=NULL)
{
if (Hex)
{ /* Intel-Hex gewuenscht? */
Buf[0]=0 >> 0x8; /* HighByte Segmentadresse */
Buf[1]=0 & 0xff; /* LowByte Segmentadresse */
Adr=0; /* Offset grundsaetzlich bei 0 */
if (OutHex(OuF,2,Adr,2,Buf))
{
do
{
Buf[(int)Cnt & 0xf]=ReadByte(nInterfaceHandle, Idx,AdrMode);
if (GetError(nInterfaceHandle))
{ /* Fehlerpruefung: VME-Transfer ok? */
ClearError(nInterfaceHandle); /* Fehlerflag zuruecksetzen */
printf("--> Bus error: Adr=%08lx. ",Idx);
break; /* Abbruch */
} /* if GetError */
if (!((int)++Cnt & 0xf))
{
if (OutHex(OuF,16,Adr,0,Buf)) Adr+=16;
else break; /* Zwischendurch Puffer schreiben */
}
} while (Idx++<End); /* Bis einschließlich End schreiben */
 
if ((Idx==End+1) && /* Noch Rest im Puffer? */
(!((int)Cnt & 0xf) ||
OutHex(OuF,(int)Cnt & 0xf,Adr,0,Buf))
&& OutHex(OuF,0,0,1,NULL)) Ret=0;
} /* if */ /* Wenn Eof ausgegeben, Returns ok */
} /* if Hex */
else
do
{ /* Nicht Intel-Hex */
fputc(ReadByte(nInterfaceHandle, Idx,AdrMode),OuF);
if (GetError(nInterfaceHandle))
{ /* Fehlerpruefung: VME-Transfer ok? */
ClearError(nInterfaceHandle); /* Fehlerflag zuruecksetzen */
printf("--> Bus error: Adr=%08lx. ",Idx);
break; /* Abbruch */
} /* if GetError */
if (ferror(OuF))
{
printf("Failed to write. ");
break; /* Abbruch */
} /* if ferror */
Cnt++; /* Ein Byte mehr geschrieben */
} while (Idx++<End); /* Bis einschließlich End schreiben */
 
if (Idx==End+1) Ret=0; /* Genug Byte geschafft? */
fclose(OuF);
} /* if fopen */
else
printf("Can' open file %s. ",Nam);
} /* if */
printf("%lx Byte(s) written.\n",Cnt);
} /* if */
else
printf("\a");
return(Ret);
}
 
 
//-----------------------------------------------------------------------------
// show and provide help about the VME address modifiers
static void ShowModifier(int Mode) /* Klartext fuer Adressmodifier */
{
printf("Address modifier:\t%02x [", Mode);
if ((Mode & 0x3b) > 0x38) printf("standard");
else if ((Mode & 0x3b)==0x29) printf("short");
else if ((Mode & 0x3b)>=0x09 && (Mode & 0x3b)<=0x0b) printf("extendet");
else if (Mode>=0x20 || Mode<=0x0f)
{
printf("reserved]\n"); return;
}
else
{
printf("user defined]\n"); return;
}
printf(((Mode & 0x0f)>=0x0c) ? " supervisory":" non-privileged");
switch (Mode & 0x03)
{
case 1:printf(" data access"); break;
case 2:printf(" code access"); break;
case 3:printf(" block transfer"); break;
}
printf("]\n");
}
 
//-----------------------------------------------------------------------------
// provides some diagnostic information abot interface registers
static void ShowRegister(void) /* Zeige Inhalt von ? */
{
char *szInstg;
char type;
 
if ((szInstg = ParaStr(1)) == NULL)
type = '0';
else
type = szInstg[1];
 
if (type == 0)
type = '0';
 
GetInterfaceInfo(nInterfaceHandle, type);
}
 
//-----------------------------------------------------------------------------
// make a random memory test to VME
static void RandomTest(void)
{
char DefZug = ' '; /* Zugriffsart */
int Len; /* Item Laenge */
unsigned long Idx; /* Index */
unsigned long End; /* Endadresse */
unsigned long Seed; /* initial seed */
unsigned char Merk_error = 0; /* Haelt error flag */
int Patt;
unsigned long i;
 
unsigned long lResult;
unsigned short wResult;
unsigned char bResult;
int repeats = 0;
int Loop = 0;
 
if (GetZug(&DefZug)!=' ')
{
Len=1;
switch (GetZug(&DefZug)) /* Zugriffsmodus festlegen */
{
case 'L':Len += 2; /* Auf Long-Adresse biegen */
case 'W':Len++; /* Auf Wort-Adresse biegen */
}
Idx=ParaNum(2) & -(long)Len; /* Adressen geradebiegen */
End=ParaNum(3); /* Endadresse festlegen */
if (ParaStr(4) == NULL)
Loop = 1;
else
Loop=ParaNum(4);
if (ParaStr(5) == NULL)
Seed = 0x1234;
else
Seed=ParaNum(5);
 
do
{
srand(Seed + repeats);
i = Idx;
while ((i <= End) && (!Abbruch))
{
Patt = rand();
 
switch (DefZug)
{
case 'L':Patt <<= 16;
Patt |= rand();
WriteLong(nInterfaceHandle, i, Patt, AdrMode);
break;
case 'W':WriteWord(nInterfaceHandle, i, (short)Patt, AdrMode);
break;
case 'B':WriteByte(nInterfaceHandle, i, (char)Patt, AdrMode);
break;
} /* switch */
 
if (GetError(nInterfaceHandle))
{
ClearError(nInterfaceHandle); /* Fehler abfangen */
Merk_error |= 2;
}
 
if ((i & 0xffl)==0)
{ /* Ermoegliche Ctrl-C */
printf("\r");
}
 
i += Len;
} /* while */
 
// read and compare
srand(Seed + repeats);
i = Idx;
while ((i <= End) && (!Abbruch))
{
Patt = rand();
 
switch (DefZug)
{
case 'L':lResult = ReadLong(nInterfaceHandle, i, AdrMode);
Patt <<= 16;
Patt |= rand();
if (lResult != (unsigned long)Patt)
{
printf("Compare Fail 0x%08x w=0x%08lx r=0x%08lx\n", i, Patt, lResult);
Merk_error |= 1;
}
break;
case 'W':wResult = ReadWord(nInterfaceHandle, i, AdrMode);
if (wResult != (unsigned short)Patt)
{
printf("Compare Fail 0x%08x w=0x%04x r=0x%04x\n", i, Patt & 0xFFFF, wResult);
Merk_error |= 1;
}
break;
case 'B':bResult = ReadByte(nInterfaceHandle, i, AdrMode);
if (bResult != (unsigned char)Patt)
{
printf("Compare Fail 0x%08x w=0x%02x r=0x%02x\n", i, Patt & 0xFF, bResult);
Merk_error |= 1;
}
break;
} /* switch */
 
if (GetError(nInterfaceHandle))
{
ClearError(nInterfaceHandle); /* Fehler abfangen */
Merk_error |= 2;
}
 
if ((i & 0xffl)==0)
{ /* Ermoegliche Ctrl-C */
printf("\r");
}
 
i += Len;
} /* while */
 
if (Loop)
printf("\rRepeats: 0x%x\r", repeats);
repeats++;
} while ((Loop--) && !(Merk_error));
 
if (Merk_error)
printf("--> Compare failed %s\a\n", (Merk_error & 2) ? "with Bus Error" : "");
else
printf("--> Compare successfull\n");
 
}
else printf("\a");
 
}
 
//-----------------------------------------------------------------------------
// modify interface registers
static void ModifyRegister(void)
{
__u32 Erg;
 
if (ParaStr(2) != NULL)
{
if (ParaStr(3) != NULL)
{
Erg = _SetRegister(nInterfaceHandle, ParaNum(2),ParaNum(3));
printf("Interface register @ 0x%08lx set: 0x%02x, get: 0x%02x\n",
ParaNum(2), ParaNum(3), Erg);
}
else
{
Erg = _GetRegister(nInterfaceHandle, ParaNum(2));
printf("Interface register @ 0x%08lx get: 0x%02x\n", ParaNum(2), Erg);
}
}
else
printf("\a");
}
 
//-----------------------------------------------------------------------------
// the main menu
static int HauptMenue(STRG Stg) /* Eingabe & Dispatcher */
{
char *SSt; /* Sourcezeiger */
char *DSt; /* Destzeiger */
char Del; /* Delimiter vorhanden? */
int Ret; /* Returncode fuer Auto-Mode */
char loop; /* irgedwie war baengg fuer loop */
 
 
if (Stg == NULL)
loop = 1;
else
loop = 0;
 
do
{
if (loop)
{ /* Auto-Modus? */
if (Abbruch)
{
printf("\n");
Abbruch = 0;
}
 
printf("pv: "); /* Nein, Prompt ausgeben und */
if (*ReadMessageBuffer())
{
printf("%s\n", ReadMessageBuffer());
printf("pv: ");
InitMessageBuffer();
}
_gets(InStg); /* Eingabestring holen */
// GetError(nInterfaceHandle); /* because of interrupts */
SSt=InStg; /* Init Sourcezeiger */
}
else
SSt=Stg; /* Uebernehme Parameter aus Stg */
 
DSt=InStg; /* Init Destzeiger */
Del=True; /* Weitere Delimiter raus */
Ret=0; /* Keine Fehler bis jetzt */
 
while (*SSt)
{ /* Arbeite String ab */
if (UpCase(*SSt) >= 'A' && /* Filtern gueltiger Zeichen */
UpCase(*SSt) <= 'Z' ||
*SSt >= '0' && *SSt <= '9' ||
*SSt == ':' || *SSt == '.' ||
*SSt == '\\' || *SSt == '?')
{
*DSt=UpCase(*SSt);
Del=False;
DSt++;
}
else
{
if (!Del)
{
*DSt=' ';
DSt++;
} /* Mehrere Delimiter raus */
Del=True; /* und durch ' ' ersetzen */
}
SSt++;
} /* while (*SSt) */
*DSt=*SSt; /* 0 auch uebertragen */
 
switch (*ParaStr(1))
{
case 'A': SetModifier(); break;
case 'D': Dump(); break;
case 'E': Examine(); break; /* Speicherbereich aendern */
case 'F': Fill(); break; /* Speicherbereich fuellen */
case 'G': RandomTest(); break; /* random test of memory */
case 'H':
case '?': Hilfe(); break; /* Hilf mir mal */
case 'I': DeInit_Interface(nInterfaceHandle);
InitAt(cszDevicePath, &nInterfaceHandle);
break; /* Nochmals initialisieren */
case 'C': Konfig(); break; /* Konfiguration */
case 'L': ReadIrqVect(); break; /* Interrupt-Vektoren lesen */
case 'M': Move(); break; /* Move Funktion */
case 'O': JumpToDos(); break; /* DOS Ausgang */
case 'P': SearchPorts(); break; /* Ports suchen */
case 'Q': Raus();return(0); /* Ende des Debuggers */
case 'R': Ret=_ReadFile(); break; /* Eine Datei nach VME lesen */
case 'S': SeekPatt(); break; /* Suche nach Datenmustern */
case 'T': TestSet(); break; /* Fuehre ein TAS aus */
case 'V': ResetVme(); break; /* Erzeuge VME-Reset */
case 'W': Ret=_WriteFile(); break;/* Eine Datei von VME schreiben */
case 'Y': SysFail(); break; /* read, set Sysfail */
case 'X': ModifyRegister(); break; /* modify register of the interface */
case 'Z': ShowRegister(); break; /* Register ausgeben */
default :
{
Ret=2; /* Fehlercode zurueck fuer Auto */
if (!loop)
{ /* Wenn Auto: Hilfsmessage */
Hilfe();
printf("\nSplit commands with \"/\" ,e.g. \"a39/d1000\"");
}
}
} /* switch */
} while (loop); /* Hier raus bei Auto-Mode */
return(Ret);
}
 
//-------------------------------------------------------------------------------------
// the exit entry
static void MyExit(int bla) /* Wird im Ctrl-C-Falle aufgerufen */
{
Abbruch = 1;
}
 
//-------------------------------------------------------------------------------------
// where all starts
int main(int argc, char **argv, char *envp[])
{
static STRG Stg; /* Zum zusammenlegen Parameter */
char *PSt; /* Arbeitszeiger Multicommands */
char *SSt; /* Quellzeiger Multicommands */
int Idx; /* Index */
int Ret; /* Returncode */
 
InitMessageBuffer();
 
cszDevicePath = &localBuffer[0];
 
Ret=1; /* Returncode auf Fehler setzen */
ArgV=argv; /* Uebertrage argv fuer LoadKonfig */
LoadKonfig(); /* Versuchen Konfigdatei zu lesen */
 
if (argc > 1)
{ /* Kommandozeilenparameter da? */
if (InitAt(cszDevicePath, &nInterfaceHandle))
{ /* Aufsetzen Interface */
*Stg='\0'; /* Stg auf nix setzen */
for (Idx=1; Idx < argc; Idx++)
{
strcat(Stg,argv[Idx]); /* Haenge Parameter hintereinander */
strcat(Stg," "); /* Trenne mit Leerzeichen */
}
 
SSt=Stg; /* Saubloedes (*Zeug) mit den ARRAYS! */
do
{
if ((PSt=strchr(SSt,'/'))!=NULL) *PSt='\0';
Ret=HauptMenue(SSt); /* Hauptmenue automatisch aufrufen */
SSt=PSt+1; /* SSt auf den Reststring setzen */
}
 
while (PSt!=NULL && !Ret); /* Bis Fehler oder Fertig */
}
}
else
{
printf("Provided under GPL - version %s of pvmon of %s \n\n", VERSION, __DATE__);
printf("This program is free software; you can redistribute it and/or modify it\n");
printf("under the terms of the GPL as published by the FSF (version 2 or later).\n");
printf("Copyright: Ralf Dux, Sven Hannover, Klaus Hitschler, Sven Tuecke, AR\n");
 
InitAt(cszDevicePath, &nInterfaceHandle); /* Aufsetzen Interface */
signal(SIGINT, MyExit); /* Eigenen Handler einklinken */
Ret=HauptMenue(NULL); /* Hauptmenue manuell aufrufen */
} /* else */
DeInit_Interface(nInterfaceHandle); /* Interface ausschalten */
 
return(Ret); /* Fehlercode fuer ErrorLevel */
}
 
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
/pcivme-3.2/pvmon/mbuffer.c
0,0 → 1,82
//-------------------------------------------------------------------------------------------
// mbuffer.c - some functions to do a simple message buffering
//
// (c) 1999 ARW Elektronik
//
// this source code is published under GPL (Open Source). You can use, redistrubute and
// modify it unless this header is not modified or deleted. No warranty is given that
// this software will work like expected.
// This product is not authorized for use as critical component in life support systems
// wihout the express written approval of ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// $Log: mbuffer.c,v $
// Revision 1.3 2002/10/20 11:49:33 klaus
// first parts working
//
// Revision 1.2 2002/10/19 09:47:30 klaus
// first success compiling project
//
// Revision 1.1.1.1 2002/10/18 22:14:29 klaus
//
 
//-------------------------------------------------------------------------------------------
// DEFINES
//
#define LOCAL_BUFFERLENGTH 250
 
//-------------------------------------------------------------------------------------------
// INCLUDES
//
#include <stdio.h>
#include <mbuffer.h>
 
//-------------------------------------------------------------------------------------------
// LOCALS
//
static char MBuffer[LOCAL_BUFFERLENGTH];
//------------------------------------------------------------
// add unsolicited interrupt message to buffer
//
void AddIRQtoBuffer(short level, short vector)
{
sprintf(MBuffer, "Interrupt @ level %d with vector %d signaled.", level, vector);
}
 
//------------------------------------------------------------
// add unsolicited error message to buffer
//
void AddMsgtoBuffer(int where, unsigned long Error)
{
sprintf(MBuffer, "Error %d occured (%d)!", Error, where);
}
 
//------------------------------------------------------------
// add unsolicited error message as string to buffer
//
void AddMsgAsStringtoBuffer(char *strn)
{
sprintf(MBuffer,"%s", strn);
}
 
//------------------------------------------------------------
// get back a message from the buffer
//
char *ReadMessageBuffer(void)
{
return MBuffer;
}
 
//------------------------------------------------------------
// initilaize the buffer
//
void InitMessageBuffer(void)
{
MBuffer[0] = 0;
}
 
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
/pcivme-3.2/pvmon/pcilibLx.c
0,0 → 1,317
//-------------------------------------------------------------------------------------------
// pcilib.c - interface hardware dependend functions to interface to the pvmon
//
// (c) 1999-2002 ARW Elektronik
//
// this source code is published under GPL (Open Source). You can use, redistrubute and
// modify it unless this header is not modified or deleted. No warranty is given that
// this software will work like expected.
// This product is not authorized for use as critical component in life support systems
// wihout the express written approval of ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// $Log: pcilibLx.c,v $
// Revision 1.4 2002/10/20 18:07:48 klaus
// mostly working alpha version
//
// Revision 1.3 2002/10/20 11:49:33 klaus
// first parts working
//
// Revision 1.2 2002/10/19 09:44:36 klaus
// first success compiling project
//
// Revision 1.1.1.1 2002/10/18 22:14:29 klaus
//
 
//-------------------------------------------------------------------------------------------
// INCLUDES
//
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
 
#include <../driver/pcivme.h>
#include <../driver/vic.h>
#include <../driver/vme.h>
#include <../lib/pcivme_ni.h>
#include <pcilibLx.h>
#include <mbuffer.h>
 
//-------------------------------------------------------------------------------------------
// DEFINES
//
 
//-------------------------------------------------------------------------------------------
// TYPEDEFS
//
 
//-------------------------------------------------------------------------------------------
// GLOBALS
//
static int storedError = 0;
static int nLocalWordMode = 0; // initial 32 bit mode
 
//--------------------------------------------------------------------------
// LOCALS
//
 
//-------------------------------------------------------------------------------------------
// FUNCTIONS
//
 
//-------------------------------------------------------------------------------------------
// set word mode
//
int setWordMode(int nMode)
{
nLocalWordMode = nMode;
 
return nLocalWordMode;
}
 
//-------------------------------------------------------------------------------------------
// set interface special registers - VIC68A
//
unsigned long _SetRegister(int nIfcHandle, unsigned long Address, unsigned long Value)
{
__u8 ubContent = (__u8)Value;
 
VMEaccessVIC(nIfcHandle, VIC68A_WRITE, Address, &ubContent);
 
return ubContent;
}
 
 
//-------------------------------------------------------------------------------------------
// function to get special interface registers - VIC68A
//
unsigned long _GetRegister(int nIfcHandle, unsigned long Address)
{
__u8 ubContent;
 
VMEaccessVIC(nIfcHandle, VIC68A_READ, Address, &ubContent);
 
return ubContent;
}
 
 
//-------------------------------------------------------------------------------------------
// init the interface with the current properties
//
int Init_Interface(char *szDevicePath, char AdrMode, int *nIfcHandle)
{
return VMEopen(szDevicePath, AdrMode, nIfcHandle);
}
 
 
//-------------------------------------------------------------------------------------------
// deinit the current interface
//
void DeInit_Interface(int nIfcHandle)
{
VMEclose(nIfcHandle);
}
 
 
//-------------------------------------------------------------------------------------------
// check if an error occured
//
int GetError(int nIfcHandle)
{
int error;
 
if ((error = GetLastError(nIfcHandle)))
storedError = error;
else
storedError = VMEerror(nIfcHandle);
 
return storedError;
}
 
 
//-------------------------------------------------------------------------------------------
// clear a pending error
//
void ClearError(int nIfcHandle)
{
storedError = 0;
}
 
//-------------------------------------------------------------------------------------------
// read elements and split a long access into 2 word accesses if word data path
//
char ReadByte(int nIfcHandle, unsigned long adr, unsigned short modifier)
{
__u8 c;
 
setAccessProperties(nIfcHandle, (__u8)modifier, BYTE_ACCESS);
 
storedError = VMEread(nIfcHandle, adr, BYTE_ACCESS, 1, &c);
return c;
}
 
short ReadWord(int nIfcHandle, unsigned long adr, unsigned short modifier)
{
__u16 w;
 
setAccessProperties(nIfcHandle, (__u8)modifier, WORD_ACCESS);
 
storedError = VMEread(nIfcHandle, adr, WORD_ACCESS, 1, &w);
return w;
}
 
long ReadLong(int nIfcHandle, unsigned long adr, unsigned short modifier)
{
__u32 l;
if (nLocalWordMode)
{
__u16 partl, parth;
 
// lese high anteil von adresse +0
parth = ReadWord(nIfcHandle, adr, modifier);
 
// lese low anteil von adresse +2
partl = ReadWord(nIfcHandle, adr + sizeof(__u16), modifier);
 
l = (parth << 16) | partl;
}
else
{
setAccessProperties(nIfcHandle, (__u8)modifier, LONG_ACCESS);
storedError = VMEread(nIfcHandle, adr, LONG_ACCESS, 1, &l);
}
return l;
}
 
//-------------------------------------------------------------------------------------------
// write a byte/word/long and split a long access into 2 word accesses if word data path
//
void WriteByte(int nIfcHandle, unsigned long adr, char value, unsigned short modifier)
{
setAccessProperties(nIfcHandle, (__u8)modifier, BYTE_ACCESS);
 
storedError = VMEwrite(nIfcHandle, adr, BYTE_ACCESS, 1, &value);
}
 
void WriteWord(int nIfcHandle, unsigned long adr, short value, unsigned short modifier)
{
setAccessProperties(nIfcHandle, (__u8)modifier, WORD_ACCESS);
 
storedError = VMEwrite(nIfcHandle, adr, WORD_ACCESS, 1, &value);
}
 
void WriteLong(int nIfcHandle, unsigned long adr, long value, unsigned short modifier)
{
if (nLocalWordMode)
{
__u16 part;
 
// high anteil auf adresse +0
part = (value >> 16) & 0xffff;
WriteWord(nIfcHandle, adr, part, modifier);
 
// low anteil auf adresse +2
part = value & 0xffff;
WriteWord(nIfcHandle, adr + sizeof(__u16), part, modifier);
}
else
{
setAccessProperties(nIfcHandle, (__u8)modifier, LONG_ACCESS);
storedError = VMEwrite(nIfcHandle, adr, LONG_ACCESS, 1, &value);
}
}
 
//-------------------------------------------------------------------------------------------
// check for a pending SYSFAIL
//
unsigned short PollSfail(int nIfcHandle)
{
BOOLEAN bResult;
 
VMEsysfailGet(nIfcHandle, &bResult);
 
return (unsigned short)bResult;
}
 
//-------------------------------------------------------------------------------------------
// clear a interface set SYSFAIL
//
void ClrSfail(int nIfcHandle)
{
VMEsysfailSet(nIfcHandle, 0);
}
 
//-------------------------------------------------------------------------------------------
// set a SYSFAIL
//
void SetSfail(int nIfcHandle)
{
VMEsysfailSet(nIfcHandle, 1);
}
 
//-------------------------------------------------------------------------------------------
// read a interrupt vector as byte/word/long (if supported)
//
char ReadVectorByte(int nIfcHandle)
{
__u8 ubVector;
 
VMEinterrupt(nIfcHandle, &ubVector);
 
return ubVector;
}
 
short ReadVectorWord(int nIfcHandle)
{
printf("Word read of a vector not available!\n");
return 0;
}
 
long ReadVectorLong(int nIfcHandle)
{
printf("Longword read of a vector not available!\n");
return 0;
}
 
//-------------------------------------------------------------------------------------------
// emulate a 68K TAS (read/modify/write) instruction
//
char TAS(int nIfcHandle, unsigned long adr, unsigned short modifier)
{
__u8 ubResult = 0x80;
 
VMETAS(nIfcHandle, adr, &ubResult);
 
return ubResult; // check if a read reads a lock
}
 
//-------------------------------------------------------------------------------------------
// generate a SYSRESET on the vmebus and re-init the interface
//
void Reset_VME(int nIfcHandle)
{
VMEreset(nIfcHandle);
}
 
 
//-------------------------------------------------------------------------------------------
// print out some interface special info
//
void GetInterfaceInfo(int nIfcHandle, char type)
{
switch (type)
{
}
}
 
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
/pcivme-3.2/pvmon/mbuffer.h
0,0 → 1,33
#ifndef __MBUFFER_H__
#define __MBUFFER_H__
 
//-------------------------------------------------------------------------------------------
// mbuffer.h - prototypes for simple message buffering mechanisms
//
// (c) 1999-2002 ARW Elektronik
//
// this source code is published under GPL (Open Source). You can use, redistrubute and
// modify it unless this header is not modified or deleted. No warranty is given that
// this software will work like expected.
// This product is not authorized for use as critical component in life support systems
// wihout the express written approval of ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// $Log: mbuffer.h,v $
// Revision 1.3 2005/12/29 10:52:04 klaus
// CR-LF minor problem solved
//
// Revision 1.2 2002/10/19 09:47:30 klaus
// first success compiling project
//
// Revision 1.1.1.1 2002/10/18 22:14:29 klaus
//
 
void AddIRQtoBuffer(short level, short vector);
void AddMsgtoBuffer(int where, unsigned long Error);
void AddMsgAsStringtoBuffer(char *strn);
char *ReadMessageBuffer(void);
void InitMessageBuffer(void);
 
#endif /* __MBUFFER_H__ */
/pcivme-3.2/pvmon/pcilibLx.h
0,0 → 1,71
#ifndef __PCILIBLX_H__
#define __PCILIBLX_H__
 
//-------------------------------------------------------------------------------------------
// pcilib.h - defaults and interface functions of pcilib.c for LINUX
//
// (c) 1999-2002 ARW Elektronik
//
// this source code is published under GPL (Open Source). You can use, redistrubute and
// modify it unless this header is not modified or deleted. No warranty is given that
// this software will work like expected.
// This product is not authorized for use as critical component in life support systems
// wihout the express written approval of ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// $Log: pcilibLx.h,v $
// Revision 1.4 2005/12/29 10:52:04 klaus
// CR-LF minor problem solved
//
// Revision 1.3 2002/10/20 11:49:33 klaus
// first parts working
//
// Revision 1.2 2002/10/19 09:44:37 klaus
// first success compiling project
//
// Revision 1.1.1.1 2002/10/18 22:14:29 klaus
//
 
//-----------------------------------------------------------------------------
// DEFINES
//
#define BUFFERLENGTH 128
 
//-----------------------------------------------------------------------------
// PROTOTYPES
//
int Init_Interface(char *szDevicePath, char AdrMode, int *nIfcHandle); /* Inits to DefAModifier */
void DeInit_Interface(int nIfcHandle); /* de-initializes Interface */
void Reset_VME(int nIfcHandle); /* generates SYSRESET on VMEbus */
 
int GetError(int nIfcHandle); /* checks the ERROR flag */
void ClearError(int nIfcHandle); /* clears the ERROR flag */
 
char ReadByte(int nIfcHandle, unsigned long,unsigned short); /* Get byte from any address */
void WriteByte(int nIfcHandle, unsigned long,char,unsigned short); /* write byte to any address */
short ReadWord(int nIfcHandle, unsigned long,unsigned short); /* get word from any address */
void WriteWord(int nIfcHandle, unsigned long, short,unsigned short);/* write word to any address */
long ReadLong(int nIfcHandle, unsigned long,unsigned short); /* read longword from any address */
void WriteLong(int nIfcHandle, unsigned long,long,unsigned short); /* write longword to any address */
 
char ReadVectorByte(int nIfcHandle); /* reads a vector byte from VME_LEVEL */
short ReadVectorWord(int nIfcHandle); /* reads a vector word from VME_LEVEL */
long ReadVectorLong(int nIfcHandle); /* reads a vector longword from .. */
 
char TAS(int nIfcHandle, unsigned long,unsigned short); /* 68K TAS (semafore) emulation */
void SetSfail(int nIfcHandle); /* set SYSFAIL */
void ClrSfail(int nIfcHandle); /* clear SYSFAIL (own) */
unsigned short PollSfail(int nIfcHandle); /* get SYSFAIL status */
 
void GetInterfaceInfo(int nIfcHandle, char type); /* request some information from driver */
 
/* set and get register contents of .. */
unsigned long _SetRegister(int nIfcHandle, unsigned long Address, unsigned long Value);
unsigned long _GetRegister(int nIfcHandle, unsigned long Address);
 
int setWordMode(int nMode);
 
/*-------------------------- End of Prototypes -------------------------------*/
 
#endif // __PCILIBLX_H__
/pcivme-3.2/pvmon/Makefile
0,0 → 1,58
#****************************************************************************
# Copyright (C) 2001-2002 ARW Elektronik Germany
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU 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.
#
# Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)
#****************************************************************************
 
#****************************************************************************
#
# Makefile - makefile for ARW Elektronik PCIVME interfaces pvmon program
#
# $Log: Makefile,v $
# Revision 1.3 2002/11/14 19:57:56 klaus
# improvement, still bugs active
#
# Revision 1.2 2002/10/20 11:49:33 klaus
# first parts working
#
# Revision 1.1.1.1 2002/10/18 22:14:29 klaus
#
#
#
#****************************************************************************
SRC = .
INC = -I. -I/usr/include
LDLIBS = -L/lib -L/usr/lib -L/usr/local/lib
 
DBG = -g
CFLAGS = $(DBG) $(INC) $(LDLIBS)
 
TARGET1 = pvmon
FILES1 = $(SRC)/$(TARGET1).c $(SRC)/mbuffer.c $(SRC)/pcilibLx.c
 
all: $(TARGET1)
 
$(TARGET1): $(FILES1)
$(CC) $(FILES1) $(CFLAGS) -o $(TARGET1) -lpcivme -lslang
 
clean:
rm -f $(SRC)/*~ $(SRC)/*.o $(TARGET1)
install:
cp $(TARGET1) /usr/local/bin
 
/pcivme-3.2/pvmon/pvmon.cfg
0,0 → 1,4
Configuration=Oct 20 2002
DevicePath=/dev/vmemm_1
AddressModifier=39
WordMode=y
/pcivme-3.2/test/simpleTest
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:executable
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/pcivme-3.2/test/simpleTest.c
0,0 → 1,251
//****************************************************************************
// 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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// simpleTest.c -- a simple test program for the PCIVME PCI to VME Interface
//
// $Log: simpleTest.c,v $
// Revision 1.4 2004/08/13 19:23:55 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.3 2002/10/17 19:05:03 klaus
// VME access is working through test to lib to driver
//
// Revision 1.2 2002/10/12 22:12:19 klaus
// simple change
//
// Revision 1.1.1.1 2002/10/09 19:36:29 klaus
// initial import
//
//
//****************************************************************************
 
/*--- INCLUDES -----------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // rand()
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <linux/types.h>
#include <errno.h>
#include <ctype.h>
 
#include <../driver/pcivme.h>
#include <../lib/pcivme_ni.h>
 
/*--- DEFINES ------------------------------------------------------------------------------------*/
#define DEVICE_NAME "/dev/vmemm_1"
#define DEFAULT_WIDTH BYTE_ACCESS
#define DEFAULT_MODIFIER 0x39
#define BUFFER_SIZE 0x10000 // local buffer for temporary use
 
/*--- TYPEDEFS -----------------------------------------------------------------------------------*/
 
/*--- GLOBALS ------------------------------------------------------------------------------------*/
char *cszPrgName;
 
/*--- FUNCTIONS ----------------------------------------------------------------------------------*/
void hlpMsg(void)
{
printf("simpleTest - a program to do a RAM test with help of the PCIVME interface of ARW Elektronik Germany.\n");
printf("Copyright: see the GPL of the free software foundation. K.Hitschler, %s.\n", __DATE__);
printf("usage: simpleTest [-d=DeviceName] -s=StartAddress [-l=Length] [-m=AddressModifier] [-w=AccessWidth] [-?]\n");
printf(" -d - choose a device to use. (Default: %s)\n", DEVICE_NAME);
printf(" -s=StartAddress - address to start the test, mandatory.\n");
printf(" -w=AccessWidth - data element width, 1,2 or 4. (Default: %d)\n", DEFAULT_WIDTH);
printf(" -l=Length - area length to test in bytes. (Default: equal AccessWidth)\n");
printf(" -m=AddressModifier - VME address modifier for accesses. (Default: 0x%02x)\n", DEFAULT_MODIFIER);
printf(" -? - this help.\n");
}
 
/*--- TEST RAM LOOP ------------------------------------------------------------------------------*/
__u32 SimpleRamTest(int handle, __u32 start, __u32 length, __u8 accessWidth)
{
int error = 0;
__u32 r, w;
__u32 dwErrorCount = 0;
 
while (length >= accessWidth)
{
w = rand();
 
error = VMEwrite(handle, start, accessWidth, 1, &w);
if (error)
{
dwErrorCount++;
printf("%s : Can't write @ adr: 0x%08x (%s)\n", cszPrgName, start, strerror(error));
}
else
{
error = VMEread(handle, start, accessWidth, 1, &r);
if (error)
{
dwErrorCount++;
printf("%s : Can't read @ adr: 0x%08x (%s)\n", cszPrgName, start, strerror(error));
}
else
{
error = ENOANO;
 
switch (accessWidth)
{
case BYTE_ACCESS:
if ((w & 0xff) != (r & 0xff))
{
dwErrorCount++;
printf("%s : Compare failed @ adr:0x%08x w:0x%02x r:0x%02x\n",cszPrgName, start, w & 0xff, r & 0xff);
}
break;
case WORD_ACCESS:
if ((w & 0xffff) != (r & 0xffff))
{
dwErrorCount++;
printf("%s : Compare failed @ adr:0x%08x w:0x%04x r:0x%04x\n",cszPrgName, start, w & 0xffff, r & 0xffff);
}
break;
case LONG_ACCESS:
if (w != r)
{
dwErrorCount++;
printf("%s : Compare failed @ adr:0x%08x w:0x%08x r:0x%08x\n",cszPrgName, start, w, r);
}
break;
}
}
}
length -= accessWidth;
start += accessWidth;
}
 
return dwErrorCount;
}
 
int main(int argc, char **argv)
{
char *fname = DEVICE_NAME;
char *ptr;
char ch;
int i;
int error = 0;
int handle;
__u8 bAddressModifier = DEFAULT_MODIFIER;
__u8 bAccessWidth = DEFAULT_WIDTH;
__u32 dwStartAddress = -1;
__u32 dwLength = -1;
 
//-----------------------------------------------------------------------------------
// scan command line
cszPrgName = argv[0];
for (i = 1; i < argc; i++)
{
ptr = argv[i];
 
if (*ptr == '-')
ptr++;
ch = *ptr;
 
ptr++;
if (*ptr == '=')
ptr++;
 
switch (tolower(ch))
{
case 'h':
case '?': hlpMsg(); exit(0);
case 'd': fname = ptr; break;
case 's': dwStartAddress = strtoul(ptr, NULL, 16); break;
case 'w': bAccessWidth = (__u8)atoi(ptr); break;
case 'l': dwLength = strtoul(ptr, NULL, 16); break;
case 'm': bAddressModifier = (__u8)strtoul(ptr, NULL, 16); break;
default: printf("%s : Unknown command \"%c\"!\n", cszPrgName, ch); exit(0);
}
}
 
//-----------------------------------------------------------------------------------
// test for correct parameters
if (!fname)
{
printf("%s : Must have devicename!\n", cszPrgName);
exit(EINVAL);
}
 
if (dwStartAddress == -1)
{
printf("%s : Must have a start address!\n", cszPrgName);
exit(EINVAL);
}
 
if ((bAccessWidth > 4) || (bAccessWidth == 3))
{
printf("%s : Illegal AccessWidth (%d)!\n", cszPrgName, bAccessWidth);
exit(EINVAL);
}
 
if (bAddressModifier > 0x3F)
{
printf("%s : Illegal VME AddressModifer (0x%02x)!\n", cszPrgName, bAddressModifier);
exit(EINVAL);
}
 
if (dwLength == -1)
dwLength = bAccessWidth;
 
printf("%s: Testing %s from 0x%08x to 0x%08x with Modifier 0x%02x.\n",
cszPrgName,
(bAccessWidth == BYTE_ACCESS) ? "bytes" : ((bAccessWidth == WORD_ACCESS) ? "words" : "longs"),
dwStartAddress, dwStartAddress + dwLength, bAddressModifier);
 
//-----------------------------------------------------------------------------------
// open the path to device
error = VMEopen(fname, bAddressModifier, &handle);
if (error)
{
printf("%s : Can't open path to %s! (%s)\n", cszPrgName, fname, strerror(error));
exit(error);
}
 
//-----------------------------------------------------------------------------------
// loop until error
error = SimpleRamTest(handle, dwStartAddress, dwLength, bAccessWidth);
if (error)
printf("%s: %d test errors!\n", cszPrgName, error);
else
printf("%s: No test errors.\n", cszPrgName);
 
//-----------------------------------------------------------------------------------
// close the path to device
error = VMEclose(handle);
if (!error)
printf("%s: Close OK.\n", cszPrgName);
else
printf("%s: Close with error, %s!\n", cszPrgName, strerror(error));
 
return error;
}
 
/pcivme-3.2/test/Makefile
0,0 → 1,58
#****************************************************************************
# Copyright (C) 2001-2004 ARW Elektronik Germany
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU 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.
#
# Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)
#****************************************************************************
 
#****************************************************************************
#
# Makefile - makefile for ARW Elektronik PCIVME interfaces test program
#
# $Log: Makefile,v $
# Revision 1.5 2004/08/13 19:23:55 klaus
# conversion to kernel-version 2.6, released version 3.0
#
# Revision 1.4 2002/10/20 18:08:21 klaus
# don't know what has been changed?
#
# Revision 1.3 2002/10/17 19:05:03 klaus
# VME access is working through test to lib to driver
#
# Revision 1.2 2002/10/12 22:12:19 klaus
# simple change
#
# Revision 1.1.1.1 2002/10/09 19:36:29 klaus
# initial import
#
#
#****************************************************************************
FILES = simpleTest
 
INC = -I /usr/include -I . -I ../lib
CFLAGS = -O2 -fomit-frame-pointer -Wall $(INC) -g
LIBS = -lpcivme
 
all: simpleTest
 
simpleTest: simpleTest.c
$(CC) $(CFLAGS) simpleTest.c $(LIBS) -o simpleTest
 
clean:
rm -f $(FILES) *~ core
 
/pcivme-3.2/doc/pcivme_doc.pdf
0,0 → 1,884
%PDF-1.4
%äöÜß
1 0 obj
<< /Length 2 0 R
/Filter /FlateDecode
>>
stream
xœíXQ‹7 ~_Øÿàç@'’lmÙÝÒÇ´ýI[(½–æ%¿Ú‘<gÍÌ]J
)-ÇÁ<’%}ŸeÉà>:àŸXbç]ä>þä~|å~—p9NÇ‚ï²K@¹‡îõ÷ð³{Ä·îá×ã!„.°"ôúITª$Aæßœà ã´¡._à
+”¤i9ľÎ3œuóbìÎSìNbE힍ÝÑì=ï¤_\d‘ît2Òvw¢SÌÖüUÂÐ>zùŽfNÊSôªñ~3èwc¾™íávhãA0D¨Ö̎¤ m҅謢MôՔüßàˆÅ$à%¼Ô*ˬƒÃZÚºXúŠLŠlt-y\µzÉÆM²Ra=xj™Èe^y“«ðL®–‹á¢f+›lE“-b&
+•X~ۓ3
+ƒ¥ßÖc‡©$_lŸ®Ï“„/¤õ÷ìüsþ|)ËÿŒ}mþüà¿ÝŸ¯ AsÑ-n˜æž[ÞpÞgn¢vn¸ÉLð¦ÿ'¢´Rõ·c lo/Ÿík{#­KcöZø²Fsñ½ ù¶¥\4SÚ¿hNJ›–ÐëTçk'Ôö£ŸuƒïL0e·ïðÜþláÙ'mEtŒ4è¡¯I±ŸiþÉd€Zn¯Q“Ê †ÛUÙo¨ßÊ傦‡ËÛýÒ^'´£e'ÜggÈ6X9ÊíŠBAð«Ì£¶^eÕ
+RÂ3z·¹¢Ç®ˆLïÐhûÛuµ¶ëSoß9î:JÏPù{à3ÏùÃr{©\¼òNâ{sRnOžUešÄ{ýÝ£wãînó/}þŠºendstream
+endobj
+
+2 0 obj
+ 1023
+endobj
+
+3 0 obj
+<< /Type /XObject
+ /Subtype /Image
+ /Width 270
+ /Height 265
+ /BitsPerComponent 8
+ /ColorSpace /DeviceRGB
+ /Filter /DCTDecode
+ /Length 11045
+>>
+stream
+
+
+
+ ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ "ÿÄ
+ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ
+ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ
+—ÿЦíö¤Û͐ìƒÚO»öÝCþ‚š—þËÿÅQöÝCþ‚š—þËÿÅSvÒm4ù!Ù´Ÿv?íº†?ä'©àl¿üUlÔ?è)©àl¿üU7m})rC²i>ìwÛuú
+j_ø/ÿA½Ô?è)©àl¿üU4-/”Åwc œn<~½(p‚Ý ö•V/Ûuú
+j_ø/ÿGÛuú
+j_ø/ÿQ™m—‡œÎDcqÓõ­x¼;¨MgÒ¤Q¬ÅD1¼£|™vçž ÈÁ¬ù¨ÞÚ%Y«êf}·Pÿ ¦¥ÿ²ÿñT}·Pÿ ¦¥ÿ²ÿñTû›;‹IŒ714n¹#ðãÖ¢ÛZ(AôFn¥EՎûn¡ÿAMKÿeÿ⫨ðõÃ]jIuws:ªBPO3I´“&q¸œt•r»jæ‡tÖ·÷{xÝ_ÎJʼ"¡¢7ÃÎNvlõ$™[¡©ÍsZMãÊFMtQœ­pçX.tûoúä¿ÈU‚µž¿ñ.¶?ôÅ?«kӋÑL–¬fÚM½ªM´Nâ°ÌqI´w©6Ѷ‹…ˆöö£mKj1EÀ‹o4m©çލ´ˆÂýhÚ*]´m¢àE´Q¶¥ÛíI·Ú‹…ˆÊûQ¶¥ Š6Ñp±Ú6ñRíö§C žd…X)‘‚†# }(½+޲²kɲ¦áž‡‘þ5kû
+Ô2ÈHDufÀÉôm£´=AhîtQkztÚDj?Ždh—é—gÚ¹ßZG­ëòZÜÄð-º©xÎì¶÷àcŒôüÅX³‰dó˝¡!gÉl=OjŸIµi~Ï*Ü\nÀ!‡ß#ïu?tþ¾Õçԏ,¹OFœœ£Ícž×ÝbÔ¤
+Åß( 9‚yì3ÈúzÖzÊZ$ýÌÀ
+d)ɜezÃ$f®øµÄZÀ]êq–ãhaÎS»ŸåŽÙª†"Ûíöï± Ž‹@ÿŠý+6äQNö÷*‚T¦ÐŒóŸOÒ®]ÞI1fýäqœóŸç}}ª•µÜ¤b8\Œd&[<FyäT·åœ=˓¹÷m,1¸€s´tã»cµ.E¹º¯V4ýš–„±V-ÈÀàŽ¹«¯s=²íàf¤É°mÊ|à¯LŒéW ¦qÇcê)!-®¤3»‘µvóÏLw¦¦Œ#¨°¾é#i݊—‰cê2sƒüÐ×máx[GHÊä³.Ö Š19یP½ð8®.x|ؘâA”
+IëÓ?ˆ>ã­v~XÚÊÈG%ˆblQòNüäÿ½øg“@ã»âÁÿHÿëˆþmX˜­ïåµ²¥O’:ýMcm¯F›÷QÃWãdXíPÁÿ!9ÿëŒúÕ½¼UhÆ5IÿëŒúÔÖøJÃügW¡uÖE÷+“кŠë"û•ÆÎóÊôµÿ‰U§ýpOýU¢9¨t±ÿ›>?å‚è"­â»£±æËr,Q·éR⍴Åb-´cš—m4ˆ¶ÑŠ”­&0±ô£mI¶¸íH,G·šæ¤ÛK¶€"+è(+Rã°þTm ,EƒFÓRí£ ‚ñF?“oŠ]¼t  ,一\Kioç̱‘îۓ‘ßõü*Ɖ6ºn™uM.ÚÞ G…× çFã×9ü*„ñ‡´™KaÉà H‡¿Ò¬øq‚ÝͽÄr[ªneÃçð>¾üsë\uŸ¾vÐ^áÎk–ßiñeì*¡Ëï”wè:V_a‡=r1[^$Suâ;‹kL$æ-™–?1þD
+Èp
+.àTåðAÉôíÅOó$šB9Ê~^ý@ü…W³S#3ď"†å¤úµaÑÁRX3w·Ö‚˜Ÿ39#v:`qVcà|à û‘+sÜ·Hç¨=MWX“’U·ê[ ǐ=1lçœSæ’î]ÀJDÑ«CÎ@01žxh![a\k² ß.ôܧ¸89Èöäwk°ðÁ4@˜'Ë!Ý>[d¡BsÏ|ž¿ÃÀ®26{kˆÞ?™„€‚7}°,ìü<G&ໍ̳´ ‘"|“¿ùè{EX±â@ÇS秖6ñõ¬¾Õ¹â5Ýu ‚cû§sY}«ºŸÂŽ:«ßd[j˜Õ§ÿ®1ÿèRVŽßj F5y‡ý0‹ÿB’•_„ªÔh]Eu‘}Úäô.¢ºÈ¾år3´ó=)âQeÿ^ñÿè"­íëPi Ëþ½ãÿÐE[Åv'¡çÉjG¶µ.Ú1ÇJwˆ‚ÐV¥#ړo'Š.;í4mô©6яj.{}èÛRm£Ù¢áb=´m©1ëFÚ.+í¤Ûžµ)m v#ÛFړoµ
+ͺÚÅ/üµSæ„!c§©Æ};Vz\Çkr±´W2¶@
+=Y¡â1þ›ÿ¦ÔÖNÚÔÕîRîï1€UW‡z¡èk¶E“ÖNÄ[k:Aboúáþ…%kmö¬¹Æ5™¿ëÞ/ý
+ÎG§ãíÍA¢iÉas±L¸of9äzúp¼t}O-_Œê¥ðœßŠA»×®mäL"D‘©dó¸ãž¿5cÍ#F™A¸“Õ~§ñ­Ú7öõüÊžcŽ p6¯À沿vïv û1“מϘKr¿ïäÚ‚è}yõ©,mÖ{¶YöËmÏ¿Z°l%¤Oî†ÀÏùò¨Ù·``=)8ܪu9d®JþL3lƒ`ˆg”–ôëƒMic2‰R9Rß6ßQƒÁP{T]¨¡E"ªÖ•Wv.Nzô®“Ã6í)þB¹±Ð×Oᑝ:Oúꐭi|G<ö56Òb¥+Ík¤ÆÄ[k"ëþCRÿ×¼_ú•¹¶±oF5ÉëÞ/ý
+JŠ›R^ñÐè]Eu‘}Êäô.¢ºÈ¾ís³¨àôQÿ;8û4ú«¸æ«hƒþ$Zòíþ‚*îÜz~5Ò¶9ԏ
+1RíïF)ŠÄ[hÛRíö£m+…ˆ±ÅjM´m¢áb<z
+0jM¼QŽ:S¸X¡iû}ivû
+Ab,QƒRm£oˆð{ъ“oµ}¨ àúQƒRíæ´\,:Ô~ðÿ»VÅV€aÏÒ¬
+§ÄtSøNÅò1\ÿÀ?ô¬‘[+ñPÜý#ÿв¬ÁîQ@ÄZLP;×Uáp³dÿ®Çù
+å‡\`’xèþ‚ØévqÇn–òõé(Üà䁜ŽG~ÃqŠƒ³¸¹y´"Á£vö8Òqå +("«í®„î®dãgb,Vÿì¿õíþ…%t;G¥`jCô¿õíþ…%Lö.ŸÄnè]Eu‘}Êäô.¢ºÈ¾å`΃‹Ð×:ÿ^±è¯öªº΁¦ÿ׬_ú«øü+{œÍjE´Ñ´Ô¸£î+àúQ´Ô˜â´\,E·4m©JѶ‹…ˆ¶ý(ÛRâŒQp±Ú]¼Ô›E¢áb-´mô©vÒb‹ŽÄ{hÛRàbŒ
+ÏÒ?ýµ‘Zþ)ÿ‘†çýØÿôZÖMHžáÅ´P!U ??Jpk¸çH oݰ%™@Oîí霎 õ9h$t5=¼2LÈpˆ“–=9<ôïÏ¥Šî6Ý#; 2ۜ†óÏ$øò>µÖø^AöÈL»O4 Œ†;vŒãnIþ‡ÓÌÈÑÅwM®« ?.O~œc?úéü<eªoù*²Þ†B¤’w`cðîsŠEEë©Õ\¡] »1ÇSŒšƒU»÷F¹¨vñ[Gb$µ"Û\Ƶÿ#Ÿõëþ‡-u˜Îx®S\ñŸõéþ‡-aÁjkè]Eu‘}Úäô.¢ºÈ¾åfÍNoÃÃþ)Í3þ¼âÿÐhcš¥áÕφô¿úó‡ÿ@¥·Ú®æV"Ú:ž1ÜÓw¦à<ÄÉÿhT’¦èœ *xõªPÛK½^EØ¡‰
+ü—+¥+Ÿ,l^W<žž¾”ŸÛúžããÿ_ð£î´V‡gŠ6×Þ ÔÀ$ÜôkŸåYCǗ¹Á’Eî!ôöúþŸíQ¨¥²=(-¯;‡Æ÷ȱ‹§ Ç1'øV”šæ«…{ PÀmNAŽÞ„QΩ˺;-¼t£ʍGZPåäáAäy|»=¿ØoËÜd†ºd1ù¿6í¸Ä}wþjhöˆ^ÓɝVÞÔcÚ¹UÔu· ÆìCmÛþ¯œìÇoúh¿Ÿ±¨_U×By‚c³nììN›CútƒG´CöžLì6æŒ{W&£â÷™ÏÉߞßôÍÿ*Oí=|¹_1÷ÚG–wlÇOïqG´AÏäÎÇoµ.ÜW1£jzÆ«oÔÅ¢”‚Š3òn¡Sø×W·š¥+•r¥ØÄ@ûÕPjíðÄÿj¨-CÜÕoŠ¿ä`¸ÿv?ýµ‘[*ñ>˜ú¤úÖ="^âÐ(ÅUˆIà
+»¯µ8v©"W)ž£òÍ (Cy.7oe@FyääÇ"º¿ Læö nU~U‘P B…ãlð£ôÅsˆ²ZÝ@9Œ³ŒŸ˜œÿgž«Ûž+©Ðæ;ؾÚZE1ºÆ™;Bm˜ԁŒzƒÒ‘QwgRÑ*` ÂãGAI¶¥`g֓ojÕl&µ"Û\–¾1âGôéþ‡-v[}«Žñlj_þ½!ÿÐå¡°ŠÔÔкŠë"û•Éè]Eu‘}ʆhaøpgÃZWýyÃÿ 
+è4µ<¿L½’ÒÒå#†)^pù‹£×óÁǨ¶ Èœc䜕YµÑu'Š/>%Ý$K<eÐ*=êÅñt‘ÁÎí=ÿëëYRMÉ)" .mšhbŽ`7/Ï¿k8éê»G~Iªq¤jBÏâ ÆPœ»™^;à°ü>´ÉfHõ–Ñæ5EVÜ[¦ÐHëÓwôúÔ¶ñ ÔMjgN±œЫ¸,¹éê=éô5åK¡jhâXce@ôÿ>ŸÊ«Îò—EWò×1¡}›ŽN3Üõü©ìK€¸N•E¨Û¯’eE2N.°"c„dݒ9ðhZÁ'-BÖI^kµ#¤R*GŸ¼A,2:dtÏÇJ’_6 I “ÌI³'k8
+”IÛ{zžŸ•“(E²‘µp=OJжÓӍùsúV„6Ìç¥kZi猊
+Q!ÓíHÚàvÅt¶P•"£´² Ž+R(Š
+NÊÚmWm+ì`ѓ†ŒnʜuMÙÎÒ2kí‹dK|©I8'ˆâ‘ÆÔå&º¡ÐF¶ÌZ±îgëP¼IŠd0𳺠Îp8z·Ëúœvx¼ˆõùúV¶™§dÉ*:©ˆâO“9 m'ŽN?<šQWcŒjlÑÏÚéésc$3I¼íUR
+z<ƒrýk€ð՛B×#$ò9äb½FPf©ЋQÔ䦋R°¼Š¸×’ÑãÐ!È'þ3XúÍÌz¤6²,ƶ®þrN…HݰÇòzöúW{qqÒ²gÑà’a+B…ÀÀb¼õ¦ocW±óo-6Œ…¶UýZ´tí?hZЋOùƒ6Iõ5£ @À à¶
+mP
+p¥ 
+(¢€
+(¢€
+&Tz ý( _sްÐÞi Ƃ5?ÝtøTÕÙZÚ¤…QS픢–Èᇄ×ûµf¼
+·¹•§i‹j8ª(éE1E4 4ú(iØ¥¢€
+(¢€
+(¢€
+(¢€
+(¢€
+á|Yÿ#Sה?úµÝ× âÏù›þ¼¡ÿÐ妀»¡uÖE÷+“кŠë"û”09ÏëÚ,>Ó"›WÓã‘-"VF¹@T„gƒZ?ð‘è?ôÓð*?ñ«×*Y+’ÔìäyI€7ÿá#Ðè7¦ÿàTãGü$zýôßü
+é¿øøÑÿ ƒÿA½7ÿ“ükþϗû¦ìùºh°ü$zýôßü
+ühÿ„‹Bÿ Þ›ÿQÿrÙòÿtÑý/÷M¯ÿ„Bÿ Þ›ÿqÿð‘h?ôÓð*?ñ®Cû>_îš?³åþé¢Àuÿð‘h?ôÓð*?ñ£þ= þƒzoþGþ5ÈgËýÓGö|¿Ý4X¿þ=þƒzoþGþ4ÂG ÿÐoMÿÀ¤ÿä?³¥þé£û>_îš,_ÿ ƒÿA½7ÿ“ühÿ„‹Bÿ Þ›ÿQÿrÙòÿtÑýŸ/÷M¯ÿ„‹Aÿ Þ›ÿQÿð‘è?ôÓð.?ñ®Cû>_îš?³¥þé¢Àuÿð‘è?ôÓð*?ñ£þ= þƒzoþGþ5ÈgËýÓGö|¿Ý4X¿þ- þƒzoþÇþ4ÂG ÿÐoMÿÀ¤ÿä?³åþé£û>_îš,_ÿ …ÿA½7ÿ£ÿ?á"Ðè7¦ÿà\ã\‡öt¿Ý4gËýÓE€ëÿá#Ðè7¦ÿàTã\ˆom/¼HòØÝAs´‰Kà pùxÈïÈüé?³åþé iòçîšvWBê+¬‹î×7£Û<ddWIÂÒ`=—"«IjŽrEZ¤¤/±' £ìIè*íKìIè(ûz
+»ERûz
+>Ğ‚®Ñ@¾Äž‚±' «´P/±' £ìIè*íKìIè(ûz
+»ERûz
+>Ğ‚®Ñ@¾Äž‚±' «´P/±' £ìIè*íKìIè(ûz
+»ERûz
+>Ğ‚®Ñ@¾Äž‚±' «´P/±' £ìIè*íKìIè(ûz
+»ERûz
+>Ğ‚®Ñ@En©ÐU€1H)hÿÙ
+endstream
+endobj
+
+4 0 obj
+<< /Length 5 0 R
+ /Filter /FlateDecode
+>>
+stream
+m{޵yAY$U¥y.0´$­×UՀ(uŽ ¼l×´JhIÄc‚º›ïJê‹ZQÚ² Ø>L2¸l{ `Óߟt!œtô—§\Ϗù£.ŽvŽ>„’Ù¸Nz¯s,ÅA$0ǀÄ]ˆ g¨מôʼnèБKeíË­ºHüÏ Cwüı0ĽnàLNϬ<Øm«¸áFÐ¥—¶‰|fäBøÔ¼ic9fÒ»‡mƒÅÓ.C‹…wáºË¼õ²À¯ªx°-¹P^™<è²9ÐîuülÁ>Åv½.Önh”E8(IUU 7A¹'J
+7Å;5¢ùYÑ
+ÚÏDÃdói$Ù÷†ì ðQçZigS‚ÃzyD÷’}Rf2E;†fu“Û˜®Òâ,PîÆHåeÁRŸKÁÔÄ|–˜ C»Ž 澺“I¿|¥’ï&I*%C:•IFêÉD¢'7àßôcÆD4žš˜M(EÜö?/î4°ϧK!cŸez5'×_/°¯ ‡I¥kRM°!ÔØšüÃ(–µ8 Ž1ÊIÈ`È]ªáÄjJYIƒhÞ(v?'~O49¸0T"䐀¦ù‚­T¸f
+Tt—;OÑæ ŽÅЙ~å;K…0DÊú5]0}@,‹öJ¡IU³eòvÞ­&h[!Ž`à°B֚½&DlÁ¼0*·e ;ÅjŠÛFÄQ¬À+{à³Uëæ…ìZ7 Ö¾±Ú͒׫ÝVHùÞÕm6m8÷ €Ï4m"þÚ¸ý®êTÁpÇ0ÇðÕ&Aè?kªÒ,¯9©JX"ÒUUÌItÔ2Òñ{¶Ýˆ ±ÀyÄùŠ(^°8ôÂÂ1ØÝêˆÙ™B¾j-½ä̲»ØÀçåú4=4{]ç.´†<þèÄ4&ìˆæ,C³Šet: Ÿ~˜wôs›ª $ÔsÁCj(i! cˆX:(,ùU¤àÑA¢ºO$SbÃäýsù~Áìnž•HȆÃD ^ ×kŒçʳ֩YùÇ ç^+ÿX ‡ÛôV€ë<“uó,v}¼2úi….¡'pº W$kæ*_V¨2` +”Fރ9ç)54™1ÎÇñ8BHv°Bž•{øu5=]s :£cëNG“/g_ú¸šŠ|^ŽäýêÕeŒíjŽñb)x³ÃĉTÚa‰­LÒ¸»è¼A÷éfð=ccz* ••¡ë
+w/$vß7w(M‹àãŒzyR®PǾS~)rïÛç—ØnèݜeŠ—¿…pMI Œ³š»½øžW½Lè†u'cßÎÈ¿›ì‹íªs±¯Æ¾¶í«h
+Я0Z¨#ñ¼uòxþ€zŠü5«9È ŒnWs2y•2–
+Œj5ÇÔ÷vÍùŸuÐɒ)Ê¿-¶iC%²õú3o˽ïWQ/áhêô1Nðñ -‹bÿzÓûƒKõύ㺳nGÈ5€ÃÎø™{âûeÕ Áê»fß¶ŸwÞ;!c^vœuj#yðîۛN\$aQkRUÿ~õ—=ŒÞ›¼çÍ©_£ºýòš;ñUXQ¸¬YHf*Hì×]4XùkÃGYá5r´À¸qÁÍh‹bçÇ÷Ke—àùwÇäÛ‘Ç5¹—á%r¤$3ÎûsUøÔ[Ä¥T¯ê^çŽ0!ûÂj<%g¥jÍ}>çc†‹B‘báU¼ÃZ¡²ê‰š¥jÕ5‚q©Áˆ"¤^|üžOͽÚ}³XЛ׫¾–]HÊÆŠ/g‘™:Ó¬:­Z¹ÿ†Ugõ¨ìVΩøÁúÀwj¶Âœ¥æ†å˜±´¹\l‰î Ó¸sûÉó½Øt¨‰Ä—Ý*méKƒðiÎòRmÌ8E|~šÑLßvÉ –èÙB’…¹ZGrÉų‹¢”+§=2ýQßQG‘>9éæ3ŸÎ÷L“£™C@,–²®™m²½êÌc»@n[F2Á—ÛN`>¸CÓ7ms$¾é<1}"ö–™O4ÊJiç¾Ñ¼‰0o"mï}scv8õ,Jo½¦öóæ?{Üôtendstream
+endobj
+
+5 0 obj
+ 2422
+endobj
+
+6 0 obj
+<< /Length 7 0 R
+ /Filter /FlateDecode
+>>
+stream
+½7ÐÿgʒB±™U÷ðx|0à¹ø÷å*RJ=’AEÆ,^ÐèFWt,E>>.R‡Ë?¿~ùÇ%l¿Æu|.KN—Ÿþ|ùãï.§—ŸþúõËíû×/ãô²\æ9¿ÄË÷?]~ÿ–.1]¾ÿåòÃpûÃåûß¾~^Òvûöo?„LW†Ž+üúùÛÇÏï_l®¨ïˆáãÊú²Ò3Ÿ÷L/Ý3ҕùóJJí{ðJ˜Û÷„k;¾xƒñ¬W^7þ¨Ét
+ÛW ª3ʨsûµ°ê~m¤MÒ66¤!˼ëËǓ$Æ8°~YÏê¨ ¯ª{`Å?|aÚ[ùmˆ]ã‰0/ê›%IÓ×b*ƒäÛ&}#(¾üNƒËtït_ýÉ¡nóûŸ«Ùgž­À•¯Ía[ték͔yW\<P0I$vh¤¢tg‡$§´}瓤ðµc’ŒHéN¦±)/
+Tà( Þa µ¢¬<M};ÿ‚¢†o<žKì¡
+:ƒ I€÷±àÃIbGèŸõu_aÈä8HÀ¸L¤›ñóÇò¤¸ÆOº:ÄÂ`?绔OŠÈyM1\ã²ýž’ÕÆqAŸjƒºÊ‰Â‚´t!ÌôT †G(`d0¬®à{2,ö¨£^!ZÅñ\É=ÄPܱàµéÁ¬¾¼è–>¤GáÆÊ^ü¸ îFl´ÀÆF¶s×
+ô‰\ºX *vŒ‘„{àÇ`“¾Ù@¨(Iø!JÓ8•‘¸ƒ¥Ã¸´˜»,¦Ú†¶(”¾… #b%(€@*W%ÙCþCT9DŠ&’Ób©‰cš`‚¡L7©‹â
+ñÎÒÒ+iÍÙa,é¾Ë¿žì>Ö{ ³ ûl ò‚Uâ)Y`¾‡ùšwVI¥£;^Á‚p̞÷[ãXÁ•žÈR¡` ¢–À¡–‡„šˆáÿܺÃ0F.ñ•®Y8›—ÛD ÿhÑ,#I ‚ˆ¦[bYXGF ,šŽÍ1VÙ?œˆQ!º“–”°Ë˜Cêúçx³`l~V>*qÖP—R“Ð÷Lb¿%Bp/FÔ^t˜rQIo†)iñ1VEÿ-¤ãŽø
+pÌ“F¼€â2s—émÀWÖ±4Z@(‡ÖTÁå:ÎQ%×G“­o–Z…NèõÂKWzÀ¨. õ|}¨È›^K?Zî6ÑэRVV¥¹ž$zG»b È6è[õÔ|­…aÊìi!ÓO?CágXÀؚgJ3.cáz ‡tøF_âYÆÇ/aÀš¸ÃrTߋ3È`e‘Ë)Øóˆ¶©¥3ØSJ*šÓYýœõÏqÁ£
+`RŸªO¬Ï]ô0ÞaÓëOfÀmEiˆñ½cˆžªF³7]•ÜßÜ£qVBcƒ!îs(ÃêÉZÙ M¬MGOb®Úp+„Ô*Ø©’Øoí ÌØÆbªY
+Ç òOr~OG¨á@r4õ$¾<Y!?ÑnUšS„-Dž0­rC:ñh—´Î¸.Ú=ŽÖÒd¢ì {'e°íBŒ^®ÎKØÍËˆ†«dŽÍy„wuúþ_°`+,¤§Á‡cBK×÷PÊà÷Ì°ø¶HÔ]ì…4¦
+a”§µ˜òFv¢¿ÄR“#ð.q}ëìùAaÈö¬â_àîŸjÏÉI³­A8õú­ÊuøyÚþ+ù_(ê€À4ghûLWZ 1¡¤S@Tª}Q¬q9‚4¹³h¬ÞžóTëT´L¨.FèÛ+wí]°Àb$OÙ_XìVc€™A
+½iÊZ %(1›{`˼O(íêBÌӞ?µ
+ÚÅ ù&怹<¤îëh“”aéf¹_x SäâÃÏÚðcQ'cð`‹7ùØ®¢pâ”Pû
+¦F€±åÅҏ¦Ð“^æ
+þsríÜérF˜á´=u ÔrmGíÜúR4„¾ ‹—:­öSW®dÑnÙ@h wl“¯j%~ž‘õå>*WÇùf=VZc¬Å(m‚¾!|ñ¨ê“ݧVšPäó!Ó³ËDÚ>¦¿Ùí¹ÝÊ
+ú[±#ŽÎv2Äq†Ã‰÷õûY}pVÖÈ”»0‰9$Ddú]ðø5!=Ø:¶!œ¹y£k·£‘ÆøVö*@OýQhWv¨«îݶO`>‡ÏKêÈ]=Ù g¸²RÝ´‡fSB$JOmè"Ï&%š¸ÊÁˆ,ÂÐÑ)5kŽ“LìØïrZµ¨ŠQwKb¤Þۓö‰ ݳ©KãD›ð‡Š9/Û/‚†±
+í–Ò/üwMDúêãh¼ü eÉJendstream
+endobj
+
+7 0 obj
+ 3269
+endobj
+
+8 0 obj
+<< /Length 9 0 R
+ /Filter /FlateDecode
+>>
+stream
+xœí]Én$¹½7ÐÿPgd’Iæ ¨ª¤ûü^€9ð\üûÎU0X|‘‘¥R· }èV*¹Åúbav8üçû·Âú§,åi8Ì9~ÿûá¯:ü‹~¿ÿóû·ãÛ÷oe|šÓžÒáío‡?¿¦C\ÿõÃ/Ãð—ÃÛoß¿Më áò»_âòþd|*×'áüþ$=MôÎHï$z'¿?ê<áNïÏž{ =‹ô,Ò\#ûõð‰µƒLO–~Oq Óû³Ø¼[Cx¦C¯/Ò
+”2ì»Î]cUy]Uò’êÔ C4v‚¤E"•m{ê±/CntW?ۆ‘Õ¦„–‘?&¦/š+82ó :•´í zâ
+V»¿*–Ω¾`™a£ÒS_÷lšt?ÆÆ}Õ׎´ÅLÖsÌÀ%=³¢á9y$
+ 2ÑåOÈu€$éРt³èûK‰°TÃ!=ߢ˜o ¶re‡ leh«!èÙð†Þ‡­txšÎéåºåÆn^yA?§5å\Ô ç0MešWž5–R*ŽÏ—à4š•‘B6`þ (À0¬Ÿj<?¬Ç¯Vžõµ·R„JÒ_,¶÷ô0aKž+™èîQ.ÜùXL7M”…&ƒåÈ%åνóúºß¤£oÕ6¬Gª‚;±Ìã.w"iìçÙ¨tQ‘šµ)Æ’ï ‚¶Fb€ ù'b
+ fÚ<©Œ1TxÌ©Œ#Øn<¹#õ(V~Q
+L
+a§xÈóY_ d[ „~l،õ§­¥{°¨Ä&CÛÄÖRÝ"qփ»ÅRw^Ë*æ<Axžid›xEGÖێŒ:¡£¹Q¨›Ãnîše}ˆ­3]—ö{´ÔÓrå¨Ðîi§éKöƒqr‹îƎQ
+ÓãJ¡ œQfQ6®FœÒJSO(³Õ@Ì1MÛ§&lq ¹'¸R•†×""]Á+¨í“ø‚hø›Ê,¢!¾3J×{JaÛõZO³Þ¹ÌÙ2ÔVnß5b(lDÄt™Úë.5 l›*#qhøºfuOŸ¬Ñ®çiš0.hìrkFÒÑ¡åAñºƒÒÏéª."Ýé×tz¡‹°íYj;ÑscºÐ›Q§£É)×8hUŸ¨² —Â5£IÚèt¸U¥7Eš¾aŒÄ,Tl°±zq µLÍ \­µu]@¦[cV“Qôû—~»¹¦„uçcSîA-ÓK‚Óxl$mºì&‘ÍfÒ¼PaôG¡¯ÛònªÂx²;ìHlÇ]-õñ,\#óE
+Ò@°Æå û\Å´²3ÁYŒ†¿™Û‘V菮ùËt­Tgé™Òc`˔#z4DU±ˆ¦IÎä&ôî§b¹‡ULGš{ån’dC{«‡½&.ÿò?ÿۑØì‰ÄÒtYìíS:ÃWØ2WÉ6.+;̐póÓ©‚àœ2€ÂG–±ŒR
+``g @¡×2ÀIT JƒÏö„GØÕ•Ðó
+5)`]¢a@;ˆ=åɐ¦Áy„'s?5jVßBO@Î}×»Pt†º »xCÀèÆ‚áZس8|(Ïu)¸0ÎsWSh@@„µ™^`ôoû«w•žÍìßPuãê4J“²{Z7mu˜÷ÓÕ}—b|QuG|”º•qæŒ-™ŽtXLî¸ €0nOJlOÝ}ø#À¦¦{Ш^ìPù{¼{ŽluXõÓÕýA¾RPõWw‡R~9uwy{•N$ô—-°÷iÊmºožÏÛÏ£fÞëË$•'!²DfÉøy#‡ÌÃüþaâžx§~ÝIJFsišŒ©Z?uÔÃîiBÖk·ÆGs>_^pS‚J"´¯¥X¿>è¹Ìž ”4™Øæ©"t¬¿×~GãÜ,|;C ~
+3¿êG'ŒüƱç¾i{m-ÜT?11Ã}“é”êåºê¥^B!ªÄ© A(Ó3³‚VuLUšþ¦Y³YNlyæŽÍºãHüêc£ÚÜjÆë-IÆaüÙͺ[*Iñëþ{Î7'ªÿùˆ.ÖìP¾1Ô>.Y¾ҔŠ+[úÒlsÈ|sƒ³Çm4°‰/Sln0ã,û¥54äðJt¤Ï´ð4¶JòqP„r#¿/…qëÖV3±aàÊp©J«Þîö×Ã+h—dendstream
+endobj
+
+9 0 obj
+ 3034
+endobj
+
+10 0 obj
+<< /Length 11 0 R
+ /Filter /FlateDecode
+>>
+stream
+³‰™[y.f¹òx
+@ &cpc–èòx:§Þül<ÅüIéÆxû^\Y¨˜Ã™&&–,ÞäXŠs<‡÷ÛósYŒs ›W¹ý!q(°n÷/᜶?ÑW‡;Ðý#_¡ ,¼1®Òçæ¸ÁX JÒRý)Ý48&áC<à5¾V2…b#ïŽiÍÆFš*¶$@(—xƒ¥gõÐ=aF!jd£›ÅDÐ<Å zÞ¸à[÷‰Ž­ì€ae-à¯éؐçûQ á\nŠ÷#÷8Íüðƒ¤ÃÈwPGi¹@T0Cy6ZIroø«OB®µd†ààá„o9´¾]Bœ|Áâ2=^à'zZ¢ðt3z¨Ò#ï((”Á gåµVZôǝÑ*PÄ jԆ-–mYTU’ŸJßâOHu|™šÖ˜¥#/(3,<&H
+’æ÷4†ZJ&†:…3&Ò³*F6°UPOÈ*yò:./,d°6^EtK·Dkö1¸Cu‘Ž
+Ii}ŸÁ¬Ÿu†²ŠD«/¦;t×ÕpŠ;è’ÔÛv2=Ào ‰7¦ {è›NGàŒ$Ñ©Áic C͛és¾
+í‘)=fuÚܘdž['…ocö´‚Ô¸¬Ï±Kb’g@×{Ð(Z›ñÑR®ö=`Â…¦’ˆ1ÐkWâTPÅs€@ M°ò8=Ϋ/ãYgwÉ~£‘ÄiÓi‘Ô| xÂÙ¹¬SQ„7wsUT^Vñ{ùÿ3G‰í l×S\2t]3YOVhœ…$%^,"%°°¦§cˆJn¦ZŠsÔ@Ód˜nؕ¦K“r¼´ê‘ùå¾Ü­¡DjYͺâ«-èæ¬/´”Ë"¸¬a§ÃÁZS„ »iá5½çMŸX=ÇÔ7iÇ(§±„¬œú·ìè)(8º¯ÀUü¸áêԂäsH·såºÔ½Ì;ËÙæ9Br¡b*FaüL$Ÿò6÷H‡Âmª“¬µG…­ÌWæBë8$e `¬Bÿ‡£“£/á`àôãèœ|BZ‹´ÇÈ-`FbVåñ$r q¤pC²àBïO¹ æ[tíò" dz°7‚ÈF}Á,½ä}á4OÂÌ@™ý§ Ã0Fù‚Íyt“Ԁ‰8MŒH¡t”U“  4ÊO­]JDTÖñ ÁÆ=Ü9çíù{ÄM?Z9*­0r)O
+ß6jozþ×C“‚c‰#Ù^¤|žŽÙ_ÃJî1(z^ F%ÃL¿`r
+3 3|ÍH»©I5SŒº`˦Œ ÒSu*ÛÑËU‡‰I ”c‡æu¢à¶´<üØ$ î†âw¨ú?\£VƒTµkÐk½˜ùÎúué\ºÒXÝ.á5¾˱
+în¨{Fâ—íßJŸÊ˶?•BHõñtÐ3Y362Շù€‡ê¦âjSxÊýÎN÷ö’•ꠍ
+¥,OýI&±rÿ†+0f‚óA–bukýp4Ä.:x®ÊHd nn$³== ?%°¯ºvŒö]̉\6æ8ü€ £E×¼£`gÖi_ÚÔ±†Å¤¬n^™€àÏ*¾¹õÒ&†O®^Äð–j;²J؜æYü«'p´‘Á÷ŒBRWÁlÉh‹]ý:‚„˜Knm(Û]‡s<åa‚ºh>k$Îʈ =ȎYõ„+…˜)‘6°ž#L=Trhºg†÷è ›0VìÚ|ó+÷-O~m¯Œ™Ü­ÁÛTj%Å®»)‘ž{–ü®
+sm2´ì³á>:ah¤£Âó”+çâH¼ºžBýôp OúIRo”\¤Þµ·ÐӋ_1χãR+P:š¦Ñ“~æLl¬Þq±ÆÛ‰8ÒìL±ÚŒÐº?šŒ’žæÇó¢?Üá<O+*™‘3+¬!râK7ŸçšE¬ÖF¬h¹
+<¬ÜʎNҎ¬ëYReý»ª–wÅv}‘„ÏýÓF¯Dk֋œ‡6J¨/ö´Ä²ËðÜj=®GwÖnâªÊž
+ÝS÷„
+¶¶Ä\HBZ‚îϦ«ÕË`¥O™´±~gçËãQábZÝYƦaµqþ4€4ª$ŸÒpHî3¯­÷,{E1 b¿Ì¡§DnWæÊÛÁ¢¿·ïÁD
+ExÅF ƒM=‰Àž>46ÿ‡èŽS)éí"îèvûž¥™Nkã‚u-£a¤ÆûV-½u5¾H›àöxc!°sG°Ô¹ õÅw±VG‡Yà–ïÚ¡xŽ+qîÃÎ8=RïpU…’
+šÛôpÈsÇq$®Êñ?&N•¾JŒ°n"õâWýÈýÖ(,(?ì˜ðì{ù:fÖ]oÕĄؐ¡ìVr)H鄐LÕ3ЮCcÀ…hÎ8ݳo ’'q‡â‰Õ*Í
+PËÛ´l½—ÛâÞF(ÂÛ½„ëØAòÁTEͤ¾ÿrôƒÞ®8¼Þƒœp`´`d
+«õý>Q¥…’RÇ.Ó8À0ôœåã·Âö Ï»7]áޏÇ{y_«,m–íÅVCíá­ÕH8<''
+Û¶~"ˆ|ЁãXíÞC1U"»÷L»§ëè=½k}*ÁstÇG{˜lžïŽcKb*€Ï/ÒKžÍK+ÎÂs‡•w•O"ê+ ò+Öþßj9êX~•õ£#ŽÇ²DÃ{ÇiÏØ%ë´ÌB'#WA²Çò–«@Phq4Kô±yë eë§|ŒÄÞáÎåqQfi£¾‘äεŒ0ÙÆav÷àW‘d㌝Žã>,¯Rô˜°·‹ ¦m¥6¼¡±9#•õ׿æ¡HÇþæ‰ÑvoeØû™y ×ZeÂݏOVùÇ y<þQ¸×āFég #ÍYýcC9½ø$˜”vcÓXMäNëJ·ÜÞ|.ë;5sœÁ€.•¦æÃ•X€2rç8KKË\ÆÈò·éñjDU&¤ý턱†«‰„/440€£«œÁ©TƒÌwǛ´¿…É–ˆÓʬn¬æ-Ì!_wfÞfSªH•Z×#ÞñóœA)óƒŸ%‰WlžÛD»lí§‡kO·d
+÷Òþ~ú—áÏendstream
+endobj
+
+11 0 obj
+ 3625
+endobj
+
+12 0 obj
+<< /Length 13 0 R
+ /Filter /FlateDecode
+>>
+stream
+xœÕ[ێä4}iþ!ÏH4._r‘VHîžFâ¸IˆEb_ö÷qfºÊi»âô4 Ñ!¶ëzêâŠé¾<>üՙø¦ppÝèm÷ù—îǯº?ù˜îóoóËãCèc7„!þûåçî›gêÈw/¿vŒ33õDæ9þ¬¡þÛîå÷¸`yÕ,/0ƒõ4Ä׎4š£™//¸CyNožâAkgÛ>¾ÿz¶íȾžmÏoëø ûôö{:L|t¸¼q ~âߞ¸ÈñeÕɜ`ݔ¿e†·'½PY9æ»SÈß²=¬“½=¯’wl•J/ïðo‚}Oüd¬îâ<¬¾Xå…Ó·'ò{`jÈB]@õXÙÚÒ5¸†?™êä ¼ó”
+™ÀT즅¶kì&›ñ5çÒIXª(œq‘Ag%±a{g31E•Ö-<ùx. •ÚOueø*øâIa•‚‹
+Ü©¡lóÄÒ¯'’4/¬ÒåxËòÜ7™PÁk0–¢QÍ9A_!k ¦°úNšë8ã?ëÅÏÆ†¥b˜ïatšH´?Ö×)1L¬sbÑQH¸…Iø;á0§äAõp¨Öu‰ˆó*U]Â(pñ§Âíè£p®áÖc¤:c¤ês»»­Èº
+ ;»`ÐkJ³+e)€(¡G‰7µÑ
+ ÿžéØkÿ:CS/^æhÉ¢JnfFÓ¯f…ê“õçt·S0Éú'(՘•¢£ÒÍRnþ…nÊÉÄ9߸ Ê§M6·'ÓéU Ô­ÅþÓ§Ç—|¹RÐ÷ßŧÝ×Ô}Š
+%£ÜZ·$¸…u‘´ÙÚ­¹h·ŒkoŸú±û¹" Hendstream
+endobj
+
+13 0 obj
+ 2169
+endobj
+
+15 0 obj
+<< /Length 16 0 R
+ /Filter /FlateDecode
+ /Length1 31884
+>>
+stream
+¡‚ҮΞÞß ¼8B«mïêwåÜgºÊ2BZ‰áC Š´L8^%V§7Mf‹Õ–dw8]n79%u‚ONKÏÈÌògçäæ¡ÿþGP
+K{Q
+â ú
+qǹ?òÞÏOâ'óóø¥|4S$\,,ö O/ gÄr±Uì?–n6kþc8oø¿b(Ö‹ÆÁv5`I׀$~€»tð3èÇ'Ðç /NÃÙÀw®Åux¾ _Ãø¼߅ïÅà‡ñS0˜‘€÷©$ Iˆ„Éf²…ÜFžÏò:y›¼CNç..ƒ p“¹ÙÜRîr®æÐËmà6ƒdïäösopoq§¸¹Ó 5?ïã¯áïã÷òÏðo
+:ƒþŽ>Ž€EÍOz*áÀÿ!^χ« íƒu׆.†óXÉQ(ÓÒ°ÒuàKŠ`U×£¥¨]^ïÎx4¾;~c|}¼ýhÿ'âà~XC@QŽ^ƒÏè]¼ÖáÅÿ»] ֊Ž¡?a7ÎÂE°N k…Â~ááÇÂ/ÄÉ íÍè°è߃5ë`-èMô'ô%րn<h"
+¿S÷´š4rGQö¢.X³9àÇgª3é^néí†õ|ÖÆðW £w0Á.˜Q Œ¯~ê@ÎËû1ÐàxjZÁkç¡?üMx*é…ñèi'x­cÀÓûè í8ãk"ø…j¼úú]†Za„)¨@µñCà©æ¢jî?@ޙ؂fâtüÐ5Ã
+~1PE[A#‘¨¶ªy›e­§ôQ!˒!oûdœþôüšZ#fY¾@¤v2jjÐ>Gh^5©
+t
+<Î`å’ü‰k‡È”Œ.‹ ˆՃlCÓ
+@üiiTÁۇ´
+ÑMóe-O@JA 1Jši˱‘ÇbÚ²i¤e”¼9,ùvpD5þÑf‹3©¦mZ;ÿEs8Ñ^·0£nþÒ¹f[³*ÛºEç•íSGÛT(šTÕÀ%"Ék£¼b™ Q> þ‰Ì¨[£%«ÀrmÔÒ<+ñlÔ¥¥ýSš!I3Žh(~†R±lŒLå2:-p~yúyåó¸3lã€_ÞOê-ݶMw^[-8 mÛj3äÚmÍÛBCñMË3dKƶÃd/Ù»­«¦yD¡Cñ#ۓ£µ·6Â$Úð´| ¨´øÀ+¡™Ï¥!R¡$!qH'ñ1Œ<QˆîyìGZ,ÝȰœ-.Ÿkù¼|Îp9ªØr“ Ó¬iÖ,x`جÏÉܱsŠ€¾F2 Ƃ¨ñ_Á™Æ ~}’%
+¬™s£¬ÙÊ
+n*¶¦É.'ì
+ª”@8s-Mg›æœþ¤4üy iÍÉÍ)@%…›šš° ò2²Z™Kðû3ÒE«Å ã+°ofìŸÆÞÝ‚¯ÁAlÜ×Zû­÷ѵ?üùkýk÷“äËÏ|‚ï€sB¾gϕÑÚîÍŠý#ö§OwÒ[€[áñ ؇:#¦X
+‘åŠ^Dç ÌC8B ¦…éšmezoä7ñò'xžÂzE·‘ÛÄ}ȝàxàçØAÀà0wë!!E[ˆ1öHW¶$f:gØóyS é󦦀›½>å§·“[®ûɖInš րRá°@Mip&‚D?ü9®„sÜJ<møo‘¯_æ/¢’3= ~RÑë9¿Æ¯F06eZP'O›ÔÅO ª¹òHÊ$¨…‡¨Õèþ ýTÇóZ.‰¤ð­O—A&ò²¶@GÖ^¥[G®æÑî×ÔѝÕþCçÜÃïÐîѽ¢}]÷òÿ¶ö]Ý)ò1ÿ‘öO:ã:íպɭüÚ[u;ˆÔ “«ø•Ú6UŠTMêøjmî2ÍeڝäÖ˜‚dÔN×U˜$ŽxQ«Õ9ˆ—wiÁ™LWò9Væ5ZmÇÛ9Ž'z®ˆ#½†ã  ƒN§ÕJŸ ›†°qÆŒGÈTf©—7%,ÔµpQP(’i£kŽnÑÕËz"S˜¦ˆH$Tä3`íÆ8¹üæçkN–òÿ¶”{=–á5ÃkʽnËp –“kF•gs•¯¾è¯.š´°á0ÒÄOÐËS§6ÒE
+?Äã &h©ÖT›?±âéUR­’É(ôzŒtûH‘3ƒOƒ7…N¼nʕ3=3¸ÃÝï&]î3nò™»uz¿–Rî€Ñh f é7à3°2<.•{°bظO[˜å@á,«`b+¢â4ۗÖ4¥¥Yƒl+LÒSŠ‹&ß;•9¿lvo&'l«éþy>2áÉðÔúÍ1ïßýLUÛæk©žo‹Ì/äý0Ó݊ë2ëJëNÓбœ”[ëHõ‘Ìt¢V^ïD:‡Ý®ÓŠIv¿Ã»p®br²ù:q܉ÿb¾ZÍèD5ø 8‰ó':~–sN—[¾5Ϧ´QÌH÷ûK`’v§“…)rs§¬Ú)öøTÌêÎÞ=‹—_¹'鏹O„§Ïë;‰BažÐh3ÌS7)Ûs¤×xr¯t¿-1B(âåÝbŽXЦjfáFü=Ü'éü8 MÁÓ¤Z|‰t¯þ+ñ+I›Åû¥<]Ÿ¦«âçê^æ5—êñºV¾]w5¾Nw7¿S:¢û5ÿ¾îœÎÈñ’¤Õ9y™ÏÓóºZ^ëà=ºiº¹ºUº½ü³ü뺳<uÂgmî ð;ƒÍO(ƒ5ˆyˆ6!"¥™iÁCË¡Üü`œm<'³33Èù‰ÖNˆVõzµù 8$Úì‚f½ vØÕEAàˆN^„!Ò> k!Sôšð<ãã ð\­&ÅzZm;CO gÁ£°á'ý…n yæ€+c*HèÔ;֌8è„­à¶}€
+4–ZӍ飼rRõͰÁà±;ñeÏ¿‚/‰Ý‹·Æö¾óÉ \ì}œÓ¿‰gǞ¥ãn˜E<†ùÐF¥8GÈÑ]ì
+óaƒç*sÍr6:ۜB™kJò–äû„zÁg͈$ٲ̍ç[‘sÒ¦4,§¦‘4«MF²¥ÐB,ԑÉç‡ÍM£qsÂ_«1sRZ„Ì6‡]é'6—â¢ÒÂf7ßMRŸm¾~¨9¿tŜ—?2üÎùà{¥³–•—¯^8ã p$ÅÿRìÔ¼±¿¥.ÏÇ¿t®Äd[òÓýû­°™¨n—]
+žÇ‚ö)9»¬5á…Â
+¡Oà
+‡-¶2l++£›M¤a&ý@3É5¥tJ)µþgc‹pökÓ\¢Éò3œ ÿþ`3?ŸL—EP%xæl°;JÁ?<Œ,ñ¯”Z}Ù}Úû;-û„½ºç´Ï‡¼Ï"‹µºyö‰‡¼¯ê^3¼­{Çð•ô¥Ñ˜bNq(É©A‡b²͎o88] æ ,7¹ '·)³ÉVoj6“Û†¡á'9ˆ‹mì̲eyzn"ä'rw
+‚–Ùl°_ òz››î™z ¥áGÚ<ˆ½–M蜰g?Áœ¦QŒæ Æ“©Lì×çÂNC\¤ØÝJŽ½Â­L0Ã#ُk•ccÅ0‹›lÀ`Ø(3€ÄrÀ£ùÀ*ø-&{F€ ÁVF™pÑ,:¨ÕÍ`ÅÊ´ŠõR'V[YÞ¤€”LtPN›®
+Z/‰¾]V#>әžé„CœHü)ùf.{ˆ\zÐ?/=_K˜Yƒd/TÌܯ´Z¿ßçÉ&uOça›êomÔßʅyJ^s^WÞ¦¼þ<QÎ;“Gò|ÙòP?Vhà ô4ž»áåÑÓøˆï=9 12ªøütÀ2;]qzdK¡ Áùá²œàw²ýÙâÈéYÁ5g±{ pGzD/õg—:…Éí›Ú«Ó³;žŽ=»o³q-ÞP’;RVvâàÁßýîI¥liÓ»ŽÌô¦=Cº¶ߎÛà4xGlMì¾ïèPª~|mìësñxÜ1=íñ"ê¯Ã*­€UêA¿Sæ7˜m°™#¶ˆó:÷zÏ.²ËðŠå÷o,o»??Ñ|’ô‰ã+1ijÒTÇ%¶KœµîFCÄ M³•:KÝÜ:ay‹p³y«gŸm¯ó°íSkb«,9hb‡^{ÐTLý× gBШÊÞxóyö*6«)€ŠÀCÅ;àH|Ü<4É. ÓZœ†
+îŠúûр•V5×Y~¢aç8¢î¦Ä]KâšA²nÅ0½¥±{ðM±7c_ÜGѳxmì{ÃWâ¶Æž„
+Áª,`Uy¤Cùh34Ù.«+ã^Û½ö]Ù÷äi%{­Øž36½šöQÆWƳéb®q±1l¼G¿Ë¶7ý°AªÌP2«ý+Ó[ý[l[ì7§ß˜©-õ׈µúKŒó̵i3Ó¥ôÌl©¡$­$½$£$Su‚U›æ6fÒÓÓ3¤ÌtebájûzÇÚܾ¼[›óîwܓ÷Lú3ÆMø×­îûòϋNӇâ?ÌÉ ¦©y:½™IË'}™‰²ÇËÊJ2«ŒxJzmú½Æ»Ó’þ«t1-Ý`äy/uÂaÏAÅt÷tåW`Õ=³rzVæJªöLO·õ˜o†%|s[ Ô †E1“œ€‰±Ò…x¼Œ?þ6GïT kg±K~]
+Ÿöî0.,Xœ“R ;ìÖºKîÛöüíÛ'ϘésfLp¤¬¸¤îæ»~‹÷Å?&w
+*¹ôvL¨È&!*Ž Ÿ%^lú¡B€í‹ƒ €óc4r†<ü·îÁԛ¯âÄ­»õ'hØÕý`WFXy»”YãSš/“¾t𯒏bó-i´,IZâltï"÷Š÷jv†´¿&¿Þ×þÚpJ8%~l´ìÕüœü‡ø²æƒÐ§Ù*nÖpVPð€Nï¢z¶ó’½Lò6'w%“dS:/äXs–ž™N³k0šÖT5(ڈe…m…3âæqS#½üI
+Ë;;:î¹§£c'I¿‹Ûb¯~ö—ØË›ãû~°o_ÿî}ûh$½æboÝRÐ%ßÖ(6êmKœK܍)÷J÷i¿Òj»&lš@¦qAÃ4GÐs Wm¸ÄQí¹O«¥.e@Ð{™GÑK&3¨JçÊ5ý˜©Ífä½cž`IƒCMCù¸)–Ï9=\þÇÄ]äéћ;˜©1"Ft˜ë
+܀=ö‚êkB·l^Ùºe÷å8N&칛XÎuí¿´ãÑGž}hµ¥ø)!æëA۔©’FÒJ—Æ©½Xs±VºL»Ä²Ó²Ëz¯ãç^˳Îß8>ϊz£Á€‘²’´½l|ƒÞû“íJº’\ŸÜœÌu%oJ&rrarò±d>p֞BÏ1ç¡w(^z¯?þ¥ûlSÂO³‰–’Ò¬0³Ñ[<‹‰¨®ñû8GŸtÇ÷6lòâœÂëßyê—ïn°§BxôÇ£S—¶¯Üù8‹}õÞÎÆÐ‹7œeúŒÍ盙_,ÀEJóºÔ-©Äf0vM¾Ù¸i2ÛÉà
+q1)æ\Eª¸Fs£½1kIî8Ä}eý*É:ÝX윞S<±ÎXí¬Ë©žxÆ0ìÒÝ~Ho0êó Æl“ÓåÈ7`çsgb5JÿÇÏVvxÔ9Ä?H}sÇòÉÁÄYëHfÎl™@MÈgΦ™I—O-IïÜ1/Wï÷º©i=¯÷ŽÉx2Ր¢Cři6Oá¨=}®Z½¨9‰qz÷Hx0vD¢IÒP‰®,cıG²Væ®D
+wäÑá(†À)͚áÞ]v_ßÕ=þª•üò—±S»yý͛fþÄR6¿îƒsÏr³é޹!ñ^ðÙxúa” úo‚¨‡è4¹ &èfT“M»:à s¹ µÍ¹›r÷ä>"î•3¢¹ÇsOäšPnAn=4¼ûa®˜KÏPÞÄ)—¼©N¶»IiLN¼d±Z³“SRüÙ:–Ùâ·Y•¥%ÍVÜiŰÖ*fo²?5ê:Sps
+Nºg²ÀÝÑ]c¡lõp@se
+¨ÙJ%¤rH™ÙÁleÚEÁ‚ì7²?ÌæÌÙ¾ìMÙʖ³ ³ãÙ|¶'çå#¡P Œ¼9: ÿìš&š±í‡]MZ˜ÓGÁüˆ¿;@€Iìõ‘ÓÅÂ!óAþp y·4öšiæ¶[±³°öá+úÎIJ͞?½mRìԄŠ)•mù±S¼ÿÎÇ-^¼hÙÕ÷7’e?˜T>kûÎ!µ,X»ù¾ás๷ÇVó»ØMw
+7·¬¼…÷ï®oýWl8v6öníâáO¸ÃƒO<8¸÷á=ÀшBîV£é=æWÊd}YiòÅÉÄF盘헒XÂO7NO*I®áëŒuI5ÉwCˆ¢3˜àƒÆË I¯7C,¢ÊÀ’ ± ™
+¾ü€b Î^ßtãæ•á›…#ÃgŠý=v&öÞ卻IÞ£óºö<qè¡éZ5Á޽€÷£$|Ɩ#à$z3à6˜ƒ§Ñ”èC¤Á u$á̧a1óF½I´”$òI„ç8ú}’¤f8aá§›Þl,0å ÙQèhvpg˜]o§ûƒ4Wl)‚—Ë˗qŠÛ¤_QÂي–°Á„–l¸ ))S‚‰WÛûOÔÓ_ ñ•zã?Ì®ú8hX>‡ý÷tSAâ¾Ꮽ'ºó–I&¶ïª×þMuQ §Ááq€· #qð«ñ38 ž
+?êW>VLFkE’%É›»B ¯¡@ó('újLbïÎ$›u6»ˆ3á@ì+œÛZ•UuÙÆúùs=3K–_éáýÃ&ò×säpÓò‹Ò­ï{©ôw!ÄoËÓ¢n¥B#ð¢%ɚBÍ š5|f‡†h4(ñE-ÒHâ<‘ˆ 8e¯¬/„Íâüo9è.ô-‡¦ò±/›Qÿío1ìâNO'­Ã»é7ýjøNÊÛ]ô­;ðæDJÀŒ}¸Œn–™x¦õ¿ðß±VœB&i°¶YŒI’ÝjKâì³÷Ó©œ¤Õéì!½Î¯Ñ²ÓZ×bí?{1ì~§côÅ´S£ùç/¦GÏQ́‚–]ì©ñÖÄ«÷ó<¥?qËÑÐîyà#åùÕvÇNÁâøhϬ®[LÞ»´¤zëÍߤaþ«bóIìâT«˜rÌ{9¢Ñb¤µ ›æ(N•ax"r·¢ÓþÍð€Ìò„";­®¢ßAl:=üùi ¬ê
+‹hã ?)±$M)-&Äa·¹œ$üâ}ý-K6Ûºò¢’ŒØüSø¯ŸÐo>8{3vÙ?Û÷À
+` ˜4)Fñ>^æ£<Ï{tGð^܏FLãìÈôyÓi¥AH$•LÉ,-æü±S÷¿ÙIáI>cGM<óõ›)U …Éb¶âÎ&Ùº•d¥nÙKö™$­Æ‚àŸÍB¥‚6!•g40PyØ®ª¢ò8=|ò|q$ÍàJ‚„+f/o W³°zZʊ­/ìÚ;³îÉØüõaßãÇqÁob¾zó³Øç±¯)'Å`•E*ÎP–tòNþÿªû¸û¸ç¸WS•\•R•ºÄó{?ÿXŠFôÊ(G,õÎâ«ÜUž*¯&ӝéÉôrN?¿„¿Å½;ywÊîÔý)ûS56z£"§NN]›º9uGêÛ©vÝâ´;‚©Äb0§ÒwðìË|
+mšØÇ¬yåݯ.žS;{± ±¯ïÆÚߨ¸lñ•á«®Mùøgzªepyåçõ~ª‰¾Øaü(¦¿÷SqP«Ñ‹:iOP’ÅÝxª^§ëÆ~)“ÞH%¾¸à1¬\«~!ðä0ÌŽNغhúò6uú•×ì)SJ3n޼¾¥¥‹g‘[°çõknë’{S–/‹Š?›c÷0´]™ã”ü’ìš"Ò›\˜ãä°-‹ö›ßKââ2ؖnך±ÝO,°b¼wл+ì2[è·|œNײ
+‚÷ZϟþC¬¥ZÍ¥ZöY]µþ¨aŽ±Ê¸ÞøSÄô®ù°å
+ËûÖCp¤HZ“ô‚½Â¾ÙþS‡Îñ†Srö0©Ào6V€*á„2Dz,„Ö.ã¯Aô[æìžØ“cÒÔ±Ǩ4X£ÂjÀæ‘·©°€Üø{*,|·
+Kè'øIÖ ?éRa-ÚFvª°Ž‰“UX–K¿WaZ¡©Va£øŒf¿
+›Ðæ+Gõ½Ñ|D…Aݖ2&ˆ·ÌPaM´ÌTaé,*, ƒåjÞ¬ÂZn١”dù«
+ÔÜI*Ì#·ÛÇ`-Õ¯»T…A¿ž†~<* úõ\¬ÂЧg
+ƒ~=ƒ* úõü\…A¿ž?¨0è×»W…A¿Þ_¨0è7ù2ýÊýÊת0èWþ
+ƒ~³ïa°ŽÊ*û/* ²ÊNÌQõ¶
+óhBN€Á:—œÙ* üçÌg°‰Z~NX…y”’ÓÇ` ëçN¦ýüÁITæ9/ª0È<çUÛ)?9ïª0ð“sŠÁ¨·çb摜ë`°“â疨0àçV1ØÃð›T˜â¯ap2µÜ;Ul ÷§R~r¨0ð“û,ƒ} ÿu¦øo18“Ú@î'* 6ûƒó¨|òŒ* òÉKð™O=A^®
+ó#°†Éþó˜ýhؼòæ«0­_FaC½
+Óú- fzÉ{H…鸏£Eh=êBa´…P ä2zÒ"ÔÆà9¨u@êU±dðô¨`ú A}„aÈP³è'TÍêCÿ—=Œr&£…вõâô@ÝlÈãMFeð)Dù*TÄj+b5ä €f%ðÐ˨@=ºÑZx¶V7´‡s&£õ[|N‡#bMCKX/=£\ÓQ§ÂB=è#¼uCK¤ÐWî{ùg}ŒáæãkѸú§˜d©ÜZ¡vÈ»Ñ*¨££ýïe.Cm¤žzoTF2”)N¯ÚëbЇŒê½Œül¼9ðœc¯`²>¥ C¯TÚë%ímÒxJè¹Æ¥<uîúŠföEñÖ1®VŽŽQ­7Ÿi¹-W¹žËZژCÀÍÄQÞ»YK„YêBxö1®IXÕE㤗IyDnÝÀ‹ X!Õa²oeFm®ƒ5^ï-j_!Æ¥lg=R¾Û`üvÖcBú2ã:ÄÆkQµ‘h¡\÷¨ú±9&è֏ê?¢Z{—ªÁ0“M³ÆÄìF4Rùïc£Él„ñ\hžÊ†–×±¾ÛÆYÅíd}%Æ©OH»W•H‹j©=ßÂë…>ÃL*È}·¨5}LÒÔ¢Ælº“­Ün&ÑՌžrJõÙ®RŒÐÂèת£Fԙ&Ö#íaL
+Á¨«Ui÷¨>䟍M¥¿jÆüìúoé"¬Fãc®„÷1Žº˜d#j¤óïè\Vm±cœo—z’V&éȸ]¤{\¬<q»{œÝŽíÝÿZR”»vÖÿˆ]už×ß:¦ÿUL›ããÐÿ8†Ù ¸‰µIœöß6:Ÿ_ã­»]õ¨ ù'VU—jcž÷|úW3³ÙlîßÖÜHìE÷œ°¡%f“ˆ÷Z˜V;¾¡ƒîoÈ{¬ç­ö±¨?±­e±Ñ:4>ºú?k¤¿n5þ‹¨gž EqßÖcBZck ëóÛëxDc¡oÈzÅÿˆÛ1){„ó÷ûó9
+(DZz`¡ÚÖÓùG@ì]0ÁpK¸§§†£
+Aÿ}-mrDíŠN¾¯#,¯‹ô¶11´wv¶Rj
+¾{mðÝkƒÿ¿6½?ˆ v³h¹ò„µv²š¾óp¿Ýz1ó=çaÔÕ¢O ¼
+üO îü[‡óÛFhFâ«Î ö8Öº„Aãq5³Xi-»ï8¿ýü–zu÷ícg¿N¶*Çc_¨}¼¤:ÿ© ;y?ƒŸÎWñSø©¼Â_Ä×ñeã±/ؾè‚7:cµµßšO¢¦Ž–ðdÀß6V[§Æ¦«¾Áñ¸zlE¿ç2ÀJƵÖý»vóoÊæßîï_ٕú}yÏF¿Aø9Êݏ̘þ)™cܽƒ{‘2ÄÝ7hN*R*-Ü=¨AQn:‰ NîN´ôºüÉE‡)0¨3Y;’!m‚Ä¡~xbVV QüíƒINÚýf+£»v 0˜-î¢úJ;w5Â\˜ë@ÈÇm€|ä-§B¾œk?AùT͖¢M0^ WppB>®’s¢"È«9/Jfh}¦Ä8}9yE•:®Šs33goäã4œ4P䓟ãàTánÔê)· XEG¹›8 Ùk`¹|棜@¢3Y4¨5í¨4p‹`š‹@,>Ž~U{*\ÇtãÕp)È m«¸T䀼–›0àð{Žû>C»‹öãÍÐÓlÐh*:V©åèoD¹ÛAâ·³Ñv ú§¡J?—ƒ
+¦¢Š£\š‰ó½ƒ.wQçs\›ÊÄAw2%èÐ@t®„.€ÐIup”Ká&0I¤2 D+}PÆÈÌù&?#Ç©tÈ[ä×T¿ô?ybùÏÕüjþŸ‰<~Œ„Q”!òKšŸ¨L!Ñ?A>@{"ä9ò2l4>ò¢\wÉaTù;Pn…ü0äŐH{Í7D†!Þ0:édÉˁðe©€+Yl΢Ê,òy¥@¿<òÉ1”ù »!?FzÑk$%h:äϨùOÈóԦɳäì˜>28`¢,D$š== Òì©”(Õøž'O‘'P4à÷Bí¾A¦Ïüô‡É£¤w Õg«Ô‘‡pþúÑ;4G6òð@)ídÇÀó²ï0ÙAv(îR%KÉWã
+ó ãä,9_.•“+-äv$€ð`Á’íð„Ý™€õ@R í [øÒhå0̉΋ MðìgP3<»„àim=à
+rš‰@ m„´ Òõˆ‡ç5®…ô=H×±š^H}ÖûèŠ. èŠ.FÑ]@Ñ]Œ¢‹Þ‰R4E3P4E3£hŠf hŠfFAùmŠfFQõ@QõŒ¢(ꁢ(êE=PÔE=£P€B
+(F¡…
+P(ŒB
+(FQ…@Q…Œ¢(
+¢(
+E!PE!£B
+(dF!… 2PȌB
+(dFa
+ PX€ÂÂ(,@a
+ PX……é§¥8'€âPœ`'€âPœŠŒâPœŠdÝîxåOä8’ãŒä8’ã@rœ‘’ã@r\z/³Ùi#¤M(í1 =´Ç€ö£=ÆÌ«¥E(¢@eQ ˆE(¢Œ"
+éHƒÞ€ô!¤8)QÒy³4OÚ#=-½ OK'$bç‰{ħÅDáiñ„HäÊdbd~\ ºƒ=7Âó3H°‰À³‚A$ãÁϖÀ'H‚Šõ´üY~#¿‡ŸÎÃwäáJ-¹óÌÓAœO€qÜ ü3|ï@*õgÏÏtû¡O]¾ÿß~>‘å*È?…tÒcn€T
+JºÚåó²!¥A’éÈ鄨ÆfÕ(‡‰?6øS#ÒÒq²s€î¹ìBȆ²çAöì@ör_¥BÙ4 ÂAsO@þô€ï$4ÿ(‘=9à{²}¾ dMٓ »| û¾J#^Œ|<%]¤æ aÞ4_0à[hó|¹²ý;ʂÖ\܀NBž¥Re&FÊðM‡,}ÀWF±5(›*‹(Ÿ±'@¢97 }v7ðXÑûNû¾ïûÈÿ ‚óxWâ!{#‹þ¾³Î÷|þ¹Ò7P©£ø°?Pó(ÍúËÚê{úÂY‡|÷ù&ùnÏÒ@õmÀ÷V6Āïyˆ<¡$ù6ù
+A— hWGêÎÄuÑc-¨n¹=»0cëæ/
+¦gÑóKï`AI"‡ó)ͼiEôOV”)ͳ¹bÍ`G֎ü¥ýYýùý¥"ýÃaA¥ï1º•<Æ¡Þ@ψ ìmD‰?ßã=4’Êî§@ Ðèa}SÔõoï€ÐGÛ£öÚúïQH¢¾%¾¢>•„5ö1ÿfVµ
+endstream
+endobj
+
+16 0 obj
+17667
+endobj
+
+17 0 obj
+<< /Type /FontDescriptor
+ /FontName /BAAAAA+Arial-BoldMT
+ /Flags 4
+ /FontBBox [ -627 -376 2032 1047 ]
+ /ItalicAngle 0
+ /Ascent 905
+ /Descent -211
+ /CapHeight 1047
+ /StemV 80
+ /FontFile2 15 0 R
+>>
+endobj
+
+18 0 obj
+<< /Length 413
+ /Filter /FlateDecode >>
+stream
+Ë8Oø~§µºx? *¾ è8š“߯©k;ôM??Ęѣendstream
+endobj
+
+19 0 obj
+<< /Type /Font
+ /Subtype /TrueType
+ /BaseFont /BAAAAA+Arial-BoldMT
+ /FirstChar 0
+ /LastChar 42
+ /Widths [ 750 666 722 277 666 833 666 277
+ 333 610 277 610 610 556 722 389
+ 556 556 777 556 556 556 333 556
+ 277 610 610 722 610 777 333 889
+ 610 610 556 610 610 333 556 333
+ 556 277 277 ]
+ /FontDescriptor 17 0 R
+ /ToUnicode 18 0 R
+>>
+endobj
+
+20 0 obj
+<< /Length 21 0 R
+ /Filter /FlateDecode
+ /Length1 40808
+>>
+stream
+xœÔ¼y|Eú?^U}÷tÏôÜG&“™LfrL $„h! w¸ 0侄p ”ÔÁ PTP‘ÃáY×ÁõÆUЯÝ(»‹¬
+ÍÆõ©‘©{S÷§v¢§ÐaæT+2!ˉÔÜ'©¿¢vpŃh+:ƒï—"žRg>†æ ‡™‹S“S¿Â„Ðíð,êNàfƒ»ODß`^Ât‡»<™jH½
+gùQMA£#¸ ÷"!nLªêrÁ3Â]·¢ýè,Mè%t+܅ÔÎÔäE…¨7|O#z73ÉÖåÉJJh R>ŠÃ‘Yèèut
+ú{3pÜ^ô>V€v>\€oÄý€2cñ4\‡%Wà‡ñSÆ»¿€•>Æ?Â;«Äo¼s{RFn"a¹…L$ud¹Ÿ4’È¯ŒÀ˜ ãd
+˜^L‚™ÈÌc1›™ææsæ+æs–+³Yl6ecl/v,;Ÿ}œý†ý†ý͝çe~&¿Šoâÿ)tnª…ABBØ(>k;ÿ„¢¯—y|–YÎT1ѽ¤„õ’wÉ»ÀÏcѦ?N%»ð²7’n!ߕtÅÐ6
+*Ø?¡ö|Û»p煼‚ï$?ò
+l4|óÍíè~x4Œ»®¡¶!M=NC°Ö8-øû3u8sҝ©§ÏÔ¯‰µ`ªhW¬
+Nô›ð¨A#¡~OpM°¡Å¨÷7ꛌº
+õP.Vy¦ô6àÚ`UCÏSÖUÕö€Ûí3ÉÝÃÝ'Êí
+x%<2H¿„~Uúû&†«hKí´`ƒ¾)<eÝ´Zèߺ4xQh¿Ï§NE¾ªàº¡#á†ÊŒp͸þ}´nð¢^=èýý‘v…û4kš°û̖¶Š¢^_™xí˜Q3N§µ¾ƒ¯QÓ7
+R÷ÚuZÚN¯oà"Z8¸î'nùÇï[Ƶµðí'D«”O®±¿ZoˆÅ
+
+(‹Ý¡Oáo4öËÚ.h"áðl-UmÇÕt)ò‡B´ƒ×7éèVØi¨42½D·fìGzQ¬¦ÔÒ#ÍW8‡Ñ#õW\»¼6 œÜh8¿Î1zíߢ¹ìUSº4`×ÿáðÄôñ¾CÂ}¬ZWÛFÛ¾C·—>ÞùÚ±¶Zƒ½ûH&ƒ´ÕHc¦sídº3Ri`#ðÏL=¡I+ìÙ ÕޜÞÖÈ¡ÐÿåEM© ô*£øí²¶×lèûý~×ßíÿîõ”u ¼0Á¾CG­['ÿî°Zú½Û
+“v%È4_Ñ9tÙf0®à#®0ƒ€Ì8 /ҊµÉâ©V[ÃlÒÞä^㛵 šIäjÀ{­Ö¦˜´+ÿVÿm–X…UY3v‚cY€b"/
+ÔEpÓà ‚‚â€Â0AVqÀR€ãÄÏðMd¶.!QùN'˜#؄06é6%ˆ&
+ÌàjðüΰÌ&³Më¦j¥Y8£0›¬Ð}Í"œÈ2¡^ –>†¯¾˜¨óÂ
+žS—ãfBŒ=ÄDsy!%Ÿ?×úȎOñ?·öÌö—pG~퉏%{QxóáÛïY.ð ï ¯eã~ºÅf2c['ÿ¨¬IâÌ,Ö֔úê€ÍW
+å…Ù¹¥VºŸ™[ªµ•–¶Žr 3š>çkm%=®Ï…JÄÜÇß'8Ä4Æ?Ó?GZh^dY)¯±<¤î¶4Y¾5cÑ̊´ZV«ÅjQ$xå>—̃­WÎ#I.·Ïp»Q(;‚<‹Å,¢æGùD0gvN}““í â (œD¸ë.O Ø,AùLK\òžó´»i°P¦³Å‹ ¹"^dsDZÕ_mnã€î@àDìêJ€&ÐeQ·Ä-Z«­ ´Õà:h<ŒÌ©/tŸ7nÍöÆm°šu\ËvÀš«3Þv‡šk¨£ ^p¹]n{˜iOr£á°š;u*+†C;ȺWßYüÖûýó†õK]<>ì¶íB}¿Ä;VnðГÉbîÈÀ7=úQf$gÀüdî°bCg“Ð:Ÿ))_ÔkÊ*yð"$, }‡7è=òQԚo‹z⨓5nëäézY{ÛzyF¢֑¶m‹¸ÅBƒáQäd“¢HªÙbQÀ§²Ñ…Çٔª8°2HKÅf¥¥>Ê)JAÄÄȁ1òp¢pzN§Ç¦HRÀiƒªÍªX,AÍêÐ4«MRD“³X5ΩpŒG³X$I ôÇf³Z‘ès»}Z7 BA¤ÀÖ «Ž8<èP0ˆ1öz›ðú}mýèóöoõyZ[}ÞVπª‰=¾¾Ö›ZÛB»’JÍÕ¤§ûØê¥†Lýzgµ¤
+h,€ÆÃ v JQZ ÍÐr@Ñ9N&š“á»ËÝ©
+iX#¹¶O¹_—|B[o7[_7ÿ Ûï`ÿ8ÛLß8ÿB~¡ó¹äѐ [T·»ÚUëšíb\~Ë&m»F4ÍðËj"Ïê~ÐîgMn]¥_!å”6¨XõeÑo‹DKi©gÂ¥ÅY8ËU¢åzNAi–P) Á(-O÷Q¬ë¹Z],v©.ÖôWKë¹Êè£DEk]…a#lqúå(ëæ`7χ³‘UC%‘Õ!„\®’Žp(
+É­HÖâähà€œÔ¿H·¹Qýa$'‡£´[›õnP©÷b„UÆ riRÌ"ó.?c²hÙàR¨¶ˆ‚S‚X%UÕ
+³Á-Ú$°H
+ž 2Û³ÝÓàiö°p®®6&°ý&p·1@ÅEp@ëbt}
+¢äõÞ@A¢ (‘hLCC€‹Á4\”eÄÁ$"Qfˆ #¶‰tÑ-ÅÞÎ5pÍÜYŽåúˆ´ÍNpL¶‰¬ÒM¦`[Xe—á†Pƒ±©k¡<^Q‘66°‚V£o¾Êñ.
+ë^ÐómŽÒ˜çˆv—‚í.@$+p'*qE<nÅvãf7vð@‰ºÐ¾ >2Û·Ý×àKùXŸ‘®A(ð9¥ t
+LÇá*¥¥0[K1n?&sF&Éô;Ößޔåþ¯n÷”zÁêïr
+YúÒ(kƒ2wê’i.WQƊ—>õµ¥'?Å7ø§Ï™Øã†°'Ò±÷ò½åeÅn¾c²gð˜Áåa¦]Î)é¶d̨m#ž§R·tf¶ãr©@Ý\»³”e’¼]>%™#Ä$»A{%êU¬S:¼kÈœ
+Ãvçqòëñã­<胧É(PçZûÃÍ«ÿ[€ÿ}è„ÞKRp–¿»½»{ˆ}ˆ»Ö^ë~„<Â<¬îÔvúQõÊÓÈTf7_™­Ö«O+¥CòAEq)«”¿Ɯ=Ö2˲ÌÂX0eÚÞÅHGÕ¨ÍFԛ?‹. Y,&„XX<Ÿ5ùÁÏÈ1ggÐ(”)–…bÜÛïÌ9)à,#†×!£´-æÒ›9mAú–9Û øË/ÒçàŸÚ<èõº«Ó6“wµ§)0û2|átò?s¾[»ç¯Y{½ËF­yvçŠi÷â•îOâL,?Éò½;2¦ÏøÓû¿«-Aãó´ï0rA¨ 1#lSÅQY†´··Ô-Z«ƒá0²ø9Áa’A
+SÂÍ–¸hWº©Ât]p‘Ù®í®WÊźˆãÿ7ê伦2^®‹]¤ÚVŒüµˆƒ™7 3¯d`U´\…9 i&0Øýw¸¦ñÎæ/ômœ?½úž
+`‰ݟØùhëX²cõCî]ÚzÞaIr©­¡t9ׂ‘fã¦5á’h›Y„R·
+À)(‘3¾ÛÔ±å‹roÃk&Ã?có§[/ŸªY·ùèKɬ$eû# 4«Ñ @€ÝCh° ""؋Øíp|;kD .%4•
+ÏÞ»føDÏÄȤü¾Å™srVzVø6d®­ŽzÍZµ1CšÈQ]¶ä›ªMÄ$¸Ž’›Qwԗmìޅ‘³àè‹]p06;FbGp”KŽ*º9Ç"`p2îÖ-Zõ(ǶݒS¬ÍֈvïFäñÆÊÎ9p¾„Âäq]
+–á2ïÈ®F ZbQäÛJui *jiIPš·2q®ÅvՈÒ(pW]súÊK˜4ÿ—w²••’œp6KŒHA0ºÆˆ%ä€%--·¡PGP—&Ðës£†«x#1|E3a×vÛ1¨f×Ô'ÿ5gÄãñì›ù™eÃç¬|.¹çÄ÷É¥~ˆø óøÖ‘K~N>ûÏ/’k“?w:a1~ë?ãõsƽs蓪a5éºkhç%u7¯§×Mӟì;zÊ'Ë·áÊí£´ŽÛ`ÉȽ¡«ŸÁÙ/|–œüýOÉÇw7Ü9õô²9ç|鳋Ÿc ¾ý枷“_|ùVA®÷[»¥ûŠ·'­ÙÜmÓ»´ÿoìö=hµ*@ôZ“ ̋)âègªrðR¦7³Ðu†ã¦NŽ>¦žŽáÂHÓÓ¯òONsûpaîásûån*Ü^(t
+uʯ,ìiêªÊš?UŸ_[X_x:÷ÛÐás­nïl"ûóüvÁÐ|Zz¯5ƒÓ±£¥z7Îï·ÈUÙ~Ev9K"%rÄã9寚[w׺ëݬ{žGPvVÎ˖“–3–”…ͲTZ‚6õÆ
+) '9ÙÄHQTõ-†u0 ˨ˆ(*+0GÉQ$"‚·ë2bY8½%³Mdҋ'ë™YÀŸ¸\W=;\*ԇʄMB)¢ªŽRD4$ 9hnÂö­‡~ÿGú>»Dùڀ •@œKWEW§‡Ñ-ËÕPŸ
+*ÍW›Rè¦Ðrí⠛™YÑ6Xnäg9ÝWê«ãŠ]臲]ÛpzÈ*Ã%Æè0cÅdsë
+òد½Ö˜,ÃcŸb]éóTraɃ­Ó¡ï*€Zh–úFïԕëÊå^æ
+wÖëÁJ2–Ì"Ëà…”…7$¥æh
+øf³p%ˆìÍêUîÁé Í:šyÑÌÙh ®Å¿Š êæ :ûÕA2`!b+s¹zg—û§¬95mþ™;Fmlo}zÁÂ瞙7w_r*÷ÒºAƒ6¤¶<™¼¼¾_—ÖËÌί¾ýáÛo} ôê¼ä^Êï|¿ž;݋{º³‡·Gp”mhp:3A˜ N³MÎçûWŠ«ü‰¸¬€ìÆÜ`8¢hۚÐÕj•€JÊÀQ2E—¸@—p¨à¯t֝è`d®fpø2š kS¡|wF×åJ÷X÷,÷2ð½›H΁Xµ´ñÐÅ4r/JPv2‰Ž½
+ä«¶¹cƒ³‚$X/̍TŒb:,H¢›Úy€¾û½ïcJLÂhúM ›ðýû®ÊãÅ«ÔL´‘Ó &E0ç~ â6²Ö]‹ÓQê–ÿFÅ6–N¹…-6ޘõàôe{ŸXZÒÏa3ÍmZ5mêGcèû¾5}҄»6%¿ý蕾۳uuÃ]Kv8' —Ž¿kŊàÁ×'ïŸ0öÑö—îmNþô5bÐàF/ÐԍÂÜÎèåe.œïêíêýZù®˜“ŠñR´/aç‰u¦9Ê|u±{=Z‡7°«Äå¦Ê*õ÷;Ö×ì¶l ó~ÐG‹`°ˆí‚QJû@~PAR2í··Çím¡Ïålj`îË–šÈd]‹ÍµèA ±°”è¥ ßw¨£gnƒ8¾?g®óšÎsêNâÜÔášÎÚj¯'²-ž(ji³¾ml›fÝ9u¨ӈ@›E¸JL-×£BæzÆÓfÏøúåæï§Ï\}OòÒ§Ÿ&/ÝwëªéSV®4yM—Þ›†,ßµç®eÏ0ù[¦m?}fû¤‡ò _]s,…0nÞø
+:eÅÝcǯ^q%ÕÓÀ§ëïzvðÈã`•[Á‡Q‘ÐË&Z§;H_­¯c´6ÚÁš”€ÅlFn‘.Ú¢¢/èÃðïó¨mé®Þ®cŒo7&Ô%.Ñ,Ê«‰®Fฉ&i!]
+m<@övÁ»oq¡vâj\‹gwð€áôH»@ÀÅpvRFÔ×GŠ¢|œïëŠÚpÔ6Ô f‡kéÙçŒÉ<×yÂfÂz‘ÂLÐqFêi[æ)M°—HIÇ6둓k£ÿÎ aÝ줪/:æEuìKg=;¤zL×äŒAS'ßù¯?<ùË*îˆeÏî†ñÎøÓ‘õ‹W]~ìõ俷⏵ÛîqÓÜU“Ãîq±ò''ÎzeÂÔw–›×ß»|ôÀ’’éy].˜rî¼ïàø6ßTÁ¥‡D© Ãv•šRß°¹iÒÛ7º*¬6 ÝHtF®ÇȓûDï 66¶(›/ÈEfv
+žÂO1}Á³t|Œ‰ç%ž‘‚²É!Ë&žá%&H°ƒøAaSñê’,K ådn"]R¤Áº\/¹ ÔU“I "fð@²Ñðiî§±râ9¤š‡¨»DuMA4НÓAqíb…5=su:/”£¾”‘ Jç?k°éÛà·ÉOg>‹Š¤°GR“ºh€Öš´¸KŒ|9XY:9ÊK]¦škã!ëo¾­•tm}û8T]uÓ-ØÿUë‹d&Ó?Ùsɒ¹›ðÞ+Z ð(ЛêG }¿Ïf¢¦  LHgŒ ¢CD"0Œ(±„H‚È2Ažç`@ƒ¦jPd³A•q&Q
+¥CɈ©SûQ‚†Èm‰wÄÔÙ}B0ÝjkHt2ý©C– ½7hªSû…bzÇý¨39’~Òµ›_»Îm\gM= Ù ê|]v¸p“-Ž
+ÿý~Fä�õ–;¤G ÿŽ%áðjÔñ0bðº#n!ۘ½ a Dcg;Œ”±ôDyøú
+íTÙ/;(Æc% wý|'Ü«n"ÓÈL¸W¡îMf3¤?îbFÄÇͦN;ûžt^˜º"z…^µÉÇMR/ܘýÅÐ_äӋæšî6=`zÒtÁÄ!¦ò=åáòDù ü•,˜d³À2X¨[cfMÏÉt¦\˜«`1ÏÊd9¨f^¨`åΦ.\[É
+vXÚ¦ÉÕUP_٘"GG_[[DuM¢h®µÍÔ»~ê܉¶ÉsL͉Wžùm
+|â(æÎ5" Q݉8s?Ä,‚gFð4¾î™ôh j›4¤wfÖ´?Q WÚ~ú)ùÜ¥†}¿ÇÔê&¦³Û[Jt‹Õ_?;Œ1Óå-­ÆÕ љjDÀIg/¯†J²¯bšHíâeëã"#ãbÚãhÀ4#îB_‚ß»ï›Â#=pÔ—É©‹þÏöé
+#6äí¾—|ÚúâÀ÷5cqÞ=ßhÅõÚºõ¯>ñðþ•.òÏç“ Æ$/½÷ú}ûÏRjŽCˆuqÏ ÍÖͯª˜…"²£"ä(&˜•u.â_4ÐH'`ˆÏ"ΕþŽâ±x,a*¡˜…—a{ÍmßjÀìŠþ)`¢YQZÛ
+Í(NX¡ÏxÄðB¸“ÍV>Ž9¸!ÙÒ·“å0s׿ײ¿îÙð`Җ¼ÜôÙü=~ýQú›Q4úø]ÛLª´\¯fٞáááIá¹Ò
+rw›ø\—Äxr ®LI²Ûùù(XÌ
+÷°]®tfÞ +sË®ÖGvÑçõJþ“ @ï!r£ôÛ¼{½€âƒ|%|e'§„SvÒ,4ÛIƒÐ`'ۅívrŸpŸÜ%Üe's…¹vrA¼à Ä p^†:ˆÃ.
+n‹bbã9;5C&Õò‹Ù¬V(àìÒýBÌüÖ° ¢¥B±wv䪊îö•*ó a*ÐYÌÅ©•ôP+‘¶¶iu)–¶T »ÓÖÚJƤM5V¨®®×µý!úS
+aþMFw@iô‰>ƠяvrF8c''…“vò²ð²ìöÚÉ6a›l6ÚɝvrY¼ì 3Ä2Jå Š¨´ÑH±˜¤j˜U‚•
+i$Ådt‹Ñá2§N«Ýèȱ¥Òrl°Kαe Y9¶\!ËiͲ\f·˜é2狙Nk!ÍiõÒ\f³Ëşa¶:%9¶Ìœ[–P’)ŠÄa,I3LÐg¼‹¡ZÍæâr:srˆ9+33ͱÄ;QXBœw[sؼiõ¶½0¡Æ
+÷®Ÿüá†mhŸüA.}üºóº²“Á=“÷Ü3¹ž>>¹^h¦ìy¿º©_‰2Î@«¼Eè7D…˜áë-i†رÐ<o¡®Àž’R
+[ûRË)ƒJތ5Û3t´”´§?ƒ÷pØË‰:…«éS§šÙ](>½ã˅ÚSôOþ•;Ê¿ßýÂß¿pœ>è|ôªeê5âǟæNÛñ6›¹ÉÔ¯„zܑtŽv?™ÚM)³þ>‘
+b|g‚ßÀ€ ³øk"üä| 6ºñ+ì¶?h_
+k_oIg—ÅÎ÷yìÎɍ¹úßþW&óNè8ô&ÜoÉb¯¤Óƒ1E04±}ÛD4U±s\˜©2Å7øÌ—6®Ôk«x¾E8{ƒø®xoyR¡-¤ˆÜୂ°K¸*ï*—Г§¸„©²MؔÚeÙZml“kÔGYZ±ÎΤàZOy‹ ‹
+›<fOSQ‘ÔTXX@¶ š·æì˜åØ*¥Ñ´Åld;
+jz§Õù8­’&JÓjΒÔT+›6¬É©7²;œ|֔˜XYGÕæÖSڜgN‰ù‚ͬ¸iý¢S«î“óN®àO„yºõbŒd“uÞL‹E—í²dfë¬REjcª
+“{
+Êf±Õ‡”r"•œÈ”`O·Ñ K̓¥znÎ.í'flX±·›ÀØK§°÷-Ä7˜° Öei¯5Ñ7ìx²é†+Ûڊ[n[ä½~mSðT‡w—0ïøŵùé«O4-rï¨cò…É/tº#ìW¼©# ¨hÔ ‡„M­6é½°3XCô`‡,ò„á I› $Ï$é©>fDßüp ÌmM«N‘ܪ¼SðçÌãS2?˂.dÿºÆOŠôÓ)ñeáºIyœ6Ó¦ñÉ>vÞé¾ÉËi>-“Nî÷®ÒéKôºýMz}ŽI¯7ê@*}¡V‹ f¦êÒô#;¥Çb0ºÓìwfRöó@a%fóê±4[:,¢%7#sò`\A¬và‘(ìÆûj7µ«ŸXSs³Ã¤}o39ì¥&‡ÙESlFíÅjv.
+óª={ÇÆ:¶{¹ééɁ¢EžºEO×´Ü·RwòÕWÏüÝý¶•wé6ÿ÷ƒ/®êecÏ¥“~ñ]Ýâ nØ7Í"TsœB»0œjhÎjÎmϽ³àÁ}mF­«¹ 5£ÕՙÑéòeø\Û F
+N^KÿÐp2õ7NÇl¡(µ"«^X˜ºRXžºIð ?K}Óù~öÉÜ]Ÿ
+vØýdæ¹-F›!Ó­³[Ž­†°ÓìÔa÷Ú·ÛGì:{4í<§%äÌx‡J{ŠCvö¯dMã/Ž.âoMÍ8*aîœûÖ}oòtè'×ü`×¾Ï
+°Rz&þ{¼VýÃě–QKrsÃZª`݇m¶À†ˆÝ%Ž?6ξã¾
+ÓYNiYÁȈFíË}èõu¥Þʽ—fЯŠ™ý7V^{å%¡+:.[¼;Z}nÿ‹g§ÕwOíÜ;æØÞ²®ã–Û/[·§2^ýmaѦíÛìM4¹Lx²ü¾÷ËæÄO™gޏodÂ2†ÿ®
+ÔQ.d’ç Î&;½™l¼[§N½Çëc £üO’ä­èž
+˜þψ1}qâGOa6Êù ÇÁFÎW96r¾Éq°‘ó$ÇÁF¹+86ʽœã`£\?ÇÁF¹Cå5rl”'sl”÷yösl$Ù96’b•ÍFÜÌÚUv#â֖²¯"žŠé!nC\ãé`m);ˆxàéeGÏDšŸ!ž…|~‰x6¦ÿñ\V¶œ"îb4åšlùŒ¦Üƒ¸ñ
+Ó(¥³hÈzä¨&ZÀ$X ¡Dʁ“äŒ@Ž
+ÐgOãu¡’IŠU ‡äÕ·Q£L_½P2ˆõï„4Æùo×µ©¬E~$Š1ÝHpÍh¢œë:°ƒDÖ`y‰”b}« 쀺ûPç2гr
+-‡I­r{ÈØF­ÜpÂþ~îåanAu£¢çi­‹[Hæòǰ6 k˜.UÜòL7ìzyLóFB^ZÝñtMÛQ®÷Tõº(ðTP+~ˆ5Þ>žCM3Jút{l5ÀòLRfÏ /¯Á‡åwóZý¼¥Zßc’ZèÃ>à©I½ú¹vC¼%~¤áUÒª*zi¥;¿OÄÇT5Ñ–D~IllØÉ¥•¹þ}8ÚI¼—Æu֋u÷cªVžõ0?·áö»0÷‘„¬GïæÚÖ8$Gym¥y‡„:ôñöûÑj¤ cßÓ¼qKj-™îÝþ„g±ž·L¥a¾¹›÷-mÜ $äâUÒ{£gÍDêYíóñ:zC 5Ý;Ã7² Ò㚍áïþÅ[؇¾-¡\ºUÑñD³:“]ëïQ>jh½Iå^–=µÜ ZD&WbyMjÆ×‡¹IOÓjïEm…±— 'Z¯{ÇL–/£&"¼և4-F±|\â8÷0úPÇ͸l•8çE!¯æÒ*àË>•H5}„­ÄÑ)ؗ€D )x¥’mèšÅ+”ÿ·5 ¡Çh´Ê´ZVÃHßóýr€eày ï€T6,‡ðK˜Þ)2ß\3A|Vaj±â»ófKü¼œ½ê‰§kýDÓh˜ë<é£_lKZ&>"Çí܃¹Ã@KÔéKŒmš?'ç£é£¥6r$ÇQ­ÿúù˜©ò>ݏ\”ĘÈzk7¯õîÝ|,íIÌFZÑÏÑL|ìJŒN
+¡ýw¢5§¯Cããc’2´Ú
+5†güíÑäšîÝA>¢jú×zU˜ûGräéCŸ×¢¤¬Ä¶Ÿk¹øÚ‹Í9
+_¡i­ÑÖ{>´êàY6ˆœ¥ï$gW«lEÒËç¡Ý¸6"ÓWWÙúq~¾þóó½ÎùVqçÚQÓVrÅêCžçöã¸Åä³tÝ÷WI›Ôò¹5̜ïgJ¤ðUlæž8¶?i!ÚN Öðµ¤öZ„ àjìkæv—`iç”óñ·qká£áu¤€•ZDÂ^€ãþ×ÍuûÌÏ«:K{‰ù°k8¬ôÉ>EzLêP¤U¡ÁP’¤e¡H8‘£þРø*¥V9*ÿ¢*ÆLê b,E•VB¹õõóçAP])µÒZÿ@T•Ö*ªÙ­ô¶Dür`­Ò ȑ8ÛL”xjÃz%¢²
+‚’ü}R¯¢úûçJš^|@%û!3Š(Ò@,(‚ø’o@ŽÈ>h\ø}*´C” o˜µß*CŸ¢ª!¨Ž5Hþ1߀äç¬XãcƒŠ4䏠‚¡P/+Íp;
+‚ø@©j<-:¤ Fý
+Pû‰E†+%Ôth·‘ÁÖш"GƒÅ
+øb`o•UƬ§DP„¾X (Ê
+HzAĨ_eŒy8
+ôŒýHsKpôQ°/t¿A —û#ŠÂ<±Rê†b2¸A¨‡u#(! óÎ!æN
+NašŽ(¾(عô˜”‹™0Ô¯ š8QLÞÛ‹k3=jZƒÊÔ¸PàÈ U$
+á&-ÊÙm˜Zaâß €“¸lˆçuâ2ˆmÙ¢­W|@< ~O< pP|V|òâ-ý‹·ôÉÅ[úoé_¼¥ñ–þÅ[úoé_¼¥ñ–þÅ[úoé_¼¥ñ–þÅ[úÿoéÏØù'qéϗ÷ÞYe”÷ð®ÀxÐç]ë
+t tíººK ¬ŸQƒ/Äe5ö6öh­ £ô!‘`¿¸p™óã‰gyÉT{£øÜ¿–bbsÈi€)‘x ¬èذ`/€éXJàZ€ÃaŽWÌ»«Æ;ÑmïT㥬]nނ—㺵xÕåZܺR#kÐÈÔjɕKµ¸l®§—T°Øl­~¾%[Ì&¯ˆìáË0„Tx‘Ø)%ò ˜EFÑÀS¼búø¬Ò꽇E¡¢ RЩgêy‘ŽYÓª[Ì”pš¤ð;ᔖ#œ·¥Uïm¹Løy
+0%°·ÆÞŠ@ð=Ú!¬hØp-ÀiŠs@ !.âS(Xºƒ] GàSŸB¡Ð›ïp;*—Š{ÜÔ^@;
+„:’ÍÞNHO3¥MPë3¶~òg+IiIîö|0ĝ<Þ3v&ß3A¿6VzÈӒEï#:ð:ZOJi ċ‰Š× ‰ÛÄâZ➀¸z̽ŠÙÇJçzž¥6VêÏ÷ž“î Ð_»y~*Mèè˜ç5HyâÏ ÷­ž—ª&Lò\é…èY Iº{öCÒë ã1Ï5,zÆsµ{…g§3-c«
+W^»gmé&Ï¥À¯ÕÝãñªÀóO³{«§I£ZÈÊ<ã™"Thèv¶+-.@†ëê&è€w®ñ^ãFc‡q‘±Ú8×Xhôó.c¦)Ýä0ÙL©&³Éd2˜t&ÁDL™ìåÃ
+örE¦ÁÁ"þªq;mß"aã5 ä22š!¶ íKiûèó>ÒÞ#þ©³x‚š/ß4ª/^JGÓÛI{×ÒÑÅíÆ©µ£uí£Æ5_Þx€Ò;º!uT¸e‚’®tŠ%ÝèM_Æ~²¦Ýx»‹Åå7ÞÞÝMœÙ»›ÍéKÒꗷž'ØÎÃi?ãœçÞÛÞ¹qôñüîÑj†Låw·þc§´yãAú1ý¨­õ ý=‹º7—ЏÛÖ²tqIkwwû]tD¢¿:ð˜ß#©€HŒŽH¦î®ÊÝ,]J
+cVËêZQwžì:–½‚ÕUÇêªcu­ð®ÀºúøšLdi÷²ÍZ<.XÌà¯Û]…ÝK³á%輍…Îk\Ï‚äQb©èM-^:j`YóZæµ°,èS,ËÉvžå¼¦±Ðõ,}”g9 9­x)©ˆÆÔq¶ù[µþ )c
+×Â
+õB×6ê•[Õ(!í£s:ÛG›/ß´ñ€Ñ©ÛY“FâiKÛÄÔóZb%$6°DQL²´&––’ ϵŒÇxŽÙˆphœz (lêºÅтö.†‚®MÐÖ͛6> Ë%6=¨ÝÐ@•VP5ÎÅ&ü$FÖÞ8DcãzˆòX+EÔ¸:P†ªÿt{
+endstream
+endobj
+
+21 0 obj
+25100
+endobj
+
+22 0 obj
+<< /Type /FontDescriptor
+ /FontName /CAAAAA+ArialMT
+ /Flags 4
+ /FontBBox [ -664 -324 2027 1037 ]
+ /ItalicAngle 0
+ /Ascent 905
+ /Descent -211
+ /CapHeight 1037
+ /StemV 80
+ /FontFile2 20 0 R
+>>
+endobj
+
+23 0 obj
+<< /Length 591
+ /Filter /FlateDecode >>
+stream
+xœ]”ÍŽÚ@„ï–üsÜVx¦glVBH,,‡ü(lÀرl˘o»ªwå*OwO}=­^l»Cیfñcèªc͹ië!ÞºûPEsŠ—¦MëLÝTã‡Ä_u-û4YLùÇÇmŒ×C{îÌj•&Æ,~N·qx˜§Mݝâ|ü>Ôqhڋyúµ=òÓñÞ÷â5¶£ÉÒd½6u<Ï5¿–ý·òÍéχzŠhÆÇó”øOÈû£Æñƒ¥·ª«ã­/«8”í%¦É*ËÖfµß¯Ó$¶õÿ§KϬӹú]s´¢³ÌÛõ,DpBQ@x—Aæˆ"ßB<YR¼B¼@bCÁ{^¶‡ØR¼Aì(^ Þè€÷ìéÞlưyrðXò(`ɓÁ%‡7Kž®-y
+ _B(Oȓó„<Ž‚<–<}³ÊC×ä)˜C£Ž<Gž"‡ ONA# £Ž<‚KòPGX€<GGžÀòx†)’'°y<^Áéûౄ<F…<p¢ó†Æ‹ÎÃȓƒGtÞ0!Bž;Bž;BÆ‹Îz-:oòôF×BÁPˆÎ 'GC<yìxòxòx¼¾
+x7ðx}\êg—Y¸ö¼yåA{=y 輡^ßp^yèMyxBáɞ÷ÀA OAy(tÞP §ÀËÝ®™u2o,ÉÏ}V݇aZeØ¥XaóòjÚø¹oû®GžþüÛ
+6Çendstream
+endobj
+
+24 0 obj
+<< /Type /Font
+ /Subtype /TrueType
+ /BaseFont /CAAAAA+ArialMT
+ /FirstChar 0
+ /LastChar 84
+ /Widths [ 750 666 722 943 277 666 222 556
+ 500 277 333 556 556 222 277 777
+ 833 556 500 556 666 556 500 722
+ 500 556 333 277 1015 556 500 333
+ 556 500 277 556 556 556 556 556
+ 556 556 666 722 277 666 833 556
+ 722 777 722 610 556 777 666 666
+ 722 722 500 259 333 277 190 333
+ 556 556 556 556 666 583 333 333
+ 610 354 556 500 277 277 556 333
+ 583 583 222 556 389 ]
+ /FontDescriptor 22 0 R
+ /ToUnicode 23 0 R
+>>
+endobj
+
+25 0 obj
+<< /F1 19 0 R
+ /F2 24 0 R
+ >>
+endobj
+
+26 0 obj
+<< /Im3 3 0 R
+ >>
+endobj
+
+27 0 obj
+<<
+ /Font 25 0 R
+ /XObject 26 0 R
+ /ProcSet [ /PDF /ImageC /ImageI ]
+>>
+endobj
+
+28 0 obj
+<< /Type /Page
+ /Parent 14 0 R
+ /Resources 27 0 R
+ /MediaBox [ 0 0 595 842 ]
+ /Contents 1 0 R
+>>
+endobj
+
+29 0 obj
+<< /Type /Page
+ /Parent 14 0 R
+ /Resources 27 0 R
+ /MediaBox [ 0 0 595 842 ]
+ /Contents 4 0 R
+>>
+endobj
+
+30 0 obj
+<< /Type /Page
+ /Parent 14 0 R
+ /Resources 27 0 R
+ /MediaBox [ 0 0 595 842 ]
+ /Contents 6 0 R
+>>
+endobj
+
+31 0 obj
+<< /Type /Page
+ /Parent 14 0 R
+ /Resources 27 0 R
+ /MediaBox [ 0 0 595 842 ]
+ /Contents 8 0 R
+>>
+endobj
+
+32 0 obj
+<< /Type /Page
+ /Parent 14 0 R
+ /Resources 27 0 R
+ /MediaBox [ 0 0 595 842 ]
+ /Contents 10 0 R
+>>
+endobj
+
+33 0 obj
+<< /Type /Page
+ /Parent 14 0 R
+ /Resources 27 0 R
+ /MediaBox [ 0 0 595 842 ]
+ /Contents 12 0 R
+>>
+endobj
+
+14 0 obj
+<< /Type /Pages
+ /Resources 27 0 R
+ /MediaBox [ 0 0 595 842 ]
+ /Kids [ 28 0 R
+ 29 0 R
+ 30 0 R
+ 31 0 R
+ 32 0 R
+ 33 0 R
+ ]
+ /Count 6
+>>
+endobj
+
+34 0 obj
+<< /Type /Catalog
+ /Pages 14 0 R
+>>
+endobj
+
+35 0 obj
+<< /Author <FEFF004B006C0061007500730020004800690074007300630068006C00650072>
+/Creator <FEFF005700720069007400650072>
+/Producer <FEFF004F00700065006E004F00660066006900630065002E006F0072006700200031002E0031002E0031>
+/CreationDate (D:20040813211645+02'00')
+>>
+endobj
+
+xref
+0 36
+0000000000 65535 f
+0000000017 00000 n
+0000001125 00000 n
+0000001152 00000 n
+0000012403 00000 n
+0000014910 00000 n
+0000014937 00000 n
+0000018291 00000 n
+0000018318 00000 n
+0000021437 00000 n
+0000021464 00000 n
+0000025176 00000 n
+0000025204 00000 n
+0000027460 00000 n
+0000074162 00000 n
+0000027488 00000 n
+0000045263 00000 n
+0000045290 00000 n
+0000045535 00000 n
+0000046031 00000 n
+0000046430 00000 n
+0000071638 00000 n
+0000071665 00000 n
+0000071905 00000 n
+0000072579 00000 n
+0000073172 00000 n
+0000073229 00000 n
+0000073271 00000 n
+0000073374 00000 n
+0000073505 00000 n
+0000073636 00000 n
+0000073767 00000 n
+0000073898 00000 n
+0000074030 00000 n
+0000074396 00000 n
+0000074457 00000 n
+trailer
+<< /Size 36
+ /Root 34 0 R
+ /Info 35 0 R
+>>
+startxref
+74740
+%%EOF
/pcivme-3.2/doc/template.h
0,0 → 1,47
#ifndef __TEMPLATE_H__
#define __TEMPLATE_H__
 
//****************************************************************************
// Copyright (C) 2001-2004 ARW Elktronik Germany
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU 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)
//****************************************************************************
 
//****************************************************************************
//
// name and purpose of this module
//
// $Log: template.h,v $
// Revision 1.2 2004/08/13 19:23:10 klaus
// conversion to kernel-version 2.6, released version 3.0
//
//
//****************************************************************************
 
//****************************************************************************
// INCLUDES
 
//****************************************************************************
// DEFINES
 
#endif // __TEMPLATE_H__
/pcivme-3.2/doc/todo.txt
0,0 → 1,8
Stand: 113.08.2004
 
1. paging access to VME
2. debugging pvmon
3. mmap feature revivify
 
 
 
/pcivme-3.2/doc/template.make
0,0 → 1,40
#****************************************************************************
# Copyright (C) 2001-2004 ARW Elektronik Germany
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU 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)
#****************************************************************************
 
#****************************************************************************
#
# name and purpose of this Makefile
#
# $Log: template.make,v $
# Revision 1.2 2004/08/13 19:23:10 klaus
# conversion to kernel-version 2.6, released version 3.0
#
#
#****************************************************************************
 
#****************************************************************************
# DEFINES
 
/pcivme-3.2/doc/COPYING
0,0 → 1,340
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
 
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
Preamble
 
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
 
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
 
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
 
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
 
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
 
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
 
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
 
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
 
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
 
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
 
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
 
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
 
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
 
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
 
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
 
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
 
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
 
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
 
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
 
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
 
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
 
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
 
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
 
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
 
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
 
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
 
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
 
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
 
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
 
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
 
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
 
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
 
NO WARRANTY
 
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
 
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
 
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
 
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
 
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
 
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
 
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
 
Also add information on how to contact you by electronic and paper mail.
 
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
 
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
 
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
 
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
 
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
 
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
 
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
/pcivme-3.2/doc/template.c
0,0 → 1,52
//****************************************************************************
// Copyright (C) 2001-2004 ARW Elektronik Germany
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU 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)
//****************************************************************************
 
//****************************************************************************
//
// name and purpose of this module
//
// $Log: template.c,v $
// Revision 1.2 2004/08/13 19:23:10 klaus
// conversion to kernel-version 2.6, released version 3.0
//
//
//****************************************************************************
 
//****************************************************************************
// INCLUDES
 
//****************************************************************************
// DEFINES
 
//****************************************************************************
// GLOBALS
 
//****************************************************************************
// LOCALS
 
//****************************************************************************
// CODE
 
/pcivme-3.2/lib/pcivme_ni.h
0,0 → 1,84
#ifndef __PCIVME_NI_H__
#define __PCIVME_NI_H__
 
//-------------------------------------------------------------------------------------------
// pcivme_ni.h - header for ni-labview shared library or dll for ARW pcivme interface
// this library can also be used for other purposes aside from labview
//
// Copyright (C) 2002-2004 ARW Elektronik Germany
//
// this source code is published under LGPL (Open Source). You can use, redistrubute and
// modify it unless this header is not modified or deleted. No warranty is given that
// this software will work like expected.
// This product is not authorized for use as critical component in life support systems
// wihout the express written approval of ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// $Log: pcivme_ni.h,v $
// Revision 1.8 2004/08/13 19:23:45 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.7 2002/10/20 18:07:18 klaus
// changed error handling
//
// Revision 1.6 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/17 21:16:03 klaus
// filled function bodies
//
// Revision 1.3 2002/10/17 21:16:03 klaus
// filled function bodies
//
// Revision 1.2 2002/10/17 19:05:03 klaus
// VME access is working through test to lib to driver
//
// Revision 1.1 2002/10/12 22:04:44 klaus
// first work done
//
// what who when
// first steps AR 17.11.1999
// VMEerror new AR 07.01.2000
// made LINUX shared library from windows template AR 12.10.2002
//
 
//-------------------------------------------------------------------------------------------
// INCLUDES
//
#define BOOLEAN int
#if !defined(TRUE) && !defined(FALSE)
#define FALSE 0
#define TRUE 1
#endif
 
//-------------------------------------------------------------------------------------------
// PROTOTYPES
//
#ifdef __cplusplus
extern "C"
{
#endif
int VMEopen(const char *cszDeviceName, unsigned char ubAddressModifier, int *pnHandle);
int VMEinit(const char *cszDeviceName, unsigned short nVMEMM, unsigned char ubAddressModifier, int *pnHandle);
int setAccessProperties(int nHandle, unsigned char bModifier, unsigned char bAccessType);
int VMEread(int nHandle, unsigned long ulAddress, unsigned char ubAccessWidth, unsigned long ulElementCount, void *pvBuffer);
int VMEwrite(int nHandle, unsigned long ulAddress, unsigned char ubAccessWidth, unsigned long ulElementCount, void *pvBuffer);
int VMEaccessVIC(int nHandle, unsigned char ubAccessMode, unsigned short uwAddress, unsigned char *ubContent);
int VMEreset(int nHandle);
int VMETAS(int nHandle, unsigned long ulAddress, unsigned char *ubResult);
int VMEcontrolInterrupt(int nHandle, BOOLEAN *bEnable);
int VMEinterrupt(int nHandle, unsigned char *ubVector);
int VMEsysfailGet(int nHandle, BOOLEAN *bResult);
int VMEsysfailSet(int nHandle, BOOLEAN bForce);
int VMEerror(int nHandle);
int VMEclose(int nHandle);
int GetLastError(int nHandle);
#ifdef __cplusplus
}
#endif
 
#endif /* __PCIVME_NI_H__ */
/pcivme-3.2/lib/pcivme_ni.c
0,0 → 1,473
//-------------------------------------------------------------------------------------------
// pcivme_ni.c - shared library for ARW pcivme interface (libpcivme.so)
//
// Copyright (C) 2002-2004 ARW Elektronik Germany
//
// this source code is published under LGPL (Open Source). You can use, redistrubute and
// modify it unless this header is not modified or deleted. No warranty is given that
// this software will work like expected.
// This product is not authorized for use as critical component in life support systems
// wihout the express written approval of ARW Elektronik Germany.
//
// Please announce changes and hints to ARW Elektronik
//
// $Log: pcivme_ni.c,v $
// Revision 1.8 2004/08/13 19:23:45 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.7 2002/10/20 18:07:18 klaus
// changed error handling
//
// Revision 1.6 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/17 21:16:03 klaus
// filled function bodies
//
// Revision 1.3 2002/10/17 21:16:03 klaus
// filled function bodies
//
// Revision 1.2 2002/10/17 19:05:03 klaus
// VME access is working through test to lib to driver
//
// Revision 1.1 2002/10/12 22:04:30 klaus
// first work done
//
 
//-------------------------------------------------------------------------------------------
// INCLUDES
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/types.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
#include <../driver/pcivme.h>
#include <../driver/vic.h>
#include <pcivme_ni.h>
 
//-------------------------------------------------------------------------------------------
// DEFINES
//
#define LOCAL_STRING_LEN 40
 
//-------------------------------------------------------------------------------------------
// TYPEDEFS
//
 
// storage for path specific data
typedef struct
{
int nFileNo; // file number to f
__u8 cAddressModifier; // associated VME address modifier
__u8 cAccessWidth; // current access width
int nLastError; // != 0 if a previous error occurred
} VMEMM_DEVICE;
 
//-------------------------------------------------------------------------------------------
// FUNCTIONS
//
 
// construct a device file name
static char *szDeviceName(const char *cszBaseName, int nVMEMM)
{
static char path[LOCAL_STRING_LEN];
int i = LOCAL_STRING_LEN - 1;
 
path[0] = 0;
 
memset(path, 0, LOCAL_STRING_LEN);
 
if (strlen(cszBaseName) >= (LOCAL_STRING_LEN - 3))
return "";
 
if (nVMEMM > 15)
return "";
 
strncpy(path, cszBaseName, LOCAL_STRING_LEN - 3);
 
while ((i--) && (path[i] != '_')); // search for '_'
if (i)
{
i++; // go after '_'
if (nVMEMM >= 10)
{
path[i] = '1';
nVMEMM -= 10;
i++;
}
path[i] = '0' + nVMEMM;
i++;
path[i] = 0; // trailing 0
}
else
return "";
 
return path;
}
 
static int initHardware(VMEMM_DEVICE *dev)
{
PCIVME_INIT_COMMAND init;
 
init.sVie[0].bDestination = STOP;
init.sVie[0].bAccessType =
init.sVie[0].dwValue =
init.sVie[0].wOffset = 0;
 
if (ioctl(dev->nFileNo, PCIVME_INIT_HARDWARE, &init) < 0)
{
dev->nLastError = errno;
return errno;
}
 
return 0;
}
 
static int deInitHardware(VMEMM_DEVICE *dev)
{
PCIVME_INIT_COMMAND deinit;
 
deinit.sVie[0].bDestination = STOP;
deinit.sVie[0].bAccessType =
deinit.sVie[0].dwValue =
deinit.sVie[0].wOffset = 0;
 
if (ioctl(dev->nFileNo, PCIVME_DEINIT_HARDWARE, &deinit) < 0)
{
dev->nLastError = errno;
return errno;
}
 
return 0;
}
 
int VMEopen(const char *cszDeviceName, unsigned char ubAddressModifier, int *pnHandle)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)NULL;
int error;
 
*pnHandle = 0;
 
dev = (VMEMM_DEVICE *)malloc(sizeof(*dev));
if (!dev)
return errno;
 
dev->nFileNo = open(cszDeviceName, O_RDWR);
 
if (dev->nFileNo == -1)
{
error = errno;
free(dev);
return error;
}
 
dev->cAddressModifier = ubAddressModifier;
*pnHandle = (int)dev;
 
error = initHardware(dev);
if (error)
return error;
 
dev->nLastError = 0;
 
return setAccessProperties(*pnHandle, dev->cAddressModifier, BYTE_ACCESS); // set access properties to default
}
 
int VMEinit(const char *cszDeviceName, unsigned short nVMEMM, unsigned char ubAddressModifier, int *pnHandle)
{
char *szLocalDeviceName = szDeviceName(cszDeviceName, nVMEMM);
 
return VMEopen(szLocalDeviceName, ubAddressModifier, pnHandle);
}
 
int setAccessProperties(int nHandle, unsigned char bModifier, unsigned char bAccessType)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
 
PCIVME_ACCESS_COMMAND access_command;
access_command.bAccessType =
access_command.bIncrement = bAccessType; // increment and accessType are the same
access_command.bModifier = bModifier;
 
if (ioctl(dev->nFileNo, PCIVME_SET_ACCESS_PARA, &access_command) < 0)
{
dev->nLastError = errno;
return errno;
}
 
dev->cAddressModifier = bModifier;
dev->cAccessWidth = bAccessType;
 
return 0;
}
 
int VMEread(int nHandle, unsigned long ulAddress, unsigned char ubAccessWidth, unsigned long ulElementCount, void *pvBuffer)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
size_t count = (size_t)(ulElementCount * ubAccessWidth);
ssize_t result;
int error;
 
if (dev->cAccessWidth != ubAccessWidth)
{
if ((error = setAccessProperties(nHandle, dev->cAddressModifier, ubAccessWidth)))
return error;
}
 
if (lseek(dev->nFileNo, ulAddress, SEEK_SET) < 0)
return errno;
 
result = read(dev->nFileNo, pvBuffer, count);
 
if (result != count)
{
if (result < 0)
{
dev->nLastError = errno;
return errno;
}
else
return EFAULT;
}
 
return 0;
}
 
int VMEwrite(int nHandle, unsigned long ulAddress, unsigned char ubAccessWidth, unsigned long ulElementCount, void *pvBuffer)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
size_t count = (size_t)(ulElementCount * ubAccessWidth);
ssize_t result;
int error;
 
if (dev->cAccessWidth != ubAccessWidth)
{
if ((error = setAccessProperties(nHandle, dev->cAddressModifier, ubAccessWidth)))
return error;
}
 
if (lseek(dev->nFileNo, ulAddress, SEEK_SET) < 0)
return errno;
 
result = write(dev->nFileNo, pvBuffer, count);
 
if (result != count)
{
if (result < 0)
{
dev->nLastError = errno;
return errno;
}
else
return EFAULT;
}
 
return 0;
}
 
int VMEaccessVIC(int nHandle, unsigned char ubAccessMode, unsigned short uwAddress, unsigned char *ubContent)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
PCIVME_VIC68A_ACTION vic68a_action;
 
vic68a_action.bAccessMode = ubAccessMode;
vic68a_action.bContent = *ubContent;
vic68a_action.wRegisterAddress = uwAddress;
 
if (ioctl(dev->nFileNo, PCIVME_ACCESS_VIC68A, &vic68a_action) < 0)
{
dev->nLastError = errno;
return errno;
}
 
*ubContent = vic68a_action.bContent;
 
return 0;
}
 
int VMEreset(int nHandle)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
PCIVME_RESET_COMMAND reset_command;
int i = 10;
 
reset_command.bCommand = GLOBAL_RESET_CMD;
reset_command.bResult = 0xff;
 
if (ioctl(dev->nFileNo, PCIVME_RESET, &reset_command) < 0)
{
dev->nLastError = errno;
return errno;
}
 
do
{
usleep(100);
reset_command.bCommand = POLL_RESET_CMD;
reset_command.bResult = 0xff;
if (ioctl(dev->nFileNo, PCIVME_RESET, &reset_command) < 0)
{
dev->nLastError = errno;
return errno;
}
} while ((reset_command.bResult) && (i--));
 
if (!i)
return ETIME;
 
dev->nLastError = 0;
 
return 0;
}
 
int VMETAS(int nHandle, unsigned long ulAddress, unsigned char *ubResult)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
PCIVME_TAS_STRUCT tas;
 
tas.bContent = *ubResult;
tas.bModifier = dev->cAddressModifier;
tas.dwAddress = ulAddress;
 
if (ioctl(dev->nFileNo, PCIVME_TAS, &tas) < 0)
{
dev->nLastError = errno;
return errno;
}
 
*ubResult = tas.bContent;
 
return 0;
}
 
int VMEinterrupt(int nHandle, unsigned char *ubVector)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
PCIVME_VECTOR_LEVEL ubLocalVector;
 
if (ioctl(dev->nFileNo, PCIVME_READ_VECTOR_POLL, &ubLocalVector) < 0)
{
dev->nLastError = errno;
return errno;
}
 
*ubVector = (__u8)ubLocalVector.dwStatusID;
 
return 0;
}
 
int VMEsysfailGet(int nHandle, BOOLEAN *bResult)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
PCIVME_VIC68A_ACTION sAction; // structure to access vic chip
 
sAction.wRegisterAddress = EGICR;
sAction.bAccessMode = VIC68A_READ;
sAction.bContent = 0;
 
if (ioctl(dev->nFileNo, PCIVME_ACCESS_VIC68A, &sAction) < 0)
{
dev->nLastError = errno;
return errno;
}
 
*bResult = (sAction.bContent & 0x08) ? FALSE : TRUE;
 
return 0;
}
 
int VMEsysfailSet(int nHandle, BOOLEAN bForce)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
PCIVME_VIC68A_ACTION sAction; // structure to access vic chip
 
sAction.wRegisterAddress = ICR7;
sAction.bAccessMode = (bForce == TRUE) ? VIC68A_AND : VIC68A_OR;
sAction.bContent = (bForce == TRUE) ? 0x3F : 0x80;
 
if (ioctl(dev->nFileNo, PCIVME_ACCESS_VIC68A, &sAction) < 0)
{
dev->nLastError = errno;
return errno;
}
 
return 0;
}
 
int VMEerror(int nHandle)
{
__u8 ubVector;
 
VMEinterrupt(nHandle, &ubVector);
 
if (ubVector == 7)
return EFAULT; // it's a bus error
else
return 0;
}
 
int VMEclose(int nHandle)
{
int error = 0;
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
 
if (dev != (VMEMM_DEVICE *)NULL)
{
deInitHardware(dev);
 
if (dev->nFileNo != -1)
close(dev->nFileNo);
else
error = -EINVAL;
 
free(dev);
}
 
return error;
}
 
int VMEcontrolInterrupt(int nHandle, BOOLEAN *bEnable)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
PCIVME_IRQ_CONTROL control;
 
control.bEnable = *bEnable;
 
if (ioctl(dev->nFileNo, PCIVME_CONTROL_INTERRUPTS, &control) < 0)
{
dev->nLastError = errno;
return errno;
}
 
// status of interrupt enable before set
*bEnable = control.bEnable;
 
return 0;
}
 
int GetLastError(int nHandle)
{
VMEMM_DEVICE *dev = (VMEMM_DEVICE *)nHandle;
int nLocalError;
 
nLocalError = dev->nLastError;
dev->nLastError = 0;
 
return nLocalError;
}
 
 
/pcivme-3.2/lib/Makefile
0,0 → 1,56
#****************************************************************************
# Copyright (C) 2001-2004 ARW Elektronik Germany
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU 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.
#
# Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)
#****************************************************************************
 
#****************************************************************************
#
# Makefile - makefile for ARW Elektronik CAMAC interfaces shared library
#
# $Log: Makefile,v $
# Revision 1.3 2004/08/13 19:23:45 klaus
# conversion to kernel-version 2.6, released version 3.0
#
# Revision 1.2 2002/10/19 08:50:05 klaus
# commit after repair
#
#****************************************************************************
 
TARGET = libpcivme.so.1.0.2
FILES = pcivme_ni
LIB = /usr/lib
 
INCLUDEDIR = /usr/include
CFLAGS = -shared -Wall -Wl,-soname,libpcivme.so.1 -g -lc -I$(INCLUDEDIR) -I.
 
all: $(FILES)
mv $(FILES) $(TARGET)
 
clean:
rm -f $(FILES) *~ core
 
# only root may install
install:
cp $(TARGET) $(LIB)/$(TARGET)
ln -sf $(LIB)/$(TARGET) $(LIB)/libpcivme.so.1
ln -sf $(LIB)/libpcivme.so.1 $(LIB)/libpcivme.so
/sbin/ldconfig
 
 
/pcivme-3.2/driver/pciif.h
0,0 → 1,100
#ifndef __PCIIF_H__
#define __PCIIF_H__
//****************************************************************************
// Copyright (C) 2001-2004 ARW Elktronik Germany
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU 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)
//****************************************************************************
 
//****************************************************************************
//
// pciif.h - all definitions about the VMEMM module
//
// $Log: pciif.h,v $
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
//****************************************************************************
// INCLUDES
#include <linux/types.h>
#include "vic.h"
 
//****************************************************************************
// DEFINES
 
/* type of this VMEMM ---------------------------------------------------*/
#define VMEMM_MODULE_TYPE 0x1000
 
/*-----------------------------------------------------------------------*/
/* all addresses relative to PCI-Window */
 
/*------------- addresses of vmemm local devices ------------------------*/
#define CSR (u32)0x0000 /* control status register */
#define VICRES (u32)0x0004 /* VIC reset register / interrupt status */
#define ADRHL (u32)0x0008 /* AdrH and AdrL as long */
#define VICBASE (u32)0x0400 /* base of VIC68A */
#define VECBASE (u32)0x0800 /* base of vector registers */
#define VMEBASE (u32)0x1000 /* base of 4k VME-BUS window */
 
/*---------- parts of addresses derived from above ----------------------*/
#define IVEC1 (u32)(VECBASE + 3) /* IACK 1 vector */
#define IVEC2 (u32)(VECBASE + 5) /* IACK 2 vector */
#define IVEC3 (u32)(VECBASE + 7) /* IACK 3 vector */
#define IVEC4 (u32)(VECBASE + 9) /* IACK 4 vector */
#define IVEC5 (u32)(VECBASE + b) /* IACK 5 vector */
#define IVEC6 (u32)(VECBASE + d) /* IACK 6 vector */
#define IVEC7 (u32)(VECBASE + f) /* IACK 7 vector */
 
#define ADRL (u32)ADRHL /* u16 access addr. VME-addr */
#define ADRH (u32)(ADRHL + 2)
 
/*--------- address mask ------------------------------------------------*/
#define VME_ADR_MASK (u32)0x00000FFF /* masks lower part of address */
 
/*--------- some masks in CSR -------------------------------------------*/
#define FLAG_RMC (u16)0x0001 /* set = next cycle is RMC */
#define FLAG_BLT (u16)0x0002 /* don't use it. must be 0 */
#define FLAG_WORD (u16)0x0004 /* it is a u16 wide interface */
#define FLAG_SYSCTL (u16)0x0008 /* the system contrl. is enabled */
#define MASK_MODNR (u16)0x00F0 /* the mask to get the module No */
#define MASK_FPGA (u16)0x0F00 /* the mask to get the FPGA rev. */
#define MASK_MODTYPE (u16)0xF000 /* the mask to get type of module*/
 
/*---------- action commands in VICRES -----------------------------------*/
#define GLOBAL_RESET (u16)0x000A /* write this to reset the intrfc */
#define LOCAL_RESET (u16)0x0005 /* generate a local reset */
 
#endif // __PCIIF_H__
 
 
/pcivme-3.2/driver/pcivme.mod.c
0,0 → 1,63
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
 
MODULE_INFO(vermagic, VERMAGIC_STRING);
 
struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
 
static const struct modversion_info ____versions[]
__used
__attribute__((section("__versions"))) = {
{ 0xee584c90, "module_layout" },
{ 0x6bc3fbc0, "__unregister_chrdev" },
{ 0x1fedf0f4, "__request_region" },
{ 0x440a4045, "kmalloc_caches" },
{ 0x69a358a6, "iomem_resource" },
{ 0xc8b57c27, "autoremove_wake_function" },
{ 0x27ca2b04, "pci_disable_device" },
{ 0x88ef4b8, "remove_proc_entry" },
{ 0xc8f68b16, "__register_chrdev" },
{ 0x6339a8bc, "mutex_unlock" },
{ 0x91715312, "sprintf" },
{ 0x68dfc59f, "__init_waitqueue_head" },
{ 0x215f9a25, "current_task" },
{ 0xc5c74531, "__mutex_init" },
{ 0x50eedeb8, "printk" },
{ 0xb4390f9a, "mcount" },
{ 0xfd03d00a, "pci_bus_write_config_dword" },
{ 0xcf510c4a, "mutex_lock" },
{ 0x2072ee9b, "request_threaded_irq" },
{ 0xa8a6f639, "__check_region" },
{ 0x42c8de35, "ioremap_nocache" },
{ 0x4d66a1f8, "pci_bus_read_config_word" },
{ 0x580199b1, "pci_bus_read_config_dword" },
{ 0x4292364c, "schedule" },
{ 0xf68c082c, "create_proc_entry" },
{ 0x7c61340c, "__release_region" },
{ 0x7807eace, "kmem_cache_alloc_trace" },
{ 0xe45f60d8, "__wake_up" },
{ 0x37a0cba, "kfree" },
{ 0x622fa02a, "prepare_to_wait" },
{ 0xedc03953, "iounmap" },
{ 0x1fb6d7da, "pci_get_device" },
{ 0x75bb675a, "finish_wait" },
{ 0xedeaaff1, "pci_enable_device" },
{ 0xf20dabd8, "free_irq" },
};
 
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";
 
 
MODULE_INFO(srcversion, "BC454FCFCA2F039491927C2");
/pcivme-3.2/driver/modules.order
0,0 → 1,0
kernel//home/f9daq/pcivme-3.2/driver/pcivme.ko
/pcivme-3.2/driver/pcivme_load
0,0 → 1,36
#!/bin/sh
#
# a simple shell script to load the pcivme driver module
# and to install the associated device files (Hi, 2004)
#
# $Log: pcivme_load,v $
# Revision 1.4 2004/08/13 19:34:45 klaus
# Changed to support kernels 2.6 and lesser
#
# Revision 1.3 2004/08/13 19:23:26 klaus
# conversion to kernel-version 2.6, released version 3.0
#
#
module="pcivme"
device="vmemm_"
group="root"
mode="666"
 
# the modulenumber must be given
if test $1
then
# invoke insmod
/sbin/insmod $module.ko || /sbin/insmod $module.o || exit 1
 
# get major number from /proc/devices
major=`cat /proc/devices | awk "\\$2==\"$module\" {print \\$1}"`
 
rm -f /dev/${device}$1
mknod /dev/${device}$1 c $major $1
 
chgrp $group /dev/${device}$1
chmod $mode /dev/${device}$1
else
echo "usage: pcivme_load module_number"
fi
 
Property changes:
Added: svn:executable
/pcivme-3.2/driver/plxbug.c
0,0 → 1,138
//****************************************************************************
// 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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// plxbug.c -- plx 9050 bug fix code the PCIVME PCI to VME Interface
//
// $Log: plxbug.c,v $
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
#include "common.h" /* must be the first include */
 
#include <asm/types.h>
#include "plxbug.h"
#include "main.h"
 
/*-------------------------------------------------------------------------
// DEFINES
*/
#define PCR_MEMORY_BUG 0x00 // 1st PCR index of potential bug
#define PCR_IO_BUG 0x01 // 2nd PCR index of potential bug
#define PCR_MEMORY_OK 0x04 // 1st PCR index of no bug
#define PCR_IO_OK 0x05 // 2nd PCR index of no bug
 
//-------------------------------------------------------------------------
// EXTERNALS
 
//-------------------------------------------------------------------------
// function to call for bug fix
 
 
// fixes address of LCR through change in address windows - updates PCIConfigHeader
int PLX9050BugFix(PCIConfig *pHeader)
{
u32 dwDataBug;
u32 dwDataOK;
int result = 0;
 
if (pHeader->pciDev->resource[PCR_MEMORY_BUG].start & 0x80)
{
result = pci_read_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_0, &dwDataBug);
if (result)
goto fail;
 
result = pci_read_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_4, &dwDataOK);
if (result)
goto fail;
 
result = pci_write_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_0, dwDataOK);
if (result)
goto fail;
 
result = pci_write_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_4, dwDataBug);
if (result)
goto fail;
 
// put changes in structures, too
dwDataBug = pHeader->pciDev->resource[PCR_MEMORY_BUG].start;
dwDataOK = pHeader->pciDev->resource[PCR_MEMORY_OK].start;
 
pHeader->pciDev->resource[PCR_MEMORY_BUG].start = dwDataOK;
pHeader->pciDev->resource[PCR_MEMORY_OK].start = dwDataBug;
 
PRINTK(KERN_DEBUG "%s : bugfix memory done.\n", DEVICE_NAME);
}
 
if (pHeader->pciDev->resource[PCR_IO_BUG].start & 0x80)
{
result = pci_read_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_1, &dwDataBug);
if (result)
goto fail;
 
result = pci_read_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_5, &dwDataOK);
if (result)
goto fail;
 
result = pci_write_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_1, dwDataOK);
if (result)
goto fail;
 
result = pci_write_config_dword(pHeader->pciDev, PCI_BASE_ADDRESS_5, dwDataBug);
if (result)
goto fail;
 
// put changes in structures, too
dwDataBug = pHeader->pciDev->resource[PCR_IO_BUG].start;
dwDataOK = pHeader->pciDev->resource[PCR_IO_OK].start;
 
pHeader->pciDev->resource[PCR_IO_BUG].start = dwDataOK;
pHeader->pciDev->resource[PCR_IO_OK].start = dwDataBug;
 
PRINTK(KERN_DEBUG "%s : bugfix io done.\n", DEVICE_NAME);
}
 
fail:
if (result)
printk(KERN_ERR "%s : PCI-error %d!\n", DEVICE_NAME, result);
 
return result;
}
 
/pcivme-3.2/driver/.fops.o.cmd
0,0 → 1,758
cmd_/home/f9daq/pcivme-3.2/driver/./fops.o := gcc -Wp,-MD,/home/f9daq/pcivme-3.2/driver/./.fops.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.6/include -I/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include /usr/src/linux-headers-3.5.0-28-generic/include/linux/kconfig.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_AVX=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -I. -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(fops)" -D"KBUILD_MODNAME=KBUILD_STR(pcivme)" -c -o /home/f9daq/pcivme-3.2/driver/./.tmp_fops.o /home/f9daq/pcivme-3.2/driver/./fops.c
 
source_/home/f9daq/pcivme-3.2/driver/./fops.o := /home/f9daq/pcivme-3.2/driver/./fops.c
 
deps_/home/f9daq/pcivme-3.2/driver/./fops.o := \
/home/f9daq/pcivme-3.2/driver/./common.h \
$(wildcard include/config/modversions.h) \
include/linux/version.h \
include/config/modversions.h \
include/linux/kernel.h \
$(wildcard include/config/lbdaf.h) \
$(wildcard include/config/preempt/voluntary.h) \
$(wildcard include/config/debug/atomic/sleep.h) \
$(wildcard include/config/prove/locking.h) \
$(wildcard include/config/ring/buffer.h) \
$(wildcard include/config/tracing.h) \
$(wildcard include/config/numa.h) \
$(wildcard include/config/compaction.h) \
$(wildcard include/config/ftrace/mcount/record.h) \
include/linux/sysinfo.h \
include/linux/types.h \
$(wildcard include/config/uid16.h) \
$(wildcard include/config/arch/dma/addr/t/64bit.h) \
$(wildcard include/config/phys/addr/t/64bit.h) \
$(wildcard include/config/64bit.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/types.h \
include/asm-generic/types.h \
include/asm-generic/int-ll64.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitsperlong.h \
include/asm-generic/bitsperlong.h \
include/linux/posix_types.h \
include/linux/stddef.h \
include/linux/compiler.h \
$(wildcard include/config/sparse/rcu/pointer.h) \
$(wildcard include/config/trace/branch/profiling.h) \
$(wildcard include/config/profile/all/branches.h) \
$(wildcard include/config/enable/must/check.h) \
$(wildcard include/config/enable/warn/deprecated.h) \
include/linux/compiler-gcc.h \
$(wildcard include/config/arch/supports/optimized/inlining.h) \
$(wildcard include/config/optimize/inlining.h) \
include/linux/compiler-gcc4.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types.h \
$(wildcard include/config/x86/32.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types_32.h \
include/asm-generic/posix_types.h \
/usr/lib/gcc/i686-linux-gnu/4.6/include/stdarg.h \
include/linux/linkage.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/linkage.h \
$(wildcard include/config/x86/64.h) \
$(wildcard include/config/x86/alignment/16.h) \
include/linux/stringify.h \
include/linux/bitops.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitops.h \
$(wildcard include/config/x86/cmov.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/alternative.h \
$(wildcard include/config/smp.h) \
$(wildcard include/config/paravirt.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/asm.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpufeature.h \
$(wildcard include/config/x86/invlpg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/required-features.h \
$(wildcard include/config/x86/minimum/cpu/family.h) \
$(wildcard include/config/math/emulation.h) \
$(wildcard include/config/x86/pae.h) \
$(wildcard include/config/x86/cmpxchg64.h) \
$(wildcard include/config/x86/use/3dnow.h) \
$(wildcard include/config/x86/p6/nop.h) \
include/asm-generic/bitops/fls64.h \
include/asm-generic/bitops/find.h \
$(wildcard include/config/generic/find/first/bit.h) \
include/asm-generic/bitops/sched.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/arch_hweight.h \
include/asm-generic/bitops/const_hweight.h \
include/asm-generic/bitops/le.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/byteorder.h \
include/linux/byteorder/little_endian.h \
include/linux/swab.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swab.h \
$(wildcard include/config/x86/bswap.h) \
include/linux/byteorder/generic.h \
include/asm-generic/bitops/ext2-atomic-setbit.h \
include/linux/log2.h \
$(wildcard include/config/arch/has/ilog2/u32.h) \
$(wildcard include/config/arch/has/ilog2/u64.h) \
include/linux/typecheck.h \
include/linux/printk.h \
$(wildcard include/config/printk.h) \
$(wildcard include/config/dynamic/debug.h) \
include/linux/init.h \
$(wildcard include/config/modules.h) \
$(wildcard include/config/hotplug.h) \
include/linux/dynamic_debug.h \
include/linux/string.h \
$(wildcard include/config/binary/printf.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string_32.h \
$(wildcard include/config/kmemcheck.h) \
include/linux/errno.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/errno.h \
include/asm-generic/errno.h \
include/asm-generic/errno-base.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/div64.h \
include/linux/module.h \
$(wildcard include/config/sysfs.h) \
$(wildcard include/config/unused/symbols.h) \
$(wildcard include/config/generic/bug.h) \
$(wildcard include/config/kallsyms.h) \
$(wildcard include/config/tracepoints.h) \
$(wildcard include/config/event/tracing.h) \
$(wildcard include/config/module/unload.h) \
$(wildcard include/config/constructors.h) \
$(wildcard include/config/debug/set/module/ronx.h) \
include/linux/list.h \
$(wildcard include/config/debug/list.h) \
include/linux/poison.h \
$(wildcard include/config/illegal/pointer/value.h) \
include/linux/const.h \
include/linux/stat.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/stat.h \
include/linux/time.h \
$(wildcard include/config/arch/uses/gettimeoffset.h) \
include/linux/cache.h \
$(wildcard include/config/arch/has/cache/line/size.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cache.h \
$(wildcard include/config/x86/l1/cache/shift.h) \
$(wildcard include/config/x86/internode/cache/shift.h) \
$(wildcard include/config/x86/vsmp.h) \
include/linux/seqlock.h \
include/linux/spinlock.h \
$(wildcard include/config/debug/spinlock.h) \
$(wildcard include/config/generic/lockbreak.h) \
$(wildcard include/config/preempt.h) \
$(wildcard include/config/debug/lock/alloc.h) \
include/linux/preempt.h \
$(wildcard include/config/debug/preempt.h) \
$(wildcard include/config/preempt/tracer.h) \
$(wildcard include/config/preempt/count.h) \
$(wildcard include/config/preempt/notifiers.h) \
include/linux/thread_info.h \
$(wildcard include/config/compat.h) \
$(wildcard include/config/debug/stack/usage.h) \
include/linux/bug.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bug.h \
$(wildcard include/config/bug.h) \
$(wildcard include/config/debug/bugverbose.h) \
include/asm-generic/bug.h \
$(wildcard include/config/generic/bug/relative/pointers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/thread_info.h \
$(wildcard include/config/ia32/emulation.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32_types.h \
$(wildcard include/config/highmem4g.h) \
$(wildcard include/config/highmem64g.h) \
$(wildcard include/config/page/offset.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32.h \
$(wildcard include/config/hugetlb/page.h) \
$(wildcard include/config/debug/virtual.h) \
$(wildcard include/config/flatmem.h) \
$(wildcard include/config/x86/3dnow.h) \
include/asm-generic/memory_model.h \
$(wildcard include/config/discontigmem.h) \
$(wildcard include/config/sparsemem/vmemmap.h) \
$(wildcard include/config/sparsemem.h) \
include/asm-generic/getorder.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor.h \
$(wildcard include/config/cc/stackprotector.h) \
$(wildcard include/config/m386.h) \
$(wildcard include/config/m486.h) \
$(wildcard include/config/x86/debugctlmsr.h) \
$(wildcard include/config/cpu/sup/amd.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor-flags.h \
$(wildcard include/config/vm86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vm86.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/segment.h \
$(wildcard include/config/x86/32/lazy/gs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt_types.h \
$(wildcard include/config/x86/local/apic.h) \
$(wildcard include/config/paravirt/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc_defs.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/kmap_types.h \
$(wildcard include/config/debug/highmem.h) \
include/asm-generic/kmap_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_types.h \
$(wildcard include/config/compat/vdso.h) \
$(wildcard include/config/proc/fs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
$(wildcard include/config/highmem.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level_types.h \
include/asm-generic/pgtable-nopud.h \
include/asm-generic/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/math_emu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sigcontext.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/current.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/percpu.h \
$(wildcard include/config/x86/64/smp.h) \
include/asm-generic/percpu.h \
$(wildcard include/config/have/setup/per/cpu/area.h) \
include/linux/threads.h \
$(wildcard include/config/nr/cpus.h) \
$(wildcard include/config/base/small.h) \
include/linux/percpu-defs.h \
$(wildcard include/config/debug/force/weak/per/cpu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr-index.h \
include/linux/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ioctl.h \
include/asm-generic/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpumask.h \
include/linux/cpumask.h \
$(wildcard include/config/cpumask/offstack.h) \
$(wildcard include/config/hotplug/cpu.h) \
$(wildcard include/config/debug/per/cpu/maps.h) \
$(wildcard include/config/disable/obsolete/cpumask/functions.h) \
include/linux/bitmap.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt.h \
$(wildcard include/config/transparent/hugepage.h) \
$(wildcard include/config/paravirt/spinlocks.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/nops.h \
$(wildcard include/config/mk7.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/special_insns.h \
include/linux/personality.h \
include/linux/math64.h \
include/linux/err.h \
include/linux/irqflags.h \
$(wildcard include/config/trace/irqflags.h) \
$(wildcard include/config/irqsoff/tracer.h) \
$(wildcard include/config/trace/irqflags/support.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irqflags.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ftrace.h \
$(wildcard include/config/function/tracer.h) \
$(wildcard include/config/dynamic/ftrace.h) \
include/linux/atomic.h \
$(wildcard include/config/arch/has/atomic/or.h) \
$(wildcard include/config/generic/atomic64.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg_32.h \
$(wildcard include/config/x86/cmpxchg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic64_32.h \
include/asm-generic/atomic-long.h \
include/linux/bottom_half.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/barrier.h \
$(wildcard include/config/x86/ppro/fence.h) \
$(wildcard include/config/x86/oostore.h) \
include/linux/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwlock.h \
include/linux/lockdep.h \
$(wildcard include/config/lockdep.h) \
$(wildcard include/config/lock/stat.h) \
$(wildcard include/config/prove/rcu.h) \
include/linux/rwlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock.h \
include/linux/rwlock.h \
include/linux/spinlock_api_smp.h \
$(wildcard include/config/inline/spin/lock.h) \
$(wildcard include/config/inline/spin/lock/bh.h) \
$(wildcard include/config/inline/spin/lock/irq.h) \
$(wildcard include/config/inline/spin/lock/irqsave.h) \
$(wildcard include/config/inline/spin/trylock.h) \
$(wildcard include/config/inline/spin/trylock/bh.h) \
$(wildcard include/config/uninline/spin/unlock.h) \
$(wildcard include/config/inline/spin/unlock/bh.h) \
$(wildcard include/config/inline/spin/unlock/irq.h) \
$(wildcard include/config/inline/spin/unlock/irqrestore.h) \
include/linux/rwlock_api_smp.h \
$(wildcard include/config/inline/read/lock.h) \
$(wildcard include/config/inline/write/lock.h) \
$(wildcard include/config/inline/read/lock/bh.h) \
$(wildcard include/config/inline/write/lock/bh.h) \
$(wildcard include/config/inline/read/lock/irq.h) \
$(wildcard include/config/inline/write/lock/irq.h) \
$(wildcard include/config/inline/read/lock/irqsave.h) \
$(wildcard include/config/inline/write/lock/irqsave.h) \
$(wildcard include/config/inline/read/trylock.h) \
$(wildcard include/config/inline/write/trylock.h) \
$(wildcard include/config/inline/read/unlock.h) \
$(wildcard include/config/inline/write/unlock.h) \
$(wildcard include/config/inline/read/unlock/bh.h) \
$(wildcard include/config/inline/write/unlock/bh.h) \
$(wildcard include/config/inline/read/unlock/irq.h) \
$(wildcard include/config/inline/write/unlock/irq.h) \
$(wildcard include/config/inline/read/unlock/irqrestore.h) \
$(wildcard include/config/inline/write/unlock/irqrestore.h) \
include/linux/uidgid.h \
$(wildcard include/config/uidgid/strict/type/checks.h) \
$(wildcard include/config/user/ns.h) \
include/linux/highuid.h \
include/linux/kmod.h \
include/linux/gfp.h \
$(wildcard include/config/zone/dma.h) \
$(wildcard include/config/zone/dma32.h) \
$(wildcard include/config/pm/sleep.h) \
$(wildcard include/config/cma.h) \
include/linux/mmzone.h \
$(wildcard include/config/force/max/zoneorder.h) \
$(wildcard include/config/cgroup/mem/res/ctlr.h) \
$(wildcard include/config/memory/hotplug.h) \
$(wildcard include/config/have/memblock/node/map.h) \
$(wildcard include/config/flat/node/mem/map.h) \
$(wildcard include/config/no/bootmem.h) \
$(wildcard include/config/have/memory/present.h) \
$(wildcard include/config/have/memoryless/nodes.h) \
$(wildcard include/config/need/node/memmap/size.h) \
$(wildcard include/config/have/memblock/node.h) \
$(wildcard include/config/need/multiple/nodes.h) \
$(wildcard include/config/have/arch/early/pfn/to/nid.h) \
$(wildcard include/config/sparsemem/extreme.h) \
$(wildcard include/config/have/arch/pfn/valid.h) \
$(wildcard include/config/nodes/span/other/nodes.h) \
$(wildcard include/config/holes/in/zone.h) \
$(wildcard include/config/arch/has/holes/memorymodel.h) \
include/linux/wait.h \
include/linux/numa.h \
$(wildcard include/config/nodes/shift.h) \
include/linux/nodemask.h \
include/linux/pageblock-flags.h \
$(wildcard include/config/hugetlb/page/size/variable.h) \
include/generated/bounds.h \
include/linux/memory_hotplug.h \
$(wildcard include/config/memory/hotremove.h) \
$(wildcard include/config/have/arch/nodedata/extension.h) \
include/linux/notifier.h \
include/linux/mutex.h \
$(wildcard include/config/debug/mutexes.h) \
$(wildcard include/config/have/arch/mutex/cpu/relax.h) \
include/linux/rwsem.h \
$(wildcard include/config/rwsem/generic/spinlock.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwsem.h \
include/linux/srcu.h \
include/linux/rcupdate.h \
$(wildcard include/config/rcu/torture/test.h) \
$(wildcard include/config/tree/rcu.h) \
$(wildcard include/config/tree/preempt/rcu.h) \
$(wildcard include/config/rcu/trace.h) \
$(wildcard include/config/preempt/rcu.h) \
$(wildcard include/config/tiny/rcu.h) \
$(wildcard include/config/tiny/preempt/rcu.h) \
$(wildcard include/config/debug/objects/rcu/head.h) \
$(wildcard include/config/preempt/rt.h) \
include/linux/completion.h \
include/linux/debugobjects.h \
$(wildcard include/config/debug/objects.h) \
$(wildcard include/config/debug/objects/free.h) \
include/linux/rcutree.h \
include/linux/workqueue.h \
$(wildcard include/config/debug/objects/work.h) \
$(wildcard include/config/freezer.h) \
include/linux/timer.h \
$(wildcard include/config/timer/stats.h) \
$(wildcard include/config/debug/objects/timers.h) \
include/linux/ktime.h \
$(wildcard include/config/ktime/scalar.h) \
include/linux/jiffies.h \
include/linux/timex.h \
include/linux/param.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/param.h \
include/asm-generic/param.h \
$(wildcard include/config/hz.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/timex.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/tsc.h \
$(wildcard include/config/x86/tsc.h) \
include/linux/topology.h \
$(wildcard include/config/sched/smt.h) \
$(wildcard include/config/sched/mc.h) \
$(wildcard include/config/sched/book.h) \
$(wildcard include/config/use/percpu/numa/node/id.h) \
include/linux/smp.h \
$(wildcard include/config/use/generic/smp/helpers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/smp.h \
$(wildcard include/config/x86/io/apic.h) \
$(wildcard include/config/x86/32/smp.h) \
$(wildcard include/config/debug/nmi/selftest.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec.h \
$(wildcard include/config/x86/numaq.h) \
$(wildcard include/config/eisa.h) \
$(wildcard include/config/x86/mpparse.h) \
$(wildcard include/config/acpi.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec_def.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/x86_init.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bootparam.h \
include/linux/screen_info.h \
include/linux/apm_bios.h \
include/linux/edd.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/e820.h \
$(wildcard include/config/efi.h) \
$(wildcard include/config/intel/txt.h) \
$(wildcard include/config/hibernation.h) \
$(wildcard include/config/memtest.h) \
include/linux/ioport.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ist.h \
include/video/edid.h \
$(wildcard include/config/x86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apicdef.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apic.h \
$(wildcard include/config/x86/x2apic.h) \
include/linux/pm.h \
$(wildcard include/config/pm.h) \
$(wildcard include/config/pm/runtime.h) \
$(wildcard include/config/pm/clk.h) \
$(wildcard include/config/pm/generic/domains.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/fixmap.h \
$(wildcard include/config/provide/ohci1394/dma/init.h) \
$(wildcard include/config/x86/visws/apic.h) \
$(wildcard include/config/x86/f00f/bug.h) \
$(wildcard include/config/x86/cyclone/timer.h) \
$(wildcard include/config/pci/mmconfig.h) \
$(wildcard include/config/x86/intel/mid.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/acpi.h \
$(wildcard include/config/acpi/numa.h) \
include/acpi/pdc_intel.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa.h \
$(wildcard include/config/numa/emu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/topology.h \
$(wildcard include/config/x86/ht.h) \
include/asm-generic/topology.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mmu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/realmode.h \
$(wildcard include/config/acpi/sleep.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io.h \
$(wildcard include/config/xen.h) \
include/asm-generic/iomap.h \
$(wildcard include/config/has/ioport.h) \
$(wildcard include/config/pci.h) \
$(wildcard include/config/generic/iomap.h) \
include/asm-generic/pci_iomap.h \
$(wildcard include/config/no/generic/pci/ioport/map.h) \
$(wildcard include/config/generic/pci/iomap.h) \
include/linux/vmalloc.h \
$(wildcard include/config/mmu.h) \
include/xen/xen.h \
$(wildcard include/config/xen/dom0.h) \
include/xen/interface/xen.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pvclock-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/hypervisor.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io_apic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irq_vectors.h \
include/linux/percpu.h \
$(wildcard include/config/need/per/cpu/embed/first/chunk.h) \
$(wildcard include/config/need/per/cpu/page/first/chunk.h) \
include/linux/pfn.h \
include/linux/mmdebug.h \
$(wildcard include/config/debug/vm.h) \
include/linux/sysctl.h \
$(wildcard include/config/sysctl.h) \
include/linux/rbtree.h \
include/linux/elf.h \
include/linux/elf-em.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/elf.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/user.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/user_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/auxvec.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vdso.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ldt.h \
include/linux/kobject.h \
include/linux/sysfs.h \
include/linux/kobject_ns.h \
include/linux/kref.h \
include/linux/moduleparam.h \
$(wildcard include/config/alpha.h) \
$(wildcard include/config/ia64.h) \
$(wildcard include/config/ppc64.h) \
include/linux/tracepoint.h \
include/linux/static_key.h \
include/linux/jump_label.h \
$(wildcard include/config/jump/label.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/jump_label.h \
include/linux/export.h \
$(wildcard include/config/symbol/prefix.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/module.h \
$(wildcard include/config/m586.h) \
$(wildcard include/config/m586tsc.h) \
$(wildcard include/config/m586mmx.h) \
$(wildcard include/config/mcore2.h) \
$(wildcard include/config/matom.h) \
$(wildcard include/config/m686.h) \
$(wildcard include/config/mpentiumii.h) \
$(wildcard include/config/mpentiumiii.h) \
$(wildcard include/config/mpentiumm.h) \
$(wildcard include/config/mpentium4.h) \
$(wildcard include/config/mk6.h) \
$(wildcard include/config/mk8.h) \
$(wildcard include/config/melan.h) \
$(wildcard include/config/mcrusoe.h) \
$(wildcard include/config/mefficeon.h) \
$(wildcard include/config/mwinchipc6.h) \
$(wildcard include/config/mwinchip3d.h) \
$(wildcard include/config/mcyrixiii.h) \
$(wildcard include/config/mviac3/2.h) \
$(wildcard include/config/mviac7.h) \
$(wildcard include/config/mgeodegx1.h) \
$(wildcard include/config/mgeode/lx.h) \
include/asm-generic/module.h \
include/linux/pci.h \
$(wildcard include/config/pci/iov.h) \
$(wildcard include/config/pcieaspm.h) \
$(wildcard include/config/pci/msi.h) \
$(wildcard include/config/pci/ats.h) \
$(wildcard include/config/pcieportbus.h) \
$(wildcard include/config/pcieaer.h) \
$(wildcard include/config/pcie/ecrc.h) \
$(wildcard include/config/ht/irq.h) \
$(wildcard include/config/pci/domains.h) \
$(wildcard include/config/pci/quirks.h) \
$(wildcard include/config/hotplug/pci.h) \
$(wildcard include/config/of.h) \
$(wildcard include/config/eeh.h) \
include/linux/pci_regs.h \
include/linux/mod_devicetable.h \
include/linux/device.h \
$(wildcard include/config/debug/devres.h) \
$(wildcard include/config/devtmpfs.h) \
$(wildcard include/config/sysfs/deprecated.h) \
include/linux/klist.h \
include/linux/ratelimit.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/device.h \
$(wildcard include/config/x86/dev/dma/ops.h) \
$(wildcard include/config/intel/iommu.h) \
$(wildcard include/config/amd/iommu.h) \
include/linux/pm_wakeup.h \
include/linux/io.h \
include/linux/irqreturn.h \
include/linux/pci_ids.h \
include/linux/pci-dma.h \
include/linux/dmapool.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/scatterlist.h \
include/asm-generic/scatterlist.h \
$(wildcard include/config/debug/sg.h) \
$(wildcard include/config/need/sg/dma/length.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pci.h \
include/linux/mm.h \
$(wildcard include/config/stack/growsup.h) \
$(wildcard include/config/ksm.h) \
$(wildcard include/config/debug/pagealloc.h) \
$(wildcard include/config/hugetlbfs.h) \
include/linux/prio_tree.h \
include/linux/debug_locks.h \
$(wildcard include/config/debug/locking/api/selftests.h) \
include/linux/mm_types.h \
$(wildcard include/config/split/ptlock/cpus.h) \
$(wildcard include/config/have/cmpxchg/double.h) \
$(wildcard include/config/have/aligned/struct/page.h) \
$(wildcard include/config/want/page/debug/flags.h) \
$(wildcard include/config/aio.h) \
$(wildcard include/config/mm/owner.h) \
$(wildcard include/config/mmu/notifier.h) \
include/linux/auxvec.h \
include/linux/page-debug-flags.h \
$(wildcard include/config/page/poisoning.h) \
$(wildcard include/config/page/guard.h) \
$(wildcard include/config/page/debug/something/else.h) \
include/linux/uprobes.h \
$(wildcard include/config/arch/supports/uprobes.h) \
$(wildcard include/config/uprobes.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uprobes.h \
include/linux/range.h \
include/linux/bit_spinlock.h \
include/linux/shrinker.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32.h \
$(wildcard include/config/highpte.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level.h \
include/asm-generic/pgtable.h \
include/linux/page-flags.h \
$(wildcard include/config/pageflags/extended.h) \
$(wildcard include/config/arch/uses/pg/uncached.h) \
$(wildcard include/config/memory/failure.h) \
$(wildcard include/config/swap.h) \
$(wildcard include/config/s390.h) \
include/linux/huge_mm.h \
include/linux/vmstat.h \
$(wildcard include/config/vm/event/counters.h) \
include/linux/vm_event_item.h \
include/linux/slab.h \
$(wildcard include/config/slab/debug.h) \
$(wildcard include/config/failslab.h) \
$(wildcard include/config/slub.h) \
$(wildcard include/config/slob.h) \
$(wildcard include/config/debug/slab.h) \
$(wildcard include/config/slab.h) \
include/linux/slub_def.h \
$(wildcard include/config/slub/stats.h) \
$(wildcard include/config/slub/debug.h) \
include/linux/kmemleak.h \
$(wildcard include/config/debug/kmemleak.h) \
include/asm-generic/pci-dma-compat.h \
include/linux/dma-mapping.h \
$(wildcard include/config/has/dma.h) \
$(wildcard include/config/arch/has/dma/set/coherent/mask.h) \
$(wildcard include/config/have/dma/attrs.h) \
$(wildcard include/config/need/dma/map/state.h) \
include/linux/dma-attrs.h \
include/linux/dma-direction.h \
include/linux/scatterlist.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/dma-mapping.h \
$(wildcard include/config/isa.h) \
$(wildcard include/config/x86/dma/remap.h) \
include/linux/kmemcheck.h \
include/linux/dma-debug.h \
$(wildcard include/config/dma/api/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swiotlb.h \
$(wildcard include/config/swiotlb.h) \
include/linux/swiotlb.h \
include/asm-generic/dma-coherent.h \
$(wildcard include/config/have/generic/dma/coherent.h) \
include/linux/dma-contiguous.h \
$(wildcard include/config/cma/areas.h) \
include/asm-generic/dma-mapping-common.h \
include/asm-generic/pci.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uaccess.h \
$(wildcard include/config/x86/wp/works/ok.h) \
$(wildcard include/config/x86/intel/usercopy.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uaccess_32.h \
$(wildcard include/config/debug/strict/user/copy/checks.h) \
include/linux/sched.h \
$(wildcard include/config/sched/debug.h) \
$(wildcard include/config/no/hz.h) \
$(wildcard include/config/lockup/detector.h) \
$(wildcard include/config/detect/hung/task.h) \
$(wildcard include/config/core/dump/default/elf/headers.h) \
$(wildcard include/config/sched/autogroup.h) \
$(wildcard include/config/virt/cpu/accounting.h) \
$(wildcard include/config/bsd/process/acct.h) \
$(wildcard include/config/taskstats.h) \
$(wildcard include/config/audit.h) \
$(wildcard include/config/cgroups.h) \
$(wildcard include/config/inotify/user.h) \
$(wildcard include/config/fanotify.h) \
$(wildcard include/config/epoll.h) \
$(wildcard include/config/posix/mqueue.h) \
$(wildcard include/config/keys.h) \
$(wildcard include/config/perf/events.h) \
$(wildcard include/config/schedstats.h) \
$(wildcard include/config/task/delay/acct.h) \
$(wildcard include/config/fair/group/sched.h) \
$(wildcard include/config/rt/group/sched.h) \
$(wildcard include/config/cgroup/sched.h) \
$(wildcard include/config/blk/dev/io/trace.h) \
$(wildcard include/config/rcu/boost.h) \
$(wildcard include/config/compat/brk.h) \
$(wildcard include/config/sysvipc.h) \
$(wildcard include/config/auditsyscall.h) \
$(wildcard include/config/rt/mutexes.h) \
$(wildcard include/config/block.h) \
$(wildcard include/config/task/xacct.h) \
$(wildcard include/config/cpusets.h) \
$(wildcard include/config/futex.h) \
$(wildcard include/config/fault/injection.h) \
$(wildcard include/config/latencytop.h) \
$(wildcard include/config/function/graph/tracer.h) \
$(wildcard include/config/have/hw/breakpoint.h) \
$(wildcard include/config/have/unstable/sched/clock.h) \
$(wildcard include/config/irq/time/accounting.h) \
$(wildcard include/config/cfs/bandwidth.h) \
include/linux/capability.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cputime.h \
include/asm-generic/cputime.h \
include/linux/sem.h \
include/linux/ipc.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ipcbuf.h \
include/asm-generic/ipcbuf.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sembuf.h \
include/linux/signal.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/signal.h \
include/asm-generic/signal-defs.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/siginfo.h \
include/asm-generic/siginfo.h \
include/linux/pid.h \
include/linux/proportions.h \
include/linux/percpu_counter.h \
include/linux/seccomp.h \
$(wildcard include/config/seccomp.h) \
$(wildcard include/config/seccomp/filter.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/seccomp.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/seccomp_32.h \
include/linux/unistd.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/unistd.h \
$(wildcard include/config/x86/x32/abi.h) \
arch/x86/include/generated/asm/unistd_32.h \
include/linux/rculist.h \
include/linux/rtmutex.h \
$(wildcard include/config/debug/rt/mutexes.h) \
include/linux/plist.h \
$(wildcard include/config/debug/pi/list.h) \
include/linux/resource.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/resource.h \
include/asm-generic/resource.h \
include/linux/hrtimer.h \
$(wildcard include/config/high/res/timers.h) \
$(wildcard include/config/timerfd.h) \
include/linux/timerqueue.h \
include/linux/task_io_accounting.h \
$(wildcard include/config/task/io/accounting.h) \
include/linux/latencytop.h \
include/linux/cred.h \
$(wildcard include/config/debug/credentials.h) \
$(wildcard include/config/security.h) \
include/linux/key.h \
include/linux/selinux.h \
$(wildcard include/config/security/selinux.h) \
include/linux/llist.h \
$(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \
include/linux/aio.h \
include/linux/aio_abi.h \
include/linux/uio.h \
include/linux/fs.h \
$(wildcard include/config/fs/posix/acl.h) \
$(wildcard include/config/quota.h) \
$(wildcard include/config/fsnotify.h) \
$(wildcard include/config/ima.h) \
$(wildcard include/config/debug/writecount.h) \
$(wildcard include/config/file/locking.h) \
$(wildcard include/config/fs/xip.h) \
$(wildcard include/config/migration.h) \
include/linux/limits.h \
include/linux/blk_types.h \
$(wildcard include/config/blk/cgroup.h) \
$(wildcard include/config/blk/dev/integrity.h) \
include/linux/kdev_t.h \
include/linux/dcache.h \
include/linux/rculist_bl.h \
include/linux/list_bl.h \
include/linux/path.h \
include/linux/radix-tree.h \
include/linux/semaphore.h \
include/linux/fiemap.h \
include/linux/migrate_mode.h \
include/linux/quota.h \
$(wildcard include/config/quota/netlink/interface.h) \
include/linux/dqblk_xfs.h \
include/linux/dqblk_v1.h \
include/linux/dqblk_v2.h \
include/linux/dqblk_qtree.h \
include/linux/nfs_fs_i.h \
include/linux/fcntl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/fcntl.h \
include/asm-generic/fcntl.h \
/home/f9daq/pcivme-3.2/driver/./fops.h \
/home/f9daq/pcivme-3.2/driver/./plx9050.h \
/home/f9daq/pcivme-3.2/driver/./pcivme.h \
/home/f9daq/pcivme-3.2/driver/./main.h \
/home/f9daq/pcivme-3.2/driver/./askpci.h \
/home/f9daq/pcivme-3.2/driver/./pciif.h \
/home/f9daq/pcivme-3.2/driver/./vic.h \
/home/f9daq/pcivme-3.2/driver/./vme.h \
 
/home/f9daq/pcivme-3.2/driver/./fops.o: $(deps_/home/f9daq/pcivme-3.2/driver/./fops.o)
 
$(deps_/home/f9daq/pcivme-3.2/driver/./fops.o):
/pcivme-3.2/driver/plxbug.h
0,0 → 1,55
#ifndef __PLXBUG_H__
#define __PLXBUG_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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// plxbug.h -- plx 9050 bug fix prototype for the PCIVME PCI to VME Interface
//
// $Log: plxbug.h,v $
// Revision 1.4 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.3 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.2 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.1.1.1 2002/10/09 19:36:30 klaus
// initial import
//
//****************************************************************************
 
#include "askpci.h"
 
int PLX9050BugFix(PCIConfig *pHeader);
 
#endif /* __PLXBUG_H__ */
/pcivme-3.2/driver/.askpci.o.cmd
0,0 → 1,566
cmd_/home/f9daq/pcivme-3.2/driver/./askpci.o := gcc -Wp,-MD,/home/f9daq/pcivme-3.2/driver/./.askpci.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.6/include -I/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include /usr/src/linux-headers-3.5.0-28-generic/include/linux/kconfig.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_AVX=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -I. -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(askpci)" -D"KBUILD_MODNAME=KBUILD_STR(pcivme)" -c -o /home/f9daq/pcivme-3.2/driver/./.tmp_askpci.o /home/f9daq/pcivme-3.2/driver/./askpci.c
 
source_/home/f9daq/pcivme-3.2/driver/./askpci.o := /home/f9daq/pcivme-3.2/driver/./askpci.c
 
deps_/home/f9daq/pcivme-3.2/driver/./askpci.o := \
$(wildcard include/config/pci.h) \
/home/f9daq/pcivme-3.2/driver/./common.h \
$(wildcard include/config/modversions.h) \
include/linux/version.h \
include/config/modversions.h \
include/linux/pci.h \
$(wildcard include/config/pci/iov.h) \
$(wildcard include/config/pcieaspm.h) \
$(wildcard include/config/pci/msi.h) \
$(wildcard include/config/pci/ats.h) \
$(wildcard include/config/hotplug.h) \
$(wildcard include/config/pcieportbus.h) \
$(wildcard include/config/pcieaer.h) \
$(wildcard include/config/pcie/ecrc.h) \
$(wildcard include/config/ht/irq.h) \
$(wildcard include/config/pci/domains.h) \
$(wildcard include/config/pci/quirks.h) \
$(wildcard include/config/pci/mmconfig.h) \
$(wildcard include/config/hotplug/pci.h) \
$(wildcard include/config/of.h) \
$(wildcard include/config/eeh.h) \
include/linux/pci_regs.h \
include/linux/mod_devicetable.h \
include/linux/types.h \
$(wildcard include/config/uid16.h) \
$(wildcard include/config/lbdaf.h) \
$(wildcard include/config/arch/dma/addr/t/64bit.h) \
$(wildcard include/config/phys/addr/t/64bit.h) \
$(wildcard include/config/64bit.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/types.h \
include/asm-generic/types.h \
include/asm-generic/int-ll64.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitsperlong.h \
include/asm-generic/bitsperlong.h \
include/linux/posix_types.h \
include/linux/stddef.h \
include/linux/compiler.h \
$(wildcard include/config/sparse/rcu/pointer.h) \
$(wildcard include/config/trace/branch/profiling.h) \
$(wildcard include/config/profile/all/branches.h) \
$(wildcard include/config/enable/must/check.h) \
$(wildcard include/config/enable/warn/deprecated.h) \
include/linux/compiler-gcc.h \
$(wildcard include/config/arch/supports/optimized/inlining.h) \
$(wildcard include/config/optimize/inlining.h) \
include/linux/compiler-gcc4.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types.h \
$(wildcard include/config/x86/32.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types_32.h \
include/asm-generic/posix_types.h \
include/linux/init.h \
$(wildcard include/config/modules.h) \
include/linux/ioport.h \
include/linux/list.h \
$(wildcard include/config/debug/list.h) \
include/linux/poison.h \
$(wildcard include/config/illegal/pointer/value.h) \
include/linux/const.h \
include/linux/errno.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/errno.h \
include/asm-generic/errno.h \
include/asm-generic/errno-base.h \
include/linux/kobject.h \
include/linux/sysfs.h \
$(wildcard include/config/debug/lock/alloc.h) \
$(wildcard include/config/sysfs.h) \
include/linux/lockdep.h \
$(wildcard include/config/lockdep.h) \
$(wildcard include/config/lock/stat.h) \
$(wildcard include/config/trace/irqflags.h) \
$(wildcard include/config/prove/locking.h) \
$(wildcard include/config/prove/rcu.h) \
include/linux/kobject_ns.h \
include/linux/atomic.h \
$(wildcard include/config/arch/has/atomic/or.h) \
$(wildcard include/config/generic/atomic64.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic.h \
$(wildcard include/config/m386.h) \
$(wildcard include/config/x86/64.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor.h \
$(wildcard include/config/x86/vsmp.h) \
$(wildcard include/config/smp.h) \
$(wildcard include/config/cc/stackprotector.h) \
$(wildcard include/config/paravirt.h) \
$(wildcard include/config/m486.h) \
$(wildcard include/config/x86/debugctlmsr.h) \
$(wildcard include/config/cpu/sup/amd.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor-flags.h \
$(wildcard include/config/vm86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vm86.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/segment.h \
$(wildcard include/config/x86/32/lazy/gs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32_types.h \
$(wildcard include/config/highmem4g.h) \
$(wildcard include/config/highmem64g.h) \
$(wildcard include/config/page/offset.h) \
$(wildcard include/config/x86/pae.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt_types.h \
$(wildcard include/config/x86/local/apic.h) \
$(wildcard include/config/paravirt/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc_defs.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/kmap_types.h \
$(wildcard include/config/debug/highmem.h) \
include/asm-generic/kmap_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_types.h \
$(wildcard include/config/kmemcheck.h) \
$(wildcard include/config/compat/vdso.h) \
$(wildcard include/config/proc/fs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
$(wildcard include/config/highmem.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level_types.h \
include/asm-generic/pgtable-nopud.h \
include/asm-generic/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/math_emu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sigcontext.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/current.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/percpu.h \
$(wildcard include/config/x86/64/smp.h) \
$(wildcard include/config/x86/cmpxchg64.h) \
include/linux/kernel.h \
$(wildcard include/config/preempt/voluntary.h) \
$(wildcard include/config/debug/atomic/sleep.h) \
$(wildcard include/config/ring/buffer.h) \
$(wildcard include/config/tracing.h) \
$(wildcard include/config/numa.h) \
$(wildcard include/config/compaction.h) \
$(wildcard include/config/ftrace/mcount/record.h) \
include/linux/sysinfo.h \
/usr/lib/gcc/i686-linux-gnu/4.6/include/stdarg.h \
include/linux/linkage.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/linkage.h \
$(wildcard include/config/x86/alignment/16.h) \
include/linux/stringify.h \
include/linux/bitops.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitops.h \
$(wildcard include/config/x86/cmov.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/alternative.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/asm.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpufeature.h \
$(wildcard include/config/x86/invlpg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/required-features.h \
$(wildcard include/config/x86/minimum/cpu/family.h) \
$(wildcard include/config/math/emulation.h) \
$(wildcard include/config/x86/use/3dnow.h) \
$(wildcard include/config/x86/p6/nop.h) \
include/asm-generic/bitops/fls64.h \
include/asm-generic/bitops/find.h \
$(wildcard include/config/generic/find/first/bit.h) \
include/asm-generic/bitops/sched.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/arch_hweight.h \
include/asm-generic/bitops/const_hweight.h \
include/asm-generic/bitops/le.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/byteorder.h \
include/linux/byteorder/little_endian.h \
include/linux/swab.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swab.h \
$(wildcard include/config/x86/bswap.h) \
include/linux/byteorder/generic.h \
include/asm-generic/bitops/ext2-atomic-setbit.h \
include/linux/log2.h \
$(wildcard include/config/arch/has/ilog2/u32.h) \
$(wildcard include/config/arch/has/ilog2/u64.h) \
include/linux/typecheck.h \
include/linux/printk.h \
$(wildcard include/config/printk.h) \
$(wildcard include/config/dynamic/debug.h) \
include/linux/dynamic_debug.h \
include/linux/string.h \
$(wildcard include/config/binary/printf.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/div64.h \
include/asm-generic/percpu.h \
$(wildcard include/config/debug/preempt.h) \
$(wildcard include/config/have/setup/per/cpu/area.h) \
include/linux/threads.h \
$(wildcard include/config/nr/cpus.h) \
$(wildcard include/config/base/small.h) \
include/linux/percpu-defs.h \
$(wildcard include/config/debug/force/weak/per/cpu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32.h \
$(wildcard include/config/hugetlb/page.h) \
$(wildcard include/config/debug/virtual.h) \
$(wildcard include/config/flatmem.h) \
$(wildcard include/config/x86/3dnow.h) \
include/asm-generic/memory_model.h \
$(wildcard include/config/discontigmem.h) \
$(wildcard include/config/sparsemem/vmemmap.h) \
$(wildcard include/config/sparsemem.h) \
include/asm-generic/getorder.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr-index.h \
include/linux/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ioctl.h \
include/asm-generic/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpumask.h \
include/linux/cpumask.h \
$(wildcard include/config/cpumask/offstack.h) \
$(wildcard include/config/hotplug/cpu.h) \
$(wildcard include/config/debug/per/cpu/maps.h) \
$(wildcard include/config/disable/obsolete/cpumask/functions.h) \
include/linux/bitmap.h \
include/linux/bug.h \
$(wildcard include/config/generic/bug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bug.h \
$(wildcard include/config/bug.h) \
$(wildcard include/config/debug/bugverbose.h) \
include/asm-generic/bug.h \
$(wildcard include/config/generic/bug/relative/pointers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt.h \
$(wildcard include/config/transparent/hugepage.h) \
$(wildcard include/config/paravirt/spinlocks.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/nops.h \
$(wildcard include/config/mk7.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/special_insns.h \
include/linux/personality.h \
include/linux/cache.h \
$(wildcard include/config/arch/has/cache/line/size.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cache.h \
$(wildcard include/config/x86/l1/cache/shift.h) \
$(wildcard include/config/x86/internode/cache/shift.h) \
include/linux/math64.h \
include/linux/err.h \
include/linux/irqflags.h \
$(wildcard include/config/irqsoff/tracer.h) \
$(wildcard include/config/preempt/tracer.h) \
$(wildcard include/config/trace/irqflags/support.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irqflags.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg_32.h \
$(wildcard include/config/x86/cmpxchg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic64_32.h \
include/asm-generic/atomic-long.h \
include/linux/spinlock.h \
$(wildcard include/config/debug/spinlock.h) \
$(wildcard include/config/generic/lockbreak.h) \
$(wildcard include/config/preempt.h) \
include/linux/preempt.h \
$(wildcard include/config/preempt/count.h) \
$(wildcard include/config/preempt/notifiers.h) \
include/linux/thread_info.h \
$(wildcard include/config/compat.h) \
$(wildcard include/config/debug/stack/usage.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/thread_info.h \
$(wildcard include/config/ia32/emulation.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ftrace.h \
$(wildcard include/config/function/tracer.h) \
$(wildcard include/config/dynamic/ftrace.h) \
include/linux/bottom_half.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/barrier.h \
$(wildcard include/config/x86/ppro/fence.h) \
$(wildcard include/config/x86/oostore.h) \
include/linux/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwlock.h \
include/linux/rwlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock.h \
include/linux/rwlock.h \
include/linux/spinlock_api_smp.h \
$(wildcard include/config/inline/spin/lock.h) \
$(wildcard include/config/inline/spin/lock/bh.h) \
$(wildcard include/config/inline/spin/lock/irq.h) \
$(wildcard include/config/inline/spin/lock/irqsave.h) \
$(wildcard include/config/inline/spin/trylock.h) \
$(wildcard include/config/inline/spin/trylock/bh.h) \
$(wildcard include/config/uninline/spin/unlock.h) \
$(wildcard include/config/inline/spin/unlock/bh.h) \
$(wildcard include/config/inline/spin/unlock/irq.h) \
$(wildcard include/config/inline/spin/unlock/irqrestore.h) \
include/linux/rwlock_api_smp.h \
$(wildcard include/config/inline/read/lock.h) \
$(wildcard include/config/inline/write/lock.h) \
$(wildcard include/config/inline/read/lock/bh.h) \
$(wildcard include/config/inline/write/lock/bh.h) \
$(wildcard include/config/inline/read/lock/irq.h) \
$(wildcard include/config/inline/write/lock/irq.h) \
$(wildcard include/config/inline/read/lock/irqsave.h) \
$(wildcard include/config/inline/write/lock/irqsave.h) \
$(wildcard include/config/inline/read/trylock.h) \
$(wildcard include/config/inline/write/trylock.h) \
$(wildcard include/config/inline/read/unlock.h) \
$(wildcard include/config/inline/write/unlock.h) \
$(wildcard include/config/inline/read/unlock/bh.h) \
$(wildcard include/config/inline/write/unlock/bh.h) \
$(wildcard include/config/inline/read/unlock/irq.h) \
$(wildcard include/config/inline/write/unlock/irq.h) \
$(wildcard include/config/inline/read/unlock/irqrestore.h) \
$(wildcard include/config/inline/write/unlock/irqrestore.h) \
include/linux/kref.h \
include/linux/wait.h \
include/linux/device.h \
$(wildcard include/config/debug/devres.h) \
$(wildcard include/config/cma.h) \
$(wildcard include/config/devtmpfs.h) \
$(wildcard include/config/sysfs/deprecated.h) \
include/linux/klist.h \
include/linux/mutex.h \
$(wildcard include/config/debug/mutexes.h) \
$(wildcard include/config/have/arch/mutex/cpu/relax.h) \
include/linux/pm.h \
$(wildcard include/config/pm.h) \
$(wildcard include/config/pm/sleep.h) \
$(wildcard include/config/pm/runtime.h) \
$(wildcard include/config/pm/clk.h) \
$(wildcard include/config/pm/generic/domains.h) \
include/linux/workqueue.h \
$(wildcard include/config/debug/objects/work.h) \
$(wildcard include/config/freezer.h) \
include/linux/timer.h \
$(wildcard include/config/timer/stats.h) \
$(wildcard include/config/debug/objects/timers.h) \
include/linux/ktime.h \
$(wildcard include/config/ktime/scalar.h) \
include/linux/time.h \
$(wildcard include/config/arch/uses/gettimeoffset.h) \
include/linux/seqlock.h \
include/linux/jiffies.h \
include/linux/timex.h \
include/linux/param.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/param.h \
include/asm-generic/param.h \
$(wildcard include/config/hz.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/timex.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/tsc.h \
$(wildcard include/config/x86/tsc.h) \
include/linux/debugobjects.h \
$(wildcard include/config/debug/objects.h) \
$(wildcard include/config/debug/objects/free.h) \
include/linux/completion.h \
include/linux/ratelimit.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/device.h \
$(wildcard include/config/acpi.h) \
$(wildcard include/config/x86/dev/dma/ops.h) \
$(wildcard include/config/intel/iommu.h) \
$(wildcard include/config/amd/iommu.h) \
include/linux/pm_wakeup.h \
include/linux/io.h \
$(wildcard include/config/mmu.h) \
$(wildcard include/config/has/ioport.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io.h \
$(wildcard include/config/xen.h) \
include/asm-generic/iomap.h \
$(wildcard include/config/generic/iomap.h) \
include/asm-generic/pci_iomap.h \
$(wildcard include/config/no/generic/pci/ioport/map.h) \
$(wildcard include/config/generic/pci/iomap.h) \
include/linux/vmalloc.h \
include/xen/xen.h \
$(wildcard include/config/xen/dom0.h) \
include/xen/interface/xen.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pvclock-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/hypervisor.h \
include/linux/irqreturn.h \
include/linux/pci_ids.h \
include/linux/pci-dma.h \
include/linux/dmapool.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/scatterlist.h \
include/asm-generic/scatterlist.h \
$(wildcard include/config/debug/sg.h) \
$(wildcard include/config/need/sg/dma/length.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pci.h \
include/linux/mm.h \
$(wildcard include/config/sysctl.h) \
$(wildcard include/config/stack/growsup.h) \
$(wildcard include/config/ia64.h) \
$(wildcard include/config/ksm.h) \
$(wildcard include/config/have/memblock/node/map.h) \
$(wildcard include/config/have/arch/early/pfn/to/nid.h) \
$(wildcard include/config/debug/pagealloc.h) \
$(wildcard include/config/hibernation.h) \
$(wildcard include/config/hugetlbfs.h) \
include/linux/gfp.h \
$(wildcard include/config/zone/dma.h) \
$(wildcard include/config/zone/dma32.h) \
include/linux/mmzone.h \
$(wildcard include/config/force/max/zoneorder.h) \
$(wildcard include/config/cgroup/mem/res/ctlr.h) \
$(wildcard include/config/memory/hotplug.h) \
$(wildcard include/config/flat/node/mem/map.h) \
$(wildcard include/config/no/bootmem.h) \
$(wildcard include/config/have/memory/present.h) \
$(wildcard include/config/have/memoryless/nodes.h) \
$(wildcard include/config/need/node/memmap/size.h) \
$(wildcard include/config/have/memblock/node.h) \
$(wildcard include/config/need/multiple/nodes.h) \
$(wildcard include/config/sparsemem/extreme.h) \
$(wildcard include/config/have/arch/pfn/valid.h) \
$(wildcard include/config/nodes/span/other/nodes.h) \
$(wildcard include/config/holes/in/zone.h) \
$(wildcard include/config/arch/has/holes/memorymodel.h) \
include/linux/numa.h \
$(wildcard include/config/nodes/shift.h) \
include/linux/nodemask.h \
include/linux/pageblock-flags.h \
$(wildcard include/config/hugetlb/page/size/variable.h) \
include/generated/bounds.h \
include/linux/memory_hotplug.h \
$(wildcard include/config/memory/hotremove.h) \
$(wildcard include/config/have/arch/nodedata/extension.h) \
include/linux/notifier.h \
include/linux/rwsem.h \
$(wildcard include/config/rwsem/generic/spinlock.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwsem.h \
include/linux/srcu.h \
include/linux/rcupdate.h \
$(wildcard include/config/rcu/torture/test.h) \
$(wildcard include/config/tree/rcu.h) \
$(wildcard include/config/tree/preempt/rcu.h) \
$(wildcard include/config/rcu/trace.h) \
$(wildcard include/config/preempt/rcu.h) \
$(wildcard include/config/tiny/rcu.h) \
$(wildcard include/config/tiny/preempt/rcu.h) \
$(wildcard include/config/debug/objects/rcu/head.h) \
$(wildcard include/config/preempt/rt.h) \
include/linux/rcutree.h \
include/linux/topology.h \
$(wildcard include/config/sched/smt.h) \
$(wildcard include/config/sched/mc.h) \
$(wildcard include/config/sched/book.h) \
$(wildcard include/config/use/percpu/numa/node/id.h) \
include/linux/smp.h \
$(wildcard include/config/use/generic/smp/helpers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/smp.h \
$(wildcard include/config/x86/io/apic.h) \
$(wildcard include/config/x86/32/smp.h) \
$(wildcard include/config/debug/nmi/selftest.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec.h \
$(wildcard include/config/x86/numaq.h) \
$(wildcard include/config/eisa.h) \
$(wildcard include/config/x86/mpparse.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec_def.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/x86_init.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bootparam.h \
include/linux/screen_info.h \
include/linux/apm_bios.h \
include/linux/edd.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/e820.h \
$(wildcard include/config/efi.h) \
$(wildcard include/config/intel/txt.h) \
$(wildcard include/config/memtest.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ist.h \
include/video/edid.h \
$(wildcard include/config/x86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apicdef.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apic.h \
$(wildcard include/config/x86/x2apic.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/fixmap.h \
$(wildcard include/config/provide/ohci1394/dma/init.h) \
$(wildcard include/config/x86/visws/apic.h) \
$(wildcard include/config/x86/f00f/bug.h) \
$(wildcard include/config/x86/cyclone/timer.h) \
$(wildcard include/config/x86/intel/mid.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/acpi.h \
$(wildcard include/config/acpi/numa.h) \
include/acpi/pdc_intel.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa.h \
$(wildcard include/config/numa/emu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/topology.h \
$(wildcard include/config/x86/ht.h) \
include/asm-generic/topology.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mmu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/realmode.h \
$(wildcard include/config/acpi/sleep.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io_apic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irq_vectors.h \
include/linux/percpu.h \
$(wildcard include/config/need/per/cpu/embed/first/chunk.h) \
$(wildcard include/config/need/per/cpu/page/first/chunk.h) \
include/linux/pfn.h \
include/linux/mmdebug.h \
$(wildcard include/config/debug/vm.h) \
include/linux/rbtree.h \
include/linux/prio_tree.h \
include/linux/debug_locks.h \
$(wildcard include/config/debug/locking/api/selftests.h) \
include/linux/mm_types.h \
$(wildcard include/config/split/ptlock/cpus.h) \
$(wildcard include/config/have/cmpxchg/double.h) \
$(wildcard include/config/have/aligned/struct/page.h) \
$(wildcard include/config/want/page/debug/flags.h) \
$(wildcard include/config/aio.h) \
$(wildcard include/config/mm/owner.h) \
$(wildcard include/config/mmu/notifier.h) \
include/linux/auxvec.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/auxvec.h \
include/linux/page-debug-flags.h \
$(wildcard include/config/page/poisoning.h) \
$(wildcard include/config/page/guard.h) \
$(wildcard include/config/page/debug/something/else.h) \
include/linux/uprobes.h \
$(wildcard include/config/arch/supports/uprobes.h) \
$(wildcard include/config/uprobes.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uprobes.h \
include/linux/range.h \
include/linux/bit_spinlock.h \
include/linux/shrinker.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32.h \
$(wildcard include/config/highpte.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level.h \
include/asm-generic/pgtable.h \
include/linux/page-flags.h \
$(wildcard include/config/pageflags/extended.h) \
$(wildcard include/config/arch/uses/pg/uncached.h) \
$(wildcard include/config/memory/failure.h) \
$(wildcard include/config/swap.h) \
$(wildcard include/config/s390.h) \
include/linux/huge_mm.h \
include/linux/vmstat.h \
$(wildcard include/config/vm/event/counters.h) \
include/linux/vm_event_item.h \
include/linux/slab.h \
$(wildcard include/config/slab/debug.h) \
$(wildcard include/config/failslab.h) \
$(wildcard include/config/slub.h) \
$(wildcard include/config/slob.h) \
$(wildcard include/config/debug/slab.h) \
$(wildcard include/config/slab.h) \
include/linux/slub_def.h \
$(wildcard include/config/slub/stats.h) \
$(wildcard include/config/slub/debug.h) \
include/linux/kmemleak.h \
$(wildcard include/config/debug/kmemleak.h) \
include/asm-generic/pci-dma-compat.h \
include/linux/dma-mapping.h \
$(wildcard include/config/has/dma.h) \
$(wildcard include/config/arch/has/dma/set/coherent/mask.h) \
$(wildcard include/config/have/dma/attrs.h) \
$(wildcard include/config/need/dma/map/state.h) \
include/linux/dma-attrs.h \
include/linux/dma-direction.h \
include/linux/scatterlist.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/dma-mapping.h \
$(wildcard include/config/isa.h) \
$(wildcard include/config/x86/dma/remap.h) \
include/linux/kmemcheck.h \
include/linux/dma-debug.h \
$(wildcard include/config/dma/api/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swiotlb.h \
$(wildcard include/config/swiotlb.h) \
include/linux/swiotlb.h \
include/asm-generic/dma-coherent.h \
$(wildcard include/config/have/generic/dma/coherent.h) \
include/linux/dma-contiguous.h \
$(wildcard include/config/cma/areas.h) \
include/asm-generic/dma-mapping-common.h \
include/asm-generic/pci.h \
/home/f9daq/pcivme-3.2/driver/./askpci.h \
/home/f9daq/pcivme-3.2/driver/./main.h \
 
/home/f9daq/pcivme-3.2/driver/./askpci.o: $(deps_/home/f9daq/pcivme-3.2/driver/./askpci.o)
 
$(deps_/home/f9daq/pcivme-3.2/driver/./askpci.o):
/pcivme-3.2/driver/fops.c
0,0 → 1,1047
//****************************************************************************
// 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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// fops.c -- the file operations module for the PCIVME PCI to VME Interface
//
// $Log: fops.c,v $
// Revision 1.11 2005/03/01 10:56:12 klaus
// removed warnings with gcc 3.3.3
//
// Revision 1.10 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.9 2003/06/27 17:25:52 klaus
// incomplete try to get mmap() with nopage() running for automatic page switch
//
// Revision 1.8 2002/10/20 18:06:51 klaus
// changed error handling
//
// Revision 1.7 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.6 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.5 2002/10/17 19:05:03 klaus
// VME access is working through test to lib to driver
//
//****************************************************************************
 
/*--- INCLUDES -----------------------------------------------------------------------------------*/
#include "common.h" /* must be the first include */
 
#include <linux/kernel.h> /* printk() */
#include <linux/module.h> /* only here ?cause of MAJOR ... */
#include <linux/pci.h>
#include <linux/list.h>
#include <asm/errno.h>
#include <asm/types.h>
#include <asm/uaccess.h>
 
#include <linux/sched.h>
#include <linux/fs.h>
#if HAVE_UNLOCKED_IOCTL
#include <linux/mutex.h>
#else
#include <linux/smp_lock.h>
#endif
 
 
#include "fops.h"
#include "plx9050.h"
#include "pcivme.h" /* the common ioctl commands and structures between driver and application */
#include "main.h"
#include "askpci.h"
#include "pciif.h"
#include "vic.h"
#include "vme.h"
 
/*--- DEFINES ------------------------------------------------------------------------------------*/
 
#ifndef MINOR
#define MINOR(x) minor(x) // since 2.5.?
#endif
 
static PCIVME_INIT_ELEMENT init_element[] =
{{LCR, WORD_ACCESS, PLX9050_INTCSR, DISABLE_PCIADA_IRQS}, // disable interrupts
{LCR, WORD_ACCESS, PLX9050_CNTRL, RELEASE_VMEMM}, // enable interface
 
{VIC, BYTE_ACCESS, VIICR, 0xf8+1}, // VIICR
 
{VIC, BYTE_ACCESS, VICR1, 0x78+1}, // VICR1
{VIC, BYTE_ACCESS, VICR2, 0x78+2},
{VIC, BYTE_ACCESS, VICR3, 0x78+3},
{VIC, BYTE_ACCESS, VICR4, 0x78+4},
{VIC, BYTE_ACCESS, VICR5, 0x78+5},
{VIC, BYTE_ACCESS, VICR6, 0x78+6},
{VIC, BYTE_ACCESS, VICR7, 0x78+7}, // VICR7
 
{VIC, BYTE_ACCESS, DSICR, 0xf8+0}, // DSICR
 
{VIC, BYTE_ACCESS, LICR1, 0xf8+1}, // LICR1
{VIC, BYTE_ACCESS, LICR2, 0xf8+2},
{VIC, BYTE_ACCESS, LICR3, 0xf8+3},
{VIC, BYTE_ACCESS, LICR4, 0xf8+4},
{VIC, BYTE_ACCESS, LICR5, 0xf8+5},
{VIC, BYTE_ACCESS, LICR6, 0x38+6},
{VIC, BYTE_ACCESS, LICR7, 0x38+7}, // LICR7
 
{VIC, BYTE_ACCESS, ICGSICR, 0xf8+2}, // ICGS
{VIC, BYTE_ACCESS, ICMSICR, 0xf8+3}, // ICMS
 
{VIC, BYTE_ACCESS, EGICR, 0xf8+6}, // EGICR
 
{VIC, BYTE_ACCESS, ICGSVBR, 0x08}, // ICGS-IVBR (!)
{VIC, BYTE_ACCESS, ICMSVBR, 0x0c}, // ICMS-IVBR (!)
 
{VIC, BYTE_ACCESS, LIVBR, 0x00}, // LIVBR (!)
 
{VIC, BYTE_ACCESS, EGIVBR, 0x10}, // EGIVBR (!)
 
{VIC, BYTE_ACCESS, ICSR, 0x00}, // ICSR
 
{VIC, BYTE_ACCESS, ICR0, 0x00}, // ICR0
{VIC, BYTE_ACCESS, ICR1, 0x00},
{VIC, BYTE_ACCESS, ICR2, 0x00},
{VIC, BYTE_ACCESS, ICR3, 0x00},
{VIC, BYTE_ACCESS, ICR4, 0x00}, // ICR4
 
{VIC, BYTE_ACCESS, VIRSR, 0xfe}, // VIRSR
 
{VIC, BYTE_ACCESS, VIVR1, 0x0f}, // VIVR1
{VIC, BYTE_ACCESS, VIVR2, 0x0f},
{VIC, BYTE_ACCESS, VIVR3, 0x0f},
{VIC, BYTE_ACCESS, VIVR4, 0x0f},
{VIC, BYTE_ACCESS, VIVR5, 0x0f},
{VIC, BYTE_ACCESS, VIVR6, 0x0f},
{VIC, BYTE_ACCESS, VIVR7, 0x0f}, // VIVR7
 
{VIC, BYTE_ACCESS, TTR, 0x3c}, // TTR
 
{VIC, BYTE_ACCESS, ARCR, 0x40}, // ARCR
{VIC, BYTE_ACCESS, AMSR, 0x29}, // AMSR
{VIC, BYTE_ACCESS, RCR, 0x00}, // RCR
 
{IFR, LONG_ACCESS, (u16)ADRHL, 0xF0F0F0F0}, // ADR-H, ADR-L
{IFR, WORD_ACCESS, (u16)CSR , 0x0000}, // Contr-Reg
 
{VIC, BYTE_ACCESS, ICR7, 0x80}, // ICR7
 
{LCR, WORD_ACCESS, PLX9050_INTCSR, DISABLE_PCIADA_IRQS}, // disable interrupts
 
{STOP, WORD_ACCESS, 0, 0}};
 
static PCIVME_INIT_ELEMENT deinit_element_pre[] =
{{VIC, BYTE_ACCESS, ICR7, 0x00}, // ICR7 - sysfail
{LCR, WORD_ACCESS, PLX9050_INTCSR, DISABLE_PCIADA_IRQS}, // disable interrupts
{STOP, WORD_ACCESS, 0, 0}};
 
static PCIVME_INIT_ELEMENT deinit_element_post[] =
{{LCR, WORD_ACCESS, PLX9050_CNTRL, INHIBIT_VMEMM}, // disable interface
{STOP, WORD_ACCESS, 0, 0}};
 
 
/*--- EXTERNALS ----------------------------------------------------------------------------------*/
 
/*--- TYPEDEFS -----------------------------------------------------------------------------------*/
 
/*--- FUNCTIONS ----------------------------------------------------------------------------------*/
static inline void switch_VMEMM_on(DEVICE_OBJ *pd)
{
writew(RELEASE_VMEMM, (volatile void *) (pd->pLCR + PLX9050_CNTRL)); /* enable access */
}
 
static inline void switch_VMEMM_off(DEVICE_OBJ *pd)
{
writew(INHIBIT_VMEMM, (volatile void *) (pd->pLCR + PLX9050_CNTRL)); /* enable access */
}
 
static inline void setPageAddress(DEVICE_OBJ *pd, u32 newPageAddress)
{
PRINTK(KERN_DEBUG "%s : setPageAddress(0x%08x)\n", DEVICE_NAME, newPageAddress);
 
writel(newPageAddress, (volatile void *) pd->pAdrReg);
pd->dwCurrentPageAddress = newPageAddress;
}
 
static inline void setModifier(DEVICE_OBJ *pd, u8 newModifier)
{
PRINTK(KERN_DEBUG "%s : setModifier(0x%02x)\n", DEVICE_NAME, newModifier);
 
writeb(newModifier, (volatile void *) pd->pAdrMod);
pd->bCurrentModifier = newModifier;
}
 
/* read and write functions -----------------------------------------------------------------------*/
static inline u8 *increment8(void **pvBuffer)
{
u8 *tmp = (u8*)*pvBuffer;
*pvBuffer += sizeof(u8);
return tmp;
}
 
static inline u16 *increment16(void **pvBuffer)
{
u16 *tmp = (u16*)*pvBuffer;
*pvBuffer += sizeof(u16);
return tmp;
}
 
static inline u32 *increment32(void **pvBuffer)
{
u32 *tmp = (u32*)*pvBuffer;
*pvBuffer += sizeof(u32);
return tmp;
}
 
static void readByte(DEVICE_OBJ *pd, void **pvBuffer, u32 dwLocalAddressInPage)
{
u8 tmp;
 
tmp = readb((const volatile void *) (pd->pVME + dwLocalAddressInPage));
__put_user(tmp, increment8(pvBuffer));
}
 
static void writeByte(DEVICE_OBJ *pd, u32 dwLocalAddressInPage, void **pvBuffer)
{
u8 tmp;
 
__get_user(tmp, increment8(pvBuffer));
writeb(tmp, (volatile void *) (pd->pVME + dwLocalAddressInPage ));
}
 
static void readWord(DEVICE_OBJ *pd, void **pvBuffer, u32 dwLocalAddressInPage)
{
u16 tmp;
 
tmp = readw((const volatile void *) (pd->pVME + dwLocalAddressInPage));
__put_user(tmp, increment16(pvBuffer));
}
 
static void writeWord(DEVICE_OBJ *pd, u32 dwLocalAddressInPage, void **pvBuffer)
{
u16 tmp;
 
__get_user(tmp, increment16(pvBuffer));
writew(tmp, (volatile void *) ( pd->pVME + dwLocalAddressInPage ));
}
 
static void readLong(DEVICE_OBJ *pd, void **pvBuffer, u32 dwLocalAddressInPage)
{
u32 tmp;
 
tmp = readl((const volatile void *) (pd->pVME + dwLocalAddressInPage));
__put_user(tmp, increment32(pvBuffer));
}
 
static void writeLong(DEVICE_OBJ *pd, u32 dwLocalAddressInPage, void **pvBuffer)
{
u32 tmp;
 
__get_user(tmp, increment32(pvBuffer));
writel(tmp, (volatile void *) (pd->pVME + dwLocalAddressInPage));
}
 
/* test alignment functions -----------------------------------------------------------------------*/
static int MisalignmentForByteAccess(loff_t offset)
{
return 0;
}
 
static int MisalignmentForWordAccess(loff_t offset)
{
return(offset & 1);
}
 
static int MisalignmentForLongAccess(loff_t offset)
{
return(offset & 3);
}
 
// helper functions --------------------------------------------------------------------------------
int check_command(const PCIVME_INIT_ELEMENT *psInitElement)
{
u16 range;
u16 access_size;
 
// PRINTK(KERN_DEBUG "%s : check_command()\n", DEVICE_NAME);
 
switch (psInitElement->bDestination)
{
case LCR:
range = 0x54;
break;
case IFR:
range = 0x0c;
break;
case VIC:
range = 0xe4;
if ((psInitElement->wOffset & 3) != 3)
return -EINVAL;
break;
default:
return -EINVAL;
break;
}
 
// check alignment and allowed address range
switch (psInitElement->bAccessType)
{
case LONG_ACCESS:
if (psInitElement->wOffset & 3)
return -EINVAL;
access_size = sizeof(u32);
break;
case WORD_ACCESS:
if (psInitElement->wOffset & 1)
return -EINVAL;
access_size = sizeof(u16);
break;
case BYTE_ACCESS:
access_size = sizeof(u8);
break;
default :
return -EINVAL;
break;
}
 
if ((psInitElement->wOffset + access_size) > range)
return -EINVAL; // ignore it
 
return 0;
}
 
static int CmdMachine(DEVICE_OBJ *pd, const PCIVME_INIT_ELEMENT *psInitElement)
{
u32 adr;
int err;
 
PRINTK(KERN_DEBUG "%s : CmdMachine()\n", DEVICE_NAME);
 
// loop through the init (or deinit) list
while (psInitElement->bDestination != STOP)
{
err = check_command(psInitElement);
if (!err)
{
switch (psInitElement->bDestination)
{
case LCR:
adr = pd->pLCR;
break;
case VIC:
adr = pd->pCtl + VICBASE;
break;
case IFR:
adr = pd->pCtl + CSR;
break;
default:
return -EINVAL;
}
 
switch (psInitElement->bAccessType)
{
case LONG_ACCESS:
writel(psInitElement->dwValue, (volatile void *) (adr + psInitElement->wOffset));
break;
case WORD_ACCESS:
writew((u16)psInitElement->dwValue, (volatile void *) (adr + psInitElement->wOffset));
break;
case BYTE_ACCESS:
writeb((u8)psInitElement->dwValue, (volatile void *) (adr + psInitElement->wOffset));
break;
default:
return -EINVAL;
}
}
else
return err;
 
psInitElement++;
}
 
return 0;
}
 
// all ioctls --------------------------------------------------------------------------------------
static int init_hardware(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_INIT_COMMAND *init)
{
int err;
PCIVME_INIT_ELEMENT *element = init->sVie;
 
PRINTK(KERN_DEBUG "%s : init_hardware()\n", DEVICE_NAME);
 
err = CmdMachine(pd, element);
if (err)
{
PRINTK(KERN_DEBUG "%s : init failed with err = %d!\n", DEVICE_NAME, err);
return err;
}
 
// sync storage with hardware
pd->bCurrentModifier = readb((const volatile void *) pd->pAdrMod) & 0x3f;
pd->dwCurrentPageAddress = readl((const volatile void *) pd->pAdrReg) & HI_ADDRESS_MASK;
 
return 0;
}
 
static int deinit_hardware(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_INIT_COMMAND *deinit)
{
int err;
PCIVME_INIT_ELEMENT *element = deinit->sVie;
 
PRINTK(KERN_DEBUG "%s : deinit_hardware()\n", DEVICE_NAME);
 
err = CmdMachine(pd, deinit_element_pre);
if (err)
goto fail;
 
err = CmdMachine(pd, element);
if (err)
goto fail;
 
err = CmdMachine(pd, deinit_element_post);
if (err)
goto fail;
 
return 0;
 
fail:
return err;
}
 
static int access_command(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_ACCESS_COMMAND *cmd)
{
PRINTK(KERN_DEBUG "%s : access_command()\n", DEVICE_NAME);
 
pp->bModifier = cmd->bModifier;
pp->bAccessType = cmd->bAccessType;
pp->bIncrement = cmd->bIncrement;
 
switch (pp->bAccessType)
{
case BYTE_ACCESS:
pp->read = readByte;
pp->write = writeByte;
pp->AlignmentCheck = MisalignmentForByteAccess;
break;
case WORD_ACCESS:
pp->read = readWord;
pp->write = writeWord;
pp->AlignmentCheck = MisalignmentForWordAccess;
break;
case LONG_ACCESS:
pp->read = readLong;
pp->write = writeLong;
pp->AlignmentCheck = MisalignmentForLongAccess;
break;
default:
return -EINVAL;
}
 
return 0;
}
 
static int get_static_status(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_STATIC_STATUS *static_status)
{
PRINTK(KERN_DEBUG "%s : get_static_status()\n", DEVICE_NAME);
 
static_status->bConnected = pd->bConnected;
static_status->cModuleNumber = pd->cModuleNumber;
static_status->cFPGAVersion = pd->cFPGAVersion;
static_status->cSystemController = pd->cSystemController;
static_status->cWordMode = pd->cWordMode;
 
return 0;
}
 
static int get_dynamic_status(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_DYNAMIC_STATUS *dynamic_status)
{
u16 cntrl = readw((const volatile void *) pd->pPCIADACntrl);
u16 intCSR = readw((const volatile void *) pd->pPCIADAIntCSR);
 
PRINTK(KERN_DEBUG "%s : get_dynamic_status()\n", DEVICE_NAME);
 
dynamic_status->bConnected = (cntrl & 0x0800) ? 1 : 0;
dynamic_status->bPCIADAIrq = (intCSR & 0x0020) ? 1 : 0;
dynamic_status->bVMEMMIrq = (intCSR & 0x0004) ? 1 : 0;
 
return 0;
}
 
static int read_vector_polling(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_VECTOR_LEVEL *vector)
{
u16 cntrl = readw((const volatile void *) pd->pPCIADACntrl);
u16 intCSR = readw((const volatile void *) pd->pPCIADAIntCSR);
 
PRINTK(KERN_DEBUG "%s : read_vector()\n", DEVICE_NAME);
 
vector->dwStatusID = 0;
vector->bLevel = 0;
vector->bPCIADAIrq = 0;
 
if (intCSR & 0x20) // check for PCIADA interrupt
{
vector->bPCIADAIrq = 1;
vector->dwStatusID = 1; // force for PCIADA irqs
 
writew(cntrl & ~0x0100, (volatile void *) pd->pPCIADACntrl); // clear pending PCIADA irq
writew(cntrl, (volatile void *) pd->pPCIADACntrl);
}
else
{
if ((cntrl & 0x0980) == 0x0980) // check if VMEMM is connected and ready
{
vector->bLevel = (u8)readw((const volatile void *) ( pd->pCtl + VICRES ));
if (vector->bLevel & 1)
{
if (vector->bLevel != 1)
vector->dwStatusID = (u32)readb((const volatile void *) (pd->pCtl + VECBASE + vector->bLevel));
 
vector->bLevel >>= 1;
}
}
}
return 0;
}
 
static int read_vector_blocking(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_VECTOR_LEVEL *vector, struct file *pFile)
{
int error;
 
vector->dwStatusID = 0;
vector->bLevel = 0;
vector->bPCIADAIrq = 0;
 
// support nonblocking read if requested
if ((pFile->f_flags & O_NONBLOCK) && (!pd->wIrqStatus))
return -EAGAIN;
 
// sleep until data are available
if ((error = wait_event_interruptible(pd->event_queue, (pd->wIrqStatus))))
return error;
 
error = read_vector_polling(pp, pd, vector);
 
pd->wIrqStatus = 0; // clear the status since it is read
 
return error;
}
 
 
static int control_interrupts(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_IRQ_CONTROL *irq_control)
{
u16 intCSR = readw((const volatile void *) pd->pPCIADAIntCSR);
u8 ret = (intCSR & 0x40) ? 1 : 0;
 
PRINTK(KERN_DEBUG "%s : control_interrupts()\n", DEVICE_NAME);
 
if (irq_control->bEnable)
writew(intCSR | 0x40, (volatile void *) pd->pPCIADAIntCSR);
else
writew(intCSR & ~0x40, (volatile void *) pd->pPCIADAIntCSR);
 
// return the switch before set
irq_control->bEnable = ret;
 
return 0;
}
 
static int VME_TAS(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_TAS_STRUCT *tas_cmd)
{
u32 access_adr = pd->pVME + (tas_cmd->dwAddress & LO_ADDRESS_MASK); // make low part of address
u8 data;
 
// save old contents
u32 old_address = readl((const volatile void *) pd->pAdrReg);
u16 old_CSR = readw((const volatile void *) pd->pCSR);
u16 intCSR = readw((const volatile void *) pd->pPCIADAIntCSR);
pd->bCurrentModifier = readb((const volatile void *) pd->pAdrMod) & 0x3f;
 
PRINTK(KERN_DEBUG "%s : VME_TAS()\n", DEVICE_NAME);
 
// set new contents
writew(DISABLE_PCIADA_IRQS, (volatile void *) pd->pPCIADAIntCSR);
writeb((u8)tas_cmd->bModifier & 0x3f, (volatile void *) pd->pAdrMod);
writel(tas_cmd->dwAddress, (volatile void *) pd->pAdrReg);
writew(old_CSR | FLAG_RMC, (volatile void *) pd->pCSR);
 
// do the read - modify - write
data = readb((const volatile void *) access_adr);
writeb(tas_cmd->bContent, (volatile void *) access_adr);
 
// restore old contents
writeb(pd->bCurrentModifier, (volatile void *) pd->pAdrMod);
writew(old_CSR, (volatile void *) pd->pCSR);
writel(old_address, (volatile void *) pd->pAdrReg);
writew(intCSR, (volatile void *) pd->pPCIADAIntCSR);
 
// get back read data
tas_cmd->bContent = data;
 
return 0;
}
 
static int VMEMM_RESET(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_RESET_COMMAND *reset_cmd)
{
u16 cntrl = readw((const volatile void *) pd->pPCIADACntrl);
u16 intCSR = readw((const volatile void *) pd->pPCIADAIntCSR);
int status = 0;
 
PRINTK(KERN_DEBUG "%s : VMEMM_RESET()\n", DEVICE_NAME);
 
// am I connected and switched on??
if ((cntrl & 0x0980) == 0x0980)
{
// do command
switch (reset_cmd->bCommand)
{
case POLL_RESET_CMD:
break;
case VME_RESET_CMD:
writeb(0, (volatile void *) pd->pAdrMod);
writeb(0xf0, (volatile void *) (pd->pCtl + VICBASE + SRR)); // make VME reset
break;
case LOCAL_RESET_CMD:
writeb(0, (volatile void *) pd->pAdrMod);
writew(LOCAL_RESET, (volatile void *) (pd->pCtl + VICRES));
break;
case GLOBAL_RESET_CMD:
writeb(0, (volatile void *) pd->pAdrMod);
writew(GLOBAL_RESET, (volatile void *) (pd->pCtl + VICRES));
break;
 
default: status = -EINVAL;
}
 
// inhibit PCIADA generated irqs
writew(DISABLE_PCIADA_IRQS, (volatile void *) pd->pPCIADAIntCSR);
 
// always poll reset status - access will sometimes generate PCIADA #2 interrupt
reset_cmd->bResult = readb((const volatile void *) pd->pAdrMod);
 
// reset any pending PCIADA interrupt #2
writew(cntrl & ~0x0100, (volatile void *) pd->pPCIADACntrl);
writew(cntrl , (volatile void *) pd->pPCIADACntrl);
 
// restore IRQStatus
writew(intCSR , (volatile void *) pd->pPCIADAIntCSR);
}
else
status = -EBUSY;
 
// sync storage with hardware
pd->bCurrentModifier = readb((const volatile void *) pd->pAdrMod) & 0x3f;
 
return status;
}
 
static int access_VIC68A(PATH_OBJ *pp, DEVICE_OBJ *pd, PCIVME_VIC68A_ACTION *action)
{
int nStatus = 0;
 
PRINTK(KERN_DEBUG "%s : access_VIC68A()\n", DEVICE_NAME);
 
if ((action->wRegisterAddress <= SRR) && ((action->wRegisterAddress & 0x03) == 3))
{
u32 dwAddress;
u8 bByte = 0;
 
dwAddress = (pd->pCtl + VICBASE + action->wRegisterAddress);
 
switch (action->bAccessMode)
{
case VIC68A_WRITE_ONLY:
writeb(action->bContent, (volatile void *) dwAddress);
break;
case VIC68A_WRITE:
writeb(action->bContent, (volatile void *) dwAddress);
action->bContent = readb((const volatile void *) dwAddress);
break;
case VIC68A_OR:
bByte = readb((const volatile void *) dwAddress);
bByte |= action->bContent;
writeb(bByte, (volatile void *) dwAddress);
action->bContent = readb((const volatile void *) dwAddress);
break;
case VIC68A_AND:
bByte = readb((const volatile void *) dwAddress);
bByte &= action->bContent;
writeb(bByte, (volatile void *) dwAddress);
action->bContent = readb((const volatile void *) dwAddress);
break;
case VIC68A_READ:
action->bContent = readb((const volatile void *) dwAddress);
break;
default:
nStatus = -EINVAL;
}
}
else
nStatus = -EINVAL;
 
return nStatus;
}
 
// the dispatcher ----------------------------------------------------------------------------------
int pcivme_ioctl(struct inode *pInode, struct file *pFile, unsigned int cmd, unsigned long arg)
{
PATH_OBJ *pp = (PATH_OBJ *)pFile->private_data;
DEVICE_OBJ *pd = pp->pDo;
int err = 1;
PRINTK(KERN_DEBUG "%s : pcivme_ioctl(0x%08x), size = %d\n", DEVICE_NAME, cmd, _IOC_SIZE(cmd));
 
if (_IOC_TYPE(cmd) != PCIVME_MAGIC)
return -EINVAL;
 
// check for accessible user buffer
if (_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
if (_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
if (err)
return -EFAULT;
 
switch (_IOC_NR(cmd))
{
case _IOC_NR(PCIVME_READ_VECTOR_BLOCK):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_VECTOR_LEVEL))
return -EINVAL;
return read_vector_blocking(pp, pd, (PCIVME_VECTOR_LEVEL *)arg, pFile);
 
case _IOC_NR(PCIVME_READ_VECTOR_POLL):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_VECTOR_LEVEL))
return -EINVAL;
return read_vector_polling(pp, pd, (PCIVME_VECTOR_LEVEL *)arg);
 
case _IOC_NR(PCIVME_CONTROL_INTERRUPTS):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_IRQ_CONTROL))
return -EINVAL;
return control_interrupts(pp, pd, (PCIVME_IRQ_CONTROL *)arg);
 
case _IOC_NR(PCIVME_TAS):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_TAS_STRUCT))
return -EINVAL;
return VME_TAS(pp, pd, (PCIVME_TAS_STRUCT *)arg);
 
case _IOC_NR(PCIVME_ACCESS_VIC68A):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_VIC68A_ACTION))
return -EINVAL;
return access_VIC68A(pp, pd, (PCIVME_VIC68A_ACTION *)arg);
 
case _IOC_NR(PCIVME_GET_DYNAMIC_STATUS):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_DYNAMIC_STATUS))
return -EINVAL;
return get_dynamic_status(pp, pd, (PCIVME_DYNAMIC_STATUS *)arg);
 
case _IOC_NR(PCIVME_RESET):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_RESET_COMMAND))
return -EINVAL;
return VMEMM_RESET(pp, pd, (PCIVME_RESET_COMMAND *)arg);
 
case _IOC_NR(PCIVME_SET_ACCESS_PARA):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_ACCESS_COMMAND))
return -EINVAL;
return access_command(pp, pd, (PCIVME_ACCESS_COMMAND *)arg);
 
case _IOC_NR(PCIVME_GET_STATIC_STATUS):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_STATIC_STATUS))
return -EINVAL;
return get_static_status(pp, pd, (PCIVME_STATIC_STATUS *)arg);
 
case _IOC_NR(PCIVME_INIT_HARDWARE):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_INIT_COMMAND))
return -EINVAL;
return init_hardware(pp, pd, (PCIVME_INIT_COMMAND *)arg);
 
case _IOC_NR(PCIVME_DEINIT_HARDWARE):
if (_IOC_SIZE(cmd) < sizeof(PCIVME_INIT_COMMAND))
return -EINVAL;
return deinit_hardware(pp, pd, (PCIVME_INIT_COMMAND *)arg);
default:
PRINTK(KERN_DEBUG "%s : pcivme_ioctl(0x%08x) is illegal\n", DEVICE_NAME, cmd);
return -EINVAL;
}
 
return 0;
}
 
static long pcivme_unlocked_ioctl(struct file *pFile, unsigned int cmd, unsigned long arg){
long retval=0;
#if HAVE_UNLOCKED_IOCTL
struct mutex fs_mutex;
mutex_init(&fs_mutex);
mutex_lock(&fs_mutex);
#else
lock_kernel();
#endif
 
retval = pcivme_ioctl(NULL, pFile, cmd,arg);
 
#if HAVE_UNLOCKED_IOCTL
mutex_unlock(&fs_mutex);
#else
unlock_kernel();
#endif
return retval;
}
 
int pcivme_open(struct inode *pInode, struct file *pFile)
{
DEVICE_OBJ *pd = 0;
DEVICE_OBJ *desc = 0;
int nMinor = MINOR(pInode->i_rdev);
struct list_head *ptr;
 
PRINTK(KERN_DEBUG "%s : pcivme_open(), %d, %d, scanning %d devices\n", DEVICE_NAME, major(pInode->i_rdev), nMinor, drv.count);
 
/* search for device */
for (ptr = drv.devList.next; ptr != &drv.devList; ptr = ptr->next)
{
pd = list_entry(ptr, DEVICE_OBJ, list);
pd->bConnected = get_module_info(pd);
if (pd->bConnected)
{
if (test_connection(pd))
{
printk(KERN_ERR "%s : connection test for module %d failed!\n", DEVICE_NAME, pd->cModuleNumber);
pd->bConnected = 0;
}
else
if (pd->cModuleNumber == nMinor)
{
desc = pd;
break;
}
}
else
PRINTK(KERN_DEBUG "%s : module %d not connected!\n", DEVICE_NAME, nMinor);
}
 
if (desc)
{
int err;
PATH_OBJ *pp;
 
pp = (PATH_OBJ *)kmalloc(sizeof(PATH_OBJ), GFP_ATOMIC);
if (!pp)
return -ENOMEM;
 
// file PATH_OBJ structure with initialisation data
pp->pDo = pd;
pp->bAccessType = pp->bIncrement = BYTE_ACCESS;
pp->bModifier = Short_NoPriv;
pp->read = readByte;
pp->write = writeByte;
pp->AlignmentCheck = MisalignmentForByteAccess;
pFile->private_data = (void *)pp;
 
PRINTK(KERN_DEBUG "%s : found VMEMM module with number %d.\n", DEVICE_NAME, nMinor);
 
if (!pd->nOpenCounter)
{
err = CmdMachine(pd, init_element);
if (err)
{
printk(KERN_ERR "%s : default init failed with err = %d!\n", DEVICE_NAME, err);
kfree_s(pp, sizeof(*pp)); // FREE(pFile->private_data);
return err;
}
}
 
pd->nOpenCounter++;
}
else
{
printk(KERN_ERR "%s : No VMEMM module found.\n", DEVICE_NAME);
return -ENODEV;
}
 
__MOD_INC_USE_COUNT__;
return 0;
}
 
int pcivme_release(struct inode *pInode, struct file *pFile)
{
PATH_OBJ *pp;
 
PRINTK(KERN_DEBUG "%s : release()\n", DEVICE_NAME);
 
if (pFile->private_data)
{
pp = (PATH_OBJ *)pFile->private_data;
if (pp && pp->pDo )
{
DEVICE_OBJ *pd = pp->pDo;
 
pd->nOpenCounter--;
 
// the last one closes the door
if (pd->nOpenCounter <= 0)
{
CmdMachine(pd, deinit_element_pre);
CmdMachine(pd, deinit_element_post);
 
// Vorsicht ist die Mutter der Porzelankiste!
pd->nOpenCounter = 0;
}
 
pp->pDo = 0;
}
 
kfree_s(pp, sizeof(*pp)); // FREE(pFile->private_data);
}
 
__MOD_DEC_USE_COUNT__;
return 0;
}
 
static ssize_t pcivme_read(struct file *pFile, char *pcBuffer, size_t count, loff_t *offp)
{
PATH_OBJ *pp = (PATH_OBJ *)pFile->private_data;
DEVICE_OBJ *pd = pp->pDo;
u32 dwLocalCount = count;
register u32 dwLocalPageAddress;
u32 dwLocalAddressInPage;
 
PRINTK(KERN_DEBUG "%s : pcivme_read(0x%08x, %d)\n", DEVICE_NAME, (u32)*offp, dwLocalCount);
 
// inhibit misaligned accesses
if (pp->AlignmentCheck(*offp))
return -EFAULT;
 
// check for free access to user buffer
if (!access_ok(VERIFY_WRITE, pcBuffer, count))
return -EFAULT;
 
// do I still have the same modifier?
if (pp->bModifier != pd->bCurrentModifier)
setModifier(pd, pp->bModifier);
 
while (count >= pp->bAccessType)
{
dwLocalPageAddress = *offp & HI_ADDRESS_MASK;
dwLocalAddressInPage = *offp & LO_ADDRESS_MASK;
 
// do I still work in the same page?
if (dwLocalPageAddress != pd->dwCurrentPageAddress)
setPageAddress(pd, dwLocalPageAddress);
 
// standard access method
pp->read(pd, (void **)&pcBuffer, dwLocalAddressInPage);
 
// decrement count and update pointer to next access address
count -= pp->bAccessType;
*offp += pp->bIncrement;
}
 
return dwLocalCount - count;
}
 
static ssize_t pcivme_write(struct file *pFile, const char *pcBuffer, size_t count, loff_t *offp)
{
PATH_OBJ *pp = (PATH_OBJ *)pFile->private_data;
DEVICE_OBJ *pd = pp->pDo;
u32 dwLocalCount = count;
register u32 dwLocalPageAddress;
u32 dwLocalAddressInPage;
 
PRINTK(KERN_DEBUG "%s : pcivme_write(0x%08x, %d)\n", DEVICE_NAME, (u32)*offp, dwLocalCount);
 
// inhibit misaligned accesses
if (pp->AlignmentCheck(*offp))
return -EFAULT;
 
// check for free access to user buffer
if (!access_ok(VERIFY_READ, pcBuffer, count))
return -EFAULT;
 
// do I still have the same modifier?
if (pp->bModifier != pd->bCurrentModifier)
setModifier(pd, pp->bModifier);
 
while (count >= pp->bAccessType)
{
dwLocalPageAddress = *offp & HI_ADDRESS_MASK;
dwLocalAddressInPage = *offp & LO_ADDRESS_MASK;
 
// do I still work in the same page?
if (dwLocalPageAddress != pd->dwCurrentPageAddress)
setPageAddress(pd, dwLocalPageAddress);
 
// standard access method
pp->write(pd, dwLocalAddressInPage, (void **)&pcBuffer);
 
// decrement count and update pointer to next access address
count -= pp->bAccessType;
*offp += pp->bIncrement;
}
 
return dwLocalCount - count;
}
 
 
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
struct file_operations pcivme_fops =
{
NULL, /* lseek */
pcivme_read, /* read */
pcivme_write, /* write */
NULL, /* readdir */
NULL, /* select */
pcivme_ioctl, /* ioctl */
NULL, /* mmap */
pcivme_open, /* open */
NULL, /* flush */
pcivme_release, /* release */
};
#else
struct file_operations pcivme_fops =
{
.read = pcivme_read, /* read */
.write = pcivme_write, /* write */
.unlocked_ioctl = pcivme_unlocked_ioctl, /* ioctl */
.open = pcivme_open, /* open */
.release = pcivme_release, /* release */
};
#endif
 
 
/pcivme-3.2/driver/Module.markers
0,0 → 1,4
core_marker_format vmlinux name %s format %s
kernel_sched_schedule vmlinux prev_pid %d next_pid %d prev_state %ld ## rq %p prev %p next %p
kernel_sched_wakeup vmlinux pid %d state %ld ## rq %p task %p rq->curr %p
kernel_sched_wakeup_new vmlinux pid %d state %ld ## rq %p task %p rq->curr %p
/pcivme-3.2/driver/pcivme.ko
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/pcivme-3.2/driver/askpci.c
0,0 → 1,174
//****************************************************************************
// Copyright (C) 2000-2006 ARW Elektronik Germany
//
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU 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)
//
//****************************************************************************
 
//****************************************************************************
//
// askpci.c - a hardware independent tool to get
// information about searched pci-hardware
//
// $Log: askpci.c,v $
// Revision 1.7 2006/06/04 12:20:46 klaus
// release_20060604; Version 3.2; pci_{en|dis}able_device() added
//
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
/*--- INCLUDES -------------------------------------------------------------*/
#include "common.h" /* must be the first include */
 
#include <linux/pci.h>
#include <asm/types.h>
#include "askpci.h"
 
/*--- DEFINES ---------------------------------------------------------------*/
 
 
/*--- FUNCTIONS -------------------------------------------------------------*/
void DeletePCIConfig(DRIVER_OBJ *drv)
{
PCIConfig *dev = NULL;
 
while (!list_empty(&drv->pciList)) // cycle through the list of pci devices and remove them
{
dev = (PCIConfig *)drv->pciList.prev; // empty in reverse order
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
if (dev->pciDev)
pci_disable_device(dev->pciDev);
#endif
 
list_del(&dev->list);
kfree(dev);
}
}
 
int GetPCIConfig(DRIVER_OBJ *drv, u16 device_id, u16 vendor_id, u16 subsys_id, u16 subven_id)
{
int result = 0;
PCIConfig *dev = NULL;
int i = 0;
 
// search pci devices
PRINTK(KERN_DEBUG "%s : GetPCIConfig(0x%04x, 0x%04x, 0x%04x, 0x%04x)\n", DEVICE_NAME, device_id, vendor_id, subsys_id, subven_id);
 
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
if (CONFIG_PCI)
#else
if (pci_present())
#endif
{
struct pci_dev *pciDev;
 
struct pci_dev *from = NULL;
do
{
// https://groups.google.com/forum/?fromgroups=#!topic/fa.linux.kernel/aMXNYIFrOP8
// pciDev = pci_find_device((unsigned int)vendor_id, (unsigned int)device_id, from);
pciDev = pci_get_device((unsigned int)vendor_id, (unsigned int)device_id, from);
 
if (pciDev != NULL)
{
u16 wSubSysID;
u16 wSubVenID;
 
// a PCI device with PCAN_PCI_VENDOR_ID and PCAN_PCI_DEVICE_ID was found
from = pciDev;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
if (pci_enable_device(pciDev))
continue;
#endif
 
// get the PCI Subsystem-ID
result = pci_read_config_word(pciDev, PCI_SUBSYSTEM_ID, &wSubSysID);
if (result)
{
result = -ENXIO;
goto fail;
}
 
// get the PCI Subvendor-ID
result = pci_read_config_word(pciDev, PCI_SUBSYSTEM_VENDOR_ID, &wSubVenID);
if (result)
{
result = -ENXIO;
goto fail;
}
 
// get next if the subsys and subvendor ids do not match
if ((wSubVenID != subven_id) || (wSubSysID != subsys_id))
continue;
 
// create space for PCIConfig descriptor
if ((dev = (PCIConfig *)kmalloc(sizeof(PCIConfig), GFP_KERNEL)) == NULL)
{
result = -ENOMEM;
goto fail;
}
 
// put data into pci device
dev->pciDev = pciDev;
 
list_add_tail(&dev->list, &drv->pciList); // add this device to the list of unchecked devices
dev->index++;
i++;
}
} while (pciDev != NULL);
 
result = 0;
}
else
{
printk(KERN_ERR "%s: No pcibios present!\n", DEVICE_NAME);
result = -ENXIO;
}
 
fail:
if (result)
DeletePCIConfig(drv);
 
PRINTK(KERN_DEBUG "%s : %d devices found (%d).\n", DEVICE_NAME, i, result);
 
return result;
}
 
 
/* ------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------- */
 
/pcivme-3.2/driver/Module.symvers
--- pcivme-3.2/driver/fops.h (nonexistent)
+++ pcivme-3.2/driver/fops.h (revision 9)
@@ -0,0 +1,59 @@
+#ifndef __FOPS_H__
+#define __FOPS_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 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)
+//
+//****************************************************************************
+
+//****************************************************************************
+//
+// fops.h -- the file operations header for the PCIVME PCI to VME Interface
+//
+// $Log: fops.h,v $
+// Revision 1.4 2004/08/13 19:23:26 klaus
+// conversion to kernel-version 2.6, released version 3.0
+//
+// Revision 1.3 2002/10/18 21:56:28 klaus
+// completed functional features, untested
+//
+// Revision 1.2 2002/10/18 21:56:28 klaus
+// completed functional features, untested
+//
+// Revision 1.1.1.1 2002/10/09 19:36:30 klaus
+// initial import
+//
+//****************************************************************************
+
+/*--- INCLUDES ----------------------------------------------------------------------------*/
+#include <linux/fs.h>
+
+/*--- TYPEDEFS ----------------------------------------------------------------------------*/
+
+/*--- PROTOTYPES --------------------------------------------------------------------------*/
+extern struct file_operations pcivme_fops;
+
+#endif // __FOPS_H__
/pcivme-3.2/driver/.pcivme.o.cmd
0,0 → 1,0
cmd_/home/f9daq/pcivme-3.2/driver/pcivme.o := ld -m elf_i386 -r -o /home/f9daq/pcivme-3.2/driver/pcivme.o /home/f9daq/pcivme-3.2/driver/./main.o /home/f9daq/pcivme-3.2/driver/./askpci.o /home/f9daq/pcivme-3.2/driver/./plxbug.o /home/f9daq/pcivme-3.2/driver/./fops.o
/pcivme-3.2/driver/askpci.h
0,0 → 1,67
#ifndef __ASKPCI_H__
#define __ASKPCI_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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// askpci.h - definitions for basic access functions of pci information
//
// $Log: askpci.h,v $
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
/*--- INCLUDES -------------------------------------------------------------------------*/
#include <linux/version.h>
#include <linux/pci.h>
#include <asm/types.h>
#include <linux/list.h>
 
#include "main.h"
 
/*--- TYPEDEFS -------------------------------------------------------------------------*/
 
/*--- PROTOTYPES -------------------------------------------------------------------------*/
int GetPCIConfig(DRIVER_OBJ *drv, u16 device_id, u16 vendor_id, u16 subsys_id, u16 subven_id);
void DeletePCIConfig(DRIVER_OBJ *drv);
 
#endif /* __ASKPCI_H__ */
 
 
/pcivme-3.2/driver/.main.o.cmd
0,0 → 1,787
cmd_/home/f9daq/pcivme-3.2/driver/./main.o := gcc -Wp,-MD,/home/f9daq/pcivme-3.2/driver/./.main.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.6/include -I/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include /usr/src/linux-headers-3.5.0-28-generic/include/linux/kconfig.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_AVX=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -I. -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(main)" -D"KBUILD_MODNAME=KBUILD_STR(pcivme)" -c -o /home/f9daq/pcivme-3.2/driver/./.tmp_main.o /home/f9daq/pcivme-3.2/driver/./main.c
 
source_/home/f9daq/pcivme-3.2/driver/./main.o := /home/f9daq/pcivme-3.2/driver/./main.c
 
deps_/home/f9daq/pcivme-3.2/driver/./main.o := \
/home/f9daq/pcivme-3.2/driver/./common.h \
$(wildcard include/config/modversions.h) \
include/linux/version.h \
include/config/modversions.h \
include/linux/module.h \
$(wildcard include/config/sysfs.h) \
$(wildcard include/config/modules.h) \
$(wildcard include/config/unused/symbols.h) \
$(wildcard include/config/generic/bug.h) \
$(wildcard include/config/kallsyms.h) \
$(wildcard include/config/smp.h) \
$(wildcard include/config/tracepoints.h) \
$(wildcard include/config/tracing.h) \
$(wildcard include/config/event/tracing.h) \
$(wildcard include/config/ftrace/mcount/record.h) \
$(wildcard include/config/module/unload.h) \
$(wildcard include/config/constructors.h) \
$(wildcard include/config/debug/set/module/ronx.h) \
include/linux/list.h \
$(wildcard include/config/debug/list.h) \
include/linux/types.h \
$(wildcard include/config/uid16.h) \
$(wildcard include/config/lbdaf.h) \
$(wildcard include/config/arch/dma/addr/t/64bit.h) \
$(wildcard include/config/phys/addr/t/64bit.h) \
$(wildcard include/config/64bit.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/types.h \
include/asm-generic/types.h \
include/asm-generic/int-ll64.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitsperlong.h \
include/asm-generic/bitsperlong.h \
include/linux/posix_types.h \
include/linux/stddef.h \
include/linux/compiler.h \
$(wildcard include/config/sparse/rcu/pointer.h) \
$(wildcard include/config/trace/branch/profiling.h) \
$(wildcard include/config/profile/all/branches.h) \
$(wildcard include/config/enable/must/check.h) \
$(wildcard include/config/enable/warn/deprecated.h) \
include/linux/compiler-gcc.h \
$(wildcard include/config/arch/supports/optimized/inlining.h) \
$(wildcard include/config/optimize/inlining.h) \
include/linux/compiler-gcc4.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types.h \
$(wildcard include/config/x86/32.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types_32.h \
include/asm-generic/posix_types.h \
include/linux/poison.h \
$(wildcard include/config/illegal/pointer/value.h) \
include/linux/const.h \
include/linux/stat.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/stat.h \
include/linux/time.h \
$(wildcard include/config/arch/uses/gettimeoffset.h) \
include/linux/cache.h \
$(wildcard include/config/arch/has/cache/line/size.h) \
include/linux/kernel.h \
$(wildcard include/config/preempt/voluntary.h) \
$(wildcard include/config/debug/atomic/sleep.h) \
$(wildcard include/config/prove/locking.h) \
$(wildcard include/config/ring/buffer.h) \
$(wildcard include/config/numa.h) \
$(wildcard include/config/compaction.h) \
include/linux/sysinfo.h \
/usr/lib/gcc/i686-linux-gnu/4.6/include/stdarg.h \
include/linux/linkage.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/linkage.h \
$(wildcard include/config/x86/64.h) \
$(wildcard include/config/x86/alignment/16.h) \
include/linux/stringify.h \
include/linux/bitops.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitops.h \
$(wildcard include/config/x86/cmov.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/alternative.h \
$(wildcard include/config/paravirt.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/asm.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpufeature.h \
$(wildcard include/config/x86/invlpg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/required-features.h \
$(wildcard include/config/x86/minimum/cpu/family.h) \
$(wildcard include/config/math/emulation.h) \
$(wildcard include/config/x86/pae.h) \
$(wildcard include/config/x86/cmpxchg64.h) \
$(wildcard include/config/x86/use/3dnow.h) \
$(wildcard include/config/x86/p6/nop.h) \
include/asm-generic/bitops/fls64.h \
include/asm-generic/bitops/find.h \
$(wildcard include/config/generic/find/first/bit.h) \
include/asm-generic/bitops/sched.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/arch_hweight.h \
include/asm-generic/bitops/const_hweight.h \
include/asm-generic/bitops/le.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/byteorder.h \
include/linux/byteorder/little_endian.h \
include/linux/swab.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swab.h \
$(wildcard include/config/x86/bswap.h) \
include/linux/byteorder/generic.h \
include/asm-generic/bitops/ext2-atomic-setbit.h \
include/linux/log2.h \
$(wildcard include/config/arch/has/ilog2/u32.h) \
$(wildcard include/config/arch/has/ilog2/u64.h) \
include/linux/typecheck.h \
include/linux/printk.h \
$(wildcard include/config/printk.h) \
$(wildcard include/config/dynamic/debug.h) \
include/linux/init.h \
$(wildcard include/config/hotplug.h) \
include/linux/dynamic_debug.h \
include/linux/string.h \
$(wildcard include/config/binary/printf.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string_32.h \
$(wildcard include/config/kmemcheck.h) \
include/linux/errno.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/errno.h \
include/asm-generic/errno.h \
include/asm-generic/errno-base.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/div64.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cache.h \
$(wildcard include/config/x86/l1/cache/shift.h) \
$(wildcard include/config/x86/internode/cache/shift.h) \
$(wildcard include/config/x86/vsmp.h) \
include/linux/seqlock.h \
include/linux/spinlock.h \
$(wildcard include/config/debug/spinlock.h) \
$(wildcard include/config/generic/lockbreak.h) \
$(wildcard include/config/preempt.h) \
$(wildcard include/config/debug/lock/alloc.h) \
include/linux/preempt.h \
$(wildcard include/config/debug/preempt.h) \
$(wildcard include/config/preempt/tracer.h) \
$(wildcard include/config/preempt/count.h) \
$(wildcard include/config/preempt/notifiers.h) \
include/linux/thread_info.h \
$(wildcard include/config/compat.h) \
$(wildcard include/config/debug/stack/usage.h) \
include/linux/bug.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bug.h \
$(wildcard include/config/bug.h) \
$(wildcard include/config/debug/bugverbose.h) \
include/asm-generic/bug.h \
$(wildcard include/config/generic/bug/relative/pointers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/thread_info.h \
$(wildcard include/config/ia32/emulation.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32_types.h \
$(wildcard include/config/highmem4g.h) \
$(wildcard include/config/highmem64g.h) \
$(wildcard include/config/page/offset.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32.h \
$(wildcard include/config/hugetlb/page.h) \
$(wildcard include/config/debug/virtual.h) \
$(wildcard include/config/flatmem.h) \
$(wildcard include/config/x86/3dnow.h) \
include/asm-generic/memory_model.h \
$(wildcard include/config/discontigmem.h) \
$(wildcard include/config/sparsemem/vmemmap.h) \
$(wildcard include/config/sparsemem.h) \
include/asm-generic/getorder.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor.h \
$(wildcard include/config/cc/stackprotector.h) \
$(wildcard include/config/m386.h) \
$(wildcard include/config/m486.h) \
$(wildcard include/config/x86/debugctlmsr.h) \
$(wildcard include/config/cpu/sup/amd.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor-flags.h \
$(wildcard include/config/vm86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vm86.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/segment.h \
$(wildcard include/config/x86/32/lazy/gs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt_types.h \
$(wildcard include/config/x86/local/apic.h) \
$(wildcard include/config/paravirt/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc_defs.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/kmap_types.h \
$(wildcard include/config/debug/highmem.h) \
include/asm-generic/kmap_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_types.h \
$(wildcard include/config/compat/vdso.h) \
$(wildcard include/config/proc/fs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
$(wildcard include/config/highmem.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level_types.h \
include/asm-generic/pgtable-nopud.h \
include/asm-generic/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/math_emu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sigcontext.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/current.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/percpu.h \
$(wildcard include/config/x86/64/smp.h) \
include/asm-generic/percpu.h \
$(wildcard include/config/have/setup/per/cpu/area.h) \
include/linux/threads.h \
$(wildcard include/config/nr/cpus.h) \
$(wildcard include/config/base/small.h) \
include/linux/percpu-defs.h \
$(wildcard include/config/debug/force/weak/per/cpu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr-index.h \
include/linux/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ioctl.h \
include/asm-generic/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpumask.h \
include/linux/cpumask.h \
$(wildcard include/config/cpumask/offstack.h) \
$(wildcard include/config/hotplug/cpu.h) \
$(wildcard include/config/debug/per/cpu/maps.h) \
$(wildcard include/config/disable/obsolete/cpumask/functions.h) \
include/linux/bitmap.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt.h \
$(wildcard include/config/transparent/hugepage.h) \
$(wildcard include/config/paravirt/spinlocks.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/nops.h \
$(wildcard include/config/mk7.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/special_insns.h \
include/linux/personality.h \
include/linux/math64.h \
include/linux/err.h \
include/linux/irqflags.h \
$(wildcard include/config/trace/irqflags.h) \
$(wildcard include/config/irqsoff/tracer.h) \
$(wildcard include/config/trace/irqflags/support.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irqflags.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ftrace.h \
$(wildcard include/config/function/tracer.h) \
$(wildcard include/config/dynamic/ftrace.h) \
include/linux/atomic.h \
$(wildcard include/config/arch/has/atomic/or.h) \
$(wildcard include/config/generic/atomic64.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg_32.h \
$(wildcard include/config/x86/cmpxchg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic64_32.h \
include/asm-generic/atomic-long.h \
include/linux/bottom_half.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/barrier.h \
$(wildcard include/config/x86/ppro/fence.h) \
$(wildcard include/config/x86/oostore.h) \
include/linux/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwlock.h \
include/linux/lockdep.h \
$(wildcard include/config/lockdep.h) \
$(wildcard include/config/lock/stat.h) \
$(wildcard include/config/prove/rcu.h) \
include/linux/rwlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock.h \
include/linux/rwlock.h \
include/linux/spinlock_api_smp.h \
$(wildcard include/config/inline/spin/lock.h) \
$(wildcard include/config/inline/spin/lock/bh.h) \
$(wildcard include/config/inline/spin/lock/irq.h) \
$(wildcard include/config/inline/spin/lock/irqsave.h) \
$(wildcard include/config/inline/spin/trylock.h) \
$(wildcard include/config/inline/spin/trylock/bh.h) \
$(wildcard include/config/uninline/spin/unlock.h) \
$(wildcard include/config/inline/spin/unlock/bh.h) \
$(wildcard include/config/inline/spin/unlock/irq.h) \
$(wildcard include/config/inline/spin/unlock/irqrestore.h) \
include/linux/rwlock_api_smp.h \
$(wildcard include/config/inline/read/lock.h) \
$(wildcard include/config/inline/write/lock.h) \
$(wildcard include/config/inline/read/lock/bh.h) \
$(wildcard include/config/inline/write/lock/bh.h) \
$(wildcard include/config/inline/read/lock/irq.h) \
$(wildcard include/config/inline/write/lock/irq.h) \
$(wildcard include/config/inline/read/lock/irqsave.h) \
$(wildcard include/config/inline/write/lock/irqsave.h) \
$(wildcard include/config/inline/read/trylock.h) \
$(wildcard include/config/inline/write/trylock.h) \
$(wildcard include/config/inline/read/unlock.h) \
$(wildcard include/config/inline/write/unlock.h) \
$(wildcard include/config/inline/read/unlock/bh.h) \
$(wildcard include/config/inline/write/unlock/bh.h) \
$(wildcard include/config/inline/read/unlock/irq.h) \
$(wildcard include/config/inline/write/unlock/irq.h) \
$(wildcard include/config/inline/read/unlock/irqrestore.h) \
$(wildcard include/config/inline/write/unlock/irqrestore.h) \
include/linux/uidgid.h \
$(wildcard include/config/uidgid/strict/type/checks.h) \
$(wildcard include/config/user/ns.h) \
include/linux/highuid.h \
include/linux/kmod.h \
include/linux/gfp.h \
$(wildcard include/config/zone/dma.h) \
$(wildcard include/config/zone/dma32.h) \
$(wildcard include/config/pm/sleep.h) \
$(wildcard include/config/cma.h) \
include/linux/mmzone.h \
$(wildcard include/config/force/max/zoneorder.h) \
$(wildcard include/config/cgroup/mem/res/ctlr.h) \
$(wildcard include/config/memory/hotplug.h) \
$(wildcard include/config/have/memblock/node/map.h) \
$(wildcard include/config/flat/node/mem/map.h) \
$(wildcard include/config/no/bootmem.h) \
$(wildcard include/config/have/memory/present.h) \
$(wildcard include/config/have/memoryless/nodes.h) \
$(wildcard include/config/need/node/memmap/size.h) \
$(wildcard include/config/have/memblock/node.h) \
$(wildcard include/config/need/multiple/nodes.h) \
$(wildcard include/config/have/arch/early/pfn/to/nid.h) \
$(wildcard include/config/sparsemem/extreme.h) \
$(wildcard include/config/have/arch/pfn/valid.h) \
$(wildcard include/config/nodes/span/other/nodes.h) \
$(wildcard include/config/holes/in/zone.h) \
$(wildcard include/config/arch/has/holes/memorymodel.h) \
include/linux/wait.h \
include/linux/numa.h \
$(wildcard include/config/nodes/shift.h) \
include/linux/nodemask.h \
include/linux/pageblock-flags.h \
$(wildcard include/config/hugetlb/page/size/variable.h) \
include/generated/bounds.h \
include/linux/memory_hotplug.h \
$(wildcard include/config/memory/hotremove.h) \
$(wildcard include/config/have/arch/nodedata/extension.h) \
include/linux/notifier.h \
include/linux/mutex.h \
$(wildcard include/config/debug/mutexes.h) \
$(wildcard include/config/have/arch/mutex/cpu/relax.h) \
include/linux/rwsem.h \
$(wildcard include/config/rwsem/generic/spinlock.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwsem.h \
include/linux/srcu.h \
include/linux/rcupdate.h \
$(wildcard include/config/rcu/torture/test.h) \
$(wildcard include/config/tree/rcu.h) \
$(wildcard include/config/tree/preempt/rcu.h) \
$(wildcard include/config/rcu/trace.h) \
$(wildcard include/config/preempt/rcu.h) \
$(wildcard include/config/tiny/rcu.h) \
$(wildcard include/config/tiny/preempt/rcu.h) \
$(wildcard include/config/debug/objects/rcu/head.h) \
$(wildcard include/config/preempt/rt.h) \
include/linux/completion.h \
include/linux/debugobjects.h \
$(wildcard include/config/debug/objects.h) \
$(wildcard include/config/debug/objects/free.h) \
include/linux/rcutree.h \
include/linux/workqueue.h \
$(wildcard include/config/debug/objects/work.h) \
$(wildcard include/config/freezer.h) \
include/linux/timer.h \
$(wildcard include/config/timer/stats.h) \
$(wildcard include/config/debug/objects/timers.h) \
include/linux/ktime.h \
$(wildcard include/config/ktime/scalar.h) \
include/linux/jiffies.h \
include/linux/timex.h \
include/linux/param.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/param.h \
include/asm-generic/param.h \
$(wildcard include/config/hz.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/timex.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/tsc.h \
$(wildcard include/config/x86/tsc.h) \
include/linux/topology.h \
$(wildcard include/config/sched/smt.h) \
$(wildcard include/config/sched/mc.h) \
$(wildcard include/config/sched/book.h) \
$(wildcard include/config/use/percpu/numa/node/id.h) \
include/linux/smp.h \
$(wildcard include/config/use/generic/smp/helpers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/smp.h \
$(wildcard include/config/x86/io/apic.h) \
$(wildcard include/config/x86/32/smp.h) \
$(wildcard include/config/debug/nmi/selftest.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec.h \
$(wildcard include/config/x86/numaq.h) \
$(wildcard include/config/eisa.h) \
$(wildcard include/config/x86/mpparse.h) \
$(wildcard include/config/acpi.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec_def.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/x86_init.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bootparam.h \
include/linux/screen_info.h \
include/linux/apm_bios.h \
include/linux/edd.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/e820.h \
$(wildcard include/config/efi.h) \
$(wildcard include/config/intel/txt.h) \
$(wildcard include/config/hibernation.h) \
$(wildcard include/config/memtest.h) \
include/linux/ioport.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ist.h \
include/video/edid.h \
$(wildcard include/config/x86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apicdef.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apic.h \
$(wildcard include/config/x86/x2apic.h) \
include/linux/pm.h \
$(wildcard include/config/pm.h) \
$(wildcard include/config/pm/runtime.h) \
$(wildcard include/config/pm/clk.h) \
$(wildcard include/config/pm/generic/domains.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/fixmap.h \
$(wildcard include/config/provide/ohci1394/dma/init.h) \
$(wildcard include/config/x86/visws/apic.h) \
$(wildcard include/config/x86/f00f/bug.h) \
$(wildcard include/config/x86/cyclone/timer.h) \
$(wildcard include/config/pci/mmconfig.h) \
$(wildcard include/config/x86/intel/mid.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/acpi.h \
$(wildcard include/config/acpi/numa.h) \
include/acpi/pdc_intel.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa.h \
$(wildcard include/config/numa/emu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/topology.h \
$(wildcard include/config/x86/ht.h) \
include/asm-generic/topology.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mmu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/realmode.h \
$(wildcard include/config/acpi/sleep.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io.h \
$(wildcard include/config/xen.h) \
include/asm-generic/iomap.h \
$(wildcard include/config/has/ioport.h) \
$(wildcard include/config/pci.h) \
$(wildcard include/config/generic/iomap.h) \
include/asm-generic/pci_iomap.h \
$(wildcard include/config/no/generic/pci/ioport/map.h) \
$(wildcard include/config/generic/pci/iomap.h) \
include/linux/vmalloc.h \
$(wildcard include/config/mmu.h) \
include/xen/xen.h \
$(wildcard include/config/xen/dom0.h) \
include/xen/interface/xen.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pvclock-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/hypervisor.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io_apic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irq_vectors.h \
include/linux/percpu.h \
$(wildcard include/config/need/per/cpu/embed/first/chunk.h) \
$(wildcard include/config/need/per/cpu/page/first/chunk.h) \
include/linux/pfn.h \
include/linux/mmdebug.h \
$(wildcard include/config/debug/vm.h) \
include/linux/sysctl.h \
$(wildcard include/config/sysctl.h) \
include/linux/rbtree.h \
include/linux/elf.h \
include/linux/elf-em.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/elf.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/user.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/user_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/auxvec.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vdso.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ldt.h \
include/linux/kobject.h \
include/linux/sysfs.h \
include/linux/kobject_ns.h \
include/linux/kref.h \
include/linux/moduleparam.h \
$(wildcard include/config/alpha.h) \
$(wildcard include/config/ia64.h) \
$(wildcard include/config/ppc64.h) \
include/linux/tracepoint.h \
include/linux/static_key.h \
include/linux/jump_label.h \
$(wildcard include/config/jump/label.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/jump_label.h \
include/linux/export.h \
$(wildcard include/config/symbol/prefix.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/module.h \
$(wildcard include/config/m586.h) \
$(wildcard include/config/m586tsc.h) \
$(wildcard include/config/m586mmx.h) \
$(wildcard include/config/mcore2.h) \
$(wildcard include/config/matom.h) \
$(wildcard include/config/m686.h) \
$(wildcard include/config/mpentiumii.h) \
$(wildcard include/config/mpentiumiii.h) \
$(wildcard include/config/mpentiumm.h) \
$(wildcard include/config/mpentium4.h) \
$(wildcard include/config/mk6.h) \
$(wildcard include/config/mk8.h) \
$(wildcard include/config/melan.h) \
$(wildcard include/config/mcrusoe.h) \
$(wildcard include/config/mefficeon.h) \
$(wildcard include/config/mwinchipc6.h) \
$(wildcard include/config/mwinchip3d.h) \
$(wildcard include/config/mcyrixiii.h) \
$(wildcard include/config/mviac3/2.h) \
$(wildcard include/config/mviac7.h) \
$(wildcard include/config/mgeodegx1.h) \
$(wildcard include/config/mgeode/lx.h) \
include/asm-generic/module.h \
include/linux/sched.h \
$(wildcard include/config/sched/debug.h) \
$(wildcard include/config/no/hz.h) \
$(wildcard include/config/lockup/detector.h) \
$(wildcard include/config/detect/hung/task.h) \
$(wildcard include/config/core/dump/default/elf/headers.h) \
$(wildcard include/config/sched/autogroup.h) \
$(wildcard include/config/virt/cpu/accounting.h) \
$(wildcard include/config/bsd/process/acct.h) \
$(wildcard include/config/taskstats.h) \
$(wildcard include/config/audit.h) \
$(wildcard include/config/cgroups.h) \
$(wildcard include/config/inotify/user.h) \
$(wildcard include/config/fanotify.h) \
$(wildcard include/config/epoll.h) \
$(wildcard include/config/posix/mqueue.h) \
$(wildcard include/config/keys.h) \
$(wildcard include/config/perf/events.h) \
$(wildcard include/config/schedstats.h) \
$(wildcard include/config/task/delay/acct.h) \
$(wildcard include/config/fair/group/sched.h) \
$(wildcard include/config/rt/group/sched.h) \
$(wildcard include/config/cgroup/sched.h) \
$(wildcard include/config/blk/dev/io/trace.h) \
$(wildcard include/config/rcu/boost.h) \
$(wildcard include/config/compat/brk.h) \
$(wildcard include/config/sysvipc.h) \
$(wildcard include/config/auditsyscall.h) \
$(wildcard include/config/rt/mutexes.h) \
$(wildcard include/config/block.h) \
$(wildcard include/config/task/xacct.h) \
$(wildcard include/config/cpusets.h) \
$(wildcard include/config/futex.h) \
$(wildcard include/config/fault/injection.h) \
$(wildcard include/config/latencytop.h) \
$(wildcard include/config/function/graph/tracer.h) \
$(wildcard include/config/have/hw/breakpoint.h) \
$(wildcard include/config/uprobes.h) \
$(wildcard include/config/have/unstable/sched/clock.h) \
$(wildcard include/config/irq/time/accounting.h) \
$(wildcard include/config/cfs/bandwidth.h) \
$(wildcard include/config/stack/growsup.h) \
$(wildcard include/config/mm/owner.h) \
include/linux/capability.h \
include/linux/mm_types.h \
$(wildcard include/config/split/ptlock/cpus.h) \
$(wildcard include/config/have/cmpxchg/double.h) \
$(wildcard include/config/have/aligned/struct/page.h) \
$(wildcard include/config/want/page/debug/flags.h) \
$(wildcard include/config/aio.h) \
$(wildcard include/config/mmu/notifier.h) \
include/linux/auxvec.h \
include/linux/prio_tree.h \
include/linux/page-debug-flags.h \
$(wildcard include/config/page/poisoning.h) \
$(wildcard include/config/page/guard.h) \
$(wildcard include/config/page/debug/something/else.h) \
include/linux/uprobes.h \
$(wildcard include/config/arch/supports/uprobes.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uprobes.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cputime.h \
include/asm-generic/cputime.h \
include/linux/sem.h \
include/linux/ipc.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ipcbuf.h \
include/asm-generic/ipcbuf.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sembuf.h \
include/linux/signal.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/signal.h \
include/asm-generic/signal-defs.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/siginfo.h \
include/asm-generic/siginfo.h \
include/linux/pid.h \
include/linux/proportions.h \
include/linux/percpu_counter.h \
include/linux/seccomp.h \
$(wildcard include/config/seccomp.h) \
$(wildcard include/config/seccomp/filter.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/seccomp.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/seccomp_32.h \
include/linux/unistd.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/unistd.h \
$(wildcard include/config/x86/x32/abi.h) \
arch/x86/include/generated/asm/unistd_32.h \
include/linux/rculist.h \
include/linux/rtmutex.h \
$(wildcard include/config/debug/rt/mutexes.h) \
include/linux/plist.h \
$(wildcard include/config/debug/pi/list.h) \
include/linux/resource.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/resource.h \
include/asm-generic/resource.h \
include/linux/hrtimer.h \
$(wildcard include/config/high/res/timers.h) \
$(wildcard include/config/timerfd.h) \
include/linux/timerqueue.h \
include/linux/task_io_accounting.h \
$(wildcard include/config/task/io/accounting.h) \
include/linux/latencytop.h \
include/linux/cred.h \
$(wildcard include/config/debug/credentials.h) \
$(wildcard include/config/security.h) \
include/linux/key.h \
include/linux/selinux.h \
$(wildcard include/config/security/selinux.h) \
include/linux/llist.h \
$(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \
include/linux/aio.h \
include/linux/aio_abi.h \
include/linux/uio.h \
include/linux/proc_fs.h \
$(wildcard include/config/proc/devicetree.h) \
$(wildcard include/config/proc/kcore.h) \
include/linux/slab.h \
$(wildcard include/config/slab/debug.h) \
$(wildcard include/config/failslab.h) \
$(wildcard include/config/slub.h) \
$(wildcard include/config/slob.h) \
$(wildcard include/config/debug/slab.h) \
$(wildcard include/config/slab.h) \
include/linux/slub_def.h \
$(wildcard include/config/slub/stats.h) \
$(wildcard include/config/slub/debug.h) \
include/linux/kmemleak.h \
$(wildcard include/config/debug/kmemleak.h) \
include/linux/fs.h \
$(wildcard include/config/fs/posix/acl.h) \
$(wildcard include/config/quota.h) \
$(wildcard include/config/fsnotify.h) \
$(wildcard include/config/ima.h) \
$(wildcard include/config/debug/writecount.h) \
$(wildcard include/config/file/locking.h) \
$(wildcard include/config/fs/xip.h) \
$(wildcard include/config/migration.h) \
include/linux/limits.h \
include/linux/blk_types.h \
$(wildcard include/config/blk/cgroup.h) \
$(wildcard include/config/blk/dev/integrity.h) \
include/linux/kdev_t.h \
include/linux/dcache.h \
include/linux/rculist_bl.h \
include/linux/list_bl.h \
include/linux/bit_spinlock.h \
include/linux/path.h \
include/linux/radix-tree.h \
include/linux/semaphore.h \
include/linux/fiemap.h \
include/linux/shrinker.h \
include/linux/migrate_mode.h \
include/linux/quota.h \
$(wildcard include/config/quota/netlink/interface.h) \
include/linux/dqblk_xfs.h \
include/linux/dqblk_v1.h \
include/linux/dqblk_v2.h \
include/linux/dqblk_qtree.h \
include/linux/nfs_fs_i.h \
include/linux/fcntl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/fcntl.h \
include/asm-generic/fcntl.h \
include/linux/magic.h \
include/linux/pci.h \
$(wildcard include/config/pci/iov.h) \
$(wildcard include/config/pcieaspm.h) \
$(wildcard include/config/pci/msi.h) \
$(wildcard include/config/pci/ats.h) \
$(wildcard include/config/pcieportbus.h) \
$(wildcard include/config/pcieaer.h) \
$(wildcard include/config/pcie/ecrc.h) \
$(wildcard include/config/ht/irq.h) \
$(wildcard include/config/pci/domains.h) \
$(wildcard include/config/pci/quirks.h) \
$(wildcard include/config/hotplug/pci.h) \
$(wildcard include/config/of.h) \
$(wildcard include/config/eeh.h) \
include/linux/pci_regs.h \
include/linux/mod_devicetable.h \
include/linux/device.h \
$(wildcard include/config/debug/devres.h) \
$(wildcard include/config/devtmpfs.h) \
$(wildcard include/config/sysfs/deprecated.h) \
include/linux/klist.h \
include/linux/ratelimit.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/device.h \
$(wildcard include/config/x86/dev/dma/ops.h) \
$(wildcard include/config/intel/iommu.h) \
$(wildcard include/config/amd/iommu.h) \
include/linux/pm_wakeup.h \
include/linux/io.h \
include/linux/irqreturn.h \
include/linux/pci_ids.h \
include/linux/pci-dma.h \
include/linux/dmapool.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/scatterlist.h \
include/asm-generic/scatterlist.h \
$(wildcard include/config/debug/sg.h) \
$(wildcard include/config/need/sg/dma/length.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pci.h \
include/linux/mm.h \
$(wildcard include/config/ksm.h) \
$(wildcard include/config/debug/pagealloc.h) \
$(wildcard include/config/hugetlbfs.h) \
include/linux/debug_locks.h \
$(wildcard include/config/debug/locking/api/selftests.h) \
include/linux/range.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32.h \
$(wildcard include/config/highpte.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level.h \
include/asm-generic/pgtable.h \
include/linux/page-flags.h \
$(wildcard include/config/pageflags/extended.h) \
$(wildcard include/config/arch/uses/pg/uncached.h) \
$(wildcard include/config/memory/failure.h) \
$(wildcard include/config/swap.h) \
$(wildcard include/config/s390.h) \
include/linux/huge_mm.h \
include/linux/vmstat.h \
$(wildcard include/config/vm/event/counters.h) \
include/linux/vm_event_item.h \
include/asm-generic/pci-dma-compat.h \
include/linux/dma-mapping.h \
$(wildcard include/config/has/dma.h) \
$(wildcard include/config/arch/has/dma/set/coherent/mask.h) \
$(wildcard include/config/have/dma/attrs.h) \
$(wildcard include/config/need/dma/map/state.h) \
include/linux/dma-attrs.h \
include/linux/dma-direction.h \
include/linux/scatterlist.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/dma-mapping.h \
$(wildcard include/config/isa.h) \
$(wildcard include/config/x86/dma/remap.h) \
include/linux/kmemcheck.h \
include/linux/dma-debug.h \
$(wildcard include/config/dma/api/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swiotlb.h \
$(wildcard include/config/swiotlb.h) \
include/linux/swiotlb.h \
include/asm-generic/dma-coherent.h \
$(wildcard include/config/have/generic/dma/coherent.h) \
include/linux/dma-contiguous.h \
$(wildcard include/config/cma/areas.h) \
include/asm-generic/dma-mapping-common.h \
include/asm-generic/pci.h \
include/linux/interrupt.h \
$(wildcard include/config/generic/hardirqs.h) \
$(wildcard include/config/irq/forced/threading.h) \
$(wildcard include/config/generic/irq/probe.h) \
include/linux/irqnr.h \
include/linux/hardirq.h \
include/linux/ftrace_irq.h \
$(wildcard include/config/ftrace/nmi/enter.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/hardirq.h \
$(wildcard include/config/x86/thermal/vector.h) \
$(wildcard include/config/x86/mce/threshold.h) \
include/linux/irq.h \
$(wildcard include/config/generic/pending/irq.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irq.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irq_regs.h \
include/linux/irqdesc.h \
$(wildcard include/config/irq/preflow/fasteoi.h) \
$(wildcard include/config/sparse/irq.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/hw_irq.h \
$(wildcard include/config/irq/remap.h) \
include/linux/profile.h \
$(wildcard include/config/profiling.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sections.h \
$(wildcard include/config/debug/rodata.h) \
include/asm-generic/sections.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uaccess.h \
$(wildcard include/config/x86/wp/works/ok.h) \
$(wildcard include/config/x86/intel/usercopy.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uaccess_32.h \
$(wildcard include/config/debug/strict/user/copy/checks.h) \
/home/f9daq/pcivme-3.2/driver/./askpci.h \
/home/f9daq/pcivme-3.2/driver/./main.h \
/home/f9daq/pcivme-3.2/driver/./plxbug.h \
/home/f9daq/pcivme-3.2/driver/./plx9050.h \
/home/f9daq/pcivme-3.2/driver/./fops.h \
/home/f9daq/pcivme-3.2/driver/./pcivme.h \
/home/f9daq/pcivme-3.2/driver/./pciif.h \
/home/f9daq/pcivme-3.2/driver/./vic.h \
 
/home/f9daq/pcivme-3.2/driver/./main.o: $(deps_/home/f9daq/pcivme-3.2/driver/./main.o)
 
$(deps_/home/f9daq/pcivme-3.2/driver/./main.o):
/pcivme-3.2/driver/README.changes
0,0 → 1,96
diff -r pcivme-3.2/driver/askpci.c pcivme-3.2-rok/driver/askpci.c
53c53
< #include <common.h> /* must be the first include */
---
> #include "common.h" /* must be the first include */
57c57
< #include <askpci.h>
---
> #include "askpci.h"
diff -r pcivme-3.2/driver/askpci.h pcivme-3.2-rok/driver/askpci.h
57c57
< #include <main.h>
---
> #include "main.h"
diff -r pcivme-3.2/driver/fops.c pcivme-3.2-rok/driver/fops.c
58c58
< #include <common.h> /* must be the first include */
---
> #include "common.h" /* must be the first include */
68,75c68,75
< #include <fops.h>
< #include <plx9050.h>
< #include <pcivme.h> /* the common ioctl commands and structures between driver and application */
< #include <main.h>
< #include <askpci.h>
< #include <pciif.h>
< #include <vic.h>
< #include <vme.h>
---
> #include "fops.h"
> #include "plx9050.h"
> #include "pcivme.h" /* the common ioctl commands and structures between driver and application */
> #include "main.h"
> #include "askpci.h"
> #include "pciif.h"
> #include "vic.h"
> #include "vme.h"
diff -r pcivme-3.2/driver/main.c pcivme-3.2-rok/driver/main.c
60c60
< #include <common.h> /* must be the first include */
---
> #include "common.h" /* must be the first include */
72,79c72,79
< #include <askpci.h>
< #include <plxbug.h>
< #include <plx9050.h>
< #include <fops.h>
< #include <pcivme.h>
< #include <pciif.h>
< #include <vic.h>
< #include <main.h>
---
> #include "askpci.h"
> #include "plxbug.h"
> #include "plx9050.h"
> #include "fops.h"
> #include "pcivme.h"
> #include "pciif.h"
> #include "vic.h"
> #include "main.h"
515c515
< if (request_irq(pd->pPch->pciDev->irq, pcivme_irqhandler, SA_INTERRUPT | SA_SHIRQ, DEVICE_NAME, pd))
---
> if (request_irq(pd->pPch->pciDev->irq, pcivme_irqhandler, IRQF_DISABLED| IRQF_SHARED, DEVICE_NAME, pd))
diff -r pcivme-3.2/driver/Makefile pcivme-3.2-rok/driver/Makefile
43a44
> EXTRA_CFLAGS := -I.
64c65
< VERSION := $(shell cpp -dM -I$(KERNEL_LOCATION)/include $(KERNEL_LOCATION)/include/linux/version.h \
---
> VERSION := $(shell cpp -dM -I$(KERNEL_LOCATION)/include $(KERNEL_LOCATION)/include/linux/utsrelease.h \
Only in pcivme-3.2-rok/driver/: Module.symvers
diff -r pcivme-3.2/driver/pciif.h pcivme-3.2-rok/driver/pciif.h
51c51
< #include <vic.h>
---
> #include "vic.h"
Only in pcivme-3.2-rok/driver/: pcivme.mod.c
diff -r pcivme-3.2/driver/plxbug.c pcivme-3.2-rok/driver/plxbug.c
48c48
< #include <common.h> /* must be the first include */
---
> #include "common.h" /* must be the first include */
51,52c51,52
< #include <plxbug.h>
< #include <main.h>
---
> #include "plxbug.h"
> #include "main.h"
diff -r pcivme-3.2/driver/plxbug.h pcivme-3.2-rok/driver/plxbug.h
51c51
< #include <askpci.h>
---
> #include "askpci.h"
Only in pcivme-3.2-rok/driver/: README.changes
Only in pcivme-3.2-rok/driver/: .tmp_versions
/pcivme-3.2/driver/main.c
0,0 → 1,618
//****************************************************************************
// Copyright (C) 2000-2006 ARW Elektronik Germany
//
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU 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)
//
//****************************************************************************
 
//****************************************************************************
//
// main.c -- the main driver module for the PCIVME PCI to VME Interface
// Thanks to A.Rubini's Book and Dirk Muelhlenberg and H.J.Mathes
// for their arwvme driver
//
// $Log: main.c,v $
// Revision 1.10 2006/06/04 12:20:46 klaus
// release_20060604; Version 3.2; pci_{en|dis}able_device() added
//
// Revision 1.9 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.8 2003/06/27 17:25:52 klaus
// incomplete try to get mmap() with nopage() running for automatic page switch
//
// Revision 1.7 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.6 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.5 2002/10/17 19:05:03 klaus
// VME access is working through test to lib to driver
//
//****************************************************************************
#define NOPAGE_SIGBUS (NULL)
 
#define VERSION_HI 3
#define VERSION_LO 2
 
/*--- INCLUDES ---------------------------------------------------------------------------*/
#include "common.h" /* must be the first include */
#include <linux/module.h>
 
#include <linux/sched.h>
#include <linux/proc_fs.h>
#include <linux/pci.h>
#include <asm/types.h>
#include <linux/mm.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
#include <linux/interrupt.h>
#endif
 
#include "askpci.h"
#include "plxbug.h"
#include "plx9050.h"
#include "fops.h"
#include "pcivme.h"
#include "pciif.h"
#include "vic.h"
#include "main.h"
 
/*--- DEFINES -----------------------------------------------------------------------------*/
MODULE_AUTHOR("klaus.hitschler@gmx.de");
MODULE_DESCRIPTION("Driver for ARW Elektronik PCI VME interface.");
MODULE_SUPPORTED_DEVICE("PCIVME");
MODULE_LICENSE("GPL");
 
#define MAJOR_NO 0 /* use dynamic assignment */
 
#define PCIVME_VENDOR_ID 0x10B5
#define PCIVME_DEVICE_ID 0x9050
#define PCIVME_SUBSYS_ID 0x1167
#define PCIVME_SUBVEN_ID 0x9050
 
/*--- TYPEDEFS ----------------------------------------------------------------------------*/
 
/*--- GLOBALS -----------------------------------------------------------------------------*/
DRIVER_OBJ drv;
 
/*--- LOCALS ------------------------------------------------------------------------------*/
 
/*--- FUNCTIONS ---------------------------------------------------------------------------*/
static int my_interrupt(u16 intCSR)
{
int result = NOT_MY_INTERRUPT;
 
if (intCSR & 0x0040) // it is global enabled
{
if ((intCSR & 0x0028) == 0x0028) // it is a enabled PCIADA interrupt
result = PCIADA_INTERRUPT;
else
if ((intCSR & 0x0005) == 0x0005) // it is a enabled VMEMM interrupt
result = VMEMM_INTERRUPT;
}
 
return result;
}
 
static irqreturn_t pcivme_irqhandler(int irq, void *dev_id, struct pt_regs *regs)
{
DEVICE_OBJ *pd = (DEVICE_OBJ *)dev_id;
 
if (pd)
{
// evaluate the reason of the interrupt - if it is mine
u16 intCSR = readw((const volatile void *) (pd->pPCIADAIntCSR));
int which_interrupt = my_interrupt(intCSR);
 
if (which_interrupt)
{
writew(intCSR & ~0x40, (volatile void *) pd->pPCIADAIntCSR); /* disable global interrupts */
pd->wIrqStatus = (u16)which_interrupt;
pd->dwInterruptCount++;
wake_up_interruptible(&pd->event_queue); /* stop blocking if any */
return IRQ_RETVAL(1);
}
}
return IRQ_RETVAL(0);
}
 
static int request_io_memory(PCIConfig *pPch)
{
if (check_mem_region(pci_resource_start(pPch->pciDev, 0), LCR_SPACE))
{
PRINTK(KERN_DEBUG "%s : LCR 0x%08lx\n", DEVICE_NAME, pci_resource_start(pPch->pciDev, 0));
return -EBUSY;
}
 
if (check_mem_region(pci_resource_start(pPch->pciDev, 2), CTL_SPACE))
{
PRINTK(KERN_DEBUG "%s : CTL 0x%08lx\n", DEVICE_NAME, pci_resource_start(pPch->pciDev, 2));
return -EBUSY;
}
 
if (check_mem_region(pci_resource_start(pPch->pciDev, 2) + CTL_SPACE, VME_SPACE))
{
PRINTK(KERN_DEBUG "%s : VME 0x%08lx\n", DEVICE_NAME, pci_resource_start(pPch->pciDev, 2) + CTL_SPACE);
return -EBUSY;
}
 
request_mem_region(pci_resource_start(pPch->pciDev, 0), LCR_SPACE, DEVICE_NAME);
request_mem_region(pci_resource_start(pPch->pciDev, 2), CTL_SPACE, DEVICE_NAME);
request_mem_region(pci_resource_start(pPch->pciDev, 2) + CTL_SPACE, VME_SPACE, DEVICE_NAME);
 
return 0;
}
 
static void release_io_memory(PCIConfig *pPch)
{
release_mem_region(pci_resource_start(pPch->pciDev, 0), LCR_SPACE);
release_mem_region(pci_resource_start(pPch->pciDev, 2), CTL_SPACE);
release_mem_region(pci_resource_start(pPch->pciDev, 2) + CTL_SPACE, VME_SPACE);
}
 
static int translate_addresses(DEVICE_OBJ *pd, PCIConfig *pPch) /* differs from PCICC32 */
{
if (pci_resource_start(pPch->pciDev, 0) < LOW_MEMORY) /* LCR ISA base addresses */
pd->pLCR = (u32)bus_to_virt(pci_resource_start(pPch->pciDev, 0));
else
pd->pLCR = (u32)ioremap(pci_resource_start(pPch->pciDev, 0), LCR_SPACE);
 
if (pci_resource_start(pPch->pciDev, 2) < LOW_MEMORY) /* User ISA base addresses */
{
pd->pCtl = (u32)bus_to_virt(pci_resource_start(pPch->pciDev, 2) );
pd->pVME = (u32)bus_to_virt(pci_resource_start(pPch->pciDev, 2) + CTL_SPACE);
}
else
{
pd->pPhysVME = pci_resource_start(pPch->pciDev, 2) + CTL_SPACE;
 
pd->pCtl = (u32)ioremap(pci_resource_start(pPch->pciDev, 2) , CTL_SPACE);
pd->pVME = (u32)ioremap(pci_resource_start(pPch->pciDev, 2) + CTL_SPACE, VME_SPACE);
}
 
return 0;
}
 
static void un_translate_addresses(DEVICE_OBJ *pd, PCIConfig *pPch)
{
if (pci_resource_start(pPch->pciDev, 0) >= LOW_MEMORY) /* no LCR ISA base addresses */
iounmap((void *)pd->pLCR);
 
if (pci_resource_start(pPch->pciDev, 2) >= LOW_MEMORY)
{
pd->pPhysVME = 0;
 
iounmap((void *)pd->pCtl);
iounmap((void *)pd->pVME);
}
}
 
static void soft_init(DEVICE_OBJ *pd)
{
if (pd)
{
init_waitqueue_head(&pd->event_queue);
 
pd->pLCR = pd->pCtl = pd->pVME = 0;
pd->pPch = (PCIConfig *)NULL;
pd->bConnected = 0;
pd->wInitStep = 0;
pd->wIrq = 0xFFFF;
pd->dwInterruptCount = 0;
pd->wIrqStatus = 0;
pd->nOpenCounter = 0;
 
pd->cModuleNumber = 255;
pd->cFPGAVersion = 255;
pd->cSystemController = 0;
pd->cWordMode = 0;
 
pd->pAdrMod = 0;
pd->pAdrReg = 0;
pd->pCSR = 0;
 
pd->pPCIADACntrl = 0;
pd->pPCIADAIntCSR = 0;
 
pd->bCurrentModifier = 0;
pd->dwCurrentPageAddress = -1;
pd->currentMap.pageptr = NOPAGE_SIGBUS;
pd->currentMap.addr = 0;
}
}
 
int test_connection(DEVICE_OBJ *pd)
{
u16 intCSR_store;
u16 cntrl_store;
int i;
int error = 0;
u32 dwADRH = pd->pCtl + ADRH;
u32 dwADRL = pd->pCtl + ADRL;
u32 dwADRHL = pd->pCtl + ADRHL;
u32 dwStore;
u16 wRet;
 
cntrl_store = readw((const volatile void *) pd->pPCIADACntrl); /* read CONTROL register */
intCSR_store = readw((const volatile void *) pd->pPCIADAIntCSR); /* read interrupt + CSR register */
 
writew(0, (volatile void *) pd->pPCIADAIntCSR); /* disable interrupts */
writew(cntrl_store | 0x0180, (volatile void *) pd->pPCIADACntrl); /* enable access */
 
// save adr register
dwStore = readl((const volatile void *) dwADRHL);
for (i = 1000; i; i--)
{
writew(0x5555, (volatile void *) dwADRH);
writew(0xAAAA, (volatile void *) dwADRL);
wRet = readw((const volatile void *) dwADRH);
if (wRet != 0x5555)
{
error = 1;
break;
}
 
writew(0xAAAA, (volatile void *) dwADRH);
writew(0x5555, (volatile void *) dwADRL);
wRet = readw((const volatile void *) dwADRH);
if (wRet != 0xAAAA)
{
error = 1;
break;
}
 
writew(0x0000, (volatile void *) dwADRH);
writew(0xFFFF, (volatile void *) dwADRL);
wRet = readw((const volatile void *) dwADRH);
if (wRet != 0x0000)
{
error = 1;
break;
}
 
writew(0xFFFF, (volatile void *) dwADRH);
writew(0x0000, (volatile void *) dwADRL);
wRet = readw((const volatile void *) dwADRH);
if (wRet != 0xFFFF)
{
error = 1;
break;
}
}
 
// restore register
writel(dwStore, (volatile void *) dwADRHL);
 
//clear possible interrupts
writew(cntrl_store & ~0x0100, (volatile void *) pd->pPCIADACntrl); /* clear potential interrupt */
 
// restore LCR registers
writew(cntrl_store, (volatile void *) pd->pPCIADACntrl);
writew(intCSR_store, (volatile void *) pd->pPCIADAIntCSR);
 
return error;
}
 
int get_module_info(DEVICE_OBJ *pd)
{
u16 intCSR_store;
u16 cntrl_store;
int found = 0;
u16 data;
 
cntrl_store = readw((const volatile void *) pd->pPCIADACntrl); /* read CONTROL register */
intCSR_store = readw((const volatile void *) pd->pPCIADAIntCSR); /* read interrupt + CSR register */
 
PRINTK(KERN_DEBUG "%s : cntrl=0x%04x, intCSR=0x%04x\n", DEVICE_NAME, cntrl_store, intCSR_store);
 
if (cntrl_store & 0x0800) /* a VMEMM is connected */
{
u16 bla = cntrl_store | 0x0180;
 
writew(0, (volatile void *) pd->pPCIADAIntCSR); /* disable interrupts */
writew(bla, (volatile void *) pd->pPCIADACntrl); /* enable access */
 
// read main status register
data = readw((const volatile void *) pd->pCSR);
 
if ((data & 0xF000) != VMEMM_MODULE_TYPE)
{
pd->cModuleNumber = pd->cFPGAVersion = 255;
printk(KERN_ERR "%s : Wrong module type connected @ index %d!\n", DEVICE_NAME, pd->wIndex);
}
else
{
found = 1;
pd->cModuleNumber = (data >> 4) & 0xF;
pd->cFPGAVersion = (data >> 8) & 0xF;
pd->cSystemController = (data & 0x0008);
pd->cWordMode = (data & 0x0004);
}
 
// clear possible interrupts
writew(cntrl_store & ~0x0100, (volatile void *) pd->pPCIADACntrl); /* clear potential interrupt */
 
/* restore all contents */
writew(cntrl_store, (volatile void *) pd->pPCIADACntrl);
writew(intCSR_store, (volatile void *) pd->pPCIADAIntCSR);
}
 
return found;
}
 
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
static int pcivme_read_proc(char *buf, char **start, off_t offset, int len)
#else
static int pcivme_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *data)
#endif
{
int pos = 0;
DEVICE_OBJ *pd;
PCIConfig *ch;
u16 cntrl;
char *cause = "none";
struct list_head *ptr;
 
pos += sprintf(buf + pos, "\nPCIVME information. Version %d.%d of %s from Klaus Hitschler.\n", VERSION_HI, VERSION_LO, __DATE__);
 
pos += sprintf(buf + pos, " ---------------------\n");
pos += sprintf(buf + pos, " Interfaces found : %d\n", drv.count);
pos += sprintf(buf + pos, " Major Number : %d\n", drv.nMajor);
 
for (ptr = drv.devList.next; ptr != &drv.devList; ptr = ptr->next)
{
pd = list_entry(ptr, DEVICE_OBJ, list);
ch = pd->pPch;
cntrl = readw((const volatile void *)(pd->pLCR + PLX9050_CNTRL));
pos += sprintf(buf + pos, " --- %d ---------------\n", pd->wIndex + 1);
pos += sprintf(buf + pos, " LCR phys/virt/size : 0x%08lx/0x%08x/%d\n",(long unsigned int) pci_resource_start(ch->pciDev, 0), pd->pLCR, LCR_SPACE);
pos += sprintf(buf + pos, " Control phys/virt/size : 0x%08lx/0x%08x/%d\n",(long unsigned int) pci_resource_start(ch->pciDev, 2), pd->pCtl, CTL_SPACE);
pos += sprintf(buf + pos, " VME phys/virt/size : 0x%08lx/0x%08x/%d\n",(long unsigned int) pci_resource_start(ch->pciDev, 2) + CTL_SPACE, pd->pVME, VME_SPACE);
pos += sprintf(buf + pos, " Irq : %d\n", pd->wIrq);
 
if (pd->bConnected)
{
pos += sprintf(buf + pos, " VMEMM is or was : (software) connected.\n");
pos += sprintf(buf + pos, " Module-Number : %d\n", pd->cModuleNumber);
pos += sprintf(buf + pos, " FPGA-Version : %d\n", pd->cFPGAVersion);
pos += sprintf(buf + pos, " Systemcontroller : %s\n", (pd->cSystemController) ? "yes" : "no");
pos += sprintf(buf + pos, " Word Mode : %s\n", (pd->cWordMode) ? "yes" : "no");
}
else
pos += sprintf(buf + pos, " VMEMM is or was : not (software) connected.\n");
 
if (!((cntrl & 0x0800) && (!(cntrl & 0x0600))))
pos += sprintf(buf + pos, " VMEMM is : powered off or cable disconnected.\n");
 
pos += sprintf(buf + pos, " IrqCount : %d\n", pd->dwInterruptCount);
if (pd->wIrqStatus & PCIADA_INTERRUPT)
cause = "Timeout";
else
if (pd->wIrqStatus & VMEMM_INTERRUPT)
cause = "VME";
pos += sprintf(buf + pos, " Pending IrqStatus : %s\n", cause);
}
 
pos += sprintf(buf + pos, "\n");
 
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)
*eof = 1;
#endif
 
return pos;
}
 
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
struct proc_dir_entry pcimod_proc_entry =
{
namelen: 7, /* len of name */
name: DEVICE_NAME, /* entry name */
mode: S_IFREG | S_IRUGO, /* mode */
nlink: 1, /* nlinks */
get_info: pcivme_read_proc, /* function used to read data */
};
#endif
 
static void deleteMyLists(void)
{
DEVICE_OBJ *pd;
 
/* delete my lists */
while (!list_empty(&drv.devList)) // cycle through the list of pci devices and remove them
{
pd = (DEVICE_OBJ *)drv.devList.prev; // empty in reverse order
list_del(&pd->list);
kfree(pd);
}
 
DeletePCIConfig(&drv);
}
 
int init_module(void)
{
PCIConfig *ch;
DEVICE_OBJ *pd;
int result = 0;
struct list_head *ptr;
 
PRINTK(KERN_DEBUG "%s : init_module\n", DEVICE_NAME);
 
/* create list of PCIADAs and work devices */
INIT_LIST_HEAD(&drv.devList);
INIT_LIST_HEAD(&drv.pciList);
 
drv.count = 0;
 
/* search for all PCIADA modules */
if ((result = GetPCIConfig(&drv, PCIVME_DEVICE_ID, PCIVME_VENDOR_ID, PCIVME_SUBSYS_ID, PCIVME_SUBVEN_ID)))
{
deleteMyLists();
return result;
}
 
/* fix the PLX bug in all PCIADAs */
for (ptr = drv.pciList.next; ptr != &drv.pciList; ptr = ptr->next)
{
ch = list_entry(ptr, PCIConfig, list);
PLX9050BugFix(ch);
}
 
/* create work_devices and translate the access addresses */
for (ptr = drv.pciList.next; ptr != &drv.pciList; ptr = ptr->next)
{
ch = list_entry(ptr, PCIConfig, list);
 
pd = (DEVICE_OBJ *)kmalloc(sizeof(DEVICE_OBJ), GFP_ATOMIC);
soft_init(pd);
pd->pPch = ch;
pd->wIndex = drv.count;
 
if (!request_io_memory(ch))
{
pd->wInitStep = 1;
 
if (translate_addresses(pd, ch))
{
printk(KERN_ERR "%s : translation of addresses failed!\n", DEVICE_NAME);
kfree_s(pd, sizeof(*pd)); // FREE(pd);
}
else
{
// successful translate_addresses
pd->wInitStep = 2;
 
// create some 'fast access' addresses
pd->pAdrMod = pd->pCtl + VICBASE + AMSR;
pd->pAdrReg = pd->pCtl + ADRHL;
pd->pCSR = pd->pCtl + CSR;
 
pd->pPCIADACntrl = pd->pLCR + PLX9050_CNTRL;
pd->pPCIADAIntCSR = pd->pLCR + PLX9050_INTCSR;
 
if (request_irq(pd->pPch->pciDev->irq, pcivme_irqhandler, IRQF_DISABLED| IRQF_SHARED, DEVICE_NAME, pd))
{
printk(KERN_ERR "%s : can't get irq @ %d\n", DEVICE_NAME, pd->pPch->pciDev->irq);
kfree_s(pd, sizeof(*pd)); // FREE(pd);
}
else
{
// successful request_irq
pd->wInitStep = 3;
pd->wIrq = pd->pPch->pciDev->irq;
 
list_add_tail(&pd->list, &drv.devList); /* add this device to list of working devices*/
drv.count++;
 
pd->bConnected = get_module_info(pd);
if (pd->bConnected && test_connection(pd))
{
printk(KERN_ERR "%s : connection test @ driver install failed!\n", DEVICE_NAME);
pd->bConnected = 0;
}
}
}
}
else
printk(KERN_ERR "%s : requested io-memory still claimed!\n", DEVICE_NAME);
}
 
drv.nMajor = MAJOR_NO;
result = register_chrdev(drv.nMajor, DEVICE_NAME, &pcivme_fops);
if (result < 0)
{
printk(KERN_ERR "%s: Can't install driver (%d)\n", DEVICE_NAME, result);
 
/* untranslate translated addresses */
for (ptr = drv.devList.next; ptr != &drv.devList; ptr = ptr->next)
{
pd = list_entry(ptr, DEVICE_OBJ, list);
ch = pd->pPch;
un_translate_addresses(pd, ch);
}
 
/* delete my lists */
deleteMyLists();
 
return result;
}
else
{
if (drv.nMajor == 0)
drv.nMajor = result;
 
printk(KERN_DEBUG "%s : major #%d assigned.\n", DEVICE_NAME, drv.nMajor);
}
 
/* register the proc device */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
proc_register_dynamic(&proc_root, &pcimod_proc_entry);
 
return 0;
#else
return create_proc_read_entry(DEVICE_NAME, 0, NULL, pcivme_read_proc, NULL) ? 0 : -ENODEV;
#endif
}
 
void cleanup_module(void)
{
PCIConfig *ch;
DEVICE_OBJ *pd;
struct list_head *ptr;
 
PRINTK(KERN_DEBUG "%s : cleanup_module.\n", DEVICE_NAME);
 
unregister_chrdev(drv.nMajor, DEVICE_NAME);
 
/* unregister the proc device */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
proc_unregister(&proc_root, pcimod_proc_entry.low_ino);
#else
remove_proc_entry(DEVICE_NAME, NULL);
#endif
 
/* redo all */
for (ptr = drv.devList.next; ptr != &drv.devList; ptr = ptr->next)
{
pd = list_entry(ptr, DEVICE_OBJ, list);
ch = pd->pPch;
switch (pd->wInitStep)
{
case 3: writew(readw((const volatile void *)(pd->pLCR + PLX9050_INTCSR)) & ~0x40, (volatile void *) (pd->pLCR + PLX9050_INTCSR)); // disable global interrupts
free_irq(pd->wIrq, pd);
case 2: un_translate_addresses(pd, ch);
case 1: release_io_memory(ch);
default: pd->wInitStep = 0;
}
 
drv.count--;
}
 
deleteMyLists();
 
return;
}
 
/pcivme-3.2/driver/.tmp_versions/pcivme.mod
0,0 → 1,2
/home/f9daq/pcivme-3.2/driver/pcivme.ko
/home/f9daq/pcivme-3.2/driver/./main.o /home/f9daq/pcivme-3.2/driver/./askpci.o /home/f9daq/pcivme-3.2/driver/./plxbug.o /home/f9daq/pcivme-3.2/driver/./fops.o
/pcivme-3.2/driver/plx9050.h
0,0 → 1,156
#ifndef __PLX9050_H__
#define __PLX9050_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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// plx9050.h - Include header for the PCIbus target
// interface chip PLX9050 from PLX Technology (www.plxtech.com)
//
// $Log: plx9050.h,v $
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
// derived from original code from Dirk Muehlenberg and ? Mathes AR 18.02.2000
//
//****************************************************************************
 
#include <asm/io.h>
 
/*
* defining the offsets from PCI CFG Register Area
* (PCI registers, only accessible during a configuration 0 cycle)
*/
/* 15:0 VendorId | 31:16 DeviceId */
#define PLX9050_PCIIDR 0x0
 
#define PLX9050_PCICR 0x4
#define PLX9050_PCISR 0x6
#define PLX9050_PCIREV 0x8
#define PLX9050_PCICCR 0xB
#define PLX9050_PCICLSR 0xC
#define PLX9050_PCILTR 0xD
#define PLX9050_PCIHTR 0xE
#define PLX9050_PCIBISTR 0xF
/*
** PCI Base Address Register
*/
#define PLX9050_PCIBAR0 0x10
#define PLX9050_PCIBAR1 0x14
#define PLX9050_PCIBAR2 0x18
#define PLX9050_PCIBAR3 0x1C
#define PLX9050_PCIBAR4 0x20
#define PLX9050_PCIBAR5 0x24
 
#define PLX9050_PCICIS 0x28
 
/* 15:0 Subsystem VendorId */
#define PLX9050_PCISVID 0x2C
 
#define PLX9050_PCIERBAR 0x30
 
/* interrupt line routing */
#define PLX9050_PCIILR 0x3C
/* interrupt pin register */
#define PLX9050_PCIIPR 0x3D
 
#define PLX9050_PCIMGR 0x3E
#define PLX9050_PCIMLR 0x3F
 
 
/*
* defining the offsets from Local Base Address
* (local configuration registers, accessible by way of i/o- or
* memory cycle)
*/
#define PLX9050_LAS0RR 0x0
#define PLX9050_LAS1RR 0x4
#define PLX9050_LAS2RR 0x8
#define PLX9050_LAS3RR 0xC
#define PLX9050_EROMRR 0x10
 
#define PLX9050_LAS0BA 0x14
#define PLX9050_LAS1BA 0x18
#define PLX9050_LAS2BA 0x1C
#define PLX9050_LAS3BA 0x20
#define PLX9050_EROMBA 0x24
 
/*
* Local Address Space I Bus Region Descriptor Register
* Bit
* 0 : Burst enable
* 1 : Ready Input Enable
* 2 : Bterm Input Enable
* 4:3 : Prefetch Count - 00 no, 01 4 lwords, 10 8 lwords, 11 16 lwords
* 5 : Prefetch Count Enable
*/
#define PLX9050_LAS0BRD 0x28
#define PLX9050_LAS1BRD 0x2C
#define PLX9050_LAS2BRD 0x30
#define PLX9050_LAS3BRD 0x34
#define PLX9050_EROMBRD 0x38
 
#define PLX9050_CS0BASE 0x3C
#define PLX9050_CS1BASE 0x40
#define PLX9050_CS2BASE 0x44
#define PLX9050_CS4BASE 0x48
 
#define PLX9050_INTCSR 0x4C
 
#define PLX9050_CNTRL 0x50
 
#ifndef L_SETBIT
#define L_SETBIT(addr, b) writel(readl(addr) | (1<<(b)), addr);
#define W_SETBIT(addr, b) writew(readw(addr) | (1<<(b)), addr);
#define B_SETBIT(addr, b) writeb(readb(addr) | (1<<(b)), addr);
 
#define L_CLRBIT(addr, b) writel(readl(addr) & ~(1<<(b)), addr);
#define W_CLRBIT(addr, b) writew(readw(addr) & ~(1<<(b)), addr);
#define B_CLRBIT(addr, b) writeb(readb(addr) & ~(1<<(b)), addr);
#endif
 
#define PLX9050_ENABLE_BURST(base, i) L_SETBIT(base+PLX9050_LAS0BRD+i*4, 0)
#define PLX9050_DISABLE_BURST(base, i) L_CLRBIT(base+PLX9050_LAS0BRD+i*4, 0)
 
#define PLX9050_SET_PREFETCH0(base, i) writel(readl(base+PLX9050_LAS0BRD+i*4) & ~0x180 , base+PLX9050_LAS0BRD+i*4);
#define PLX9050_SET_PREFETCH4(base, i) writel(readl(base+PLX9050_LAS0BRD+i*4) & ~0x180 | 0x80, base+PLX9050_LAS0BRD+i*4);
#define PLX9050_SET_PREFETCH8(base, i) writel(readl(base+PLX9050_LAS0BRD+i*4) & ~0x180 | 0x100, base+PLX9050_LAS0BRD+i*4);
#define PLX9050_SET_PREFETCH16(base, i) writel(readl(base+PLX9050_LAS0BRD+i*4) | 0x180, base+PLX9050_LAS0BRD+i*4);
 
#endif /* __PLX9050_H__ */
/pcivme-3.2/driver/vic.h
0,0 → 1,135
#ifndef __VIC_H__
#define __VIC_H__
 
//****************************************************************************
// Copyright (C) 2001-2004 ARW Elktronik Germany
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU 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)
//****************************************************************************
 
//****************************************************************************
//
// vic.h - all definitions about the VIC68A chip
//
// $Log: vic.h,v $
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
//****************************************************************************
// INCLUDES
#include <linux/types.h>
 
//****************************************************************************
// DEFINES
#ifndef __KERNEL__
#define u8 __u8
#define u16 __u16
#define u32 __u32
#endif
 
#define VICR1 (u16)0x07 /* VMEbus Interrupt Control Register #.. */
#define VICR2 (u16)0x0b
#define VICR3 (u16)0x0f
#define VICR4 (u16)0x13
#define VICR5 (u16)0x17
#define VICR6 (u16)0x1b
#define VICR7 (u16)0x1f
 
#define LICR1 (u16)0x27 /* Local interrupt control register .. */
#define LICR2 (u16)0x2b
#define LICR3 (u16)0x2f
#define LICR4 (u16)0x33
#define LICR5 (u16)0x37
#define LICR6 (u16)0x3b
#define LICR7 (u16)0x3f
#define LIVBR (u16)0x57 /* Local interrupt vector base register */
 
#define ICGSICR (u16)0x43 /* ICGS interrupt control register */
#define ICGSVBR (u16)0x4f /* ICGS vector base register */
 
#define ICMSICR (u16)0x47 /* ICMS interrupt control register */
#define ICMSVBR (u16)0x53 /* ICMS vector base register */
 
#define EGICR (u16)0x4b /* Error group interrupt control register */
#define EGIVBR (u16)0x5b /* Error group interrupt vector base rg */
 
#define ICSR (u16)0x5f /* Interprozessor communication switch rg */
#define ICR0 (u16)0x63
#define ICR1 (u16)0x67
#define ICR2 (u16)0x6b
#define ICR3 (u16)0x6f
#define ICR4 (u16)0x73
#define ICR5 (u16)0x77
#define ICR6 (u16)0x7b
#define ICR7 (u16)0x7f
 
#define VIICR (u16)0x03 /* VMEbus Interrupter Interrupt Control */
#define VIRSR (u16)0x83 /* VMEbus interrupt request status reg */
#define VIVR1 (u16)0x87 /* VMEbus interrupt vector register .. */
#define VIVR2 (u16)0x8b
#define VIVR3 (u16)0x8f
#define VIVR4 (u16)0x93
#define VIVR5 (u16)0x97
#define VIVR6 (u16)0x9b
#define VIVR7 (u16)0x9f
 
#define TTR (u16)0xa3 /* transfer timeout register */
#define LTR (u16)0xa7 /* local timing register */
#define ICR (u16)0xaf /* interface configuration register */
 
#define ARCR (u16)0xb3 /* arbiter/requester configuration register*/
#define AMSR (u16)0xb7 /* address modifier source register */
#define BESR (u16)0xbb /* bus error source register */
 
#define DSICR (u16)0x23 /* DMA status interrupt control register */
#define DSR (u16)0xbf /* DMA status register */
 
#define SSCR00 (u16)0xc3 /* slave select 0 control register 0 */
#define SSCR01 (u16)0xc7 /* slave select 0 control register 1 */
#define SSCR10 (u16)0xcb /* slave select 1 control register 0 */
#define SSCR11 (u16)0xcf /* slave select 1 control register 1 */
 
#define RCR (u16)0xd3 /* release control register */
 
#define BTDR (u16)0xab /* block transfer definition register */
#define BTCR (u16)0xd7 /* block transfer control register */
#define BTLR0 (u16)0xdb /* block transfer length register 0 */
#define BTLR1 (u16)0xdf /* block transfer length register 1 */
 
#define SRR (u16)0xe3 /* system reset register */
 
 
#endif // __VIC_H__
 
 
/pcivme-3.2/driver/pcivme.h
0,0 → 1,212
#ifndef __PCIVME_H__
#define __PCIVME_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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// pcivme.h -- the common header for driver and applications for the PCIVME
// PCI to VME Interface
// All commands and constants are similiar to WIN?? drivers, but
// not equal. Please check if you cross-port or develop.
//
// $Log: pcivme.h,v $
// Revision 1.9 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.8 2003/06/27 17:25:52 klaus
// incomplete try to get mmap() with nopage() running for automatic page switch
//
// Revision 1.7 2002/10/20 18:06:51 klaus
// changed error handling
//
// Revision 1.6 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/17 19:05:03 klaus
// VME access is working through test to lib to driver
//
//****************************************************************************
 
#include <linux/types.h>
#include <asm/ioctl.h>
 
#define PCIVME_MAGIC ' '
 
#define MAX_INIT_ELEMENTS 20 // maximum number of init in PCIVME_(DE)INIT_HARDWARE
 
#ifndef __KERNEL__
#define u8 __u8
#define u16 __u16
#define u32 __u32
#endif
 
//----------------------------------------------------------------------------
// shared structures between driver & app to support ioctls ------------------
typedef struct // one command element to initialize interface or deinitialize
{
u8 bDestination; // 0 = lcr, 1 = vme-interface, -1 = stop
u8 bAccessType; // 1 = byte access, 2 = word access, 4 = long access
u16 wOffset; // offset into interface address range for initialisation
u32 dwValue; // value to initialize
} PCIVME_INIT_ELEMENT;
 
typedef struct
{
PCIVME_INIT_ELEMENT sVie[MAX_INIT_ELEMENTS]; // at least one zero element must be the last
} PCIVME_INIT_COMMAND;
 
typedef struct
{
u8 bModifier; // set the current modifier
u8 bAccessType; // set the current access type (1,2,4), not used
u8 bIncrement; // set the current byte increment count, not used
u8 bDummy; // reserved
} PCIVME_ACCESS_COMMAND;
 
typedef struct
{
u32 dwAddress; // tas to address
u8 bModifier; // VME address modifier for this window
u8 bContent; // content to store and get back
} PCIVME_TAS_STRUCT;
 
typedef struct
{
u16 wRegisterAddress; // address offset of vic68a register
u8 bAccessMode; // read, write, or, and
u8 bContent; // content to write, and, or
u8 bDummy; // reserved
} PCIVME_VIC68A_ACTION;
 
typedef struct
{
u8 bEnable; // set to 0 to disable, != 0 to enable
u8 bDummy; // reserved
} PCIVME_IRQ_CONTROL;
 
typedef struct
{
u8 bCommand; // makes and reads different reset commands
u8 bResult; // return result, == 0 if command has finished
} PCIVME_RESET_COMMAND;
 
typedef struct // static information about status of PCIADA & VMEMM
{
u8 bConnected; // is it or it was software connected
u8 cModuleNumber; // module number
u8 cFPGAVersion; // FPGA Version number
u8 cSystemController; // set if VMEMM is system controller
u8 cWordMode; // set if VMEMM is jumpered to word mode
u8 bDummy; // reserved
} PCIVME_STATIC_STATUS;
 
typedef struct // dynamic information about status of PCIADA & VMEMM
{
u8 bConnected; // the current cable connection state
u8 bPCIADAIrq; // interrupt pending due to timeout or connection fail
u8 bVMEMMIrq; // interrupt pending due to VMEMM event
u8 bDummy; // reserved
} PCIVME_DYNAMIC_STATUS;
 
typedef struct
{
u32 dwStatusID; // interrupt-vector (byte, word, long)
u8 bLevel; // interrupt-level
u8 bPCIADAIrq; // pending PCIADA Irq detected and cleared
} PCIVME_VECTOR_LEVEL;
 
//----------------------------------------------------------------------------
// commands to support ioctls ------------------------------------------------
#define PCIVME_INIT_HARDWARE _IOW(PCIVME_MAGIC, 1, PCIVME_INIT_COMMAND) // initializes the hardware with given parameters
#define PCIVME_DEINIT_HARDWARE _IOW(PCIVME_MAGIC, 2, PCIVME_INIT_COMMAND) // uninitializes the hardware
 
#define PCIVME_SET_ACCESS_PARA _IOWR(PCIVME_MAGIC, 3, PCIVME_ACCESS_COMMAND) // set the address modifier for this path
 
#define PCIVME_GET_STATIC_STATUS _IOR(PCIVME_MAGIC, 4, PCIVME_STATIC_STATUS) // asks for static status of PCIADA & connected VMEMM
#define PCIVME_GET_DYNAMIC_STATUS _IOR(PCIVME_MAGIC, 5, PCIVME_DYNAMIC_STATUS) // asks for dynamic status of PCIADA & connected VMEMM
 
#define PCIVME_READ_VECTOR_POLL _IOR(PCIVME_MAGIC, 6, PCIVME_VECTOR_LEVEL) // reads the level and vector of IRQ
#define PCIVME_READ_VECTOR_BLOCK _IOR(PCIVME_MAGIC, 7, PCIVME_VECTOR_LEVEL) // reads blocking the level and vector of IRQ
 
#define PCIVME_CONTROL_INTERRUPTS _IOWR(PCIVME_MAGIC, 8, PCIVME_IRQ_CONTROL) // set, clear interrupt enable
#define PCIVME_TAS _IOWR(PCIVME_MAGIC, 9, PCIVME_TAS_STRUCT) // make test and set
#define PCIVME_RESET _IOWR(PCIVME_MAGIC, 10, PCIVME_RESET_COMMAND) // make a reset to VME or global
 
#define PCIVME_ACCESS_VIC68A _IOWR(PCIVME_MAGIC, 11, PCIVME_VIC68A_ACTION) // access vic68a register (interface depended)
 
//----------------------------------------------------------------------------
// input constants of ioctls -------------------------------------------------
 
// switches for PCIVME_INIT and DEINIT_COMMAND
#define LCR (u8)0 // destination is PCIADA (LCR) register
#define IFR (u8)1 // destination is VMEMM-Interface register
#define VIC (u8)2 // destination is VIC68A register
#define STOP (u8)255 // this command stops the init machine
 
#define BYTE_ACCESS (u8)1 // write byte wise
#define WORD_ACCESS (u8)2 // word
#define LONG_ACCESS (u8)4 // long
 
// switches for PCIVME_ACCESS_VIC68A
#define VIC68A_READ 0 // read only access
#define VIC68A_WRITE 1 // write and read back access
#define VIC68A_OR 2 // read, bitwise 'or' content and read back access
#define VIC68A_AND 3 // read, bitwise 'and' content and read back access
#define VIC68A_WRITE_ONLY 4 // do not read back after write
 
// switches for PCIVME_VECTOR_CMD
#define READ_CURRENT_LEVEL 0 // try to get the current irq level
#define READ_VECTOR 1 // (if level == 0) read vector @ current LEVEL else @ level
 
// switches for the PCIVME_RESET
#define VME_RESET_CMD 0 // raise a VME reset only
#define LOCAL_RESET_CMD 1 // raise a local reset only
#define GLOBAL_RESET_CMD 2 // raise a global reset
#define POLL_RESET_CMD 3 // ask if reset is finished
 
// address masks for the pager - to use for offset and size @ window alignment
#define HI_ADDRESS_MASK (u32)0xFFFFF000 // masks the high part of a vme address
#define LO_ADDRESS_MASK (~HI_ADDRESS_MASK) // masks the low part of a vme address
#define ONE_PAGE_SIZE (LO_ADDRESS_MASK + 1) // size of 1 page (hardware related)
 
// macros to calculate the real base and the real size of demand pages
#define PCIVME_PAGE_BASE(base) (base & HI_ADDRESS_MASK) // makes an aligned base for a page
#define PCIVME_PAGE_SIZE(base, size) (((base + size + LO_ADDRESS_MASK) / ONE_PAGE_SIZE) * ONE_PAGE_SIZE)
 
//----------------------------------------------------------------------------
// results of ioctls ---------------------------------------------------------
#define NOT_MY_INTERRUPT 0
#define PCIADA_INTERRUPT 1
#define VMEMM_INTERRUPT 2
 
#endif /* __PCIVME_H__ */
/pcivme-3.2/driver/main.h
0,0 → 1,151
#ifndef __MAIN_H__
#define __MAIN_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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// main.h -- export parts of main.c
//
// $Log: main.h,v $
// Revision 1.7 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.6 2003/06/27 17:25:52 klaus
// incomplete try to get mmap() with nopage() running for automatic page switch
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
/*--- INCLUDES ----------------------------------------------------------------------------*/
#include <linux/wait.h>
#include <linux/types.h>
#include <linux/list.h>
 
/*--- DEFINES -----------------------------------------------------------------------------*/
#define DEVICE_NAME "pcivme"
 
#define LOW_MEMORY 0x1000000 // 1 Mbyte PC memory border
 
#define LCR_SPACE 0x0080 // space in bytes of LCR
#define IFR_SPACE 0x2000 // space in bytes of IFR
#define CTL_SPACE 0x1000 // lower part of IFR_SPACE
#define VME_SPACE (IFR_SPACE - CTL_SPACE) // higher part of IFR_SPACE used for VME window
 
#define RELEASE_VMEMM (u16)0x4180 // write this to release access ..
#define INHIBIT_VMEMM (u16)0x4080 // write this to inhibit access ..
#define ENABLE_PCIADA_IRQS (u16)0x0049 // enable PCIADA IRQs
#define DISABLE_PCIADA_IRQS (u16)0x0009 // disable PCIADA IRQs
 
/*--- TYPEDEFS ----------------------------------------------------------------------------*/
typedef struct
{
struct list_head devList; // link anchor for list of devices
struct list_head pciList; // link anchor of all unchecked PCIADAs found
u32 nMajor; // asigned major number
int count; // count of found devices
} DRIVER_OBJ;
 
typedef struct
{
struct list_head list; // chained list of found and not checked devices
struct pci_dev *pciDev; // associated pci descriptors of the system
u16 index;
} PCIConfig;
 
typedef struct
{
struct vm_area_struct *vma;
struct page *pageptr; // the current active pageptr
unsigned long addr; // related user address
} MMAP_INFO;
 
typedef struct
{
struct list_head list; /* chain element of list */
u16 wIndex; /* running index of all PCIADAs */
PCIConfig *pPch; /* associated PCI configuration */
u32 pLCR; /* base of LCR */
u32 pCtl; /* base of control area */
u32 pVME; /* base of VME access area */
u32 pPhysVME; /* physical address of VME window */
u8 bConnected; /* is it connected ?? */
u16 wInitStep; /* trace of initialisation */
u16 wIrq; /* the assigned irq */
u32 dwInterruptCount; /* counts the VME and timeout interrupts */
u16 wIrqStatus; /* last cause / status of interrupts */
int nOpenCounter; /* counts the open path to this device */
wait_queue_head_t event_queue; /* handle interrupt events */
 
u32 pAdrMod; /* address of address modifier register in VIC */
u32 pAdrReg; /* address of VMEMM VME address register */
u32 pCSR; /* address of the VMEMM CSR register */
 
u32 pPCIADACntrl; /* address of the PCIADA control register */
u32 pPCIADAIntCSR; /* address of the PCIADA INTCSR register */
 
u8 cModuleNumber; /* module number */
u8 cFPGAVersion; /* FPGA Version number */
u8 cSystemController; /* set if VMEMM is system controller */
u8 cWordMode; /* set if VMEMM is jumpered to word mode */
 
u8 bCurrentModifier; /* the current set address modifier of this device */
u32 dwCurrentPageAddress; /* the current page address association */
MMAP_INFO currentMap; /* information about current mapped page */
} DEVICE_OBJ;
 
typedef struct
{
DEVICE_OBJ *pDo; /* pointer to my PCIADA & connected VMEMM */
u8 bModifier; /* the associated address modifier of this device */
u8 bAccessType; /* the next access is byte, word, longword - not for memory mapped access */
u8 bIncrement; /* the next increment, normally like accesstype or 0*/
void (*read)(DEVICE_OBJ*, void**, u32); /* predifined read function */
void (*write)(DEVICE_OBJ*, u32, void**); /* same for write */
int (*AlignmentCheck)(loff_t offset); /* function to check access alignment */
} PATH_OBJ;
 
/*--- PROTOTYPES --------------------------------------------------------------------------*/
int get_module_info(DEVICE_OBJ *pd);
int test_connection(DEVICE_OBJ *pd);
 
/*--- PROTOTYPES --------------------------------------------------------------------------*/
extern DRIVER_OBJ drv; /* driver globals */
 
#endif // __MAIN_H__
 
/pcivme-3.2/driver/.pcivme.ko.cmd
0,0 → 1,0
cmd_/home/f9daq/pcivme-3.2/driver/pcivme.ko := ld -r -m elf_i386 -T /usr/src/linux-headers-3.5.0-28-generic/scripts/module-common.lds --build-id -o /home/f9daq/pcivme-3.2/driver/pcivme.ko /home/f9daq/pcivme-3.2/driver/pcivme.o /home/f9daq/pcivme-3.2/driver/pcivme.mod.o
/pcivme-3.2/driver/Makefile
0,0 → 1,186
#****************************************************************************
# 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 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.
#
# Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)
#****************************************************************************
 
#****************************************************************************
#
# Makefile - makefile for ARW Elektronik PCI to VME interfaces driver
#
# $Log: Makefile,v $
# Revision 1.2 2004/08/13 19:23:26 klaus
# conversion to kernel-version 2.6, released version 3.0
#
# Revision 1.1.1.2 2002/10/18 22:14:29 klaus
# *** empty log message ***
#
# Revision 1.1.1.1 2002/10/09 19:36:30 klaus
# initial import
#
#
#****************************************************************************
 
#****************************************************************************
# please modify only here if your kernel path is elsewhere located
#
KERNEL_LOCATION =/usr/src/linux-headers-$(shell uname -r)
 
EXTRA_CFLAGS := -I.
#****************************************************************************
# removed old kernel source path retrival for support of kernels < 2.2.18!
# old KERNSRC = /lib/modules/$(VERSION)/build
#
KERNSRC := $(KERNEL_LOCATION)
 
#****************************************************************************
# whole makefile is based on availability of version.h file
# do a forced stop if it is not available
#
HASVERSION_H := $(shell if test -f /usr/include/linux/version.h ; then echo yes ; else echo no; fi )
 
ifeq ($(HASVERSION_H),no)
$(error "Can't find $(KERNEL_LOCATION)/include/linux/version.h !")
else
 
#****************************************************************************
# removed old version retrival for better cross compile support
# old VERSION := $(shell uname -r)
#
 
 
VERSION := $(shell cpp -dM -I$(KERNEL_LOCATION)/include $(KERNEL_LOCATION)/include/generated/utsrelease.h \
| grep UTS_RELEASE | sed -e 's;[^"]*"\(.*\)";\1;g')
 
 
#****************************************************************************
# where the driver should be installed - change here for cross install - currently not functional
#
INSTALL_LOCATION = /lib/modules/2.6.24-19-generic/ubuntu/misc/
 
#****************************************************************************
# get extracted kernel VERSION and PATCHLEVEL for comparison
# decide to use KBUILD for kernels greater 2.6.0
#
KVERSION := $(shell echo $(VERSION) | sed -e 's;\([1-9]\)\..*;\1;g' )
KPATCHLEVEL := $(shell echo $(VERSION) | sed -e 's;[1-9]\.\([0-9]\{0,3\}\)\..*;\1;g' )
USEKBUILD := $(shell if [ $(KVERSION) -gt 2 ] || [ $(KVERSION) -eq 2 ] && [ $(KPATCHLEVEL) -ge 6 ] ; \
then echo "yes" ; else echo "no" ; fi)
 
USEKBUILD := yes
#****************************************************************************
# some common switches and defines
#
DBG = __NO_DEBUG__ # or __DEBUG__ to debug the driver
SRC = .
 
 
#****************************************************************************
# preparation what to build or what to KBUILD
#
pcivme-objs := $(SRC)/main.o $(SRC)/askpci.o $(SRC)/plxbug.o $(SRC)/fops.o
 
 
ifeq ($(USEKBUILD),yes) # <<<<< USEKBUILD >>>>>>
 
#****************************************************************************
# what's the target
#
TARGET = pcivme.ko
obj-m := pcivme.o
 
#****************************************************************************
# add flags to standard flags
#
CPPFLAGS += -I$(PWD) -D$(DBG)
 
#****************************************************************************
# do it
#
all : message
$(MAKE) -C $(KERNSRC) M=$(PWD) V=$(VERBOSE) $(filter-out all, $(MAKECMDGOLAS)) modules
 
else # <<<<< USEKBUILD >>>>>>
 
#****************************************************************************
# additional common switches and defines
#
CC = gcc
LD = ld
INC = $(KERNSRC)/include
DEP = .depend
 
#****************************************************************************
# what's the target
#
TARGET = pcivme.o
 
#****************************************************************************
# compile flags
#
CFLAGS = -O2 -D__KERNEL__ -DMODULE -Wall $(INCLUDE) -D$(DBG)
 
#****************************************************************************
# do it
#
all: message $(TARGET)
 
$(TARGET) : $(pcivme-objs)
$(LD) -r $^ -o $@
 
#********** catch include file depencies ************************************
ifeq ($(DEP),$(wildcard $(DEP)))
 
depend:
makedepend -f$(DEP) -- $(CFLAGS) -- $(addsuffix .c, $(basename $(pcivme-objs))) -I$(INC)
 
include $(DEP)
 
else
 
depend:
touch $(DEP)
makedepend -f$(DEP) -- $(CFLAGS) -- $(addsuffix .c, $(basename $(pcivme-objs))) -I$(INC)
endif
 
endif # <<<<< USEKBUILD >>>>>>
 
#********** clean all for a rebuild *****************************************
clean:
rm -f *~ $(TARGET) $(pcivme-objs)
 
#********** clean all for a rebuild *****************************************
fresh:
touch *.c
make all
#********** informations during build of driver *****************************
.PHONY : message
message:
@ echo "***"
@ echo "*** Host machine kernel version=$(shell uname -r), Driver kernel version=$(VERSION), Path to kernel sources=$(KERNSRC), use KBUILD=$(USEKBUILD)"
@ echo "***"
 
#********** root installation only ******************************************
install:
./pcivme_load 1
 
endif # <<<<< HASVERSION_H >>>>>>
 
# DO NOT DELETE
 
/pcivme-3.2/driver/vme.h
0,0 → 1,78
#ifndef __VME_H__
#define __VME_H__
 
//****************************************************************************
// Copyright (C) 2001-2004 ARW Elktronik Germany
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU 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)
//****************************************************************************
 
//****************************************************************************
//
// vme.h - some important definitions about VME bus address modifiers
//
// $Log: vme.h,v $
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.4 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
//****************************************************************************
// INCLUDES
#include <asm/types.h>
 
//****************************************************************************
// DEFINES
#ifndef __KERNEL__
#define u8 __u8
#define u16 __u16
#define u32 __u32
#endif
 
typedef u16 ADDRESS_MODIFIER;
 
#define Std_Sup_Data (ADDRESS_MODIFIER)0x3d
#define Std_Sup_Prog (ADDRESS_MODIFIER)0x3e
#define Std_NoPriv_Data (ADDRESS_MODIFIER)0x39
#define Std_NoPriv_Prog (ADDRESS_MODIFIER)0x3a
 
#define Short_Sup (ADDRESS_MODIFIER)0x2d
#define Short_NoPriv (ADDRESS_MODIFIER)0x29
 
#define Ext_Sup_Data (ADDRESS_MODIFIER)0x0d
#define Ext_Sup_Prog (ADDRESS_MODIFIER)0x0e
#define Ext_NoPriv_Data (ADDRESS_MODIFIER)0x09
#define Ext_NoPriv_Prog (ADDRESS_MODIFIER)0x0a
 
#endif // __VME_H__
 
 
/pcivme-3.2/driver/.pcivme.mod.o.cmd
0,0 → 1,504
cmd_/home/f9daq/pcivme-3.2/driver/pcivme.mod.o := gcc -Wp,-MD,/home/f9daq/pcivme-3.2/driver/.pcivme.mod.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.6/include -I/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include /usr/src/linux-headers-3.5.0-28-generic/include/linux/kconfig.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_AVX=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -I. -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(pcivme.mod)" -D"KBUILD_MODNAME=KBUILD_STR(pcivme)" -DMODULE -c -o /home/f9daq/pcivme-3.2/driver/pcivme.mod.o /home/f9daq/pcivme-3.2/driver/pcivme.mod.c
 
source_/home/f9daq/pcivme-3.2/driver/pcivme.mod.o := /home/f9daq/pcivme-3.2/driver/pcivme.mod.c
 
deps_/home/f9daq/pcivme-3.2/driver/pcivme.mod.o := \
$(wildcard include/config/module/unload.h) \
include/linux/module.h \
$(wildcard include/config/sysfs.h) \
$(wildcard include/config/modules.h) \
$(wildcard include/config/unused/symbols.h) \
$(wildcard include/config/generic/bug.h) \
$(wildcard include/config/kallsyms.h) \
$(wildcard include/config/smp.h) \
$(wildcard include/config/tracepoints.h) \
$(wildcard include/config/tracing.h) \
$(wildcard include/config/event/tracing.h) \
$(wildcard include/config/ftrace/mcount/record.h) \
$(wildcard include/config/constructors.h) \
$(wildcard include/config/debug/set/module/ronx.h) \
include/linux/list.h \
$(wildcard include/config/debug/list.h) \
include/linux/types.h \
$(wildcard include/config/uid16.h) \
$(wildcard include/config/lbdaf.h) \
$(wildcard include/config/arch/dma/addr/t/64bit.h) \
$(wildcard include/config/phys/addr/t/64bit.h) \
$(wildcard include/config/64bit.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/types.h \
include/asm-generic/types.h \
include/asm-generic/int-ll64.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitsperlong.h \
include/asm-generic/bitsperlong.h \
include/linux/posix_types.h \
include/linux/stddef.h \
include/linux/compiler.h \
$(wildcard include/config/sparse/rcu/pointer.h) \
$(wildcard include/config/trace/branch/profiling.h) \
$(wildcard include/config/profile/all/branches.h) \
$(wildcard include/config/enable/must/check.h) \
$(wildcard include/config/enable/warn/deprecated.h) \
include/linux/compiler-gcc.h \
$(wildcard include/config/arch/supports/optimized/inlining.h) \
$(wildcard include/config/optimize/inlining.h) \
include/linux/compiler-gcc4.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types.h \
$(wildcard include/config/x86/32.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types_32.h \
include/asm-generic/posix_types.h \
include/linux/poison.h \
$(wildcard include/config/illegal/pointer/value.h) \
include/linux/const.h \
include/linux/stat.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/stat.h \
include/linux/time.h \
$(wildcard include/config/arch/uses/gettimeoffset.h) \
include/linux/cache.h \
$(wildcard include/config/arch/has/cache/line/size.h) \
include/linux/kernel.h \
$(wildcard include/config/preempt/voluntary.h) \
$(wildcard include/config/debug/atomic/sleep.h) \
$(wildcard include/config/prove/locking.h) \
$(wildcard include/config/ring/buffer.h) \
$(wildcard include/config/numa.h) \
$(wildcard include/config/compaction.h) \
include/linux/sysinfo.h \
/usr/lib/gcc/i686-linux-gnu/4.6/include/stdarg.h \
include/linux/linkage.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/linkage.h \
$(wildcard include/config/x86/64.h) \
$(wildcard include/config/x86/alignment/16.h) \
include/linux/stringify.h \
include/linux/bitops.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitops.h \
$(wildcard include/config/x86/cmov.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/alternative.h \
$(wildcard include/config/paravirt.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/asm.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpufeature.h \
$(wildcard include/config/x86/invlpg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/required-features.h \
$(wildcard include/config/x86/minimum/cpu/family.h) \
$(wildcard include/config/math/emulation.h) \
$(wildcard include/config/x86/pae.h) \
$(wildcard include/config/x86/cmpxchg64.h) \
$(wildcard include/config/x86/use/3dnow.h) \
$(wildcard include/config/x86/p6/nop.h) \
include/asm-generic/bitops/fls64.h \
include/asm-generic/bitops/find.h \
$(wildcard include/config/generic/find/first/bit.h) \
include/asm-generic/bitops/sched.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/arch_hweight.h \
include/asm-generic/bitops/const_hweight.h \
include/asm-generic/bitops/le.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/byteorder.h \
include/linux/byteorder/little_endian.h \
include/linux/swab.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swab.h \
$(wildcard include/config/x86/bswap.h) \
include/linux/byteorder/generic.h \
include/asm-generic/bitops/ext2-atomic-setbit.h \
include/linux/log2.h \
$(wildcard include/config/arch/has/ilog2/u32.h) \
$(wildcard include/config/arch/has/ilog2/u64.h) \
include/linux/typecheck.h \
include/linux/printk.h \
$(wildcard include/config/printk.h) \
$(wildcard include/config/dynamic/debug.h) \
include/linux/init.h \
$(wildcard include/config/hotplug.h) \
include/linux/dynamic_debug.h \
include/linux/string.h \
$(wildcard include/config/binary/printf.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string_32.h \
$(wildcard include/config/kmemcheck.h) \
include/linux/errno.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/errno.h \
include/asm-generic/errno.h \
include/asm-generic/errno-base.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/div64.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cache.h \
$(wildcard include/config/x86/l1/cache/shift.h) \
$(wildcard include/config/x86/internode/cache/shift.h) \
$(wildcard include/config/x86/vsmp.h) \
include/linux/seqlock.h \
include/linux/spinlock.h \
$(wildcard include/config/debug/spinlock.h) \
$(wildcard include/config/generic/lockbreak.h) \
$(wildcard include/config/preempt.h) \
$(wildcard include/config/debug/lock/alloc.h) \
include/linux/preempt.h \
$(wildcard include/config/debug/preempt.h) \
$(wildcard include/config/preempt/tracer.h) \
$(wildcard include/config/preempt/count.h) \
$(wildcard include/config/preempt/notifiers.h) \
include/linux/thread_info.h \
$(wildcard include/config/compat.h) \
$(wildcard include/config/debug/stack/usage.h) \
include/linux/bug.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bug.h \
$(wildcard include/config/bug.h) \
$(wildcard include/config/debug/bugverbose.h) \
include/asm-generic/bug.h \
$(wildcard include/config/generic/bug/relative/pointers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/thread_info.h \
$(wildcard include/config/ia32/emulation.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32_types.h \
$(wildcard include/config/highmem4g.h) \
$(wildcard include/config/highmem64g.h) \
$(wildcard include/config/page/offset.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32.h \
$(wildcard include/config/hugetlb/page.h) \
$(wildcard include/config/debug/virtual.h) \
$(wildcard include/config/flatmem.h) \
$(wildcard include/config/x86/3dnow.h) \
include/asm-generic/memory_model.h \
$(wildcard include/config/discontigmem.h) \
$(wildcard include/config/sparsemem/vmemmap.h) \
$(wildcard include/config/sparsemem.h) \
include/asm-generic/getorder.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor.h \
$(wildcard include/config/cc/stackprotector.h) \
$(wildcard include/config/m386.h) \
$(wildcard include/config/m486.h) \
$(wildcard include/config/x86/debugctlmsr.h) \
$(wildcard include/config/cpu/sup/amd.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor-flags.h \
$(wildcard include/config/vm86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vm86.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/segment.h \
$(wildcard include/config/x86/32/lazy/gs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt_types.h \
$(wildcard include/config/x86/local/apic.h) \
$(wildcard include/config/paravirt/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc_defs.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/kmap_types.h \
$(wildcard include/config/debug/highmem.h) \
include/asm-generic/kmap_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_types.h \
$(wildcard include/config/compat/vdso.h) \
$(wildcard include/config/proc/fs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
$(wildcard include/config/highmem.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level_types.h \
include/asm-generic/pgtable-nopud.h \
include/asm-generic/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/math_emu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sigcontext.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/current.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/percpu.h \
$(wildcard include/config/x86/64/smp.h) \
include/asm-generic/percpu.h \
$(wildcard include/config/have/setup/per/cpu/area.h) \
include/linux/threads.h \
$(wildcard include/config/nr/cpus.h) \
$(wildcard include/config/base/small.h) \
include/linux/percpu-defs.h \
$(wildcard include/config/debug/force/weak/per/cpu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr-index.h \
include/linux/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ioctl.h \
include/asm-generic/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpumask.h \
include/linux/cpumask.h \
$(wildcard include/config/cpumask/offstack.h) \
$(wildcard include/config/hotplug/cpu.h) \
$(wildcard include/config/debug/per/cpu/maps.h) \
$(wildcard include/config/disable/obsolete/cpumask/functions.h) \
include/linux/bitmap.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt.h \
$(wildcard include/config/transparent/hugepage.h) \
$(wildcard include/config/paravirt/spinlocks.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/nops.h \
$(wildcard include/config/mk7.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/special_insns.h \
include/linux/personality.h \
include/linux/math64.h \
include/linux/err.h \
include/linux/irqflags.h \
$(wildcard include/config/trace/irqflags.h) \
$(wildcard include/config/irqsoff/tracer.h) \
$(wildcard include/config/trace/irqflags/support.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irqflags.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ftrace.h \
$(wildcard include/config/function/tracer.h) \
$(wildcard include/config/dynamic/ftrace.h) \
include/linux/atomic.h \
$(wildcard include/config/arch/has/atomic/or.h) \
$(wildcard include/config/generic/atomic64.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg_32.h \
$(wildcard include/config/x86/cmpxchg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic64_32.h \
include/asm-generic/atomic-long.h \
include/linux/bottom_half.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/barrier.h \
$(wildcard include/config/x86/ppro/fence.h) \
$(wildcard include/config/x86/oostore.h) \
include/linux/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwlock.h \
include/linux/lockdep.h \
$(wildcard include/config/lockdep.h) \
$(wildcard include/config/lock/stat.h) \
$(wildcard include/config/prove/rcu.h) \
include/linux/rwlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock.h \
include/linux/rwlock.h \
include/linux/spinlock_api_smp.h \
$(wildcard include/config/inline/spin/lock.h) \
$(wildcard include/config/inline/spin/lock/bh.h) \
$(wildcard include/config/inline/spin/lock/irq.h) \
$(wildcard include/config/inline/spin/lock/irqsave.h) \
$(wildcard include/config/inline/spin/trylock.h) \
$(wildcard include/config/inline/spin/trylock/bh.h) \
$(wildcard include/config/uninline/spin/unlock.h) \
$(wildcard include/config/inline/spin/unlock/bh.h) \
$(wildcard include/config/inline/spin/unlock/irq.h) \
$(wildcard include/config/inline/spin/unlock/irqrestore.h) \
include/linux/rwlock_api_smp.h \
$(wildcard include/config/inline/read/lock.h) \
$(wildcard include/config/inline/write/lock.h) \
$(wildcard include/config/inline/read/lock/bh.h) \
$(wildcard include/config/inline/write/lock/bh.h) \
$(wildcard include/config/inline/read/lock/irq.h) \
$(wildcard include/config/inline/write/lock/irq.h) \
$(wildcard include/config/inline/read/lock/irqsave.h) \
$(wildcard include/config/inline/write/lock/irqsave.h) \
$(wildcard include/config/inline/read/trylock.h) \
$(wildcard include/config/inline/write/trylock.h) \
$(wildcard include/config/inline/read/unlock.h) \
$(wildcard include/config/inline/write/unlock.h) \
$(wildcard include/config/inline/read/unlock/bh.h) \
$(wildcard include/config/inline/write/unlock/bh.h) \
$(wildcard include/config/inline/read/unlock/irq.h) \
$(wildcard include/config/inline/write/unlock/irq.h) \
$(wildcard include/config/inline/read/unlock/irqrestore.h) \
$(wildcard include/config/inline/write/unlock/irqrestore.h) \
include/linux/uidgid.h \
$(wildcard include/config/uidgid/strict/type/checks.h) \
$(wildcard include/config/user/ns.h) \
include/linux/highuid.h \
include/linux/kmod.h \
include/linux/gfp.h \
$(wildcard include/config/zone/dma.h) \
$(wildcard include/config/zone/dma32.h) \
$(wildcard include/config/pm/sleep.h) \
$(wildcard include/config/cma.h) \
include/linux/mmzone.h \
$(wildcard include/config/force/max/zoneorder.h) \
$(wildcard include/config/cgroup/mem/res/ctlr.h) \
$(wildcard include/config/memory/hotplug.h) \
$(wildcard include/config/have/memblock/node/map.h) \
$(wildcard include/config/flat/node/mem/map.h) \
$(wildcard include/config/no/bootmem.h) \
$(wildcard include/config/have/memory/present.h) \
$(wildcard include/config/have/memoryless/nodes.h) \
$(wildcard include/config/need/node/memmap/size.h) \
$(wildcard include/config/have/memblock/node.h) \
$(wildcard include/config/need/multiple/nodes.h) \
$(wildcard include/config/have/arch/early/pfn/to/nid.h) \
$(wildcard include/config/sparsemem/extreme.h) \
$(wildcard include/config/have/arch/pfn/valid.h) \
$(wildcard include/config/nodes/span/other/nodes.h) \
$(wildcard include/config/holes/in/zone.h) \
$(wildcard include/config/arch/has/holes/memorymodel.h) \
include/linux/wait.h \
include/linux/numa.h \
$(wildcard include/config/nodes/shift.h) \
include/linux/nodemask.h \
include/linux/pageblock-flags.h \
$(wildcard include/config/hugetlb/page/size/variable.h) \
include/generated/bounds.h \
include/linux/memory_hotplug.h \
$(wildcard include/config/memory/hotremove.h) \
$(wildcard include/config/have/arch/nodedata/extension.h) \
include/linux/notifier.h \
include/linux/mutex.h \
$(wildcard include/config/debug/mutexes.h) \
$(wildcard include/config/have/arch/mutex/cpu/relax.h) \
include/linux/rwsem.h \
$(wildcard include/config/rwsem/generic/spinlock.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwsem.h \
include/linux/srcu.h \
include/linux/rcupdate.h \
$(wildcard include/config/rcu/torture/test.h) \
$(wildcard include/config/tree/rcu.h) \
$(wildcard include/config/tree/preempt/rcu.h) \
$(wildcard include/config/rcu/trace.h) \
$(wildcard include/config/preempt/rcu.h) \
$(wildcard include/config/tiny/rcu.h) \
$(wildcard include/config/tiny/preempt/rcu.h) \
$(wildcard include/config/debug/objects/rcu/head.h) \
$(wildcard include/config/preempt/rt.h) \
include/linux/completion.h \
include/linux/debugobjects.h \
$(wildcard include/config/debug/objects.h) \
$(wildcard include/config/debug/objects/free.h) \
include/linux/rcutree.h \
include/linux/workqueue.h \
$(wildcard include/config/debug/objects/work.h) \
$(wildcard include/config/freezer.h) \
include/linux/timer.h \
$(wildcard include/config/timer/stats.h) \
$(wildcard include/config/debug/objects/timers.h) \
include/linux/ktime.h \
$(wildcard include/config/ktime/scalar.h) \
include/linux/jiffies.h \
include/linux/timex.h \
include/linux/param.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/param.h \
include/asm-generic/param.h \
$(wildcard include/config/hz.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/timex.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/tsc.h \
$(wildcard include/config/x86/tsc.h) \
include/linux/topology.h \
$(wildcard include/config/sched/smt.h) \
$(wildcard include/config/sched/mc.h) \
$(wildcard include/config/sched/book.h) \
$(wildcard include/config/use/percpu/numa/node/id.h) \
include/linux/smp.h \
$(wildcard include/config/use/generic/smp/helpers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/smp.h \
$(wildcard include/config/x86/io/apic.h) \
$(wildcard include/config/x86/32/smp.h) \
$(wildcard include/config/debug/nmi/selftest.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec.h \
$(wildcard include/config/x86/numaq.h) \
$(wildcard include/config/eisa.h) \
$(wildcard include/config/x86/mpparse.h) \
$(wildcard include/config/acpi.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec_def.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/x86_init.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bootparam.h \
include/linux/screen_info.h \
include/linux/apm_bios.h \
include/linux/edd.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/e820.h \
$(wildcard include/config/efi.h) \
$(wildcard include/config/intel/txt.h) \
$(wildcard include/config/hibernation.h) \
$(wildcard include/config/memtest.h) \
include/linux/ioport.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ist.h \
include/video/edid.h \
$(wildcard include/config/x86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apicdef.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apic.h \
$(wildcard include/config/x86/x2apic.h) \
include/linux/pm.h \
$(wildcard include/config/pm.h) \
$(wildcard include/config/pm/runtime.h) \
$(wildcard include/config/pm/clk.h) \
$(wildcard include/config/pm/generic/domains.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/fixmap.h \
$(wildcard include/config/provide/ohci1394/dma/init.h) \
$(wildcard include/config/x86/visws/apic.h) \
$(wildcard include/config/x86/f00f/bug.h) \
$(wildcard include/config/x86/cyclone/timer.h) \
$(wildcard include/config/pci/mmconfig.h) \
$(wildcard include/config/x86/intel/mid.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/acpi.h \
$(wildcard include/config/acpi/numa.h) \
include/acpi/pdc_intel.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa.h \
$(wildcard include/config/numa/emu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/topology.h \
$(wildcard include/config/x86/ht.h) \
include/asm-generic/topology.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mmu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/realmode.h \
$(wildcard include/config/acpi/sleep.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io.h \
$(wildcard include/config/xen.h) \
include/asm-generic/iomap.h \
$(wildcard include/config/has/ioport.h) \
$(wildcard include/config/pci.h) \
$(wildcard include/config/generic/iomap.h) \
include/asm-generic/pci_iomap.h \
$(wildcard include/config/no/generic/pci/ioport/map.h) \
$(wildcard include/config/generic/pci/iomap.h) \
include/linux/vmalloc.h \
$(wildcard include/config/mmu.h) \
include/xen/xen.h \
$(wildcard include/config/xen/dom0.h) \
include/xen/interface/xen.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pvclock-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/hypervisor.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io_apic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irq_vectors.h \
include/linux/percpu.h \
$(wildcard include/config/need/per/cpu/embed/first/chunk.h) \
$(wildcard include/config/need/per/cpu/page/first/chunk.h) \
include/linux/pfn.h \
include/linux/mmdebug.h \
$(wildcard include/config/debug/vm.h) \
include/linux/sysctl.h \
$(wildcard include/config/sysctl.h) \
include/linux/rbtree.h \
include/linux/elf.h \
include/linux/elf-em.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/elf.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/user.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/user_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/auxvec.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vdso.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ldt.h \
include/linux/kobject.h \
include/linux/sysfs.h \
include/linux/kobject_ns.h \
include/linux/kref.h \
include/linux/moduleparam.h \
$(wildcard include/config/alpha.h) \
$(wildcard include/config/ia64.h) \
$(wildcard include/config/ppc64.h) \
include/linux/tracepoint.h \
include/linux/static_key.h \
include/linux/jump_label.h \
$(wildcard include/config/jump/label.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/jump_label.h \
include/linux/export.h \
$(wildcard include/config/symbol/prefix.h) \
$(wildcard include/config/modversions.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/module.h \
$(wildcard include/config/m586.h) \
$(wildcard include/config/m586tsc.h) \
$(wildcard include/config/m586mmx.h) \
$(wildcard include/config/mcore2.h) \
$(wildcard include/config/matom.h) \
$(wildcard include/config/m686.h) \
$(wildcard include/config/mpentiumii.h) \
$(wildcard include/config/mpentiumiii.h) \
$(wildcard include/config/mpentiumm.h) \
$(wildcard include/config/mpentium4.h) \
$(wildcard include/config/mk6.h) \
$(wildcard include/config/mk8.h) \
$(wildcard include/config/melan.h) \
$(wildcard include/config/mcrusoe.h) \
$(wildcard include/config/mefficeon.h) \
$(wildcard include/config/mwinchipc6.h) \
$(wildcard include/config/mwinchip3d.h) \
$(wildcard include/config/mcyrixiii.h) \
$(wildcard include/config/mviac3/2.h) \
$(wildcard include/config/mviac7.h) \
$(wildcard include/config/mgeodegx1.h) \
$(wildcard include/config/mgeode/lx.h) \
include/asm-generic/module.h \
include/linux/vermagic.h \
include/generated/utsrelease.h \
 
/home/f9daq/pcivme-3.2/driver/pcivme.mod.o: $(deps_/home/f9daq/pcivme-3.2/driver/pcivme.mod.o)
 
$(deps_/home/f9daq/pcivme-3.2/driver/pcivme.mod.o):
/pcivme-3.2/driver/common.h
0,0 → 1,83
#ifndef __COMMON_H__
#define __COMMON_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 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)
//
//****************************************************************************
 
//****************************************************************************
//
// common.h - common definitions to include in all *.c files
//
// $Log: common.h,v $
// Revision 1.6 2004/08/13 19:23:26 klaus
// conversion to kernel-version 2.6, released version 3.0
//
// Revision 1.5 2002/10/18 21:56:28 klaus
// completed functional features, untested
//
// Revision 1.3 2002/10/10 18:57:46 klaus
// source beautyfied
//
//****************************************************************************
 
#include <generated/autoconf.h>
#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS)
#define MODVERSIONS
#endif
 
#include <linux/version.h>
 
#ifdef MODVERSIONS
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
#include <config/modversions.h>
#else
#include <linux/modversions.h>
#endif
#endif
 
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)
#define kfree_s(ptr, size) kfree(ptr) /* a workaround cause kfree_s is disapeared in V 2.4 */
#endif
 
// circumvent deprecated MOD_..._USE_COUNT
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
#define __MOD_INC_USE_COUNT__
#define __MOD_DEC_USE_COUNT__
#else
#define __MOD_INC_USE_COUNT__ MOD_INC_USE_COUNT
#define __MOD_DEC_USE_COUNT__ MOD_DEC_USE_COUNT
#endif
 
// switch to disable all printks for not debugging
#ifdef __DEBUG__
#define PRINTK printk
#else
#define PRINTK(stuff...)
#endif
 
#endif /* __COMMON_H__ */
/pcivme-3.2/driver/.plxbug.o.cmd
0,0 → 1,567
cmd_/home/f9daq/pcivme-3.2/driver/./plxbug.o := gcc -Wp,-MD,/home/f9daq/pcivme-3.2/driver/./.plxbug.o.d -nostdinc -isystem /usr/lib/gcc/i686-linux-gnu/4.6/include -I/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include -Iarch/x86/include/generated -Iinclude -include /usr/src/linux-headers-3.5.0-28-generic/include/linux/kconfig.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -maccumulate-outgoing-args -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_AVX=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -Wframe-larger-than=1024 -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -I. -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(plxbug)" -D"KBUILD_MODNAME=KBUILD_STR(pcivme)" -c -o /home/f9daq/pcivme-3.2/driver/./.tmp_plxbug.o /home/f9daq/pcivme-3.2/driver/./plxbug.c
 
source_/home/f9daq/pcivme-3.2/driver/./plxbug.o := /home/f9daq/pcivme-3.2/driver/./plxbug.c
 
deps_/home/f9daq/pcivme-3.2/driver/./plxbug.o := \
/home/f9daq/pcivme-3.2/driver/./common.h \
$(wildcard include/config/modversions.h) \
include/linux/version.h \
include/config/modversions.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/types.h \
include/asm-generic/types.h \
include/asm-generic/int-ll64.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitsperlong.h \
include/asm-generic/bitsperlong.h \
$(wildcard include/config/64bit.h) \
/home/f9daq/pcivme-3.2/driver/./plxbug.h \
/home/f9daq/pcivme-3.2/driver/./askpci.h \
include/linux/pci.h \
$(wildcard include/config/pci/iov.h) \
$(wildcard include/config/pcieaspm.h) \
$(wildcard include/config/pci/msi.h) \
$(wildcard include/config/pci/ats.h) \
$(wildcard include/config/pci.h) \
$(wildcard include/config/hotplug.h) \
$(wildcard include/config/pcieportbus.h) \
$(wildcard include/config/pcieaer.h) \
$(wildcard include/config/pcie/ecrc.h) \
$(wildcard include/config/ht/irq.h) \
$(wildcard include/config/pci/domains.h) \
$(wildcard include/config/pci/quirks.h) \
$(wildcard include/config/pci/mmconfig.h) \
$(wildcard include/config/hotplug/pci.h) \
$(wildcard include/config/of.h) \
$(wildcard include/config/eeh.h) \
include/linux/pci_regs.h \
include/linux/mod_devicetable.h \
include/linux/types.h \
$(wildcard include/config/uid16.h) \
$(wildcard include/config/lbdaf.h) \
$(wildcard include/config/arch/dma/addr/t/64bit.h) \
$(wildcard include/config/phys/addr/t/64bit.h) \
include/linux/posix_types.h \
include/linux/stddef.h \
include/linux/compiler.h \
$(wildcard include/config/sparse/rcu/pointer.h) \
$(wildcard include/config/trace/branch/profiling.h) \
$(wildcard include/config/profile/all/branches.h) \
$(wildcard include/config/enable/must/check.h) \
$(wildcard include/config/enable/warn/deprecated.h) \
include/linux/compiler-gcc.h \
$(wildcard include/config/arch/supports/optimized/inlining.h) \
$(wildcard include/config/optimize/inlining.h) \
include/linux/compiler-gcc4.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types.h \
$(wildcard include/config/x86/32.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/posix_types_32.h \
include/asm-generic/posix_types.h \
include/linux/init.h \
$(wildcard include/config/modules.h) \
include/linux/ioport.h \
include/linux/list.h \
$(wildcard include/config/debug/list.h) \
include/linux/poison.h \
$(wildcard include/config/illegal/pointer/value.h) \
include/linux/const.h \
include/linux/errno.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/errno.h \
include/asm-generic/errno.h \
include/asm-generic/errno-base.h \
include/linux/kobject.h \
include/linux/sysfs.h \
$(wildcard include/config/debug/lock/alloc.h) \
$(wildcard include/config/sysfs.h) \
include/linux/lockdep.h \
$(wildcard include/config/lockdep.h) \
$(wildcard include/config/lock/stat.h) \
$(wildcard include/config/trace/irqflags.h) \
$(wildcard include/config/prove/locking.h) \
$(wildcard include/config/prove/rcu.h) \
include/linux/kobject_ns.h \
include/linux/atomic.h \
$(wildcard include/config/arch/has/atomic/or.h) \
$(wildcard include/config/generic/atomic64.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic.h \
$(wildcard include/config/m386.h) \
$(wildcard include/config/x86/64.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor.h \
$(wildcard include/config/x86/vsmp.h) \
$(wildcard include/config/smp.h) \
$(wildcard include/config/cc/stackprotector.h) \
$(wildcard include/config/paravirt.h) \
$(wildcard include/config/m486.h) \
$(wildcard include/config/x86/debugctlmsr.h) \
$(wildcard include/config/cpu/sup/amd.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/processor-flags.h \
$(wildcard include/config/vm86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/vm86.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ptrace-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/segment.h \
$(wildcard include/config/x86/32/lazy/gs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32_types.h \
$(wildcard include/config/highmem4g.h) \
$(wildcard include/config/highmem64g.h) \
$(wildcard include/config/page/offset.h) \
$(wildcard include/config/x86/pae.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt_types.h \
$(wildcard include/config/x86/local/apic.h) \
$(wildcard include/config/paravirt/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/desc_defs.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/kmap_types.h \
$(wildcard include/config/debug/highmem.h) \
include/asm-generic/kmap_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_types.h \
$(wildcard include/config/kmemcheck.h) \
$(wildcard include/config/compat/vdso.h) \
$(wildcard include/config/proc/fs.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
$(wildcard include/config/highmem.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level_types.h \
include/asm-generic/pgtable-nopud.h \
include/asm-generic/ptrace.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/math_emu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/sigcontext.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/current.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/percpu.h \
$(wildcard include/config/x86/64/smp.h) \
$(wildcard include/config/x86/cmpxchg64.h) \
include/linux/kernel.h \
$(wildcard include/config/preempt/voluntary.h) \
$(wildcard include/config/debug/atomic/sleep.h) \
$(wildcard include/config/ring/buffer.h) \
$(wildcard include/config/tracing.h) \
$(wildcard include/config/numa.h) \
$(wildcard include/config/compaction.h) \
$(wildcard include/config/ftrace/mcount/record.h) \
include/linux/sysinfo.h \
/usr/lib/gcc/i686-linux-gnu/4.6/include/stdarg.h \
include/linux/linkage.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/linkage.h \
$(wildcard include/config/x86/alignment/16.h) \
include/linux/stringify.h \
include/linux/bitops.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bitops.h \
$(wildcard include/config/x86/cmov.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/alternative.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/asm.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpufeature.h \
$(wildcard include/config/x86/invlpg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/required-features.h \
$(wildcard include/config/x86/minimum/cpu/family.h) \
$(wildcard include/config/math/emulation.h) \
$(wildcard include/config/x86/use/3dnow.h) \
$(wildcard include/config/x86/p6/nop.h) \
include/asm-generic/bitops/fls64.h \
include/asm-generic/bitops/find.h \
$(wildcard include/config/generic/find/first/bit.h) \
include/asm-generic/bitops/sched.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/arch_hweight.h \
include/asm-generic/bitops/const_hweight.h \
include/asm-generic/bitops/le.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/byteorder.h \
include/linux/byteorder/little_endian.h \
include/linux/swab.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swab.h \
$(wildcard include/config/x86/bswap.h) \
include/linux/byteorder/generic.h \
include/asm-generic/bitops/ext2-atomic-setbit.h \
include/linux/log2.h \
$(wildcard include/config/arch/has/ilog2/u32.h) \
$(wildcard include/config/arch/has/ilog2/u64.h) \
include/linux/typecheck.h \
include/linux/printk.h \
$(wildcard include/config/printk.h) \
$(wildcard include/config/dynamic/debug.h) \
include/linux/dynamic_debug.h \
include/linux/string.h \
$(wildcard include/config/binary/printf.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/string_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/div64.h \
include/asm-generic/percpu.h \
$(wildcard include/config/debug/preempt.h) \
$(wildcard include/config/have/setup/per/cpu/area.h) \
include/linux/threads.h \
$(wildcard include/config/nr/cpus.h) \
$(wildcard include/config/base/small.h) \
include/linux/percpu-defs.h \
$(wildcard include/config/debug/force/weak/per/cpu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/page_32.h \
$(wildcard include/config/hugetlb/page.h) \
$(wildcard include/config/debug/virtual.h) \
$(wildcard include/config/flatmem.h) \
$(wildcard include/config/x86/3dnow.h) \
include/asm-generic/memory_model.h \
$(wildcard include/config/discontigmem.h) \
$(wildcard include/config/sparsemem/vmemmap.h) \
$(wildcard include/config/sparsemem.h) \
include/asm-generic/getorder.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/msr-index.h \
include/linux/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ioctl.h \
include/asm-generic/ioctl.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cpumask.h \
include/linux/cpumask.h \
$(wildcard include/config/cpumask/offstack.h) \
$(wildcard include/config/hotplug/cpu.h) \
$(wildcard include/config/debug/per/cpu/maps.h) \
$(wildcard include/config/disable/obsolete/cpumask/functions.h) \
include/linux/bitmap.h \
include/linux/bug.h \
$(wildcard include/config/generic/bug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bug.h \
$(wildcard include/config/bug.h) \
$(wildcard include/config/debug/bugverbose.h) \
include/asm-generic/bug.h \
$(wildcard include/config/generic/bug/relative/pointers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/paravirt.h \
$(wildcard include/config/transparent/hugepage.h) \
$(wildcard include/config/paravirt/spinlocks.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/nops.h \
$(wildcard include/config/mk7.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/special_insns.h \
include/linux/personality.h \
include/linux/cache.h \
$(wildcard include/config/arch/has/cache/line/size.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cache.h \
$(wildcard include/config/x86/l1/cache/shift.h) \
$(wildcard include/config/x86/internode/cache/shift.h) \
include/linux/math64.h \
include/linux/err.h \
include/linux/irqflags.h \
$(wildcard include/config/irqsoff/tracer.h) \
$(wildcard include/config/preempt/tracer.h) \
$(wildcard include/config/trace/irqflags/support.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irqflags.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/cmpxchg_32.h \
$(wildcard include/config/x86/cmpxchg.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/atomic64_32.h \
include/asm-generic/atomic-long.h \
include/linux/spinlock.h \
$(wildcard include/config/debug/spinlock.h) \
$(wildcard include/config/generic/lockbreak.h) \
$(wildcard include/config/preempt.h) \
include/linux/preempt.h \
$(wildcard include/config/preempt/count.h) \
$(wildcard include/config/preempt/notifiers.h) \
include/linux/thread_info.h \
$(wildcard include/config/compat.h) \
$(wildcard include/config/debug/stack/usage.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/thread_info.h \
$(wildcard include/config/ia32/emulation.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ftrace.h \
$(wildcard include/config/function/tracer.h) \
$(wildcard include/config/dynamic/ftrace.h) \
include/linux/bottom_half.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/barrier.h \
$(wildcard include/config/x86/ppro/fence.h) \
$(wildcard include/config/x86/oostore.h) \
include/linux/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwlock.h \
include/linux/rwlock_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/spinlock.h \
include/linux/rwlock.h \
include/linux/spinlock_api_smp.h \
$(wildcard include/config/inline/spin/lock.h) \
$(wildcard include/config/inline/spin/lock/bh.h) \
$(wildcard include/config/inline/spin/lock/irq.h) \
$(wildcard include/config/inline/spin/lock/irqsave.h) \
$(wildcard include/config/inline/spin/trylock.h) \
$(wildcard include/config/inline/spin/trylock/bh.h) \
$(wildcard include/config/uninline/spin/unlock.h) \
$(wildcard include/config/inline/spin/unlock/bh.h) \
$(wildcard include/config/inline/spin/unlock/irq.h) \
$(wildcard include/config/inline/spin/unlock/irqrestore.h) \
include/linux/rwlock_api_smp.h \
$(wildcard include/config/inline/read/lock.h) \
$(wildcard include/config/inline/write/lock.h) \
$(wildcard include/config/inline/read/lock/bh.h) \
$(wildcard include/config/inline/write/lock/bh.h) \
$(wildcard include/config/inline/read/lock/irq.h) \
$(wildcard include/config/inline/write/lock/irq.h) \
$(wildcard include/config/inline/read/lock/irqsave.h) \
$(wildcard include/config/inline/write/lock/irqsave.h) \
$(wildcard include/config/inline/read/trylock.h) \
$(wildcard include/config/inline/write/trylock.h) \
$(wildcard include/config/inline/read/unlock.h) \
$(wildcard include/config/inline/write/unlock.h) \
$(wildcard include/config/inline/read/unlock/bh.h) \
$(wildcard include/config/inline/write/unlock/bh.h) \
$(wildcard include/config/inline/read/unlock/irq.h) \
$(wildcard include/config/inline/write/unlock/irq.h) \
$(wildcard include/config/inline/read/unlock/irqrestore.h) \
$(wildcard include/config/inline/write/unlock/irqrestore.h) \
include/linux/kref.h \
include/linux/wait.h \
include/linux/device.h \
$(wildcard include/config/debug/devres.h) \
$(wildcard include/config/cma.h) \
$(wildcard include/config/devtmpfs.h) \
$(wildcard include/config/sysfs/deprecated.h) \
include/linux/klist.h \
include/linux/mutex.h \
$(wildcard include/config/debug/mutexes.h) \
$(wildcard include/config/have/arch/mutex/cpu/relax.h) \
include/linux/pm.h \
$(wildcard include/config/pm.h) \
$(wildcard include/config/pm/sleep.h) \
$(wildcard include/config/pm/runtime.h) \
$(wildcard include/config/pm/clk.h) \
$(wildcard include/config/pm/generic/domains.h) \
include/linux/workqueue.h \
$(wildcard include/config/debug/objects/work.h) \
$(wildcard include/config/freezer.h) \
include/linux/timer.h \
$(wildcard include/config/timer/stats.h) \
$(wildcard include/config/debug/objects/timers.h) \
include/linux/ktime.h \
$(wildcard include/config/ktime/scalar.h) \
include/linux/time.h \
$(wildcard include/config/arch/uses/gettimeoffset.h) \
include/linux/seqlock.h \
include/linux/jiffies.h \
include/linux/timex.h \
include/linux/param.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/param.h \
include/asm-generic/param.h \
$(wildcard include/config/hz.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/timex.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/tsc.h \
$(wildcard include/config/x86/tsc.h) \
include/linux/debugobjects.h \
$(wildcard include/config/debug/objects.h) \
$(wildcard include/config/debug/objects/free.h) \
include/linux/completion.h \
include/linux/ratelimit.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/device.h \
$(wildcard include/config/acpi.h) \
$(wildcard include/config/x86/dev/dma/ops.h) \
$(wildcard include/config/intel/iommu.h) \
$(wildcard include/config/amd/iommu.h) \
include/linux/pm_wakeup.h \
include/linux/io.h \
$(wildcard include/config/mmu.h) \
$(wildcard include/config/has/ioport.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io.h \
$(wildcard include/config/xen.h) \
include/asm-generic/iomap.h \
$(wildcard include/config/generic/iomap.h) \
include/asm-generic/pci_iomap.h \
$(wildcard include/config/no/generic/pci/ioport/map.h) \
$(wildcard include/config/generic/pci/iomap.h) \
include/linux/vmalloc.h \
include/xen/xen.h \
$(wildcard include/config/xen/dom0.h) \
include/xen/interface/xen.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/interface_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pvclock-abi.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/xen/hypervisor.h \
include/linux/irqreturn.h \
include/linux/pci_ids.h \
include/linux/pci-dma.h \
include/linux/dmapool.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/scatterlist.h \
include/asm-generic/scatterlist.h \
$(wildcard include/config/debug/sg.h) \
$(wildcard include/config/need/sg/dma/length.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pci.h \
include/linux/mm.h \
$(wildcard include/config/sysctl.h) \
$(wildcard include/config/stack/growsup.h) \
$(wildcard include/config/ia64.h) \
$(wildcard include/config/ksm.h) \
$(wildcard include/config/have/memblock/node/map.h) \
$(wildcard include/config/have/arch/early/pfn/to/nid.h) \
$(wildcard include/config/debug/pagealloc.h) \
$(wildcard include/config/hibernation.h) \
$(wildcard include/config/hugetlbfs.h) \
include/linux/gfp.h \
$(wildcard include/config/zone/dma.h) \
$(wildcard include/config/zone/dma32.h) \
include/linux/mmzone.h \
$(wildcard include/config/force/max/zoneorder.h) \
$(wildcard include/config/cgroup/mem/res/ctlr.h) \
$(wildcard include/config/memory/hotplug.h) \
$(wildcard include/config/flat/node/mem/map.h) \
$(wildcard include/config/no/bootmem.h) \
$(wildcard include/config/have/memory/present.h) \
$(wildcard include/config/have/memoryless/nodes.h) \
$(wildcard include/config/need/node/memmap/size.h) \
$(wildcard include/config/have/memblock/node.h) \
$(wildcard include/config/need/multiple/nodes.h) \
$(wildcard include/config/sparsemem/extreme.h) \
$(wildcard include/config/have/arch/pfn/valid.h) \
$(wildcard include/config/nodes/span/other/nodes.h) \
$(wildcard include/config/holes/in/zone.h) \
$(wildcard include/config/arch/has/holes/memorymodel.h) \
include/linux/numa.h \
$(wildcard include/config/nodes/shift.h) \
include/linux/nodemask.h \
include/linux/pageblock-flags.h \
$(wildcard include/config/hugetlb/page/size/variable.h) \
include/generated/bounds.h \
include/linux/memory_hotplug.h \
$(wildcard include/config/memory/hotremove.h) \
$(wildcard include/config/have/arch/nodedata/extension.h) \
include/linux/notifier.h \
include/linux/rwsem.h \
$(wildcard include/config/rwsem/generic/spinlock.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/rwsem.h \
include/linux/srcu.h \
include/linux/rcupdate.h \
$(wildcard include/config/rcu/torture/test.h) \
$(wildcard include/config/tree/rcu.h) \
$(wildcard include/config/tree/preempt/rcu.h) \
$(wildcard include/config/rcu/trace.h) \
$(wildcard include/config/preempt/rcu.h) \
$(wildcard include/config/tiny/rcu.h) \
$(wildcard include/config/tiny/preempt/rcu.h) \
$(wildcard include/config/debug/objects/rcu/head.h) \
$(wildcard include/config/preempt/rt.h) \
include/linux/rcutree.h \
include/linux/topology.h \
$(wildcard include/config/sched/smt.h) \
$(wildcard include/config/sched/mc.h) \
$(wildcard include/config/sched/book.h) \
$(wildcard include/config/use/percpu/numa/node/id.h) \
include/linux/smp.h \
$(wildcard include/config/use/generic/smp/helpers.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/smp.h \
$(wildcard include/config/x86/io/apic.h) \
$(wildcard include/config/x86/32/smp.h) \
$(wildcard include/config/debug/nmi/selftest.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec.h \
$(wildcard include/config/x86/numaq.h) \
$(wildcard include/config/eisa.h) \
$(wildcard include/config/x86/mpparse.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mpspec_def.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/x86_init.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/bootparam.h \
include/linux/screen_info.h \
include/linux/apm_bios.h \
include/linux/edd.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/e820.h \
$(wildcard include/config/efi.h) \
$(wildcard include/config/intel/txt.h) \
$(wildcard include/config/memtest.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/ist.h \
include/video/edid.h \
$(wildcard include/config/x86.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apicdef.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/apic.h \
$(wildcard include/config/x86/x2apic.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/fixmap.h \
$(wildcard include/config/provide/ohci1394/dma/init.h) \
$(wildcard include/config/x86/visws/apic.h) \
$(wildcard include/config/x86/f00f/bug.h) \
$(wildcard include/config/x86/cyclone/timer.h) \
$(wildcard include/config/x86/intel/mid.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/acpi.h \
$(wildcard include/config/acpi/numa.h) \
include/acpi/pdc_intel.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa.h \
$(wildcard include/config/numa/emu.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/topology.h \
$(wildcard include/config/x86/ht.h) \
include/asm-generic/topology.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/numa_32.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/mmu.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/realmode.h \
$(wildcard include/config/acpi/sleep.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/io_apic.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/irq_vectors.h \
include/linux/percpu.h \
$(wildcard include/config/need/per/cpu/embed/first/chunk.h) \
$(wildcard include/config/need/per/cpu/page/first/chunk.h) \
include/linux/pfn.h \
include/linux/mmdebug.h \
$(wildcard include/config/debug/vm.h) \
include/linux/rbtree.h \
include/linux/prio_tree.h \
include/linux/debug_locks.h \
$(wildcard include/config/debug/locking/api/selftests.h) \
include/linux/mm_types.h \
$(wildcard include/config/split/ptlock/cpus.h) \
$(wildcard include/config/have/cmpxchg/double.h) \
$(wildcard include/config/have/aligned/struct/page.h) \
$(wildcard include/config/want/page/debug/flags.h) \
$(wildcard include/config/aio.h) \
$(wildcard include/config/mm/owner.h) \
$(wildcard include/config/mmu/notifier.h) \
include/linux/auxvec.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/auxvec.h \
include/linux/page-debug-flags.h \
$(wildcard include/config/page/poisoning.h) \
$(wildcard include/config/page/guard.h) \
$(wildcard include/config/page/debug/something/else.h) \
include/linux/uprobes.h \
$(wildcard include/config/arch/supports/uprobes.h) \
$(wildcard include/config/uprobes.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/uprobes.h \
include/linux/range.h \
include/linux/bit_spinlock.h \
include/linux/shrinker.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32.h \
$(wildcard include/config/highpte.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable_32_types.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/pgtable-3level.h \
include/asm-generic/pgtable.h \
include/linux/page-flags.h \
$(wildcard include/config/pageflags/extended.h) \
$(wildcard include/config/arch/uses/pg/uncached.h) \
$(wildcard include/config/memory/failure.h) \
$(wildcard include/config/swap.h) \
$(wildcard include/config/s390.h) \
include/linux/huge_mm.h \
include/linux/vmstat.h \
$(wildcard include/config/vm/event/counters.h) \
include/linux/vm_event_item.h \
include/linux/slab.h \
$(wildcard include/config/slab/debug.h) \
$(wildcard include/config/failslab.h) \
$(wildcard include/config/slub.h) \
$(wildcard include/config/slob.h) \
$(wildcard include/config/debug/slab.h) \
$(wildcard include/config/slab.h) \
include/linux/slub_def.h \
$(wildcard include/config/slub/stats.h) \
$(wildcard include/config/slub/debug.h) \
include/linux/kmemleak.h \
$(wildcard include/config/debug/kmemleak.h) \
include/asm-generic/pci-dma-compat.h \
include/linux/dma-mapping.h \
$(wildcard include/config/has/dma.h) \
$(wildcard include/config/arch/has/dma/set/coherent/mask.h) \
$(wildcard include/config/have/dma/attrs.h) \
$(wildcard include/config/need/dma/map/state.h) \
include/linux/dma-attrs.h \
include/linux/dma-direction.h \
include/linux/scatterlist.h \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/dma-mapping.h \
$(wildcard include/config/isa.h) \
$(wildcard include/config/x86/dma/remap.h) \
include/linux/kmemcheck.h \
include/linux/dma-debug.h \
$(wildcard include/config/dma/api/debug.h) \
/usr/src/linux-headers-3.5.0-28-generic/arch/x86/include/asm/swiotlb.h \
$(wildcard include/config/swiotlb.h) \
include/linux/swiotlb.h \
include/asm-generic/dma-coherent.h \
$(wildcard include/config/have/generic/dma/coherent.h) \
include/linux/dma-contiguous.h \
$(wildcard include/config/cma/areas.h) \
include/asm-generic/dma-mapping-common.h \
include/asm-generic/pci.h \
/home/f9daq/pcivme-3.2/driver/./main.h \
 
/home/f9daq/pcivme-3.2/driver/./plxbug.o: $(deps_/home/f9daq/pcivme-3.2/driver/./plxbug.o)
 
$(deps_/home/f9daq/pcivme-3.2/driver/./plxbug.o):
/pcivme-3.2/Makefile
0,0 → 1,63
#****************************************************************************
# Copyright (C) 2001-2004 ARW Elektronik Germany
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU 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.
#
# Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)
#****************************************************************************
 
#****************************************************************************
#
# Makefile - global makefile for ARW Elektronik PCIVME interfaces driver
# and library and test programs
#
# $Log: Makefile,v $
# Revision 1.1 2004/08/13 19:36:03 klaus
# conversion to kernel-version 2.6, released version 3.0
#
#
#****************************************************************************
 
all:
cd driver;\
make;\
cd ../lib;\
make;\
cd ../test;\
make;\
cd ..
 
clean:
cd driver;\
make clean;\
cd ../lib;\
make clean;\
cd ../test;\
make clean;\
cd ..
 
# root installation only
install:
cd driver;\
make install;\
cd ../lib;\
make install;\
cd ..