diff options
author | Thierry Vignaud <tv@mageia.org> | 2011-10-18 17:27:32 +0000 |
---|---|---|
committer | Thierry Vignaud <tv@mageia.org> | 2011-10-18 17:27:32 +0000 |
commit | 16f6a849a45a03c2ec971f92a792ef64178ada37 (patch) | |
tree | 06781bd2fffb176dbe8806c2be86380107f170de | |
parent | 970e05ee2f5a202f42f643d925ebc066182b716b (diff) | |
download | ldetect-16f6a849a45a03c2ec971f92a792ef64178ada37.tar ldetect-16f6a849a45a03c2ec971f92a792ef64178ada37.tar.gz ldetect-16f6a849a45a03c2ec971f92a792ef64178ada37.tar.bz2 ldetect-16f6a849a45a03c2ec971f92a792ef64178ada37.tar.xz ldetect-16f6a849a45a03c2ec971f92a792ef64178ada37.zip |
(get_pci_description) introduce new API for drakx's stage1 in order to find unknown PCI devices
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | libldetect.h | 1 | ||||
-rw-r--r-- | pci.c | 20 |
3 files changed, 22 insertions, 0 deletions
@@ -1,3 +1,4 @@ +- add new API for drakx's stage1 in order to find unknown PCI devices - don't exit(1) on systems without pci (eg: ARM) (rtp) Version 0.11.1 - 1 December 2009, Thierry Vignaud diff --git a/libldetect.h b/libldetect.h index 7c02ae2..339e422 100644 --- a/libldetect.h +++ b/libldetect.h @@ -43,6 +43,7 @@ extern void pciusb_free(struct pciusb_entries *entries); extern struct pciusb_entries pci_probe(void); extern const char *pci_class2text(unsigned long class_id); extern char *proc_pci_path; +extern char *get_pci_description(int vendor_id, int device_id); /******************************************************************************/ /* usb ************************************************************************/ @@ -29,6 +29,26 @@ static void __attribute__((noreturn)) error_and_die(char *msg, ...) exit(1); } +static struct pci_access *pacc; +char* get_pci_description(int vendor_id, int device_id) { + char vendorbuf[128], devbuf[128]; + char *buf = malloc(256); + + if (!pacc) { + pacc = pci_alloc(); + pci_init(pacc); /* Initialize the PCI library */ + pacc->numeric_ids = 0; + pci_init(pacc); + } + + asprintf(&buf, "%s|%s", + pci_lookup_name(pacc, vendorbuf, sizeof(vendorbuf), PCI_LOOKUP_VENDOR | PCI_LOOKUP_NO_NUMBERS, vendor_id, device_id), + pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE, vendor_id, device_id) + ); + //pci_cleanup(pacc); // only used by stage1's merge-pcitable.pl that doesn't care about leaking _one_ struct + return buf; +} + extern struct pciusb_entries pci_probe(void) { u8 buf[CONFIG_SPACE_SIZE]; struct pciusb_entries r; |