Message ID | 20171106203520.7880-3-michael.nawrocki@gtri.gatech.edu |
---|---|
State | New |
Headers | show |
Series | Fix eepro100 simple transmission, add i82559 PCI ID | expand |
On Mon, Nov 06, 2017 at 03:35:20PM -0500, Mike Nawrocki wrote: > Adds a new PCI ID for the i82559a (0x8086 0x1030) interface. Enables > this ID with a new property "use-alt-device-id" to preserve > compatibility. > > Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu> > --- > hw/net/eepro100.c | 12 ++++++++++++ > include/hw/pci/pci.h | 1 + > qemu-options.hx | 2 +- > 3 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c > index 91dd058010..66f2d2b9e7 100644 > --- a/hw/net/eepro100.c > +++ b/hw/net/eepro100.c > @@ -132,6 +132,7 @@ typedef struct { > const char *name; > const char *desc; > uint16_t device_id; > + uint16_t alt_device_id; > uint8_t revision; > uint16_t subsystem_vendor_id; > uint16_t subsystem_id; > @@ -276,6 +277,7 @@ typedef struct { > /* Quasi static device properties (no need to save them). */ > uint16_t stats_size; > bool has_extended_tcb_support; > + bool use_alt_device_id; > } EEPRO100State; > > /* Word indices in EEPROM. */ > @@ -1855,6 +1857,14 @@ static void e100_nic_realize(PCIDevice *pci_dev, Error **errp) > > TRACE(OTHER, logout("\n")); > > + /* By default, the i82559a adapter uses the legacy PCI ID (for the > + * i82557). This allows the PCI ID to be changed to the alternate > + * i82559 ID if needed. > + */ > + if (s->use_alt_device_id) { > + pci_config_set_device_id(s->dev.config, info->alt_device_id); > + } > + > s->device = info->device; > > e100_pci_reset(s, &local_err); > @@ -1974,6 +1984,7 @@ static E100PCIDeviceInfo e100_devices[] = { > .desc = "Intel i82559A Ethernet", > .device = i82559A, > .device_id = PCI_DEVICE_ID_INTEL_82557, > + .alt_device_id = PCI_DEVICE_ID_INTEL_82559, > .revision = 0x06, > .stats_size = 80, > .has_extended_tcb_support = true, > @@ -2067,6 +2078,7 @@ static E100PCIDeviceInfo *eepro100_get_class(EEPRO100State *s) > > static Property e100_properties[] = { > DEFINE_NIC_PROPERTIES(EEPRO100State, conf), > + DEFINE_PROP_BOOL("use-alt-device-id", EEPRO100State, use_alt_device_id, 0), 0 -> false > DEFINE_PROP_END_OF_LIST(), > }; > Do I understand it correctly that the only reason we really want it enabled by default, you only set it to 0 for compatibility? If yes there's a way to keep it enabled by default: - add x- in front of the property, set to true by default, then tweak it to false in include/hw/compat.h > diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h > index 8d02a0a383..f30e2cfb72 100644 > --- a/include/hw/pci/pci.h > +++ b/include/hw/pci/pci.h > @@ -70,6 +70,7 @@ extern bool pci_available; > /* Intel (0x8086) */ > #define PCI_DEVICE_ID_INTEL_82551IT 0x1209 > #define PCI_DEVICE_ID_INTEL_82557 0x1229 > +#define PCI_DEVICE_ID_INTEL_82559 0x1030 > #define PCI_DEVICE_ID_INTEL_82801IR 0x2922 > > /* Red Hat / Qumranet (for QEMU) -- see pci-ids.txt */ > diff --git a/qemu-options.hx b/qemu-options.hx > index 3728e9b4dd..a39c7e44b3 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -2047,7 +2047,7 @@ that the card should have; this option currently only affects virtio cards; set > @var{v} = 0 to disable MSI-X. If no @option{-net} option is specified, a single > NIC is created. QEMU can emulate several different models of network card. > Valid values for @var{type} are > -@code{virtio}, @code{i82551}, @code{i82557b}, @code{i82559er}, > +@code{virtio}, @code{i82551}, @code{i82557b}, @code{i82559a}, @code{i82559er}, > @code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139}, > @code{e1000}, @code{smc91c111}, @code{lance} and @code{mcf_fec}. > Not all devices are supported on all targets. Use @code{-net nic,model=help} > -- > 2.14.2
On 11/07/2017 11:12 AM, Michael S. Tsirkin wrote: > On Mon, Nov 06, 2017 at 03:35:20PM -0500, Mike Nawrocki wrote: >> Adds a new PCI ID for the i82559a (0x8086 0x1030) interface. Enables >> this ID with a new property "use-alt-device-id" to preserve >> compatibility. >> >> Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu> >> --- >> hw/net/eepro100.c | 12 ++++++++++++ >> include/hw/pci/pci.h | 1 + >> qemu-options.hx | 2 +- >> 3 files changed, 14 insertions(+), 1 deletion(-) >> >> diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c >> index 91dd058010..66f2d2b9e7 100644 >> --- a/hw/net/eepro100.c >> +++ b/hw/net/eepro100.c >> @@ -132,6 +132,7 @@ typedef struct { >> const char *name; >> const char *desc; >> uint16_t device_id; >> + uint16_t alt_device_id; >> uint8_t revision; >> uint16_t subsystem_vendor_id; >> uint16_t subsystem_id; >> @@ -276,6 +277,7 @@ typedef struct { >> /* Quasi static device properties (no need to save them). */ >> uint16_t stats_size; >> bool has_extended_tcb_support; >> + bool use_alt_device_id; >> } EEPRO100State; >> >> /* Word indices in EEPROM. */ >> @@ -1855,6 +1857,14 @@ static void e100_nic_realize(PCIDevice *pci_dev, Error **errp) >> >> TRACE(OTHER, logout("\n")); >> >> + /* By default, the i82559a adapter uses the legacy PCI ID (for the >> + * i82557). This allows the PCI ID to be changed to the alternate >> + * i82559 ID if needed. >> + */ >> + if (s->use_alt_device_id) { >> + pci_config_set_device_id(s->dev.config, info->alt_device_id); >> + } >> + >> s->device = info->device; >> >> e100_pci_reset(s, &local_err); >> @@ -1974,6 +1984,7 @@ static E100PCIDeviceInfo e100_devices[] = { >> .desc = "Intel i82559A Ethernet", >> .device = i82559A, >> .device_id = PCI_DEVICE_ID_INTEL_82557, >> + .alt_device_id = PCI_DEVICE_ID_INTEL_82559, >> .revision = 0x06, >> .stats_size = 80, >> .has_extended_tcb_support = true, >> @@ -2067,6 +2078,7 @@ static E100PCIDeviceInfo *eepro100_get_class(EEPRO100State *s) >> >> static Property e100_properties[] = { >> DEFINE_NIC_PROPERTIES(EEPRO100State, conf), >> + DEFINE_PROP_BOOL("use-alt-device-id", EEPRO100State, use_alt_device_id, 0), > > 0 -> false > Gotcha. >> DEFINE_PROP_END_OF_LIST(), >> }; >> > > Do I understand it correctly that the only reason we really > want it enabled by default, you only set it to 0 for > compatibility? > If yes there's a way to keep it enabled by default: > - add x- in front of the property, set to true by default, > then tweak it to false in include/hw/compat.h > > I think it ought to be enabled by default, and did set it to 0 for compatibility. I went ahead and added "x-" to the front of the property, set it to true by default, and added the compat tweak. I put it in HW_COMPAT_2_10, which I think is the right place; let me know if anything else needs to be done. I'll go ahead and push out the fixes. Thanks, Mike >> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h >> index 8d02a0a383..f30e2cfb72 100644 >> --- a/include/hw/pci/pci.h >> +++ b/include/hw/pci/pci.h >> @@ -70,6 +70,7 @@ extern bool pci_available; >> /* Intel (0x8086) */ >> #define PCI_DEVICE_ID_INTEL_82551IT 0x1209 >> #define PCI_DEVICE_ID_INTEL_82557 0x1229 >> +#define PCI_DEVICE_ID_INTEL_82559 0x1030 >> #define PCI_DEVICE_ID_INTEL_82801IR 0x2922 >> >> /* Red Hat / Qumranet (for QEMU) -- see pci-ids.txt */ >> diff --git a/qemu-options.hx b/qemu-options.hx >> index 3728e9b4dd..a39c7e44b3 100644 >> --- a/qemu-options.hx >> +++ b/qemu-options.hx >> @@ -2047,7 +2047,7 @@ that the card should have; this option currently only affects virtio cards; set >> @var{v} = 0 to disable MSI-X. If no @option{-net} option is specified, a single >> NIC is created. QEMU can emulate several different models of network card. >> Valid values for @var{type} are >> -@code{virtio}, @code{i82551}, @code{i82557b}, @code{i82559er}, >> +@code{virtio}, @code{i82551}, @code{i82557b}, @code{i82559a}, @code{i82559er}, >> @code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139}, >> @code{e1000}, @code{smc91c111}, @code{lance} and @code{mcf_fec}. >> Not all devices are supported on all targets. Use @code{-net nic,model=help} >> -- >> 2.14.2
Am 06.11.2017 um 21:35 schrieb Mike Nawrocki: > Adds a new PCI ID for the i82559a (0x8086 0x1030) interface. Enables > this ID with a new property "use-alt-device-id" to preserve > compatibility. > > Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu> > --- > hw/net/eepro100.c | 12 ++++++++++++ > include/hw/pci/pci.h | 1 + > qemu-options.hx | 2 +- > 3 files changed, 14 insertions(+), 1 deletion(-) Sorry that I missed this patch. I think I should have an entry for eepro100 in MAINTAINERS. Mike, which hardware uses i82559a with PCI device id 0x1030? https://www.intel.com/content/www/us/en/support/articles/000005612/network-and-i-o/ethernet-products.html only lists devices with 0x1229. Thanks, Stefan
On 2017年11月15日 05:41, Stefan Weil wrote: > Am 06.11.2017 um 21:35 schrieb Mike Nawrocki: >> Adds a new PCI ID for the i82559a (0x8086 0x1030) interface. Enables >> this ID with a new property "use-alt-device-id" to preserve >> compatibility. >> >> Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu> >> --- >> hw/net/eepro100.c | 12 ++++++++++++ >> include/hw/pci/pci.h | 1 + >> qemu-options.hx | 2 +- >> 3 files changed, 14 insertions(+), 1 deletion(-) > > Sorry that I missed this patch. > I think I should have an entry for eepro100 in MAINTAINERS. Yes, please send a patch for this. Thanks > > Mike, which hardware uses i82559a with PCI device id 0x1030? > > https://www.intel.com/content/www/us/en/support/articles/000005612/network-and-i-o/ethernet-products.html > only lists devices with > 0x1229. > > Thanks, > Stefan
On 11/14/2017 04:41 PM, Stefan Weil wrote: > Am 06.11.2017 um 21:35 schrieb Mike Nawrocki: >> Adds a new PCI ID for the i82559a (0x8086 0x1030) interface. Enables >> this ID with a new property "use-alt-device-id" to preserve >> compatibility. >> >> Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu> >> --- >> hw/net/eepro100.c | 12 ++++++++++++ >> include/hw/pci/pci.h | 1 + >> qemu-options.hx | 2 +- >> 3 files changed, 14 insertions(+), 1 deletion(-) > > > Sorry that I missed this patch. > I think I should have an entry for eepro100 in MAINTAINERS. > > Mike, which hardware uses i82559a with PCI device id 0x1030? > > https://www.intel.com/content/www/us/en/support/articles/000005612/network-and-i-o/ethernet-products.html > only lists devices with > 0x1229. > > Thanks, > Stefan > Hi Stefan, I've got a VxWorks driver binary that explicitly looks for device ID 0x1030 (which is admittedly not ideal). It seems like the "82559 InBusiness 10/100" hardware uses this, though I've had trouble finding an official source. The following documents reference that ID: https://pci-ids.ucw.cz/read/PC/8086/1030 http://ks.pams.ncsu.edu/pub/ncsuscyld/i386/misc/src/trees/hdstg2/modules/pcitable https://cateee.net/lkddb/web-lkddb/E100.html And I found a similar post on a different mailing list that might shed some light: http://www.beowulf.org/pipermail/eepro100/2000-January/000760.html It looks like the 8255x series of devices have a number of potential IDs; maybe a property to set a specific PCI device ID would work? Thanks, Mike
On 2017年11月15日 21:09, Michael Nawrocki wrote: > On 11/14/2017 04:41 PM, Stefan Weil wrote: >> Am 06.11.2017 um 21:35 schrieb Mike Nawrocki: >>> Adds a new PCI ID for the i82559a (0x8086 0x1030) interface. Enables >>> this ID with a new property "use-alt-device-id" to preserve >>> compatibility. >>> >>> Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu> >>> --- >>> hw/net/eepro100.c | 12 ++++++++++++ >>> include/hw/pci/pci.h | 1 + >>> qemu-options.hx | 2 +- >>> 3 files changed, 14 insertions(+), 1 deletion(-) >> >> >> Sorry that I missed this patch. >> I think I should have an entry for eepro100 in MAINTAINERS. >> >> Mike, which hardware uses i82559a with PCI device id 0x1030? >> >> https://www.intel.com/content/www/us/en/support/articles/000005612/network-and-i-o/ethernet-products.html >> >> only lists devices with >> 0x1229. >> >> Thanks, >> Stefan >> > > Hi Stefan, > > I've got a VxWorks driver binary that explicitly looks for device ID > 0x1030 (which is admittedly not ideal). It seems like the "82559 > InBusiness 10/100" hardware uses this, though I've had trouble finding > an official source. The following documents reference that ID: > > https://pci-ids.ucw.cz/read/PC/8086/1030 > http://ks.pams.ncsu.edu/pub/ncsuscyld/i386/misc/src/trees/hdstg2/modules/pcitable > > https://cateee.net/lkddb/web-lkddb/E100.html > > And I found a similar post on a different mailing list that might shed > some light: > http://www.beowulf.org/pipermail/eepro100/2000-January/000760.html > > It looks like the 8255x series of devices have a number of potential > IDs; maybe a property to set a specific PCI device ID would work? Maybe we should use the same method as used in e1000 which can have different ids depends on types. Thanks > > Thanks, > Mike
Am 15.11.2017 um 14:09 schrieb Michael Nawrocki: > Hi Stefan, > > I've got a VxWorks driver binary that explicitly looks for device ID > 0x1030 (which is admittedly not ideal). It seems like the "82559 > InBusiness 10/100" hardware uses this, though I've had trouble finding > an official source. The following documents reference that ID: > > https://pci-ids.ucw.cz/read/PC/8086/1030 > http://ks.pams.ncsu.edu/pub/ncsuscyld/i386/misc/src/trees/hdstg2/modules/pcitable > > https://cateee.net/lkddb/web-lkddb/E100.html > > And I found a similar post on a different mailing list that might shed > some light: > http://www.beowulf.org/pipermail/eepro100/2000-January/000760.html > > It looks like the 8255x series of devices have a number of potential > IDs; maybe a property to set a specific PCI device ID would work? > > Thanks, > Mike Yes, that might be a very general solution which could be applied to all PCI devices. It could even be extended to include the vendor ID or any PCI configuration value as well. Nevertheless the technically correct solution would be a full emulation of the EEPROM. Then we could provide an EEPROM for the 82559 InBusiness 10/100", and the data from that EEPROM would set the right PCI device ID. Jason, until we get a better solution, the last commit should be reverted before the new QEMU version is made. That commit also added a wrong help text. Regards Stefan
On 2017年11月16日 14:40, Stefan Weil wrote: > Am 15.11.2017 um 14:09 schrieb Michael Nawrocki: >> Hi Stefan, >> >> I've got a VxWorks driver binary that explicitly looks for device ID >> 0x1030 (which is admittedly not ideal). It seems like the "82559 >> InBusiness 10/100" hardware uses this, though I've had trouble finding >> an official source. The following documents reference that ID: >> >> https://pci-ids.ucw.cz/read/PC/8086/1030 >> http://ks.pams.ncsu.edu/pub/ncsuscyld/i386/misc/src/trees/hdstg2/modules/pcitable >> >> https://cateee.net/lkddb/web-lkddb/E100.html >> >> And I found a similar post on a different mailing list that might shed >> some light: >> http://www.beowulf.org/pipermail/eepro100/2000-January/000760.html >> >> It looks like the 8255x series of devices have a number of potential >> IDs; maybe a property to set a specific PCI device ID would work? >> >> Thanks, >> Mike > Yes, that might be a very general solution which could be applied to all > PCI devices. > It could even be extended to include the vendor ID or any PCI > configuration value > as well. > > Nevertheless the technically correct solution would be a full emulation > of the > EEPROM. Then we could provide an EEPROM for the 82559 InBusiness 10/100", > and the data from that EEPROM would set the right PCI device ID. > > Jason, until we get a better solution, the last commit should be > reverted before > the new QEMU version is made. That commit also added a wrong help text. > > Regards > Stefan Let me post a patch soon. Thanks
diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c index 91dd058010..66f2d2b9e7 100644 --- a/hw/net/eepro100.c +++ b/hw/net/eepro100.c @@ -132,6 +132,7 @@ typedef struct { const char *name; const char *desc; uint16_t device_id; + uint16_t alt_device_id; uint8_t revision; uint16_t subsystem_vendor_id; uint16_t subsystem_id; @@ -276,6 +277,7 @@ typedef struct { /* Quasi static device properties (no need to save them). */ uint16_t stats_size; bool has_extended_tcb_support; + bool use_alt_device_id; } EEPRO100State; /* Word indices in EEPROM. */ @@ -1855,6 +1857,14 @@ static void e100_nic_realize(PCIDevice *pci_dev, Error **errp) TRACE(OTHER, logout("\n")); + /* By default, the i82559a adapter uses the legacy PCI ID (for the + * i82557). This allows the PCI ID to be changed to the alternate + * i82559 ID if needed. + */ + if (s->use_alt_device_id) { + pci_config_set_device_id(s->dev.config, info->alt_device_id); + } + s->device = info->device; e100_pci_reset(s, &local_err); @@ -1974,6 +1984,7 @@ static E100PCIDeviceInfo e100_devices[] = { .desc = "Intel i82559A Ethernet", .device = i82559A, .device_id = PCI_DEVICE_ID_INTEL_82557, + .alt_device_id = PCI_DEVICE_ID_INTEL_82559, .revision = 0x06, .stats_size = 80, .has_extended_tcb_support = true, @@ -2067,6 +2078,7 @@ static E100PCIDeviceInfo *eepro100_get_class(EEPRO100State *s) static Property e100_properties[] = { DEFINE_NIC_PROPERTIES(EEPRO100State, conf), + DEFINE_PROP_BOOL("use-alt-device-id", EEPRO100State, use_alt_device_id, 0), DEFINE_PROP_END_OF_LIST(), }; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 8d02a0a383..f30e2cfb72 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -70,6 +70,7 @@ extern bool pci_available; /* Intel (0x8086) */ #define PCI_DEVICE_ID_INTEL_82551IT 0x1209 #define PCI_DEVICE_ID_INTEL_82557 0x1229 +#define PCI_DEVICE_ID_INTEL_82559 0x1030 #define PCI_DEVICE_ID_INTEL_82801IR 0x2922 /* Red Hat / Qumranet (for QEMU) -- see pci-ids.txt */ diff --git a/qemu-options.hx b/qemu-options.hx index 3728e9b4dd..a39c7e44b3 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2047,7 +2047,7 @@ that the card should have; this option currently only affects virtio cards; set @var{v} = 0 to disable MSI-X. If no @option{-net} option is specified, a single NIC is created. QEMU can emulate several different models of network card. Valid values for @var{type} are -@code{virtio}, @code{i82551}, @code{i82557b}, @code{i82559er}, +@code{virtio}, @code{i82551}, @code{i82557b}, @code{i82559a}, @code{i82559er}, @code{ne2k_pci}, @code{ne2k_isa}, @code{pcnet}, @code{rtl8139}, @code{e1000}, @code{smc91c111}, @code{lance} and @code{mcf_fec}. Not all devices are supported on all targets. Use @code{-net nic,model=help}
Adds a new PCI ID for the i82559a (0x8086 0x1030) interface. Enables this ID with a new property "use-alt-device-id" to preserve compatibility. Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu> --- hw/net/eepro100.c | 12 ++++++++++++ include/hw/pci/pci.h | 1 + qemu-options.hx | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-)