fdhwlib  2.0.25
/home/kopmann/git-mirror/fdhwlib/fdhwlib/menable/menable.h
Go to the documentation of this file.
00001 //+-------------------------------------------------------------------
00002 //
00003 //  
00004 //  Copyright (C) Silicon Software GmbH, 1997-98.
00005 //
00006 //  File:       menable.h
00007 //
00008 //  Contents:   
00009 //              
00010 //
00011 //
00012 //--------------------------------------------------------------------
00013 
00014 #ifndef __MENABLEH
00015 #define __MENABLEH
00016 
00017 #include <stdio.h>
00018 #include "os_type.h"
00019 #include "mem_siso.h"
00020 #include "hap.h"
00021 
00022 typedef unsigned long microenable;
00023 typedef unsigned long fpga_design;
00024 typedef unsigned long eeprom;
00025 typedef unsigned long readback_array;
00026 typedef unsigned long xc_array;
00027 //typedef unsigned long HAP;
00028 typedef unsigned long short_info;
00029 typedef unsigned long Idcode_struct;
00030 //typedef unsigned long rbt_info;
00031 
00032 typedef struct service_s {
00033         unsigned long version;
00034         unsigned long driver_version;
00035         int     build;
00036         unsigned long interrupt_count;
00037         long timer0;
00038         long timer1;
00039         long timer2;
00040         long timer3;
00041         unsigned long TimeCount;
00042         long timeout0;
00043         long timeout1;
00044         int  EventWaitSingleLoopTimeout0; 
00045         int  EventWaitSingleLoopTimeout1; 
00046         int  EventStopSingleLoopTimeout0; 
00047         int  EventStopSingleLoopTimeout1; 
00048         int  EventWCntStart0,EventWCntStop0;
00049         int  EventWCntStart1,EventWCntStop1;
00050         int   act_pic_cnt[2];
00051         int      err_cnt;
00052         char err_msg[1024];
00053 } service;
00054 //#include "fgrab.h"
00055 
00056 #ifdef __cplusplus
00057 extern "C" {
00058 #endif
00059 
00060 
00061 //#define COMPILE
00062 
00063 #ifdef COMPILE
00064 #define dlldir __declspec( dllexport)
00065 #else
00066 #define dlldir __declspec( dllimport)
00067 #endif
00068 
00069 // 
00070 // Prototypes
00071 //
00072 
00073 //
00074 // init and free
00075 //
00076 
00077 microenable *initialize_microenable();
00078 microenable *initialize_multienable(int nr);
00079 microenable *reinitialize_microenable();
00080 microenable *reinitialize_multienable(int nr);
00081 int free_microenable(microenable *board);
00082 int init_microlib(char*);
00083 
00084 //
00085 // Mapping
00086 //
00087 
00088 extern int map_runtime_base(microenable *board);
00089 extern int map_rombase(microenable *board);
00090 extern int unmap_runtime_base(microenable *board);
00091 extern int unmap_rombase(microenable *board);
00092 
00093 extern int map_plx_base(microenable *board);
00094 extern int map_fpga_base(microenable *board);
00095 extern int map_slave_base(microenable *board);
00096 extern int eeprom_readout(microenable *board);
00097 extern int load_my_eeprom(microenable *board, eeprom *eeprom_values);
00098 
00099 //extern int (*reset)(microenable *board);
00100 extern int init_abort(microenable *board);
00101 extern int init_expansion_rom(microenable *board);
00102 extern int init_slave_0(microenable *board);
00103 extern int init_clk_system(microenable *board);
00104 
00105 //
00106 // Design prototypes
00107 //
00108 
00109 extern fpga_design *load_design(microenable*, char *bin_file_name);
00110 extern int unload_design(fpga_design *design);
00111 //extern int (*buf_expand)(fpga_design *design);
00112 extern int prepare_design(fpga_design *design);
00113 extern int configure_fpga(microenable *board, fpga_design *design);
00114 extern int readback_fpga(microenable *board, fpga_design *design);
00115 
00116 //
00117 // Clock Functions
00118 //
00119 
00120 // ------------------------------------------------------------------------------ //
00121 //   begin clock system
00122 // ------------------------------------------------------------------------------ //
00123 enum ClkSource  {DESIGN_CLK2, DESIGN_CLK, LOCAL_BUS_CLK, CLOCK_DISABLED};
00124 enum ResetState {RESET_OFF, RESET_ON};
00125 enum ClkState   {UNLOCKED,  LOCKED};
00126 
00127 extern int ClkSelectRam0(microenable *board,int nId);
00128 extern int ClkSelectRam1(microenable *board,int nId);
00129 
00130 extern int load_my_eeprom(microenable *board, eeprom *eeprom_values);
00131 
00132 //extern int (*reset)(microenable *board);
00133 extern int init_abort(microenable *board);
00134 extern int init_expansion_rom(microenable *board);
00135 extern int init_slave_0(microenable *board);
00136 extern int init_clk_system(microenable *board);
00137 
00138 extern int set_cmc_clk(microenable *board, fpga_design *design,int sel);
00139 extern int set_fpga_clk(microenable *board, fpga_design *design,int freq);
00140 extern int set_fpga_clk_slow(microenable *board, fpga_design *design,int freq);
00141 extern int set_plx_clk(microenable *board, fpga_design *design,int freq);
00142 
00143 extern int get_plx_clk();
00144 extern int get_fpga_clk(microenable*, fpga_design*);
00145 
00146 extern int set_slink_source(microenable *board);
00147 extern int set_slink_destination(microenable *board);
00148 
00149 //
00150 // RBT and Hap Files
00151 //
00152 
00153 extern HAP *read_hap(microenable*,char *file_name);
00154 extern unsigned long *GetAccessPointer(microenable *board);
00155 extern unsigned long *GetAccessPointerNC(microenable *board);
00156 extern int FreeAccessPointer();
00157 extern unsigned long *GetRuntimeBase(microenable *board);
00158 extern unsigned long *GetServiceBase(microenable *pBoard);
00159 
00160 extern int LoadRbt(char *name,rbt_info **ri);
00161 extern int LoadBit(char *name,rbt_info **ri);
00162 extern int FreeRbt(rbt_info *ri);
00163 extern int WriteHapFileByName(char *name,rbt_info *ri);
00164 
00165 extern HapTagMaster* ReadDesignInfoFile (char *name);
00166 extern char* GetDesignName();
00167 
00168 extern int CreateMultiHap(char *name);
00169 extern int ScanHapfile(char *filename,hapfile_index *index);
00170 extern int AddHapData(char *cpHapName,int nTag, HapData *data);
00171 extern HAP ReadMultiHap(microenable *board,char *file_name);
00172 extern char *Tag2String(unsigned long tag);
00173 
00174 //
00175 // Dma Functions
00176 //
00177 
00178 extern int WriteDmaData(unsigned long* ptr,long len,microenable *board);
00179 extern int ReadDmaData(unsigned long* ptr,long len,microenable *board);
00180 extern int WriteDmaDataExt(unsigned long* ptr,long len,int chan,long offset,int inc,microenable *board);
00181 extern int ReadDmaDataExt(unsigned long* ptr,long len,int chan,long offset,int inc,microenable *board);
00182 extern int WriteDmaDataExtCut(unsigned long* ptr,long len,int chan,long offset,int inc,int maxline,int row_len,int eff_row_len,microenable *board);
00183 extern int DmaJpegExt(  unsigned long* ptr_write,long write_len,unsigned long* ptr_read,long read_len,int maxline,int row_len,int eff_row_len,microenable *board);
00184 extern int WriteDmaDataExtCutline(unsigned long* ptr,long len,int chan,long offset,int inc,int maxline,int row_len,int eff_row_len,microenable *board);
00185 extern int WriteDmaDemandData(unsigned long* ptr,long len,int chan,long offset,int inc,microenable *board);
00186 extern int ReadDmaDemandData(unsigned long* ptr,long len,int chan,long offset,int inc,microenable *board);
00187 extern int DmaJpeg(unsigned long* ptr_write,long write_len, unsigned long* read_write,long read_len,microenable *board);
00188 
00189 extern int DmaVirtReadExtAsync(microenable*,int,int,int,dma_mem*,int,int,int,int);
00190 extern int DmaVirtWriteExtAsync(microenable*,int,int,int,dma_mem*,int,int,int,int);
00191 extern int DmaVirtWaitForBuffer(microenable *board,int chan,int subbufnum,dma_mem *mem,int timeout);
00192 extern int DmaVirtTestSubbufRdy(microenable *board,int chan,int subbufnum,dma_mem *mem);
00193 extern int DmaVirtTestBufStatus(microenable *board,int chan,dma_mem* mem);
00194 extern int DmaVirtStopTransfer(microenable *board,int nChan,int nMode);
00195 extern int DmaVirtStartRingbuf(microenable *pBoard,int nChan,int nDmaLength,int nOffset,dma_mem *pMem);
00196 extern int DmaVirtStopRingbuf (microenable *pBoard,int nChan);
00197 
00198 //
00199 // Erweiterte DMA Funktionen
00200 //
00201 
00202 extern unsigned long GetDmaLength(microenable *board,dma_mem *pMem, int nSubbufNr);
00203 
00204 //
00205 // Error Handling 
00206 //
00207 
00208 extern void Me_ClearErrMsg(microenable *board);
00209 extern void Me_SetErrMsg(microenable *board,char *);
00210 extern char *Me_GetErrMsg(microenable *board);
00211 extern int  Me_GetErrCode(microenable *board);
00212 
00213 //
00214 // Interrupt
00215 //
00216 
00217 extern int SleepUntilInterrupt(microenable *board);
00218 extern int SetTimeout(microenable *board,int nr);
00219 
00220 // Das Locken von Speicher , Testfuctions
00221 
00222 extern int MMLock(unsigned long* ptr_write,     long write_len, unsigned long* ptr_read,        long read_len,microenable *board);
00223 extern int MMUnlock(microenable *board);
00224 
00225 extern dma_mem* MMSetVirtualBuffer(microenable *board, int size,int nr);
00226 extern int              MMFreeVirtualBuffer(microenable *board,dma_mem*);
00227 extern dma_mem* MMSetPhysicalLineBuffer( microenable *board, int size,int nr,unsigned long,int,int);
00228 
00229 // -----------------------------------------------------------
00230 // Ausl~sen eines lokalen Interrupts
00231 
00232 extern int activate_linto(microenable *board);
00233 extern int deactivate_linto(microenable *board);
00234 
00235 // -------------------------------------------------------------------------
00236 // Readback Funktionen
00237 //
00238 
00239 extern int   InitReadback( const char* BaseName,unsigned int        ChipType);
00240 extern unsigned int  GetRegisterState( fpga_design* rdb_design,const char* Name, unsigned int from,unsigned int to );
00241 extern unsigned int  GetPinState( fpga_design* rdb_design,const char* Name );
00242 
00243 
00244 // -------------------------------------------------------------------
00245 //
00246 // Info Strukturen
00247 //
00248 
00249 extern int      fpga2id(char *fpga);
00250 extern int      package2id(char *package);
00251 extern int      pn2id(char *pn);
00252 extern int      id2fpga(char *fpga, int id);
00253 extern int      id2package(char *package, int id);
00254 extern int      id2pn(char *pn, int id);
00255 extern int      get_next_serial(FILE *fserial);
00256 extern void get_info(FILE *fserial, short_info *info);
00257 extern void     write_info(short_info *info, eeprom *my_eeprom, int serial);
00258 extern void write_eeprom_defaults(eeprom *my_eeprom);
00259 extern unsigned long nr_fpga(unsigned long pn);
00260 extern unsigned long nr_ram_blocks(unsigned long pn);
00261 extern unsigned long ram_type(unsigned long pn);
00262 extern unsigned long get_actual_date();
00263 extern int       get_dd_info(microenable *board,unsigned long *ptr);
00264 extern void      printf_dd_info(unsigned long *ptr);
00265 extern char* GetActVersion();
00266 extern char* FPGAtype2String(int FpgaID);
00267 extern int       String2FPGAtype(char *fpga);
00268 extern int   id2fpga(char *fpga, int id); 
00269 extern int   fpga2id(char *fpga);
00270 extern int   DetermineFPGAvendor(int FpgaID, char *VendorString);
00271 extern int   DetermineFPGAfamily(int FpgaID, char *FPGAfamilyString);
00272 extern int           DetermineFPGAinfo(int FpgaID, fpga_design *des);
00273 extern unsigned long DetermineFPGAidcode(int FpgaID);
00274 extern void          EvaluateIdcode(unsigned long idcode, Idcode_struct *info);
00275 extern int               TestFPGAbitstreamKompatibility(int FpgaID1, int FpgaID2);
00276 extern char*         FPGAtype2RBTstring(int FpgaID);
00277 extern int           RBTstring2FPGAtype(char *string);
00278 extern int           GetRamSize(microenable *board);
00279 extern int           GetFPGAtype(microenable *board);
00280 extern int           GetSerialNumber(microenable *board);
00281 extern int           GetBusNumber(microenable *board);
00282 extern int                       GetBoardVersion(microenable *board);
00283 extern int                       GetBoardRevision(microenable *board);
00284 
00285 extern int                       MeGetFpgaType(microenable *board);
00286 extern int                       CancelAllIo(microenable *board);
00287 
00288 extern int                       GetFPGAPackage(microenable *board);
00289 extern int                       GetFPGASpeedgrade(microenable *board);
00290 extern int                       GetNrOfFPGAs(microenable *board);
00291 extern int                       GetRamSpeed(microenable *board);
00292 extern int                       GetRamType(microenable *board);
00293 extern int                       GetInterruptNr(microenable *board);
00294 
00295 extern int                       check_dd_version(microenable *board,int *build,int *version);
00296 
00297 extern int                       GetTemperatureFPGA   (microenable *board );
00298 extern int                       IsPowerInterrupt   (microenable *board );
00299 
00301 // Register Schnittstelle
00302 
00303 extern int                              GetNrOfRegister         (fpga_design* design);
00304 extern char*                    GetRegisterName         (fpga_design* design,int nr);
00305 extern hap_register*    GetRegisterByNumber     (fpga_design* design,int nr);
00306 extern hap_register*    GetRegisterByName       (fpga_design* design,char *name);
00307 extern int                          RegisterWrite               (microenable *pBoard,hap_register *hreg,unsigned long value);
00308 extern unsigned long    RegisterRead            (microenable *pBoard,hap_register *hreg);
00309 
00310 extern void setInterruptEvent(microenable *pBoard,void *event);
00311 
00312 #define DLL_TYP                                         0x100
00313 #define GET_FOR_MANUFACTOR_STRING       0x200
00314 #define GETCAMERASTRING                         0x300
00315 #define SETDLLPARAM                                     0x400
00316 
00317 #define GET_NR_OF_GENFUNCS                      0x500
00318 #define GET_GENFUNCNAME                         0x600
00319 #define GET_NR_OF_PORTS                         0x700
00320 #define GET_NR_OF_CAMS                          0x750
00321 #define GET_VERSION                                     0x800
00322 
00323 typedef int infofunc(int,int,int,void*,void**);
00324 typedef infofunc* pinfofunc;
00325 
00326 #ifdef __cplusplus
00327 }
00328 #endif
00329 
00330 #endif