Subversion Repositories f9daq

Compare 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
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: pcivme-3.2/test/simpleTest.c
===================================================================
--- pcivme-3.2/test/simpleTest.c (nonexistent)
+++ pcivme-3.2/test/simpleTest.c (revision 9)
@@ -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;
+}
+
Index: pcivme-3.2/test/Makefile
===================================================================
--- pcivme-3.2/test/Makefile (nonexistent)
+++ pcivme-3.2/test/Makefile (revision 9)
@@ -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
+
+
Index: pcivme-3.2/doc/pcivme_doc.pdf
===================================================================
--- pcivme-3.2/doc/pcivme_doc.pdf (nonexistent)
+++ pcivme-3.2/doc/pcivme_doc.pdf (revision 9)
@@ -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æßœà ã´¡._à
+"\­½„çIL¾Šô&1–®¯Æ<œ0âìeŽ`Z„™’šò²ÐÃ0 s—DVà4O½º’Øø`LóÂmO1]ÝÁ³Ž"ÁYRUGNʀƒ¬\8óï,D‰½ë½‚AicRL]£$Ûj^ü +ª'0g¯&BÐÌ +”¤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&
+p8Š’L{.{6Lo€J +x‡Ý2ñïàˆ>=èûoYê¾A÷Ȑ$†ÿüÍý°zßU¸~®»‡'cbíFφrj%+øXv˜4®°ÙÔ“Ê +•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Õ
+̏ü~X6˜.³jyײ*mÛ±¬Úkãm‰eјÃÉ`LÏ%=Ôt&­Ú¢$%®RÞtŠÕ×j‹¡YÆ!®•õ ÂÛb1è›Wõx&}0¤Š†TËÚèQÊ.zþ,á«·ÂÙ£ú·#ê儤:êQø„¹añª%š¹:;‚ÂÒVÉEueõuŒòÆÝ ˆkžÚ°±o³Šˆ#_j®’7¿xU0(ó±¾"ú +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
+ÿØÿàJFIFÿÛC +
+
+ +
+  + ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ "ÿÄ
+ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ
+ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ
+$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ƵÔu'µ…ÛTԋ2)'í²òHÿz¥ûn¡ÏüLõ/ü +—ÿŠªÖ#ýÛþ¹/ò6Úô£Yh*U'w«öíCþ‚š—þËÿÅQöíCþ‚z—þËÿÅSvÒmöªä‡d/i>ìx½Ô?è)©àl¿üUmÔ?è'©àl¿üU7n{Q·Ú—$; ö“îÇ}·Pÿ ¦¥ÿ²ÿñT}·Pÿ ¦¥ÿ²ÿñTݦ“i£’{I÷cþÛ¨ÐSRÿÀÙøª>Û¨ÐSRÿÀÙøª`Z]¹4{8vAí'ݎûn¡ÿAMKÿeÿâ¨7º‡mSRÿÀÙøªfÚ]´ù!Ù´Ÿv;íº‡ý5/ü +—ÿŠ£íº‡ý5/ü +—ÿŠ¦â“m/gÈ=¤û±ÿmÔ?è)©àl¿üU/Ûuú¦¥ÿ²ÿñTͦ¾´rC²i>ìwÛu ÿÈSRÿÀÙøª>Û¨ÐSRÿÀÙøªnÓF(ä‡dÒ}Øÿ¶êôÔ¿ð6_þ*“íºý5/ü +—ÿŠ¦íö¤Û͐ìƒÚ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û
+éàó x'A!¶H2¬H9«#DÔ-Öâ8%·”M Eæ1hŠg¾lþb«ÄãI¸ŠÚöa Ò(’V.[í +ʆ$Ÿf8ãïs\“¯.owc²xòûËS0¡ƒÁi1Qê—ÞEôÑEÊ·,Ǐ^Ÿýz¤eº´\‹t uùF?„ ‘Ï¡èzâ©âb¶FK&ìhHÑÄ{"¡ÏF<Ã­WkØrJò±8þèöæ³6yo’èÀwç®?È«PÀÒÚÉr[™å³ócÓ×Ò°–*OÈ觃ævJâ½üîb¤*î'ߜþ˜¨•–iÕ¯.'$®Y¶o+è0Xg󋸫ڿÝRO4ä†LI$‘1òÎ×ʜ{˜è*ÉɽYQŠ] !H%¼†;xåU‘Ö2÷IÆFÕÈëÓ ~½+Ð<=©ÜM£Ã)‘oær[¾Ð ÈùFqМúם¨YeEb7,ª8÷#?‰Zî¼<Óȋ–òËчn7*¼îÆ×<‚GT\H¼bÕ#Çüòú®|/®ƒÅ¬U@JÂöäÖ&ÞÙ¯N—À>·ÆȶûÑgÆ£qÿ\£þoRí¨íF5)ÿë”Íêk|á×¾uúQ]d_v¹= ¨®²/¹\,ô#Ó@þ͵ÿ®)ü…XÇj=0IJÓþ¸§þ‚*ÎÚô"ô<¹nȱKŒÔ¸Å¦",Q¶¥ÛFڋb¥Ú(Ú(,{ÐEJ4cŠÄXúQŠ“o4»{Ñp"Å&*\v¥Å í÷¥ÅKŠ6Ñp"ÅKjé +Ô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
+9æ=>ŸçÖ²*Dvû‹¹ +.à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µ
+Ä{qFßz“Ô»Fh;ZÊhW§ý„ÿщGƒw‹Õ ìÑ ÿº”íxĂ÷áOý”¾Á¹Fç-j¿LmŽ¹+|ge€Í×Øx¦úîÞa毝¤ùltôÁü~µ–TËʾýõ­=ZU·ñuõÅÚy–јË.õ( ~uœ¡kõ'“Û­f9L²Â…¥`NÏ-ÏÌ;ôíŽ?Îj]æ àwÈëN¿•+(*œc5o@’8¦åxÑ_ï¾ÜüÊN;“Œà¸¢âŠL†[;„‰de`‡‚HÀÏ^;ãð¨…ÏÙ.bÞ!I- ,3ž dNG§uu +ͺÚÅ/üµSæ„!c§©Æ};Vz\Çkr±´W2¶@
+F{ŽHéЯõ¤;j&ç*³»G”?wË^8¸ÁÏØxc(c1í]ŒHùÀ ¾[»–ǯSӌ¼|Gs£<»<ܟ”ÿ{ŒŸ~+²Ða¶}œ°Þ,à±ó—p‹ËÌlG±' ç óŠi +=Y¡â1þ›ÿ¦ÔÖNÚÔÕîRîï1€UW‡z¡èk¶E“ÖNÄ[k:Aboúáþ…%kmö¬¹Æ5™¿ëÞ/ý
+JU>¨üGI¡uÖE÷+“кŠë"û•ÊÎÃÎôqÿkú÷ÿAsµ_Fñ$°ÿ¯hÿôW6çµu­Ž&µ#Å©vѷځX‹b¥Åh¸cލ½ê]¾Ôm ,E·Š1Ž•.ßZM´ˆöÒâ¤ÅFzS mÍy©6ñÅ.ÚW í¤ÅK´Q¶‹…ˆ±KŽÔý¸íFßjw ~"ðýéöOý”Ï d^ *F-Tg· øþ•¶‘‰"¸B +Î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Œ
+.+4»jLsI´zÑp°ˆ5 ¦ãҊÆ{›Ãc…ñW>!¹ÿv?ýµ‘Š×ñVˆn~‘ÿ赬š=Ã’–Š%§q´psžjKx–YѶ¡ûÇÐPqç!eÊ)ù#<@üF+¶ðåÁ7ÑoÝ£: \ÊŽ›²@ø½>•È<B‡ÎO‘ðàHeÏ^1ïЎõÕx|ºÎ«|ˍdVówSiÎíøú_zE@èo¼Å +´¸ã§SU¶Õëåjœ +VÛ]ØÊkR=§ò®sU×äÇüúÅÿ¡É]>sZ¿üŒcþ}bÿÐä¢[ SkBê+¬‹îW'¡uÖE÷+nrzÿŠ{Mÿ¯H¿ôWöÕOø§´Ïúô‹ÿ@¡JÔÁ­H¶ÑŠ—my ,EŠ1ëRímÀ V"ÛތT›ivó@X‹£Ô»i1Æ( ãŠ6ö5(Z6úP"ÛFÞ*\Rmö v#ÛF*]´`fX‹mj\QŒÐ asïUíb0FÊ_~]›<ô'É=çש5nq„Þ¡³–æ°Øâ<Qÿ# +ÏÒ?ýµ‘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Ø¡‰
+½F2G¯\~½ªe&¶*1OrÙb¸Öñ +ü—+¥+Ÿ,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à
+l¶ù¹I£#j© +»¯µ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Ãÿ 
+Ò+ÛCÃkÿƕ‘ÿ.pÿè´¶úÓ¹¶³µû{›ò&+rñˆ©Á-Øg¶zgÞµ6žôÆh°ß:’Œ €A!²ó +è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
+ c¿ÌOQÓ#Ôbµ“HÒ\Ü\ÆcvÆÝ®_ ÎáÎOeÆOj[é/P1Á{k4âT’9…Ð.©ÒT¼œ÷9囥Ù¥R$š¶ëæ¼jø £¨^Ÿg[1kĈK¼|–Àä9ãý‘ÓÞ­0ˆGp#y•BH`ÚFâB’€óëZ¥k‰oå{«Eƒd[cJ\ÌN1‘Áì)#8¨ò²[æ’2©"™)bÛ5˜šO0±"Éb˜ º’=8<û u£RŒ¼ Æ¡Ø`„=Á÷¥°Ž`³M:4Oò**¶åÆô§Ð"Ò§®çWáV°ûe”k ¿mËîýÌa±ßÓ»~}ÆÞÕÀøH³kÖۂ¿ÓýÓ^ƒ´Ó‰¥'x”5XÙ¬]UÌlx%}ù¬¢ó¬»ŒJÊÎAToº3òžzñÉý3[:®VȐ Ã+œImádñýQÂǹBãø@ʜ¼“U¹¡âэq¬QŸütV-nøǍe=àOåX&¤Oqh¦æ”håRÝiKÜG:Åü¥vÕ䃀yÆz_Z¶ò —yÆÙ¢•\Ä6æèÝùÎx5Öø<3]Å<Œ]¥W'•NÿÄO,_C\Õµ¬·-²(Ë{öÜxnÆKKÊ[¾Ü…!9¶ã’zóíڋž¦ý»´°G#£#:*F0HéRmö¢%@@)àU\c6渿Œx™¿ëÎýZî6ó\OŠ<PÃþœáÿÐå¦ Q]d_r¹= ¨®²/»RÊ2¼4?â˜Òxÿ—(ôZx¬ÿ ÿÈ­¤ה?ú­:B·<b±/!h5˜' –¹¹ò$ácÆy:õçÒ·±U&òå–'Ü0’à|0?֔¶*;ž)¤]ØXÛjT¶–IvÈ-ÅМX Ïr=³Z¨ÿ*±ÿË1‘Îx·'Ö©kºf…gö_ì‹ù®¤f!•ÀÀúçô#éÞç^Â¯Ê ÜìF0¤íôç¨íõ¤sÖø‘XYHuW0ºJæò?u@\ v#Ï¥6/s}p&FTe~o8Î8ùv€xî:RÛùQÞ^ò.b#vcž?¼W­C°C«^. ctIH»hÀÀ“ ®y4×t]óíÃçGòú¸õüiZxIÞ²ÄÄH\AÎqÛüÿ:È´±–õ +¼Œ¨ñ»!£ûÙ$ŒcŸÊ¯_ørÚÊÑ%‹XÓîÑÅqÈÀÏóÐútI‹ì÷,ZÍs™„ˆ„,ž\g$~•Rxí¦Ô¤Xä#Ì‘›æ‰Y“û¿0ãŸÂ©Y²\4¾kyË·fæí†Ï$û;çÖ´¯m¯´îw\ÉR\›)[*KÙÇ®õ£fZµ=¼c·•šá£îîLøg?…U³xâ¾_*!"̓µóµ¾\“éó×׎0j÷šå$1(´N‡wÜ¥Iè{J¯b.­Ë4÷m00ˆ@s¨Xè2½(2Œ’ƒL5&… >b³ãr†ÀeȤÓæŒIy¦GY”ª>n08çpúm«w+$ÖÑÇHåÞ² á]0F1ž¼ŸÃ®p*ÍÂA8¹îdžHݤs–ùC?ñïҗ@Œ—³³:ó¯Úrÿý«Ñ¶ûWœx0ÿÄúÐcûÿú W¥bš4 ½×êgjã-þð¬XÍmëGýŒÿ¬8¦jÎsÆ|jÐûÛ'õ®x×Eã_ù ڟ[Tþm\í½ÂŒÕˆ¬ægT÷j» +”IÛ{zžŸ•“(E²‘µp=OJжÓӍùsúV„6Ìç¥kZi猊
+Q!ÓíHÚàvÅt¶P•"£´² Ž+R(Š
+ã¥?S€¥ VŠá¼T1â†ÿ¯(ô9k¼®şò57ýyCÿ¡ËMwBê+¬‹îW'¡uÖE÷(c3|3ÿ"¶“ÿ^Pÿè´ë3Ã?ò+éõåþ€+NrÚ̲XÙ\À2\[_]†ôÁÈÿџ¥u5ÊxžêÓN´¸»¼‡Ì‘âš%¤aç# +NéîEL†9Ö#ðäsZÿ`Ï,ÎΉ8Àç¶ß§ñ~z5iØû ‚ägŒª“ùõ«‡‡´È4ùïíCÇ<n¥"Iƒ Ë(ÇÝÎ0x$úr{ґ$p¬‘îÜv›ÎT`äg ç“AÏVîH‚Τ½žDò¥”¸F!Cv-ϸùO'<ãÖ¢x­s{-¼žm²¼k¸€@Åù?‚÷õ«VÃìz¥ßöaÝ r…QNym§¦3ééYsIéó˜¨fàcoN½MQ]~âÇöþۚúâºY]ÝRT±'‚ÊÀ{ã<T—š¤‘±±kVl‡&Q `@ÈÁ^:v>µE/´ƒ3[jo.>v[¨À'¹Ç”>8 +øfÒtíVUO¼T ¶ýv  ÒÄ—ŽäÌ®QpÅ\ƒÁgžOLÕ½WÍ]fîv8¸tPŒN~b8õ¬è7Éx!Uw}ÿêÙ@9éƒV§g}FW…šWykc,Ğ¿^:LVLl‰u &Ež21’Ù¸þGò5kHf—RŠ•¶Ë”ËGNqMži\ÈüÂNhÀ-ž8ùx8¿jM<BºÅ²’â# V,0G&€qMlk‡!·+!J‚‚0Jc”ÁðG@9¦÷I£r/̊ éÍ#€ßðaÿ‰ý§üÿAjô¦8æž.|Km¸Ãð;|^1ÂÓGVá~¦f³.mÏB +s&ì«àþ”²h6 Qµ»9´,T;…û½ ;šÉÖ,ŸEŠÙ¡¹yRFu (P¸þgÓµR5z–üSjn'°¸.Ô/©È$ÿQYpA \¢îoï75s[–Yš#6HÅ{IÍVÆLqHv8™Ïzѵ±,FE_³Óú+jÚÈ.8 e M< qZÐZ…*Äp…íS¥1#T QE袊+…ñgüMÿ^Pÿèr×u\'‹?äjoúò‡ÿFKMní ¨®²/¹\ž…ÔWYÜ¡›áŸù´úò‡ÿ@§Yžÿ‘[Hÿ¯(ôZt€+Ï>&G;\[O0æ5Lc3qü6.+ÐÏJóψzúlzo’)æMÞò.1Ö“‘…Ó\¢Û¼ñ[ÂNæ EfÿkjääãñÁ¤#ɘÛ;á,[Ïn¸èGó­ +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
+‘· ÛAHô«Ú½‡ÒTŠî!$Ž7«Ú;íÚX ëÙ½+bçK¸ŽG;윱ÏÊ·û?CþMQ‹Â·7rnz’ÙŸÃëPªG¹ÑUZò³"Ã|r¶¤3 ƒ+’s½gÊ­wc>€7ø{îÓÁº‚ÇÄöh€cï6@ÿ¾hOß8»¶Úãk-‚3Ó§¨£Úù1Uo”óá&IOÇßü*們oaÄû²çiàr?vð†^/"{N9-Ïþ;Tî´mŠ—’f +/8î(U`öe¿hö‰ž‹֒æAKË>ÝÄgŒã©çZŽÜÅ=ºÎpÌË°‚Ÿ®C[úÕÆÔWq¸CþOôª#L¼ŸaU)lsJ”â¬ã©¯á 'ˆ-xànÿÐ +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¥ 
+(¢€
+(¢€
+(¥ ®şò57ýyCÿ£%®î¸?ÈÒßõåþ‡-4í ¨®²/»\ž…ÔWYÜ¡›áŸùôŸúò‡ÿ@§Yžÿ‘[Hÿ¯(ôZt€JäüEaeqq%Äöë$˄V$Ž08>¤þfºÊɟLi噥9 +&Tz ý( _sŽ°ÐÞi Ƃ5?ÝtøTÕÙZÚ¤…QS픢–Èᇄ×ûµf¼
+V<Ýx5Øm”m‚‹rCAps…ýÑRÇ¥ÝÇþ®yWèØ®£hô£h¥Ê‡vsŸaÔ#í“ÿßT‹§ß¨À»”­t›EG¥.Hö ³šm:ùÇÍu)üj3£LØÜä'Þº£Ò£ÐP¡Ð9Ÿs˜M"æ3”žAøÔ á¥qÒºí£Ò—ҚIl +·¹•§i‹j8ª(éE1E4 4ú(iØ¥¢€
+(¢€
+(¢€
+(¢€
+(¢€
+á|Yÿ#Sה?úµÝ× âÏù›þ¼¡ÿÐ妀»¡uÖE÷+“кŠë"û”09ÏëÚ,>Ó"›WÓã‘-"VF¹@T„gƒZ?ð‘è?ôÓð*?ñ«×*Y+’ÔìäyI€7ÿá#Ðè7¦ÿàTãGü$zýôßü
+Oñ®Cû>_îš?³¥þé¢Àuÿð‘è?ôÓð*?ñ£þ=þƒzoþGþ5ÈgËýÓGö|¿Ý4X¿þ=þƒzoþGþ4ÂG ÿÐoMÿÀ¸ÿƹìùºhþϗû¦‹×ÿÂG ÿÐoMÿÀ¨ÿƏøHô/ú +i¿øø×!ý/÷MÙòÿtÑ`:ÿøH´ú +é¿øøÑÿ ƒÿ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
+xœí\Koã6¾Èð¹W$E=€E;Žï èèè¡@÷Ò¿_9ö i~3cJqvµÛ §Ð"5œÇ7Õlþ}|øgÓLqŒÛ°Z¿ùòûæן6ÓÍæ˟û—LJØm‡Mß»m¿yùmóóÑm\»yùcó©qÍÑ9÷ìzœûeóò×ãÃó4ᳶFè·íy +¿qþuÎóú‰ŠæôÛ'7žGºm¼Œ4‡óˆŸ(¸<ÓÑ3žžiÏ#!­ÓœGÆíH#Žfu4ë©qFx½½éˆžQ{Í»ëtÍþ<æ<3‰lv瑖ž.OÐï}Å«Ê9{àYë"+v4Ï5“^,'Èw@¢?ÄDPÁA›°Ê2‰ºN¥W ÏÓ3-Ìâ×\žr]¼pÚ¹d83’&NlD‰ðĒ#N,Ú:u+¨¾ÈHxÓsӎd¦AßA©Ý +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
+P6?‚`{ýLë^3WjÄÒ ªQ³'!±# ¼Jˆ•,ƒÞ  LâtÄéÁب´WÔ5Õɳ£}ÖØ°îÈ,ëâÃr ‰Ñ{,áJ çwÄ6„êä15š¶ž×- µÜAPW̚ål™šÌ® +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* ••¡ë
+bëgŒj9§Ô)$|F”?§6aU±>0…FeDÍp,»hG)ià³ #ë¨qr´Na[©À#:(\ÖH!7µòŒ¼JÙúëÿ=Û4³´*óüXÁ«þt³^^½UÿÐË‘F½ÏÀÊÚ¼Éå.`Ûò—çp¹¢ÊÜN iÙkøÁåY\®ixWk`¦lB„–£»ÉæH¼Þ"‹šÞ2|x(T¼ž¯Ã‹š“Öóe‰÷ˆí²P]«ñëUf#þÉ®‰ÿ‚”ˆ¦A¨yBíÛА»_˜Wp͚±!ÁHBͽÀÅì ®"Ø3aj@cI0jßA¹æ¤Pӓ²G #Õr²iLÍ©‘y½Žáýª…·µ ¼Ã°…gEü«8H*¸·¬Ê¼,ø CóÁ»…!]è:¡Ä±"îݾð†!UE;²¬/ã_ôëN……†0À5Էқ,³Ë0¬:õ}7ÞÔèoW°V%*èý°¼Ls^ƒÔÿ%w*tǏÝû¥z÷°+Õ¼šb} +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
+xœí]Ɏ$¹ +½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
+›ä~»2MHpù¼BÏÜ?~N,Ñ0Á•;­ÄÊsJoíJÄ׏+#¯_‘in¾nÊ4OÛøÿ/S·L=z:¤íþÿ$™¦ø(SD‡p«þæD\^ÆÿIT:zÌCÞÞð3I덤±üjҙw¥S,¯ø¾ç¾/Ái +Û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×
+ÑS¦U•Êâmˆ|û£äg\Ԛ›þf‰ý€†Â¢.†ë³À'˜9²Uf÷+½)x°È a4¿ÏZìt‹¼ºƒI™³ˆ5 +µÐ.PrÌ+6c&ByzÓ]å–ÅH8hÌ–=A ÏOCBÒs†°#´y!.à #8V6ᔸ¶˜pD9ÁZçxîZO‡ÖšÞœ%ý\`^o„úFÿê \‰F4ª«Q#_™é)f/¨VFteÎ5ë«q̝ë g!†²QýÖiØ4㵜ö篤kXŸ +>ýd[ŠQ¥»æ"Jô2LŒIæðVq"Ï\±T!vo¬¿žOµÏÜ*š’:^$\¹q1‘w´ã €Û¿(ÜÎcÄ%'h6ø®Á +š€DÙ–Ó +ô‰\º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ÿ-¤ãŽø
+G›’E¨ÑsÁh„Œ.Z‡ig"z2Æ‹·ž{\¤PΈ^ººv<qÙ¡¾”<ÐIf¹T#é0Ò “ îHß«ä†j‹£DÀÆìt[½Wƒ‚*Ý“É +éI3OQÞSñ·2ã^€1ùbQÝ.:e3\½ e1¡›º‹Nä;Ï0´Øx˜‘Àn1ùTñm†#ú3¢±+#M@`íÐ!%ôl)͓’1âZ䩬 V +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
+Þ눞Ý4¬£­Æ +*¾9RÈÛZ‰#ŸçÉXcRh)¤gf¤7‘ÉõäŽ×\-H*÷اÔOtO×Ö¢ó)®…ŸºÃSÐßì) ã!ã÷Ò{¢‘­ô”²Œü¡9¶f"¨2$Ëôgp|u z~‡Î†Ù çC•ä>åÑ< ]¬…óûBk±ÇÀQòøìàùžœý± ½€»XU9+ÁãJüÿ +Ç ò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/Û/‚†±
+‘9s_n]«¦É’ô+YYõR¾¨’ò6©9^ÃÛæŠÂö÷7ÇØ'<š./:Aò(‡…Òæo:MxÂXÚx6£õl8(NÛØywR‡ÄƒëA»Y7é9ÖFàÃx¾„'¿îIÓ92÷ÚqgÙ¨7 Ž0¯Åî öåØ%’×Ö"|ô˜T"°{„g}¤uô‘E-¥- +֎³³:蟳äx%ïPu5 y<cCßã8àœ´ÅáÞ¾Y¯ÑšXžñ¨H¬æj9ÈÊcéê‡á9ש‰±O…&MÎÂ$Õ<é[ž/)›µ±ãs KPjHOùlUí–EÛ9Ðù"DˆÃÏRVܩŁ{k,W6Gžãà„Èâië\~c?²‡ƒu•Óûvǘ]z2»«s³¹£œÁQNñ‘]¸Sj¬Ìùȍq‚¢ãd 8à!´ŽÚ/N¤ãà’ŠZµH*øþ®SºJ·P½3Âc£]Än®Bà¾Ë°êàFråÐÁ:1¶k~ZŒ…Zøªy|U8ÇNÌ-g¡mÆV<†çTÕ8<í®ºyŸW*²šE÷«ñ=µ=lÆ,eŒÃ…!{G ‰Òc½Æœˆ±Jèö«zì|1"½‹GPÊ7.à! ‚é9ü<è‡×ÞZÿ€T&,Â<…#nQ-}ß»Ð·ê\èv€ê¬ý®+öœÀle¦´Ñãe°;.Þ2«á(ÇÿÆ“Ípö£Àgðxaoŧ×Rƒ4È<f®>ý(|vɁ0øhJ†äo‰Û·˜-¼†‘«´™ö¸.E•øÚüýX_,¼²ä–ñµðva2,Ħ\sÔ!–öMkd~À£%e,säñ· š'iª="ÝUÑ7j›ªr"ôäR|¼,-a¬&™þ㒵Qž²vE ‡ÔN;N­T7rsÈáäV¥×q•ã°W^ÞÆ(+åÎÁýñ=&<· +í–Ò/ü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¯/Ò
+‰vJ'Øùóû“lÐE8ï©z²èóÌ´ÚÂoÁŽ„Õ€*¨JÝA¥®03¾34ôŽQ¼fÐ³Îl b8êdřuBç%ŸHIŠc¦Q9'ÍÂ3÷oÄp%V€I§îæ9 Êvzúå¥Ôx¥ÖËj-~Õ H¾„߀ m&]Tà`þÅB¦aÄYçi8Åú +”2ì»Î]cUy]Uò’êÔ C4v‚¤E"•m{ê±/CntW?ۆ‘Õ¦„–‘?&¦/š+82ó :•´í zâ
+¼­k£‰:¡Ù+·:“fØÏ«‡3ã÷Éu¥©ÇBÄyáÖB¤SJ°Ò1ÝæóaUN¯Lš-Ÿw‚ +T֝¸ÑÃQD¸JÚjWF~éØoH¨¢–îí±½-Þ©öIwË´Åbà + 1*ݘ¾I܏ÀX ¥Ã3“QßO^è¬sc *¯Yü…ÓóÌt˜YE‚}¦±+ª9:,_'èdO‹` {ø" 4ºYå˜c†°:Eó)Vô@âʶÑ°ºˆíûÙozë0”÷xùÓOýºm«Ç)š‹‡˜ÿ°ÕaÇXâ¯ôZPNÞyj\TSŽqý»¬Oáuõá׃O¹‘¸K°’âúëõ•ëÌôKræVóž¸uì¡ÅyÌУäc8“ÀÅÈ/öš¥oðNT[ +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
+94Ô­A‡ñqhô뇃LSíÚK·òØ£¾‘»7ø„,ˆÛQõ`¸´æìô -&&LÂA…w^{´²ßé[ÜH¢¬ê#òK\ “÷Š!òˆÐAPYàzÝÀŠ’”ÕqD¾í^uUn¢\G‚g_ŒO{QùEÀ»bâ¨eëË|0·¶^H¤c‚ ¤'ôÆƐC"Q±-OyŠÂXDKGu5aVìCù@D‚Èä:Ç܌ չƷuò8æ³)dÈJ¹¸û[áX×3ðYU ÖE•&.,\MG¬tüÞ拵ä‚'µŠîr‡‹ÕÝ£þŽÃQ EÁD_1í¥”*Ȧ¤æ¼îôÿ’ú`Iåö £¡`KƌüÈ–2ÓÆË!ߺú-KТJ‡«­³EŸfy +L
+³!ÐÃpKHŸ`ñúÙÅþc¿ÚºƒZ]BÁJðžìˆ Ej­ÍhÚ׋†ù]Ý ôɤKY©"šís±Ä4@ÈèEó`5O;ŽƒhÓbÁl•Õˆc¾ƒ +a§xÈóY_ d[ „~l،õ§­¥{°¨Ä&CÛÄÖRÝ"qփ»ÅRw^Ë*æ<Axžid›xEGÖێŒ:¡£¹Q¨›Ãnîše}ˆ­3]—ö{´ÔÓrå¨Ðîi§éKöƒqr‹îƎQ
+j5½ÍÒ©¥Çž×¬]ÕîåÆhŸ‰lM+®`ïpAlÈaÀV‚K_ÀkxŽ/Õ¡5ý׶Kù‚ó2eàíN +…
+Óã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
+Ã!Uz.#‚æ (ÀÏu­ù¾ÄqéÂjï·nQébfD3(Qˆ¢°WHÓW¦ïùšuÛ‚¦žÃïhNؙÔÀÍ& Þhx·AJ®ýFÚ!¯½jF*|$텾øfû¦=ŽSÄĶåÏ{ë©ä躠ãEŸå¼uœ‚êÙê˜õFԔž¸8It¯@õŽx€s7æÌ\õ±¾¶ã<b‹Ž§ãÌ(þ÷7Ñô!¤Æ¸ÊÖ‡M|Kœ‹Å +``g @¡×2ÀIT JƒÏö„GØՕÐó
+½`‰K¹QȓëOUIÒÃq3∹r€£,­7wCjfÖHÐêߧ‘Âc~O¡@×9N7^à©4®(´Ÿž«#*7¾à˜ü³Å½¸D({¸'“Ún¤4ŒPö@£¡ßÓ2ò‘Ž»=)1¬Ò˼{>p¤).•è”Ï͘Ý,÷Ϋi‚OU¸x%ŒCo‹p§$:ه¹·YýÄzm r”}Ì)2žäï †_xÅqûM«àüà;MBŽñ‹=Á ’y79˜ìoõpP—^A†ðrW¢'FRöƒ*c¤q°Í¥‹ø°Œ%¤‡ð£-5¯kAqáþÌöՆçî +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
+xœÕ]ˎ#» +Ý0ÿàuI¥zìîéýÈäd w“ßOyÚ¤d’¦ÊÕ³šêzPyxøNÿýþí?§°ý×ñe8-9þøûé¯:ý›þNüóû·ËÇ÷oãô²œæ9¿ÄÓÇßN~O§˜Nÿ8ýò_NÿúþíÇvÓïøܶ'¤çÒk8>9¿äíí¯¿Ãç•ée¼]I—pù¼Ǘt»Gºmº] ¯te¦+ë畡ܓéJ†+î+ûÞãyê«$T)®Ë6MÒ*å7z´Lv͗}jʶîi¦Ï¥›ž,4˜™$ÊêòÇTäíóJzYà)º'¾Ñ•UÜZoéÚ_¦Fæµ}OŒ !Þ3¸&º’R|ªOi„“”'› Û¼gv¨Ú6‘ï%†v‰âª½»Â œQÀX¶4éO!> 9¬¤Æ1 +˜H³g¸²è0Ñ«Æ2I$8©‹#}m$Ò¿ŸHdLö¬ªH±tüKýFÏU2²…àñß,ýŠ‹šÔhÇqifÞ[¬X·PŒ±ëxVRýµÜ…#}â±#ÒE')ãPn;óÅP$ +PÛôQ46^èhÔlD]à`X ¯満cø>0€¯ OÅD6¾Rëz¯{ÒróÍ°êÖlxô`l$4C\¶ûÇ°(¡Ó¦³,º0/"èÃÈø +³‰™[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%Å®»)‘ž{–ü®
+£@u×àIU¶©`Å-ܺÇsö@þOŽ·òËöÀ†™:°íñ° +sm2´ì³á>:ah¤£Âó”+çâH¼ºžBýôp OúIRo”\¤Þµ·ÐӋ_1χãR+P:š¦Ñ“~æLl¬Þq±ÆÛ‰8ÒìL±ÚŒÐº?šŒ’žæÇó¢?Üá<O+*™‘3+¬!râK7ŸçšE¬ÖF¬h¹
+‹8V_‹9߅Æ*”wãÙÔU8îéj¶C 1 ¥[…ô?ÒNÃWÇd‹Í™rIR ëÄkbÍ1 =Uå]¬*è˜9”!Âzuí +<¬Üʎ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‡â‰Õ*Í
+>ƒ‰E]Y¥#¤º-žXv;UÆé8ª«§[¶§¶Ü×\ç騈Žy£`}ƒ‹§x÷÷nUF°T ð9f’̱ØãðôŒ¤¬. Ò- Dê+°XKš‡£©nÛ0Ýpun)tá:!Øì: (ý<ªñ£i‹+›xžÌXuô Ç]÷Æ¥ßm`áSuR¨®¼#òÎQSðáÚzññ §íʝ½ ;ñ=™’Ø4«YÚ¼zš7=½Ýž@Ü°¿+¼ñ¸Ä§@Ú†Ø:jí0ì:‡f'­Òæl0"?ë²²ìõNx£“öKvÂÝ™_‘ø©ÛRYYôØ1mª¥¸¢ÉXWǼ1þOæÁL$ÿy€[ƒähʙ̝Ï9-=e¢úЌ ´Yá4£!Ê7@ê«HŒ_o›#ŒMÂîîE—öð£Ãàaîk—ÆÑÜàÁ¶¨ à –ëöœYo¹ÀP±ãÈUuV£ÃÔ×79>g_d&„çΎƢ”¡ñèJ1”–ÎL<ª‘ƒrϞqG<‚<}D³'ÇÕE<r±“v>nªî”Úéfó¬µÇÑwwó®Î¸£ÈÕµˆÙU©Æ^U8YS8wžªbc#ˆÞá‰_—Î,y¼c­ý¿Qà7Ž5PÏÇÖ§o˜9DÍB²Õ¿Þê‘4¼ð\ÉXé[+h™…öq +PËÛ´l½—ÛâÞF(ÂÛ½„ëØAòÁTEͤ¾ÿrôƒÞ®8¼Þƒœp`´`d
+«õý>Q¥…’RÇ.Ó8À0ôœåã·Âö Ï»7]áޏÇ{y_«,m–íÅVCíá­ÕH8<''
+nGª&xœ1ßB)éÍa[Ú!.á5òÏä:m’rŒq¾þ‘˜i®º;çøãZ›º3îøúÛ±Gô"øæêo²5ÑȁÂv‹ã3;ÖI„¿«ú7wUеü6 ƒ +Û¶~"ˆ|Ёã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¸†?™êä ¼ó”
+£©ÎjŸ3–ÔŒ§“yà[ԁbtuS˜Mœô¹ÔPŽIÕü„ÎÛÊgÏ+ñî±ç'õóØlBÒ.>nǛ¸§2àÔHÛ¶šyç¾®Y2U‚’ï…ºª«"ëÖbèVî& +™ÀT즅¶kì&›ñ5çÒIXª(œq‘Ag%±a{g31E•Ö-<ùx. •ÚOueø*øâIa•‚‹
+R`ø›oY¥a°¢TÅ+C]©€´ê’OH.¾ì”I»ÈnZ‹¢×àjaï:R°HÆ2Ȫ*2hÝO#g‚âÑ~Š¡bхºкéÈïð*ËÉÿž™9ñ½xÈ + ¢7  b ×ûºþíLN[Úu¨Ð–ï™øãîb`CŠºb®Ý>Ùûì¤çü +Ü©¡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»»­Èº
+ƒÔ°ð¿¦— ¤×ª—‰ÏŠWœEɇ’Ü :,âŠâ¶«՞Ê­)‹>‰â<ŽËÉ-y$ˆ0Ùì&[Ïönµ;¶†©à !§±N³Òԑ³ܟÜ6ïtš¥ŒuKQZJ’Y 8éܽϒôWè3(8±©¿Ô@í)քÝL¦sm*½ ç#gVX6$ùqqNNÍ'Œ ¿°Ÿ×ْ¦…:ISNR“’R²R!ØB¡¿Ç^lŸzÉ4$g=×7«Ã±ˆ×(-ØxÞ ¯…ªéhì`ú4d¦£ÂvXø¼nky÷”±z)Mü½³~WšÌÿ©F—=q}P`ö”ÁÆ(¹šÕv + ;»`ÐkJ³+e)€(¡G‰7µÑ
+h‡ +%‡Q"÷½úF +%F-aVÒ¼™£§Ö¼c©@—UÄ­ ÚÕZRtx/ýì EDO,ԌØBEƒ½-ÅÖاj©¢µ_ª²k´Ö“¥F¾w1”%(*´D–Œ¬áUH ÞiFš>ÌYâY(äÀÚ +XòZåF8–ƒGQuÓµðZ*ݦ{¹;ÅݘþÙ艒ó„a3$Î)-5Ü}—®@²¥›Šz3ù…¦`«…FC5¨Þ’Lû=JÏړ÷ÑŽìiÁ•Â¥­" åj/Ô,¼óÿi9í@Ù0çöi¶†hà½lrhëM|ÌaÃ*šÑ3Mru²ىbµÄª¶­ +•²`á®Ç]¨´”VjŽ]©Na¶Q³¸§ÀZõ_rU©·Sy‡ŒS +¤ðî=µ6.˜¶Ü»h7ã@RýÆÿŸLé•ZºEŒ=? ‡z㪰 +“Y~ԀIŠÛ†Q<ߌ)ãIû’üº¤½ Uíjp)|Õ-(ñ¥4#nDº[1Ù ûd?ÔWaþÕP–½wüc«i©Æ7…Ô;c6Ôo±]×à¹JÞ Tv+š%AT¦3Ñã¹àš£åÆp×¼æŽYÑU§¸žµXaSS*]keWÓ}D¡ÅýoNF5M 慝Ì͌âþI7^ÔÍ®4I’;‰‰7LFúH0“NÁÄ @û@Y[ +º %”ؤä2‰Z°¸P¶åãυèY?UÑ،<_)µƒu´üsä3=% + äxzGÛ֏&²| +òö(£'¦à‚¾Øx­^ò*3¨Rtc¥®¸quú´ÞÍHQZ‰–-µ(HG¹¥ã5‡°è¨ÇÅáö^eÉÝÒÅFF‹±`k)• + ÿžéØkÿ:CS/^æhÉ¢JnfFÓ¯f…ê“õçt·S0Éú'(՘•¢£ÒÍRnþ…nÊÉÄ9߸ Ê§M6·'ÓéU Ô­ÅþӧǗ|¹RÐ÷ßŧÝ×Ô}Š
+¢‰Åÿü£û¡•Þ/)fI‰4Œm´ÂO¼V¬#&Ga7 aS²p^ýL#7;5|ô êd"!鬗ÂG=¥MifRoŠ¦Œp„õ†ÊaOÄõ®ç;‰¸t6ÏËgnÒWÕJßÒfó¯¾kqièb<Xµ|N¦ «çP‰- öªµÂ' ”à¯m”ï(c‘Aù>¬©!Üвv‚¯DMŸ£)üXA·ôbñÕ¹ø²ÊüWÁ–ª×õð-yÎíÂúmöéufßW98oAb÷¡ò¥ )Hæø1Zøv¡©|˜VSEæ’æçñiÒʞ¬$BÀ“ Ì­ÌØóØ\Dä”÷ùÃ*¡åÀ¿Ž–Þ!ìSÇ7¯¶<€SßYW{±pâñ Td°‡D-ÉģПÛԊ£ž]:}M҆—\º~UR‰«™IQK~õµbÒ_ +sKNå€\Ÿç!ÎælSŸK5V™çŒ}Œ~bj™ÜÖðÄëG +%£ÜZ·$¸…u‘´ÙÚ­¹h·ŒkoŸú±û¹" Hendstream
+endobj
+
+13 0 obj
+ 2169
+endobj
+
+15 0 obj
+<< /Length 16 0 R
+ /Filter /FlateDecode
+ /Length1 31884
+>>
+stream
+xœí½{|”ÅÕ8>3Ïmï·ì= û䶹,!!Ù‘<!Á„« ɒ,d…\ÈD+ ¢xA«àK´*ˆV—D0 TÔÖKûökkÕê+m±h+¯´U´•ìþÎÌ>¹ ´ß¾ï÷÷Çïóû˜ež93sÎ̙sΜ93Ï&ôv÷…‘mBRZÚC]ÿøà­¿"„þ!lkYÛ+ÿõ®ã™Ÿ@Hšº¢ke{ß)T‡ÖpñÊÕëW,¹d›!S3Bÿصæ/¹Ô„ÐôYÐǔ6¨X»A‚ò&(g¶µ÷^Í»’åG ¼ugKè÷_k‡Py=”ÚCWwýÒò†å}P–;BíáFϙ]P~ +¡‚ҮΞÞß ¼8B«mïêwåÜgºÊ2BZ‰áC Š´L8^%V§7Mf‹Õ–dw8]n79%u‚ONKÏÈÌògçäæ¡ÿþGP
+K{Q
+ïG)ÅOŽ¤X$~’¶Ñœü „•šHêÏzýç` +â ú
+{ðd4ñèK°–§Ñ0ºÙÑ"´ÛP&r¢Åh6æ'€nÅÄ×Æ?A¡»ÐÃñgñ +ñýÐ~z}üQ)š ø‹Q}Â}„ã÷# +ڂôh:Z€(„Þ†ÏÀÃ÷ÑÝèÇø{ñ¯`T;ºú+G•¨2þbüÊC·ò;„w´ѝè9,Æ[â4¥£m$;þ!ò£FôCô$ðÀÇøY( +­B7¡{±‡{ {Ð#(† +¤‰«^€‘f£%¨­CÛÐ~ô3lÃõÂ;™øµñSHDI(xŠ Op žCå +ññ÷Ðåè0z +æK?ÇøËù½Â届øƒñ—=‹uøyü¢P$Ü>|}ü¡øS`‘~4$2ÆYŽnD/¢×Ñ_Ð_ÉÆøF4 -„‘ŠS±Œý ñ·‰‡l ¸·Ð$˜mpۇö (häzÙü@a;NƗàåøNüWb ­ä +îîîW<æyg ,Q/z‚õü ô ÿB\¯Âx~Ÿ Qò)ù’×ð7ò_óÂ?v"öu|nü äF^t)ºmÙþ +¢gТ_£¿¢¿¡³Ø‚§â6üŽâøS¢%édé";É£äGÜ\îNîE¾„ŸÉ¯âÁ¿'Ü,l—BRìÜc±ïÇ~{3þlüM°ôïGµ ÑëÁ*E/ · ÷wÑè÷Ô~ ÿéx)¾FéÁ·à»ñðOñ›øO0KÄ>éd:©†Q;I7Èéò}r7Œþ|Ž“÷ÈäÏä NàÒ¹)Üî!.Ê +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
+íðyXxA8&¼)œΉDôŠ)bx•¸Oü½$JS¤zi«ô+éoš.œ‚ó€sy¼· XƒÈ~bç7âÓP‘Šyd†™@ aUü +Up1Ћ‰¶oâá“(¥¨ðQ ïÅÏ¡üS´Q$xbþÀï“üËä"ôk܌=ü^®CøICO€7ÚAž'Ïá™èRN–ÝÂá}è#°÷«ÑÝxîAOàÓx¾—âèWÄÉ-ěQyüaÂc-žÏ à]Ï·¢+ÿµÄeè}ôI켑ÿø§!´4ú$ú?Žþ…ø§àÝ8ðF!ð2·‚½ß„¨×k‚u¶Ö£<Èjñ +ô ÝQ¤Rq +:ƒþŽ>Ž€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Ã
+5¡TT&ü4167>•D¸£°ÇÄ¡¾v¯dt^\˜aÃȁ硒Ø4QQ”Š•OŸV6µ´$X\4¹°`RþÄ@^nN¶?+3#=MöMHMIözÜ.§Ãžd³ZÌ&£A¯Ój$Qà9‚Ñ̌Úf9êoŽòþŒY³òi9#¡qÍQªjÏljÊÍ M>SÌßÀT˜Ê(&¶Èå¨<¢\“!GQ!á¥ó¾­:£QŽžfðï`°à´4 kÜmÕr7Ë5ÑÚµmÛjš«¡»z]UFUX—?ÐéÔuetÀ®˜ÄU3íA#0õfT×D=Քƒ(—UjÖÏo¨©NNKk̟ÅU-Ë£(cfÔ`(¨Š +«¢FŽÐÙ íò‰Ç¶Ý:dA˛†ÖŒÖÐ +Q.ÔHÇ°`Üê¨ëš“î±"tn«jØ2¾5™ÛVãŽÈ´¸mÛ9zl~ÃøÖ4úll„>€–dÕ6o«…¡o!Ö-”a4rScCßCÊt&tV‰ù…3jhMóUrT›13£mÛUÍ ï¶(Z°>mÀëUÇO o¼mQCFZ´"9£1TrÀŽ¶-X?èQdÏù-ùX¬ Á0™UÀ`„GÛÄÐ)T·`T²˜r”1 "*·ÈÀICÌi*}„§¢m-S +~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 Ƃ¨ñ_Á™Æ ~}’%
+‡í‡ÝÜÅ^)¼-›5Ëh2¡dKÁČ4Îì§%, +ŏ +jõA`êVÅéK-LmNíJݔ*¤ZÌ2lDžÐíÙ>˜2y¡;ü4Q†æX֜ +¬™s£¬ÙÊ
+o¨i +n*¶¦É.'ì
+¢(‰R\4eJIПíϸÿ›lØ¿|×Ü«^ñá§×V]9«¤_8âLûàé-C«cø7üK±æIË+ëی:0ÔPü”p¥ðDã¿RæܬÝjßê܃î_ÕþŠû•þ N›¥Í1äsí¹Î>¡O{³ ‘’$—+ÉåÊ%y\– åx¾OØ¥}û©^ ,ô,†N fmuY®3BŽ—*.w>¯1)&[ÐT·ÌŒç™±Yq¸ƒæ!œ£¤Ûòuœù3Óô‚. ö¦àGv¿„Í’O*”8*ÀÁä +ª”@8s-Mg›æœþ¤4üy iÍÉÍ)@%…›šš° ò2²Z™Kðû3ÒE«Å ã+°ofìŸÆޏ݂¯ÁAlÜ×Zû­÷ѵ?üùkýk÷“äËÏ|‚ï€sB¾gϕÑÚîÍŠý#ö§OwÒ[€[áñ ؇:#¦X
+tªY,W*ì® ¡^Ø$œŸÐ,t g~“S#Òî]°Ü(ÄÜ1*0jÇ¡Ä£~òuŽÝªqV€î1hßz+ÎŽü£áxlð!¢Ï‡5°rledÊ"ï´à1ÍÛpØ{—W֒õüÕÂ.¼“ÜÇß+ìÑh8¤ 4+I߬Y‡%rŠ¹È/ÎF‹—ÁJâ‘1²cŒDŽçeA´ ‚È +‘åŠ^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
+?̲(°†:7P+Ø8èÖz'~âr ?;û ö‡Ø Gι¹ÿQËßðõš@ÏÔ#Ÿ=ëÑå"°KI“%Ú|.žˆ h9ž:c6K t®ãÈ,Òc½W6#gäµã°a¼fþ¥|ÎçåŸ'6š¬eMk`Çd«~ µL +Î˲Ie0‰F@âK9¬X˜‹#MM÷ðç>!'†e®X8òUì¹/ck¾î+ñ!ýàGŠ”´B¬€s(…ÌÂÉ\!˜kµ`A”9yøGWSÎN6ͱü± œnš\˜bª$9x öÄNQ¯ô ÈâQá)Ø /R¼õõ4<xi¤á¯D¸ñ'?ѝáœaÕÑP“æxçÂS_Ïþ’î|߇ždOBë#-õqV]…¢­×’MÚ¨ö˜ö¸ö3­àÓ6k7jû¡BàD ¶`Ό°Â<‡š`³QâuDòcžZ¡6-3È{4匛À¨¿Y7­I’ÉV~w€NCú>0œõa>vîëKxÿ×ï%V<ßÈÏ@N´GqKI®¤¥š6 +?Äã &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à
+l +¦6S—×iÍŸÜaˆH…až†È:%W’Àžu9HkÑj»´¼Ö»Ñ¶ÇF–Ù6ڞ¶·ñ6 òƒõÀÂÕ² ÷ƒW÷X+ã”X‹ã\ÎÙ&Ϝ“ÈÍüçiX›eEԛƒP]Ôµ°.Z'´º¢©ˆº ð;àx\sDVÜO½NÕªêæÆË.¾hú‚Þ¿kUuÉ“*÷ÇþsÔÃZ\J×"úoÅ!äx ‚}ˆô¡¡Ž®ș[—!ø¼ŸÇ"§×ht½;ˆój½ºt”¯Uo€cÁ%'Uꐠ·#> åéƒhš~ ƒ×ñz_ À֖iî”œ Þèc»6ot¹¼]…nžŽÓ +‘BEψ?+øy<qN!¸òMŠÙP‚° [*‡=cë!«  äÕä™[®þ#+³ +‡-¶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
+˳ÉìO8 +‚–Ùl°_ òz››î™z ¥áGÚ<ˆ½–M蜰g?Áœ¦QŒæ Æ“©Lì×çÂNC\¤ØÝJŽ½Â­L0Ã#ُk•ccÅ0‹›lÀ`Ø(3€ÄrÀ£ùÀ*ø-&{F€ ÁVF™pÑ,:¨ÕÍ`ÅÊ´ŠõR'V[YÞ¤€”LtPN›®
+Ä:…#t f9¬}vœ¢*`‹’³ý%T\„¸4¶K%ѽY]äØ=哧c¾)‚íoÆ6qXánÍ\šÍ]½äŠòrŒÜÿÐÁ;?Àˆ½;zÝöYxõ5«ªz¨ÿkŒ·‹àlí@9pνîæÔ-i÷£ûí»»]âՖë\ëä›u7›n±Übߚ¬SµYÞd{ª=͓µÊu +Òô"Ü(µIWKë½ë'¬—·I[­[½7Ë÷I÷ëwZ—9_q¾í´–&7X#RDw +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œ†
+Œ0&c²”f÷xˏ®>ºø lzÒt2¸<±ñ­i‰K‡Zv)5÷t*ñâ"'?9ögS˼ÈuWÕ¯p`{àó_|û3vž~é#òiÑÂEwî?ºûò΂¿„!V‡SXÖ^*»­°,cç­ßF\üƒA£µ‚žï•ë<ùA N.Ib¶v…ø´îÝkڟëÞÓérÍ1Jnm­x™f­(Ò~ȟæÏñ_ˆÂ\i®f…x+ÿ¿[¸_¼_º_£óñ61À„<1OÊÓëø:A'Š˜Á¹\Ði9‘× ¼H/þôz[€NÏÓ È+hÊ|7„DïǛöÃCŵª‘ÒÁc9»Æ +îŠúûр•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~]
+têRJJƒ.%0 Y¹ð€~Í.Ÿk™«ÓÅ»{8Ř½¸Þ÷om’äJs*iA§’â úœøC8îkÒê³îÈ"YŠ;5˜åÈ.Bà[?NÄñÄ i…l)†uÇV«¶"q“©c¹¢ÕƒÈ¸zˆZÔ9ØU`ç[sZ=ÑÀ“žôBv0ˆ6ؽ—lZCo(»EêÕ.ÀŽ¶h +ü45±í.3þº¢ÕÛ*Ì9ð +|zÈXf°Ê(8`(Ýü逾Œmi 4‚KMÊ¢ÛV)øNð¨` %AˆëÔÛN V¾ËÉӗˆô,Vˆ½¶Ž–öÒ,»cvìÉË7¼÷Ñ{¿Ê‰}i]ÖÐY(§øñ‹ +Ÿöî0.,Xœ“R ;ìÖºKîÛöüíÛ'ϘésfLp¤¬¸¤îæ»~‹÷Å?&w
+‚ý…’ A9ÎÐ嚧™.15š%¹9§¹lIvì²;vsZI'ÜTÑfäêwE]\3dÇ\œkóà‚h‚ôþ¾W1ôÚ]Bxļ€¡ä¸9¿Ë¶ØQaßcÚÎ5Û7Ùw؏ÛÏØd·Øe{¡çxuÿÈíi]´¢ÞéõFöø±©åsè?œ,Ÿ{h |šÝûêI؟¬Åfø¡ë;2ÖR;À‚H­%Å%YVrÍ1}vJö%îåß»ôš2½öú뱗÷Ÿˆ-º!’ü^^ñüšÉ÷à7N¼õHl+D³Á#LŠð\¥MòjR„T§÷’äY)³³~kùЪâ©õ\æ_áYé¿Ù—çûÞǼ‡“_õ¾–lE£Ã)zœÙb®£Ñ³ŽÜLŠ¯ˆ†‚ïZHjfÑdëDc&] ™Jz<<©ÁÎÌs™$³6•j!„w¥b”jI¦þ=•OMˆ‹‘µf8Ž´8†Hi4DJSÜt©“Þƒ¼d0êèš„¶‰j`ÆrÀ˜H•¢Øõ&û5¹Úc£Ï°Ç@|7`ƒbr +ÞyAl»¸^îç¦-sá]x[ œËS¬F ¶lšhìH”NÒëƒÓ`Óà!L£k礍޵NÓUêáL–rõ&ˆîlÙôðât:8»Ó•ÆB ª*0}ª'¢L_°ª¦”àp<ðË7žªã’³bÒ[$nÖ#M]òÀ]?½´¾³n¾rʟ2Kª/­)¶èÉï'ÝwãÖgcC·ÞtiJ©GS[;pËÒÛêR²ä”ù5Óc¿´¹³Ë§/)ò—f†é¾8v?¶Ý +*¹ô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
+Ú@AÈaGé™þ,~$Ô²`Ûðî¿à`ìõOïŠ}¹ +Ë;;:£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˜ë
+w$EljLK\sAPeƒÓ´5 +ƒ¿+Š}]y`é³±¯c/ +܀=ö‚ê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
+Dº¸\‚Ó5âÔJÀôÔã««4Z‘Á &[oëq¥&5gIGiV’qñ·¯[Žñ ?݄¥]ÏÝûëïÏÝؼòö[ÚÂ7ÖfOuLHsNθò'Þñk¬ÇÞÝsîâç\U~øv¹ññúÁ£ý‚H–ƒ}…“­ŒÞQj§N¨›°DZ«Yk¸I³Ùp“ks²Vt‰É6—-9ǚãÎñæLÐÌÒ_Î/Ò.Õ_Å_Ë_ãîõ2²¼j|ÅòË)‹‰Ke&qŸ·ŒìYcgJ¾¨µÑ7ŶºyI8‰¾&N¢¯‰óœpœE˞ePm[B|²Ì¯œ^˜NÒ=Ùý:lÖùt…ìbèÖÁ´ +{Î{]L­Úòùé5VúF=ñÚ¢³ÓVú~}M ªÕWÇ„)òàºHIÐV:¥XæշǺÌa‡á*Ȇ¦ØžƒŒíòØáÛ~‰­¸xbì=ß›^úèã盞«"É_-Ýú"^ùÖG¸uÙì~Vºúº³Oðõìà˜§–ÂAŠN4¤Máq/[dk#¿É-høÜÄá´»Íi5%™‘Å”„‘…ص³/ÓÇõDOíP'b«9q‘O‹,° ћ`1É®ÓWhæiê5œ&ÇR`]f%VBMI~b_†úÇœÄI† Óãºú0‰$.kQÒ¹&”<‰ëD8:Ñ×14Œ-+R£$º +'Ó +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
+º_™45iV±¹2cYR0¹š›mœTü÷díqÉè}Vú{²¤ìe[±DwdÅ©×[Ì&WšÆÛ»¯5×d2û-¶%ë»Ð&ɓZ‘ˆ8Ö$^.YNŽ ÷Yž¸ÚÆÔC®WŒß‘Á.wÛô¢6©lº)ùÃíX,~êªÃ˜ÄÎn¸c^ìvÞ¾bù +7·¬¼…÷ï®oýWl8v6öníâáO¸ÃƒO<8¸÷á=ÀшBîV£é=æWÊd}YiòÅÉÄF盘헒XÂO7NO*I®áëŒuI5ÉwCˆ¢3˜àƒÆË I¯7C,¢ÊÀ’ ± ™
+À€¿)D,ò­ù³-毧óOÌ^ ³gÑ"LߦNߑ4>$ق=7 ¼‹ +¾ü€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Ù?Û÷À
+ÊÉÃq~á ¹DÑ®"ג턃±pîà2C{å³­€‘A‹žÃ +` ˜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ðìË|
+œï©7³9á<A$Øî}‰’á3ˆAzÃcI‚ö§Ï£ß<ñ™ß±¬#ž o½”86ÐSÃÙ5å40€H5°æ$,άLðWØZHܦƏ +XË(f–)&K¯±” +äÖ²DtÑHEY7¿á(JŽŸ@)Rã'¨coc°5mŠ'Ø!eMɄ`Âa%‘%Þp.ÛÒÿéӍ +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ײ
+¥‘«€³aLzæœt'Þ»«§å¦‘/.±ëÄó¾½D¿»ä°ÚÙ-UvéÈ9ú6ì)Ù՗š:ٞa”Ú_iÚñõ×?ß{¥Ù|†²‚7p_°_1¢¿>õæ§ÿ½&øø2sù†ýæÍÃ(ýJ:wñ^X˜º‘_MBHš›‹ªÆ~Y鿼“'B•°Ý#¼ŠB¤ Ý*,‰ÇÅýèNZeDö£þèA€¿ùnã{ðïæRÑ€õ*Å2ÔùbH[!òÙ*ÝH‹€†Â‹w9´»¥T´ÊÛ!Ñ~Lï‚t´­‚òÐWA^ }ôÅfüNA?ÀÓð¢'qîJøÜÄ +‚÷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ù«
+kQUPa Y/Qa=šœôÄèoP'½¯ÂFn©Ý¬Â&4ÉN0O¥nríRay]2X€zëæ‘Óõ:ƒE¨]ª0l®,Q½¸¾TaЅ+Î` +ÔÜ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
++“ö–¨“kD•n§:“Ãïc¥1­ö0+]͸»°MŒø֞ѹжvÖßXÔ_¬R¹ +©òoa^OVWéˆÌZÙØ+Ym‚ž®°ˆªÃ6¶îºTé„']ÑkUi'zóö!¦«„uÈL†-êü#Lk«N[{ kì`”‰™Œ·îȨeѕµª™vÆ +µÍµêÚJøÕ£|´³Ò˜õö~cGêùÆüZÔ1–³ú˜¤[ϳÍ0Zõ#’¥¶Ý2:Ã̶efW3Ùö0»ëõ' ­SÞë½Wõ‰ÕÔ£Z٘÷L´¶3„Ð5Œ>Á5í·…µŽYZbôV&­.¶J֏Îbdìæ3i{ˆI¢[ƒ®¡„{ýÇ#½w1jg~s„·Ilï녶i°§@¿ô3‰a÷°“˜wjŒ6¶–VÔPÓP˜•zÐ2f OÅüw„uÌb¸áq£ÌO¿öýZHU`yžµt¨…祬¾j“ÚæÅ°ÔÀg«]„Œpš¢i³¦ž ؚ<ZŸX' ‰v©2³ÑoÓ̈GÑórÖºðûFÇlõm {ۏÆ{˄çó£‰õQ}fº¦W²^£>‘®ÖFu4ºº×ª¾tùèn”³÷_HfÄw®õNauŅGmº›ù^u=¯PíñBòY…Tbáq½Œ­âo×ªî€Ô—3Ϙàz¹ª™µç i(›Íê|I%<ò·­âÛ#ø6êÅB, +Á¨«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
+«Ql/ì=#=ÐóI%Jœr †¢R8É𜠥|8)!"z;²Õ©˜…Ð:Z‚*\ŠŠ!Qª)¨Î4ÑÞÿg{Ýÿ~gi+ø†ôF÷ÃEë»Â+B-aùqyQ[XžÓÙÑÙ UrUgwWgw¨7ÒÙ!w­n™$W‡zCÿ¤ڙ¼°su­é‘gwÝä²²Â|xM’+W¯–DV¶õöÈ Â=áîµáÖÊîHhõÌÎÕ­#}Nc52­š¶$ÜÝC».š4µHΙiéîìé\ћ;†2ƒÕæ³¾1xŸ¼¨;Ônu¯’;WüKÎåîðÊHOo¸;Ü*G:ä^@]¼P®õÊ~yÑyފ“äPG«^Ý^×h“F{‚9w®ìuµ­_–«»Cë"+)mě//è\]ύ´´u®õL¤½wGZ"!ya¨¯£&¢šZTÕÙÑn§¼u¯—{B ETd…Üì˜('æÞX¡4¶wv‡å¶¾öP°/·´…ºC-0 +(DZz`¡ÚÖÓùG@ì]0ÁpK¸§§†£
+Aÿ}-mrDíŠN¾¯#,¯‹ô¶11´wv¶Rj
+Û½ÀH µg¤®w]¸£7ìúº×O’™¤;׆»C ïÞîp¨·š(AK輇Fõîf,¬è[½@Æ+ ßÞ ƒD:ZûzzÙT{zׯ—µÖ:J¸»=ÒÁ0º;WA·!à¿¥J(°5ZÙIÛ×µÌå¶ðê.H§¼2²6̘هäÕ ¹= ²ëˆ´z¨«+ bìh à qG¨°äðÕ0™öðêõ2Ì­lg5í£=²š‰·W]H=êx-@±<,÷õ€I1i†×ôQfûZ¨üå0eè&ÕÛKí¦Þ½÷‚i€šz@dÌ<¡ØZº&Ò]‡{[&&„䭑ž®Õ¡õtJÝ^×ÓêÖ¥XìôЎ)zWwg{'ëmR[oo×´‚‚uëÖMjW +vRKg{A[oûê‚ö^ú÷F Ú{–…èÄ'ÑÊ“`]x5ԆÉÜy‹f×ήª\4{Þ\y^­|é쪚¹ käʋÔÔÌ©™»È¨3굁XG¤FELuŒÂ z™D/°ÄØd¨!Ó9/_/¯ï죔-ÔÚ@Îl%ÌŒƒÙ(è–_ ‡Vv‡ÃÔ'ɍ@Ö3è\N—PöžÇ µÎuԜ ¸0•tw¸¥ô¼ä8ÆUaçÊ0Ca*¥Հõ.ï녮ÍNXQã&”Ý3Âò¨(F‰©µÉkC«ûBËÁÂB=`!ã©'ɋ;˜Í®™ÌIõ\`Þ!¹§+ܧóí™Ë Åfm”6ÔÚ¡6VÙͼòDZÝÍdËV÷7˜ZiÐ Á o]g÷ªž„‘2{d•ëÀ¡ö-_éi£ã@_ q·ƒ¡ÿ ª®õrÂxU ?“Çìc“£ÞkM_¸‡ +~¯%ÜݡΠ[å›!÷´uö­n…5´6^—pWߚ>ÅM†Á´Ž¹¸Ñ9[̱¶ôŽé˜N,¤r½âÂÝ2–G Ôu¯vã„z§Q„Å +aș,͕K'OÍ/ jµ‹ë ²pòä`ž¥Å¥r锒²’2£îŸ¬º¹i©@e­C8®†Õ ‰†:ã¯YÎoéE}Ø¡Á'çáŒÕ®@ç_sËjM­zé1¾E­ãnáŽr?á^€çñíçÕ÷Úà»×ß½6øîµÁw¯ +¾{mðÝkƒï^|÷Úà»×ß½6øîµÁw¯ +¾{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?—ƒ
+!êF€6Ò¯ŠsÛÚjÚªÙªÙ\lC"è}+´Ð?‚SÀ]ƒº¸uh¤=óÐ¥c$x˜™9E‡9çIXžÙa¨õjM”3÷€-‰¡¹ +¦¢Š£\š‰ó½ƒ.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(¢Œ"
+Q ˆ2Š~ èŠ~ ègý@Ñý@ÑÏ(ú™áöA¢ÿs£ü«†\4°¹’M8—åѧ,߀ÞaùuèË¿‡cùµè–_ƒJY¾ùYý±¼ù4xÀWj®t‚ ˜i¤NH{ = +é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
+©R>¤,H>V—ø +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ù
+}½ù'}=¾K|!ß_SÔø®ð=OÙD¸<qÈWΆYd +ø.Îb,ÖúÖû_¶¯L~žÊMMô[šÿ<•*JŒ>䛗5Dm|qé¶*yÒi‡t¹4Sš.eHéÒ)U²kl‹Æ¤1htFÔð¢A;ý“ú˕v‘þ$òôÉ3ØBè“$~û–` +A— hWGêÎÄuÑc-¨n¹=»0cëæ/
+3qÔV‡ê͌N +Ô +IñÑÒ@]Tª¿¼áÆ·7Bm”Ü2„Ñ¢†!§U7%ÓÿŸìF7ݖ|aì¹é¶ÆFäv®­pWØfXËj«/ðhVŸ±÷x05º³naCtjc´ˆñÔƺèõô/;LÌÄXS}˜˜hÖØp˜ï"æš´žïªn´“ +¬Ùh(›f€¦™‰dŠþd&E%ðü@xi4<ùž_gdx<¦xޑkªÈ2ÃÉBè†óN‡´Õü~†•!㊅2dÆX.ëÈç”|Cs›uäÃl°hÁJ–ŠR2ŠRÂÆâðŽ/cÏÁ±çNàÿò'<3€'÷mx™þ‡pÍ5aHÍÑíkÛÜÑMËeùÀ†>õŠó7/oi£y(íËWG7dTË&¿|æ—ióäŒêèåšE +^VÂÕ“•É5¡êÆÁŠò†ÊóÆÚ::VCù:+§5б**/Ð\I›+èX•t¬J:V…RÁƪ‰P»¯o8 A3éßRaù ÑëÀ†›“Óg:-]3¨Ažžæސ|„GxÒ£†Œ™Q#$ڔ_™_I›`Ñ&ý_ÿÔ&÷†éiÉGð>µÉÕ֌™hD´ˆ"Ñ¿‡_M[¸´šJT ]Xg=ô‡5»QM¤þA¹—%øŒÇD=üé½ÐO___}ôàŒ\Í[XBÿ:¿$ÁPÍՍP7i¤ŽãXÝ­¶f(~ Àî¥ÃQ(€éßIWtpê’H¿Ø/zTèô¦u…|#$8Ǒuì¼LÖ +¦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
+xœ]“Ín‚@…÷$¼Ã,ۅa°‰!±ZýIiájIê@F\øö…s°iºÑ|3÷æ.Ñz·Ù¹¦Wћo«Bzuh\íåÜ^|%j/Çƅ6ªnªþ†ø«NeÑÐ_\ϽœvîЪå2 ”ŠÞ‡‚sï¯ênU·{¹Ç⫯Å7î¨î>×—ŠK×}ËI\¯â0ÈsUËaÌ|.»—ò$*BûlWM +J>®(ÃͳUm-箬ėî(a°Œã\-·Û< ÄÕÿwîý¡ú*ýX­‡ê8Nã|Hæ€9ᐰÌRîl–2€aڂÀ²–­+€eô#á °dLÛ€'$€-wÌ:&àlš>š>©ÐÇBNÓÇ>è“q‡>ž£éc@ M»L>ì¡OÊÐÇfú$úXžš>We&\¢™|`jè“áÞÌô~`&\•¡!Ðg3½ÐgÎhúșÉgÅ!º +Ë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ЯÝ(»‹¬
+™ù=Õ÷óù}_ß¿étWuõýÔs½Ÿzjæ͙?)¨1H?sÜì¹Û×ÏA½ƒ¶_0/øà_睆úY„øâI³'ÏñD!QCˆk˜<cѤç­ï>‹ÚŒÐÈNS&Ž›PÑm¡‰?Ã=:M†É»„&Ã~Δ™ó¾ºÃþP¸çгƏþÏ?¼‡Ðä]püù™ãÎ^#ašÇQð¶q3'V¿~b-ìÏC(öÞìYsçmF)„þp3=>{ÎÄُ-zÜûS’[¡ +ÃBÿ¨òtŸ0,Ç ¢$›ÕlѬ6»Ãér{¼¾ f +ÊçD¢¹yù±Âv틊;t,)-ëTÞ9Þ¥kÅ +7VêÝnêÞ£ªg¯›{÷éÛ¯ÿ€ÕƒŠþ_ú㎠/¬>îäe£ÈƒPêX¿¥erjê[zœ–ä{8¹©mEhڃ§¢=èet_€«ö¢Ã¨½Ü¨z-A@«FAËZ4Úÿ€½©FT„v/í@'àÜèNt¹°'õZ†V2ïÃU+‘Š²Q7Tf¡{p¿Ô|4aïF娺 +ÍÆõ©‘©{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
+‡ñ+d§p9[œú9P4 Þö¸òkür',˘×؞©›èr¥6ú3úûpˆ‡“|2‹<ÎÌA"<±,ÐT ÷¸û8†…œdždŸc/ó™É³)3ôH=‚C¯`¾4ˆçâ»ðGøo¤;K!_1`w³ÆÁW߂f¢{Ðsè?؆;ãAx4ž‚—àÕø>¼ŸÀ§ð·¤J¦“™)Ló{,CعìÝÜ*n=ÿmrdòÕä{Éÿ¤:¦V¡AÀËáíDÃ—F'ѧ°œA_a›°– áaøXîÄ÷à'ð.¼7ÂSNá¯ðwø_ø'|™ Xx’AB$–0™Cn' ’“°œ"ÿ ¿0n&›‰1eLSÃ̂·ZÍl‚å ó%ëcO²) sGn3·ÛÅ=Çç.ðŠp—ˆÄw®<ÙZÐúE%×$7'÷'S_"'ô¡¨…*àíÇÁ2 +ú{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
+´~l#—HW¦? i¤Cún¼ƒ +*Ø?¡ö|Û»p煼‚ï$?ò
+ڏ‰Ã3ÿ̳1æmtš9ƒvúŒ•±·g˜jà‚—Ø¹‘(Ä<Š^`êðRtTÆ¾,n>€Ÿ½0wÄ?3)ĐÀEåÌßÐÝh:ùµ€¯Aá ìdt/*ÁKÐ7èiŠ|î6¾€wâ7ÉTv±ãFDØÝðuqœƒ΁Vàó0ÿ#ùÍG'Y}Á<o’¼Àôg/pƒñ€¥hªK-G‹¸‘ì_ðdÄàá(ží¶„éȆ \Ze è´C ÝG@tcúC‹8§ðÅ0Ðòô 4d|h±wQ#?”4¡ÉœƒÖAˆ};9J=¶¦&£ÛR÷£v V§–Àw¡óh#څW&ï@³Q$ç ܏ëINr=SíÈ:ò)B6ÿ¾ÚìAßÃòê‰n䎢uìÇhªLmH}ܝv+ºõAçà+€'ÜÌ4£’ä²/Փ™ +ß{ +J=“ÊÂ2š’š¢cè)Cㄘޭ›^yã +]»Ä;——•–tìP\Ô¾]a¬ ?/7É g‡‚YL†Ïëq»œ»ÍªY̪b’%Qà9–!V…{Ö¢µ +l4|óÍíè~x4Œ»®¡¶!M=NC°Ö8-øû3u8sҝ©§ÏÔ¯‰µ`ªhW¬
+Nô›ð¨A#¡~OpM°¡Å¨÷7ꛌº
+õP.Vy¦ô6àÚ`UCÏSÖUÕö€Ûí3ÉÝÃÝ'Êí
+Ñ>ÙUÔÜáÙû°ûFlTˆ»ªË>‚D^ªÁîQÕà +÷ oÐÀDªÆMh¨4²ªGF(TÓ®°w¾µ…oj°ÄŒSPwã1 +|÷ÁxLp*ý´>¸¯°y݆& +ÝZS&„'Œ3²WCŸaÁs{4¸Ÿóü¶ 7·u¹úú£̺*ÏÔ Ý]·nu°aû ‘× +ÑmM +Ü®%‘žµëz£7û ÂÓÈʚ‘ +x%<2H¿„~Uúû&†«hKí´`ƒ¾)<eÝ´Zèߺ4xQh¿Ï§NE¾ªàº¡#á†ÊŒp͸þ}´nð¢^=èýý‘v…û4kš°û̖¶Š¢^_™xí˜Q3N§µ¾ƒ¯QÓ7
+÷†hŽ›Œ Ã7u¦›‰Ñºñá4ø«ÁpUÃ葩 +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ú½Û
+àx4td(ؽ +ɌÀSª¹3]k2t Ywzð_º©m÷w'f´Õkàrg»Âž èÖ­ëö\W»n\SªþÖpP ¯;LŽ“ãëfWÕ^eœ¦Ô‘õ +=7Ô­¦à.íÁ†óÉ!ðftS#Áçx¡‰lÕíˆcÏ1HØsyEž;G˜c`Ô%pñÚ#OL»TÑZ1@»XÑ¿µUB]»›Å!kȁ +“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¡^ –>†¯¾˜¨óÂ
+ÿž­ÅçÕZZ§²Â×Ry®BkÿÕ\ûØRíÕÕí=´ÀV[<nÇWk¯¾j~õÕÕ\ºìPŒû6˜†ômk5²FŽ4@©Ÿ;Ã_ +ž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µ¤
+6¯^­]¿I³€¤YAÒöÛdOSê•°¾ +h,€Æà v JQZ ÍÐr@Ñ9N&š“á»ËÝ©
+vJLãǓw¼~&Ç×€Ê÷ö·ûúOÉێ&ßÎ܎ä›Ü‘+•=ø÷æ‹V_òÿ^ßȼðkO6±!8±×å'i?~=Ÿ˜ÐhÝÉsQÄ°T$d)`B¢*^÷k¶Ra(Ó'(U"ûTVj ¥ëèßc€v)Ñÿ⹘¡ˆÛä¢B£ê×j[Ÿ`s®<ÎÄ®|ȬàŽìIV>ŸT÷Ð7¹6åð& Úpq©æåK9xøÒ²tYÜ!]fGŒR8Ý¥. ÀòŽ› “ÅÍæê¹ǂ:– Á¨)}'Z꾒²Òm7£  ¥€KN¡³`°½ª©%IÔ͉Å*¨©¤‚K÷à¯ÄZb½»‘j9¸¦oê[6ÀÞè$}¡OÈB~'Æ$¸„4Ì4‘™Î͒&šD +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(
+'›gn9RøÃáï’?bÇ_?Äf|å[yÿÊñZO“AJçák—ìÆÃÝO6â,Ì`ç%¿Hþ¢÷™‚\Õ}ÊÓ´·×€©ÿ™ò~G÷ üp~”ÄXÔs—xfs»Ll|Ð*©‘°å–JP6Bi㌆Ñ ¯€že9–/—z±\„o'”ogæ˧™¿ñÂÓ<óQ!"ÆùÎR¥:P­akø‘B´”]Äm•^ãÿÂ~ğã¿þÃÿ":m²Ì1 Kx^µ; ["öœgX6ÂÉŽ“e vD0F8V4™ Û²ŸË¡ÐÃA 9|› sLD"oB¸)A^Eý2Ôk’'V»¢¿vú¦åâo¦¤²‚Z°Ý,5Þè3TM¬+c ýc˜©03.‰™™|Sê‹ý™q(>Ø4Š}¡´Á¨I :èI‹6†O5ïÅà•ý.Z|±_‹óéÂØSŒbŸ©ÍÚÔà˜q¡nûœÅ¢ÃOs8*Œ +\ui¿‡^ü}éÓq¢¸&QG¥\ÐN‚uM#~ö»ä4üòÉË@à +É­HÖâähà€œÔ¿H·¹Qýa$'‡£´[›õnP©÷b„UÆ riRÌ"ó.?c²hÙàR¨¶ˆ‚S‚X%UÕ
+³Á-Ú$°H
+ۅ¡Y8%ðÂ2 + X§}“Òb}ñøD` Ï]Ùn¡Š ¬YÜZR¢½™¶Ð7°z4Zf +—•XË­%ΰÕAٝh¾~·Î(\±âÀÁƒöX^`Ç6íƉOñ°0#yφÖúú(7¯·ò5Ð Vt·ÞµÈŽ5‡ÙR¶;;„ÄÎcyÉ*J¢¤Ú­’Š›ü ¹y$Ky›D,fíØN²­ie¥;K:•^ (çš~²õz5ý! Îi‰‹s΁Šªl±Vɐ[¤½¹Ú¼ü +”˜ƒÐ ÎNJ:º*ªï´®|âÆ©•£o¹ñ¦›ºÞâ°Ñu7wy&·WeíœÖàÕQÐk¹ðþ*ØÿWô„M½J/þfq8_#N槊b©ÖÅÖÅUæ©ÒúÚúºª<c¸1Ò`-aK¸{fr3¥ ÚLÛL×ÏíØ)ñœ:šÊ +•G+3˜‰ÜDy†"»ý¬`õ›LŽÞØs"¥Åà2 ô#t8“3h»—*1¨›s§d¡Jx¹>ªÀàûc- ¼—P¡ý؝W<N™T +‘nån•XàD»V_ÀO¢Ì‹zGÙ|kÿüvÝñ÷õg’-‡÷¯^µÿÀÊÕû‰çÞ» ùe뉿߅X}çíwÞûóÛoA¬-õ5ÐŅÞÑíÃÛÉ.­IûóýsÉγT u0©¥‹4¼E;å9ëIyØ è0;\6?]ìReÕ¬˜sL:tjʄáß4Àc˜¢ÒN¥ +ž 2Û³ÝÓàiö°p®®6&°ý&p·1@ÅEp@ëbt}
+z VÀTuw_¤»x«$‹² 3¼µòæ l‘mÅ@œ –ƒ„¢˜!¥N  ¼H§5l-RÚ8­«Ÿ˜ÿyíŽjMn,˜~óÜgØèC{«f÷︴u.YuÛÌn÷¿Óz º47®0촀–ꉁÒ&i»Ô 5Kg¤ ’€¤,i¶T/mkk:+¥$9KiX€þ¼#žãY™"b·±ÛÙ¶™=ËòÍì4k={,;@¼f•Ó6¹¢²_õƨØΩ³—•8P8kÙ¿Ÿ<yÙÉF/Ӂ>ôlò |7:d4à  /ú߄«õ(f*À_”qõ +`ñ….ÑX4 -CÛ~n7íØbÀ+CePêÒ-èêVãÙàÈÀ#ÁýÎíÔ©üЉê㝘'êÖGû{ÇQ63õ +w˜{EÐ'zU†#ÃIjsñ-¢ۘœ²¹Ik…ywÀ̄¼„Á‹‹ä1’`n-aȜú\œ› +ÊXöFÇ·9Wý[úè œ)x"ƒû©seìÂ?}¹6èÁ†3ü>¿×ÏðJT‹8£YQ1ÂFÏšB.‹=';ìAö²¹HûMîvXaB!”ÃÀ:=£V逡ìJ¾,båÙpv)+µå”td]n¡=þ¡ŠÆacAÖÊ­L?2scòÔöO’Ûàê϶a|toèÖC³V¿=Ôy5&÷ÝyáFRù<n=;gîa|Ë'ṍ“›þP<»¾ÿ ×l{5ùsý¸rlEi)ä£ …aôÚa$¥>Ñ»ÈEØsì9éK÷ù ÷!w)HÜb0,y2‚Ä~Þ Ê†*Ù0€cùToŠl sd“[›pâ '²‰ªœÐ½ˆ”„#ø{½ªv{s"MxáeDÃlÏ/÷ôGËÅD«êæ€üU€¦ +ºÕ}}O˜EŠ5ÛTg›$Œ]UÐàÑÃæz¤5JKÆŸž¶à¡¬;ßzüÙá17ÎþCãÈ ý–wa£{ëÈ#{µæ’ÇfŒíòàÎևÈþ… «¾¯õSÏ> Ëý@­<TŽ3õ{%U*𪾂|µ  ®vr–gt)è]PÓÔ©µÅëÔUù»ñíVO{ŸÍ;ä=š÷ª÷dÞ_œŸç‰=\8˝å‰”ÆÙxaoöæÂábMl’85¶@Y­¼©ü¢þ³–—š1«唺;†ž±ù³òI¾¿È\iÞhÞfN™¹mæ½æ͌ÙìgÜԛuytøýªÊ•;‚QϧC‘PN­k¹:ŠjÑ`´8º7ÊE;Ä©.Ì¢F!Þ'Ûã8îŽx²‹r^æOò$‹¯ä ß¡3ÕàD¥µbËŊÖó穀œ£þ-•8Z—Ú;î8µ’†áˆPû-+a6–²R÷ro$mÊÑép¹ÃQ†ÌÄi˜8‰©˜pxÚÞc½æÞ\6ýôd\RµfÙ¢ÌÏm§Ö®y¶Z“ÜÙÇüî[_5¦ãÌ©SžˆfÞ=¬çs+,à0«¾œˆ|[»jê<uëûêãú´_xáòÊ:ãÏóüZ^ÿ¢›kG¼ávà÷PróE>¼ú€Å-à–é;ýñ<ÇpË^™ÑUÝB,Á¼âRnE²¹T-ה«äª”Nj™y«Õ”g˳ß쪱ÕØkœSmSíS‹øê"ëbÇbçJuuƒmƒ}­c‹¼ËtL;j=âø^þÆñ“ÚªýâHù6@ðºm2b¼»=b“°cQ,V%b’&“ ð^QL<ã÷Z_ó“"ÿË~âo"•-vݦ;šÈPÝTiÓmd¬íe±5á›Yp6ªÊé!›%hÒõ R¬ T˜j%¥Î8Pd%•Á%ກä¶Ò—ÏcD¸<ÚÅs^íô¦Ï£µ5ä¡îURÔg¯÷™t7ã⫧R{REJê[dJ}‹Ó¸Úð‹©/•Çåìò¸¹)õíAgÜÚq©†Š +έ=7Ýùåw¥8(<àŸeŽ®…7»­QĜyüóXvVìoÉÝrŠ— /MNÞ­åådL·d²y­[ç/_²€L¿üÆޛj†P¯«gê[æ XR+ ÉôçdªµTí¡reŽ2ÿ2TìâŸL&p¥ñŽZsÖ܇öϽçíç?ºÿî=Ÿy6+•åÊʊù*\¾¾¾ÙY›²@ç¨í]]H™Ú—T©=½ý#äáêdõ<ÿëW|Ѭa'c6i”á7 V$;A=%E¬–ˆ¦²bͪ[k­õVÖ:ϖó²pR8#¤ö:8Y¶Juý[ZÊPëXqÎp¬éj†²MÄBeiϺÔf¨;Š®sǘÎ_]öáüiÜ]»¹è@kðùù žÚuÇ«ßpùÉm˜Y7¨1ÿړØÞyë•×N¿ó*ÈÆf„¸Án\©w` ÓD©K®\Æw’{É#˜UÌnj°@þ”ùTfò¸ +ì:îYö{‘“Y\Æ~Ä€gu à#¤«JÜF[)¦ÛJ––™FÙ|Àæ¢í_è7xáI‘È +¢äõÞ@A¢ (‘hLCC€‹Á4\”eÄÁ$"Qfˆ #¶‰tÑ-ÅÞÎ5pÍÜYŽåúˆ´ÍNpL¶‰¬ÒM¦`[Xe—á†Pƒ±©k¡<^Q‘66°‚V£o¾Êñ.
+¢ø§·g!%6õ‰Áçmœ:ÊV)¾¤Ðg隝DýÅ!T]ÔM¶¸˜íˆ³º#N?ü`ª×"†XPç×Í¡è2Á! ÿ‚uóqò Z·’»R¨õÒîHk>ù¸õ…+[È×ß'Y#ÆÖÈàyé0òÑX†Ó]J‚v +ë^ÐómŽÒ˜çˆv—‚í.@$+p'*qE<nÅvãf7vð@‰ºÐ¾ >2Û·Ý×àKùXŸ‘®A(ð9¥ t
+<PVà½êLÆZ®zπ¥(ÓVV¤1”a²}¬fV-*fò"'‚Í*H­ˆšï‚‚åÀ×ðùml ±Äêp¡‘N´ÎT.ùð–'j¦F“õ¶AƒîíÚøhãÍ3–Í%÷·¸§C¯AC6®!qpR1ªZì;]Œ?Õï`³Ù]¤>RœáÙ³—H÷J+rž¶?WxœQ%·Ïã.î[ø‘›Ë ÃÑ:bÙ3F#‘ǘÆ(cÔiâ4iš<Í4M™¦6Fs-¹ÑœÜœüN9£äӄ脼yáy9õ9ȏ*÷ç=Tø`ñNy·òdîμÑ?G]™´Ómø(17¢È¬/u²¦ö™>j©ýYÞJï@ïXï^ïI/oñfygyÏxÙ,ïF/ñ%ÐÔسº¦a +ŸÂa +LÇá*¥¥0[K1n?&sF&Éô;Ößޔåþ¯n÷”zÁêïr
+àÌýñS¸Àב^Í-(­íØܑTv¬ïH:jã̱dŸ¹Pép5¬U׌˜FÇÒÈÖÅXËÃE®9‰ޙsNk¥Ûkβ;ÝÝzn»@˜sF­šM³k Ÿ­3”'d`®lØ +™Ã(;¬*b¾œór%™±(Kˤ>]ÚE66†˜Ė/_N1( {¹+­ír£¹íÁa’Æ]BÚßց%@ÒP5Z¹ß²öŽ% Ë"¼¶u`·Î÷ +YúÒ(kƒ2wê’i.WQƊ—>õµ¥'?Å7ø§Ï™Øㆰ'Ò±÷ò½åeÅn¾c²gð˜Áåa¦]Î)é¶d̨m#ž§R·tf¶ãr©@Ý\»³”e’¼]>%™#Ä$»A{%êU¬S:¼kÈœ
+)¨â Z­Öª³U¶k>P»KT£!4ÆKqhE<QdŒ¾aC-„` +Ã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·
+ÛÌ· Fc:3Ï[Û`¼jë%è-ã)&p”XKÁe+O +À)(‘3¾ÛÔ±å‹roÃk&Ã?có§[/ŸªY·ùèKɬ$eû# 4«Ñ @€ÝCh° ""؋Øíp|;kD .%4•
+9qâõéf% r¢^hú>‚ +iAW()SKÌUæޞ¡ž9={÷>Ô¼8ßìŠäã¨TÍ/óuŠw ÷ÔdŽ +ÏÞ»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õÆ
+ç…J¯Æ>è8…føû­ç.ÑÀÅ׉s´4„­´Ÿ›š3(åB’4¸ËÀE28âúH줽¦ŽÝç-]ã1ã +Ÿ]¸í½{Ž-~zâgÛÿøýÖ§—.ÙµgñÂ]#}ƒ"'Œ*oX+>߂ñ†-õW¦ý|rásLÁ{Í/¿ó§×þ²hýøOð(5|û‹¶€wk¸±‡¼ñQ–Íìfq«ùaK3×Ì7 o[$‹îŠû»äT}ZîbZŽï5‰E¶lPci~o‘·˜^$Mʦ·Ìïh§™¥÷ÔÏ´ó²ÍÆóŒ Jæy‰cÆd±€«¨b‹EÕÀ׈jbMæšËÚkè5‰h$9’¢¾65¢0EadIbÂkªª(HhöÞêJ¶lÇKwêrÎxQç«ùz#i¤»n2w’ìð¡½­KÒé" áÖD+ bí¼v±åëÄ),H´K'ÚppÜbY-ÃÐé-‚ÛF“̸͞Épþ3ãJ¶;ÎÀJ÷÷‡â5²3Ž³CqI÷_5F$™ü”`\⦐¸œŽû0¹ !+’[¿|²½¿0ràãä}xý移$¿#y8ùK¯â›J.'•ÖwqŸšdý—®WòHžF$YÃ@h{yƒ©¶· mÌ-s–™˜Ÿ·ýïºÞ‹ ^V4·„n4ÒºìPö +¹‹—Õÿdr>‹¿<vxóºQ¹Üzú‡ä¿’"<ý ˆìe®Éh®dtÕZ:]F6’­"û< šç#qX!ø-9—…K‹‘áùNW-é¡h3mæpÓ9ÂyMGp^‰¨æ<Gci#jd(UÒaÛ k,¶’,ëŠ\nìöþЇ¾*šÇÞq㒬z½5–RÇG­?p·Œoy± Œ{¶5.Ó~R­qÉeó—ŠtCšR߀·•pÆ'º•¢<ØÀÞ·º”)E.ØÀÞiý`^ûR„EÉGyRTŽ£2ùfÔKŽ‡“q¤4 O"SÅ©ÒBt;¾,J·Ë«ñj²ŠY+¬×I¡-Ò}òóè ù%ô¢°O~ýY>>”ÿþ&_FåB€À²¹ä<•ËåH—%N(Íé&µTD1"ÉI’CH$Ân–Ó ¼ K Â\‘‚•lQ×u©^ìŽ3ê\=j`ŸˆŽ³Mßÿ…2CZ" çéaìø5¡°ã©¿ej€‰¢ð5q¢¡kùvàá’3þx.’å‰ýãpò66Úºbò¬¡ ȚôȂ8¦øՍ臄-Þ"o±W÷Îö>¢<ªîVEŸš§6x›½¬—2Fž/«4STÅ◱“Äv–T»Í)»Îº#,à~œNSèЖ¦ û³J7Á³žôxá#(„.a¸ Pk,V¡]„Ï«Û’ c"4Ó¢%nM»bÍÊK/ò `$[²òàQܺ„¡.æ”ÐN°´¿:t´sÿ¶mvßÝ úÉèÜqp“'™‡7ÔM/í9Âö˜Ü³öÖ +W&e^d5ðDe¤¢‹z'ÛHeŠò°²[ySáú1ýÔ?°Œ +) '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ïԕëÊå^æ
+¯‹oú…ÞJ2Ô<]™`^l[l_k;f;ï;ŸqÁ§¼lzÑN24¿–©4þ© HHE"”Rê‚î ȚÈóoù}¿ß'ú} ÐÛçgԀÖDvh kxª‡ÔC´`¢ÈsÝïßê  ðQ²Ü{ +wÖëÁJ2–Ì"Ëà…”…7$¥æh
+\֒Îâ¡6Þj¤µÙÒymæ¶|B#š%ˆé†:}s"ÎP´œ†ÒÛ,<$££:2Ä ¬p¥œ¸#O>üã®­wÜõ(>lÿù½÷/ÝüÌñ'ÆöìéV1¾ùÎWÏOšþÀ£ëì'?ý~ÏÈgí\3®ðÝ°Ô7¬(©¡Lt°‘z5SêÂ~4ýˆã‚Õ«€Ð­,¿š¬1­±¼iæ$Áä!Uö~Î>ÞîCícœc¼ƒ3¦ ÓMãí3œÓ½µ‹ÈíüÓbËj~‹°Y{Ósš|ÄdúÌâóXÎPU÷\‰R­˜Æ‘4Ð?›²¬sÑUeŒIЦÀë믎L_J££ô°4õ† òô±k†#첁Y?(7jר#dՀL?lúûÛìŸwÓ´÷w|°è¾Ã»—,Ù½ûÎ%}ä}Ìâž{ ™:L&ÿ´gˋø±äC?^ÀS𴦮¢ÞæêäT6Þ¦ +øì¤þ”¢µÓnÐújle°!H²‚ùJ8³£³cæM™³ƒ›‚bw—Œ>î>5âheŒ{LÆ4qº2U›éžžÑ|ßñ¹çsßûsŽs³ÁTÐfcZÌYÆvÑz²}´QÚyÓß3“šÉjf\~#}Áå7›Ù›sJƚ¬Ëµr½ÌÊ󰽄”Ø"5c¼ oÇ +ø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‰Ž½
+Fö'J[[†ƒÕÈwpa‡ëºÐúåžÂÞӇwv+évlrcëí§V|™<÷ØÚo÷|ÞZ>ðÞsv>qÇâgÙ!æiÅý‹oüá¯ãk“ÿù˺–;q_¼ï~e×ñ+Ÿ'ž­iz|ËÞ½Ôî +O}ͺ€r1ô¾žÇ©.µJ]¥²UÖÖÌ`× mšc‚k¾ºÈ±J]çX›ñ”*sA#:a¢sVY‡US5¥Ã͎b:ÍPÅeŠâd=GÈNä"æ8~Ž +䫶¹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!]
+™Ùð5 µ¡ÇIþýýgÜ_óCòÍä|DZÇý:¬H®åŽ˜mÍ<šlm}žÁ–¹Û©Â£&¥¾á€Ÿ™‰šôÚñdZ& ¢Žêx÷ó2ëъÌMèaî9æ)õ0Ó¨¾®žBç2ÿi5Û2­™™LŸg-ð³z©Ã#œÃ½S¸é™wØÖÛf ûwád—õC³9Osh>–P¨—7Âõ¹yq͂0›a(LF€•´¨¥ŠÒj_–;±è +Œs5*d¤ü^UYVC¦b±5˜f^Ÿ'Ò ¥¡ÚÇlãñ’:ߒüø‘½¸ûñ¿â®/—`÷ßÆÌüzՓ_ÒáÇ˯àÛþrÛwöívÛï"ùã}G“ß­;ÔyTÒr#éi_#1¸ó +éá’ÒtÙ®8]æå§Ëp:qø@f ]z|iôV¤j¥An·—c˜ Fh#ڎ[dđϠ ˆ³¡q<î ö£ƒÀWÜ_¬–¨¡ùI×ÐD:y˜>_>nä ƒó€×Óð›Òo.âpÊc"r‘R¬Ô*kŵÒ&¥Y¹ ˜‚JµΘI$²$EÎ!ŠÜ?H8!œ„ ÷]PF¢4QĉH_۔¯q½¸I„}Œu•èyñ±o$Û!´Åäª9RÌÕÂÇ5s8Žk"k˜jwyb^*¹ÒÕC“WÀßóy[<•ÿ5w$‘î ‰ëÈøñŸû%¦…èÆù!-â4•=Nëô[*»á% h…Ó©ë˜tk}ã/xiû¬ìvxÃk­@¡Ë×Ï^¸Í7(µ!Þ”Òð|}"x@†È.PV)o(Œ¤ôVz[˜|6¢šG2£ÙêBójU4NŒ«ÌI_Œ¹Ø_½É,o![™ÍÂfqóŒÀÛˆu1GGDÀ$ŜUQlLÇ­ˆHXÁ¤ªf³ô%µ¶z±!»À@uØρ¶tY‘ä ®,3aÓ2™± ŽMºŠ3h™­ap‡¿Z×s Ðy×+'¡t¾˜¨ð´V¤çé@Ýwmç\y(ˆÓ®[|íþbýmšÎKHI]Hð"©Ú¯À±<ƒðjêç}f™¶¶á…â搁y•ÇÍˍêÁvÐÚîj¦ïœ:#S˜j®tO…¬a+c뜃G»¼p0w49|or$tٿúæʯ=Ù·/—±g/Qz\ž-€¾ãP‰®`Â2‰A:£‰<£›´iPþ7 +ª¡+Ài 97'¡ù÷ž´¦æFÁý, WèÑ`î.ú3©f¶j Aóeejm7\wãK‰–ks `܉ÉHè²"Ë{=>áM²"«2Ã;]—ÝÅðŒ;„mfØxD?ÐA¶†‘WËqZ­»ÜàÄ;ˆ™„#¡ŽmPÇÐíø—çFÝY3oî€Å÷X™Ü‡ã÷=Õ¡ªÿC3ìI¾Ãqfö»5yòÕg’ÉÝã:îéԡ껧¿þOA€zð#S÷r?pÐùÎئß?6º-J¼žr'1ùÙ,šÊçÈr„ù®;íÊU¸»Dûqýܽ£ nXxdtw³˜ÛÀlàD3;ÑṡèC×ytÞ}Þãós1TÀuåØw¿gsôÃ(qDK]ñhoOoUVU¸ot¸8Ò:Ì9Ê?*sxֈàˆì©Ü$çôèÑ{ý÷F?óü5êuÒ¼òŒ8¢˜ù†Œ8a\yŒõ¸8ć»#tq9€…!bN@|Q{â Ԑ‚P4"ãÍ¿Þb€ÙL Ãb´%/ºãÈZ¢½iddƒAsê ¡h4˜|͌PúCk'k)‰^ŸPÍeZ='þøcOþùõä±½ +¸êÍ·qÏçnkýz×Ìç}wߧɯpÆ_§Œ=ñ±DluüŽÑÍxÌéOñ„#¯$Ÿ:}0y枢ģ8¾Ë$?NÂÉÉws»z«v€Î6Fßêt9jɎßYc0Íew––²]E@GâËÓÜ·AAÄJq·Ÿ—Q’ºpÐUí"tZG½‹q©FV§1ƒ®•Nª€(±MïLÔÞDK:œZbu´¥I†cdekOH^þàÝ䯳÷Ú³ô£Cܑ+û>O^yò^¬~Ç ¼²ÿ僷Ç*‘Å ‘GŒYŽu•#–CI§·ƒß7÷@0=ÙðE>ˆIõõ0>ˆÓƒ¾pT<´5-LtfÖz.ñµfdÃV^\YFçò{2“]—ÌàÔ={~ý7åæU©oÙ,ªÁŒ¦ç1§Xr¸2®Šã*³²HVV¶¿Ä“Ÿæ)ñ]ì4i©Ÿ«Ÿ/!&ԑ–„ëß4q†:År›ë6_sÖ§Êi÷iïWö¸ÿáý›‘éä +rE–"G1Wiѹ~–jnw:ó'öWMќf–'(ƒSÙ Àԓsʄ5“nª5՛XÓ<l-A%L„ÿ–z]M%ø=*¥,Zù[B“KCáô¨&xxx°¹ŒÃ}ËÚî™Æ9ûnÝ[§'ÿõÒ±é¤tØ} žjþ‚ç¹#­?m¸ñ­¹É“=†7¿<lý‰·O½vh6xìsÐf”–éµ> vhG†;#ƒe5Öar›2ØÝîCæ×̌ÛíÉ ÁLÝ:Ð>ЭûFr#¥Ú0ëXû(÷XÏp߈Œõî­DóÆ0IÎhPÀ‚¯>gZ¢´g½þߋa¢ÿïÀ‚vÁQ3¯<=ù'-iãñ܉JUcòÐË'“Gv½3?þ g€x½›ü˜¼…gâǎ'Ÿúë™äöƒoàQLþ'y—âŒØô@ò<åÈ1€wþ>m1JꏎgƳs™y,É-câþîLo¡_fUVœž¹C˜aL戼µvsžÍ!9Ln¤“¥4Ü#RU4*8<<,2Ã4Mnžä˜èYdZ¬.¶,Õæç̍¬b֪֙ë,÷h+sîŽÜ¯n¶lv"9fÕąÀvd÷ƒð8’“ +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
+¦36¸Òð|ä®iHҖ§qñZ:Ž1(¯fÛ§ÝHL3E½§1 ìPϸ¨wLW;ÆøDŠy¡Ú1]¥­a£ª›ÂqÁì€ÕN÷/²C53]̈́ª“VÞw-O°-ãµÍZê”XÁŸ|ôu†yýJœÈåì2p ë/×·qá‹lÙÈ>]³8p›/“>ÖÑÖ{­Œ•æJY¡R͟™ž¨ïÉÊ)eyE²ó’×ƱˆåM’É,Ú4dg‚_Ì0ešsPD(cæRT&t»š{0½x]è/ö5u·ô²ö±¶ ¶M&ˆ“m‹øÅÂ<ñ0ÄrÈöYÊ3YóPžškγäڊQ¹ívq•¸…yHyï"»LO+Ñ!þˆù +ö#þSé[ö[Ë7¶‹ü¯’ßÆ¡8Z4)Š¬Y­–¦Tß²›R½õI²Åü“Uƒ‚Õf‹qàÁ,+JD5;€ˆV‹%&‹ ."Ý62†l¬h±*fU¶Ê,cS…ÎÓ¥’d³Ð˜…츤©˜&gÕ«ŒÚ„ŸÑåà@ϒ—Q9"Ãti ϲ.³Re˜nÒ8\k̔¤‚Ÿ9ˆ/Ù/M2t™·ÿÅDÂÖþé ZÂó¿ÏŒne³Ûÿ‹‰Ñt¼™®´N×¾ +YCF6ªA%HŽ¥Î" «9uª[‚¶¦ÔÙk¡£š¾ +¥CɈ©SûQ‚†Èm‰wÄÔÙ}B0ÝjkHt2ý©C– ½7hªSû…bzÇý¨39’~Òµ›_»Îm\gM= Ù ê|]v¸p“-Ž
+m† ¼ÏO}Ó¹Áf¢‡Æ¸¡ÝmÌÊfrÜ7yôÈîJ¶d÷áme7ڛl<º;ÿc6ÚúÈ9ë[ä¶Ö-oŸ “.Ÿ&K^9 ܟ‡óp¿¯ÑU[yS$6Ü1­‚ßÕ%¨à†Ö=®÷J>ɓŠ´8ŽË½qOÒSì- +ÔÆà¡d¨8JªÖfàñd¼8MºÏïÖã•âZé|‘dxÅ(ÎcR\|Jü t\ÿEÍYJàË$êÜç‚#NºH2e9‚ 0Áô.È8.&ð¼<NEjÌ,ƒ¶4óq<¯Qˆ„lu»#³n®5כ/˜9ó<$߉ñ^„¢Y(E§ÑX´y!š¼ðÛÔWšGrÎÉÔZ9VçÁ³<oxZmØTt,¹ à´-yù`>ŽŠ4»4M‘ öŽ¿HÉCi”ž¶TWc¨nÊ_ì·Ð¯k+¾}1#.‰®Œ¨Ùï¦M?ë²+N°ú\¿å6””a>L}\,t* 9óÈι#“™ ­¯ÌZ4 +ÿý~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Ô—É©‹þÏöé
+®¤}×½›ÑqWû>Ëbw'§ÞujåôãÅèziFzx´kDx3Ã5Ó79¼Ø·4°Á·>ð°k·ï˜ï{××ÁKAû +®Ç]{\L—ü <É¥ê-œ:«{BA>˜hk&f³?;ààðûÕ遪F6àW³Žà8pBgÝê1FW€a=š‡x6ÒÑ«F:xe½ô·ê`46Å^ÿïã÷m? puÊpoӃ)4o/—O§ŠpÙ¬Æàg—þ–;{kɸ!K«;áNGgº‚…×6¶Ü±øŸO<š¼ýÔ¼…ûw/YºÑßÖoÙ'³ÏðéXüä ÖNþ-ù¯ä7É/¼Ì”>rèÕG7¤Ç¨( +CÜÓ@Ãïõ̾¾E™ë27۟±ÿIùHù,C”ìs‘Š¹b%¤Òì²Óf·¿e¶8Ìv‡Ù¢6‘ºÝ,œºy;¥žEwb§Óo£)•¿OG¯š°GS:ZÇj³´eÚFÕꅹÿEË í.Cü RqçýæƒÿۈUÖïG¬~³ª¸ž¸VXA¤Î­Ó¿*ƒ <š¼.Å<=^e`Τg?Y”Ã^rnqW㞠+#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Ì
+¬HôDù¡‘¨â+Ì ´Ec×ú\jû½†ßýÀ ͧ£ŠéAŶ1 ßF +Í$ŒCÓÑÂh8Çʍ¬V¨o&Ñ]oϝ4yåÆõ¯lH>€oXÞ¹Oߞw=žü ϼ%Ú}T—¡nHîáŽÔžxËÓ%¹Çê'ï«íÀ ¶º&õï=+ÿòvAé<½çàE¨™f¦ Ë3³{鹏YABG"DX–@§m#'I½Ì!Ÿ„½âˆQ×)¥Dýé(#»§\¾Ì +÷°]®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
+Ôh i«u}}Ä+Y±Ñ…Ê˜O®VÞ{jU×Aù½\c‡üV +aþMFw@iô‰>ƠяvrF8c''…“vò²ð²ìöÚÉ6a›l6ÚɝvrY¼ì 3Ä2Jå Š¨´ÑH±˜¤j˜U‚•
+UÐ̃j½È>KX&ly*̪RÒÈ<}*F ³Øýz"Qµž3Œª¤ÜÞ¢ýΜ_G¦9×Ó '°3L“ÊÊÝ<ÿÿµ÷¤áqWVuϥ͡{¤iZ’uز%[’-ëÀْQlK>äøjZÒØ3šñôŒ…X±ÜKÀ„å$_ ÞÀr9È!2&Ÿ!&ñbâ +l Ù@¸!q6Ž ›¯^×ÌH>Éîýa^ÕëªW¯^½÷êêé®1NÃiæ Ҝ/Ï­«éÝqL÷"è§iÍìå9_ސÄÀhàRºqoÜ'í1ÒÄaDÄdü†$HAȳ$N27n>ëô¡ßÇn9ûä¡GÅ·>ý¥0úÙvêPÃþÏØ3m[Åqa×cß[}ÂOúÄ[T:»Öb0õDë9½Áò»“ ;b45™íÚ‰ì½ «½6åm*ê@³ìùQš›ÊՊO|:>×døê3öUÏôC **´ÅK +†wVŸ÷Ö\Æä|ôÑäI-d=- f6¶Æt]ཹ<q¾¢KÉ6Ø¿›ñ]÷ь£îOò +TÈ"):1“¤è +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¡Æ
+Íw»Rî¾ ¼ï¤Õk7œ—àÓà0Åã?àWcÎ܅~†g¸°ïÜg~Yi?ë×h»r2ŠÖdÀ –Q#2¨É*Ù4YœÁ¶Ë(ìßðØÑË&OÓª +÷n îÛ°ÿåvš=ù£ +÷®Ÿüá†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;
+Pÿ؀w*¾)ýS.À>ОkØdËZŠÃ-…?!¤cS½M0²Ð§Ù fZü­!õçÁÜ?¿üSØÔ\¿qQž0qœúg¥ïXÕÐXñpOƒï÷gã7lß]}ÙöÀä}ØââIaµþ%œ1Þä³*N”ÔD3…wïž3µî3îËî2Þŧְ1œ!(&%Sè4užgVMÅY& +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è'×ü`×¾Ï
+Ÿ¼B}ä©Ý±šô ¦ÆÕ´’œ¼þ‘;þk™¸ÿøñ#GO¼~”ùŸWô ¯Áèé$7y/³P èÜe֙SRÙ¯ˆ +*8ÙùçF¢M9éV£Ñ g'¢ãèÖTK¦Î(š¨Ù ·è@à ‡ +°Rz&þ{¼VýÃě–QKrsÃZª`݇m¶À†ˆÝ%Ž?6ξã¾
+ÓYNiYÁȈFíË}èõu¥Þʽ—fЯŠ™ý7V^{å%¡+:.[¼;Z}nÿ‹g§ÕwOíÜ;æØÞ²®ã–Û/[·§2^ýmaѦíÛìM4¹Lx²ü¾÷ËæÄO™gޏodÂ2†ÿ®
+–3.™\M–%£?ë'GÖ I¿~ê3ýQòñv’Ë~@¿žì£GÉõ:•´ë¹Òf “áºàfÈciêIÐð8¹Ò.ºBˆ—CÙ{!¾®›ç· ^ÃÊ@ù« Ì³& ÁõRH·³4Àß<ò2ÏhXÇʬXÐ |¿ üú€î0à)Pï× ý^Hû&ȱ‘ɯ{ŸÌ‡´›àÚ4› þ +ÔQ.d’ç Î&;½™l¼[§N½Çëc £üO’ä­èž
+?%[!/ xÔ1ý„kV~ÐnÓ£Sû íR1ŸxA¯‹È‡ôEá9á9‘Šâ'º3úmúÆvÃkÆ2£Ïd3=œr“ùJK¦å?S‡­ß¶ž±}Ån°/·÷:zÓÜiŸ¦7¦ß–Ñ•ñjæ@–5ëëÙ5Ù¯ä\é¬qޒ›“ÌòÞu™\W¹Ûݏ¹ßÏ¿:ÿã‚CÕ3Yxuі¢ë‹)Ö—÷Ì*šõR‰§d_É¥2ZÖX¶§|{ù#åoÏN}ãלs¾]á®xb® =bÙ£&û`„©"KÙjÄü¤ ¶\\MϟÄPDO2㕈¥lÔÄq‘l¥Ù×3r\OœôŽ€þ^Žɋô[7‘Ra€ã)ä„;8nÖ}_trÜBzŒop<•ô™š8n5<mÚÇqÙl_ŸðõkícWw,à8ìp‹8.’*Ç%×M€ãz’êØÅqÐ_Íq#éqÜÀqÉp|ÈñÒæ8Ãq³ §-ḅ,È؛øµ£šŒW8n7eŠ·‘Êœ- Õ1­§æ܆¸žY$ç>Ä +˜þψ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ùŒ¦Üƒ¸ñ
+Äg!}âsoC|ëå 7¡üǺʷ1<UK߉8¶¥|ˆt‘aX-)¤ÈıDè"ˆ¯"!2åTŒÜ!œ…2¤û‘B‚””¯¬Óåÿ%§ª„d鄜‰%hTH[ ±VßRŸùdǪ1µJ ^ eúA†(–Z üT€Ù +a/PE _J–Óuà*rŽ´ +Ó(¥³hÈzä¨&ZÀ$X ¡Dʁ“äŒ@Ž
+ÐgOãu¡’IŠU ‡äÕ·Q£L_½P2ˆõï„4Æùo×µ©¬E~$Š1ÝHpÍh¢œë:°ƒDÖ`y‰”b}« 쀺ûPç2гr
+peZ’Œ[åydÒì‚z™La ¾ •‚~Åè†PªþD½~îµóÐ.!ÒÃ¥^9è92H37!{sü衝ÆPjÍš71 ,CI¢¨å¸Þ" ‹T2÷A͓ü¨û^ô,ækƒX×tñq^2ÊÆJ‘#“{ê"GMûJ-c}>n +-‡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
+ïqJ§#8~Dyîãþx>}Å{!Ә2K²Ÿ[_/Ÿ™öàȨIÝÃ-3È9ŸÏBeت™šÒFäs½âܚãcÅd\ƒÊPk€k[åcȅêfÚ_)Éqvø[(|•1}Í¥Þ2JFÍúùJç‹Ø\â¾88ml‹×ËF’^Ô´Ú,™¶Fž› ŽLóÛäÜýùšbÒ‘ܯB3ø +¡ý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%¢²
+ª+WKå«ü¾HH +õEg#ÕôLLXՅѣRWDîU‚rd§êû\©¥ˆÒïW£JDé•üƒRH×uJkä¨T*u­’:úú*%y°WRª24d• NÐÞPD OOR¤Öˆ<äìgeý ÚyÒÚP°^í÷ +„²:—qø}~Yê”cƒ½ÐPÓâêe¡Á¨d²E†%U +‚’ü}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 (Ê
+ÕCP‰°7¦F±©jt8 L×óT•Õ¢D‚þA¤ˆ„v[ä÷Å "̀½~¹?Äò‡@çҀƒFBR¿·‚èò²uHAt7è÷¹+ ÆAŸ•hêö3eIÊИ – m*øN€ñú¨Þ(ïD*¯Ï%z)¦‚K¡6•]1&lÌÇô/õ… ÉÀ2?¦G°{\̤‚ÊÐ=á2(÷ËWúµõÍՔÅ{ýj8 ³*XéAeH +Ëa +HzAĨ_eŒy8
+†[å@4n¨ªª r‡­ô…‚UÑ` *e¿q_T·É¬á•,ñ Rª`‘Õ]+—¯\ÖÒµ²cµÔ±\úÒÊem«;Û¤–kÛÚVµ­î²š­æ®Pk\kLÅÌ& (´ Š=OÃÆ0Gfmî–†C1VÒǼ +ôŒýHsKpôQ°/t¿A —û#ŠÂ<±Rê†b2¸A¨‡u#(! óÎ!æN
+NašŽ(¾(عô˜”‹™0Ô¯ š8QLÞÛ‹k3=jZƒÊÔ¸PàÈ U$
+3o“vˁ˜Ü&«à!ÓKWJëÑg‡ã­€6ñ‘ Ü[–Ô°âóàsnË%Ðâ z++÷öú™O€WFpDžË’#¨[ìÝg ðý¬AP Ò +…";UÍIÑ114j¬'àWX=ÀKSwäS…‡%Íy¹†fV„úXٗl½vÅ«qϧDy "\n$VB±@/ô¡Ý~eH®Îi>£K*0ô&‡¸DA,X}ѤYÃd.ußù٢ȉ¼ßsFPm`ë:[`(_\[7[ª[°xÞüÚùóSRÖµCâü jk!¬«©“ê-¬_Xo5_ ×}ngdWU\<쇰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€(ü>ï ï‘k…wÙ¯³@Ø °à0ÀN„wáó|ÞÞª·H@3À6€½‡N…· t?gOcÈðfAø9„áMh֛څ7{CxDûÉX]}õAD*ª8â)áHŽ‹#éÙÕ¿™í™Þ—*<¶ÌNQ*;ÌO ` +Àv€0€°×{ŒÜ ð À(€ʼe^‡2Ç~ð:™àX`^ƒj&„•.õ´d ÿ*%9 Ôã¿`ü#ᇿ,ü㗠.€ø˜ðñi±@>2ˆWA¾^xa|Vºgª%M8 êñ@XРа +`€A8,õzҁÉ!rÌD€rŒœÄø²ÏD¼;<ÞÒeàc J. ‚½ÒÞRÁ[zïýpɂÒ;7|0”^y`,( +쌥½;cAé¦m€± ´£ 0&„o~wV™§®c'•ZìÂhi´4Z":aˆ}È“íëcsæ€ÆðV̞ãy–Ž<GGÖґ}tD¡#×БëèHÙJG*舛ŽÐ/9Dƒ*F¨÷é—õ^'9FGöÓ•Ž”Ò‘:2‹ŽH´Î;!Ž­¬Á¨ +£ñÖ¯ ¾dIµd,‚[B·? ᏦðÊ DR‘Fœ[Àâ¢ñ9ÍÚueCu¨åRá<f8BÞЁŽ€&ìét;„Í۞8 +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
+)Aº’”¤ÓQFw@ÕÖz`Ö,¤É¥'Ò¨9Òtšc%@SR‚4Ù#äÒËa4£KÄí’7’Ð<âF7ÍC’õI’*Nrk‚äV¬I¤I·Fc}7Nc}h*¾èŸ²´¢‚Ž7vû6·)ÅmۋÛ€í£·ípŽŽôHÒ_7ːFÅÒí=¾ËÊhw±Ò:ê+n•4n>Oöf–ÝXÜz€lnëÚx`³Wikô6¶Ë­Ýã+ÖÔÖͨëÖD]µkÎÃl +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
Index: pcivme-3.2/doc/template.h
===================================================================
--- pcivme-3.2/doc/template.h (nonexistent)
+++ pcivme-3.2/doc/template.h (revision 9)
@@ -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__
Index: pcivme-3.2/doc/todo.txt
===================================================================
--- pcivme-3.2/doc/todo.txt (nonexistent)
+++ pcivme-3.2/doc/todo.txt (revision 9)
@@ -0,0 +1,8 @@
+Stand: 113.08.2004
+
+1. paging access to VME
+2. debugging pvmon
+3. mmap feature revivify
+
+
+
Index: pcivme-3.2/doc/template.make
===================================================================
--- pcivme-3.2/doc/template.make (nonexistent)
+++ pcivme-3.2/doc/template.make (revision 9)
@@ -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
+
Index: pcivme-3.2/doc/COPYING
===================================================================
--- pcivme-3.2/doc/COPYING (nonexistent)
+++ pcivme-3.2/doc/COPYING (revision 9)
@@ -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.
Index: pcivme-3.2/doc/template.c
===================================================================
--- pcivme-3.2/doc/template.c (nonexistent)
+++ pcivme-3.2/doc/template.c (revision 9)
@@ -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
+
Index: pcivme-3.2/lib/pcivme_ni.h
===================================================================
--- pcivme-3.2/lib/pcivme_ni.h (nonexistent)
+++ pcivme-3.2/lib/pcivme_ni.h (revision 9)
@@ -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__ */
Index: pcivme-3.2/lib/pcivme_ni.c
===================================================================
--- pcivme-3.2/lib/pcivme_ni.c (nonexistent)
+++ pcivme-3.2/lib/pcivme_ni.c (revision 9)
@@ -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;
+}
+
+
Index: pcivme-3.2/lib/Makefile
===================================================================
--- pcivme-3.2/lib/Makefile (nonexistent)
+++ pcivme-3.2/lib/Makefile (revision 9)
@@ -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
+
+
+
+
Index: pcivme-3.2/driver/pciif.h
===================================================================
--- pcivme-3.2/driver/pciif.h (nonexistent)
+++ pcivme-3.2/driver/pciif.h (revision 9)
@@ -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__
+
+
Index: pcivme-3.2/driver/pcivme.mod.c
===================================================================
--- pcivme-3.2/driver/pcivme.mod.c (nonexistent)
+++ pcivme-3.2/driver/pcivme.mod.c (revision 9)
@@ -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");
Index: pcivme-3.2/driver/modules.order
===================================================================
--- pcivme-3.2/driver/modules.order (nonexistent)
+++ pcivme-3.2/driver/modules.order (revision 9)
@@ -0,0 +1 @@
+kernel//home/f9daq/pcivme-3.2/driver/pcivme.ko
Index: pcivme-3.2/driver/pcivme_load
===================================================================
--- pcivme-3.2/driver/pcivme_load (nonexistent)
+++ pcivme-3.2/driver/pcivme_load (revision 9)
@@ -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
+
/pcivme-3.2/driver/pcivme_load
Property changes:
Added: svn:executable
Index: pcivme-3.2/driver/plxbug.c
===================================================================
--- pcivme-3.2/driver/plxbug.c (nonexistent)
+++ pcivme-3.2/driver/plxbug.c (revision 9)
@@ -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;
+}
+
Index: pcivme-3.2/driver/.fops.o.cmd
===================================================================
--- pcivme-3.2/driver/.fops.o.cmd (nonexistent)
+++ pcivme-3.2/driver/.fops.o.cmd (revision 9)
@@ -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):
Index: pcivme-3.2/driver/plxbug.h
===================================================================
--- pcivme-3.2/driver/plxbug.h (nonexistent)
+++ pcivme-3.2/driver/plxbug.h (revision 9)
@@ -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__ */
Index: pcivme-3.2/driver/.askpci.o.cmd
===================================================================
--- pcivme-3.2/driver/.askpci.o.cmd (nonexistent)
+++ pcivme-3.2/driver/.askpci.o.cmd (revision 9)
@@ -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):
Index: pcivme-3.2/driver/fops.c
===================================================================
--- pcivme-3.2/driver/fops.c (nonexistent)
+++ pcivme-3.2/driver/fops.c (revision 9)
@@ -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
+
+
+
+
+
Index: pcivme-3.2/driver/Module.markers
===================================================================
--- pcivme-3.2/driver/Module.markers (nonexistent)
+++ pcivme-3.2/driver/Module.markers (revision 9)
@@ -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
Index: pcivme-3.2/driver/pcivme.ko
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/pcivme-3.2/driver/pcivme.ko
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: pcivme-3.2/driver/askpci.c
===================================================================
--- pcivme-3.2/driver/askpci.c (nonexistent)
+++ pcivme-3.2/driver/askpci.c (revision 9)
@@ -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;
+}
+
+
+/* ------------------------------------------------------------------------- */
+/* ------------------------------------------------------------------------- */
+
Index: pcivme-3.2/driver/Module.symvers
===================================================================
Index: pcivme-3.2/driver/fops.h
===================================================================
--- 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__
Index: pcivme-3.2/driver/.pcivme.o.cmd
===================================================================
--- pcivme-3.2/driver/.pcivme.o.cmd (nonexistent)
+++ pcivme-3.2/driver/.pcivme.o.cmd (revision 9)
@@ -0,0 +1 @@
+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
Index: pcivme-3.2/driver/askpci.h
===================================================================
--- pcivme-3.2/driver/askpci.h (nonexistent)
+++ pcivme-3.2/driver/askpci.h (revision 9)
@@ -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__ */
+
+
Index: pcivme-3.2/driver/.main.o.cmd
===================================================================
--- pcivme-3.2/driver/.main.o.cmd (nonexistent)
+++ pcivme-3.2/driver/.main.o.cmd (revision 9)
@@ -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):
Index: pcivme-3.2/driver/README.changes
===================================================================
--- pcivme-3.2/driver/README.changes (nonexistent)
+++ pcivme-3.2/driver/README.changes (revision 9)
@@ -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
Index: pcivme-3.2/driver/main.c
===================================================================
--- pcivme-3.2/driver/main.c (nonexistent)
+++ pcivme-3.2/driver/main.c (revision 9)
@@ -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;
+}
+
Index: pcivme-3.2/driver/.tmp_versions/pcivme.mod
===================================================================
--- pcivme-3.2/driver/.tmp_versions/pcivme.mod (nonexistent)
+++ pcivme-3.2/driver/.tmp_versions/pcivme.mod (revision 9)
@@ -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
Index: pcivme-3.2/driver/plx9050.h
===================================================================
--- pcivme-3.2/driver/plx9050.h (nonexistent)
+++ pcivme-3.2/driver/plx9050.h (revision 9)
@@ -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__ */
Index: pcivme-3.2/driver/vic.h
===================================================================
--- pcivme-3.2/driver/vic.h (nonexistent)
+++ pcivme-3.2/driver/vic.h (revision 9)
@@ -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__
+
+
Index: pcivme-3.2/driver/pcivme.h
===================================================================
--- pcivme-3.2/driver/pcivme.h (nonexistent)
+++ pcivme-3.2/driver/pcivme.h (revision 9)
@@ -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__ */
Index: pcivme-3.2/driver/main.h
===================================================================
--- pcivme-3.2/driver/main.h (nonexistent)
+++ pcivme-3.2/driver/main.h (revision 9)
@@ -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__
+
Index: pcivme-3.2/driver/.pcivme.ko.cmd
===================================================================
--- pcivme-3.2/driver/.pcivme.ko.cmd (nonexistent)
+++ pcivme-3.2/driver/.pcivme.ko.cmd (revision 9)
@@ -0,0 +1 @@
+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
Index: pcivme-3.2/driver/Makefile
===================================================================
--- pcivme-3.2/driver/Makefile (nonexistent)
+++ pcivme-3.2/driver/Makefile (revision 9)
@@ -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
+
Index: pcivme-3.2/driver/vme.h
===================================================================
--- pcivme-3.2/driver/vme.h (nonexistent)
+++ pcivme-3.2/driver/vme.h (revision 9)
@@ -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__
+
+
Index: pcivme-3.2/driver/.pcivme.mod.o.cmd
===================================================================
--- pcivme-3.2/driver/.pcivme.mod.o.cmd (nonexistent)
+++ pcivme-3.2/driver/.pcivme.mod.o.cmd (revision 9)
@@ -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):
Index: pcivme-3.2/driver/common.h
===================================================================
--- pcivme-3.2/driver/common.h (nonexistent)
+++ pcivme-3.2/driver/common.h (revision 9)
@@ -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__ */
Index: pcivme-3.2/driver/.plxbug.o.cmd
===================================================================
--- pcivme-3.2/driver/.plxbug.o.cmd (nonexistent)
+++ pcivme-3.2/driver/.plxbug.o.cmd (revision 9)
@@ -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):
Index: pcivme-3.2/Makefile
===================================================================
--- pcivme-3.2/Makefile (nonexistent)
+++ pcivme-3.2/Makefile (revision 9)
@@ -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 ..
+
+
+
+
+