On Mon, Sep 14, 2026 at 3:20 AM Michael S. Tsirkin <[email protected]> wrote:
>
> On Fri, Sep 11, 2026 at 04:11:33PM +0800, Peng Hao wrote:
> > From: Peng Hao <[email protected]>
> >
> > Since commit 69b9461512246 ("virtio_pci_modern: allow configuring
> > extended features") the modern virtio-pci driver unconditionally
> > accesses the whole 128 bits features space, i.e. it drives
> > device_feature_select / guest_feature_select with the values 0..3.
> >
> > Devices predating the extended features space only implement the
> > legacy 64 bits one, and what they report for the selectors above it is
> > not a valid features space. Negotiating it makes the driver and the
> > device end up with different features sets: on a smart NIC exposing a
> > virtio_net device the link comes up but carries no traffic, while the
> > same device works with a kernel that only accesses the low 64 bits.
> >
> > Reading the features space has no side effect, so keep reading all of
> > it and use the extended part to tell whether the device implements it:
> > report the legacy 64 bits only when the extended words read back as
> > all-ones or as an alias of the low words, and latch the device down for
> > good. As the features negotiation ANDs the device and driver features,
> > no feature above bit 63 can be negotiated afterwards.
> >
> > Writing a selector the device does not implement cannot be relied upon
> > the same way, so never drive one above the highest word that actually
> > carries a bit. The reset preceding the features negotiation zeroes the
> > device side features, hence the words left unwritten stay cleared.
> >
> > Also dump the raw device_feature dwords, and add a max_features_u64s
> > module parameter to force the legacy 64 bits space on devices whose
> > quirk the detection does not catch.
> >
> > Conforming devices are unaffected: their extended words are neither
> > all-ones nor an alias of the low ones, so the detection does not
> > trigger.
> >
> > Signed-off-by: Peng Hao <[email protected]>
>
>
> Also can you dump the pci header of the device please?
>
Yes. The affected PCI function is:
BDF: 0000:45:00.0
Class: 0880
Vendor/device: 1af4:1000
Subsystem: 1af4:0001
Revision: 00
Physical slot: 0-34
Kernel driver: virtio-pci
The relevant `lspci -nnvv` output is:
45:00.0 System peripheral [0880]: Red Hat, Inc. Virtio network
device [1af4:1000]
Subsystem: Red Hat, Inc. Device [1af4:0001]
Physical Slot: 0-34
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast
>TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
NUMA node: 0
IOMMU group: 138
Region 0: Memory at 3ffbffc04000 (64-bit, prefetchable) [size=16K]
Region 2: Memory at 3ffbffc00000 (64-bit, prefetchable) [size=16K]
Capabilities: [94] MSI-X: Enable+ Count=66 Masked-
Vector table: BAR=2 offset=00000000
PBA: BAR=2 offset=00001000
Capabilities: [84] Vendor Specific Information: VirtIO: <unknown>
BAR=0 offset=00000860 size=00000004
Capabilities: [74] Vendor Specific Information: VirtIO: DeviceCfg
BAR=0 offset=00000840 size=00000040
Capabilities: [64] Vendor Specific Information: VirtIO: ISR
BAR=0 offset=00000820 size=00000020
Capabilities: [50] Vendor Specific Information: VirtIO: Notify
BAR=0 offset=00001000 size=00000020 multiplier=00000000
Capabilities: [40] Vendor Specific Information: VirtIO: CommonCfg
BAR=0 offset=00000888 size=00000078
Kernel driver in use: virtio-pci
I have attached the complete `lspci -nnvvxxxx` output and the raw 4 KiB
PCI configuration-space dump.
By the way, the information mentioned above was collected using the 7.2 kernel
with my patch applied. Without this patch, the 7.2 kernel would be
unable to establish
a network connection.
Thanks,
Hao
> > ---
> > diff --git a/drivers/virtio/virtio_pci_modern_dev.c
> > b/drivers/virtio/virtio_pci_modern_dev.c
> > index 413a8c353463..cfb10c9f32dd 100644
> > --- a/drivers/virtio/virtio_pci_modern_dev.c
> > +++ b/drivers/virtio/virtio_pci_modern_dev.c
> > @@ -5,6 +5,21 @@
> > #include <linux/pci.h>
> > #include <linux/delay.h>
> >
> > +static int max_features_u64s = -1;
> > +module_param(max_features_u64s, int, 0444);
> > +MODULE_PARM_DESC(max_features_u64s,
> > + "Max number of 64 bit words of the virtio features space to
> > access (1 = legacy 64 bits only, -1 = auto-detect)");
> > +
> > +static u8 vp_modern_features_u64s(const struct virtio_pci_modern_device
> > *mdev)
> > +{
> > + u8 u64s = mdev->features_u64s ?: VIRTIO_FEATURES_U64S;
> > +
> > + if (max_features_u64s > 0 && u64s > max_features_u64s)
> > + u64s = max_features_u64s;
> > +
> > + return u64s;
> > +}
> > +
> > /*
> > * vp_modern_map_capability - map a part of virtio pci capability
> > * @mdev: the modern virtio-pci device
> > @@ -230,6 +245,8 @@ int vp_modern_probe(struct virtio_pci_modern_device
> > *mdev)
> >
> > check_offsets();
> >
> > + mdev->features_u64s = VIRTIO_FEATURES_U64S;
> > +
> > if (mdev->device_id_check) {
> > devid = mdev->device_id_check(pci_dev);
> > if (devid < 0)
> > @@ -398,15 +415,36 @@ void vp_modern_get_extended_features(struct
> > virtio_pci_modern_device *mdev,
> > u64 *features)
> > {
> > struct virtio_pci_common_cfg __iomem *cfg = mdev->common;
> > + u32 raw[VIRTIO_FEATURES_BITS / 32];
> > + u8 u64s = vp_modern_features_u64s(mdev);
> > int i;
> >
> > - virtio_features_zero(features);
> > for (i = 0; i < VIRTIO_FEATURES_BITS / 32; i++) {
> > - u64 cur;
> > -
> > vp_iowrite32(i, &cfg->device_feature_select);
> > - cur = vp_ioread32(&cfg->device_feature);
> > - features[i >> 1] |= cur << (32 * (i & 1));
> > + raw[i] = vp_ioread32(&cfg->device_feature);
> > + }
> > +
> > + dev_info(&mdev->pci_dev->dev,
> > + "virtio_pci: device_feature[0..3] = 0x%08x 0x%08x 0x%08x
> > 0x%08x\n",
> > + raw[0], raw[1], raw[2], raw[3]);
> > +
> > + virtio_features_zero(features);
> > + for (i = 0; i < u64s * 2; i++)
> > + features[i >> 1] |= (u64)raw[i] << (32 * (i & 1));
> > +
> > + for (i = 1; i < u64s; i++) {
> > + int j;
> > +
> > + if (features[i] != U64_MAX &&
> > + !(features[0] && features[i] == features[0]))
> > + continue;
> > +
> > + dev_info(&mdev->pci_dev->dev,
> > + "virtio_pci: no extended features space, using 64
> > bits features only\n");
> > + mdev->features_u64s = 1;
> > + for (j = 1; j < VIRTIO_FEATURES_U64S; j++)
> > + features[j] = 0;
> > + break;
> > }
> > }
> > EXPORT_SYMBOL_GPL(vp_modern_get_extended_features);
> > @@ -424,10 +462,11 @@ vp_modern_get_driver_extended_features(struct
> > virtio_pci_modern_device *mdev,
> > u64 *features)
> > {
> > struct virtio_pci_common_cfg __iomem *cfg = mdev->common;
> > + u8 u64s = vp_modern_features_u64s(mdev);
> > int i;
> >
> > virtio_features_zero(features);
> > - for (i = 0; i < VIRTIO_FEATURES_BITS / 32; i++) {
> > + for (i = 0; i < u64s * 2; i++) {
> > u64 cur;
> >
> > vp_iowrite32(i, &cfg->guest_feature_select);
> > @@ -446,9 +485,19 @@ void vp_modern_set_extended_features(struct
> > virtio_pci_modern_device *mdev,
> > const u64 *features)
> > {
> > struct virtio_pci_common_cfg __iomem *cfg = mdev->common;
> > + u8 u64s = vp_modern_features_u64s(mdev);
> > int i;
> >
> > - for (i = 0; i < VIRTIO_FEATURES_BITS / 32; i++) {
> > + /*
> > + * Never drive a selector the device may not implement: stop at the
> > + * highest word that carries a bit. The device side features are
> > + * zeroed by the reset that precedes the features negotiation, so the
> > + * words left unwritten keep the value the driver wants for them.
> > + */
> > + while (u64s > 1 && !features[u64s - 1])
> > + u64s--;
> > +
> > + for (i = 0; i < u64s * 2; i++) {
> > u32 cur = features[i >> 1] >> (32 * (i & 1));
> >
> > vp_iowrite32(i, &cfg->guest_feature_select);
> > diff --git a/include/linux/virtio_pci_modern.h
> > b/include/linux/virtio_pci_modern.h
> > index 9a3f2fc53bd6..7dc76afa671e 100644
> > --- a/include/linux/virtio_pci_modern.h
> > +++ b/include/linux/virtio_pci_modern.h
> > @@ -27,6 +27,9 @@
> > * Returns the found device id or ERRNO
> > * @dma_mask: Optional mask instead of the traditional
> > DMA_BIT_MASK(64),
> > * for vendor devices with DMA space address limitations
> > + * @features_u64s: Number of 64 bit words of the features space that can
> > be
> > + * accessed on this device; 1 for devices not implementing
> > + * the extended (128 bits) features space
> > */
> > struct virtio_pci_modern_device {
> > struct pci_dev *pci_dev;
> > @@ -49,6 +52,7 @@ struct virtio_pci_modern_device {
> >
> > int (*device_id_check)(struct pci_dev *pdev);
> > u64 dma_mask;
> > + u8 features_u64s;
> > };
> >
> > /*
> > --
> > 2.43.0
>
45:00.0 System peripheral [0880]: Red Hat, Inc. Virtio network device
[1af4:1000]
Subsystem: Red Hat, Inc. Device [1af4:0001]
Physical Slot: 0-34
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
<MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
NUMA node: 0
IOMMU group: 138
Region 0: Memory at 3ffbffc04000 (64-bit, prefetchable) [size=16K]
Region 2: Memory at 3ffbffc00000 (64-bit, prefetchable) [size=16K]
Capabilities: [a0] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns,
L1 <1us
ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
SlotPowerLimit 0W
DevCtl: CorrErr+ NonFatalErr+ FatalErr+ UnsupReq-
RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
MaxPayload 512 bytes, MaxReadReq 2048 bytes
DevSta: CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr-
TransPend-
LnkCap: Port #0, Speed 16GT/s, Width x8, ASPM not supported
ClockPM- Surprise- LLActRep+ BwNot+ ASPMOptComp-
LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 16GT/s, Width x8
TrErr- Train- SlotClk+ DLActive+ BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP-
LTR-
10BitTagComp+ 10BitTagReq+ OBFF Not Supported, ExtFmt-
EETLPPrefix-
EmergencyPowerReduction Not Supported,
EmergencyPowerReductionInit-
FRS- TPHComp- ExtTPHComp-
AtomicOpsCap: 32bit- 64bit- 128bitCAS-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR-
10BitTagReq- OBFF Disabled,
AtomicOpsCtl: ReqEn-
LnkCap2: Supported Link Speeds: 2.5-16GT/s, Crosslink- Retimer-
2Retimers- DRS-
LnkCtl2: Target Link Speed: 16GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB
preshoot
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-
EqualizationPhase1-
EqualizationPhase2- EqualizationPhase3-
LinkEqualizationRequest-
Retimer- 2Retimers- CrosslinkRes: unsupported
Capabilities: [94] MSI-X: Enable+ Count=66 Masked-
Vector table: BAR=2 offset=00000000
PBA: BAR=2 offset=00001000
Capabilities: [84] Vendor Specific Information: VirtIO: <unknown>
BAR=0 offset=00000860 size=00000004
Capabilities: [74] Vendor Specific Information: VirtIO: DeviceCfg
BAR=0 offset=00000840 size=00000040
Capabilities: [64] Vendor Specific Information: VirtIO: ISR
BAR=0 offset=00000820 size=00000020
Capabilities: [50] Vendor Specific Information: VirtIO: Notify
BAR=0 offset=00001000 size=00000020 multiplier=00000000
Capabilities: [40] Vendor Specific Information: VirtIO: CommonCfg
BAR=0 offset=00000888 size=00000078
Capabilities: [100 v2] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC+ UnsupReq- ACSViol+
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout-
AdvNonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout-
AdvNonFatalErr-
AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn+
ECRCChkCap+ ECRCChkEn+
MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
HeaderLog: 00000000 00000000 00000000 00000000
Capabilities: [1a0 v1] Alternative Routing-ID Interpretation (ARI)
ARICap: MFVC- ACS-, Next Function: 0
ARICtl: MFVC- ACS-, Function Group: 0
Kernel driver in use: virtio-pci
Kernel modules: virtio_pci
00: f4 1a 00 10 06 04 10 00 00 00 80 08 10 00 00 00
10: 0c 40 c0 ff fb 3f 00 00 0c 00 c0 ff fb 3f 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 f4 1a 01 00
30: 00 00 00 00 a0 00 00 00 00 00 00 00 ff 00 00 00
40: 09 00 10 01 00 00 00 00 88 08 00 00 78 00 00 00
50: 09 40 14 02 00 00 00 00 00 10 00 00 20 00 00 00
60: 00 00 00 00 09 50 10 03 00 00 00 00 20 08 00 00
70: 20 00 00 00 09 64 10 04 00 00 00 00 40 08 00 00
80: 40 00 00 00 09 74 10 05 00 00 00 00 60 08 00 00
90: 04 00 00 00 11 84 41 80 02 00 00 00 02 10 00 00
a0: 10 94 02 00 22 80 00 00 57 49 00 00 84 60 30 00
b0: 00 00 84 30 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 1f 00 03 00 00 00 00 00 1e 00 00 00
d0: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
100: 01 00 02 1a 00 00 00 00 00 00 00 00 30 20 ee 03
110: 00 00 00 00 00 00 00 00 e0 01 00 00 00 00 00 00
120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1a0: 0e 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
1b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
300: a0 1e a0 1e 00 04 10 00 00 00 80 08 10 00 00 00
310: 0c 40 b0 ff fb 3f 00 00 0c 00 b0 ff fb 3f 00 00
320: 00 00 00 00 00 00 00 00 00 00 00 00 a0 1e 01 00
330: 00 00 00 00 a0 00 00 00 00 00 00 00 ff 00 00 00
340: 09 00 10 01 00 00 00 00 88 08 00 00 78 00 00 00
350: 09 40 14 02 00 00 00 00 00 10 00 00 20 00 00 00
360: 00 00 00 00 09 50 10 03 00 00 00 00 20 08 00 00
370: 20 00 00 00 09 64 10 04 00 00 00 00 40 08 00 00
380: 40 00 00 00 09 74 10 05 00 00 00 00 60 08 00 00
390: 04 00 00 00 11 84 00 01 02 00 00 00 02 20 00 00
3a0: 10 94 02 00 22 80 00 00 57 49 00 00 84 60 30 00
3b0: 00 00 84 30 00 00 00 00 00 00 00 00 00 00 00 00
3c0: 00 00 00 00 1f 00 03 00 00 00 00 00 1e 00 00 00
3d0: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
400: 01 00 02 1a 00 00 00 00 00 00 00 00 30 20 ee 03
410: 00 00 00 00 00 00 00 00 e0 01 00 00 00 00 00 00
420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
440: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
450: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
460: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
470: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
490: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4a0: 0e 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
4b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
510: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
520: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
540: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
550: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
570: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
590: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
5f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
600: a0 1e a0 1e 00 04 10 00 00 00 80 08 10 00 00 00
610: 0c 40 a0 ff fb 3f 00 00 0c 00 a0 ff fb 3f 00 00
620: 00 00 00 00 00 00 00 00 00 00 00 00 a0 1e 01 00
630: 00 00 00 00 a0 00 00 00 00 00 00 00 ff 00 00 00
640: 09 00 10 01 00 00 00 00 88 08 00 00 78 00 00 00
650: 09 40 14 02 00 00 00 00 00 10 00 00 20 00 00 00
660: 00 00 00 00 09 50 10 03 00 00 00 00 20 08 00 00
670: 20 00 00 00 09 64 10 04 00 00 00 00 40 08 00 00
680: 40 00 00 00 09 74 10 05 00 00 00 00 60 08 00 00
690: 04 00 00 00 11 84 00 01 02 00 00 00 02 20 00 00
6a0: 10 94 02 00 22 80 00 00 57 49 00 00 84 60 30 00
6b0: 00 00 84 30 00 00 00 00 00 00 00 00 00 00 00 00
6c0: 00 00 00 00 1f 00 03 00 00 00 00 00 1e 00 00 00
6d0: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
6e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
6f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
700: 01 00 02 1a 00 00 00 00 00 00 00 00 30 20 ee 03
710: 00 00 00 00 00 00 00 00 e0 01 00 00 00 00 00 00
720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
740: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
750: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7a0: 0e 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
7b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
810: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
820: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
830: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
840: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
850: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
900: a0 1e a0 1e 00 04 10 00 00 00 80 08 10 00 00 00
910: 0c 40 90 ff fb 3f 00 00 0c 00 90 ff fb 3f 00 00
920: 00 00 00 00 00 00 00 00 00 00 00 00 a0 1e 01 00
930: 00 00 00 00 a0 00 00 00 00 00 00 00 ff 00 00 00
940: 09 00 10 01 00 00 00 00 88 08 00 00 78 00 00 00
950: 09 40 14 02 00 00 00 00 00 10 00 00 20 00 00 00
960: 00 00 00 00 09 50 10 03 00 00 00 00 20 08 00 00
970: 20 00 00 00 09 64 10 04 00 00 00 00 40 08 00 00
980: 40 00 00 00 09 74 10 05 00 00 00 00 60 08 00 00
990: 04 00 00 00 11 84 00 01 02 00 00 00 02 20 00 00
9a0: 10 94 02 00 22 80 00 00 57 49 00 00 84 60 30 00
9b0: 00 00 84 30 00 00 00 00 00 00 00 00 00 00 00 00
9c0: 00 00 00 00 1f 00 03 00 00 00 00 00 1e 00 00 00
9d0: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
9e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
9f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a00: 01 00 02 1a 00 00 00 00 00 00 00 00 30 20 ee 03
a10: 00 00 00 00 00 00 00 00 e0 01 00 00 00 00 00 00
a20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
aa0: 0e 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
ab0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ac0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ad0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ae0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
af0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ba0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
bb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
bc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
bd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c00: a0 1e a0 1e 00 04 10 00 00 00 80 08 10 00 00 00
c10: 0c 40 80 ff fb 3f 00 00 0c 00 80 ff fb 3f 00 00
c20: 00 00 00 00 00 00 00 00 00 00 00 00 a0 1e 01 00
c30: 00 00 00 00 a0 00 00 00 00 00 00 00 ff 00 00 00
c40: 09 00 10 01 00 00 00 00 88 08 00 00 78 00 00 00
c50: 09 40 14 02 00 00 00 00 00 10 00 00 20 00 00 00
c60: 00 00 00 00 09 50 10 03 00 00 00 00 20 08 00 00
c70: 20 00 00 00 09 64 10 04 00 00 00 00 40 08 00 00
c80: 40 00 00 00 09 74 10 05 00 00 00 00 60 08 00 00
c90: 04 00 00 00 11 84 00 01 02 00 00 00 02 20 00 00
ca0: 10 94 02 00 22 80 00 00 57 49 00 00 84 60 30 00
cb0: 00 00 84 30 00 00 00 00 00 00 00 00 00 00 00 00
cc0: 00 00 00 00 1f 00 03 00 00 00 00 00 1e 00 00 00
cd0: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ce0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
cf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d00: 01 00 02 1a 00 00 00 00 00 00 00 00 30 20 ee 03
d10: 00 00 00 00 00 00 00 00 e0 01 00 00 00 00 00 00
d20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
da0: 0e 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
db0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
dc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
dd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
de0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
df0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ea0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
eb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ec0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ed0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ee0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ef0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f00: a0 1e a0 1e 00 04 10 00 00 00 80 08 10 00 00 00
f10: 0c 40 70 ff fb 3f 00 00 0c 00 70 ff fb 3f 00 00
f20: 00 00 00 00 00 00 00 00 00 00 00 00 a0 1e 01 00
f30: 00 00 00 00 a0 00 00 00 00 00 00 00 ff 00 00 00
f40: 09 00 10 01 00 00 00 00 88 08 00 00 78 00 00 00
f50: 09 40 14 02 00 00 00 00 00 10 00 00 20 00 00 00
f60: 00 00 00 00 09 50 10 03 00 00 00 00 20 08 00 00
f70: 20 00 00 00 09 64 10 04 00 00 00 00 40 08 00 00
f80: 40 00 00 00 09 74 10 05 00 00 00 00 60 08 00 00
f90: 04 00 00 00 11 84 00 01 02 00 00 00 02 20 00 00
fa0: 10 94 02 00 22 80 00 00 57 49 00 00 84 60 30 00
fb0: 00 00 84 30 00 00 00 00 00 00 00 00 00 00 00 00
fc0: 00 00 00 00 1f 00 03 00 00 00 00 00 1e 00 00 00
fd0: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00