diff mbox series

[2/2] Add i82559a eepro100 interface

Message ID 20171031155435.4618-3-michael.nawrocki@gtri.gatech.edu
State New
Headers show
Series Fix eepro100 simple transmission, add i82559 chipset | expand

Commit Message

Michael Nawrocki Oct. 31, 2017, 3:54 p.m. UTC
Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu>
---
 hw/net/eepro100.c    | 2 +-
 hw/pci/pci.c         | 2 ++
 include/hw/pci/pci.h | 1 +
 qemu-options.hx      | 2 +-
 4 files changed, 5 insertions(+), 2 deletions(-)

Comments

Dr. David Alan Gilbert Oct. 31, 2017, 5:50 p.m. UTC | #1
* Mike Nawrocki (michael.nawrocki@gtri.gatech.edu) wrote:
> Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu>
> ---
>  hw/net/eepro100.c    | 2 +-
>  hw/pci/pci.c         | 2 ++
>  include/hw/pci/pci.h | 1 +
>  qemu-options.hx      | 2 +-
>  4 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
> index 91dd058010..2c7c5cdeb9 100644
> --- a/hw/net/eepro100.c
> +++ b/hw/net/eepro100.c
> @@ -1973,7 +1973,7 @@ static E100PCIDeviceInfo e100_devices[] = {
>          .name = "i82559a",
>          .desc = "Intel i82559A Ethernet",
>          .device = i82559A,
> -        .device_id = PCI_DEVICE_ID_INTEL_82557,
> +        .device_id = PCI_DEVICE_ID_INTEL_82559,

Doesn't that break migration/compatibility - if one side suddenly
sees a different device_id ?

Dave

>          .revision = 0x06,
>          .stats_size = 80,
>          .has_extended_tcb_support = true,
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index 5ed3c8dca4..1126ad1eb3 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -1826,6 +1826,7 @@ static const char * const pci_nic_models[] = {
>      "ne2k_pci",
>      "i82551",
>      "i82557b",
> +    "i82559a",
>      "i82559er",
>      "rtl8139",
>      "e1000",
> @@ -1839,6 +1840,7 @@ static const char * const pci_nic_names[] = {
>      "ne2k_pci",
>      "i82551",
>      "i82557b",
> +    "i82559a",
>      "i82559er",
>      "rtl8139",
>      "e1000",
> 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
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Michael Nawrocki Nov. 1, 2017, 2:48 p.m. UTC | #2
On 10/31/17, 13:50, "Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:

    * Mike Nawrocki (michael.nawrocki@gtri.gatech.edu) wrote:
    > Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu>

    > ---

    >  hw/net/eepro100.c    | 2 +-

    >  hw/pci/pci.c         | 2 ++

    >  include/hw/pci/pci.h | 1 +

    >  qemu-options.hx      | 2 +-

    >  4 files changed, 5 insertions(+), 2 deletions(-)

    > 

    > diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c

    > index 91dd058010..2c7c5cdeb9 100644

    > --- a/hw/net/eepro100.c

    > +++ b/hw/net/eepro100.c

    > @@ -1973,7 +1973,7 @@ static E100PCIDeviceInfo e100_devices[] = {

    >          .name = "i82559a",

    >          .desc = "Intel i82559A Ethernet",

    >          .device = i82559A,

    > -        .device_id = PCI_DEVICE_ID_INTEL_82557,

    > +        .device_id = PCI_DEVICE_ID_INTEL_82559,

    
    Doesn't that break migration/compatibility - if one side suddenly
    sees a different device_id ?
    
    Dave

I’m not sure. I searched for code references to the i82559a interface and couldn’t find any outside of the driver itself; it wasn’t exported as a pci_nic_model before my patch, so I don’t think the i82559a device was being used, programmatically or via the command line, before this point. Perhaps there’s a different way to use the device that I’m not aware of?

I think the ID I’m using (0x8086 0x1030 – Intel Corporation 82559 InBusiness 10/100) is more accurate to the chipset, and a driver I’ve got explicitly searches for this ID. Most drivers seem to search for a number of PCI IDs in the eepro100 family, at any rate, so I think it should be okay. Let me know if another approach is preferable.

Thanks,
Mike
    
    >          .revision = 0x06,

    >          .stats_size = 80,

    >          .has_extended_tcb_support = true,

    > diff --git a/hw/pci/pci.c b/hw/pci/pci.c

    > index 5ed3c8dca4..1126ad1eb3 100644

    > --- a/hw/pci/pci.c

    > +++ b/hw/pci/pci.c

    > @@ -1826,6 +1826,7 @@ static const char * const pci_nic_models[] = {

    >      "ne2k_pci",

    >      "i82551",

    >      "i82557b",

    > +    "i82559a",

    >      "i82559er",

    >      "rtl8139",

    >      "e1000",

    > @@ -1839,6 +1840,7 @@ static const char * const pci_nic_names[] = {

    >      "ne2k_pci",

    >      "i82551",

    >      "i82557b",

    > +    "i82559a",

    >      "i82559er",

    >      "rtl8139",

    >      "e1000",

    > 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

    > 

    > 

    --
    Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Michael S. Tsirkin Nov. 1, 2017, 3:32 p.m. UTC | #3
On Wed, Nov 01, 2017 at 02:48:17PM +0000, Nawrocki, Michael wrote:
> On 10/31/17, 13:50, "Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> 
>     * Mike Nawrocki (michael.nawrocki@gtri.gatech.edu) wrote:
>     > Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu>
>     > ---
>     >  hw/net/eepro100.c    | 2 +-
>     >  hw/pci/pci.c         | 2 ++
>     >  include/hw/pci/pci.h | 1 +
>     >  qemu-options.hx      | 2 +-
>     >  4 files changed, 5 insertions(+), 2 deletions(-)
>     > 
>     > diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
>     > index 91dd058010..2c7c5cdeb9 100644
>     > --- a/hw/net/eepro100.c
>     > +++ b/hw/net/eepro100.c
>     > @@ -1973,7 +1973,7 @@ static E100PCIDeviceInfo e100_devices[] = {
>     >          .name = "i82559a",
>     >          .desc = "Intel i82559A Ethernet",
>     >          .device = i82559A,
>     > -        .device_id = PCI_DEVICE_ID_INTEL_82557,
>     > +        .device_id = PCI_DEVICE_ID_INTEL_82559,
>     
>     Doesn't that break migration/compatibility - if one side suddenly
>     sees a different device_id ?
>     
>     Dave
> 
> I’m not sure. I searched for code references to the i82559a interface and couldn’t find any outside of the driver itself; it wasn’t exported as a pci_nic_model before my patch, so I don’t think the i82559a device was being used, programmatically or via the command line, before this point. Perhaps there’s a different way to use the device that I’m not aware of?

the modern way to create devices is with -devices.

> I think the ID I’m using (0x8086 0x1030 – Intel Corporation 82559 InBusiness 10/100) is more accurate to the chipset, and a driver I’ve got explicitly searches for this ID. Most drivers seem to search for a number of PCI IDs in the eepro100 family, at any rate, so I think it should be okay. Let me know if another approach is preferable.
> 
> Thanks,
> Mike

You need a property and set it to a compat value for
old machine types.

>     >          .revision = 0x06,
>     >          .stats_size = 80,
>     >          .has_extended_tcb_support = true,
>     > diff --git a/hw/pci/pci.c b/hw/pci/pci.c
>     > index 5ed3c8dca4..1126ad1eb3 100644
>     > --- a/hw/pci/pci.c
>     > +++ b/hw/pci/pci.c
>     > @@ -1826,6 +1826,7 @@ static const char * const pci_nic_models[] = {
>     >      "ne2k_pci",
>     >      "i82551",
>     >      "i82557b",
>     > +    "i82559a",
>     >      "i82559er",
>     >      "rtl8139",
>     >      "e1000",
>     > @@ -1839,6 +1840,7 @@ static const char * const pci_nic_names[] = {
>     >      "ne2k_pci",
>     >      "i82551",
>     >      "i82557b",
>     > +    "i82559a",
>     >      "i82559er",
>     >      "rtl8139",
>     >      "e1000",

There's no need to add more nic names here. Just create with -device.


>     > 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
>     > 
>     > 
>     --
>     Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>     
>
Michael Nawrocki Nov. 6, 2017, 8:23 p.m. UTC | #4
On 11/01/2017 11:32 AM, Michael S. Tsirkin wrote:
> On Wed, Nov 01, 2017 at 02:48:17PM +0000, Nawrocki, Michael wrote:
>> On 10/31/17, 13:50, "Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
>>
>>      * Mike Nawrocki (michael.nawrocki@gtri.gatech.edu) wrote:
>>      > Signed-off-by: Mike Nawrocki <michael.nawrocki@gtri.gatech.edu>
>>      > ---
>>      >  hw/net/eepro100.c    | 2 +-
>>      >  hw/pci/pci.c         | 2 ++
>>      >  include/hw/pci/pci.h | 1 +
>>      >  qemu-options.hx      | 2 +-
>>      >  4 files changed, 5 insertions(+), 2 deletions(-)
>>      >
>>      > diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
>>      > index 91dd058010..2c7c5cdeb9 100644
>>      > --- a/hw/net/eepro100.c
>>      > +++ b/hw/net/eepro100.c
>>      > @@ -1973,7 +1973,7 @@ static E100PCIDeviceInfo e100_devices[] = {
>>      >          .name = "i82559a",
>>      >          .desc = "Intel i82559A Ethernet",
>>      >          .device = i82559A,
>>      > -        .device_id = PCI_DEVICE_ID_INTEL_82557,
>>      > +        .device_id = PCI_DEVICE_ID_INTEL_82559,
>>      
>>      Doesn't that break migration/compatibility - if one side suddenly
>>      sees a different device_id ?
>>      
>>      Dave
>>
>> I’m not sure. I searched for code references to the i82559a interface and couldn’t find any outside of the driver itself; it wasn’t exported as a pci_nic_model before my patch, so I don’t think the i82559a device was being used, programmatically or via the command line, before this point. Perhaps there’s a different way to use the device that I’m not aware of?
> 
> the modern way to create devices is with -devices.
> 

Gotcha. I've updated my usage to reflect this.


>> I think the ID I’m using (0x8086 0x1030 – Intel Corporation 82559 InBusiness 10/100) is more accurate to the chipset, and a driver I’ve got explicitly searches for this ID. Most drivers seem to search for a number of PCI IDs in the eepro100 family, at any rate, so I think it should be okay. Let me know if another approach is preferable.
>>
>> Thanks,
>> Mike
> 
> You need a property and set it to a compat value for
> old machine types.

I've added a "use-alt-device-id" boolean property, an "alt_device_id" 
field in the info struct, and reverted the device_id to the 82557 one. 
I'll push the v2 patches shortly.

> 
>>      >          .revision = 0x06,
>>      >          .stats_size = 80,
>>      >          .has_extended_tcb_support = true,
>>      > diff --git a/hw/pci/pci.c b/hw/pci/pci.c
>>      > index 5ed3c8dca4..1126ad1eb3 100644
>>      > --- a/hw/pci/pci.c
>>      > +++ b/hw/pci/pci.c
>>      > @@ -1826,6 +1826,7 @@ static const char * const pci_nic_models[] = {
>>      >      "ne2k_pci",
>>      >      "i82551",
>>      >      "i82557b",
>>      > +    "i82559a",
>>      >      "i82559er",
>>      >      "rtl8139",
>>      >      "e1000",
>>      > @@ -1839,6 +1840,7 @@ static const char * const pci_nic_names[] = {
>>      >      "ne2k_pci",
>>      >      "i82551",
>>      >      "i82557b",
>>      > +    "i82559a",
>>      >      "i82559er",
>>      >      "rtl8139",
>>      >      "e1000",
> 
> There's no need to add more nic names here. Just create with -device.

Gotcha. I've removed these in the upcoming patches.

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
>>      >
>>      >
>>      --
>>      Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>>      
>>
diff mbox series

Patch

diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
index 91dd058010..2c7c5cdeb9 100644
--- a/hw/net/eepro100.c
+++ b/hw/net/eepro100.c
@@ -1973,7 +1973,7 @@  static E100PCIDeviceInfo e100_devices[] = {
         .name = "i82559a",
         .desc = "Intel i82559A Ethernet",
         .device = i82559A,
-        .device_id = PCI_DEVICE_ID_INTEL_82557,
+        .device_id = PCI_DEVICE_ID_INTEL_82559,
         .revision = 0x06,
         .stats_size = 80,
         .has_extended_tcb_support = true,
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 5ed3c8dca4..1126ad1eb3 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -1826,6 +1826,7 @@  static const char * const pci_nic_models[] = {
     "ne2k_pci",
     "i82551",
     "i82557b",
+    "i82559a",
     "i82559er",
     "rtl8139",
     "e1000",
@@ -1839,6 +1840,7 @@  static const char * const pci_nic_names[] = {
     "ne2k_pci",
     "i82551",
     "i82557b",
+    "i82559a",
     "i82559er",
     "rtl8139",
     "e1000",
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}