libedt.h

Go to the documentation of this file.
00001 /* #pragma ident "@(#)libedt.h  1.302 04/03/08 EDT" */
00002 
00003 /* Copyright (c) 1995 by Engineering Design Team, Inc. */
00004 
00005 #ifndef INCLUDE_edtlib_h
00006 #define INCLUDE_edtlib_h
00007 
00013 #ifdef USB
00014 #include <usb.h>
00015 #endif
00016 
00225 #ifdef DOXYGEN_SHOW_UNDOC
00226 
00264 #endif
00265 
00266 
00267 #ifdef DOXYGEN_SHOW_UNDOC
00268 
00272 #endif
00273 #ifdef DOXYGEN_SHOW_UNDOC
00274  /* end dma_updown_internal group */
00275 #endif
00276 
00277 
00278 
00279 #ifdef DOXYGEN_SHOW_UNDOC
00280 
00284 #endif
00285 #ifdef DOXYGEN_SHOW_UNDOC
00286  /* end dma_fifo_internal group */
00287 #endif
00288 
00289 
00290 
00291 #ifdef DOXYGEN_SHOW_UNDOC
00292 
00296 #endif
00297 #ifdef DOXYGEN_SHOW_UNDOC
00298  /* end dma_inout_internal group */
00299 #endif
00300 
00301 
00302 
00303 #ifdef DOXYGEN_SHOW_UNDOC
00304 
00308 #endif
00309 #ifdef DOXYGEN_SHOW_UNDOC
00310  /* end dma_registers_internal group */
00311 #endif
00312 
00313 
00314 #ifdef DOXYGEN_SHOW_UNDOC
00315 
00319 #endif
00320 #ifdef DOXYGEN_SHOW_UNDOC
00321  /* end dma_utility_internal group */
00322 #endif
00323 
00324 
00325 
00326 #ifdef DOXYGEN_SHOW_UNDOC
00327 
00331 #endif
00332 #ifdef DOXYGEN_SHOW_UNDOC
00333  /* end dma_internal */
00334 #endif
00335 
00336 
00337 #define event_t HANDLE
00338 /*****************************************************
00339  * Kernel events                                     *
00340  *****************************************************/
00341 
00342 typedef char edt_version_string[128];
00343 
00344 /* undefined this to turn off event handling  */
00345 
00346 #define USE_EVENT_HANDLERS
00347 
00348 
00349 /* Event flags */
00350 /* These act as flag bits indicating our interest in these events */
00351 
00352 #define EDT_MAX_KERNEL_EVENTS           20
00353 #define EDT_BASE_EVENTS                 1
00354 
00355 #define EDT_EODMA_EVENT                 (EDT_BASE_EVENTS + 0)
00356 #define EDT_EODMA_EVENT_NAME            "edt_eodma"
00357 #define EV_EODMA                        EDT_EODMA_EVENT /* compat */
00358 
00359 #define EDT_EVENT_BUF                   (EDT_BASE_EVENTS + 1)
00360 #define EDT_BUF_EVENT_NAME              "edt_buf"
00361 
00362 #define EDT_EVENT_STAT                  (EDT_BASE_EVENTS + 2)
00363 #define EDT_STAT_EVENT_NAME             "edt_stat"
00364 
00365 #define EDT_EVENT_P16D_DINT             (EDT_BASE_EVENTS + 3)
00366 #define EDT_P16D_DINT_EVENT_NAME        "edt_p16dint"
00367 
00368 #define EDT_EVENT_P11W_ATTN             (EDT_BASE_EVENTS + 4)
00369 #define EDT_P11W_ATTN_EVENT_NAME        "edt_p11wattn"
00370 
00371 #define EDT_EVENT_P11W_CNT              (EDT_BASE_EVENTS + 5)
00372 #define EDT_P11W_CNT_EVENT_NAME         "edt_cnt"
00373 
00374 #define EDT_PDV_EVENT_ACQUIRE           (EDT_BASE_EVENTS + 6)
00375 #define EDT_EVENT_ACQUIRE               EDT_PDV_EVENT_ACQUIRE /* compat */
00376 #define EDT_PDV_ACQUIRE_EVENT_NAME      "edt_acquire"
00377 
00378 #define EDT_EVENT_PCD_STAT1             (EDT_BASE_EVENTS + 7)
00379 #define EDT_EVENT_PCD_STAT1_NAME        "edt_pcd_stat1"
00380 
00381 #define EDT_EVENT_PCD_STAT2             (EDT_BASE_EVENTS + 8)
00382 #define EDT_EVENT_PCD_STAT2_NAME        "edt_pcd_stat2"
00383 
00384 #define EDT_EVENT_PCD_STAT3             (EDT_BASE_EVENTS + 9)
00385 #define EDT_EVENT_PCD_STAT3_NAME        "edt_pcd_stat3"
00386 
00387 #define EDT_EVENT_PCD_STAT4             (EDT_BASE_EVENTS + 10)
00388 #define EDT_EVENT_PCD_STAT4_NAME        "edt_pcd_stat4"
00389 
00390 #define EDT_PDV_STROBE_EVENT            (EDT_BASE_EVENTS + 11)
00391 #define EDT_PDV_STROBE_EVENT_NAME       "edt_pdv_strobe"
00392 
00393 #define EDT_EVENT_P53B_SRQ              (EDT_BASE_EVENTS + 12)
00394 #define EDT_EVENT_P53B_SRQ_NAME         "edt_p53b_srq"
00395 
00396 #define EDT_EVENT_P53B_INTERVAL         (EDT_BASE_EVENTS + 13)
00397 #define EDT_EVENT_P53B_INTERVAL_NAME    "edt_p53b_interval"
00398 
00399 #define EDT_EVENT_P53B_MODECODE         (EDT_BASE_EVENTS + 14)
00400 #define EDT_EVENT_P53B_MODECODE_NAME    "edt_p53b_modecode"
00401 
00402 #define EDT_EVENT_P53B_DONE             (EDT_BASE_EVENTS + 15)
00403 #define EDT_EVENT_P53B_DONE_NAME        "edt_p53b_done"
00404 
00405 #define EDT_PDV_EVENT_FVAL              (EDT_BASE_EVENTS + 16)
00406 #define EDT_PDV_EVENT_FVAL_NAME         "edt_pdv_fval"
00407 
00408 #define EDT_PDV_EVENT_TRIGINT           (EDT_BASE_EVENTS + 17)
00409 #define EDT_PDV_EVENT_TRIGINT_NAME      "edt_pdv_trigint"
00410 
00411 #define EDT_EVENT_TEMP          (EDT_BASE_EVENTS + 18)
00412 #define EDT_EVENT_TEMP_NAME     "edt_temp_intr"
00413 
00414 #define EDT_MAX_EVENT_TYPES     (EDT_EVENT_TEMP + 1)
00415 
00416 /*
00417  * The EVENT_MODE controls the way the driver responds to events.
00418  * Mode 0 is similar to ACT_ONCE; mode 1 is similar to ACT_ALWAYS,
00419  * and mode 2 is similar to ACT_ALWAYS but disables the event
00420  * while user code is processing it to prevent OS lockups.
00421  */
00422 #define EDT_EVENT_MODE_MASK             0xFF000000
00423 #define EDT_EVENT_MODE_SHFT             24
00424 #define EDT_EVENT_MODE_ONCE             0
00425 #define EDT_EVENT_MODE_CONTINUOUS       1
00426 #define EDT_EVENT_MODE_SERIALIZE        2
00427 
00428 #if defined(WIN32) || defined(_NT_DRIVER_)
00429 typedef unsigned __int64 uint64_t ;
00430 typedef __int64 int64_t ;
00431 typedef unsigned int  uint32_t ;
00432 typedef int int32_t ;
00433 #endif
00434 
00435 /*
00436  * legal PCI proms for pciload and other prom detect code
00437  */
00438 #define PROM_UNKN       0
00439 #define AMD_4013E       1
00440 #define AMD_4013XLA     2
00441 #define AMD_4028XLA     3
00442 #define AMD_XC2S150     4
00443 #define AMD_XC2S200_4M  5
00444 #define AMD_XC2S200_8M  6
00445 #define AMD_XC2S100_8M  7
00446 #define AMD_XC2S300E    8
00447 #define SPI_XC3S1200E   9
00448 #define AMD_XC5VLX30T   10      /* WAS SPI_XC5VLX30T    */
00449 #define AMD_XC5VLX50T   11      /* WAS SPI_XC5VLX50T */
00450 #define AMD_EP2SGX30D   12
00451 
00452 /*
00453  * structure to set up phase locked loop parameters.
00454  * some of these values go into the AV9110-02 PLL chip
00455  * and others set up prescalars in the xilinx.
00456  */
00457 #ifdef USE_LONG_BUFCNT
00458 #if defined(_NT_) || defined(_NT_DRIVER_)
00459 typedef unsigned long long bufcnt_t ;
00460 #else
00461 typedef uint64_t bufcnt_t ;
00462 #endif
00463 #else
00464 typedef u_int bufcnt_t ;
00465 #endif
00466 
00467 typedef struct
00468 {
00469     int m; /* AV9110 refernce frequency divide range 3-127 */
00470     int n; /* AV9110 VCO feedback frequency divide range 3-127 */
00471     int v; /* AV9110 VCO feedback frequency prescalar range 1 or 8 */
00472     int r; /* AV9110 VCO output divider 1, 2, 4, 8 */
00473     int h; /* xilinx high speed divider (vco output) 1,3,5,7 */
00474     int l; /* xilinx divide by n 1-64 */
00475     int x; /* xilinx AV9110 prescale of 30MHz oscillator 1-256 */
00476 } edt_pll ;
00477 
00478 /*
00479  * Typedef for edt_bitpath to send and retrieve bitfile pathnames
00480  * from the driver.
00481  */
00482 typedef char edt_bitpath[128] ;
00483 
00484 /*
00485  * SBus Device struct
00486  */
00487 #define EDT_READ 0
00488 #define EDT_WRITE 1
00489 
00490 #ifndef TRUE
00491 
00492 #define TRUE 1
00493 #define FALSE 0
00494 
00495 #endif
00496 
00497 /* for edt_get_dma_info */
00498 typedef struct
00499 {
00500     uint_t      used_dma ;      /* dma started within current open/close */
00501     uint_t      alloc_dma ;     /* has allocated > 1 ring buffer */
00502     uint_t      active_dma ;    /* dma is currently active */
00503 } edt_dma_info ;
00504 
00505 /* defines for edt_set_kernel_buffers */
00506 #define EDT_USER_BUFS 0
00507 #define EDT_COPY_KBUFS 1
00508 #define EDT_MMAP_KBUFS  2
00509 #define EDT_PERSISTENT_KBUFS  4
00510 
00511 #define MAX_EXTENDED_WORDS 32
00512 typedef struct _EdtMezzDescriptor {
00513     int  id;
00514     int  n_extended_words;
00515     int  extended_rev;
00516     uint_t extended_data[MAX_EXTENDED_WORDS];
00517 } EdtMezzDescriptor;
00518 #ifndef _KERNEL
00519 /* Event callback stuff */
00520 
00521 
00522 typedef void (*EdtEventFunc)(void *); 
00523 
00524 typedef struct edt_event_handler {
00525     struct edt_event_handler *next; /* in case we want linked lists */
00526     EdtEventFunc    callback;       /* function to call when event occurs */
00527     struct edt_device *owner;           /* reflexive pointer */
00528     uint_t          event_type;
00529     void *          data;               /* closure pointer for callback */    
00530     u_char          active;             /* flag for a graceful death */
00531     u_char          continuous;         /* flag for continuing events */
00532 #ifdef _NT_
00533     thread_t        wait_thread;        /* thread handle */
00534     event_t         wait_event;         /* kernel event handle */
00535     event_t         closing_event;      /* abort event handle */
00536     uint_t          thrdid;             /* thread id # */
00537 #elif defined(__sun)
00538     thread_t        thrdid ;            /* thread handle and ID in Solaris */
00539     sema_t                      sema_thread ;   /* thread sync semaphore */
00540 #elif defined(__linux__) 
00541 
00542   
00543     thread_t thrdid;
00544 #elif defined(__APPLE__)
00545     pthread_t thrdid ;
00546 
00547 #endif /* _NT_ */
00548 
00549 } EdtEventHandler;
00550 
00551 
00552 /* An EdtBdFilterFunction ("Bd" = Board) function is used by
00553  * edt_detect_boards_filter() to determine if a board with the given
00554  * dev (e.g. "pcd"), unit number, and bd_id (eg.. PCD_ID) should be 
00555  * included with the results of the board detection function. 
00556  * This is used, for example, by hubload.c to do a detect of only "ltx"
00557  * boards which are those matching a small number of bd_ids. 
00558  * The data parameter is passed to edt_detect_boards_filter, and 
00559  * subsequently passed on to the filter function; it can be either NULL
00560  * or any data which the filter function wants to help it do its job. 
00561  * Returns true for matches, false otherwise. */
00562 typedef int (*EdtBdFilterFunction) (char *dev, int unit, int bd_id, void *data);
00563 
00564 typedef struct {
00565     char type[8]; /* board family e.g., "pcd" */
00566     int id; /* board unit number */
00567     int bd_id; /* board id, e.g. PCD_ID */
00568 } Edt_bdinfo ;
00569 
00570 
00571 /*
00572  * embedded info
00573  */
00574 typedef struct {
00575     int clock; /* 4 */
00576     char sn[11];        
00577     char pn[11];
00578     char opt[11];
00579     int  rev; /* 4 */
00580     char ifx[11];
00581 } Edt_embinfo;
00582 
00583 typedef struct {
00584         char  fpga[32];                                 /* MUST match a pkg directory name */
00585         char  promdesc[32];                             /* description may include size */
00586         char  busdesc[8];                               /* PCI, PCIe, ... */
00587         int   xtype;                                    /* XTYPE_X, XTYPE_BT, XTYPE_LTX, XTYPE_SPI */
00588         int   magic;                                    /* magic code (not the magic # itself but a code */
00589         u_int sectorsize;                               /* sector size in bytes */
00590         u_int sectsperseg;                              /* sectors per segment */
00591         int   defaultseg;                               /* default unprotected segment */
00592         u_int (*id_addr)(u_long, int);                  /* id address function pointer */
00593 #if 0 /* cool idea -- lets try to get this done, but filling in all the fields */
00594       /* will take some time and need lots of care, so commented out for now */
00595         struct sector_struct sector[16];                /* all sectors */
00596 #endif
00597 } Edt_prominfo ;
00598 
00599 #define MAX_DMA_BUFFERS 1024
00600 
00601 typedef struct {
00602 
00603     int size;
00604 
00605     int allocated_size;
00606 
00607 
00608 #if defined(__sun)
00609 
00610     thread_t ring_tid;
00611 
00612 #endif
00613 
00614     char write_flag;
00615 
00616  
00617     char owned;
00618 
00619 } EdtRingBuffer;
00620 
00621 typedef struct _dma_data_block {
00622     u_int buffernum;
00623     u_char *pointer;
00624     u_int  offset;
00625     u_int  length;
00626 } EdtDMADataBlock;
00627 
00628 #define EDT_SS_TYPE 1
00629 #define EDT_GS_TYPE 2
00630 #define EDT_CD_TYPE 3
00631 
00632 
00633 
00634 
00635 typedef struct _optionstr_fields {
00636    int  board_type;
00637     int  DMA_channels;
00638     char mezzanine_type[68];
00639     char filename[68];
00640     int  version_number;
00641     int  rev_number;
00642     char date[12];
00643     int  custom_DMA_channels;
00644     int  available_DMA_channels;
00645 } EdtOptionStringFields;
00646 
00647 typedef struct _EdtBitfileDescriptor {
00648     edt_bitpath bitfile_name;
00649     edt_bitpath mezz_name0;
00650     edt_bitpath mezz_name1;
00651     char optionstr[68];
00652     char mezz_optionstr0[32];
00653     char mezz_optionstr1[32];
00654 
00655     EdtOptionStringFields ostr;
00656 
00657     int  revision_register;
00658     int  string_type;
00659 
00660 } EdtBitfileDescriptor;
00661 
00662 typedef struct edt_device {
00663 #ifdef __APPLE__
00664     u_int               fd;
00665 #else
00666     HANDLE              fd ;           /* file descriptor of opened device     */
00667 #endif
00668     u_int               unit_no ;
00669     u_int               spi_reg_base ; /* Base address for SPI_ access registers (0 specifies default of 0x60) */
00670     uint_t              devid ;
00671     uint_t              devtype ;          /* 0 == PCI; 1 == USB; ... */
00672     uint_t              todo;          /* n buffers started            */
00673     uint_t              b_count;       /* per open byte counter for edt_read/write */
00674 
00675     /* flags for each ring buffer */
00676     EdtRingBuffer       rb_control[MAX_DMA_BUFFERS];
00677 
00678     /* addresses kept in own array for backward compatibility */
00679 
00680     unsigned char * ring_buffers[MAX_DMA_BUFFERS];
00681 
00682     unsigned char *     tmpbuf;          /* for interlace merging, etc. */
00683 
00684     uint_t              tmpbufsize;
00685 
00686     char                edt_devname[64] ;
00687     uint_t              cursample ;
00688     uint_t              minchunk ;
00689     bufcnt_t            donecount ;
00690     uint_t              nextwbuf ;     /* for edt_next_writebuf      */
00691 
00692     uint_t              ring_buffer_numbufs ;
00693     uint_t              ring_buffer_bufsize ;
00694     uint_t              ring_buffers_allocated ;
00695     uint_t              ring_buffers_configured ;
00696     uint_t              loops ;
00697     uint_t              ring_buffer_allocated_size ; /* if rounded up to page boundaries */
00698 
00699     uint_t              write_flag ;
00700 
00701     uint_t              foi_unit;
00702 
00703     uint_t              debug_level ;
00704     Dependent           *dd_p ;   /* device dependent struct        */
00705     void                *Pdma_p;  /* Pdma struct when Pdma used     */
00706 
00707     u_char *            data_end; /* end of base_buffer + 1 */
00708 
00709     /* For callback rountines */
00710 
00711     EdtEventHandler     event_funcs[EDT_MAX_KERNEL_EVENTS];
00712     u_int               use_RT_for_event_func ;
00713 
00714 
00715     u_int channel_no;
00716 
00717     /* Use this for allocating all ring-buffers in a single chunk (w/possible headers before or 
00718        after the ring-buffers). This is useful when trying to DMA into multiple ring-buffers which
00719        can be written/read as a block to a file*/
00720 
00721     unsigned char *     base_buffer;
00722 
00723     u_int               header_size;
00724     int                 header_offset;
00725 
00726     u_int               pending_samples; /* dma samples */
00727 
00728     int                 hubidx;
00729     volatile caddr_t    mapaddr;
00730 
00731     void *              pInterleaver; /* for post-processing data, such as deinterleaving image */
00732 
00733     unsigned char *output_base;
00734     unsigned char **output_buffers; /* for results from post-processing */
00735 
00736 #ifdef USB
00737     usb_dev_handle *usb_p ;
00738     int usb_bulk_read_endpoint ;
00739     int usb_bulk_write_endpoint ;
00740     int usb_rtimeout ;
00741     int usb_wtimeout ;
00742 #endif
00743 
00744     u_int buffer_granularity;
00745     u_int mmap_buffers;
00746     u_int totalsize;
00747     u_int               fullbufsize;
00748 
00749     /* low-latency dma routine fields
00750      * If we didn't need compatibility this could be a lot cleaner
00751     */
00752 
00753     EdtDMADataBlock     *blocks;
00754 
00755     double              last_buffer_time;
00756     double              next_sample;
00757     u_int               period;
00758      
00759     u_char *            last_sample_end;
00760 
00761     u_char              wait_mode;
00762     u_char              freerun;
00763 
00764     u_char              DMA_channels;
00765 
00766     EdtBitfileDescriptor bfd;
00767         EdtMezzDescriptor mezz;
00768 
00769     char                last_direction;
00770 
00771 } EdtDev;
00772 
00773 
00774 
00775 /* Function declarations for EdtDev */
00776 
00777 
00778 
00779 #ifdef _NT_
00780 
00781 #define EDTAPI __declspec(dllexport)
00782 
00783 #ifdef LIBDLL
00784 
00785 #define EDTIMPORT __declspec(dllimport)
00786 
00787 #else
00788 
00789 #define EDTIMPORT
00790 
00791 #endif
00792 
00793 #define strncasecmp strnicmp
00794 #define strcasecmp stricmp
00795 
00796 #else
00797 
00798 #define EDTAPI
00799 #define EDTIMPORT
00800 
00801 #endif
00802 
00803 /* Header file for functions exported by libedt */
00804 
00809 EDTAPI EdtDev *        edt_open(char *device_name, int unit) ;
00810 EDTAPI EdtDev *        edt_open_quiet(char *device_name, int unit) ;
00811 EDTAPI EdtDev *        edt_open_channel(char *device_name, int unit, int channel) ;
00812 EDTAPI int             edt_close(EdtDev *edt_p) ;
00813  /* end updown group */
00815 
00819 EDTAPI int             edt_read(EdtDev *edt_p, void *buf, uint_t size) ;
00820 EDTAPI int             edt_write(EdtDev *edt_p, void *buf, uint_t size) ;
00821 
00822 EDTAPI int             edt_configure_ring_buffers(EdtDev *edt_p, int bufsize, 
00823                                                   int numbufs, int write_flag, 
00824                                                   unsigned char **bufarray) ;
00825 
00826 EDTAPI int             edt_configure_block_buffers_mem(EdtDev *edt_p, int bufsize, 
00827                                                        int numbufs, int write_flag, 
00828                                                        int header_size, int header_before,
00829                                                        u_char *user_mem);
00830 EDTAPI int             edt_configure_block_buffers(EdtDev *edt_p, int bufsize, 
00831                                                    int numbufs, int write_flag, 
00832                                                    int header_size, int header_before);
00833                                            
00834 
00835 EDTAPI int             edt_disable_ring_buffers(EdtDev *edt_p) ;
00836 
00837 EDTAPI int              edt_get_numbufs(EdtDev *edt_p);
00838 
00839 EDTAPI int                              edt_reset_ring_buffers(EdtDev *edt_p, uint_t bufnum);
00840 EDTAPI int                              edt_abort_dma(EdtDev *edt_p);
00841 EDTAPI int                              edt_abort_current_dma(EdtDev *edt_p);
00842 EDTAPI int                              edt_stop_buffers(EdtDev *edt_p);
00843 EDTAPI int                              edt_start_buffers(EdtDev *edt_p, uint_t count);
00844 
00845 
00846 EDTAPI int     edt_set_buffer_size(EdtDev *edt_p,
00847                                    uint_t which_buf,
00848                                    uint_t size,
00849                                    uint_t write_flag);
00850 
00851 EDTAPI unsigned int             edt_allocated_size(EdtDev *edt_p, int bufnum);
00852 EDTAPI int              edt_get_total_bufsize(EdtDev *edt_p,
00853                                               int bufsize, 
00854                                               int header_size);
00855 
00856 EDTAPI unsigned char   *edt_wait_for_buffers(EdtDev *edt_p, int count) ;
00857 
00858 
00859 EDTAPI int                 edt_ref_tmstamp(EdtDev *edt_p, u_int val) ;
00860 EDTAPI int                         edt_get_timestamp(EdtDev *edt_p, u_int *timep, u_int bufnum) ;
00861 EDTAPI int                         edt_get_reftime(EdtDev *edt_p, u_int *timep) ;
00862 EDTAPI unsigned char   *edt_wait_for_next_buffer(EdtDev *edt_p);
00863 EDTAPI unsigned char   *edt_last_buffer_timed(EdtDev *edt_p, u_int *timep) ;
00864 EDTAPI unsigned char   *edt_last_buffer(EdtDev *edt_p) ;
00865 EDTAPI unsigned char   *edt_wait_buffers_timed(EdtDev *edt_p, int count, u_int *timep);
00866 EDTAPI int             edt_set_buffer(EdtDev *edt_p, uint_t bufnum) ;
00867 EDTAPI unsigned char*  edt_next_writebuf(EdtDev    *edt_p) ;
00868 EDTAPI unsigned char** edt_buffer_addresses(EdtDev *edt_p) ;
00869 EDTAPI unsigned char * edt_get_current_dma_buf(EdtDev * edt_p);
00870 
00871 EDTAPI bufcnt_t        edt_done_count(EdtDev   *edt_p) ;
00872 EDTAPI unsigned char * edt_check_for_buffers(EdtDev *edt_p, uint_t count);
00873 
00874 EDTAPI uint_t                   edt_get_bytecount(EdtDev *edt_p) ;
00875 EDTAPI uint_t                   edt_get_timecount(EdtDev *edt_p) ;
00876 EDTAPI void                             edt_set_direction(EdtDev *edt_p, int direction) ;
00877 EDTAPI uint_t edt_get_timeout_count(EdtDev *edt_p);
00878 EDTAPI unsigned short  edt_get_direction(EdtDev *edt_p) ;
00879 
00880 EDTAPI void            edt_startdma_reg(EdtDev *edt_p, uint_t  desc, uint_t val) ;
00881 EDTAPI void            edt_enddma_reg(EdtDev *edt_p, uint_t    desc, uint_t val) ;
00882 EDTAPI void            edt_startdma_action(EdtDev *edt_p, uint_t   val) ;
00883 EDTAPI void            edt_enddma_action(EdtDev *edt_p, uint_t val) ;
00884 
00885 EDTAPI void edt_read_start_action(EdtDev * edt_p, u_int enable, u_int reg_desc,
00886                     u_char set, u_char clear, u_char setclear, u_char clearset, int delay1, int delay2);
00887 EDTAPI void edt_read_end_action(EdtDev * edt_p, u_int enable, u_int reg_desc,
00888                     u_char set, u_char clear, u_char setclear, u_char clearset, int delay1, int delay2);
00889 EDTAPI void edt_write_start_action(EdtDev * edt_p, u_int enable, u_int reg_desc,
00890                     u_char set, u_char clear, u_char setclear, u_char clearset, int delay1, int delay2);
00891 EDTAPI void edt_write_end_action(EdtDev * edt_p, u_int enable, u_int reg_desc,
00892                     u_char set, u_char clear, u_char setclear, u_char clearset, int delay1, int delay2);
00893 
00894 EDTAPI int                              edt_set_timeout_action(EdtDev *edt_p, u_int action);
00895 EDTAPI int                      edt_get_timeout_goodbits(EdtDev *edt_p);
00896 EDTAPI int                      edt_get_goodbits(EdtDev *edt_p);
00897 
00898 EDTAPI int                              edt_set_event_func(EdtDev *edt_p, int event_type, EdtEventFunc f, void *data, int continuous) ;
00899 EDTAPI int                              edt_remove_event_func(EdtDev *edt_p, int event_type) ;
00900 
00901 EDTAPI uint_t           edt_get_todo(EdtDev *edt_p) ;
00902 EDTAPI int             edt_ring_buffer_overrun(EdtDev *edt_p) ;
00903  /* end dma_inout */
00905 
00906 /* Internal or obsolete, etc. - we don't want to document these. */
00907 EDTAPI int             edt_configure_channel_ring_buffers(EdtDev *edt_p,
00908                                                           int bufsize, int numbufs, int write_flag,
00909                                                           unsigned char **bufarray) ;
00910 EDTAPI int                              edt_disable_ring_buffer(EdtDev *edt_p, 
00911                                                                 int nIndex);
00912 EDTAPI int             edt_cancel_current_dma(EdtDev *edt_p) ;
00913 EDTAPI int             edt_user_dma_wakeup(EdtDev *edt_p);
00914 EDTAPI int             edt_had_user_dma_wakeup(EdtDev *edt_p);
00915 
00919 EDTAPI uint_t          edt_reg_read(EdtDev *edt_p, uint_t desc) ;
00920 EDTAPI void            edt_reg_write(EdtDev *edt_p, uint_t desc, uint_t val) ;
00921 EDTAPI uint_t          edt_reg_or(EdtDev *edt_p, uint_t desc, uint_t val) ;
00922 EDTAPI uint_t          edt_reg_and(EdtDev *edt_p, uint_t desc, uint_t val) ;
00923 EDTAPI void          edt_reg_clearset(EdtDev *edt_p, uint_t desc, uint_t val) ;
00924 EDTAPI void          edt_reg_setclear(EdtDev *edt_p, uint_t desc, uint_t val) ;
00925 EDTAPI void            edt_intfc_write(EdtDev *edt_p, uint_t offset, uchar_t val) ;
00926 EDTAPI uchar_t         edt_intfc_read(EdtDev *edt_p, uint_t    offset) ;
00927 EDTAPI void            edt_intfc_write_short(EdtDev *edt_p, uint_t offset, u_short val) ;
00928 EDTAPI u_short         edt_intfc_read_short(EdtDev *edt_p, uint_t offset) ;
00929 EDTAPI void            edt_intfc_write_32(EdtDev   *edt_p, uint_t offset,  uint_t val) ;
00930 EDTAPI uint_t          edt_intfc_read_32(EdtDev *edt_p, uint_t offset) ;
00931  /* end dma_control */
00936 EDTAPI void                             edt_flush_fifo(EdtDev *edt_p) ;
00937 EDTAPI int                              edt_set_firstflush(EdtDev *edt_p, int val)      ;
00938 EDTAPI int                              edt_get_firstflush(EdtDev *edt_p) ;
00939 EDTAPI void             edt_flush_channel(EdtDev * edt_p, int channel) ;
00940  /* end dma_fifo */
00942 
00943 
00944 EDTAPI int             edt_get_wait_status(EdtDev *edt_p);
00945 EDTAPI int             edt_set_timeout_ok(EdtDev *edt_p, int val);
00946 EDTAPI int             edt_get_timeout_ok(EdtDev *edt_p);
00947 
00948 
00949 /* for a while it was called "eodma_sig" */
00950 EDTAPI void                             pcd_set_funct(EdtDev *edt_p, uchar_t val)       ;
00951 EDTAPI int                              edt_set_eodma_int(EdtDev *edt_p, int sig) ;
00952 EDTAPI int                              edt_set_autodir(EdtDev  *edt_p, int     val) ;
00953 
00954 
00955 EDTAPI int             edt_send_msg(EdtDev *edt_p, int unit, char *msg, int size) ;
00956 EDTAPI int             edt_get_msg(EdtDev *edt_p, char *msgbuf, int maxsize) ;
00957 EDTAPI int             edt_get_msg_unit(EdtDev *edt_p, char *msgbuf, int maxsize, int unit) ;
00958 EDTAPI int             edt_serial_wait(EdtDev *edt_p, int size, int timeout) ;
00959 
00960 EDTAPI void            edt_send_dma(EdtDev *edt_p, int unit, uint_t    start_val) ;
00961 EDTAPI int             edt_wait_avail(EdtDev *edt_p) ;
00962 EDTAPI void            edt_init_mac8100(EdtDev *edt_p) ;
00963 EDTAPI u_short         edt_read_mac8100(EdtDev *edt_p, uint_t add) ;
00964 EDTAPI void            edt_write_mac8100(EdtDev *edt_p, uint_t add, u_short data) ;
00965 
00966 EDTAPI int             edt_get_dependent(EdtDev *edt_p, void *addr) ;
00967 EDTAPI int             edt_set_dependent(EdtDev *edt_p, void *addr) ;
00968 
00969 EDTAPI int             edt_flush_resp(EdtDev *edt_p) ;
00970 EDTAPI int             edt_get_tracebuf(EdtDev *edt_p, uint_t *addr)   ;
00971 EDTAPI int             edt_set_flush(EdtDev *edt_p, int val) ;
00975 EDTAPI int             edt_timeouts(EdtDev *edt_p) ; /* end dma_inout */
00977 
00978 
00979 EDTAPI void            edt_flush_mode(EdtDev *edt_p, uint_t    val) ;
00980 
00981 EDTAPI void            edt_check_foi(EdtDev *edt_p) ;
00982 EDTAPI void            edt_foi_autoconfig(EdtDev *edt_p) ;
00983 EDTAPI int             edt_set_foiunit(EdtDev *edt_p, int unit) ;
00984 EDTAPI int             edt_get_foiunit(EdtDev *edt_p) ;
00985 
00986 EDTAPI int             edt_set_rci_dma(EdtDev *edt_p, int unit, int channel) ;
00987 EDTAPI int             edt_get_rci_dma(EdtDev *edt_p, int unit) ;                       
00988 EDTAPI int             edt_set_rci_chan(EdtDev *edt_p, int unit, int channel) ;
00989 EDTAPI int             edt_get_rci_chan(EdtDev *edt_p, int unit) ;
00990 
00991 
00992 EDTAPI void            edt_reset_counts(EdtDev *edt_p) ;
00993 EDTAPI void            edt_reset_serial(EdtDev *edt_p) ;
00994 EDTAPI int             edt_set_foicount(EdtDev *edt_p, int count) ;
00995 EDTAPI int             edt_get_foicount(EdtDev *edt_p) ;
00996 
00997 
00998 EDTAPI int             edt_set_debug(EdtDev *edt_p, int count) ;
00999 EDTAPI int             edt_get_debug(EdtDev *edt_p) ;
01000 
01001 
01006 EDTAPI int             edt_set_burst_enable(EdtDev *edt_p, int on) ;
01007 EDTAPI int             edt_get_burst_enable(EdtDev *edt_p) ;
01008 
01009 EDTAPI int             edt_set_rtimeout(EdtDev *edt_p, int value) ;
01010 EDTAPI int             edt_set_wtimeout(EdtDev *edt_p, int value) ;
01011 
01012 EDTAPI int             edt_get_rtimeout(EdtDev *edt_p) ;
01013 EDTAPI int             edt_get_wtimeout(EdtDev *edt_p) ; /* end dma_inout */
01015 
01016 EDTAPI void            edt_set_out_clk(EdtDev *edt_p, edt_pll *clk_data) ;
01017 EDTAPI u_char          edt_set_funct_bit(EdtDev    *edt_p, u_char mask) ;
01018 EDTAPI u_char          edt_clr_funct_bit(EdtDev    *edt_p, u_char mask) ;
01019 EDTAPI u_char          edt_set_pllct_bit(EdtDev * edt_p, u_char mask);
01020 EDTAPI u_char          edt_clr_pllct_bit(EdtDev * edt_p, u_char mask);
01021 EDTAPI int             edt_set_ignore_signals(EdtDev *edt_p, int ignore);
01022 
01023 
01024 
01025 
01026 
01027 
01028 
01032 EDTAPI int             edt_device_id(EdtDev *edt_p);
01033 EDTAPI char *          edt_idstr(int id) ;
01034 EDTAPI uchar_t *       edt_alloc(int size) ;
01035 EDTAPI void            edt_free(uchar_t *ptr) ;
01036 EDTAPI int                         edt_access(char *fname, int perm) ;
01037 EDTAPI int                         edt_parse_unit(const char *str, char *dev, const char *default_dev) ;
01038 EDTAPI int                         edt_parse_unit_channel(const char *str, char *dev, 
01039                                                           const char *default_dev,
01040                                                           int *channel) ;
01041 EDTAPI int             edt_access(char *fname, int perm);
01042 EDTAPI void            edt_correct_slashes(char *str);
01043 EDTAPI void            edt_fwd_to_back(char *str);
01044 EDTAPI void            edt_back_to_fwd(char *str);
01045 EDTAPI int             edt_find_xpn(char *partnum, char *xilinx);
01046 EDTAPI uint_t          edt_overflow(EdtDev *edt_p) ;
01047 EDTAPI void            edt_perror(char *str) ;
01048 EDTAPI u_int           edt_errno(void) ;
01049 
01050 EDTAPI char *           edt_timestring(u_int *timep) ;
01051 EDTAPI int             edt_system(const char *cmdstr) ;
01052 EDTAPI int              edt_fix_millennium(char *str, int rollover);
01053 
01054 EDTAPI char             *edt_fmt_pn(char *pn, char *pn_str);
01055 EDTAPI int              edt_parse_esn(char *str, Edt_embinfo *ei);
01056 EDTAPI void             edt_get_sns(EdtDev *edt_p, char *esn, char *osn);
01057 EDTAPI void             edt_get_sns_sector(EdtDev *edt_p, char *esn, char *osn, int sector);
01058 EDTAPI void             edt_get_osn(EdtDev *edt_p, char *osn);
01059 EDTAPI void             edt_get_esn(EdtDev *edt_p, char *esn);
01060 
01061 EDTAPI DIRHANDLE edt_opendir(char *dirname);
01062 EDTAPI int edt_readdir(DIRHANDLE h, char *name);
01063 EDTAPI void edt_closedir(DIRHANDLE h);
01064 
01065 
01066 /* System time functions */
01067 EDTAPI double          edt_dtime(void);
01068 EDTAPI double          edt_timestamp(void);
01069 EDTAPI double          edt_elapsed(u_char reset);
01070 
01071 EDTAPI void            edt_msleep(int  msecs) ;
01072 EDTAPI void