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

Mailing lists / fpc-pascal / 2014-09
2 messages · 1 person · –
Reply by email Subscribe to this list Your subscription
Read-only archive. Use j and k to move between messages.
Does anyone know of an FPC wrapper for the library libpciaccess ?
Thanks in advance
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);