Группа :: Система/Ядро и оборудование
Пакет: pciutils
Главная Изменения Спек Патчи Загрузить Bugs and FR
Патч: pciutils-2.1.11-sysfs-filter.diff
--- lib/filter.c 2002-03-30 16:39:25.000000000 +0100
+++ lib/filter.c 2004-02-19 15:54:00.000000000 +0100
@@ -16,7 +16,7 @@
void
pci_filter_init(struct pci_access * UNUSED a, struct pci_filter *f)
{
- f->bus = f->slot = f->func = -1;
+ f->domain = f->bus = f->slot = f->func = -1;
f->vendor = f->device = -1;
}
@@ -25,28 +25,51 @@
char *
pci_filter_parse_slot(struct pci_filter *f, char *str)
{
- char *colon = strchr(str, ':');
- char *dot = strchr((colon ? colon + 1 : str), '.');
- char *mid = str;
+ char *d_colon = strchr(str, ':');
+ char *colon;
+ char *dot;
char *e;
- if (colon)
+ if (d_colon)
{
- *colon++ = 0;
- mid = colon;
- if (str[0] && strcmp(str, "*"))
- {
- long int x = strtol(str, &e, 16);
- if ((e && *e) || (x < 0 || x > 0xff))
- return "Invalid bus number";
- f->bus = x;
- }
+ *d_colon++ = 0;
+ colon = strchr(d_colon, ':');
+ if (colon)
+ {
+ *colon++ = 0;
+ if (str[0] && strcmp(str, "*"))
+ {
+ long int x = strtol(str, &e, 16);
+ if ((e && *e) || (x < 0 || x > 0xffff))
+ return "Invalid domain number";
+ f->domain = x;
+ }
+ }
+ else
+ {
+ colon = d_colon;
+ d_colon = str;
+ }
+ dot = strchr(colon, '.');
+ if (d_colon[0] && strcmp(d_colon, "*"))
+ {
+ long int x = strtol(d_colon, &e, 16);
+ if ((e && *e) || (x < 0 || x > 0xff))
+ return "Invalid bus number";
+ f->bus = x;
+ }
}
+ else
+ {
+ dot = strchr(str, '.');
+ colon = str;
+ }
+
if (dot)
*dot++ = 0;
- if (mid[0] && strcmp(mid, "*"))
+ if (colon[0] && strcmp(colon, "*"))
{
- long int x = strtol(mid, &e, 16);
+ long int x = strtol(colon, &e, 16);
if ((e && *e) || (x < 0 || x > 0x1f))
return "Invalid slot number";
f->slot = x;
@@ -94,7 +117,8 @@
int
pci_filter_match(struct pci_filter *f, struct pci_dev *d)
{
- if ((f->bus >= 0 && f->bus != d->bus) ||
+ if ((f->domain >= 0 && f->domain != d->domain) ||
+ (f->bus >= 0 && f->bus != d->bus) ||
(f->slot >= 0 && f->slot != d->dev) ||
(f->func >= 0 && f->func != d->func))
return 0;
--- lib/pci.h 2003-01-04 12:04:39.000000000 +0100
+++ lib/pci.h 2004-02-19 16:43:28.000000000 +0100
@@ -176,7 +176,7 @@
*/
struct pci_filter {
- int bus, slot, func; /* -1 = ANY */
+ int domain, bus, slot, func; /* -1 = ANY */
int vendor, device;
};
--- lspci.c 2002-12-26 21:24:50.000000000 +0100
+++ lspci.c 2004-02-19 16:43:28.000000000 +0100
@@ -1519,7 +1519,7 @@
break;
case 's':
if (msg = pci_filter_parse_slot(&filter, optarg))
- die("-f: %s", msg);
+ die("-s: %s", msg);
break;
case 'd':
if (msg = pci_filter_parse_id(&filter, optarg))
--- lspci.man 2003-01-04 13:51:16.000000000 +0100
+++ lspci.man 2004-02-19 16:36:01.000000000 +0100
@@ -55,12 +55,13 @@
Show a tree-like diagram containing all buses, bridges, devices and connections
between them.
.TP
-.B -s [[<bus>]:][<slot>][.[<func>]]
-Show only devices in specified bus, slot and function. Each component of the device
-address can be omitted or set as "*" meaning "any value". All numbers are
-hexadecimal. E.g., "0:" means all devices on bus 0, "0" means all functions of device 0
-on any bus, "0.3" selects third function of device 0 on all buses and ".4" shows only
-fourth function of each device.
+.B -s [[<domain>]:][[<bus>]:][<slot>][.[<func>]]
+Show only devices in specified domain, bus, slot and function. Each component of the device
+address can be omitted or set as "*" meaning "any value". If only one colon is present,
+all domains are considered, thus 0: is the same as :0: and :1 is the same as ::1.
+All numbers are hexadecimal. E.g., "0:" means all devices on bus 0, "0" means all
+functions of device 0 on any bus in any domain, "0.3" selects third function of
+device 0 on all buses in all domains and ".4" shows only fourth function of each device.
.TP
.B -d [<vendor>]:[<device>]
Show only devices with specified vendor and device ID. Both ID's are given in
--- setpci.man 2003-01-04 13:52:01.000000000 +0100
+++ setpci.man 2004-02-19 17:13:25.000000000 +0100
@@ -49,12 +49,13 @@
Before each sequence of operations you need to select which devices you wish that
operation to affect.
.TP
-.B -s [[<bus>]:][<slot>][.[<func>]]
-Select devices in specified bus, slot and function. Each component of the device
-address can be omitted or set as "*" meaning "any value". All numbers are
-hexadecimal. E.g., "0:" means all devices on bus 0, "0" means all functions of device 0
-on any bus, "0.3" selects third function of device 0 on all busses and ".4" selects only
-fourth function of each device.
+.B -s [[<domain>]:][[<bus>]:][<slot>][.[<func>]]
+Select devices in specified domain, bus, slot and function. Each component of the device
+address can be omitted or set as "*" meaning "any value". If only one colon is present,
+all domains are considered, thus 0: is the same as :0: and :1 is the same as ::1.
+All numbers are hexadecimal. E.g., "0:" means all devices on bus 0, "0" means all
+functions of device 0 on any bus in any domain, "0.3" selects third function of
+device 0 on all busses in all domains and ".4" selects only fourth function of each device.
.TP
.B -d [<vendor>]:[<device>]
Select devices with specified vendor and device ID. Both ID's are given in