diff options
author | Simon Quigley <tsimonq2@ubuntu.com> | 2017-06-19 14:38:33 -0500 |
---|---|---|
committer | Simon Quigley <tsimonq2@ubuntu.com> | 2017-06-19 14:38:33 -0500 |
commit | 854292407779593a401a1d5ce71add51880fa84f (patch) | |
tree | 42b5f1896eda603c04a30db1effb133f10f71ca8 /pci.c | |
parent | a08438bda21b3e0d7db2db2360d040841970104d (diff) |
Import Upstream version 0.4
Diffstat (limited to 'pci.c')
-rw-r--r-- | pci.c | 274 |
1 files changed, 0 insertions, 274 deletions
@@ -1,274 +0,0 @@ -/* - * Hardware Information, version 0.3 - * Copyright (C) 2003 Leandro Pereira <leandro@linuxmag.com.br> - * - * May be modified and/or distributed under the terms of GNU GPL version 2. - * - */ - -#include "hardinfo.h" -#include "pci.h" - -void hi_show_pci_info(MainWindow *mainwindow, PCIDevice *device) -{ - gchar *buf; - - if(!device) return; - - gtk_window_set_title(GTK_WINDOW(mainwindow->det_window->window), device->category); - detail_window_set_icon(mainwindow->det_window, IMG_PREFIX "pci.png"); - detail_window_set_dev_name(mainwindow->det_window, device->name); - detail_window_set_dev_type(mainwindow->det_window, device->category); - - if (device->irq) - detail_window_append_info_int(mainwindow->det_window, "IRQ", - device->irq, FALSE); - - if(device->io_addr) { - buf = g_strdup_printf(_("0x%x to 0x%x"), device->io_addr, - device->io_addr_end); - - detail_window_append_info(mainwindow->det_window, - _("I/O Address"), buf); - g_free(buf); - } - - if(device->memory) { - buf = g_strdup_printf(_("%d%s"), - (device->memory <= 1024) ? device->memory : - device->memory / 1000, - (device->memory <= 1024) ? "bytes" : "KB"); - - detail_window_append_info(mainwindow->det_window, - _("Memory"), buf); - - g_free(buf); - } - - if(device->freq) { - buf = g_strdup_printf(_("%dMHz"), device->freq); - - detail_window_append_info(mainwindow->det_window, - _("Frequency"), buf); - - g_free(buf); - } - - if (device->latency) - detail_window_append_info_int(mainwindow->det_window, - _("Latency"), device->latency, - FALSE); - - detail_window_append_info(mainwindow->det_window, _("Bus master"), - (gchar*)((device->bus_master) ? _("Yes") : _("No"))); - - detail_window_append_separator(mainwindow->det_window); - - detail_window_append_info_int(mainwindow->det_window, _("Domain"), - device->domain, FALSE); - detail_window_append_info_int(mainwindow->det_window, _("Bus"), - device->bus, FALSE); - detail_window_append_info_int(mainwindow->det_window, _("Device"), - device->device, FALSE); - detail_window_append_info_int(mainwindow->det_window, _("Function"), - device->function, FALSE); -} - -#ifdef USE_LSPCI -PCIDevice *hi_scan_pci(void) -{ - FILE *lspci; - gchar buffer[256], *buf; - gint n=0; - PCIDevice *pci_dev = NULL, *pci; - - pci = NULL; - - lspci = popen(LSPCI, "r"); - if(!lspci) return NULL; - - while(fgets(buffer, 256, lspci)){ - buf = g_strstrip(buffer); - - if(!strncmp(buf, "Flags", 5)){ - gint irq=0, freq=0, latency=0, i; - gchar **list; - - buf+=7; - - pci_dev->bus_master = FALSE; - - list = g_strsplit(buf, ", ", 10); - for (i = 0; i <= 10; i++) { - if(!list[i]) break; - - if(!strncmp(list[i], "IRQ", 3)) - sscanf(list[i], "IRQ %d", &irq); - else if(strstr(list[i], "Mhz")) - sscanf(list[i], "%dMhz", &freq); - else if(!strncmp(list[i], "bus master", 10)) - pci_dev->bus_master = TRUE; - else if(!strncmp(list[i], "latency", 7)) - sscanf(list[i], "latency %d", &latency); - } - g_strfreev(list); - - if (irq) pci_dev->irq = irq; - if (freq) pci_dev->freq = freq; - if (latency) pci_dev->latency = latency; - } else if(!strncmp(buf, "Memory at", 9) && - strstr(buf, "[size=")) { - gulong mem; - gchar unit; - - walk_until('['); - sscanf(buf, "[size=%ld%c", &mem, &unit); - - mem *= (unit == ']') ? 1 : - (unit == 'K') ? 1024 : - (unit == 'M') ? 1024 * 1000 : - (unit == 'G') ? 1024 * 1000 * 1000 : 1; - - pci_dev->memory += mem; - - } else if(!strncmp(buf, "I/O", 3)){ - guint io_addr, io_size; - - sscanf(buf, "I/O ports at %x [size=%d]", &io_addr, &io_size); - - pci_dev->io_addr = io_addr; - pci_dev->io_addr_end = io_addr+io_size; - - } else if((buf[0] >= '0' && buf[0] <= '9') && buf[4] == ':'){ - gint bus, device, function, domain; - gpointer start, end; - - pci_dev = g_new0(PCIDevice, 1); - - pci_dev->next = pci; - pci = pci_dev; - - sscanf(buf, "%x:%x:%x.%d", &domain, &bus, &device, &function); - - pci_dev->domain = domain; - pci_dev->bus = bus; - pci_dev->device = device; - pci_dev->function = function; - - walk_until(' '); - - start = buf; - - walk_until(':'); - end = buf+1; - *buf=0; - - buf = start+1; - pci_dev->category = g_strdup(buf); - - buf = end; - start = buf; - walk_until('('); - *buf = 0; - buf = start+1; - - pci_dev->name = g_strdup(buf); - - n++; - } - } - pclose(lspci); - - return pci; -} - -#else - -#warning Using /proc/pci is deprecated, please install pciutils! - -PCIDevice *hi_scan_pci(void) -{ - FILE *proc_pci; - gchar buffer[256], *buf; - gboolean next_is_name = FALSE; - gint n=0; - PCIDevice *pci_dev, *pci; - struct stat st; - - g_print("Scanning PCI devices... "); - - pci = NULL; - - if(stat("/proc/pci", &st)) return NULL; - - proc_pci = fopen("/proc/pci", "r"); - while(fgets(buffer, 256, proc_pci)){ - buf = g_strstrip(buffer); - if(next_is_name == TRUE) { - gpointer start, end; - - start = buf; - - walk_until(':'); - end = buf+1; - *buf=0; - - buf = start; - pci_dev->category = g_strdup(buf); - - buf = end; - buf[strlen(buf)-1]=0; - pci_dev->name = g_strdup(buf); - - next_is_name = FALSE; - } else if(!strncmp(buf, "IRQ", 3)){ - gint irq; - - sscanf(buf, "IRQ %d", &irq); - - pci_dev->irq = irq; - } else if(!strncmp(buf, "Prefetchable 32 bit", 19) || - !strncmp(buf, "Non-prefetchable 32 bit", 23)){ - gulong mem_st, mem_end; - - if(*buf == 'N') buf+=4; - buf++; - - sscanf(buf, "refetchable 32 bit memory at %lx [%lx]", - &mem_st, &mem_end); - - pci_dev->memory+=(mem_end-mem_st)/1024; - } else if(!strncmp(buf, "I/O", 3)){ - guint io_addr, io_addr_end; - - sscanf(buf, "I/O at %x [%x]", &io_addr, &io_addr_end); - - pci_dev->io_addr = io_addr; - pci_dev->io_addr_end = io_addr_end; - } else if(!strncmp(buf, "Bus", 3)){ - gint bus, device, function; - - pci_dev = g_new0(PCIDevice, 1); - - pci_dev->next = pci; - pci = pci_dev; - - sscanf(buf, "Bus %d, device %d, function %d:", - &bus, &device, &function); - - pci_dev->bus = bus; - pci_dev->device = device; - pci_dev->function = function; - - next_is_name = TRUE; - n++; - } - } - fclose(proc_pci); - - g_print ("%d devices found\n", n); - - return pci; -} -#endif - |