Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2014-09

Wraper for libpciaccess ?

2 messages · 1 person · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Brian
to 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);
View this message in context: http://free-pascal-general.1045716.n5.nabble.com/Wraper-for-libpciaccess-tp5720127p5720944.html Sent from the Free Pascal - General mailing list .