Wraper for libpciaccess ?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Wraper for libpciaccess ?

Brian
Does anyone know of an FPC wrapper for the library libpciaccess ?

Thanks in advance
Brian
Reply | Threaded
Open this post in threaded view
|

Question C to Pascal translation ....Re: Wraper for libpciaccess ?

Brian
Ref  libpciaccess.h
Any suggestions on the conversions below ? Thanks in advance. Brian

C Union
-----------

00043 struct pci_device_iterator {
    unsigned next_index;

    enum {
      match_any,
      match_slot,
      match_id
    } mode;

    union {
      struct pci_slot_match   slot;
      struct pci_id_match     id;
    } match;
};

... is this conversion correct ?

 pci_device_iterator = packed record
                       next_index : longword; // ???
                        Mode : (match_any, match_slot, match_id);      
                         
                          match : packed record
                                   case integer of // union
                                    0 : (
                                         slot: pci_slot_match;
                                        );
                                    1 : (
                                         id : pci_id_match;
                                        );
                                   end;  
                        end;


----------


H2PAS converts this to ...
00245 struct pci_mem_region {
    /**
     * When the region is mapped, this is the pointer to the memory.
     *
     * This field is \b only set when the deprecated \c pci_device_map_region
     * interface is used.  Use \c pci_device_map_range instead.
     *
     * \deprecated
     */
00254     void *memory;


    /**
     * Base physical address of the region within its bus / domain.
     *
     * \warning
     * This address is really only useful to other devices in the same
     * domain.  It's probably \b not the address applications will ever
     * use.
     *
     * \warning
     * Most (all?) platform back-ends leave this field unset.
     */
00268     pciaddr_t bus_addr;


    /**
     * Base physical address of the region from the CPU's point of view.
     *
     * This address is typically passed to \c pci_device_map_range to create
     * a mapping of the region to the CPU's virtual address space.
     */
00277     pciaddr_t base_addr;


    /**
     * Size, in bytes, of the region.
     */
00283     pciaddr_t size;


    /**
     * Is the region I/O ports or memory?
     */
00289     unsigned is_IO:1;

    /**
     * Is the memory region prefetchable?
     *
     * \note
     * This can only be set if \c is_IO is not set.
     */
00297     unsigned is_prefetchable:1;


    /**
     * Is the memory at a 64-bit address?
     *
     * \note
     * This can only be set if \c is_IO is not set.
     */
00306     unsigned is_64:1;
};


Not certain if I believe this .....

      pci_mem_region = record
          memory : pointer;
          bus_addr : pciaddr_t;
          base_addr : pciaddr_t;
          size : pciaddr_t;
          flag0 : word;
        end;


    const
      bm_pci_mem_region_is_IO = $1;
      bp_pci_mem_region_is_IO = 0;
      bm_pci_mem_region_is_prefetchable = $2;
      bp_pci_mem_region_is_prefetchable = 1;
      bm_pci_mem_region_is_64 = $4;
      bp_pci_mem_region_is_64 = 2;

    function is_IO(var a : pci_mem_region) : dword;
    procedure set_is_IO(var a : pci_mem_region; __is_IO : dword);
    function is_prefetchable(var a : pci_mem_region) : dword;
    procedure set_is_prefetchable(var a : pci_mem_region; __is_prefetchable : dword);
    function is_64(var a : pci_mem_region) : dword;
    procedure set_is_64(var a : pci_mem_region; __is_64 : dword);