mirror of https://gitee.com/openkylin/linux.git
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (1232 commits) iucv: Fix bad merging. net_sched: Add size table for qdiscs net_sched: Add accessor function for packet length for qdiscs net_sched: Add qdisc_enqueue wrapper highmem: Export totalhigh_pages. ipv6 mcast: Omit redundant address family checks in ip6_mc_source(). net: Use standard structures for generic socket address structures. ipv6 netns: Make several "global" sysctl variables namespace aware. netns: Use net_eq() to compare net-namespaces for optimization. ipv6: remove unused macros from net/ipv6.h ipv6: remove unused parameter from ip6_ra_control tcp: fix kernel panic with listening_get_next tcp: Remove redundant checks when setting eff_sacks tcp: options clean up tcp: Fix MD5 signatures for non-linear skbs sctp: Update sctp global memory limit allocations. sctp: remove unnecessary byteshifting, calculate directly in big-endian sctp: Allow only 1 listening socket with SO_REUSEADDR sctp: Do not leak memory on multiple listen() calls sctp: Support ipv6only AF_INET6 sockets. ...
This commit is contained in:
commit
db6d8c7a40
|
@ -308,9 +308,31 @@ Who: Matthew Wilcox <willy@linux.intel.com>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: SCTP_GET_PEER_ADDRS_NUM_OLD, SCTP_GET_PEER_ADDRS_OLD,
|
||||
SCTP_GET_LOCAL_ADDRS_NUM_OLD, SCTP_GET_LOCAL_ADDRS_OLD
|
||||
When: June 2009
|
||||
Why: A newer version of the options have been introduced in 2005 that
|
||||
removes the limitions of the old API. The sctp library has been
|
||||
converted to use these new options at the same time. Any user
|
||||
space app that directly uses the old options should convert to using
|
||||
the new options.
|
||||
Who: Vlad Yasevich <vladislav.yasevich@hp.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: CONFIG_THERMAL_HWMON
|
||||
When: January 2009
|
||||
Why: This option was introduced just to allow older lm-sensors userspace
|
||||
to keep working over the upgrade to 2.6.26. At the scheduled time of
|
||||
removal fixed lm-sensors (2.x or 3.x) should be readily available.
|
||||
Who: Rene Herman <rene.herman@gmail.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: Code that is now under CONFIG_WIRELESS_EXT_SYSFS
|
||||
(in net/core/net-sysfs.c)
|
||||
When: After the only user (hal) has seen a release with the patches
|
||||
for enough time, probably some time in 2010.
|
||||
Why: Over 1K .text/.data size reduction, data is available in other
|
||||
ways (ioctls)
|
||||
Who: Johannes Berg <johannes@sipsolutions.net>
|
||||
|
|
|
@ -289,35 +289,73 @@ downdelay
|
|||
fail_over_mac
|
||||
|
||||
Specifies whether active-backup mode should set all slaves to
|
||||
the same MAC address (the traditional behavior), or, when
|
||||
enabled, change the bond's MAC address when changing the
|
||||
active interface (i.e., fail over the MAC address itself).
|
||||
the same MAC address at enslavement (the traditional
|
||||
behavior), or, when enabled, perform special handling of the
|
||||
bond's MAC address in accordance with the selected policy.
|
||||
|
||||
Fail over MAC is useful for devices that cannot ever alter
|
||||
their MAC address, or for devices that refuse incoming
|
||||
broadcasts with their own source MAC (which interferes with
|
||||
the ARP monitor).
|
||||
Possible values are:
|
||||
|
||||
The down side of fail over MAC is that every device on the
|
||||
network must be updated via gratuitous ARP, vs. just updating
|
||||
a switch or set of switches (which often takes place for any
|
||||
traffic, not just ARP traffic, if the switch snoops incoming
|
||||
traffic to update its tables) for the traditional method. If
|
||||
the gratuitous ARP is lost, communication may be disrupted.
|
||||
none or 0
|
||||
|
||||
When fail over MAC is used in conjuction with the mii monitor,
|
||||
devices which assert link up prior to being able to actually
|
||||
transmit and receive are particularly susecptible to loss of
|
||||
the gratuitous ARP, and an appropriate updelay setting may be
|
||||
required.
|
||||
This setting disables fail_over_mac, and causes
|
||||
bonding to set all slaves of an active-backup bond to
|
||||
the same MAC address at enslavement time. This is the
|
||||
default.
|
||||
|
||||
A value of 0 disables fail over MAC, and is the default. A
|
||||
value of 1 enables fail over MAC. This option is enabled
|
||||
automatically if the first slave added cannot change its MAC
|
||||
address. This option may be modified via sysfs only when no
|
||||
slaves are present in the bond.
|
||||
active or 1
|
||||
|
||||
This option was added in bonding version 3.2.0.
|
||||
The "active" fail_over_mac policy indicates that the
|
||||
MAC address of the bond should always be the MAC
|
||||
address of the currently active slave. The MAC
|
||||
address of the slaves is not changed; instead, the MAC
|
||||
address of the bond changes during a failover.
|
||||
|
||||
This policy is useful for devices that cannot ever
|
||||
alter their MAC address, or for devices that refuse
|
||||
incoming broadcasts with their own source MAC (which
|
||||
interferes with the ARP monitor).
|
||||
|
||||
The down side of this policy is that every device on
|
||||
the network must be updated via gratuitous ARP,
|
||||
vs. just updating a switch or set of switches (which
|
||||
often takes place for any traffic, not just ARP
|
||||
traffic, if the switch snoops incoming traffic to
|
||||
update its tables) for the traditional method. If the
|
||||
gratuitous ARP is lost, communication may be
|
||||
disrupted.
|
||||
|
||||
When this policy is used in conjuction with the mii
|
||||
monitor, devices which assert link up prior to being
|
||||
able to actually transmit and receive are particularly
|
||||
susecptible to loss of the gratuitous ARP, and an
|
||||
appropriate updelay setting may be required.
|
||||
|
||||
follow or 2
|
||||
|
||||
The "follow" fail_over_mac policy causes the MAC
|
||||
address of the bond to be selected normally (normally
|
||||
the MAC address of the first slave added to the bond).
|
||||
However, the second and subsequent slaves are not set
|
||||
to this MAC address while they are in a backup role; a
|
||||
slave is programmed with the bond's MAC address at
|
||||
failover time (and the formerly active slave receives
|
||||
the newly active slave's MAC address).
|
||||
|
||||
This policy is useful for multiport devices that
|
||||
either become confused or incur a performance penalty
|
||||
when multiple ports are programmed with the same MAC
|
||||
address.
|
||||
|
||||
|
||||
The default policy is none, unless the first slave cannot
|
||||
change its MAC address, in which case the active policy is
|
||||
selected by default.
|
||||
|
||||
This option may be modified via sysfs only when no slaves are
|
||||
present in the bond.
|
||||
|
||||
This option was added in bonding version 3.2.0. The "follow"
|
||||
policy was added in bonding version 3.3.0.
|
||||
|
||||
lacp_rate
|
||||
|
||||
|
@ -338,7 +376,8 @@ max_bonds
|
|||
Specifies the number of bonding devices to create for this
|
||||
instance of the bonding driver. E.g., if max_bonds is 3, and
|
||||
the bonding driver is not already loaded, then bond0, bond1
|
||||
and bond2 will be created. The default value is 1.
|
||||
and bond2 will be created. The default value is 1. Specifying
|
||||
a value of 0 will load bonding, but will not create any devices.
|
||||
|
||||
miimon
|
||||
|
||||
|
@ -501,6 +540,17 @@ mode
|
|||
swapped with the new curr_active_slave that was
|
||||
chosen.
|
||||
|
||||
num_grat_arp
|
||||
|
||||
Specifies the number of gratuitous ARPs to be issued after a
|
||||
failover event. One gratuitous ARP is issued immediately after
|
||||
the failover, subsequent ARPs are sent at a rate of one per link
|
||||
monitor interval (arp_interval or miimon, whichever is active).
|
||||
|
||||
The valid range is 0 - 255; the default value is 1. This option
|
||||
affects only the active-backup mode. This option was added for
|
||||
bonding version 3.3.0.
|
||||
|
||||
primary
|
||||
|
||||
A string (eth0, eth2, etc) specifying which slave is the
|
||||
|
|
|
@ -0,0 +1,167 @@
|
|||
DM9000 Network driver
|
||||
=====================
|
||||
|
||||
Copyright 2008 Simtec Electronics,
|
||||
Ben Dooks <ben@simtec.co.uk> <ben-linux@fluff.org>
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
This file describes how to use the DM9000 platform-device based network driver
|
||||
that is contained in the files drivers/net/dm9000.c and drivers/net/dm9000.h.
|
||||
|
||||
The driver supports three DM9000 variants, the DM9000E which is the first chip
|
||||
supported as well as the newer DM9000A and DM9000B devices. It is currently
|
||||
maintained and tested by Ben Dooks, who should be CC: to any patches for this
|
||||
driver.
|
||||
|
||||
|
||||
Defining the platform device
|
||||
----------------------------
|
||||
|
||||
The minimum set of resources attached to the platform device are as follows:
|
||||
|
||||
1) The physical address of the address register
|
||||
2) The physical address of the data register
|
||||
3) The IRQ line the device's interrupt pin is connected to.
|
||||
|
||||
These resources should be specified in that order, as the ordering of the
|
||||
two address regions is important (the driver expects these to be address
|
||||
and then data).
|
||||
|
||||
An example from arch/arm/mach-s3c2410/mach-bast.c is:
|
||||
|
||||
static struct resource bast_dm9k_resource[] = {
|
||||
[0] = {
|
||||
.start = S3C2410_CS5 + BAST_PA_DM9000,
|
||||
.end = S3C2410_CS5 + BAST_PA_DM9000 + 3,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = S3C2410_CS5 + BAST_PA_DM9000 + 0x40,
|
||||
.end = S3C2410_CS5 + BAST_PA_DM9000 + 0x40 + 0x3f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_DM9000,
|
||||
.end = IRQ_DM9000,
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device bast_device_dm9k = {
|
||||
.name = "dm9000",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(bast_dm9k_resource),
|
||||
.resource = bast_dm9k_resource,
|
||||
};
|
||||
|
||||
Note the setting of the IRQ trigger flag in bast_dm9k_resource[2].flags,
|
||||
as this will generate a warning if it is not present. The trigger from
|
||||
the flags field will be passed to request_irq() when registering the IRQ
|
||||
handler to ensure that the IRQ is setup correctly.
|
||||
|
||||
This shows a typical platform device, without the optional configuration
|
||||
platform data supplied. The next example uses the same resources, but adds
|
||||
the optional platform data to pass extra configuration data:
|
||||
|
||||
static struct dm9000_plat_data bast_dm9k_platdata = {
|
||||
.flags = DM9000_PLATF_16BITONLY,
|
||||
};
|
||||
|
||||
static struct platform_device bast_device_dm9k = {
|
||||
.name = "dm9000",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(bast_dm9k_resource),
|
||||
.resource = bast_dm9k_resource,
|
||||
.dev = {
|
||||
.platform_data = &bast_dm9k_platdata,
|
||||
}
|
||||
};
|
||||
|
||||
The platform data is defined in include/linux/dm9000.h and described below.
|
||||
|
||||
|
||||
Platform data
|
||||
-------------
|
||||
|
||||
Extra platform data for the DM9000 can describe the IO bus width to the
|
||||
device, whether or not an external PHY is attached to the device and
|
||||
the availability of an external configuration EEPROM.
|
||||
|
||||
The flags for the platform data .flags field are as follows:
|
||||
|
||||
DM9000_PLATF_8BITONLY
|
||||
|
||||
The IO should be done with 8bit operations.
|
||||
|
||||
DM9000_PLATF_16BITONLY
|
||||
|
||||
The IO should be done with 16bit operations.
|
||||
|
||||
DM9000_PLATF_32BITONLY
|
||||
|
||||
The IO should be done with 32bit operations.
|
||||
|
||||
DM9000_PLATF_EXT_PHY
|
||||
|
||||
The chip is connected to an external PHY.
|
||||
|
||||
DM9000_PLATF_NO_EEPROM
|
||||
|
||||
This can be used to signify that the board does not have an
|
||||
EEPROM, or that the EEPROM should be hidden from the user.
|
||||
|
||||
DM9000_PLATF_SIMPLE_PHY
|
||||
|
||||
Switch to using the simpler PHY polling method which does not
|
||||
try and read the MII PHY state regularly. This is only available
|
||||
when using the internal PHY. See the section on link state polling
|
||||
for more information.
|
||||
|
||||
The config symbol DM9000_FORCE_SIMPLE_PHY_POLL, Kconfig entry
|
||||
"Force simple NSR based PHY polling" allows this flag to be
|
||||
forced on at build time.
|
||||
|
||||
|
||||
PHY Link state polling
|
||||
----------------------
|
||||
|
||||
The driver keeps track of the link state and informs the network core
|
||||
about link (carrier) availablilty. This is managed by several methods
|
||||
depending on the version of the chip and on which PHY is being used.
|
||||
|
||||
For the internal PHY, the original (and currently default) method is
|
||||
to read the MII state, either when the status changes if we have the
|
||||
necessary interrupt support in the chip or every two seconds via a
|
||||
periodic timer.
|
||||
|
||||
To reduce the overhead for the internal PHY, there is now the option
|
||||
of using the DM9000_FORCE_SIMPLE_PHY_POLL config, or DM9000_PLATF_SIMPLE_PHY
|
||||
platform data option to read the summary information without the
|
||||
expensive MII accesses. This method is faster, but does not print
|
||||
as much information.
|
||||
|
||||
When using an external PHY, the driver currently has to poll the MII
|
||||
link status as there is no method for getting an interrupt on link change.
|
||||
|
||||
|
||||
DM9000A / DM9000B
|
||||
-----------------
|
||||
|
||||
These chips are functionally similar to the DM9000E and are supported easily
|
||||
by the same driver. The features are:
|
||||
|
||||
1) Interrupt on internal PHY state change. This means that the periodic
|
||||
polling of the PHY status may be disabled on these devices when using
|
||||
the internal PHY.
|
||||
|
||||
2) TCP/UDP checksum offloading, which the driver does not currently support.
|
||||
|
||||
|
||||
ethtool
|
||||
-------
|
||||
|
||||
The driver supports the ethtool interface for access to the driver
|
||||
state information, the PHY state and the EEPROM.
|
|
@ -551,8 +551,9 @@ icmp_echo_ignore_broadcasts - BOOLEAN
|
|||
icmp_ratelimit - INTEGER
|
||||
Limit the maximal rates for sending ICMP packets whose type matches
|
||||
icmp_ratemask (see below) to specific targets.
|
||||
0 to disable any limiting, otherwise the maximal rate in jiffies(1)
|
||||
Default: 100
|
||||
0 to disable any limiting,
|
||||
otherwise the minimal space between responses in milliseconds.
|
||||
Default: 1000
|
||||
|
||||
icmp_ratemask - INTEGER
|
||||
Mask made of ICMP types for which rates are being limited.
|
||||
|
@ -1023,11 +1024,23 @@ max_addresses - INTEGER
|
|||
autoconfigured addresses.
|
||||
Default: 16
|
||||
|
||||
disable_ipv6 - BOOLEAN
|
||||
Disable IPv6 operation.
|
||||
Default: FALSE (enable IPv6 operation)
|
||||
|
||||
accept_dad - INTEGER
|
||||
Whether to accept DAD (Duplicate Address Detection).
|
||||
0: Disable DAD
|
||||
1: Enable DAD (default)
|
||||
2: Enable DAD, and disable IPv6 operation if MAC-based duplicate
|
||||
link-local address has been found.
|
||||
|
||||
icmp/*:
|
||||
ratelimit - INTEGER
|
||||
Limit the maximal rates for sending ICMPv6 packets.
|
||||
0 to disable any limiting, otherwise the maximal rate in jiffies(1)
|
||||
Default: 100
|
||||
0 to disable any limiting,
|
||||
otherwise the minimal space between responses in milliseconds.
|
||||
Default: 1000
|
||||
|
||||
|
||||
IPv6 Update by:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Linux* Base Driver for the Intel(R) PRO/10GbE Family of Adapters
|
||||
================================================================
|
||||
Linux Base Driver for 10 Gigabit Intel(R) Network Connection
|
||||
=============================================================
|
||||
|
||||
November 17, 2004
|
||||
October 9, 2007
|
||||
|
||||
|
||||
Contents
|
||||
|
@ -9,94 +9,151 @@ Contents
|
|||
|
||||
- In This Release
|
||||
- Identifying Your Adapter
|
||||
- Building and Installation
|
||||
- Command Line Parameters
|
||||
- Improving Performance
|
||||
- Additional Configurations
|
||||
- Known Issues/Troubleshooting
|
||||
- Support
|
||||
|
||||
|
||||
|
||||
In This Release
|
||||
===============
|
||||
|
||||
This file describes the Linux* Base Driver for the Intel(R) PRO/10GbE Family
|
||||
of Adapters, version 1.0.x.
|
||||
This file describes the ixgb Linux Base Driver for the 10 Gigabit Intel(R)
|
||||
Network Connection. This driver includes support for Itanium(R)2-based
|
||||
systems.
|
||||
|
||||
For questions related to hardware requirements, refer to the documentation
|
||||
supplied with your 10 Gigabit adapter. All hardware requirements listed apply
|
||||
to use with Linux.
|
||||
|
||||
The following features are available in this kernel:
|
||||
- Native VLANs
|
||||
- Channel Bonding (teaming)
|
||||
- SNMP
|
||||
|
||||
Channel Bonding documentation can be found in the Linux kernel source:
|
||||
/Documentation/networking/bonding.txt
|
||||
|
||||
The driver information previously displayed in the /proc filesystem is not
|
||||
supported in this release. Alternatively, you can use ethtool (version 1.6
|
||||
or later), lspci, and ifconfig to obtain the same information.
|
||||
|
||||
Instructions on updating ethtool can be found in the section "Additional
|
||||
Configurations" later in this document.
|
||||
|
||||
For questions related to hardware requirements, refer to the documentation
|
||||
supplied with your Intel PRO/10GbE adapter. All hardware requirements listed
|
||||
apply to use with Linux.
|
||||
|
||||
Identifying Your Adapter
|
||||
========================
|
||||
|
||||
To verify your Intel adapter is supported, find the board ID number on the
|
||||
adapter. Look for a label that has a barcode and a number in the format
|
||||
A12345-001.
|
||||
The following Intel network adapters are compatible with the drivers in this
|
||||
release:
|
||||
|
||||
Use the above information and the Adapter & Driver ID Guide at:
|
||||
Controller Adapter Name Physical Layer
|
||||
---------- ------------ --------------
|
||||
82597EX Intel(R) PRO/10GbE LR/SR/CX4 10G Base-LR (1310 nm optical fiber)
|
||||
Server Adapters 10G Base-SR (850 nm optical fiber)
|
||||
10G Base-CX4(twin-axial copper cabling)
|
||||
|
||||
http://support.intel.com/support/network/adapter/pro100/21397.htm
|
||||
For more information on how to identify your adapter, go to the Adapter &
|
||||
Driver ID Guide at:
|
||||
|
||||
For the latest Intel network drivers for Linux, go to:
|
||||
http://support.intel.com/support/network/sb/CS-012904.htm
|
||||
|
||||
|
||||
Building and Installation
|
||||
=========================
|
||||
|
||||
select m for "Intel(R) PRO/10GbE support" located at:
|
||||
Location:
|
||||
-> Device Drivers
|
||||
-> Network device support (NETDEVICES [=y])
|
||||
-> Ethernet (10000 Mbit) (NETDEV_10000 [=y])
|
||||
1. make modules && make modules_install
|
||||
|
||||
2. Load the module:
|
||||
|
||||
modprobe ixgb <parameter>=<value>
|
||||
|
||||
The insmod command can be used if the full
|
||||
path to the driver module is specified. For example:
|
||||
|
||||
insmod /lib/modules/<KERNEL VERSION>/kernel/drivers/net/ixgb/ixgb.ko
|
||||
|
||||
With 2.6 based kernels also make sure that older ixgb drivers are
|
||||
removed from the kernel, before loading the new module:
|
||||
|
||||
rmmod ixgb; modprobe ixgb
|
||||
|
||||
3. Assign an IP address to the interface by entering the following, where
|
||||
x is the interface number:
|
||||
|
||||
ifconfig ethx <IP_address>
|
||||
|
||||
4. Verify that the interface works. Enter the following, where <IP_address>
|
||||
is the IP address for another machine on the same subnet as the interface
|
||||
that is being tested:
|
||||
|
||||
ping <IP_address>
|
||||
|
||||
http://downloadfinder.intel.com/scripts-df/support_intel.asp
|
||||
|
||||
Command Line Parameters
|
||||
=======================
|
||||
|
||||
If the driver is built as a module, the following optional parameters are
|
||||
used by entering them on the command line with the modprobe or insmod command
|
||||
using this syntax:
|
||||
If the driver is built as a module, the following optional parameters are
|
||||
used by entering them on the command line with the modprobe command using
|
||||
this syntax:
|
||||
|
||||
modprobe ixgb [<option>=<VAL1>,<VAL2>,...]
|
||||
|
||||
insmod ixgb [<option>=<VAL1>,<VAL2>,...]
|
||||
For example, with two 10GbE PCI adapters, entering:
|
||||
|
||||
For example, with two PRO/10GbE PCI adapters, entering:
|
||||
modprobe ixgb TxDescriptors=80,128
|
||||
|
||||
insmod ixgb TxDescriptors=80,128
|
||||
|
||||
loads the ixgb driver with 80 TX resources for the first adapter and 128 TX
|
||||
loads the ixgb driver with 80 TX resources for the first adapter and 128 TX
|
||||
resources for the second adapter.
|
||||
|
||||
The default value for each parameter is generally the recommended setting,
|
||||
unless otherwise noted. Also, if the driver is statically built into the
|
||||
kernel, the driver is loaded with the default values for all the parameters.
|
||||
Ethtool can be used to change some of the parameters at runtime.
|
||||
unless otherwise noted.
|
||||
|
||||
FlowControl
|
||||
Valid Range: 0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx)
|
||||
Default: Read from the EEPROM
|
||||
If EEPROM is not detected, default is 3
|
||||
This parameter controls the automatic generation(Tx) and response(Rx) to
|
||||
Ethernet PAUSE frames.
|
||||
If EEPROM is not detected, default is 1
|
||||
This parameter controls the automatic generation(Tx) and response(Rx) to
|
||||
Ethernet PAUSE frames. There are hardware bugs associated with enabling
|
||||
Tx flow control so beware.
|
||||
|
||||
RxDescriptors
|
||||
Valid Range: 64-512
|
||||
Default Value: 512
|
||||
This value is the number of receive descriptors allocated by the driver.
|
||||
Increasing this value allows the driver to buffer more incoming packets.
|
||||
Each descriptor is 16 bytes. A receive buffer is also allocated for
|
||||
each descriptor and can be either 2048, 4056, 8192, or 16384 bytes,
|
||||
depending on the MTU setting. When the MTU size is 1500 or less, the
|
||||
This value is the number of receive descriptors allocated by the driver.
|
||||
Increasing this value allows the driver to buffer more incoming packets.
|
||||
Each descriptor is 16 bytes. A receive buffer is also allocated for
|
||||
each descriptor and can be either 2048, 4056, 8192, or 16384 bytes,
|
||||
depending on the MTU setting. When the MTU size is 1500 or less, the
|
||||
receive buffer size is 2048 bytes. When the MTU is greater than 1500 the
|
||||
receive buffer size will be either 4056, 8192, or 16384 bytes. The
|
||||
receive buffer size will be either 4056, 8192, or 16384 bytes. The
|
||||
maximum MTU size is 16114.
|
||||
|
||||
RxIntDelay
|
||||
Valid Range: 0-65535 (0=off)
|
||||
Default Value: 6
|
||||
This value delays the generation of receive interrupts in units of
|
||||
0.8192 microseconds. Receive interrupt reduction can improve CPU
|
||||
efficiency if properly tuned for specific network traffic. Increasing
|
||||
this value adds extra latency to frame reception and can end up
|
||||
decreasing the throughput of TCP traffic. If the system is reporting
|
||||
dropped receives, this value may be set too high, causing the driver to
|
||||
Default Value: 72
|
||||
This value delays the generation of receive interrupts in units of
|
||||
0.8192 microseconds. Receive interrupt reduction can improve CPU
|
||||
efficiency if properly tuned for specific network traffic. Increasing
|
||||
this value adds extra latency to frame reception and can end up
|
||||
decreasing the throughput of TCP traffic. If the system is reporting
|
||||
dropped receives, this value may be set too high, causing the driver to
|
||||
run out of available receive descriptors.
|
||||
|
||||
TxDescriptors
|
||||
Valid Range: 64-4096
|
||||
Default Value: 256
|
||||
This value is the number of transmit descriptors allocated by the driver.
|
||||
Increasing this value allows the driver to queue more transmits. Each
|
||||
Increasing this value allows the driver to queue more transmits. Each
|
||||
descriptor is 16 bytes.
|
||||
|
||||
XsumRX
|
||||
|
@ -105,51 +162,49 @@ Default Value: 1
|
|||
A value of '1' indicates that the driver should enable IP checksum
|
||||
offload for received packets (both UDP and TCP) to the adapter hardware.
|
||||
|
||||
XsumTX
|
||||
Valid Range: 0-1
|
||||
Default Value: 1
|
||||
A value of '1' indicates that the driver should enable IP checksum
|
||||
offload for transmitted packets (both UDP and TCP) to the adapter
|
||||
hardware.
|
||||
|
||||
Improving Performance
|
||||
=====================
|
||||
|
||||
With the Intel PRO/10 GbE adapter, the default Linux configuration will very
|
||||
likely limit the total available throughput artificially. There is a set of
|
||||
things that when applied together increase the ability of Linux to transmit
|
||||
and receive data. The following enhancements were originally acquired from
|
||||
settings published at http://www.spec.org/web99 for various submitted results
|
||||
using Linux.
|
||||
With the 10 Gigabit server adapters, the default Linux configuration will
|
||||
very likely limit the total available throughput artificially. There is a set
|
||||
of configuration changes that, when applied together, will increase the ability
|
||||
of Linux to transmit and receive data. The following enhancements were
|
||||
originally acquired from settings published at http://www.spec.org/web99/ for
|
||||
various submitted results using Linux.
|
||||
|
||||
NOTE: These changes are only suggestions, and serve as a starting point for
|
||||
tuning your network performance.
|
||||
NOTE: These changes are only suggestions, and serve as a starting point for
|
||||
tuning your network performance.
|
||||
|
||||
The changes are made in three major ways, listed in order of greatest effect:
|
||||
- Use ifconfig to modify the mtu (maximum transmission unit) and the txqueuelen
|
||||
- Use ifconfig to modify the mtu (maximum transmission unit) and the txqueuelen
|
||||
parameter.
|
||||
- Use sysctl to modify /proc parameters (essentially kernel tuning)
|
||||
- Use setpci to modify the MMRBC field in PCI-X configuration space to increase
|
||||
- Use setpci to modify the MMRBC field in PCI-X configuration space to increase
|
||||
transmit burst lengths on the bus.
|
||||
|
||||
NOTE: setpci modifies the adapter's configuration registers to allow it to read
|
||||
up to 4k bytes at a time (for transmits). However, for some systems the
|
||||
behavior after modifying this register may be undefined (possibly errors of some
|
||||
kind). A power-cycle, hard reset or explicitly setting the e6 register back to
|
||||
22 (setpci -d 8086:1048 e6.b=22) may be required to get back to a stable
|
||||
configuration.
|
||||
NOTE: setpci modifies the adapter's configuration registers to allow it to read
|
||||
up to 4k bytes at a time (for transmits). However, for some systems the
|
||||
behavior after modifying this register may be undefined (possibly errors of
|
||||
some kind). A power-cycle, hard reset or explicitly setting the e6 register
|
||||
back to 22 (setpci -d 8086:1a48 e6.b=22) may be required to get back to a
|
||||
stable configuration.
|
||||
|
||||
- COPY these lines and paste them into ixgb_perf.sh:
|
||||
#!/bin/bash
|
||||
echo "configuring network performance , edit this file to change the interface"
|
||||
echo "configuring network performance , edit this file to change the interface
|
||||
or device ID of 10GbE card"
|
||||
# set mmrbc to 4k reads, modify only Intel 10GbE device IDs
|
||||
setpci -d 8086:1048 e6.b=2e
|
||||
# set the MTU (max transmission unit) - it requires your switch and clients to change too!
|
||||
# replace 1a48 with appropriate 10GbE device's ID installed on the system,
|
||||
# if needed.
|
||||
setpci -d 8086:1a48 e6.b=2e
|
||||
# set the MTU (max transmission unit) - it requires your switch and clients
|
||||
# to change as well.
|
||||
# set the txqueuelen
|
||||
# your ixgb adapter should be loaded as eth1 for this to work, change if needed
|
||||
ifconfig eth1 mtu 9000 txqueuelen 1000 up
|
||||
# call the sysctl utility to modify /proc/sys entries
|
||||
sysctl -p ./sysctl_ixgb.conf
|
||||
# call the sysctl utility to modify /proc/sys entries
|
||||
sysctl -p ./sysctl_ixgb.conf
|
||||
- END ixgb_perf.sh
|
||||
|
||||
- COPY these lines and paste them into sysctl_ixgb.conf:
|
||||
|
@ -159,54 +214,220 @@ sysctl -p ./sysctl_ixgb.conf
|
|||
# several network benchmark tests, your mileage may vary
|
||||
|
||||
### IPV4 specific settings
|
||||
net.ipv4.tcp_timestamps = 0 # turns TCP timestamp support off, default 1, reduces CPU use
|
||||
net.ipv4.tcp_sack = 0 # turn SACK support off, default on
|
||||
# on systems with a VERY fast bus -> memory interface this is the big gainer
|
||||
net.ipv4.tcp_rmem = 10000000 10000000 10000000 # sets min/default/max TCP read buffer, default 4096 87380 174760
|
||||
net.ipv4.tcp_wmem = 10000000 10000000 10000000 # sets min/pressure/max TCP write buffer, default 4096 16384 131072
|
||||
net.ipv4.tcp_mem = 10000000 10000000 10000000 # sets min/pressure/max TCP buffer space, default 31744 32256 32768
|
||||
# turn TCP timestamp support off, default 1, reduces CPU use
|
||||
net.ipv4.tcp_timestamps = 0
|
||||
# turn SACK support off, default on
|
||||
# on systems with a VERY fast bus -> memory interface this is the big gainer
|
||||
net.ipv4.tcp_sack = 0
|
||||
# set min/default/max TCP read buffer, default 4096 87380 174760
|
||||
net.ipv4.tcp_rmem = 10000000 10000000 10000000
|
||||
# set min/pressure/max TCP write buffer, default 4096 16384 131072
|
||||
net.ipv4.tcp_wmem = 10000000 10000000 10000000
|
||||
# set min/pressure/max TCP buffer space, default 31744 32256 32768
|
||||
net.ipv4.tcp_mem = 10000000 10000000 10000000
|
||||
|
||||
### CORE settings (mostly for socket and UDP effect)
|
||||
net.core.rmem_max = 524287 # maximum receive socket buffer size, default 131071
|
||||
net.core.wmem_max = 524287 # maximum send socket buffer size, default 131071
|
||||
net.core.rmem_default = 524287 # default receive socket buffer size, default 65535
|
||||
net.core.wmem_default = 524287 # default send socket buffer size, default 65535
|
||||
net.core.optmem_max = 524287 # maximum amount of option memory buffers, default 10240
|
||||
net.core.netdev_max_backlog = 300000 # number of unprocessed input packets before kernel starts dropping them, default 300
|
||||
# set maximum receive socket buffer size, default 131071
|
||||
net.core.rmem_max = 524287
|
||||
# set maximum send socket buffer size, default 131071
|
||||
net.core.wmem_max = 524287
|
||||
# set default receive socket buffer size, default 65535
|
||||
net.core.rmem_default = 524287
|
||||
# set default send socket buffer size, default 65535
|
||||
net.core.wmem_default = 524287
|
||||
# set maximum amount of option memory buffers, default 10240
|
||||
net.core.optmem_max = 524287
|
||||
# set number of unprocessed input packets before kernel starts dropping them; default 300
|
||||
net.core.netdev_max_backlog = 300000
|
||||
- END sysctl_ixgb.conf
|
||||
|
||||
Edit the ixgb_perf.sh script if necessary to change eth1 to whatever interface
|
||||
your ixgb driver is using.
|
||||
Edit the ixgb_perf.sh script if necessary to change eth1 to whatever interface
|
||||
your ixgb driver is using and/or replace '1a48' with appropriate 10GbE device's
|
||||
ID installed on the system.
|
||||
|
||||
NOTE: Unless these scripts are added to the boot process, these changes will
|
||||
only last only until the next system reboot.
|
||||
NOTE: Unless these scripts are added to the boot process, these changes will
|
||||
only last only until the next system reboot.
|
||||
|
||||
|
||||
Resolving Slow UDP Traffic
|
||||
--------------------------
|
||||
If your server does not seem to be able to receive UDP traffic as fast as it
|
||||
can receive TCP traffic, it could be because Linux, by default, does not set
|
||||
the network stack buffers as large as they need to be to support high UDP
|
||||
transfer rates. One way to alleviate this problem is to allow more memory to
|
||||
be used by the IP stack to store incoming data.
|
||||
|
||||
If your server does not seem to be able to receive UDP traffic as fast as it
|
||||
can receive TCP traffic, it could be because Linux, by default, does not set
|
||||
the network stack buffers as large as they need to be to support high UDP
|
||||
transfer rates. One way to alleviate this problem is to allow more memory to
|
||||
be used by the IP stack to store incoming data.
|
||||
|
||||
For instance, use the commands:
|
||||
For instance, use the commands:
|
||||
sysctl -w net.core.rmem_max=262143
|
||||
and
|
||||
sysctl -w net.core.rmem_default=262143
|
||||
to increase the read buffer memory max and default to 262143 (256k - 1) from
|
||||
defaults of max=131071 (128k - 1) and default=65535 (64k - 1). These variables
|
||||
will increase the amount of memory used by the network stack for receives, and
|
||||
to increase the read buffer memory max and default to 262143 (256k - 1) from
|
||||
defaults of max=131071 (128k - 1) and default=65535 (64k - 1). These variables
|
||||
will increase the amount of memory used by the network stack for receives, and
|
||||
can be increased significantly more if necessary for your application.
|
||||
|
||||
|
||||
Additional Configurations
|
||||
=========================
|
||||
|
||||
Configuring the Driver on Different Distributions
|
||||
-------------------------------------------------
|
||||
Configuring a network driver to load properly when the system is started is
|
||||
distribution dependent. Typically, the configuration process involves adding
|
||||
an alias line to /etc/modprobe.conf as well as editing other system startup
|
||||
scripts and/or configuration files. Many popular Linux distributions ship
|
||||
with tools to make these changes for you. To learn the proper way to
|
||||
configure a network device for your system, refer to your distribution
|
||||
documentation. If during this process you are asked for the driver or module
|
||||
name, the name for the Linux Base Driver for the Intel 10GbE Family of
|
||||
Adapters is ixgb.
|
||||
|
||||
Viewing Link Messages
|
||||
---------------------
|
||||
Link messages will not be displayed to the console if the distribution is
|
||||
restricting system messages. In order to see network driver link messages on
|
||||
your console, set dmesg to eight by entering the following:
|
||||
|
||||
dmesg -n 8
|
||||
|
||||
NOTE: This setting is not saved across reboots.
|
||||
|
||||
|
||||
Jumbo Frames
|
||||
------------
|
||||
The driver supports Jumbo Frames for all adapters. Jumbo Frames support is
|
||||
enabled by changing the MTU to a value larger than the default of 1500.
|
||||
The maximum value for the MTU is 16114. Use the ifconfig command to
|
||||
increase the MTU size. For example:
|
||||
|
||||
ifconfig ethx mtu 9000 up
|
||||
|
||||
The maximum MTU setting for Jumbo Frames is 16114. This value coincides
|
||||
with the maximum Jumbo Frames size of 16128.
|
||||
|
||||
|
||||
Ethtool
|
||||
-------
|
||||
The driver utilizes the ethtool interface for driver configuration and
|
||||
diagnostics, as well as displaying statistical information. Ethtool
|
||||
version 1.6 or later is required for this functionality.
|
||||
|
||||
The latest release of ethtool can be found from
|
||||
http://sourceforge.net/projects/gkernel
|
||||
|
||||
NOTE: Ethtool 1.6 only supports a limited set of ethtool options. Support
|
||||
for a more complete ethtool feature set can be enabled by upgrading
|
||||
to the latest version.
|
||||
|
||||
|
||||
NAPI
|
||||
----
|
||||
|
||||
NAPI (Rx polling mode) is supported in the ixgb driver. NAPI is enabled
|
||||
or disabled based on the configuration of the kernel. see CONFIG_IXGB_NAPI
|
||||
|
||||
See www.cyberus.ca/~hadi/usenix-paper.tgz for more information on NAPI.
|
||||
|
||||
|
||||
Known Issues/Troubleshooting
|
||||
============================
|
||||
|
||||
NOTE: After installing the driver, if your Intel Network Connection is not
|
||||
working, verify in the "In This Release" section of the readme that you have
|
||||
installed the correct driver.
|
||||
|
||||
Intel(R) PRO/10GbE CX4 Server Adapter Cable Interoperability Issue with
|
||||
Fujitsu XENPAK Module in SmartBits Chassis
|
||||
---------------------------------------------------------------------
|
||||
Excessive CRC errors may be observed if the Intel(R) PRO/10GbE CX4
|
||||
Server adapter is connected to a Fujitsu XENPAK CX4 module in a SmartBits
|
||||
chassis using 15 m/24AWG cable assemblies manufactured by Fujitsu or Leoni.
|
||||
The CRC errors may be received either by the Intel(R) PRO/10GbE CX4
|
||||
Server adapter or the SmartBits. If this situation occurs using a different
|
||||
cable assembly may resolve the issue.
|
||||
|
||||
CX4 Server Adapter Cable Interoperability Issues with HP Procurve 3400cl
|
||||
Switch Port
|
||||
------------------------------------------------------------------------
|
||||
Excessive CRC errors may be observed if the Intel(R) PRO/10GbE CX4 Server
|
||||
adapter is connected to an HP Procurve 3400cl switch port using short cables
|
||||
(1 m or shorter). If this situation occurs, using a longer cable may resolve
|
||||
the issue.
|
||||
|
||||
Excessive CRC errors may be observed using Fujitsu 24AWG cable assemblies that
|
||||
Are 10 m or longer or where using a Leoni 15 m/24AWG cable assembly. The CRC
|
||||
errors may be received either by the CX4 Server adapter or at the switch. If
|
||||
this situation occurs, using a different cable assembly may resolve the issue.
|
||||
|
||||
|
||||
Jumbo Frames System Requirement
|
||||
-------------------------------
|
||||
Memory allocation failures have been observed on Linux systems with 64 MB
|
||||
of RAM or less that are running Jumbo Frames. If you are using Jumbo
|
||||
Frames, your system may require more than the advertised minimum
|
||||
requirement of 64 MB of system memory.
|
||||
|
||||
|
||||
Performance Degradation with Jumbo Frames
|
||||
-----------------------------------------
|
||||
Degradation in throughput performance may be observed in some Jumbo frames
|
||||
environments. If this is observed, increasing the application's socket buffer
|
||||
size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values may help.
|
||||
See the specific application manual and /usr/src/linux*/Documentation/
|
||||
networking/ip-sysctl.txt for more details.
|
||||
|
||||
|
||||
Allocating Rx Buffers when Using Jumbo Frames
|
||||
---------------------------------------------
|
||||
Allocating Rx buffers when using Jumbo Frames on 2.6.x kernels may fail if
|
||||
the available memory is heavily fragmented. This issue may be seen with PCI-X
|
||||
adapters or with packet split disabled. This can be reduced or eliminated
|
||||
by changing the amount of available memory for receive buffer allocation, by
|
||||
increasing /proc/sys/vm/min_free_kbytes.
|
||||
|
||||
|
||||
Multiple Interfaces on Same Ethernet Broadcast Network
|
||||
------------------------------------------------------
|
||||
Due to the default ARP behavior on Linux, it is not possible to have
|
||||
one system on two IP networks in the same Ethernet broadcast domain
|
||||
(non-partitioned switch) behave as expected. All Ethernet interfaces
|
||||
will respond to IP traffic for any IP address assigned to the system.
|
||||
This results in unbalanced receive traffic.
|
||||
|
||||
If you have multiple interfaces in a server, do either of the following:
|
||||
|
||||
- Turn on ARP filtering by entering:
|
||||
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
|
||||
|
||||
- Install the interfaces in separate broadcast domains - either in
|
||||
different switches or in a switch partitioned to VLANs.
|
||||
|
||||
|
||||
UDP Stress Test Dropped Packet Issue
|
||||
--------------------------------------
|
||||
Under small packets UDP stress test with 10GbE driver, the Linux system
|
||||
may drop UDP packets due to the fullness of socket buffers. You may want
|
||||
to change the driver's Flow Control variables to the minimum value for
|
||||
controlling packet reception.
|
||||
|
||||
|
||||
Tx Hangs Possible Under Stress
|
||||
------------------------------
|
||||
Under stress conditions, if TX hangs occur, turning off TSO
|
||||
"ethtool -K eth0 tso off" may resolve the problem.
|
||||
|
||||
|
||||
Support
|
||||
=======
|
||||
|
||||
For general information and support, go to the Intel support website at:
|
||||
For general information, go to the Intel support website at:
|
||||
|
||||
http://support.intel.com
|
||||
|
||||
or the Intel Wired Networking project hosted by Sourceforge at:
|
||||
|
||||
http://sourceforge.net/projects/e1000
|
||||
|
||||
If an issue is identified with the released source code on the supported
|
||||
kernel with a supported adapter, email the specific information related to
|
||||
the issue to linux.nics@intel.com.
|
||||
kernel with a supported adapter, email the specific information related
|
||||
to the issue to e1000-devel@lists.sf.net
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
mac80211_hwsim - software simulator of 802.11 radio(s) for mac80211
|
||||
Copyright (c) 2008, Jouni Malinen <j@w1.fi>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2 as
|
||||
published by the Free Software Foundation.
|
||||
|
||||
|
||||
Introduction
|
||||
|
||||
mac80211_hwsim is a Linux kernel module that can be used to simulate
|
||||
arbitrary number of IEEE 802.11 radios for mac80211. It can be used to
|
||||
test most of the mac80211 functionality and user space tools (e.g.,
|
||||
hostapd and wpa_supplicant) in a way that matches very closely with
|
||||
the normal case of using real WLAN hardware. From the mac80211 view
|
||||
point, mac80211_hwsim is yet another hardware driver, i.e., no changes
|
||||
to mac80211 are needed to use this testing tool.
|
||||
|
||||
The main goal for mac80211_hwsim is to make it easier for developers
|
||||
to test their code and work with new features to mac80211, hostapd,
|
||||
and wpa_supplicant. The simulated radios do not have the limitations
|
||||
of real hardware, so it is easy to generate an arbitrary test setup
|
||||
and always reproduce the same setup for future tests. In addition,
|
||||
since all radio operation is simulated, any channel can be used in
|
||||
tests regardless of regulatory rules.
|
||||
|
||||
mac80211_hwsim kernel module has a parameter 'radios' that can be used
|
||||
to select how many radios are simulated (default 2). This allows
|
||||
configuration of both very simply setups (e.g., just a single access
|
||||
point and a station) or large scale tests (multiple access points with
|
||||
hundreds of stations).
|
||||
|
||||
mac80211_hwsim works by tracking the current channel of each virtual
|
||||
radio and copying all transmitted frames to all other radios that are
|
||||
currently enabled and on the same channel as the transmitting
|
||||
radio. Software encryption in mac80211 is used so that the frames are
|
||||
actually encrypted over the virtual air interface to allow more
|
||||
complete testing of encryption.
|
||||
|
||||
A global monitoring netdev, hwsim#, is created independent of
|
||||
mac80211. This interface can be used to monitor all transmitted frames
|
||||
regardless of channel.
|
||||
|
||||
|
||||
Simple example
|
||||
|
||||
This example shows how to use mac80211_hwsim to simulate two radios:
|
||||
one to act as an access point and the other as a station that
|
||||
associates with the AP. hostapd and wpa_supplicant are used to take
|
||||
care of WPA2-PSK authentication. In addition, hostapd is also
|
||||
processing access point side of association.
|
||||
|
||||
Please note that the current Linux kernel does not enable AP mode, so a
|
||||
simple patch is needed to enable AP mode selection:
|
||||
http://johannes.sipsolutions.net/patches/kernel/all/LATEST/006-allow-ap-vlan-modes.patch
|
||||
|
||||
|
||||
# Build mac80211_hwsim as part of kernel configuration
|
||||
|
||||
# Load the module
|
||||
modprobe mac80211_hwsim
|
||||
|
||||
# Run hostapd (AP) for wlan0
|
||||
hostapd hostapd.conf
|
||||
|
||||
# Run wpa_supplicant (station) for wlan1
|
||||
wpa_supplicant -Dwext -iwlan1 -c wpa_supplicant.conf
|
|
@ -0,0 +1,11 @@
|
|||
interface=wlan0
|
||||
driver=nl80211
|
||||
|
||||
hw_mode=g
|
||||
channel=1
|
||||
ssid=mac80211 test
|
||||
|
||||
wpa=2
|
||||
wpa_key_mgmt=WPA-PSK
|
||||
wpa_pairwise=CCMP
|
||||
wpa_passphrase=12345678
|
|
@ -0,0 +1,10 @@
|
|||
ctrl_interface=/var/run/wpa_supplicant
|
||||
|
||||
network={
|
||||
ssid="mac80211 test"
|
||||
psk="12345678"
|
||||
key_mgmt=WPA-PSK
|
||||
proto=WPA2
|
||||
pairwise=CCMP
|
||||
group=CCMP
|
||||
}
|
|
@ -3,19 +3,11 @@
|
|||
===========================================
|
||||
|
||||
Section 1: Base driver requirements for implementing multiqueue support
|
||||
Section 2: Qdisc support for multiqueue devices
|
||||
Section 3: Brief howto using PRIO or RR for multiqueue devices
|
||||
|
||||
|
||||
Intro: Kernel support for multiqueue devices
|
||||
---------------------------------------------------------
|
||||
|
||||
Kernel support for multiqueue devices is only an API that is presented to the
|
||||
netdevice layer for base drivers to implement. This feature is part of the
|
||||
core networking stack, and all network devices will be running on the
|
||||
multiqueue-aware stack. If a base driver only has one queue, then these
|
||||
changes are transparent to that driver.
|
||||
|
||||
Kernel support for multiqueue devices is always present.
|
||||
|
||||
Section 1: Base driver requirements for implementing multiqueue support
|
||||
-----------------------------------------------------------------------
|
||||
|
@ -32,84 +24,4 @@ netif_{start|stop|wake}_subqueue() functions to manage each queue while the
|
|||
device is still operational. netdev->queue_lock is still used when the device
|
||||
comes online or when it's completely shut down (unregister_netdev(), etc.).
|
||||
|
||||
Finally, the base driver should indicate that it is a multiqueue device. The
|
||||
feature flag NETIF_F_MULTI_QUEUE should be added to the netdev->features
|
||||
bitmap on device initialization. Below is an example from e1000:
|
||||
|
||||
#ifdef CONFIG_E1000_MQ
|
||||
if ( (adapter->hw.mac.type == e1000_82571) ||
|
||||
(adapter->hw.mac.type == e1000_82572) ||
|
||||
(adapter->hw.mac.type == e1000_80003es2lan))
|
||||
netdev->features |= NETIF_F_MULTI_QUEUE;
|
||||
#endif
|
||||
|
||||
|
||||
Section 2: Qdisc support for multiqueue devices
|
||||
-----------------------------------------------
|
||||
|
||||
Currently two qdiscs support multiqueue devices. A new round-robin qdisc,
|
||||
sch_rr, and sch_prio. The qdisc is responsible for classifying the skb's to
|
||||
bands and queues, and will store the queue mapping into skb->queue_mapping.
|
||||
Use this field in the base driver to determine which queue to send the skb
|
||||
to.
|
||||
|
||||
sch_rr has been added for hardware that doesn't want scheduling policies from
|
||||
software, so it's a straight round-robin qdisc. It uses the same syntax and
|
||||
classification priomap that sch_prio uses, so it should be intuitive to
|
||||
configure for people who've used sch_prio.
|
||||
|
||||
In order to utilitize the multiqueue features of the qdiscs, the network
|
||||
device layer needs to enable multiple queue support. This can be done by
|
||||
selecting NETDEVICES_MULTIQUEUE under Drivers.
|
||||
|
||||
The PRIO qdisc naturally plugs into a multiqueue device. If
|
||||
NETDEVICES_MULTIQUEUE is selected, then on qdisc load, the number of
|
||||
bands requested is compared to the number of queues on the hardware. If they
|
||||
are equal, it sets a one-to-one mapping up between the queues and bands. If
|
||||
they're not equal, it will not load the qdisc. This is the same behavior
|
||||
for RR. Once the association is made, any skb that is classified will have
|
||||
skb->queue_mapping set, which will allow the driver to properly queue skb's
|
||||
to multiple queues.
|
||||
|
||||
|
||||
Section 3: Brief howto using PRIO and RR for multiqueue devices
|
||||
---------------------------------------------------------------
|
||||
|
||||
The userspace command 'tc,' part of the iproute2 package, is used to configure
|
||||
qdiscs. To add the PRIO qdisc to your network device, assuming the device is
|
||||
called eth0, run the following command:
|
||||
|
||||
# tc qdisc add dev eth0 root handle 1: prio bands 4 multiqueue
|
||||
|
||||
This will create 4 bands, 0 being highest priority, and associate those bands
|
||||
to the queues on your NIC. Assuming eth0 has 4 Tx queues, the band mapping
|
||||
would look like:
|
||||
|
||||
band 0 => queue 0
|
||||
band 1 => queue 1
|
||||
band 2 => queue 2
|
||||
band 3 => queue 3
|
||||
|
||||
Traffic will begin flowing through each queue if your TOS values are assigning
|
||||
traffic across the various bands. For example, ssh traffic will always try to
|
||||
go out band 0 based on TOS -> Linux priority conversion (realtime traffic),
|
||||
so it will be sent out queue 0. ICMP traffic (pings) fall into the "normal"
|
||||
traffic classification, which is band 1. Therefore pings will be send out
|
||||
queue 1 on the NIC.
|
||||
|
||||
Note the use of the multiqueue keyword. This is only in versions of iproute2
|
||||
that support multiqueue networking devices; if this is omitted when loading
|
||||
a qdisc onto a multiqueue device, the qdisc will load and operate the same
|
||||
if it were loaded onto a single-queue device (i.e. - sends all traffic to
|
||||
queue 0).
|
||||
|
||||
Another alternative to multiqueue band allocation can be done by using the
|
||||
multiqueue option and specify 0 bands. If this is the case, the qdisc will
|
||||
allocate the number of bands to equal the number of queues that the device
|
||||
reports, and bring the qdisc online.
|
||||
|
||||
The behavior of tc filters remains the same, where it will override TOS priority
|
||||
classification.
|
||||
|
||||
|
||||
Author: Peter P. Waskiewicz Jr. <peter.p.waskiewicz.jr@intel.com>
|
||||
|
|
|
@ -52,13 +52,10 @@ d. MSI/MSI-X. Can be enabled on platforms which support this feature
|
|||
(IA64, Xeon) resulting in noticeable performance improvement(upto 7%
|
||||
on certain platforms).
|
||||
|
||||
e. NAPI. Compile-time option(CONFIG_S2IO_NAPI) for better Rx interrupt
|
||||
moderation.
|
||||
|
||||
f. Statistics. Comprehensive MAC-level and software statistics displayed
|
||||
e. Statistics. Comprehensive MAC-level and software statistics displayed
|
||||
using "ethtool -S" option.
|
||||
|
||||
g. Multi-FIFO/Ring. Supports up to 8 transmit queues and receive rings,
|
||||
f. Multi-FIFO/Ring. Supports up to 8 transmit queues and receive rings,
|
||||
with multiple steering options.
|
||||
|
||||
4. Command line parameters
|
||||
|
|
|
@ -41,12 +41,24 @@ Table of Contents
|
|||
VI - System-on-a-chip devices and nodes
|
||||
1) Defining child nodes of an SOC
|
||||
2) Representing devices without a current OF specification
|
||||
a) PHY nodes
|
||||
b) Interrupt controllers
|
||||
c) CFI or JEDEC memory-mapped NOR flash
|
||||
d) 4xx/Axon EMAC ethernet nodes
|
||||
e) Xilinx IP cores
|
||||
f) USB EHCI controllers
|
||||
a) MDIO IO device
|
||||
b) Gianfar-compatible ethernet nodes
|
||||
c) PHY nodes
|
||||
d) Interrupt controllers
|
||||
e) I2C
|
||||
f) Freescale SOC USB controllers
|
||||
g) Freescale SOC SEC Security Engines
|
||||
h) Board Control and Status (BCSR)
|
||||
i) Freescale QUICC Engine module (QE)
|
||||
j) CFI or JEDEC memory-mapped NOR flash
|
||||
k) Global Utilities Block
|
||||
l) Freescale Communications Processor Module
|
||||
m) Chipselect/Local Bus
|
||||
n) 4xx/Axon EMAC ethernet nodes
|
||||
o) Xilinx IP cores
|
||||
p) Freescale Synchronous Serial Interface
|
||||
q) USB EHCI controllers
|
||||
r) MDIO on GPIOs
|
||||
|
||||
VII - Marvell Discovery mv64[345]6x System Controller chips
|
||||
1) The /system-controller node
|
||||
|
@ -1815,6 +1827,60 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
big-endian;
|
||||
};
|
||||
|
||||
r) Freescale Display Interface Unit
|
||||
|
||||
The Freescale DIU is a LCD controller, with proper hardware, it can also
|
||||
drive DVI monitors.
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "fsl-diu".
|
||||
- reg : should contain at least address and length of the DIU register
|
||||
set.
|
||||
- Interrupts : one DIU interrupt should be describe here.
|
||||
|
||||
Example (MPC8610HPCD)
|
||||
display@2c000 {
|
||||
compatible = "fsl,diu";
|
||||
reg = <0x2c000 100>;
|
||||
interrupts = <72 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
};
|
||||
|
||||
s) Freescale on board FPGA
|
||||
|
||||
This is the memory-mapped registers for on board FPGA.
|
||||
|
||||
Required properities:
|
||||
- compatible : should be "fsl,fpga-pixis".
|
||||
- reg : should contain the address and the lenght of the FPPGA register
|
||||
set.
|
||||
|
||||
Example (MPC8610HPCD)
|
||||
board-control@e8000000 {
|
||||
compatible = "fsl,fpga-pixis";
|
||||
reg = <0xe8000000 32>;
|
||||
};
|
||||
|
||||
r) MDIO on GPIOs
|
||||
|
||||
Currently defined compatibles:
|
||||
- virtual,gpio-mdio
|
||||
|
||||
MDC and MDIO lines connected to GPIO controllers are listed in the
|
||||
gpios property as described in section VIII.1 in the following order:
|
||||
|
||||
MDC, MDIO.
|
||||
|
||||
Example:
|
||||
|
||||
mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
gpios = <&qe_pio_a 11
|
||||
&qe_pio_c 6>;
|
||||
};
|
||||
|
||||
VII - Marvell Discovery mv64[345]6x System Controller chips
|
||||
===========================================================
|
||||
|
||||
|
|
|
@ -1,89 +1,528 @@
|
|||
rfkill - RF switch subsystem support
|
||||
====================================
|
||||
|
||||
1 Implementation details
|
||||
2 Driver support
|
||||
3 Userspace support
|
||||
1 Introduction
|
||||
2 Implementation details
|
||||
3 Kernel driver guidelines
|
||||
3.1 wireless device drivers
|
||||
3.2 platform/switch drivers
|
||||
3.3 input device drivers
|
||||
4 Kernel API
|
||||
5 Userspace support
|
||||
|
||||
|
||||
1. Introduction:
|
||||
|
||||
The rfkill switch subsystem exists to add a generic interface to circuitry that
|
||||
can enable or disable the signal output of a wireless *transmitter* of any
|
||||
type. By far, the most common use is to disable radio-frequency transmitters.
|
||||
|
||||
Note that disabling the signal output means that the the transmitter is to be
|
||||
made to not emit any energy when "blocked". rfkill is not about blocking data
|
||||
transmissions, it is about blocking energy emission.
|
||||
|
||||
The rfkill subsystem offers support for keys and switches often found on
|
||||
laptops to enable wireless devices like WiFi and Bluetooth, so that these keys
|
||||
and switches actually perform an action in all wireless devices of a given type
|
||||
attached to the system.
|
||||
|
||||
The buttons to enable and disable the wireless transmitters are important in
|
||||
situations where the user is for example using his laptop on a location where
|
||||
radio-frequency transmitters _must_ be disabled (e.g. airplanes).
|
||||
|
||||
Because of this requirement, userspace support for the keys should not be made
|
||||
mandatory. Because userspace might want to perform some additional smarter
|
||||
tasks when the key is pressed, rfkill provides userspace the possibility to
|
||||
take over the task to handle the key events.
|
||||
|
||||
===============================================================================
|
||||
1: Implementation details
|
||||
2: Implementation details
|
||||
|
||||
The rfkill switch subsystem offers support for keys often found on laptops
|
||||
to enable wireless devices like WiFi and Bluetooth.
|
||||
The rfkill subsystem is composed of various components: the rfkill class, the
|
||||
rfkill-input module (an input layer handler), and some specific input layer
|
||||
events.
|
||||
|
||||
This is done by providing the user 3 possibilities:
|
||||
1 - The rfkill system handles all events; userspace is not aware of events.
|
||||
2 - The rfkill system handles all events; userspace is informed about the events.
|
||||
3 - The rfkill system does not handle events; userspace handles all events.
|
||||
The rfkill class provides kernel drivers with an interface that allows them to
|
||||
know when they should enable or disable a wireless network device transmitter.
|
||||
This is enabled by the CONFIG_RFKILL Kconfig option.
|
||||
|
||||
The buttons to enable and disable the wireless radios are important in
|
||||
situations where the user is for example using his laptop on a location where
|
||||
wireless radios _must_ be disabled (e.g. airplanes).
|
||||
Because of this requirement, userspace support for the keys should not be
|
||||
made mandatory. Because userspace might want to perform some additional smarter
|
||||
tasks when the key is pressed, rfkill still provides userspace the possibility
|
||||
to take over the task to handle the key events.
|
||||
The rfkill class support makes sure userspace will be notified of all state
|
||||
changes on rfkill devices through uevents. It provides a notification chain
|
||||
for interested parties in the kernel to also get notified of rfkill state
|
||||
changes in other drivers. It creates several sysfs entries which can be used
|
||||
by userspace. See section "Userspace support".
|
||||
|
||||
The system inside the kernel has been split into 2 separate sections:
|
||||
1 - RFKILL
|
||||
2 - RFKILL_INPUT
|
||||
The rfkill-input module provides the kernel with the ability to implement a
|
||||
basic response when the user presses a key or button (or toggles a switch)
|
||||
related to rfkill functionality. It is an in-kernel implementation of default
|
||||
policy of reacting to rfkill-related input events and neither mandatory nor
|
||||
required for wireless drivers to operate. It is enabled by the
|
||||
CONFIG_RFKILL_INPUT Kconfig option.
|
||||
|
||||
The first option enables rfkill support and will make sure userspace will
|
||||
be notified of any events through the input device. It also creates several
|
||||
sysfs entries which can be used by userspace. See section "Userspace support".
|
||||
rfkill-input is a rfkill-related events input layer handler. This handler will
|
||||
listen to all rfkill key events and will change the rfkill state of the
|
||||
wireless devices accordingly. With this option enabled userspace could either
|
||||
do nothing or simply perform monitoring tasks.
|
||||
|
||||
The second option provides an rfkill input handler. This handler will
|
||||
listen to all rfkill key events and will toggle the radio accordingly.
|
||||
With this option enabled userspace could either do nothing or simply
|
||||
perform monitoring tasks.
|
||||
The rfkill-input module also provides EPO (emergency power-off) functionality
|
||||
for all wireless transmitters. This function cannot be overridden, and it is
|
||||
always active. rfkill EPO is related to *_RFKILL_ALL input layer events.
|
||||
|
||||
|
||||
Important terms for the rfkill subsystem:
|
||||
|
||||
In order to avoid confusion, we avoid the term "switch" in rfkill when it is
|
||||
referring to an electronic control circuit that enables or disables a
|
||||
transmitter. We reserve it for the physical device a human manipulates
|
||||
(which is an input device, by the way):
|
||||
|
||||
rfkill switch:
|
||||
|
||||
A physical device a human manipulates. Its state can be perceived by
|
||||
the kernel either directly (through a GPIO pin, ACPI GPE) or by its
|
||||
effect on a rfkill line of a wireless device.
|
||||
|
||||
rfkill controller:
|
||||
|
||||
A hardware circuit that controls the state of a rfkill line, which a
|
||||
kernel driver can interact with *to modify* that state (i.e. it has
|
||||
either write-only or read/write access).
|
||||
|
||||
rfkill line:
|
||||
|
||||
An input channel (hardware or software) of a wireless device, which
|
||||
causes a wireless transmitter to stop emitting energy (BLOCK) when it
|
||||
is active. Point of view is extremely important here: rfkill lines are
|
||||
always seen from the PoV of a wireless device (and its driver).
|
||||
|
||||
soft rfkill line/software rfkill line:
|
||||
|
||||
A rfkill line the wireless device driver can directly change the state
|
||||
of. Related to rfkill_state RFKILL_STATE_SOFT_BLOCKED.
|
||||
|
||||
hard rfkill line/hardware rfkill line:
|
||||
|
||||
A rfkill line that works fully in hardware or firmware, and that cannot
|
||||
be overridden by the kernel driver. The hardware device or the
|
||||
firmware just exports its status to the driver, but it is read-only.
|
||||
Related to rfkill_state RFKILL_STATE_HARD_BLOCKED.
|
||||
|
||||
The enum rfkill_state describes the rfkill state of a transmitter:
|
||||
|
||||
When a rfkill line or rfkill controller is in the RFKILL_STATE_UNBLOCKED state,
|
||||
the wireless transmitter (radio TX circuit for example) is *enabled*. When the
|
||||
it is in the RFKILL_STATE_SOFT_BLOCKED or RFKILL_STATE_HARD_BLOCKED, the
|
||||
wireless transmitter is to be *blocked* from operating.
|
||||
|
||||
RFKILL_STATE_SOFT_BLOCKED indicates that a call to toggle_radio() can change
|
||||
that state. RFKILL_STATE_HARD_BLOCKED indicates that a call to toggle_radio()
|
||||
will not be able to change the state and will return with a suitable error if
|
||||
attempts are made to set the state to RFKILL_STATE_UNBLOCKED.
|
||||
|
||||
RFKILL_STATE_HARD_BLOCKED is used by drivers to signal that the device is
|
||||
locked in the BLOCKED state by a hardwire rfkill line (typically an input pin
|
||||
that, when active, forces the transmitter to be disabled) which the driver
|
||||
CANNOT override.
|
||||
|
||||
Full rfkill functionality requires two different subsystems to cooperate: the
|
||||
input layer and the rfkill class. The input layer issues *commands* to the
|
||||
entire system requesting that devices registered to the rfkill class change
|
||||
state. The way this interaction happens is not complex, but it is not obvious
|
||||
either:
|
||||
|
||||
Kernel Input layer:
|
||||
|
||||
* Generates KEY_WWAN, KEY_WLAN, KEY_BLUETOOTH, SW_RFKILL_ALL, and
|
||||
other such events when the user presses certain keys, buttons, or
|
||||
toggles certain physical switches.
|
||||
|
||||
THE INPUT LAYER IS NEVER USED TO PROPAGATE STATUS, NOTIFICATIONS OR THE
|
||||
KIND OF STUFF AN ON-SCREEN-DISPLAY APPLICATION WOULD REPORT. It is
|
||||
used to issue *commands* for the system to change behaviour, and these
|
||||
commands may or may not be carried out by some kernel driver or
|
||||
userspace application. It follows that doing user feedback based only
|
||||
on input events is broken, as there is no guarantee that an input event
|
||||
will be acted upon.
|
||||
|
||||
Most wireless communication device drivers implementing rfkill
|
||||
functionality MUST NOT generate these events, and have no reason to
|
||||
register themselves with the input layer. Doing otherwise is a common
|
||||
misconception. There is an API to propagate rfkill status change
|
||||
information, and it is NOT the input layer.
|
||||
|
||||
rfkill class:
|
||||
|
||||
* Calls a hook in a driver to effectively change the wireless
|
||||
transmitter state;
|
||||
* Keeps track of the wireless transmitter state (with help from
|
||||
the driver);
|
||||
* Generates userspace notifications (uevents) and a call to a
|
||||
notification chain (kernel) when there is a wireless transmitter
|
||||
state change;
|
||||
* Connects a wireless communications driver with the common rfkill
|
||||
control system, which, for example, allows actions such as
|
||||
"switch all bluetooth devices offline" to be carried out by
|
||||
userspace or by rfkill-input.
|
||||
|
||||
THE RFKILL CLASS NEVER ISSUES INPUT EVENTS. THE RFKILL CLASS DOES
|
||||
NOT LISTEN TO INPUT EVENTS. NO DRIVER USING THE RFKILL CLASS SHALL
|
||||
EVER LISTEN TO, OR ACT ON RFKILL INPUT EVENTS. Doing otherwise is
|
||||
a layering violation.
|
||||
|
||||
Most wireless data communication drivers in the kernel have just to
|
||||
implement the rfkill class API to work properly. Interfacing to the
|
||||
input layer is not often required (and is very often a *bug*) on
|
||||
wireless drivers.
|
||||
|
||||
Platform drivers often have to attach to the input layer to *issue*
|
||||
(but never to listen to) rfkill events for rfkill switches, and also to
|
||||
the rfkill class to export a control interface for the platform rfkill
|
||||
controllers to the rfkill subsystem. This does NOT mean the rfkill
|
||||
switch is attached to a rfkill class (doing so is almost always wrong).
|
||||
It just means the same kernel module is the driver for different
|
||||
devices (rfkill switches and rfkill controllers).
|
||||
|
||||
|
||||
Userspace input handlers (uevents) or kernel input handlers (rfkill-input):
|
||||
|
||||
* Implements the policy of what should happen when one of the input
|
||||
layer events related to rfkill operation is received.
|
||||
* Uses the sysfs interface (userspace) or private rfkill API calls
|
||||
to tell the devices registered with the rfkill class to change
|
||||
their state (i.e. translates the input layer event into real
|
||||
action).
|
||||
* rfkill-input implements EPO by handling EV_SW SW_RFKILL_ALL 0
|
||||
(power off all transmitters) in a special way: it ignores any
|
||||
overrides and local state cache and forces all transmitters to the
|
||||
RFKILL_STATE_SOFT_BLOCKED state (including those which are already
|
||||
supposed to be BLOCKED). Note that the opposite event (power on all
|
||||
transmitters) is handled normally.
|
||||
|
||||
Userspace uevent handler or kernel platform-specific drivers hooked to the
|
||||
rfkill notifier chain:
|
||||
|
||||
* Taps into the rfkill notifier chain or to KOBJ_CHANGE uevents,
|
||||
in order to know when a device that is registered with the rfkill
|
||||
class changes state;
|
||||
* Issues feedback notifications to the user;
|
||||
* In the rare platforms where this is required, synthesizes an input
|
||||
event to command all *OTHER* rfkill devices to also change their
|
||||
statues when a specific rfkill device changes state.
|
||||
|
||||
|
||||
===============================================================================
|
||||
3: Kernel driver guidelines
|
||||
|
||||
Remember: point-of-view is everything for a driver that connects to the rfkill
|
||||
subsystem. All the details below must be measured/perceived from the point of
|
||||
view of the specific driver being modified.
|
||||
|
||||
The first thing one needs to know is whether his driver should be talking to
|
||||
the rfkill class or to the input layer. In rare cases (platform drivers), it
|
||||
could happen that you need to do both, as platform drivers often handle a
|
||||
variety of devices in the same driver.
|
||||
|
||||
Do not mistake input devices for rfkill controllers. The only type of "rfkill
|
||||
switch" device that is to be registered with the rfkill class are those
|
||||
directly controlling the circuits that cause a wireless transmitter to stop
|
||||
working (or the software equivalent of them), i.e. what we call a rfkill
|
||||
controller. Every other kind of "rfkill switch" is just an input device and
|
||||
MUST NOT be registered with the rfkill class.
|
||||
|
||||
A driver should register a device with the rfkill class when ALL of the
|
||||
following conditions are met (they define a rfkill controller):
|
||||
|
||||
1. The device is/controls a data communications wireless transmitter;
|
||||
|
||||
2. The kernel can interact with the hardware/firmware to CHANGE the wireless
|
||||
transmitter state (block/unblock TX operation);
|
||||
|
||||
3. The transmitter can be made to not emit any energy when "blocked":
|
||||
rfkill is not about blocking data transmissions, it is about blocking
|
||||
energy emission;
|
||||
|
||||
A driver should register a device with the input subsystem to issue
|
||||
rfkill-related events (KEY_WLAN, KEY_BLUETOOTH, KEY_WWAN, KEY_WIMAX,
|
||||
SW_RFKILL_ALL, etc) when ALL of the folowing conditions are met:
|
||||
|
||||
1. It is directly related to some physical device the user interacts with, to
|
||||
command the O.S./firmware/hardware to enable/disable a data communications
|
||||
wireless transmitter.
|
||||
|
||||
Examples of the physical device are: buttons, keys and switches the user
|
||||
will press/touch/slide/switch to enable or disable the wireless
|
||||
communication device.
|
||||
|
||||
2. It is NOT slaved to another device, i.e. there is no other device that
|
||||
issues rfkill-related input events in preference to this one.
|
||||
|
||||
Please refer to the corner cases and examples section for more details.
|
||||
|
||||
When in doubt, do not issue input events. For drivers that should generate
|
||||
input events in some platforms, but not in others (e.g. b43), the best solution
|
||||
is to NEVER generate input events in the first place. That work should be
|
||||
deferred to a platform-specific kernel module (which will know when to generate
|
||||
events through the rfkill notifier chain) or to userspace. This avoids the
|
||||
usual maintenance problems with DMI whitelisting.
|
||||
|
||||
|
||||
Corner cases and examples:
|
||||
====================================
|
||||
2: Driver support
|
||||
|
||||
To build a driver with rfkill subsystem support, the driver should
|
||||
depend on the Kconfig symbol RFKILL; it should _not_ depend on
|
||||
RKFILL_INPUT.
|
||||
1. If the device is an input device that, because of hardware or firmware,
|
||||
causes wireless transmitters to be blocked regardless of the kernel's will, it
|
||||
is still just an input device, and NOT to be registered with the rfkill class.
|
||||
|
||||
Unless key events trigger an interrupt to which the driver listens, polling
|
||||
will be required to determine the key state changes. For this the input
|
||||
layer providers the input-polldev handler.
|
||||
2. If the wireless transmitter switch control is read-only, it is an input
|
||||
device and not to be registered with the rfkill class (and maybe not to be made
|
||||
an input layer event source either, see below).
|
||||
|
||||
A driver should implement a few steps to correctly make use of the
|
||||
rfkill subsystem. First for non-polling drivers:
|
||||
3. If there is some other device driver *closer* to the actual hardware the
|
||||
user interacted with (the button/switch/key) to issue an input event, THAT is
|
||||
the device driver that should be issuing input events.
|
||||
|
||||
- rfkill_allocate()
|
||||
- input_allocate_device()
|
||||
- rfkill_register()
|
||||
- input_register_device()
|
||||
E.g:
|
||||
[RFKILL slider switch] -- [GPIO hardware] -- [WLAN card rf-kill input]
|
||||
(platform driver) (wireless card driver)
|
||||
|
||||
For polling drivers:
|
||||
The user is closer to the RFKILL slide switch plaform driver, so the driver
|
||||
which must issue input events is the platform driver looking at the GPIO
|
||||
hardware, and NEVER the wireless card driver (which is just a slave). It is
|
||||
very likely that there are other leaves than just the WLAN card rf-kill input
|
||||
(e.g. a bluetooth card, etc)...
|
||||
|
||||
- rfkill_allocate()
|
||||
- input_allocate_polled_device()
|
||||
- rfkill_register()
|
||||
- input_register_polled_device()
|
||||
On the other hand, some embedded devices do this:
|
||||
|
||||
When a key event has been detected, the correct event should be
|
||||
sent over the input device which has been registered by the driver.
|
||||
[RFKILL slider switch] -- [WLAN card rf-kill input]
|
||||
(wireless card driver)
|
||||
|
||||
In this situation, the wireless card driver *could* register itself as an input
|
||||
device and issue rf-kill related input events... but in order to AVOID the need
|
||||
for DMI whitelisting, the wireless card driver does NOT do it. Userspace (HAL)
|
||||
or a platform driver (that exists only on these embedded devices) will do the
|
||||
dirty job of issuing the input events.
|
||||
|
||||
|
||||
COMMON MISTAKES in kernel drivers, related to rfkill:
|
||||
====================================
|
||||
3: Userspace support
|
||||
|
||||
For each key an input device will be created which will send out the correct
|
||||
key event when the rfkill key has been pressed.
|
||||
1. NEVER confuse input device keys and buttons with input device switches.
|
||||
|
||||
1a. Switches are always set or reset. They report the current state
|
||||
(on position or off position).
|
||||
|
||||
1b. Keys and buttons are either in the pressed or not-pressed state, and
|
||||
that's it. A "button" that latches down when you press it, and
|
||||
unlatches when you press it again is in fact a switch as far as input
|
||||
devices go.
|
||||
|
||||
Add the SW_* events you need for switches, do NOT try to emulate a button using
|
||||
KEY_* events just because there is no such SW_* event yet. Do NOT try to use,
|
||||
for example, KEY_BLUETOOTH when you should be using SW_BLUETOOTH instead.
|
||||
|
||||
2. Input device switches (sources of EV_SW events) DO store their current state
|
||||
(so you *must* initialize it by issuing a gratuitous input layer event on
|
||||
driver start-up and also when resuming from sleep), and that state CAN be
|
||||
queried from userspace through IOCTLs. There is no sysfs interface for this,
|
||||
but that doesn't mean you should break things trying to hook it to the rfkill
|
||||
class to get a sysfs interface :-)
|
||||
|
||||
3. Do not issue *_RFKILL_ALL events by default, unless you are sure it is the
|
||||
correct event for your switch/button. These events are emergency power-off
|
||||
events when they are trying to turn the transmitters off. An example of an
|
||||
input device which SHOULD generate *_RFKILL_ALL events is the wireless-kill
|
||||
switch in a laptop which is NOT a hotkey, but a real switch that kills radios
|
||||
in hardware, even if the O.S. has gone to lunch. An example of an input device
|
||||
which SHOULD NOT generate *_RFKILL_ALL events by default, is any sort of hot
|
||||
key that does nothing by itself, as well as any hot key that is type-specific
|
||||
(e.g. the one for WLAN).
|
||||
|
||||
|
||||
3.1 Guidelines for wireless device drivers
|
||||
------------------------------------------
|
||||
|
||||
1. Each independent transmitter in a wireless device (usually there is only one
|
||||
transmitter per device) should have a SINGLE rfkill class attached to it.
|
||||
|
||||
2. If the device does not have any sort of hardware assistance to allow the
|
||||
driver to rfkill the device, the driver should emulate it by taking all actions
|
||||
required to silence the transmitter.
|
||||
|
||||
3. If it is impossible to silence the transmitter (i.e. it still emits energy,
|
||||
even if it is just in brief pulses, when there is no data to transmit and there
|
||||
is no hardware support to turn it off) do NOT lie to the users. Do not attach
|
||||
it to a rfkill class. The rfkill subsystem does not deal with data
|
||||
transmission, it deals with energy emission. If the transmitter is emitting
|
||||
energy, it is not blocked in rfkill terms.
|
||||
|
||||
4. It doesn't matter if the device has multiple rfkill input lines affecting
|
||||
the same transmitter, their combined state is to be exported as a single state
|
||||
per transmitter (see rule 1).
|
||||
|
||||
This rule exists because users of the rfkill subsystem expect to get (and set,
|
||||
when possible) the overall transmitter rfkill state, not of a particular rfkill
|
||||
line.
|
||||
|
||||
Example of a WLAN wireless driver connected to the rfkill subsystem:
|
||||
--------------------------------------------------------------------
|
||||
|
||||
A certain WLAN card has one input pin that causes it to block the transmitter
|
||||
and makes the status of that input pin available (only for reading!) to the
|
||||
kernel driver. This is a hard rfkill input line (it cannot be overridden by
|
||||
the kernel driver).
|
||||
|
||||
The card also has one PCI register that, if manipulated by the driver, causes
|
||||
it to block the transmitter. This is a soft rfkill input line.
|
||||
|
||||
It has also a thermal protection circuitry that shuts down its transmitter if
|
||||
the card overheats, and makes the status of that protection available (only for
|
||||
reading!) to the kernel driver. This is also a hard rfkill input line.
|
||||
|
||||
If either one of these rfkill lines are active, the transmitter is blocked by
|
||||
the hardware and forced offline.
|
||||
|
||||
The driver should allocate and attach to its struct device *ONE* instance of
|
||||
the rfkill class (there is only one transmitter).
|
||||
|
||||
It can implement the get_state() hook, and return RFKILL_STATE_HARD_BLOCKED if
|
||||
either one of its two hard rfkill input lines are active. If the two hard
|
||||
rfkill lines are inactive, it must return RFKILL_STATE_SOFT_BLOCKED if its soft
|
||||
rfkill input line is active. Only if none of the rfkill input lines are
|
||||
active, will it return RFKILL_STATE_UNBLOCKED.
|
||||
|
||||
If it doesn't implement the get_state() hook, it must make sure that its calls
|
||||
to rfkill_force_state() are enough to keep the status always up-to-date, and it
|
||||
must do a rfkill_force_state() on resume from sleep.
|
||||
|
||||
Every time the driver gets a notification from the card that one of its rfkill
|
||||
lines changed state (polling might be needed on badly designed cards that don't
|
||||
generate interrupts for such events), it recomputes the rfkill state as per
|
||||
above, and calls rfkill_force_state() to update it.
|
||||
|
||||
The driver should implement the toggle_radio() hook, that:
|
||||
|
||||
1. Returns an error if one of the hardware rfkill lines are active, and the
|
||||
caller asked for RFKILL_STATE_UNBLOCKED.
|
||||
|
||||
2. Activates the soft rfkill line if the caller asked for state
|
||||
RFKILL_STATE_SOFT_BLOCKED. It should do this even if one of the hard rfkill
|
||||
lines are active, effectively double-blocking the transmitter.
|
||||
|
||||
3. Deactivates the soft rfkill line if none of the hardware rfkill lines are
|
||||
active and the caller asked for RFKILL_STATE_UNBLOCKED.
|
||||
|
||||
===============================================================================
|
||||
4: Kernel API
|
||||
|
||||
To build a driver with rfkill subsystem support, the driver should depend on
|
||||
(or select) the Kconfig symbol RFKILL; it should _not_ depend on RKFILL_INPUT.
|
||||
|
||||
The hardware the driver talks to may be write-only (where the current state
|
||||
of the hardware is unknown), or read-write (where the hardware can be queried
|
||||
about its current state).
|
||||
|
||||
The rfkill class will call the get_state hook of a device every time it needs
|
||||
to know the *real* current state of the hardware. This can happen often.
|
||||
|
||||
Some hardware provides events when its status changes. In these cases, it is
|
||||
best for the driver to not provide a get_state hook, and instead register the
|
||||
rfkill class *already* with the correct status, and keep it updated using
|
||||
rfkill_force_state() when it gets an event from the hardware.
|
||||
|
||||
There is no provision for a statically-allocated rfkill struct. You must
|
||||
use rfkill_allocate() to allocate one.
|
||||
|
||||
You should:
|
||||
- rfkill_allocate()
|
||||
- modify rfkill fields (flags, name)
|
||||
- modify state to the current hardware state (THIS IS THE ONLY TIME
|
||||
YOU CAN ACCESS state DIRECTLY)
|
||||
- rfkill_register()
|
||||
|
||||
The only way to set a device to the RFKILL_STATE_HARD_BLOCKED state is through
|
||||
a suitable return of get_state() or through rfkill_force_state().
|
||||
|
||||
When a device is in the RFKILL_STATE_HARD_BLOCKED state, the only way to switch
|
||||
it to a different state is through a suitable return of get_state() or through
|
||||
rfkill_force_state().
|
||||
|
||||
If toggle_radio() is called to set a device to state RFKILL_STATE_SOFT_BLOCKED
|
||||
when that device is already at the RFKILL_STATE_HARD_BLOCKED state, it should
|
||||
not return an error. Instead, it should try to double-block the transmitter,
|
||||
so that its state will change from RFKILL_STATE_HARD_BLOCKED to
|
||||
RFKILL_STATE_SOFT_BLOCKED should the hardware blocking cease.
|
||||
|
||||
Please refer to the source for more documentation.
|
||||
|
||||
===============================================================================
|
||||
5: Userspace support
|
||||
|
||||
rfkill devices issue uevents (with an action of "change"), with the following
|
||||
environment variables set:
|
||||
|
||||
RFKILL_NAME
|
||||
RFKILL_STATE
|
||||
RFKILL_TYPE
|
||||
|
||||
The ABI for these variables is defined by the sysfs attributes. It is best
|
||||
to take a quick look at the source to make sure of the possible values.
|
||||
|
||||
It is expected that HAL will trap those, and bridge them to DBUS, etc. These
|
||||
events CAN and SHOULD be used to give feedback to the user about the rfkill
|
||||
status of the system.
|
||||
|
||||
Input devices may issue events that are related to rfkill. These are the
|
||||
various KEY_* events and SW_* events supported by rfkill-input.c.
|
||||
|
||||
******IMPORTANT******
|
||||
When rfkill-input is ACTIVE, userspace is NOT TO CHANGE THE STATE OF AN RFKILL
|
||||
SWITCH IN RESPONSE TO AN INPUT EVENT also handled by rfkill-input, unless it
|
||||
has set to true the user_claim attribute for that particular switch. This rule
|
||||
is *absolute*; do NOT violate it.
|
||||
******IMPORTANT******
|
||||
|
||||
Userspace must not assume it is the only source of control for rfkill switches.
|
||||
Their state CAN and WILL change due to firmware actions, direct user actions,
|
||||
and the rfkill-input EPO override for *_RFKILL_ALL.
|
||||
|
||||
When rfkill-input is not active, userspace must initiate a rfkill status
|
||||
change by writing to the "state" attribute in order for anything to happen.
|
||||
|
||||
Take particular care to implement EV_SW SW_RFKILL_ALL properly. When that
|
||||
switch is set to OFF, *every* rfkill device *MUST* be immediately put into the
|
||||
RFKILL_STATE_SOFT_BLOCKED state, no questions asked.
|
||||
|
||||
The following sysfs entries will be created:
|
||||
|
||||
name: Name assigned by driver to this key (interface or driver name).
|
||||
type: Name of the key type ("wlan", "bluetooth", etc).
|
||||
state: Current state of the key. 1: On, 0: Off.
|
||||
state: Current state of the transmitter
|
||||
0: RFKILL_STATE_SOFT_BLOCKED
|
||||
transmitter is forced off, but one can override it
|
||||
by a write to the state attribute;
|
||||
1: RFKILL_STATE_UNBLOCKED
|
||||
transmiter is NOT forced off, and may operate if
|
||||
all other conditions for such operation are met
|
||||
(such as interface is up and configured, etc);
|
||||
2: RFKILL_STATE_HARD_BLOCKED
|
||||
transmitter is forced off by something outside of
|
||||
the driver's control. One cannot set a device to
|
||||
this state through writes to the state attribute;
|
||||
claim: 1: Userspace handles events, 0: Kernel handles events
|
||||
|
||||
Both the "state" and "claim" entries are also writable. For the "state" entry
|
||||
this means that when 1 or 0 is written all radios, not yet in the requested
|
||||
state, will be will be toggled accordingly.
|
||||
this means that when 1 or 0 is written, the device rfkill state (if not yet in
|
||||
the requested state), will be will be toggled accordingly.
|
||||
|
||||
For the "claim" entry writing 1 to it means that the kernel no longer handles
|
||||
key events even though RFKILL_INPUT input was enabled. When "claim" has been
|
||||
set to 0, userspace should make sure that it listens for the input events or
|
||||
check the sysfs "state" entry regularly to correctly perform the required
|
||||
tasks when the rkfill key is pressed.
|
||||
check the sysfs "state" entry regularly to correctly perform the required tasks
|
||||
when the rkfill key is pressed.
|
||||
|
||||
A note about input devices and EV_SW events:
|
||||
|
||||
In order to know the current state of an input device switch (like
|
||||
SW_RFKILL_ALL), you will need to use an IOCTL. That information is not
|
||||
available through sysfs in a generic way at this time, and it is not available
|
||||
through the rfkill class AT ALL.
|
||||
|
|
18
MAINTAINERS
18
MAINTAINERS
|
@ -2189,6 +2189,8 @@ P: Jesse Brandeburg
|
|||
M: jesse.brandeburg@intel.com
|
||||
P: Bruce Allan
|
||||
M: bruce.w.allan@intel.com
|
||||
P: PJ Waskiewicz
|
||||
M: peter.p.waskiewicz.jr@intel.com
|
||||
P: John Ronciak
|
||||
M: john.ronciak@intel.com
|
||||
L: e1000-devel@lists.sourceforge.net
|
||||
|
@ -2725,12 +2727,10 @@ L: libertas-dev@lists.infradead.org
|
|||
S: Maintained
|
||||
|
||||
MARVELL MV643XX ETHERNET DRIVER
|
||||
P: Dale Farnsworth
|
||||
M: dale@farnsworth.org
|
||||
P: Manish Lachwani
|
||||
M: mlachwani@mvista.com
|
||||
P: Lennert Buytenhek
|
||||
M: buytenh@marvell.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Odd Fixes for 2.4; Maintained for 2.6.
|
||||
S: Supported
|
||||
|
||||
MATROX FRAMEBUFFER DRIVER
|
||||
P: Petr Vandrovec
|
||||
|
@ -3274,14 +3274,6 @@ L: linux-kernel@vger.kernel.org
|
|||
T: git git.infradead.org/battery-2.6.git
|
||||
S: Maintained
|
||||
|
||||
POWERPC 4xx EMAC DRIVER
|
||||
P: Eugene Surovegin
|
||||
M: ebs@ebshome.net
|
||||
W: http://kernel.ebshome.net/emac/
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
PNP SUPPORT
|
||||
P: Adam Belay
|
||||
M: ambx1@neo.rr.com
|
||||
|
|
|
@ -323,10 +323,15 @@ static struct platform_device smc91x_device = {
|
|||
static struct resource dm9000_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x203FB800,
|
||||
.end = 0x203FB800 + 8,
|
||||
.end = 0x203FB800 + 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = 0x203FB800 + 4,
|
||||
.end = 0x203FB800 + 5,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_PF9,
|
||||
.end = IRQ_PF9,
|
||||
.flags = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
|
||||
|
|
|
@ -65,10 +65,15 @@ static struct platform_device rtc_device = {
|
|||
static struct resource dm9000_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x20300000,
|
||||
.end = 0x20300000 + 8,
|
||||
.end = 0x20300000 + 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = 0x20300000 + 4,
|
||||
.end = 0x20300000 + 5,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_PF10,
|
||||
.end = IRQ_PF10,
|
||||
.flags = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
|
||||
|
|
|
@ -166,10 +166,15 @@ static struct platform_device smc91x_device = {
|
|||
static struct resource dm9000_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x203FB800,
|
||||
.end = 0x203FB800 + 8,
|
||||
.end = 0x203FB800 + 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = 0x203FB800 + 4,
|
||||
.end = 0x203FB800 + 5,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_PF9,
|
||||
.end = IRQ_PF9,
|
||||
.flags = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
|
||||
|
|
|
@ -294,7 +294,7 @@ config ATM_HORIZON_DEBUG
|
|||
|
||||
config ATM_IA
|
||||
tristate "Interphase ATM PCI x575/x525/x531"
|
||||
depends on PCI && !64BIT
|
||||
depends on PCI
|
||||
---help---
|
||||
This is a driver for the Interphase (i)ChipSAR adapter cards
|
||||
which include a variety of variants in term of the size of the
|
||||
|
@ -325,81 +325,22 @@ config ATM_IA_DEBUG
|
|||
speed of the driver, and the size of your syslog files! When
|
||||
inactive, they will have only a modest impact on performance.
|
||||
|
||||
config ATM_FORE200E_MAYBE
|
||||
config ATM_FORE200E
|
||||
tristate "FORE Systems 200E-series"
|
||||
depends on PCI || SBUS
|
||||
depends on (PCI || SBUS)
|
||||
select FW_LOADER
|
||||
---help---
|
||||
This is a driver for the FORE Systems 200E-series ATM adapter
|
||||
cards. It simultaneously supports PCA-200E and SBA-200E models
|
||||
on PCI and SBUS hosts. Say Y (or M to compile as a module
|
||||
named fore_200e) here if you have one of these ATM adapters.
|
||||
|
||||
Note that the driver will actually be compiled only if you
|
||||
additionally enable the support for PCA-200E and/or SBA-200E
|
||||
cards.
|
||||
|
||||
See the file <file:Documentation/networking/fore200e.txt> for
|
||||
further details.
|
||||
|
||||
config ATM_FORE200E_PCA
|
||||
bool "PCA-200E support"
|
||||
depends on ATM_FORE200E_MAYBE && PCI
|
||||
help
|
||||
Say Y here if you want your PCA-200E cards to be probed.
|
||||
|
||||
config ATM_FORE200E_PCA_DEFAULT_FW
|
||||
bool "Use default PCA-200E firmware (normally enabled)"
|
||||
depends on ATM_FORE200E_PCA
|
||||
help
|
||||
Use the default PCA-200E firmware data shipped with the driver.
|
||||
|
||||
Normal users do not have to deal with the firmware stuff, so
|
||||
they should say Y here.
|
||||
|
||||
config ATM_FORE200E_PCA_FW
|
||||
string "Pathname of user-supplied binary firmware"
|
||||
depends on ATM_FORE200E_PCA && !ATM_FORE200E_PCA_DEFAULT_FW
|
||||
default ""
|
||||
help
|
||||
This defines the pathname of an alternative PCA-200E binary
|
||||
firmware image supplied by the user. This pathname may be
|
||||
absolute or relative to the drivers/atm directory.
|
||||
|
||||
The driver comes with an adequate firmware image, so normal users do
|
||||
not have to supply an alternative one. They just say Y to "Use
|
||||
default PCA-200E firmware" instead.
|
||||
|
||||
config ATM_FORE200E_SBA
|
||||
bool "SBA-200E support"
|
||||
depends on ATM_FORE200E_MAYBE && SBUS
|
||||
help
|
||||
Say Y here if you want your SBA-200E cards to be probed.
|
||||
|
||||
config ATM_FORE200E_SBA_DEFAULT_FW
|
||||
bool "Use default SBA-200E firmware (normally enabled)"
|
||||
depends on ATM_FORE200E_SBA
|
||||
help
|
||||
Use the default SBA-200E firmware data shipped with the driver.
|
||||
|
||||
Normal users do not have to deal with the firmware stuff, so
|
||||
they should say Y here.
|
||||
|
||||
config ATM_FORE200E_SBA_FW
|
||||
string "Pathname of user-supplied binary firmware"
|
||||
depends on ATM_FORE200E_SBA && !ATM_FORE200E_SBA_DEFAULT_FW
|
||||
default ""
|
||||
help
|
||||
This defines the pathname of an alternative SBA-200E binary
|
||||
firmware image supplied by the user. This pathname may be
|
||||
absolute or relative to the drivers/atm directory.
|
||||
|
||||
The driver comes with an adequate firmware image, so normal users do
|
||||
not have to supply an alternative one. They just say Y to "Use
|
||||
default SBA-200E firmware", above.
|
||||
|
||||
config ATM_FORE200E_USE_TASKLET
|
||||
bool "Defer interrupt work to a tasklet"
|
||||
depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
|
||||
depends on ATM_FORE200E
|
||||
default n
|
||||
help
|
||||
This defers work to be done by the interrupt handler to a
|
||||
|
@ -408,7 +349,7 @@ config ATM_FORE200E_USE_TASKLET
|
|||
|
||||
config ATM_FORE200E_TX_RETRY
|
||||
int "Maximum number of tx retries"
|
||||
depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
|
||||
depends on ATM_FORE200E
|
||||
default "16"
|
||||
---help---
|
||||
Specifies the number of times the driver attempts to transmit
|
||||
|
@ -425,7 +366,7 @@ config ATM_FORE200E_TX_RETRY
|
|||
|
||||
config ATM_FORE200E_DEBUG
|
||||
int "Debugging level (0-3)"
|
||||
depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
|
||||
depends on ATM_FORE200E
|
||||
default "0"
|
||||
help
|
||||
Specifies the level of debugging messages issued by the driver.
|
||||
|
@ -436,12 +377,6 @@ config ATM_FORE200E_DEBUG
|
|||
the performances of the driver, and the size of your syslog files!
|
||||
Keep the debugging level to 0 during normal operations.
|
||||
|
||||
config ATM_FORE200E
|
||||
tristate
|
||||
depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
|
||||
default m if ATM_FORE200E_MAYBE!=y
|
||||
default y if ATM_FORE200E_MAYBE=y
|
||||
|
||||
config ATM_HE
|
||||
tristate "ForeRunner HE Series"
|
||||
depends on PCI
|
||||
|
|
|
@ -3,14 +3,6 @@
|
|||
#
|
||||
|
||||
fore_200e-objs := fore200e.o
|
||||
hostprogs-y := fore200e_mkfirm
|
||||
|
||||
# Files generated that shall be removed upon make clean
|
||||
clean-files := pca200e.bin pca200e.bin1 pca200e.bin2 pca200e_ecd.bin \
|
||||
pca200e_ecd.bin1 pca200e_ecd.bin2 sba200e_ecd.bin sba200e_ecd.bin1 \
|
||||
sba200e_ecd.bin2
|
||||
# Firmware generated that shall be removed upon make clean
|
||||
clean-files += fore200e_pca_fw.c fore200e_sba_fw.c
|
||||
|
||||
obj-$(CONFIG_ATM_ZATM) += zatm.o uPD98402.o
|
||||
obj-$(CONFIG_ATM_NICSTAR) += nicstar.o
|
||||
|
@ -36,38 +28,7 @@ obj-$(CONFIG_ATM_TCP) += atmtcp.o
|
|||
obj-$(CONFIG_ATM_FIRESTREAM) += firestream.o
|
||||
obj-$(CONFIG_ATM_LANAI) += lanai.o
|
||||
|
||||
ifeq ($(CONFIG_ATM_FORE200E_PCA),y)
|
||||
fore_200e-objs += fore200e_pca_fw.o
|
||||
# guess the target endianess to choose the right PCA-200E firmware image
|
||||
ifeq ($(CONFIG_ATM_FORE200E_PCA_DEFAULT_FW),y)
|
||||
byteorder.h := include$(if $(patsubst $(srctree),,$(objtree)),2)/asm/byteorder.h
|
||||
CONFIG_ATM_FORE200E_PCA_FW := $(obj)/pca200e$(if $(shell $(CC) $(KBUILD_CPPFLAGS) -E -dM $(byteorder.h) | grep ' __LITTLE_ENDIAN '),.bin,_ecd.bin2)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_ATM_FORE200E_SBA),y)
|
||||
fore_200e-objs += fore200e_sba_fw.o
|
||||
ifeq ($(CONFIG_ATM_FORE200E_SBA_DEFAULT_FW),y)
|
||||
CONFIG_ATM_FORE200E_SBA_FW := $(obj)/sba200e_ecd.bin2
|
||||
endif
|
||||
endif
|
||||
obj-$(CONFIG_ATM_HE) += he.o
|
||||
ifeq ($(CONFIG_ATM_HE_USE_SUNI),y)
|
||||
obj-$(CONFIG_ATM_HE) += suni.o
|
||||
endif
|
||||
|
||||
# FORE Systems 200E-series firmware magic
|
||||
$(obj)/fore200e_pca_fw.c: $(patsubst "%", %, $(CONFIG_ATM_FORE200E_PCA_FW)) \
|
||||
$(obj)/fore200e_mkfirm
|
||||
$(obj)/fore200e_mkfirm -k -b _fore200e_pca_fw \
|
||||
-i $(CONFIG_ATM_FORE200E_PCA_FW) -o $@
|
||||
|
||||
$(obj)/fore200e_sba_fw.c: $(patsubst "%", %, $(CONFIG_ATM_FORE200E_SBA_FW)) \
|
||||
$(obj)/fore200e_mkfirm
|
||||
$(obj)/fore200e_mkfirm -k -b _fore200e_sba_fw \
|
||||
-i $(CONFIG_ATM_FORE200E_SBA_FW) -o $@
|
||||
|
||||
# deal with the various suffixes of the binary firmware images
|
||||
$(obj)/%.bin $(obj)/%.bin1 $(obj)/%.bin2: $(src)/%.data
|
||||
objcopy -Iihex $< -Obinary $@.gz
|
||||
gzip -n -df $@.gz
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <linux/atm_suni.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/string.h>
|
||||
#include <asm/page.h>
|
||||
|
@ -45,7 +46,7 @@
|
|||
#include <asm/uaccess.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#ifdef CONFIG_ATM_FORE200E_SBA
|
||||
#ifdef CONFIG_SBUS
|
||||
#include <asm/idprom.h>
|
||||
#include <asm/sbus.h>
|
||||
#include <asm/openprom.h>
|
||||
|
@ -382,9 +383,6 @@ fore200e_shutdown(struct fore200e* fore200e)
|
|||
case FORE200E_STATE_START_FW:
|
||||
/* nothing to do for that state */
|
||||
|
||||
case FORE200E_STATE_LOAD_FW:
|
||||
/* nothing to do for that state */
|
||||
|
||||
case FORE200E_STATE_RESET:
|
||||
/* nothing to do for that state */
|
||||
|
||||
|
@ -405,7 +403,7 @@ fore200e_shutdown(struct fore200e* fore200e)
|
|||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_ATM_FORE200E_PCA
|
||||
#ifdef CONFIG_PCI
|
||||
|
||||
static u32 fore200e_pca_read(volatile u32 __iomem *addr)
|
||||
{
|
||||
|
@ -658,10 +656,10 @@ fore200e_pca_proc_read(struct fore200e* fore200e, char *page)
|
|||
pci_dev->bus->number, PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn));
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ATM_FORE200E_PCA */
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
|
||||
#ifdef CONFIG_ATM_FORE200E_SBA
|
||||
#ifdef CONFIG_SBUS
|
||||
|
||||
static u32
|
||||
fore200e_sba_read(volatile u32 __iomem *addr)
|
||||
|
@ -907,7 +905,7 @@ fore200e_sba_proc_read(struct fore200e* fore200e, char *page)
|
|||
|
||||
return sprintf(page, " SBUS slot/device:\t\t%d/'%s'\n", sbus_dev->slot, sbus_dev->prom_name);
|
||||
}
|
||||
#endif /* CONFIG_ATM_FORE200E_SBA */
|
||||
#endif /* CONFIG_SBUS */
|
||||
|
||||
|
||||
static void
|
||||
|
@ -2552,13 +2550,53 @@ fore200e_monitor_puts(struct fore200e* fore200e, char* str)
|
|||
while (fore200e_monitor_getc(fore200e) >= 0);
|
||||
}
|
||||
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
#define FW_EXT ".bin"
|
||||
#else
|
||||
#define FW_EXT "_ecd.bin2"
|
||||
#endif
|
||||
|
||||
static int __devinit
|
||||
fore200e_start_fw(struct fore200e* fore200e)
|
||||
fore200e_load_and_start_fw(struct fore200e* fore200e)
|
||||
{
|
||||
int ok;
|
||||
char cmd[ 48 ];
|
||||
struct fw_header* fw_header = (struct fw_header*) fore200e->bus->fw_data;
|
||||
const struct firmware *firmware;
|
||||
struct device *device;
|
||||
struct fw_header *fw_header;
|
||||
u32 *fw_data, fw_size;
|
||||
u32 __iomem *load_addr;
|
||||
char buf[48];
|
||||
int err = -ENODEV;
|
||||
|
||||
if (strcmp(fore200e->bus->model_name, "PCA-200E") == 0)
|
||||
device = &((struct pci_dev *) fore200e->bus_dev)->dev;
|
||||
#ifdef CONFIG_SBUS
|
||||
else if (strcmp(fore200e->bus->model_name, "SBA-200E") == 0)
|
||||
device = &((struct sbus_dev *) fore200e->bus_dev)->ofdev.dev;
|
||||
#endif
|
||||
else
|
||||
return err;
|
||||
|
||||
sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT);
|
||||
if (request_firmware(&firmware, buf, device) == 1) {
|
||||
printk(FORE200E "missing %s firmware image\n", fore200e->bus->model_name);
|
||||
return err;
|
||||
}
|
||||
|
||||
fw_data = (u32 *) firmware->data;
|
||||
fw_size = firmware->size / sizeof(u32);
|
||||
fw_header = (struct fw_header *) firmware->data;
|
||||
load_addr = fore200e->virt_base + le32_to_cpu(fw_header->load_offset);
|
||||
|
||||
DPRINTK(2, "device %s firmware being loaded at 0x%p (%d words)\n",
|
||||
fore200e->name, load_addr, fw_size);
|
||||
|
||||
if (le32_to_cpu(fw_header->magic) != FW_HEADER_MAGIC) {
|
||||
printk(FORE200E "corrupted %s firmware image\n", fore200e->bus->model_name);
|
||||
goto release;
|
||||
}
|
||||
|
||||
for (; fw_size--; fw_data++, load_addr++)
|
||||
fore200e->bus->write(le32_to_cpu(*fw_data), load_addr);
|
||||
|
||||
DPRINTK(2, "device %s firmware being started\n", fore200e->name);
|
||||
|
||||
|
@ -2567,46 +2605,22 @@ fore200e_start_fw(struct fore200e* fore200e)
|
|||
fore200e_spin(100);
|
||||
#endif
|
||||
|
||||
sprintf(cmd, "\rgo %x\r", le32_to_cpu(fw_header->start_offset));
|
||||
sprintf(buf, "\rgo %x\r", le32_to_cpu(fw_header->start_offset));
|
||||
fore200e_monitor_puts(fore200e, buf);
|
||||
|
||||
fore200e_monitor_puts(fore200e, cmd);
|
||||
|
||||
ok = fore200e_io_poll(fore200e, &fore200e->cp_monitor->bstat, BSTAT_CP_RUNNING, 1000);
|
||||
if (ok == 0) {
|
||||
if (fore200e_io_poll(fore200e, &fore200e->cp_monitor->bstat, BSTAT_CP_RUNNING, 1000) == 0) {
|
||||
printk(FORE200E "device %s firmware didn't start\n", fore200e->name);
|
||||
return -ENODEV;
|
||||
goto release;
|
||||
}
|
||||
|
||||
printk(FORE200E "device %s firmware started\n", fore200e->name);
|
||||
|
||||
fore200e->state = FORE200E_STATE_START_FW;
|
||||
return 0;
|
||||
}
|
||||
err = 0;
|
||||
|
||||
|
||||
static int __devinit
|
||||
fore200e_load_fw(struct fore200e* fore200e)
|
||||
{
|
||||
__le32* fw_data = (__le32*) fore200e->bus->fw_data;
|
||||
u32 fw_size = (u32) *fore200e->bus->fw_size / sizeof(u32);
|
||||
|
||||
struct fw_header* fw_header = (struct fw_header*) fw_data;
|
||||
|
||||
u32 __iomem *load_addr = fore200e->virt_base + le32_to_cpu(fw_header->load_offset);
|
||||
|
||||
DPRINTK(2, "device %s firmware being loaded at 0x%p (%d words)\n",
|
||||
fore200e->name, load_addr, fw_size);
|
||||
|
||||
if (le32_to_cpu(fw_header->magic) != FW_HEADER_MAGIC) {
|
||||
printk(FORE200E "corrupted %s firmware image\n", fore200e->bus->model_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
for (; fw_size--; fw_data++, load_addr++)
|
||||
fore200e->bus->write(le32_to_cpu(*fw_data), load_addr);
|
||||
|
||||
fore200e->state = FORE200E_STATE_LOAD_FW;
|
||||
return 0;
|
||||
release:
|
||||
release_firmware(firmware);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2652,10 +2666,7 @@ fore200e_init(struct fore200e* fore200e)
|
|||
if (fore200e_reset(fore200e, 1) < 0)
|
||||
return -ENODEV;
|
||||
|
||||
if (fore200e_load_fw(fore200e) < 0)
|
||||
return -ENODEV;
|
||||
|
||||
if (fore200e_start_fw(fore200e) < 0)
|
||||
if (fore200e_load_and_start_fw(fore200e) < 0)
|
||||
return -ENODEV;
|
||||
|
||||
if (fore200e_initialize(fore200e) < 0)
|
||||
|
@ -2689,7 +2700,7 @@ fore200e_init(struct fore200e* fore200e)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ATM_FORE200E_PCA
|
||||
#ifdef CONFIG_PCI
|
||||
static int __devinit
|
||||
fore200e_pca_detect(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
|
||||
{
|
||||
|
@ -2804,7 +2815,7 @@ fore200e_module_init(void)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ATM_FORE200E_PCA
|
||||
#ifdef CONFIG_PCI
|
||||
if (!pci_register_driver(&fore200e_pca_driver))
|
||||
return 0;
|
||||
#endif
|
||||
|
@ -2821,7 +2832,7 @@ fore200e_module_cleanup(void)
|
|||
{
|
||||
struct fore200e *fore200e, *next;
|
||||
|
||||
#ifdef CONFIG_ATM_FORE200E_PCA
|
||||
#ifdef CONFIG_PCI
|
||||
pci_unregister_driver(&fore200e_pca_driver);
|
||||
#endif
|
||||
|
||||
|
@ -3140,19 +3151,9 @@ static const struct atmdev_ops fore200e_ops =
|
|||
};
|
||||
|
||||
|
||||
#ifdef CONFIG_ATM_FORE200E_PCA
|
||||
extern const unsigned char _fore200e_pca_fw_data[];
|
||||
extern const unsigned int _fore200e_pca_fw_size;
|
||||
#endif
|
||||
#ifdef CONFIG_ATM_FORE200E_SBA
|
||||
extern const unsigned char _fore200e_sba_fw_data[];
|
||||
extern const unsigned int _fore200e_sba_fw_size;
|
||||
#endif
|
||||
|
||||
static const struct fore200e_bus fore200e_bus[] = {
|
||||
#ifdef CONFIG_ATM_FORE200E_PCA
|
||||
#ifdef CONFIG_PCI
|
||||
{ "PCA-200E", "pca200e", 32, 4, 32,
|
||||
_fore200e_pca_fw_data, &_fore200e_pca_fw_size,
|
||||
fore200e_pca_read,
|
||||
fore200e_pca_write,
|
||||
fore200e_pca_dma_map,
|
||||
|
@ -3173,9 +3174,8 @@ static const struct fore200e_bus fore200e_bus[] = {
|
|||
fore200e_pca_proc_read,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_ATM_FORE200E_SBA
|
||||
#ifdef CONFIG_SBUS
|
||||
{ "SBA-200E", "sba200e", 32, 64, 32,
|
||||
_fore200e_sba_fw_data, &_fore200e_sba_fw_size,
|
||||
fore200e_sba_read,
|
||||
fore200e_sba_write,
|
||||
fore200e_sba_dma_map,
|
||||
|
|
|
@ -754,7 +754,6 @@ typedef enum fore200e_state {
|
|||
FORE200E_STATE_CONFIGURE, /* bus interface configured */
|
||||
FORE200E_STATE_MAP, /* board space mapped in host memory */
|
||||
FORE200E_STATE_RESET, /* board resetted */
|
||||
FORE200E_STATE_LOAD_FW, /* firmware loaded */
|
||||
FORE200E_STATE_START_FW, /* firmware started */
|
||||
FORE200E_STATE_INITIALIZE, /* initialize command successful */
|
||||
FORE200E_STATE_INIT_CMDQ, /* command queue initialized */
|
||||
|
@ -803,8 +802,6 @@ typedef struct fore200e_bus {
|
|||
int descr_alignment; /* tpd/rpd/rbd DMA alignment requirement */
|
||||
int buffer_alignment; /* rx buffers DMA alignment requirement */
|
||||
int status_alignment; /* status words DMA alignment requirement */
|
||||
const unsigned char* fw_data; /* address of firmware data start */
|
||||
const unsigned int* fw_size; /* address of firmware data size */
|
||||
u32 (*read)(volatile u32 __iomem *);
|
||||
void (*write)(u32, volatile u32 __iomem *);
|
||||
u32 (*dma_map)(struct fore200e*, void*, int, int);
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
|
||||
These microcode data are placed under the terms of the GNU General Public License.
|
||||
|
||||
We would prefer you not to distribute modified versions of it and not to ask
|
||||
for assembly or other microcode source.
|
||||
|
||||
Copyright (c) 1995-2000 FORE Systems, Inc., as an unpublished work. This
|
||||
notice does not imply unrestricted or public access to these materials which
|
||||
are a trade secret of FORE Systems, Inc. or its subsidiaries or affiliates
|
||||
(together referred to as "FORE"), and which may not be reproduced, used, sold
|
||||
or transferred to any third party without FORE's prior written consent. All
|
||||
rights reserved.
|
||||
|
||||
U.S. Government Restricted Rights. If you are licensing the Software on
|
||||
behalf of the U.S. Government ("Government"), the following provisions apply
|
||||
to you. If the software is supplied to the Department of Defense ("DoD"), it
|
||||
is classified as "Commercial Computer Software" under paragraph 252.227-7014
|
||||
of the DoD Supplement to the Federal Acquisition Regulations ("DFARS") (or any
|
||||
successor regulations) and the Government is acquiring only the license
|
||||
rights granted herein (the license rights customarily provided to non-Government
|
||||
users). If the Software is supplied to any unit or agency of the Government
|
||||
other than the DoD, it is classified as "Restricted Computer Software" and
|
||||
the Government's rights in the Software are defined in paragraph 52.227-19 of
|
||||
the Federal Acquisition Regulations ("FAR") (or any successor regulations) or,
|
||||
in the cases of NASA, in paragraph 18.52.227-86 of the NASA Supplement to the FAR
|
||||
(or any successor regulations).
|
||||
|
||||
FORE Systems is a registered trademark, and ForeRunner, ForeRunnerLE, and
|
||||
ForeThought are trademarks of FORE Systems, Inc. All other brands or product
|
||||
names are trademarks or registered trademarks of their respective holders.
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
/*
|
||||
mkfirm.c: generates a C readable file from a binary firmware image
|
||||
|
||||
Christophe Lizzi (lizzi@{csti.fr, cnam.fr}), June 1999.
|
||||
|
||||
This software may be used and distributed according to the terms
|
||||
of the GNU General Public License, incorporated herein by reference.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
|
||||
char* default_basename = "pca200e"; /* was initially written for the PCA-200E firmware */
|
||||
char* default_infname = "<stdin>";
|
||||
char* default_outfname = "<stdout>";
|
||||
|
||||
char* progname;
|
||||
int verbose = 0;
|
||||
int inkernel = 0;
|
||||
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"%s: [-v] [-k] [-b basename ] [-i firmware.bin] [-o firmware.c]\n",
|
||||
progname);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
time_t now;
|
||||
char* infname = NULL;
|
||||
char* outfname = NULL;
|
||||
char* basename = NULL;
|
||||
FILE* infile;
|
||||
FILE* outfile;
|
||||
unsigned firmsize;
|
||||
int c;
|
||||
|
||||
progname = *(argv++);
|
||||
|
||||
while (argc > 1) {
|
||||
if ((*argv)[0] == '-') {
|
||||
switch ((*argv)[1]) {
|
||||
case 'i':
|
||||
if (argc-- < 3)
|
||||
usage();
|
||||
infname = *(++argv);
|
||||
break;
|
||||
case 'o':
|
||||
if (argc-- < 3)
|
||||
usage();
|
||||
outfname = *(++argv);
|
||||
break;
|
||||
case 'b':
|
||||
if (argc-- < 3)
|
||||
usage();
|
||||
basename = *(++argv);
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
case 'k':
|
||||
inkernel = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
}
|
||||
else {
|
||||
usage();
|
||||
}
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (infname != NULL) {
|
||||
infile = fopen(infname, "r");
|
||||
if (infile == NULL) {
|
||||
fprintf(stderr, "%s: can't open %s for reading\n",
|
||||
progname, infname);
|
||||
exit(-2);
|
||||
}
|
||||
}
|
||||
else {
|
||||
infile = stdin;
|
||||
infname = default_infname;
|
||||
}
|
||||
|
||||
if (outfname) {
|
||||
outfile = fopen(outfname, "w");
|
||||
if (outfile == NULL) {
|
||||
fprintf(stderr, "%s: can't open %s for writing\n",
|
||||
progname, outfname);
|
||||
exit(-3);
|
||||
}
|
||||
}
|
||||
else {
|
||||
outfile = stdout;
|
||||
outfname = default_outfname;
|
||||
}
|
||||
|
||||
if (basename == NULL)
|
||||
basename = default_basename;
|
||||
|
||||
if (verbose) {
|
||||
fprintf(stderr, "%s: input file = %s\n", progname, infname );
|
||||
fprintf(stderr, "%s: output file = %s\n", progname, outfname );
|
||||
fprintf(stderr, "%s: firmware basename = %s\n", progname, basename );
|
||||
}
|
||||
|
||||
time(&now);
|
||||
fprintf(outfile, "/*\n generated by %s from %s on %s"
|
||||
" DO NOT EDIT!\n*/\n\n",
|
||||
progname, infname, ctime(&now));
|
||||
|
||||
if (inkernel)
|
||||
fprintf(outfile, "#include <linux/init.h>\n\n" );
|
||||
|
||||
/* XXX force 32 bit alignment? */
|
||||
fprintf(outfile, "const unsigned char%s %s_data[] = {\n",
|
||||
inkernel ? " __initdata" : "", basename );
|
||||
|
||||
c = getc(infile);
|
||||
fprintf(outfile,"\t0x%02x", c);
|
||||
firmsize = 1;
|
||||
|
||||
while ((c = getc(infile)) >= 0) {
|
||||
|
||||
if (firmsize++ % 8)
|
||||
fprintf(outfile,", 0x%02x", c);
|
||||
else
|
||||
fprintf(outfile,",\n\t0x%02x", c);
|
||||
}
|
||||
|
||||
fprintf(outfile, "\n};\n\n");
|
||||
|
||||
fprintf(outfile, "const unsigned int%s %s_size = %u;\n",
|
||||
inkernel ? " __initdata" : "", basename, firmsize );
|
||||
|
||||
if (infile != stdin)
|
||||
fclose(infile);
|
||||
if (outfile != stdout)
|
||||
fclose(outfile);
|
||||
|
||||
if(verbose)
|
||||
fprintf(stderr, "%s: firmware size = %u\n", progname, firmsize);
|
||||
|
||||
exit(0);
|
||||
}
|
152
drivers/atm/he.c
152
drivers/atm/he.c
|
@ -75,14 +75,8 @@
|
|||
#include <linux/atm.h>
|
||||
#include <linux/sonet.h>
|
||||
|
||||
#define USE_TASKLET
|
||||
#undef USE_SCATTERGATHER
|
||||
#undef USE_CHECKSUM_HW /* still confused about this */
|
||||
#define USE_RBPS
|
||||
#undef USE_RBPS_POOL /* if memory is tight try this */
|
||||
#undef USE_RBPL_POOL /* if memory is tight try this */
|
||||
#define USE_TPD_POOL
|
||||
/* #undef CONFIG_ATM_HE_USE_SUNI */
|
||||
/* #undef HE_DEBUG */
|
||||
|
||||
#include "he.h"
|
||||
|
@ -388,9 +382,7 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
|
|||
he_dev->atm_dev->dev_data = he_dev;
|
||||
atm_dev->dev_data = he_dev;
|
||||
he_dev->number = atm_dev->number;
|
||||
#ifdef USE_TASKLET
|
||||
tasklet_init(&he_dev->tasklet, he_tasklet, (unsigned long) he_dev);
|
||||
#endif
|
||||
spin_lock_init(&he_dev->global_lock);
|
||||
|
||||
if (he_start(atm_dev)) {
|
||||
|
@ -787,23 +779,13 @@ he_init_group(struct he_dev *he_dev, int group)
|
|||
{
|
||||
int i;
|
||||
|
||||
#ifdef USE_RBPS
|
||||
/* small buffer pool */
|
||||
#ifdef USE_RBPS_POOL
|
||||
he_dev->rbps_pool = pci_pool_create("rbps", he_dev->pci_dev,
|
||||
CONFIG_RBPS_BUFSIZE, 8, 0);
|
||||
if (he_dev->rbps_pool == NULL) {
|
||||
hprintk("unable to create rbps pages\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
#else /* !USE_RBPS_POOL */
|
||||
he_dev->rbps_pages = pci_alloc_consistent(he_dev->pci_dev,
|
||||
CONFIG_RBPS_SIZE * CONFIG_RBPS_BUFSIZE, &he_dev->rbps_pages_phys);
|
||||
if (he_dev->rbps_pages == NULL) {
|
||||
hprintk("unable to create rbps page pool\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
#endif /* USE_RBPS_POOL */
|
||||
|
||||
he_dev->rbps_base = pci_alloc_consistent(he_dev->pci_dev,
|
||||
CONFIG_RBPS_SIZE * sizeof(struct he_rbp), &he_dev->rbps_phys);
|
||||
|
@ -818,14 +800,9 @@ he_init_group(struct he_dev *he_dev, int group)
|
|||
dma_addr_t dma_handle;
|
||||
void *cpuaddr;
|
||||
|
||||
#ifdef USE_RBPS_POOL
|
||||
cpuaddr = pci_pool_alloc(he_dev->rbps_pool, GFP_KERNEL|GFP_DMA, &dma_handle);
|
||||
if (cpuaddr == NULL)
|
||||
return -ENOMEM;
|
||||
#else
|
||||
cpuaddr = he_dev->rbps_pages + (i * CONFIG_RBPS_BUFSIZE);
|
||||
dma_handle = he_dev->rbps_pages_phys + (i * CONFIG_RBPS_BUFSIZE);
|
||||
#endif
|
||||
|
||||
he_dev->rbps_virt[i].virt = cpuaddr;
|
||||
he_dev->rbps_base[i].status = RBP_LOANED | RBP_SMALLBUF | (i << RBP_INDEX_OFF);
|
||||
|
@ -844,30 +821,14 @@ he_init_group(struct he_dev *he_dev, int group)
|
|||
RBP_QSIZE(CONFIG_RBPS_SIZE - 1) |
|
||||
RBP_INT_ENB,
|
||||
G0_RBPS_QI + (group * 32));
|
||||
#else /* !USE_RBPS */
|
||||
he_writel(he_dev, 0x0, G0_RBPS_S + (group * 32));
|
||||
he_writel(he_dev, 0x0, G0_RBPS_T + (group * 32));
|
||||
he_writel(he_dev, 0x0, G0_RBPS_QI + (group * 32));
|
||||
he_writel(he_dev, RBP_THRESH(0x1) | RBP_QSIZE(0x0),
|
||||
G0_RBPS_BS + (group * 32));
|
||||
#endif /* USE_RBPS */
|
||||
|
||||
/* large buffer pool */
|
||||
#ifdef USE_RBPL_POOL
|
||||
he_dev->rbpl_pool = pci_pool_create("rbpl", he_dev->pci_dev,
|
||||
CONFIG_RBPL_BUFSIZE, 8, 0);
|
||||
if (he_dev->rbpl_pool == NULL) {
|
||||
hprintk("unable to create rbpl pool\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
#else /* !USE_RBPL_POOL */
|
||||
he_dev->rbpl_pages = (void *) pci_alloc_consistent(he_dev->pci_dev,
|
||||
CONFIG_RBPL_SIZE * CONFIG_RBPL_BUFSIZE, &he_dev->rbpl_pages_phys);
|
||||
if (he_dev->rbpl_pages == NULL) {
|
||||
hprintk("unable to create rbpl pages\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
#endif /* USE_RBPL_POOL */
|
||||
|
||||
he_dev->rbpl_base = pci_alloc_consistent(he_dev->pci_dev,
|
||||
CONFIG_RBPL_SIZE * sizeof(struct he_rbp), &he_dev->rbpl_phys);
|
||||
|
@ -882,14 +843,9 @@ he_init_group(struct he_dev *he_dev, int group)
|
|||
dma_addr_t dma_handle;
|
||||
void *cpuaddr;
|
||||
|
||||
#ifdef USE_RBPL_POOL
|
||||
cpuaddr = pci_pool_alloc(he_dev->rbpl_pool, GFP_KERNEL|GFP_DMA, &dma_handle);
|
||||
if (cpuaddr == NULL)
|
||||
return -ENOMEM;
|
||||
#else
|
||||
cpuaddr = he_dev->rbpl_pages + (i * CONFIG_RBPL_BUFSIZE);
|
||||
dma_handle = he_dev->rbpl_pages_phys + (i * CONFIG_RBPL_BUFSIZE);
|
||||
#endif
|
||||
|
||||
he_dev->rbpl_virt[i].virt = cpuaddr;
|
||||
he_dev->rbpl_base[i].status = RBP_LOANED | (i << RBP_INDEX_OFF);
|
||||
|
@ -1475,7 +1431,6 @@ he_start(struct atm_dev *dev)
|
|||
|
||||
he_init_tpdrq(he_dev);
|
||||
|
||||
#ifdef USE_TPD_POOL
|
||||
he_dev->tpd_pool = pci_pool_create("tpd", he_dev->pci_dev,
|
||||
sizeof(struct he_tpd), TPD_ALIGNMENT, 0);
|
||||
if (he_dev->tpd_pool == NULL) {
|
||||
|
@ -1484,20 +1439,6 @@ he_start(struct atm_dev *dev)
|
|||
}
|
||||
|
||||
INIT_LIST_HEAD(&he_dev->outstanding_tpds);
|
||||
#else
|
||||
he_dev->tpd_base = (void *) pci_alloc_consistent(he_dev->pci_dev,
|
||||
CONFIG_NUMTPDS * sizeof(struct he_tpd), &he_dev->tpd_base_phys);
|
||||
if (!he_dev->tpd_base)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < CONFIG_NUMTPDS; ++i) {
|
||||
he_dev->tpd_base[i].status = (i << TPD_ADDR_SHIFT);
|
||||
he_dev->tpd_base[i].inuse = 0;
|
||||
}
|
||||
|
||||
he_dev->tpd_head = he_dev->tpd_base;
|
||||
he_dev->tpd_end = &he_dev->tpd_base[CONFIG_NUMTPDS - 1];
|
||||
#endif
|
||||
|
||||
if (he_init_group(he_dev, 0) != 0)
|
||||
return -ENOMEM;
|
||||
|
@ -1606,9 +1547,7 @@ he_stop(struct he_dev *he_dev)
|
|||
gen_cntl_0 &= ~(INT_PROC_ENBL | INIT_ENB);
|
||||
pci_write_config_dword(pci_dev, GEN_CNTL_0, gen_cntl_0);
|
||||
|
||||
#ifdef USE_TASKLET
|
||||
tasklet_disable(&he_dev->tasklet);
|
||||
#endif
|
||||
|
||||
/* disable recv and transmit */
|
||||
|
||||
|
@ -1638,7 +1577,6 @@ he_stop(struct he_dev *he_dev)
|
|||
he_dev->hsp, he_dev->hsp_phys);
|
||||
|
||||
if (he_dev->rbpl_base) {
|
||||
#ifdef USE_RBPL_POOL
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CONFIG_RBPL_SIZE; ++i) {
|
||||
|
@ -1647,22 +1585,14 @@ he_stop(struct he_dev *he_dev)
|
|||
|
||||
pci_pool_free(he_dev->rbpl_pool, cpuaddr, dma_handle);
|
||||
}
|
||||
#else
|
||||
pci_free_consistent(he_dev->pci_dev, CONFIG_RBPL_SIZE
|
||||
* CONFIG_RBPL_BUFSIZE, he_dev->rbpl_pages, he_dev->rbpl_pages_phys);
|
||||
#endif
|
||||
pci_free_consistent(he_dev->pci_dev, CONFIG_RBPL_SIZE
|
||||
* sizeof(struct he_rbp), he_dev->rbpl_base, he_dev->rbpl_phys);
|
||||
}
|
||||
|
||||
#ifdef USE_RBPL_POOL
|
||||
if (he_dev->rbpl_pool)
|
||||
pci_pool_destroy(he_dev->rbpl_pool);
|
||||
#endif
|
||||
|
||||
#ifdef USE_RBPS
|
||||
if (he_dev->rbps_base) {
|
||||
#ifdef USE_RBPS_POOL
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CONFIG_RBPS_SIZE; ++i) {
|
||||
|
@ -1671,20 +1601,12 @@ he_stop(struct he_dev *he_dev)
|
|||
|
||||
pci_pool_free(he_dev->rbps_pool, cpuaddr, dma_handle);
|
||||
}
|
||||
#else
|
||||
pci_free_consistent(he_dev->pci_dev, CONFIG_RBPS_SIZE
|
||||
* CONFIG_RBPS_BUFSIZE, he_dev->rbps_pages, he_dev->rbps_pages_phys);
|
||||
#endif
|
||||
pci_free_consistent(he_dev->pci_dev, CONFIG_RBPS_SIZE
|
||||
* sizeof(struct he_rbp), he_dev->rbps_base, he_dev->rbps_phys);
|
||||
}
|
||||
|
||||
#ifdef USE_RBPS_POOL
|
||||
if (he_dev->rbps_pool)
|
||||
pci_pool_destroy(he_dev->rbps_pool);
|
||||
#endif
|
||||
|
||||
#endif /* USE_RBPS */
|
||||
|
||||
if (he_dev->rbrq_base)
|
||||
pci_free_consistent(he_dev->pci_dev, CONFIG_RBRQ_SIZE * sizeof(struct he_rbrq),
|
||||
|
@ -1698,14 +1620,8 @@ he_stop(struct he_dev *he_dev)
|
|||
pci_free_consistent(he_dev->pci_dev, CONFIG_TBRQ_SIZE * sizeof(struct he_tbrq),
|
||||
he_dev->tpdrq_base, he_dev->tpdrq_phys);
|
||||
|
||||
#ifdef USE_TPD_POOL
|
||||
if (he_dev->tpd_pool)
|
||||
pci_pool_destroy(he_dev->tpd_pool);
|
||||
#else
|
||||
if (he_dev->tpd_base)
|
||||
pci_free_consistent(he_dev->pci_dev, CONFIG_NUMTPDS * sizeof(struct he_tpd),
|
||||
he_dev->tpd_base, he_dev->tpd_base_phys);
|
||||
#endif
|
||||
|
||||
if (he_dev->pci_dev) {
|
||||
pci_read_config_word(he_dev->pci_dev, PCI_COMMAND, &command);
|
||||
|
@ -1720,7 +1636,6 @@ he_stop(struct he_dev *he_dev)
|
|||
static struct he_tpd *
|
||||
__alloc_tpd(struct he_dev *he_dev)
|
||||
{
|
||||
#ifdef USE_TPD_POOL
|
||||
struct he_tpd *tpd;
|
||||
dma_addr_t dma_handle;
|
||||
|
||||
|
@ -1735,27 +1650,6 @@ __alloc_tpd(struct he_dev *he_dev)
|
|||
tpd->iovec[2].addr = 0; tpd->iovec[2].len = 0;
|
||||
|
||||
return tpd;
|
||||
#else
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CONFIG_NUMTPDS; ++i) {
|
||||
++he_dev->tpd_head;
|
||||
if (he_dev->tpd_head > he_dev->tpd_end) {
|
||||
he_dev->tpd_head = he_dev->tpd_base;
|
||||
}
|
||||
|
||||
if (!he_dev->tpd_head->inuse) {
|
||||
he_dev->tpd_head->inuse = 1;
|
||||
he_dev->tpd_head->status &= TPD_MASK;
|
||||
he_dev->tpd_head->iovec[0].addr = 0; he_dev->tpd_head->iovec[0].len = 0;
|
||||
he_dev->tpd_head->iovec[1].addr = 0; he_dev->tpd_head->iovec[1].len = 0;
|
||||
he_dev->tpd_head->iovec[2].addr = 0; he_dev->tpd_head->iovec[2].len = 0;
|
||||
return he_dev->tpd_head;
|
||||
}
|
||||
}
|
||||
hprintk("out of tpds -- increase CONFIG_NUMTPDS (%d)\n", CONFIG_NUMTPDS);
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define AAL5_LEN(buf,len) \
|
||||
|
@ -1804,11 +1698,9 @@ he_service_rbrq(struct he_dev *he_dev, int group)
|
|||
RBRQ_CON_CLOSED(he_dev->rbrq_head) ? " CON_CLOSED" : "",
|
||||
RBRQ_HBUF_ERR(he_dev->rbrq_head) ? " HBUF_ERR" : "");
|
||||
|
||||
#ifdef USE_RBPS
|
||||
if (RBRQ_ADDR(he_dev->rbrq_head) & RBP_SMALLBUF)
|
||||
rbp = &he_dev->rbps_base[RBP_INDEX(RBRQ_ADDR(he_dev->rbrq_head))];
|
||||
else
|
||||
#endif
|
||||
rbp = &he_dev->rbpl_base[RBP_INDEX(RBRQ_ADDR(he_dev->rbrq_head))];
|
||||
|
||||
buf_len = RBRQ_BUFLEN(he_dev->rbrq_head) * 4;
|
||||
|
@ -1887,12 +1779,10 @@ he_service_rbrq(struct he_dev *he_dev, int group)
|
|||
|
||||
for (iov = he_vcc->iov_head;
|
||||
iov < he_vcc->iov_tail; ++iov) {
|
||||
#ifdef USE_RBPS
|
||||
if (iov->iov_base & RBP_SMALLBUF)
|
||||
memcpy(skb_put(skb, iov->iov_len),
|
||||
he_dev->rbps_virt[RBP_INDEX(iov->iov_base)].virt, iov->iov_len);
|
||||
else
|
||||
#endif
|
||||
memcpy(skb_put(skb, iov->iov_len),
|
||||
he_dev->rbpl_virt[RBP_INDEX(iov->iov_base)].virt, iov->iov_len);
|
||||
}
|
||||
|
@ -1937,11 +1827,9 @@ he_service_rbrq(struct he_dev *he_dev, int group)
|
|||
|
||||
for (iov = he_vcc->iov_head;
|
||||
iov < he_vcc->iov_tail; ++iov) {
|
||||
#ifdef USE_RBPS
|
||||
if (iov->iov_base & RBP_SMALLBUF)
|
||||
rbp = &he_dev->rbps_base[RBP_INDEX(iov->iov_base)];
|
||||
else
|
||||
#endif
|
||||
rbp = &he_dev->rbpl_base[RBP_INDEX(iov->iov_base)];
|
||||
|
||||
rbp->status &= ~RBP_LOANED;
|
||||
|
@ -1977,9 +1865,7 @@ he_service_tbrq(struct he_dev *he_dev, int group)
|
|||
he_dev->hsp->group[group].tbrq_tail);
|
||||
struct he_tpd *tpd;
|
||||
int slot, updated = 0;
|
||||
#ifdef USE_TPD_POOL
|
||||
struct he_tpd *__tpd;
|
||||
#endif
|
||||
|
||||
/* 2.1.6 transmit buffer return queue */
|
||||
|
||||
|
@ -1991,7 +1877,6 @@ he_service_tbrq(struct he_dev *he_dev, int group)
|
|||
TBRQ_TPD(he_dev->tbrq_head),
|
||||
TBRQ_EOS(he_dev->tbrq_head) ? " EOS" : "",
|
||||
TBRQ_MULTIPLE(he_dev->tbrq_head) ? " MULTIPLE" : "");
|
||||
#ifdef USE_TPD_POOL
|
||||
tpd = NULL;
|
||||
list_for_each_entry(__tpd, &he_dev->outstanding_tpds, entry) {
|
||||
if (TPD_ADDR(__tpd->status) == TBRQ_TPD(he_dev->tbrq_head)) {
|
||||
|
@ -2006,9 +1891,6 @@ he_service_tbrq(struct he_dev *he_dev, int group)
|
|||
TBRQ_TPD(he_dev->tbrq_head));
|
||||
goto next_tbrq_entry;
|
||||
}
|
||||
#else
|
||||
tpd = &he_dev->tpd_base[ TPD_INDEX(TBRQ_TPD(he_dev->tbrq_head)) ];
|
||||
#endif
|
||||
|
||||
if (TBRQ_EOS(he_dev->tbrq_head)) {
|
||||
HPRINTK("wake_up(tx_waitq) cid 0x%x\n",
|
||||
|
@ -2038,12 +1920,8 @@ he_service_tbrq(struct he_dev *he_dev, int group)
|
|||
}
|
||||
|
||||
next_tbrq_entry:
|
||||
#ifdef USE_TPD_POOL
|
||||
if (tpd)
|
||||
pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status));
|
||||
#else
|
||||
tpd->inuse = 0;
|
||||
#endif
|
||||
he_dev->tbrq_head = (struct he_tbrq *)
|
||||
((unsigned long) he_dev->tbrq_base |
|
||||
TBRQ_MASK(++he_dev->tbrq_head));
|
||||
|
@ -2086,7 +1964,6 @@ he_service_rbpl(struct he_dev *he_dev, int group)
|
|||
he_writel(he_dev, RBPL_MASK(he_dev->rbpl_tail), G0_RBPL_T);
|
||||
}
|
||||
|
||||
#ifdef USE_RBPS
|
||||
static void
|
||||
he_service_rbps(struct he_dev *he_dev, int group)
|
||||
{
|
||||
|
@ -2113,7 +1990,6 @@ he_service_rbps(struct he_dev *he_dev, int group)
|
|||
if (moved)
|
||||
he_writel(he_dev, RBPS_MASK(he_dev->rbps_tail), G0_RBPS_T);
|
||||
}
|
||||
#endif /* USE_RBPS */
|
||||
|
||||
static void
|
||||
he_tasklet(unsigned long data)
|
||||
|
@ -2124,9 +2000,7 @@ he_tasklet(unsigned long data)
|
|||
int updated = 0;
|
||||
|
||||
HPRINTK("tasklet (0x%lx)\n", data);
|
||||
#ifdef USE_TASKLET
|
||||
spin_lock_irqsave(&he_dev->global_lock, flags);
|
||||
#endif
|
||||
|
||||
while (he_dev->irq_head != he_dev->irq_tail) {
|
||||
++updated;
|
||||
|
@ -2141,9 +2015,7 @@ he_tasklet(unsigned long data)
|
|||
case ITYPE_RBRQ_TIMER:
|
||||
if (he_service_rbrq(he_dev, group)) {
|
||||
he_service_rbpl(he_dev, group);
|
||||
#ifdef USE_RBPS
|
||||
he_service_rbps(he_dev, group);
|
||||
#endif /* USE_RBPS */
|
||||
}
|
||||
break;
|
||||
case ITYPE_TBRQ_THRESH:
|
||||
|
@ -2156,9 +2028,7 @@ he_tasklet(unsigned long data)
|
|||
he_service_rbpl(he_dev, group);
|
||||
break;
|
||||
case ITYPE_RBPS_THRESH:
|
||||
#ifdef USE_RBPS
|
||||
he_service_rbps(he_dev, group);
|
||||
#endif /* USE_RBPS */
|
||||
break;
|
||||
case ITYPE_PHY:
|
||||
HPRINTK("phy interrupt\n");
|
||||
|
@ -2186,9 +2056,7 @@ he_tasklet(unsigned long data)
|
|||
|
||||
he_service_rbrq(he_dev, 0);
|
||||
he_service_rbpl(he_dev, 0);
|
||||
#ifdef USE_RBPS
|
||||
he_service_rbps(he_dev, 0);
|
||||
#endif /* USE_RBPS */
|
||||
he_service_tbrq(he_dev, 0);
|
||||
break;
|
||||
default:
|
||||
|
@ -2210,9 +2078,7 @@ he_tasklet(unsigned long data)
|
|||
IRQ_TAIL(he_dev->irq_tail), IRQ0_HEAD);
|
||||
(void) he_readl(he_dev, INT_FIFO); /* 8.1.2 controller errata; flush posted writes */
|
||||
}
|
||||
#ifdef USE_TASKLET
|
||||
spin_unlock_irqrestore(&he_dev->global_lock, flags);
|
||||
#endif
|
||||
}
|
||||
|
||||
static irqreturn_t
|
||||
|
@ -2244,11 +2110,7 @@ he_irq_handler(int irq, void *dev_id)
|
|||
|
||||
if (he_dev->irq_head != he_dev->irq_tail) {
|
||||
handled = 1;
|
||||
#ifdef USE_TASKLET
|
||||
tasklet_schedule(&he_dev->tasklet);
|
||||
#else
|
||||
he_tasklet((unsigned long) he_dev);
|
||||
#endif
|
||||
he_writel(he_dev, INT_CLEAR_A, INT_FIFO); /* clear interrupt */
|
||||
(void) he_readl(he_dev, INT_FIFO); /* flush posted writes */
|
||||
}
|
||||
|
@ -2305,23 +2167,14 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid)
|
|||
dev_kfree_skb_any(tpd->skb);
|
||||
atomic_inc(&tpd->vcc->stats->tx_err);
|
||||
}
|
||||
#ifdef USE_TPD_POOL
|
||||
pci_pool_free(he_dev->tpd_pool, tpd, TPD_ADDR(tpd->status));
|
||||
#else
|
||||
tpd->inuse = 0;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* 2.1.5 transmit packet descriptor ready queue */
|
||||
#ifdef USE_TPD_POOL
|
||||
list_add_tail(&tpd->entry, &he_dev->outstanding_tpds);
|
||||
he_dev->tpdrq_tail->tpd = TPD_ADDR(tpd->status);
|
||||
#else
|
||||
he_dev->tpdrq_tail->tpd = he_dev->tpd_base_phys +
|
||||
(TPD_INDEX(tpd->status) * sizeof(struct he_tpd));
|
||||
#endif
|
||||
he_dev->tpdrq_tail->cid = cid;
|
||||
wmb();
|
||||
|
||||
|
@ -2511,13 +2364,8 @@ he_open(struct atm_vcc *vcc)
|
|||
goto open_failed;
|
||||
}
|
||||
|
||||
#ifdef USE_RBPS
|
||||
rsr1 = RSR1_GROUP(0);
|
||||
rsr4 = RSR4_GROUP(0);
|
||||
#else /* !USE_RBPS */
|
||||
rsr1 = RSR1_GROUP(0)|RSR1_RBPL_ONLY;
|
||||
rsr4 = RSR4_GROUP(0)|RSR4_RBPL_ONLY;
|
||||
#endif /* USE_RBPS */
|
||||
rsr0 = vcc->qos.rxtp.traffic_class == ATM_UBR ?
|
||||
(RSR0_EPD_ENABLE|RSR0_PPD_ENABLE) : 0;
|
||||
|
||||
|
|
|
@ -51,8 +51,6 @@
|
|||
#define CONFIG_IRQ_SIZE 128
|
||||
#define CONFIG_IRQ_THRESH (CONFIG_IRQ_SIZE/2)
|
||||
|
||||
#define CONFIG_NUMTPDS 256
|
||||
|
||||
#define CONFIG_TPDRQ_SIZE 512
|
||||
#define TPDRQ_MASK(x) (((unsigned long)(x))&((CONFIG_TPDRQ_SIZE<<3)-1))
|
||||
|
||||
|
@ -140,12 +138,7 @@ struct he_tpd {
|
|||
struct sk_buff *skb;
|
||||
struct atm_vcc *vcc;
|
||||
|
||||
#ifdef USE_TPD_POOL
|
||||
struct list_head entry;
|
||||
#else
|
||||
u32 inuse;
|
||||
char padding[32 - sizeof(u32) - (2*sizeof(void*))];
|
||||
#endif
|
||||
};
|
||||
|
||||
#define TPD_ALIGNMENT 64
|
||||
|
@ -291,16 +284,9 @@ struct he_dev {
|
|||
volatile unsigned *irq_tailoffset;
|
||||
int irq_peak;
|
||||
|
||||
#ifdef USE_TASKLET
|
||||
struct tasklet_struct tasklet;
|
||||
#endif
|
||||
#ifdef USE_TPD_POOL
|
||||
struct pci_pool *tpd_pool;
|
||||
struct list_head outstanding_tpds;
|
||||
#else
|
||||
struct he_tpd *tpd_head, *tpd_base, *tpd_end;
|
||||
dma_addr_t tpd_base_phys;
|
||||
#endif
|
||||
|
||||
dma_addr_t tpdrq_phys;
|
||||
struct he_tpdrq *tpdrq_base, *tpdrq_tail, *tpdrq_head;
|
||||
|
@ -311,25 +297,13 @@ struct he_dev {
|
|||
struct he_rbrq *rbrq_base, *rbrq_head;
|
||||
int rbrq_peak;
|
||||
|
||||
#ifdef USE_RBPL_POOL
|
||||
struct pci_pool *rbpl_pool;
|
||||
#else
|
||||
void *rbpl_pages;
|
||||
dma_addr_t rbpl_pages_phys;
|
||||
#endif
|
||||
dma_addr_t rbpl_phys;
|
||||
struct he_rbp *rbpl_base, *rbpl_tail;
|
||||
struct he_virt *rbpl_virt;
|
||||
int rbpl_peak;
|
||||
|
||||
#ifdef USE_RBPS
|
||||
#ifdef USE_RBPS_POOL
|
||||
struct pci_pool *rbps_pool;
|
||||
#else
|
||||
void *rbps_pages;
|
||||
dma_addr_t rbps_pages_phys;
|
||||
#endif
|
||||
#endif
|
||||
dma_addr_t rbps_phys;
|
||||
struct he_rbp *rbps_base, *rbps_tail;
|
||||
struct he_virt *rbps_virt;
|
||||
|
|
|
@ -65,12 +65,7 @@
|
|||
#include "iphase.h"
|
||||
#include "suni.h"
|
||||
#define swap(x) (((x & 0xff) << 8) | ((x & 0xff00) >> 8))
|
||||
struct suni_priv {
|
||||
struct k_sonet_stats sonet_stats; /* link diagnostics */
|
||||
unsigned char loop_mode; /* loopback mode */
|
||||
struct atm_dev *dev; /* device back-pointer */
|
||||
struct suni_priv *next; /* next SUNI */
|
||||
};
|
||||
|
||||
#define PRIV(dev) ((struct suni_priv *) dev->phy_data)
|
||||
|
||||
static unsigned char ia_phy_get(struct atm_dev *dev, unsigned long addr);
|
||||
|
@ -94,10 +89,6 @@ module_param(IADebugFlag, uint, 0644);
|
|||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
#if BITS_PER_LONG != 32
|
||||
# error FIXME: this driver only works on 32-bit platforms
|
||||
#endif
|
||||
|
||||
/**************************** IA_LIB **********************************/
|
||||
|
||||
static void ia_init_rtn_q (IARTN_Q *que)
|
||||
|
@ -1411,7 +1402,6 @@ static int rx_init(struct atm_dev *dev)
|
|||
struct abr_vc_table *abr_vc_table;
|
||||
u16 *vc_table;
|
||||
u16 *reass_table;
|
||||
u16 *ptr16;
|
||||
int i,j, vcsize_sel;
|
||||
u_short freeq_st_adr;
|
||||
u_short *freeq_start;
|
||||
|
@ -1426,14 +1416,15 @@ static int rx_init(struct atm_dev *dev)
|
|||
printk(KERN_ERR DEV_LABEL "can't allocate DLEs\n");
|
||||
goto err_out;
|
||||
}
|
||||
iadev->rx_dle_q.start = (struct dle*)dle_addr;
|
||||
iadev->rx_dle_q.start = (struct dle *)dle_addr;
|
||||
iadev->rx_dle_q.read = iadev->rx_dle_q.start;
|
||||
iadev->rx_dle_q.write = iadev->rx_dle_q.start;
|
||||
iadev->rx_dle_q.end = (struct dle*)((u32)dle_addr+sizeof(struct dle)*DLE_ENTRIES);
|
||||
iadev->rx_dle_q.end = (struct dle*)((unsigned long)dle_addr+sizeof(struct dle)*DLE_ENTRIES);
|
||||
/* the end of the dle q points to the entry after the last
|
||||
DLE that can be used. */
|
||||
|
||||
/* write the upper 20 bits of the start address to rx list address register */
|
||||
/* We know this is 32bit bus addressed so the following is safe */
|
||||
writel(iadev->rx_dle_dma & 0xfffff000,
|
||||
iadev->dma + IPHASE5575_RX_LIST_ADDR);
|
||||
IF_INIT(printk("Tx Dle list addr: 0x%08x value: 0x%0x\n",
|
||||
|
@ -1587,11 +1578,12 @@ static int rx_init(struct atm_dev *dev)
|
|||
Set Packet Aging Interval count register to overflow in about 4 us
|
||||
*/
|
||||
writew(0xF6F8, iadev->reass_reg+PKT_TM_CNT );
|
||||
ptr16 = (u16*)j;
|
||||
i = ((u32)ptr16 >> 6) & 0xff;
|
||||
ptr16 += j - 1;
|
||||
i |=(((u32)ptr16 << 2) & 0xff00);
|
||||
|
||||
i = (j >> 6) & 0xFF;
|
||||
j += 2 * (j - 1);
|
||||
i |= ((j << 2) & 0xFF00);
|
||||
writew(i, iadev->reass_reg+TMOUT_RANGE);
|
||||
|
||||
/* initiate the desc_tble */
|
||||
for(i=0; i<iadev->num_tx_desc;i++)
|
||||
iadev->desc_tbl[i].timestamp = 0;
|
||||
|
@ -1914,7 +1906,7 @@ static int tx_init(struct atm_dev *dev)
|
|||
iadev->tx_dle_q.start = (struct dle*)dle_addr;
|
||||
iadev->tx_dle_q.read = iadev->tx_dle_q.start;
|
||||
iadev->tx_dle_q.write = iadev->tx_dle_q.start;
|
||||
iadev->tx_dle_q.end = (struct dle*)((u32)dle_addr+sizeof(struct dle)*DLE_ENTRIES);
|
||||
iadev->tx_dle_q.end = (struct dle*)((unsigned long)dle_addr+sizeof(struct dle)*DLE_ENTRIES);
|
||||
|
||||
/* write the upper 20 bits of the start address to tx list address register */
|
||||
writel(iadev->tx_dle_dma & 0xfffff000,
|
||||
|
@ -2907,7 +2899,7 @@ static int ia_pkt_tx (struct atm_vcc *vcc, struct sk_buff *skb) {
|
|||
dev_kfree_skb_any(skb);
|
||||
return 0;
|
||||
}
|
||||
if ((u32)skb->data & 3) {
|
||||
if ((unsigned long)skb->data & 3) {
|
||||
printk("Misaligned SKB\n");
|
||||
if (vcc->pop)
|
||||
vcc->pop(vcc, skb);
|
||||
|
|
|
@ -1,850 +0,0 @@
|
|||
:150000001F8B0808AB5A10380203706361323030652E62696E4D
|
||||
:150015007D00E43A0D7014D7796FA5BDE84EC86211A7333020EE
|
||||
:15002A00AD89C00A23EA83AA589C7E7C38D8152EB887477677D3
|
||||
:15003F0095C39C3DB2AB388CA324C4A509352BFBB085BBD0C73F
|
||||
:150054007210B903C92991CCD1B1C242255BCCD81EA5C34C6826
|
||||
:1500690006271AC6D36A3A31B976D4A9A683DB4B07BB38265C56
|
||||
:15007E00BFEFBDB7777BA7030B2733994C35737AFBBEF7BDEFE7
|
||||
:15009300EF7DDFF7BEF7769FFEEAD79F221221E1ED844C3E4677
|
||||
:1500A8007EA3BFF036F827CF8597C3AF0C7E920B16595BCE5AA8
|
||||
:1500BD00296B6483D83E9F7DBE8FF50BE74A0B45FB1F274FAA79
|
||||
:1500D200D82E2867139DF637FD937EF1D55FB0769FE8678BDAFB
|
||||
:1500E7007D9BD8885451515172FE27E4138E9FC9949CBFF026BC
|
||||
:1500FC00741DF83ECE59823FF23BF89346493F6B4F17C1B3A7CE
|
||||
:15011100B3B79C97D3275B5ABFEC3CF9579457703B3CBFEFD600
|
||||
:15012600FC38236CA91B5E347EDBFA67F7ED4397956EA4D3C5F4
|
||||
:15013B007CE6A567799EFFF5CFC4FF7BDF938BF83E83EDE59F02
|
||||
:15015000FEAC24BF8A3C3F2FF9FDFF933CF51EF2FFEC2FEBFA11
|
||||
:150165002341C38CBC5F4EAA265F5EAF04BC51F0059FD1419ED8
|
||||
:15017A00063493D465A2384E66A0171C30231F40AB5CB5646FC8
|
||||
:15018F005CBFB633DECCC614D2DAF622F15D3189EFEA3EE28B83
|
||||
:1501A4007D99F8DABE4D7C2418A438AF3129015D7507F1032EBA
|
||||
:1501B900E174827F46C82229AE2BC63A9D50E9253960EC005FCA
|
||||
:1501CE00F2EDFE0AF12A9D5EBD6A35F1B5AC441A49BAD94F22C6
|
||||
:1501E300DECB544F180D1A51FACD8C4A7C034B93DAFD6455A8F9
|
||||
:1501F8009AAC5AB74C9542EF11E23DB0946A0F1B0DA10BF0CC0C
|
||||
:15020D00F9A4A8097BCA1D751474A02FEC02593C75C9E870D176
|
||||
:15022200B8CF352EC3783C379E1C2893C98017C6A57B3CDD0E4D
|
||||
:15023700CE32426A9CB99F03FC2E81BF46AD0D06544FD0190B08
|
||||
:15024C00C0580B8E897EFDF490DE08FD652E9CFAE911DD5F24FE
|
||||
:15026100CF832469DAB1116BE0F3C437B686F8D275C437AC9220
|
||||
:150276000542BFF6CC0320B22AB7237E1F5B97A4E927A397490C
|
||||
:15028B0064C43AFF0CD8ACCE8886D37F632A7F4C16005E289CAF
|
||||
:1502A0003E491DDAFB083513C6B0A6B8E4929626F531E0877479
|
||||
:1502B50082E58C9E2503DDD45DC4777E3BF1051F253E09684E42
|
||||
:1502CA00C3BAC26825AC39F5225F6598EE23B366227C52ABFC3A
|
||||
:1502DF00BC2754E61BD1FFEBAE6DCDFE8D49AAEA38EE89A35A1B
|
||||
:1502F4009DF0DCF4254234681BBB09E98536033F2F3C5F835F24
|
||||
:15030900107E147E1AE8AA0406A36989DB63C95ADE9F9272EBA7
|
||||
:15031E00C17C6131AC4519193457028723BE118D0433D6F063E5
|
||||
:150333005C6E1C77EC2981FD118663B2FA3A455F8D11A2D66BC0
|
||||
:15034800AFE9B096E6D4A38454D70D004ECA8235541117C7A5F2
|
||||
:15035D002D26F8E4B07D3848BA956402FC7BF8EC956CB6B6D35F
|
||||
:1503720091EB21B280C218CAB04122B5957583D126189B7D88FF
|
||||
:15038700FB2BDA46560F52056C867C6CE85FF1135F19E0C948D1
|
||||
:15039C0023873342916798F3A6E45FA58C9021887DB9A8DF9307
|
||||
:1503B1002EECF7421F693AB054DE6F73F4FDF414E83A6B66B2C0
|
||||
:1503C6000B11C3BA0E45D0D1074E3318C92C24FE074FF267E847
|
||||
:1503DB00E03AE67193D635C40D9FD66A65B471CABA5AC66D9C17
|
||||
:1503F00081B68DE4F5200AEA316B3E3EF5F8D4CAF0C902BFBC6E
|
||||
:1504050003FD12ED00BE39F8E7C4E765F2A6F8BCC8083DA6B648
|
||||
:15041A00335DAAA0AFC4DEA66A6CDC8418EA26910FAD6A0821BE
|
||||
:15042F0012B4A9C269D1DDAC9DB05A98BD06B91D807702D6021B
|
||||
:15044400F02CA479BF88CD3D82BE3F92D49137C262E0EB5969BB
|
||||
:15045900D6AC8DA4F4A3A0EB808FEB8570E6F34897F9F77CE4C2
|
||||
:15046E0071E4E07C73F2C0FC256AC3208B2D5C834D43BA3F060F
|
||||
:15048300F39566B386103FC611E321E23D02F1168A79426C3DFD
|
||||
:15049800E159DA32AAA34C083FBA62DC2474847A94BF031D86A2
|
||||
:1504AD00ACE5EAEB969CDC4FF3F3216F03DE5414FD8ED3DA3050
|
||||
:1504C2005F5AC953795A804F2146D05612811C0DB6A0BC0E67DE
|
||||
:1504D7007C6E471FC3A5CFA04B06639EFA201E11FA182E7D3E53
|
||||
:1504EC009556913E89227D129F511FDBA5CF05970CF63CF54199
|
||||
:15050100BCE097B83EB64B9F4FA555A4CF60913E839F511F752A
|
||||
:1505160026AF4FCB4C5E0684CF471FC48B75737DF079C37C69B3
|
||||
:15052B0015E973BC489FE32E7DC231AFD997FEF15925301975DC
|
||||
:150540007CBC5E33F5D918F2E53E82FD69D1B745FF82E8237F22
|
||||
:15055500EC4FB07ED2A4626FD8C3F7363321FA29D11F14FD6938
|
||||
:15056A00D13F2EFA9D40678FFA1ACBD131181B507F88FBA8451E
|
||||
:15057F00E179507D8362EC4FC2734A7D8786D5D526CF431356CC
|
||||
:1505940010E6D51152BB2CE6690F243DED35694FBB17D6017487
|
||||
:1505A900B251C766F514A3D3037337AB67189D043C77A9E728AB
|
||||
:1505BE00CE3FCFE5A0C8B347ED17F9CDB09A812EE4A09AFBC861
|
||||
:1505D30005F3ECCE1F76B0B8059C6AD51342D87777BEC16093F7
|
||||
:1505E8002ED82B3BDF613094C9813DB7F3A50E87FE6A95AF1F58
|
||||
:1505FD00D259C69E53B447F047991EAA1FDDE8D0747091968332
|
||||
:15061200EBC88AB2D5095CA4FB07AA87ED030961D37494DB348F
|
||||
:15062700C27225D77D497EBF32958271CE6F8DA0D12CF612E37F
|
||||
:15063C00718ED32568206F3FDF874C7B477EAC4DD8310AE35B40
|
||||
:15065100C17E683B139EA3EA6178A6D65B4CA65926E72EF555F4
|
||||
:150666007A82D977D06A9A610E58F3D80D4F6BFDF4DDFAC37506
|
||||
:15067B00E7D67D672AA93DD881720C301B55C6E4D0860EB97506
|
||||
:150690007D5DFF3A0A636BD898CDE4AD4C7A42CBDE915B037587
|
||||
:1506A50087D7593056DDC1E5477B55429CDCF8B5DCFAAB15AFBD
|
||||
:1506BA00AE3B0263FFD3EE69AF8C5584FEF3FD0FDA90E6BFADE7
|
||||
:1506CF0030DB70FEBF9C186B43DC4BEFBFDE4682BD8C27C86F5A
|
||||
:1506E400B3BC185CC264063DED086BF730DA2418B655D6F63110
|
||||
:1506F900394850B53126EEFCD1AC2EBD1B83F83B6D56056C5662
|
||||
:15070E0027F079B3565739DFC3A2AC8D591AB48B37FD4097B6BD
|
||||
:150723007D4527CA41F38E00D6C48665887A30CEDA5E6BA09CE8
|
||||
:15073800EF7568CF8A7EC03FF80DC05F6B56078280AFB25C86D9
|
||||
:15074D00F863ACEDB32658DBC26CBEE04780FFEEB7017F9BB98C
|
||||
:15076200301001FCB0C5E54E5A0DD0BEC8D6618FD53893DFDBC0
|
||||
:15077700489D0A781A5B9B27616DFAD4435409C08E179C365B01
|
||||
:15078C00B86D2C5EB34E5BCDD0CEC0B98106CBBA25A29A87AEC7
|
||||
:1507A100676BD0977601BC4A7DCDC2BA15ED575E1DD7B78610CF
|
||||
:1507B6008FC715EE954F0A5CB4B78837139F9F079E8AEFA21E32
|
||||
:1507CB00DF9814679714AB9163E99F59FEBDE3263A704FFA4DF8
|
||||
:1507E0000BFAD400D9FCE1115DF1C541C7772D591DB7BA1C7929
|
||||
:1507F500D4BBCC1B9F701EC761BE22E4A1429EB736E6E5C1BDA9
|
||||
:15080A00EE92C09D74C933790B79222E79BA401EE8535A429E39
|
||||
:15081F00F3ABF2F23C2B785CC43812F24C0A799A5CF2E05E759D
|
||||
:15083400BFC0457F73E4C1E79BC91376C9B319E4813E4D9690D5
|
||||
:15084900A7D925CFE55F711E6D33B8A771799007CA73BC252F86
|
||||
:15085E000FEE3567392EE35506B935DE3E625D87B3AC9363DDC5
|
||||
:15087300675D387B325FEEC53DCA370CF1D064D2707F1F9E1BAD
|
||||
:15088800BCCC7732962CFCB60AF76B17AFD80C1694A4D6EBDAB7
|
||||
:15089D0047E58DFC1CEB75E1E10563311E21B6794C95704FA00C
|
||||
:1508B20031EEBF8BC93DD0270326EC0F8A54674771FCCEF0B040
|
||||
:1508C7007E67F81CD864D8EA401CC819480FE1811DBC76E5FDFE
|
||||
:1508DC00733A83FDD508D6AA24406D9DCF3FA75FCC66FD65D592
|
||||
:1508F100FDFAEE7BF332F5F0FDC225936D769033AD01550A3A24
|
||||
:15090600BCF12CBF86F184F305E007567C68E59EDB3FCCF1498D
|
||||
:15091B00D79F692B73E8803CC25E4CAEDA152370463A4A2DE42F
|
||||
:15093000AB34998BC0DE1BD01C0AA7C5715314ED0FC74F4B510E
|
||||
:150945005ED2BDC9319893001F18B3A2AE734B17D4E2CFA89EB1
|
||||
:15095A00D6B7245E6394E2F350520E95A6DD6079943780F65B70
|
||||
:15096F00507B1C857AE36D0B6B12491D8133EA88E6D41A72B92A
|
||||
:15098400A835607E52D421448C255D7548EE0F723FD656E84744
|
||||
:15099900CA3D28974DE33C4751AF90CFEB9603D61BE545BA8197
|
||||
:1509AE00906D2A44D446CA190BE550DE5F85B273DF637264CCC1
|
||||
:1509C300C15E487501388B928C8974B4ED9C4E8FD80F395D9B32
|
||||
:1509D800D9A7F6FDFD5482B3B6141B358F92514D3A30CEEA2EE8
|
||||
:1509ED003EC7B6108744E478BE6ECB98555F46FA54D0E77A23D8
|
||||
:150A0200FDE876AE1FE7932AE0C3EC226CC2EC98E676BC7347DE
|
||||
:150A1700DC0A446C361675F3A48267306C72595A4C85D9A5D310
|
||||
:150A2C006467AB60D0E4761AA00C1E19A6CFDE057584F27DAC4C
|
||||
:150A4100810A64F09F5845DD6B073896ACC05936324E1D3FC1D0
|
||||
:150A56001C843796C7485C2391FD168998CC2EAC0E807119F419
|
||||
:150A6B00A52D86899716E555719D1E5CABF77860FDA686D87D2E
|
||||
:150A8000881FD74839ABCBEADB34C06AE6FC196F49F9DC3367A7
|
||||
:150A9500FF9653FCBCE83E774E9DC198FD9433E7203F734E0EF2
|
||||
:150AAA00E7CE9BECEC19F9BEE5F8961C30A2634DFCFEA0D0B70D
|
||||
:150ABF00B82FA14CBDC23E6C6D4249E6574419B2081DA247F1E2
|
||||
:150AD400AE02FC0A7D81D9CC00FA74C84ADCC82E72F9336B3524
|
||||
:150AE90075186487D8A757CCC5B06FE37D56B5BAAAF912D674D6
|
||||
:150AFE0012F13EA3AE0D5D83985C9FF6B7B3DAEE31CEB713DA06
|
||||
:150B130045E420F33B90DB12700BE117C47D4058E0468A700568
|
||||
:150B2800DC42F87111EF0EFD1E316777D11C01B710DE2BE8F75C
|
||||
:150B3D000A5CA30857C02D84B709FA2B05FD06818B78F8BCDCC9
|
||||
:150B5200956F1A5D63F88C67293C4379C18FCAAB46C037862CF0
|
||||
:150B6700B497ACBCA2E37A07D5613B00F6AA091FED901553AFF3
|
||||
:150B7C00EDBFA257A9A7AC65C6076D814DFFADCBB131EB44D2FC
|
||||
:150B9100D3ED8D9966269B5D0C355EAB1CBB62393E5B09B92DA1
|
||||
:150BA6007D3DEB73C7C0B7A0CE95599D4AE7C4A388AF5C5E4121
|
||||
:150BBB001ACAA1213D513EACA16C353B1A2C279ED9DA634E30EB
|
||||
:150BD0002027A4DFC63C22E273C22A8E67F405C61362C61D27AE
|
||||
:150BE5002FDE11D7C365DC0F1591D33E2D4E5E82FD3B17230768
|
||||
:150BFA008634CC078AD84F31565642CAC2B3E0D3AC9E17310500
|
||||
:150C0F00F1F318F89BA8DF73B0FBC5B9E2E6B1D4226269A8F448
|
||||
:150C2400FD8D2B9E7ABEF0DBCFD57473E2296C3D2DEC7EBCF2E1
|
||||
:150C3900AE00DF13950DDEA802CFB7FA713CC25A35E0ECA52AC3
|
||||
:150C4E00D412F544A96ED2E3655F78CA23E0B4C678CA19C73BC6
|
||||
:150C63007A25DCF084ECD008279EA8719E37E5E1B9FD8ADDB182
|
||||
:150C78000DC0764CD423AADC4D73B519BFDF7C84EDF7B3589BA5
|
||||
:150C8D002978178F2324729206D4F666ACDF181C6C7FFDBEF62F
|
||||
:150CA2003F04FFB4091D3E8BEDE2C8A08EF7A1481361354A427E
|
||||
:150CB700BF0075C79CFD52F0EFBA09FFF58CFF80C9F2281DB6EB
|
||||
:150CCC00918E943ECEE946809780E173BA047D6A637DC3E9E326
|
||||
:150CE100FD30D41426ABD5A0BF066353F5B7AD57AB426111E732
|
||||
:150CF6002175793BD0A435CA01DD9101E36E51513FF72CF85916
|
||||
:150D0B00533FD0D6AB0F846AD4079A03EAAAD056276FA94F71C2
|
||||
:150D2000DA82A6E43B3E87AEF48FB786AD4E2F6F75EEA36584E2
|
||||
:150D3500837D8F64208743DE10F7CD8B56A7E5565C0F7627CD82
|
||||
:150D4A0071E811C84132E2404C200ECA9A85BA8E1AFB35425244
|
||||
:150D5F00980BCDECDF9F97C1AF71CF55D02E2C2EA660BF823D2D
|
||||
:150D74006135190E61FC6476BEDEE1BEA7FD9C787F107F84E908
|
||||
:150D89005860EF2C9930495D2A9AA76D08DAB6C1624F81FD644F
|
||||
:150D9E0072445B638C94A45D2168373E42BCEE7D285F5F65CC2D
|
||||
:150DB300E4D7B03E3172F5C9FCF381CDF301E856321F28AE3A51
|
||||
:150DC80028771E688C4A5BD641CD07B107B58A72379C210E6DFD
|
||||
:150DDD00D477415EF648712D0AAD1C4846132A3F977C1772DDE5
|
||||
:150DF200B1E4C7CDE4EA10BDF6B5FC7B8D3D5FFFDDFEA623C476
|
||||
:150E070037F149D60767196DF37D72BB73D787F76764B77176CD
|
||||
:150E1C0012DFEDED4E9E9D62ED24C612B4E9B319F6CE0FCEC553
|
||||
:150E310060A795E28EC5592B49ACD55EA03DFBA77C1F408D2F19
|
||||
:150E4600C19925111ED61AB1FD22D431CC768DCC76686BC46913
|
||||
:150E5B00025948755C5BFE89B05F4C62F603E3079A805E15C03F
|
||||
:150E70007F7E9F7C2F5BCFEDA2BE82166B17AC59900EF6BB59E8
|
||||
:150E85003D95F781473ED50706C49DFE70491F5072FB7DC6422E
|
||||
:150E9A009DC136B6B08D2D6C630BDBD8689B72C8E56E9F99AF8B
|
||||
:150EAF003DF1DD13D451C14A757F10CEF8BE3C6C2DC00E06535C
|
||||
:150EC40005B03F02D8D1E09803AB42582DC056042711C6EE3D4A
|
||||
:150ED900B87DDFFB18EC09763DFFF15CBBBEF730F18D7D8C764C
|
||||
:150EEE006DB877BE7ACD579F7809FF2813FE1105BE17B615CA1F
|
||||
:150F0300D922135F23C8E20159979490B511E67899AC4DF7DEFF
|
||||
:150F1800CE1ACC57DEDE12F2960B795F0759976C9BEBCF06FAC8
|
||||
:150F2D004B095F8E5DCBFACA408FC8B5B97AC4804EF81AEAE194
|
||||
:150F4200BFF7767DE976F4E929A18F2CF4F9F956E2EB84DF675D
|
||||
:150F5700E1BFF97F4127B5812A6A1365EFE620074AB029B701EC
|
||||
:150F6C001CFB32E934357C0E6AA60AD659AEEA96A26EFA5B76F9
|
||||
:150F8100970E79676B6C88BD2B8E7D53DCF73CC76A5433FD0D60
|
||||
:150F9600A89D643847E33B55DC9401EF62EC9455F5C419EBC295
|
||||
:150FAB00479C3601BAD9858639057D89F7BD631F15CA33267057
|
||||
:150FC000DF83B68B244DBFCAF9118DF3433EC8CFDE5DC86F3932
|
||||
:150FD500E0553D71CADA0AFC3441837EC4F9C5043FE87BDDF609
|
||||
:150FEA0054843DCD3FE1EFB8AF3E440AC61789F15D62FCBDA29D
|
||||
:150FFF00F11A31BE558C8F158D2F16E34D623CC1C63366D79E29
|
||||
:15101400FC793F0B3A5202FB37ECD5DEE52452707687BF81A5FC
|
||||
:15102900B646E14C41EA923BF0AC5963EC5F87EFF53591D70ED8
|
||||
:15103E002C9DD53AC22F873A5DF7E92F4C3CF113B4D573BB2F35
|
||||
:1510530075045DF0CBAFFEF57584B7EEF84987FBFE7DFA8D6F83
|
||||
:151068009D40F893FFF0E30EC2BE871834E3FFFC179BFC0163E8
|
||||
:15107D0047B297F8269F24BE3972BAEE17827F59B87FCB380E23
|
||||
:15109200F9167388548D39197231C24AECC74EAE81B351FBEE40
|
||||
:1510A7002DE2DE07700F6C19D52A638F065F811671F66EE7672C
|
||||
:1510BC003C1C73CE320C5644AF8EDFF7F1EF332E0FE8F683F8F2
|
||||
:1510D1001D01FB1640C47E8ADD2918BE51B6571056CB2419BE69
|
||||
:1510E6005F39CDEE52768B7B1784A9EA283B4BED71C18202D67F
|
||||
:1510FB00E7823509D8DE99FCB707866B1CED4B26086954472D8C
|
||||
:15111000370CBF436C2882554932692E84518A67BFD838550E10
|
||||
:151125008DEA2D3826F4C6EF6508BD9BD99D8AF91FDC58F453B2
|
||||
:15113A002F9B9FF345D18A7E649C4A07F09C0338ECFD3DE713EE
|
||||
:15114F005647E93EA827B19EC2F3EE65F0B7441FE9C6F74ED3D0
|
||||
:15116400397FE1B66DACE2760DA74FE6E40CA74FD3FE2DE3DA2C
|
||||
:151179006675DC72D37C79E98086FB33D28C15ECEFA3ECEE6226
|
||||
:15118E00AB80ED1132EE113206605F6732E27B2576864DE1DED8
|
||||
:1511A300CF6A05B6F78BB51C106B298B6F2998CDA06605DE16C5
|
||||
:1511B8007EFF9280338317CFA17866127A7845AB14B5176F64D1
|
||||
:1511CD000BEA546EDF93EC5E0EF76903F4C3332E3E3B30F2F086
|
||||
:1511E2005C58991BC6EAE794D509272B493C6F56381C6C66A124
|
||||
:1511F700DD6A33CCCE0143C8C160013B1AD89812E727389FC223
|
||||
:15120C009C5A03D60DD688B591717321D2A3A356297C52029F42
|
||||
:15122100E4F0DFE4F605183C5B7B9DCFF944FCBD20F4E4B19C55
|
||||
:1512360062758BE4E804CF57A514F3F7A03F3FFEF296FCB8034D
|
||||
:15124B007BA9044C7E782ECCE386B9623AE7DF22A69C7875C78E
|
||||
:15126000727F512C633B25C66E36C72831C7196BC4F68BF9B97C
|
||||
:151275009590BB8DBBC902278FA04D5E747C0E9EEBA7E37AAC39
|
||||
:15128A00687CC1E594CE69A4CC1648B68998A71B7CAC06F7016D
|
||||
:15129F0073733E27A17F605C38637DEE31F6ED1BA7C35A178D76
|
||||
:1512B400CE221A8E0DB80F7298510C037A2F38307F1E66948027
|
||||
:1512C900555617C250A7FD2E9D1D58BC04ACBCDA0D334CBB4EC1
|
||||
:1512DE0026E1D5C23EB08F60CEC0B8F483CF634D85DFE4B17ECD
|
||||
:1512F3002015AD75BD4B225584BD3342FFF533FF1D311D3FAFDB
|
||||
:151308003C84DF1BD87400BFB50BF35C568A8672DB34600CF7B2
|
||||
:15131D00176514F12C2D1717498AF91CF3E12ECC25D0C77907C1
|
||||
:1513320097A634461F7DC54F6829B8E2829B6EFC25A5E10AC018
|
||||
:151347007B9DEFDEEA788E75DB6BAB74137BF94BEBBAE0B20DCC
|
||||
:15135C0067E4D1BE83504BB03C301FBBFD1669A19EB75A03F3CC
|
||||
:1513710076E4FACCB40AD7D51679DED9AB793E2EB475613E2E11
|
||||
:15138600210BCCE1B2A44CD602ED85480F6ABE927628814F729C
|
||||
:15139B00F885F2ED75F91DC6AF543D37BE49F5DCF82EAB9E1BB7
|
||||
:1513B000CBA404EC15DFDCF8F654CF8D65B90886F847DC73F32E
|
||||
:1513C500EF3C2B79FD8531CEF706B469BD6BEF83D6D825BEDF9F
|
||||
:1513DA0020AEBD50291A935D63FEA231AF6B6C49D158956B6C58
|
||||
:1513EF00B922F611E52D4A1493CAEA307BCFC4BF63A4F41A6BD3
|
||||
:1514040007E9F532BEE765581B34A1A82072F5889E30C635FCEE
|
||||
:151419005676B13CA21F2B1FD78E854735AC55BE639CD3BC1730
|
||||
:15142E003FD0192E201F360E68CA5653AF81BC5CE97AFF8BDFE1
|
||||
:151443008FCAE638833F17AB0ACDB8D613DFFBFFD37DFC7B9AE7
|
||||
:1514580058EEDB1B80CFF0335F65F2D7CDCB92DFC4EF4EC4B7BF
|
||||
:15146D003313ECBB277E5F3EC1BF8D080E50FEBD0C1538830C25
|
||||
:15148200A7D7F57E03DF9F3F2BF84CCEE17347011FFE7DCD0460
|
||||
:15149700FB7ECAE1630B3E5D820FC719345551A725A13D119479
|
||||
:1514AC00BA2B0E8DE8FEF02AFD353C9FC4EE6E0BC42A425745A7
|
||||
:1514C1007C5D8ADD139A85672FD8BF5E8BEBD433DA5719F3B4AB
|
||||
:1514D600E33A292ABE8B033BBE097935297577A9A72C388AD66C
|
||||
:1514EB00C8CA5A88EB03B42E7CB0ED30665CA5DFC46F5D37FF53
|
||||
:151500003B9CEB22BFB41AD45F5ACEFBE836F58015560F5BFEA9
|
||||
:15151500F408FDBFF6BE3E3A8AEBCAF355AB5A6A498DA816ADA6
|
||||
:15152A0046C2209588708447715A422648964C43182F78306934
|
||||
:15153F00639CAD12C26EDB644C1C26A3DD61E7704E58BB255AC4
|
||||
:1515540020E10729D548462638B4B064E30938322B123C47248E
|
||||
:1515690062E275F02C61B48CC390C4269D19C626332456BC4A65
|
||||
:15157E0086CD38F4DEDFABAAEE9210FE9839B367FF58D5D1A9A8
|
||||
:15159300EA57EFE3BE7BEFBBEFDEF7EEBB657887B6D5087BF17D
|
||||
:1515A800081FA63A83A941B22B5F3491CE945E0EDF6E779BEBA1
|
||||
:1515BD00BF3ED0EC2E5FA1FD996EDA75A02C9E5157FCDBF00DF9
|
||||
:1515D200AF6E8D4C2B5F4CE523EA336693FA8A5DBE77C6F2D17B
|
||||
:1515E700E31818D5AD80254CEF6AD47623AC7673ACFB9A2CD1D0
|
||||
:1515FC00A6A93F37BD12FC228E7293F5B5C9B184594CF2CC8307
|
||||
:151611007DE9E8A0E98BF59AFED8A869EDDBB8F9F8A4CDC7F152
|
||||
:15162600297C9CE1DFB1214D71F16F51CCDB98E151EC1B61AFE5
|
||||
:15163B008478348FE466095BA45B7DABB6FA16196876F3735093
|
||||
:15165000ED364231F94E6BBFC1E0F0E51DF97BAC8FC45BA1DF9D
|
||||
:15166500AF6E60F987CA929AA22E16B459053AC0F5491D31629D
|
||||
:15167A00EA5123A26EE04A68756B1FE9A75864EF1B7F41737C57
|
||||
:15168F00777BEDF1DB6FF95B14BBFD285AA9BF3945A7743575DF
|
||||
:1516A4008C67CB1C31B9ED0FE7E415FB9AE349AD9878DC5D3E9C
|
||||
:1516B900AAF61A1BA87D8DE0D0D483F47FD56853AB8CED6A8D70
|
||||
:1516CE001157EB8D2EB5C930D45544BB477493FD595B754AEC79
|
||||
:1516E3009FB6F553FEA43A6A1C51B9D1F7EC515EC28EE97336A4
|
||||
:1516F8003DCB17BC759527367D92772E58CC776DAAE5BB9F6D89
|
||||
:15170D00E05D6FADE04F2F38CEB166F2B91FC0892426ECBAFDF3
|
||||
:15172200CF9EE2FED387F59EB7F6F262B677A91B2E3205F38BA3
|
||||
:15173700D455CD99B46807AF92587EB13B4D74A083F39BA4BF13
|
||||
:15174C0071217D43BA16EB3032FB606FDDF89E191DFCFD821912
|
||||
:15176100EA235E1B79279D5F953C6C88B1053FE0CB37DAD7F014
|
||||
:151776008388129F788B3A85AE7290F2BC1FCCFA9DF8A6FB9DCA
|
||||
:15178B0010AF1E14B65E3B7C7A4CE13F4D63DF4B32A32F49FA86
|
||||
:1517A0006CD3104F596B5EA6DF3A5F31A744D87D9326DEAB6A39
|
||||
:1517B500027BA94167BC63FD5E8B55124FE0EC483B8FBBDA56CD
|
||||
:1517CA0066F0C3F1C5A85D3127C44DEC57F6A9528B323AC0AF33
|
||||
:1517DF00D96D627F734A9BF4DE37ADCDE9FB071B5CED3357FB1F
|
||||
:1517F400EA0CEDCBAEF6E7CFD07ED5C76C1FFE3589863077601A
|
||||
:15180900010C3BE65830CCA7B6A6B7AF8CBE28DA526303A46BCC
|
||||
:15181E000CB732A5D384EF8F4CB67188DA9D1F1B309E5EF06B13
|
||||
:15183300E1D331E9F6F371EDCFAC7D2AEB3F22E52774A9ECA464
|
||||
:15184800BE7EACB3D1B78E0B5D46B92FA995EC18E1511F8B60C6
|
||||
:15185D007C96EC18E4317A866F01F21B296F0B337E6D62EF18A4
|
||||
:15187200699E6969D4D712C77F24188AB5865929DFD939B88DCC
|
||||
:15188700190F70F08FFA790234A4B5FACEEDA1F64EF292D096AF
|
||||
:15189C00D6B93B8EF208B5118C5B3A33F2083F10E3707FF1B807
|
||||
:1518B10021F67738C13277473D27B9DDD6B177ADF0F3098696FE
|
||||
:1518C600B576DCFB29FD3CE1E9B598E74ECFA5FF20CE4084AD8B
|
||||
:1518DB00730562BF0D739DBD9F2CF6434331A9B94059AFA36E52
|
||||
:1518F00094654A3397A5C37AA7381BF0B258170EC2C732BA3C2A
|
||||
:15190500B35621C717E9589F484C785A426F35F0D08A7B74362A
|
||||
:15191A003E6286562CB6FD5AC4BA96B557611C3597624F3D3A72
|
||||
:15192F0018BF4DDDB4043693D88735068633FFCA603C4875F9B3
|
||||
:15194400F32BF52BE974E08DE57AD3E34F7A9A1C5A5DA0BEB02D
|
||||
:15195900F0761BEEB69BC2EDB954A1CBA79337C21E5E6686ED09
|
||||
:15196E00F593E9F04346032FE883D59719FA30FE0D731DFA6039
|
||||
:151983003C175F29FA10113028D1B80EF80D35A70577C08F3B83
|
||||
:15199800F15EC92CCC25E37BF8E0EFD285428F540EC7C7976FC2
|
||||
:1519AD00AA1FA5BEADA2BE39EF77FCCE75D410FE24048BAFE8E2
|
||||
:1519C200A8E085B93B4EF00999C598B16838A00CEA993335F4F6
|
||||
:1519D7005B8D25E8FD31FE3EDEC37710FB414A3B6C06E386DFF9
|
||||
:1519EC006E7FA97D597EF71525048FB3FA041F233316FB9D6202
|
||||
:151A0100BF69D883FD6A137BBB57D3E950D6FF89C6CBBFB17C5F
|
||||
:151A1600625F767D5894CF961DB6FF8DCCFFB4F5E2B6988F27FD
|
||||
:151A2B0053DF3715E2733535305C1CDA4EF56CE1C154A5312B41
|
||||
:151A400095D3B22AB5D80884DA88DE63A2CE10CDC92CFAFBFC5E
|
||||
:151A55003519FBF21A87AF8EFCFA2384C752BE16FABD021FF809
|
||||
:151A6A00A8F0B5EA8DD7697F1EA96DBE47F5349FF75EE1A1C844
|
||||
:151A7F002797826E1BD2E9C249C9B193BA8D3CD02D2AEF32DA11
|
||||
:151A9400E013B89683D6C85743F9CEDAF9C2A91554EF6A739572
|
||||
:151AA900C573C38286F6BD26760FEF16FB8295246F5682A68619
|
||||
:151ABE0045C3A9F70E09EB8657787A391C7107881F3FAD4DE607
|
||||
:151AD30058F517F101FD41755663B13AABF6A5CA924673E18293
|
||||
:151AE800C657F18EE018BC9E2E5CA84A8D024E85F4B072A3D58F
|
||||
:151AFD00C7FAF9E51FA7F333E7F1C60F5B7B8DE387CD4365D585
|
||||
:151B12001AF58C63BFABD7AE9FCA37A32E8DEA72F23AF9B6524A
|
||||
:151B27009E7D6B06B45D34C6D0875B49E64D6F6BFB8FAD3D8A0C
|
||||
:151B3C00522AFFAA64C185737B5D180BE37163BE7F500FFE6E98
|
||||
:151B5100BF8101BE3AF5A2619DD34A3333F282D647F5CEF3D710
|
||||
:151B6600E8A42B97C0D7BC865DE189C837DB70F62E89B1BB66B3
|
||||
:151B7B00B16E12AD72D990EE25FEC7DE506364A89129CF59B491
|
||||
:151B9000B1F5378C6159F0994A70455A05FCCA73E69B3F4AE70C
|
||||
:151BA5001FF558FD5C49B46E9A81A6B751DBD3FB34F8A3B4D82E
|
||||
:151BBA0013443D5BEDF2F36252A3779C6440740FF7F8137A2424
|
||||
:151BCF00B59F375D4AE73B6573699CE02CDDA88D779CE714B2F2
|
||||
:151BE40080F0E0E4E9A777E2D9788AC77F98B6CE3F529E37DF4D
|
||||
:151BF9009F8A7BF0E04CB012FE4B4A53ED46FD050BE783D3CA28
|
||||
:151C0E008D02FFE07371566D0F77708D3371AB530326C73E7BDE
|
||||
:151C2300785ABF5957A6DF472F5AFD06ED515F1BD55763D34CAD
|
||||
:151C3800F0E6A0C59BF04B97D6FCBE1EA5F7B73AFC67D3C2C2FA
|
||||
:151C4D0063B60EEDA2056B1BF1C4C8BF583C31CF5FAF8706A432
|
||||
:151C6200468737B662BC5BE73B6DDE209D3F32A42D64279AC1E8
|
||||
:151C770017C18661C10F667CA1E6EB7E519769AE5C68F381E5DB
|
||||
:151C8C00F73A95EEA493FA42CA61E2F9765E447C116CAFD595EC
|
||||
:151CA100376C7C3BE3C15506F6D44CF8BE1DE39DF203E737B4A5
|
||||
:151CB60043E3E928D5E9F8D3E4BA78631BF186FAA6C51B12E1DB
|
||||
:151CCB0057B67963EDDF5AF8157B568493CBBFCDD20FF5CD8A7C
|
||||
:151CE0006ED1B59F7CA99E649C599D5A6356A5569824E74C9214
|
||||
:151CF50083C60CFB4DE21C33F4143FD901C2276E063F6FD2937B
|
||||
:151D0A00785E51B7DE06BF4CD2DFA09749F9033AF6B5BAEC73CC
|
||||
:151D1F000BF02D7B50F8330D0B5B4AF877E34C34D94F87CA4E3B
|
||||
:151D34006ACC1812BEDE4AB2D384BDBB2A794AE877F1E410782A
|
||||
:151D4900728EA2769AABD453A641F712E388FEAA6ABD67954398
|
||||
:151D5E00FCF24DF43FD8438150B4750FE66FA58A17939CAF263F
|
||||
:151D73003BE676F8E23B7633D96915DA55BD27B2BF0DF8F35FD4
|
||||
:151D8800C8DACDADEA7DE6DB3F93EE94957BF52A7505AF225DD7
|
||||
:151D9D00FE92EA6D0ED2FD5BF04514E36C0F2F3D9FCE7FAD5214
|
||||
:151DB2006E249BDC207BD698C78EDD15211B50B6694D76AC01A8
|
||||
:151DC70059D9E44A433E25146EA53ACD2ED5DFECF8589692BDD0
|
||||
:151DDC009BC72C3D0DBF8F52DDBB95A7DAA08F55CF618580CB48
|
||||
:151DF1006D67BA6DCCE80FAD71D029F257F36BC5AC9029EF99AF
|
||||
:151E0600412A0399E186C9E2BF7A7E3BCD0B800F7004D5970D68
|
||||
:151E1B00F4218F781FEBE76C7C31749E6068C5A774F41D7A90B7
|
||||
:151E3000F774834E6085AAA82E21038C1E1E559FE1AFCE26DABE
|
||||
:151E45002BC46754DE6907766090F41F4A33DD6DDE934E8B36D0
|
||||
:151E5A00855EA51C364748472B8FD9B22C6AC939D4D9361BEBFD
|
||||
:151E6F00F6614A3B2CE0F2B2BD7A0FE08AEE3121A71CBA396BC1
|
||||
:151E84001ED13740BBF704ED707E5C55498F573A877DEA1DA687
|
||||
:151E99007705E940D1BDA26EE8F5D0E9FDEAB366CD75A929AB9C
|
||||
:151EAE00CF583470F0EDA6C360C0F2BFBCD97B1E60856E7A0042
|
||||
:151EC3009EB1BFA139D2A117E495526526D6701D7AD4E49355C5
|
||||
:151ED800774DE7D7A87D9E2F9E7AC72C095D6CCD49922D7DFE54
|
||||
:151EED000A8D8D2FF00AED4FF425B16FF37D9D27DAC43E90ED91
|
||||
:151F0200971EA6BBB087B08608C28CC1C77DD80C8BB3DCDF30DF
|
||||
:151F1700E684CE50BB3F249952DAEA8B3D493AED72CC2B66C792
|
||||
:151F2C00BD0F918E7BBFD171EFBD7A774A024E857E9B87392E76
|
||||
:151F41001CB5F5DB2ECB2F8FC66CCCF6B31F16F76ADB0638627B
|
||||
:151F56008CDC073B2B4265B6087D3A2D7C44525C444EC819E394
|
||||
:151F6B00E1582D9F9DCC69093CBB9E074EB7E852F2040F40BFA2
|
||||
:151F8000879E7C1F7CD25F163EB87DEC9B1ACABD4FCA53DF677C
|
||||
:151F9500BF69EDA7517DFBD97734B6ED1847F4903EF66D0DBA40
|
||||
:151FAA0018E4771F7B4D832F2DE089920E87FC80E55689059E76
|
||||
:151FBF00227915185BA9DF4DFDF12B8FE8B2FA9C81BE3A7E50F6
|
||||
:151FD4002C7A9FD931EB5EE1039C4F3031638DD9C70632FE501A
|
||||
:151FE90028CFA2CF99AF125FFACE8DE86CA4D384FD04FA0FDB39
|
||||
:151FFE007BCC68ABE8524AEFCD7941E8F56BB1AE3C72CC1C63DA
|
||||
:15201300225F1CFA3CFCE2B0B78867D80758AF213917C7BC7364
|
||||
:15202800ADE27073B9EA69F49D233DBCFE18A7726DED852B5BE4
|
||||
:15203D00A05F930D5A124DBD635468DFD3674BCF0B9DD8E33F85
|
||||
:15205200A1236F09FC1BEA87903F7270672FCD457DC236050FD3
|
||||
:15206700887764234E923CF49D3BA8CF3BF79CCE2607054C382D
|
||||
:15207C00EF437C2564FC1FC6D6365978F986E13BFD72960F9219
|
||||
:15209100DE0C1F84C007842787F6BEC82ABDABCD63D111F4336D
|
||||
:1520A600BA4D879E4FB31735879E2CFA0D73103ABACD2B53F1A0
|
||||
:1520BB0067E1EDABAFFF9186337253717644E0ACA44DF848DBB0
|
||||
:1520D000381B06CE026CFC581CBEDAD79EBC7789A80FB6CCA84C
|
||||
:1520E5008533165D346CFD77F65B733B1B9E3B7A42E047AC7FA6
|
||||
:1520FA0019C7CC02E8C5935FE16F104B127F9414A53CCDC0ED45
|
||||
:15210F00E39E2796FE69CA736728E66976F30978C373E91DDDF8
|
||||
:1521240027BDA077AB599C04A78C0DCBF6035D2D7EB6C60AF085
|
||||
:1521390094E1F5E9769FBDEF6EAAEBEFF49DBBAAC367D9EAA701
|
||||
:15214E00C1710644E83FE1301778D9F669AB7FCA401C6BEB2D2E
|
||||
:15216300EA034BB0FFE1659D7A70C75745FFD8E6E778EFD81756
|
||||
:15217800493E7CD174D93BFDC2D6C19E36E18245474CA78E203C
|
||||
:15218D00D951852E5C8C117F2797AF6FBA7EDDC2C76FCA9FA8EE
|
||||
:1521A200DD40FA96859FBFD7EBA4273F003FDF27FC3CFFEF82DF
|
||||
:1521B7009F97809F7577E98E6D9E6661CE267F6EE1836CE6DE14
|
||||
:1521CC0038EC050B1F0BD8223DF8FE62818F9C68A95E1E2F6F3A
|
||||
:1521E100BE45CC71FB782CF5AEB9ED97B0974B5BE9D9807CB1CE
|
||||
:1521F600EC1FC21BFBE32C0F2A583310FF84BB0117EE5E369D99
|
||||
:15220B00F6A6E3AE9770B78D70F77736EE2E12EED07EC8D5FE2D
|
||||
:15222000B55F586D4F6DF7056D5FFE505666DC5C56CC71C98A24
|
||||
:15223500A64C3EEBEC74667C2CC4BAEEBAE7333244D8E7E3545F
|
||||
:15224A002E3EA44D2EF70AD8204B204722A4E3418E604D0A67B3
|
||||
:15225F002050EEE9944B9EE4BCA461FF0FE736F05EBCB3E449EC
|
||||
:15227400896FDD4BFA016A5BC8946D4362CC627D0A7D2E76F53C
|
||||
:1522890059A63EBB65CD74FFA551F8E6285C2FBA64E801D20F34
|
||||
:15229E00FA9232F547354EDE27F4CA906B8F8C063EE99034B72D
|
||||
:1522B3000357276DFE4079DF42962F8FEFD495F33BB5A9FEFC1E
|
||||
:1522C80086B0357697F56B42B7945917703526D65C86E20BB10B
|
||||
:1522DD00A743632327752C2EA74EC47D7ED27308BF05F1A1C669
|
||||
:1522F200E2A841F301E73D29B94556137CAEF217382B182AC2CA
|
||||
:1523070019BA0C4C5161776CC799BBF2D5ADD0B1587958D821CF
|
||||
:15231C00D095271EB07C67AFE15EBE8CE6DDDF3F207CF7C2EA17
|
||||
:15233100F1D40333FB731B87B07ED12FD62F76931E5C34D629A3
|
||||
:15234600D609D8B89C301A8E58B04787E245F06FB4D33DB1A12D
|
||||
:15235B00B8D2302CFAD7C3F66A384FE85B47F3883104BD08739A
|
||||
:152370008C41735BA67FC591C146A7ACB58F9B79BE019E6B8741
|
||||
:15238500B2EB31BBCB86B5A2B80D8F711378285D215B1AB0B83F
|
||||
:15239A00DB94ACFD988ECC5A8DBD3F8FBD68567ED2DAF7B4FD65
|
||||
:1523AF00110977167EACB5F4A978543A0F4CF12FA27110BF1F74
|
||||
:1523C4007D305A31164897E928B77CA2E21D94DE1B4D6ABE22CE
|
||||
:1523D9004B2F4B114C5772E258F32AC4FBE87ACB96C1DAC1428D
|
||||
:1523EE00DB8F6AB5E09123F1FBE89D03BB809BF26BEBC51EA3A5
|
||||
:15240300D8075C6BE7D35DF956A45EE8A0FF38D28DF558CFF983
|
||||
:15241800761CF31EFA82FD4FC0D1BB73480B8ED9F050BAD3EE10
|
||||
:15242D0016BBBE9E19DAED77B5BBD5CEF78C2BDF4A6A17F99220
|
||||
:15244200AE7C6D76BE8119E05B99FA661C67108E0818BF1BC70A
|
||||
:152457001ED815824521F89E16BC734CF8CDF47E8F6065D6BA3B
|
||||
:15246C00E01517ACDBECBA5F9C01D661170CDBED7C2FCF00EB9F
|
||||
:152481004957BE1D76BE573E0056D0D881F5EA87C07AD5056B9E
|
||||
:15249600CAAEBBFDFE1B61EDBA3F0BC3653B5FF7FD37A1E7FD24
|
||||
:1524AB00597A5EBE093D2FBBDABDE2D0738676FB5DED5E75E845
|
||||
:1524C000799376B76CC0F81A050E8C0977BBE8AFBD7E8F74875A
|
||||
:1524D500E71FA7FCFBD95086E737782D9E7F5FB2783EB621DB46
|
||||
:1524EA0076D46BB5FDF0860F681BFBA576BB4E7B93AE7E6EB0F7
|
||||
:1524FF00EBF8E2CC751818B38E6FCEB5E9328FE4CBE5C1ACBCF8
|
||||
:1525140013E359ACCD22E69421FC099832624057F1F93BF5DD6E
|
||||
:152529006586A6D0FCA0AC3DA597F213FA3E9A12DC32E809EAA9
|
||||
:15253E00D74CB2C729179286B4FDA437825F2CFFC7BD644B24A5
|
||||
:152553003BE0EFBD52D4959D1BEAA82E0FCD0B19B94A7A896F04
|
||||
:15256800DD9090A9429E3AF3451CF27448C853650DC14F725439
|
||||
:15257D00723D4F9D8FB0DFDBAF4965869EC61A18F6DAADB37498
|
||||
:15259200F6DC346CB56FD8F234DA678A35D5F121C3EACBA0069B
|
||||
:1525A7007F17EC0B189897C85E99ABBCA2FB48E7C6DC34E37C24
|
||||
:1525BC0032945D0FC73A1CF6944270D7856FBEFD9BE6F339D379
|
||||
:1525D100D7C2AD75DCA3864CF348A0419C756301E917FA933497
|
||||
:1525E600B72D10BAC911331264D1D7688EF6150D0A9F0E2B1601
|
||||
:1525FB0058B5D807DA5DA66AAC7E2F6F13FB0B3D64EF579AE254
|
||||
:152610004CDCFFEDFFC3BD1C30B36DEFF238D159C0EE7ABF99F3
|
||||
:15262500F4B6E5F4FECBEC1F9722C609FAB0ABEC88735E5915B9
|
||||
:15263A007D237D48F44321BBE2E3FE0FF4F29215EFEAD9B4A1AD
|
||||
:15264F00E175B1F412A7AD0ACDB2D53F4A5BF1E48D7535C6BE43
|
||||
:152664002BEA8A7E40F918952B5D33B5DCEDB18796587433CC8C
|
||||
:15267900D5A09B5D2E4C79FDD3F2D6C52AECBC2A17FB43365DAB
|
||||
:15268E006591AFC75C3061C77B237CE26C5D5D2CAF51ECBDC060
|
||||
:1526A3007F53E44F7092F13109F989A7113746B6E2C319880F2E
|
||||
:1526B80027CE3F132F89B399E383A67B3FA9F5886B3F087BA603
|
||||
:1526CD00DB388F603F272A6C1B71BE5251E0FF613FAB3807990B
|
||||
:1526E200DD0FEA75955F18931B9D3D21D421AFE17A8F589B1E44
|
||||
:1526F7001C9E74EDA33AECEF63A3F96FC977E57CD9F39EF47519
|
||||
:15270C00E951E9335250BAC6FE8EFD35FB2E7B990DB1AF319314
|
||||
:1527210075B30EB683FD2929DA5F628FB147D9436C23D3D8036A
|
||||
:152736006C3DFB1CBB97FD015BCDEE66ABD84AB6822D67CDACF0
|
||||
:15274B008935B206B68C2D6577B07AB684D5B15A16669F66B73C
|
||||
:15276000B34FB11ABA7E8FDDC616D355CD3E49D7AD6C115D55E8
|
||||
:15277500747D82AE857455D2A5D25521AE72BA16886BBEB86E5A
|
||||
:15278A0011D73CFB2A1357A97DCDCD5C21FB2AC95C41D735C7EC
|
||||
:15279F0075154FB902D32EE5866BF60D57D18CD7AC9B5EFE0F7A
|
||||
:1527B400BC0A3FF42AF8C857FE875E3E26CE181FB7D6B754E111
|
||||
:1527C9008B4EBA3DE9F151A61E475A15A519F673353D8FDBCFB4
|
||||
:1527DE0035F4AC48F48C35BEF26ACA1FE1065BCDC7C95E5024A0
|
||||
:1527F3008D2BEAC2E34A8CFE93F49F5A785C8C2BB11E522DF667
|
||||
:15280800DB55D54ECBB7D3244A8BD96905769A87D292765AA167
|
||||
:15281D009D964369A88FDA14B02B2C1AB6EB825F60D8AE037E98
|
||||
:152832008061BB2CFCFEC254262AC16651F9F04B5828BD8D33C0
|
||||
:1528470075E1016F6899A8272AE2EED41AC549A9CE776631CD9E
|
||||
:15285C006B95077C671A843C887FC0BBE10F78073F38BC2BA2B2
|
||||
:1528710077946E225D7EBD41176D8F2F361DDC3938473FC66D43
|
||||
:15288600189561411343153E7661037E200CFD1465C2ADC02FED
|
||||
:15289B0070A878ACFCA96FDBEF99CA9BD485A661D7C35EB1D235
|
||||
:1528B000A3942F8A754A65A129FBC8A6BFC93D2A65F38CBB9EA0
|
||||
:1528C500154FF6D9B0D345FD63E9D988ED64F947AA7C42ACE7CD
|
||||
:1528DA00A8563C48B12EAA8A5891B9F6B3F043F310AF617D2323
|
||||
:1528EF00BC8C477FE16109CF32332FA4B6CA91067DA2B241C487
|
||||
:15290400A998F8AEF70EE004BFE12B3046E5FC6C19CEE49A35C6
|
||||
:15291900840B529EB84FAD33F3D86D04FB6DA63714691D9F2168
|
||||
:15292E004D91AC34A6BE67C2BEAACE99AE9FA98648037FD3FD64
|
||||
:152943004155AA9389664ABCBD4E86FF8C5209F9ED634A2D354B
|
||||
:15295800B9CCA81171196A4DA6002E55C012F594521B8B0DB4AE
|
||||
:15296D002F9F29D595F8E27ADC7DF1C575B847D1D7F1B090F94B
|
||||
:15298200C82BF818F29DF489B81813CB7844F8D946901E4BCFE8
|
||||
:152997005E4D79A2464CAC776BF659FC188F88B5932DD699FCEB
|
||||
:1529AC00709B75469E6DB7E3F076D9677810F764360195205DD9
|
||||
:1529C1002461182CA141FFC1EFF796CB77B0F10EC3AFCA752C4C
|
||||
:1529D600BAD39844BFC655C35A07B2CE2DD7A472EA449D549F2D
|
||||
:1529EB00386783E768AFD15516D72431FFF59A9973E3D1FFDE24
|
||||
:152A00008FFECD579F3664F575D21913464495EF78E9A197A820
|
||||
:152A1500FED7FA918EB41A4A3B302DAD94D2764D4BDBB69CE0E0
|
||||
:152A2A0052DEEEFFF243EFD49262C6FDEA25633B3BC3E7AF7812
|
||||
:152A3F00476FA9F869EDD7965DB17DA5E362BD6D41FC027C739B
|
||||
:152A5400845EB160C5395D4E0E1A9EF223ADAAFAAD7E664C9A2E
|
||||
:152A6900BEAE5EA193637EF68DF52D0D618EA47698F10DF3161F
|
||||
:152A7E00E91D1D7828603FAD1D7EE8974B0906A2E92582EB9C07
|
||||
:152A930021F17DFAD736BDCD6F89D05CACEC330967F1EBCB57B1
|
||||
:152AA800D5FABAA9BDE8CE617624176BE5C33E1F7483DD077C9B
|
||||
:152ABD00ABDFA1F4FD07ACDF2FD8BFBF7DE00CCDB7C9EBD3C29B
|
||||
:152AD20060477FD89FF09C3180B7ED6C8CC7BF935BF7C413B97E
|
||||
:152AE70075581F3830FE356DDEF9FD5ACEB937F4BBD985DA799A
|
||||
:152AFC0063A774C41685FE62AD2F8E8BBE96287FAE4F3E7CC918
|
||||
:152B11009C27BD46EF2F98BEF8B1A5D88342DD130F9F337CC974
|
||||
:152B2600DCBA912773EF10671887451C98E3090FD90CCA090325
|
||||
:152B3B007DF9EDA1CEFAD069AA5BF9078EFE28803BFABD611FD5
|
||||
:152B5000620529BB8F2B02FEEF1F7F9BC66081BAB70B6BB57987
|
||||
:152B65006A67BC27CE3589F49389CA1F1AD05192A4777CD58762
|
||||
:152B7A00F83ABC6BA2F2D726E5DDF34BB5E68E28E5DF115B5586
|
||||
:152B8F0007BB4A8C2DE59821279F2519E9AD8B8D1DAD63C60920
|
||||
:152BA4006302BC47EF317ED653BA9C3C46FCD3297C13ABEDD81E
|
||||
:152BB9006D62AC197BC53E47B5186706F725F7D2388B73996858
|
||||
:152BCE00AB305E8FBB8FF13ADC113FCA97ECA33AC68C36EC2BC0
|
||||
:152BE300261386E4231C85C74CFC061F627C9CF92EDE0D923EE6
|
||||
:152BF800493A7F3261DE16E7227D8CD2F11BFBC81395DCF0C751
|
||||
:152C0D00E4BA00E96B1827139583E63CB22746AF7BEF205C9AE6
|
||||
:152C220067DE4FFB1482A789DAB8807115EEE71324839BA85E80
|
||||
:152C3700963C68BE91F1E7EE32FC8481300177A193D733E374C9
|
||||
:152C4C00BFF0632179D61D39A7FDE51772EBFA59A7D61FEFD3ED
|
||||
:152C61007E5925DFD14FF6DADC44AFDEB3936B3D0D17C55EB4FD
|
||||
:152C7600927ABAFFB645E59F11BA5B383E8C9824810509C4C806
|
||||
:152C8B0032E627459FAC182F3EE8A37111C3A55AC6DEFBDB8611
|
||||
:152CA000B41AF18A5F357BC6B806FF415FF22095DB0D3C8B58F6
|
||||
:152CB50057A5A9A7CDF9A9AF9BD5849BF9D4D7642EF634778BAF
|
||||
:152CCA00F159ADEE16BEF1A20E85236E9FAF54FDAA217CF63673
|
||||
:152CDF00714EE50CC806393662D4A7BE437977D358E9A579EE05
|
||||
:152CF400A08E3A3D6787442CE5B6BF60AC0CF62FD980885722D7
|
||||
:152D0900AFDBA5539F0E78D6EDD3B7E4B1A9E3631CB16EBAF850
|
||||
:152D1E0057DE92BFFFB424E82262000553F033EA177E46C029AE
|
||||
:152D3300E2FE045942AC5F8A78669FB77CBF906E8EF56AA5A9CF
|
||||
:152D48005DFDE1D4F3496505D77DA403E7ACE5BAAC72D3EF4371
|
||||
:152D5D008CB783BC3AD2B714EBBE25EDC43FEA102F8DE3F709B1
|
||||
:152D72003364FF464C0D4BEE937D9AF2D7210DEBC2BE8CFF7CCB
|
||||
:152D8700BF8881E3016EC67B8D2A4107EB8CA2447637CEE55AC6
|
||||
:152D9C006713AD3DBD37A92E896000ED413FA9EB981E5AD069C0
|
||||
:152DB100EE8F58E7DA104346FA032EF47445D0D1107E6A8AE003
|
||||
:152DC600EBE78E5F1636449788B723A748868D4F0A3C07C84604
|
||||
:152DDB00F60B1F837E116FC72362565BBE6BCC78CA443C46C088
|
||||
:152DF00029A5BEC2AB539FA875CB76C874D04FC8F58C4C27F975
|
||||
:152E0500BE25B72598FA8D29E22C1E07FFED32F7FC2E5D520F81
|
||||
:152E1A003F3B9B06C07130B5CFF0F05E3DD068C5BCF3906C4040
|
||||
:152E2F00DC763FEB5DE2271E99C77A6B41BFAD2EDEDC6AD1C9B0
|
||||
:152E4400D88E7BF99556C15B4437FC96C5B982B888E3047A8367
|
||||
:152E5900BE22361FC632D1733A2D6551D6A2C387E1F623D3083F
|
||||
:152E6E003470E3DEA1C7C7A04181A041BF1DE7284B8B0FA58182
|
||||
:152E83006B6E75F03FF62DC4A72C0ABB69511CFB64ADB04BA3BE
|
||||
:152E9800EDC3D79EFCE452259647F368BB01DB13B28A7F25B730
|
||||
:152EAD00EEE2BF38F2C79217A544ABE205DC94A84FA01DFA68E6
|
||||
:152EC200C53AB2DA407BA83B130F23A31F59F42873D1628780A9
|
||||
:152ED700A7CB3AB740EF11574B49ED33253521F808BF35D77979
|
||||
:152EEC00E0A0AB7CF0F399F8E022AE783F1B12FB163ED0BC7DCA
|
||||
:152F010048F3AB5E218B15F007C99EB288257B32E38EFA2C6D48
|
||||
:152F1600C1FC4BF735E7040E689C06FB7F6BF53735EDB313D89E
|
||||
:152F2B00A3290D75B596D1DCAFB2E4F1301B3B1E61A9E3D72E7F
|
||||
:152F4000A4F3E93E4CBF87297D58B3CBDF2CFF9137A7E6AFB6EC
|
||||
:152F5500F3631E1FFD8DDBFF14F32C8BBACB8AB8C362CF8D1B4F
|
||||
:152F6A00D79F94EF6882BF8B3A1AFFEA99535A2E9917B2DADB5D
|
||||
:152F7F0085B84805EAAB5D38FF68F9838F8933508A3A42764A45
|
||||
:152F9400C2F0A716D5C97F93CE071ECE5E4AE74FAFD30D9B3808
|
||||
:152FA9003B48659BD4678CC99F71D2890C1173C9E2C33F330520
|
||||
:152FBE00EF5AB19D267A483FAC233DE8E3F0E6C4CF7A8D84A7CE
|
||||
:152FD300CB6047E496899F7133E1E9379BD41EF337D7313EE251
|
||||
:152FE800B62DD26E5E86EE13361CBDD48AEB6E1C34A0034B3494
|
||||
:152FFD006E003BFD3677FC17D2FBC25113FAAE83B39387B2F8C4
|
||||
:153012006EFD7516BFF3110B22544A7A79BB7196E0DECE629CE6
|
||||
:15302700A5C2FDD88FF2A7AA8DDCD3B5FAB7E28B6B3B972D9B72
|
||||
:15303C00A22BE631F8892E13FA539EF428C98F35869A8AF63372
|
||||
:15305100E557A6CF57A9C3D7D4D213172E2D205BC453AE8936F5
|
||||
:15306600105F167AB6B7BD562F8AD4D617509B472BEE5C3A3F3C
|
||||
:15307B00A5D25C576D94A6C286E46FD43B9FADE5DE31B2FBC612
|
||||
:153090009799CE1E37621B0A5D5D6927FDB1AA56C65E6AF49146
|
||||
:1530A50061663C7CC0D785F301FF49DC53CB3D7764D7834AED9C
|
||||
:1530BA00B882D5B69C0A939C5AA6414F9FA74A61118F54C869C1
|
||||
:1530CF00B241A83FB22B2695357F3E3F5C3676502FB3D7338382
|
||||
:1530E400340F63BE65E3AF9801E9B25E5759F419567EA695B16D
|
||||
:1530F9002B5C61FFB03428BDABEF53BD75D005C32413E74B43AF
|
||||
:15310E007A49E864AB2FF20F4BE6D3DD73AE4FF8AD601D6FEEF2
|
||||
:153123000AC4C23B69FBC7C4F9159AD78BE327F4C07CD24B94E8
|
||||
:153138008EE18FFA3F97746FDCFB97E7D517C7F2C82679C5604B
|
||||
:15314D00A9E78FBF41E3687EEA6903B24AC411A0FE07683EBE55
|
||||
:153162005AD6BB2442BA0CE69B07BC86D05F7EFC0CAF75749694
|
||||
:15317700ABBF4BDF546719FEDFE99BEA2CCB6EA6B344DFE129A5
|
||||
:15318C00E7FC27640CE1CA57F985A505620F0F783BB53478FAFC
|
||||
:1531A1001754FF29BE9E70B77F99E19CA917780AC54732780A6C
|
||||
:1531B600A516D5FAAE604FB963587EFD14E473685E6A562DFD13
|
||||
:1531CB00368A5325E25E905A20EE06C9F199FA4FF369BD67F568
|
||||
:1531E000BBFAE56B691FF080BED6D87D9F78DFEAFBFC19FA8E7C
|
||||
:1531F50032C3D73E7EFF1710DD4B2147A33DFD6DBF9966BF5070
|
||||
:15320A001FC55AAA8B9E6BDD79A27DC63DAC9F6F201D3DF78709
|
||||
:15321F00BD4B54F5345920295E2C91DEA55C3083365FCA381F10
|
||||
:15323400A4FCC4DCCE2EF280745587DCBB65C5BB7A78EC3BF5FD
|
||||
:15324900B73458F8BC85BD63F975517BB7C05E095F143805CF3D
|
||||
:15325E00C1BF133EA2E5296F9D9367EEE94B19BCCFA5B28ADA53
|
||||
:15327300DE1F2F4CB420EF56ECE54447FA117B31E7CC29BC3BCF
|
||||
:15328800E0397B4A37D26427D1FB6AF50B4B71073C93CBF3EE4B
|
||||
:15329D00D8F6D04F491FFC89E1535F3E50A3FEC85C3669F73195
|
||||
:1532B200BA6BD88FF8AAC9F5DC7A86ADB46BF8CA72ABFC49C28D
|
||||
:1532C7005BD0AEEBDAF2C796DECE5EA813B68E2B2FCAA20E77B1
|
||||
:1532DC00B9B394A7E3A90B5A58FD8F4B908EF99154E5CFE1F98C
|
||||
:1532F10019CC91D15D49E89F285B803D65C225BE1F33BFE7B062
|
||||
:15330600C0EB3C957402BBFEA229CF736B3DD6737F813ABB967E
|
||||
:15331B00EE86A7C8D2CB51BFE7EB7B74A1037C876405E9576696
|
||||
:15333000E4794D8924F4529A3B443C16C53A83F361FF34A7745C
|
||||
:15334500495DEB75F8193265A7987794129A3FEC7947CC41785F
|
||||
:15335A00F731E61F67EEB1E7A119E71FCC3D9883EAC599FBCC51
|
||||
:15336F005CC3D5316BAEB1DA5159A9FA2B730E74099A977C6AF3
|
||||
:15338400B7B9E5BDB4AF20C9BB0A08EEFA48A2CEB1FF4A691EE8
|
||||
:15339900439ED5EF39F4EE349AEA2CBB716254BC37F03E4CF834
|
||||
:1533AE00417996BC6C486557881F39D98D5D3C37998817533BB2
|
||||
:1533C3004A72A41F632E27758AA34EF01A78AE5AFDD901F0D4A9
|
||||
:1533D800C5F71DFDCC8699607DA3E7591AC3EDC6D65F58F3BB94
|
||||
:1533ED005897A5B6467F951D5F8190E5EFE1B3CF1924432C9F18
|
||||
:1534020074CFFC2B01EB77DCCBF23748AC707B0ECBC77986F8A2
|
||||
:15341700D8D46F3B4DFC2D4D4C1711129DBA46FF6DF46FD0FFC6
|
||||
:15342C0030FD8FD3FF04FD2B3FA2F73FB2F28ABD83A0EAC46896
|
||||
:15344100E467C7F0E1884A1DB1F06F555B97B0FA5F755EA47C51
|
||||
:1534560015FDCF100EAE926CBE6AB2FA761EFB4B7B9DAD7E8045
|
||||
:15346B0027E9B947F5B62834AEC7DE465F470DC4BC14E73EEA46
|
||||
:15348000BB39DAA977F43BCA1FA7FCB7B2BDCDE299DA539A5FFA
|
||||
:15349500340CF4433961C0BF36B4E298CE627B39DEA3EC7EF867
|
||||
:1534AA0063217634D5592CEA7C45B429621B7D601DC77851E412
|
||||
:1534BF005433F2A3CDB9A11BFDA9597082F7B2ECFEADF0DF0892
|
||||
:1534D40066CFECBF799A1AA43993D59FE216AEE1DB316CF5B34B
|
||||
:1534E9007E888B36C73B0DAC81948C1DD3156AB7247E54878F79
|
||||
:1534FE009EAC4E4DC31A888FD202E35D7ACF84A7C5FDCE47EF92
|
||||
:1535130042CA7FD3FD64878E601FD4D97725F8FCCC155F697AF0
|
||||
:153528000CA57FE37B9C131A0922364775EB55BA7B953A1D3188
|
||||
:15353D0072FDB14A3397CA5C0BB142F9BFB61B56BC617917D2C3
|
||||
:153552000629CD1F1BA03967917E71B9749757E9D0C7290DF1AC
|
||||
:153567004BBB903F5669E07C8D8A73A29426C706CC61A4D3B355
|
||||
:15357C00417C7B9164217CFC6BE63271C68307B23609CE1C5FF6
|
||||
:15359100F558F1B2B6219DE007C079471077F45DAE9C7F464330
|
||||
:1535A6003F4AE11BA48C709FFF98BE8E6CB339AADC92973A2800
|
||||
:1535BB00E2B610FCC5A114F2EFED90BA7B853F27CE18DE966C99
|
||||
:1535D0005AA2F82D5F0BC466982DEA1C3AE0A33C3E2B4FB034D1
|
||||
:1535E500292F918EDC589645F304DE0C9AF7AAE658DF8082FF11
|
||||
:1535FA00BDC3E7E373E0979EC8F887C9EAA4D95A427822B92460
|
||||
:15360F00137EA2F4CC66F0E72F25BC5BDF3CF96B737BEA6F0F36
|
||||
:15362400C897DAF5CBC553EBC7F744DAECFABDA1B156CA6B50E9
|
||||
:15363900DE7ED4B58764E75A196B3AED343E2254FF6AEE53F13D
|
||||
:15364E001C6D853FB7447A2EE9C2A65FD5CDB504838C33722494
|
||||
:15366300A7F17D95F96A3B87DCDC537646C37AECAAD43F13CFF4
|
||||
:15367800FEC05C4DF724F1C25ABAAF4E7DA61FB410FEE76AEDB5
|
||||
:15368D00011FD5514FF59706587E581DE0169C5FE8079C388F73
|
||||
:1536A200BD92F475D8309EF258EB9EB2360DF23E42EDC4A82EF4
|
||||
:1536B700CA773C4AF7CDF41FA1FA733167184D7C436AB919A3B7
|
||||
:1536CC0076A2A9FDFD38F3B09ADA89AA3D070E521E8DDA3AAA9F
|
||||
:1536E100D8676C4987403B84C0923D6549AD551D306304D7662A
|
||||
:1536F600AA7F82F07335C00A7D54E632DD714E9EF8CFBC46CFF7
|
||||
:15370B00ABA88E8900CE1924F8167A7E35007E575BDFA4FB6AE1
|
||||
:153720004A93296D989EFD418B46D371ECA697F7525CDF4C7926
|
||||
:153735008B55B939C745CFB03A48B8867F31F68427699C0F9A63
|
||||
:15374A008A4A73DA349A875F9B2AAFE12FA284734806776564EA
|
||||
:15375F00301C123057DF4DD38107E71CB78D7051CE386594ECF6
|
||||
:1537740018B4E4DCB663960C8AEE35E0D33217320A6B58888D3C
|
||||
:1537890019957765DADD3669CBEF1E9249581B3C684A65713D24
|
||||
:15379E00E37F4678A0692F9FE62E23389BE5E3AC06D9408DFDF8
|
||||
:1537B30012CB273E32A89F8D7E1AC705EA82CFACCA63F9F3E96C
|
||||
:1537C80019DF929195DDFA28F169BFC20ABFCCAA1A494008FC7C
|
||||
:1537DD003E42CF09C5C26B39AB6A8EDA721FB240C04675602E4B
|
||||
:1537F20088501E12E685CBE8AE282FEA997874341F5FA8686FF7
|
||||
:1538070084CFA788BD46F7ABCBBDCD0AE5DB5A7CE31872C60954
|
||||
:15381C00F6CC300E2798F50D3C278F9FF860A7FD9DBA72D5DBD0
|
||||
:153831005C4DF5E4975F213A1D9A820B85FA73167CA3DC26CE74
|
||||
:15384600D0EC8AE13B033DC613915ED1FFFC4FD3FC46F800FFDC
|
||||
:15385B002D25B4416F7FB508E30EFD7AD1C01CD1C83A455EA932
|
||||
:153870002CAC77E663AD63C0AC72FAA5741B32E916D5E0BD40AC
|
||||
:1538850017740503FE7E0AD581323EF5457AFF2B33BFC82AC7C6
|
||||
:15389A0094174DE0783BE5CF75CD5B6AD1D4F59B6B45AC3048CA
|
||||
:1538AF0079268AC0F35546428C936A314EE0DF0499FBE6F5749D
|
||||
:1538C4003EFC750AE289466FB45A57D54AE3CA72A97994CAD023
|
||||
:1538D900382EF4BAEA2FB6CFD665ED55D598781B01B576EAA8ED
|
||||
:1538EE005B39FF7B22D6307CB5B09624931C95A9BE2292F7E8B6
|
||||
:15390300C7C44303F50FD2337CAD64711EC8D603E0E3F536F634
|
||||
:15391800F82CF8E5D810C9A4170D712EDDD255D3C53407E3FBCC
|
||||
:15392D0055B2FA8C69CB9300BE0D09F926C33FC2FEFEC424D5C1
|
||||
:15394200F3E318F1606CC85E334EA7FF6A6CB0D14FBF713687E5
|
||||
:1539570045DBF9F642969F5B4934B4EBFE2DF5DDE90BD67050D7
|
||||
:15396C008785AB230257F0FB0DB1458D4E7F0AA80F93158B9A3D
|
||||
:1539810071CE7372162BACB8981D3F326414D96517C986FC2802
|
||||
:15399600FDC4FE9B809FF409C0E21D233B3B3A4A750D4057248D
|
||||
:1539AB003C7467FC45BC946FB480E5DFA30276AB6F778D250892
|
||||
:1539C000B735A60337F611FFC7B19F1CC5FA83A82F84B58C55BA
|
||||
:1539D50007A03FE3BD903D36BEEAA7ED4F59E36515B7F15B828E
|
||||
:1539EA00FD0F3FE5298EC9CD9B73B26347C9AFC1B7BB047ED1E3
|
||||
:1539FF00D6BCB141D2A306B1A79816E71AE9AF3CF242E3453F3E
|
||||
:153A140070F373DD194F23F6F95EE80781F1A7F4C0F9255AB02E
|
||||
:153A2900BD419F97929A049F19DD7C07CDEFBE50360E0960AEE7
|
||||
:153A3E00639F6A862E3096EFD0CDEAFB6FD177AA0BF97136C947
|
||||
:153A53001FB3E28A20CDDBB448C46C9745DC120BA6BF2298E058
|
||||
:153A6800DF081AECC7593A9A0333F44D791BA103CAA9534601AC
|
||||
:153A7D007BA57132ED6D9E97F23607A7F58164880F78925343FB
|
||||
:153A920037A72BE1183038FCE84F9D30FA52DE9650D3908009B9
|
||||
:153AA7007066F4D570B5A08B22F42AC0FD29EC41091CCD8B0F3C
|
||||
:153ABC00D43B78D94C32D76BD3CD473A5451A5D468F5CDC2C5E5
|
||||
:153AD10075C1E30306C64D89DDCE3F52F98FD3DF85D4DFAA4288
|
||||
:153AE600F437ABCF839FB723662FF1815F75F529F6B2D117930E
|
||||
:153AFB00B27D52AD3E59F850459F9CF3D2363D44BF0CD798284B
|
||||
:153B100076E10E7A01F0E6F4674EE84A2BC9419A7F7F6EE6B539
|
||||
:153B2500D3F852F6F0373C969E087C6C60D9710F19B839730EAD
|
||||
:153B3A00D7D28BC4B96ABBDC412A071E49A28C4B9E857F379504
|
||||
:153B4F00FFFDEA51923983FC4F2343B5CA8E11D12F5FB2D374B5
|
||||
:153B6400FA0C79017E2F16B1E59F35DDB20973899C7CD6EC230E
|
||||
:153B79005D5321FB3E4032DF9F841CE3A6D5CFE12C9D934346AA
|
||||
:153B8E00A8E984C04788FA60AF6F171440BE8AF1C5752BEEFC13
|
||||
:153BA30015D1DEC2152FB8C697859FA2D38322FE2F70F7C8C3D1
|
||||
:153BB80096BF2BEAFF0EDB4B7C3068049A3A6DFE1FCCF0FF61C9
|
||||
:153BCD00E27FC0073B05EB7C820F62E003C3E683D10CDFCFCFB8
|
||||
:153BE2009FCAF747057F0E66E9AF8E18A82BCBD3832EFA774D11
|
||||
:153BF700A33FE0D96BF537293763ECB8C70C7ECB49C4324A1863
|
||||
:153C0C004F936CB360B6FAB98BF8DAE1E110C1574C7CEBC07AA5
|
||||
:153C21008D602D2758DB7C37F2ECABBF01BFBAE08D11BC311723
|
||||
:153C3600BCAA1B5E4B36BAF502A5A953C0EBC8216B6EE8123030
|
||||
:153C4B00CB31CB87CF8824DA8A5C7362EADA541EC4B91256DF0C
|
||||
:153C60006BE0FB53B01DB5FF952ECCF01FD92E6F2256C061F98F
|
||||
:153C75004E2566D92FC591A33AA972C52595724BE07CBFE6913D
|
||||
:153C8A0058600EDE8D8F18CAF9A426930D739CE055C8E6958910
|
||||
:153C9F00C7B0AEE5F321561CE721A2A74AB64FFCA9DE960EA415
|
||||
:153CB40077FD33E6910EDFD953629FF44AC5DE3BD8F8A8618648
|
||||
:153CC900A516D4539ED88B98C1C1B988EF41E9896EEC77ED3513
|
||||
:153CDE0065AA0F7B61E237B52B8BB5FABDA62887B68CBD387FDC
|
||||
:153CF3003CA73C2937B65B653AE26413E16C936F2DD785BF237A
|
||||
:153D08007C526C9B08B0A2FE9DABB996B36E528FD370E9FD2C8B
|
||||
:153D1D00D7D06799CA94278E6D02FC98CF010B60036F2E2318BE
|
||||
:153D32004ACE9FD4E662CE7FFD59BD98719A2F92DAB7302FD91C
|
||||
:153D470075E2FB086DD4579473FABE8BEAEFDA7742F851827F75
|
||||
:153D5C0044DEE84887AFFB9FF51460A33EA12F6CF220CE5EA6C6
|
||||
:153D71008107D29D39F0B9142C4BEF1D5C5CCCE0C16A2B830789
|
||||
:153D8600ACDF8D5B78087D576EEC5A873DC921DE4EE9BD185FB6
|
||||
:153D9B008413A4C13644AC330BDE538483631AEACF59F76B7D0D
|
||||
:153DB00087C0C3312D40FD030E149C3BC6DA3BF4326A0B310BAB
|
||||
:153DC500C3D47E39C941271EA1751E24CED93B8CED29EBD2DED5
|
||||
:153DDA0023DD754198FD61952ADFE5C45B1FFEBC88472874DE64
|
||||
:153DEF00D5C2AE5A7420286268EE16DF804059E2EB7CFA3D8C92
|
||||
:153E04007DC0F17F72C5B3251B113184845E087F7AF8A685976F
|
||||
:153E190071863C4ADD01D249C6E2D5DE16C957A3CB91C5FA20AF
|
||||
:153E2E00C18AF80B48AFD0FA750573907A6FA34FFDA346457D70
|
||||
:153E4300A0598EAA3ADEA54847C77DB3388FF4E722966149836F
|
||||
:153E58006A5AF51E860E34B68CDE5568861E8E0F36D6501DD54A
|
||||
:153E6D00544795FA40A35347A9783FB58DCBCB1F10F5FA45BD41
|
||||
:153E8200BFEA70F25ABF0F1B89E57D778A33DA0D13565B510BB7
|
||||
:153E97007EE0EAACF0EFAF36A3948E39F62A6385D2EAC5BA120B
|
||||
:153EAC00818E68F793F20D8A7C61BE01E58DC526F28ECD90178A
|
||||
:153EC1006D6F07ED92569E8337C9B30163D3CEB3FD2679C294B6
|
||||
:153ED600C76FE7D9302D4FAE522FBE37847CE095ADCB7F762708
|
||||
:153EEB006425FA21533F719F43F2DCA79AE64CEB596166FBCB27
|
||||
:153F0000638C2A8363D86F147A0B3DE34CAD88371B8D0BDE2D37
|
||||
:153F1500B1CECE67D68424C9E2B74CBD549FEAAC1F093F34B224
|
||||
:153F2A004F7F90C3B07E029FEF94A06FB6BC150BEB8881746A9C
|
||||
:153F3F00D3AA9FDE958C3FA707CF3FA7C1462DA1B1126C1A1181
|
||||
:153F54006397F836A0B013F598673FF7560E53E3234B133497BD
|
||||
:153F6900FBC9362A461F146E5A3E6FC233A400318BFDF1634B40
|
||||
:153F7E00A04B237F10F53B700839DE65C11749D48BEFFDD9F533
|
||||
:153F9300CE8F0F2EAD99566FC60EA6B941949F617DE61FEDF10C
|
||||
:153FA800877EC15626788B2F63DC2855D9F2EE785B347E71160F
|
||||
:153FBD00EB9F662877745A391A9F379C27B4CA1FE23F9FA1FCAC
|
||||
:153FD200D68F50FEDD19CAD57F28BC87F89519CABDCF3EBCBDF5
|
||||
:153FE700D434FD0AFC1274F31FD6D5FFC9F54DBA19DEC7AF7EC8
|
||||
:153FFC00F0FB890F7BFFEF5DFFB4F77EF778F8A0F5D6FFFFFE71
|
||||
:154011005FF55E71E1BF789A7CFA7F077E9B3FA69D399A78FFE4
|
||||
:15402600C6F1F061F5B9F94D2A3BA2F779129B3F2ABF61BCCE52
|
||||
:15403B009155FE79711EAABAB553896D5E49C3DA1FF8828EF8BF
|
||||
:1540500077F80EB8FFEE6E1D631E3A823FB0459FB5AA5B57D5B8
|
||||
:154065002FF15977B7EBC1755CF34B957AB0A8524F90CE66CB4D
|
||||
:15407A00874DD7482F5102D53AEAFBD7D675680DD786E173B5CB
|
||||
:15408F00AE4A877F33BC776435A7E57192F925FE4ABD605D8D23
|
||||
:1540A400FEF5358BB58A758BB5907FB3DE99F37B1AF6A316C828
|
||||
:1540B90031C4C70922AF2C7D4217EB40ABDA850C822CAA284A4F
|
||||
:1540CE0068F08372DE178BF78B756F202EF4DA8A07E3BAF0CFA1
|
||||
:1540E3002438CFCED0FE4ABBFD426AFF10B55FE26A1BED9653F3
|
||||
:1540F800FBC827EAA5FADD6D5FB3EB9D70D59B4EFF34ED474C7B
|
||||
:15410D00C55AD6B29E4C18D41DCF8971E022CDACBA6EA7297B4C
|
||||
:154122002EE1C54F6DE6AF5D4CF8A9D416F86BF4F99F965BBC93
|
||||
:15413700AC7D63C51FCB2D87662704FEB12E457378106BA2B712
|
||||
:15414C0009DD240BBB881D01FD90C59F147D2398CEDA308DA2A4
|
||||
:15416100EFFE0D7AC5BEF5BA54E4C096BEEEC0D648B095FA2B21
|
||||
:15417600457A9C14638756F94535BA5FC0D4AD2D284AE83D3BB9
|
||||
:15418B00F764F80078FE6D3A6DC3C0443F71F6CEDA779D78128F
|
||||
:1541A000ED8EDB7048655DF8269C6F36B76008ECABD203D41E5E
|
||||
:1541B500FAD662FBB8C3394CE0252F8B970AE29BC2B54D7AC9E4
|
||||
:1541CA00BA7A01CFEE9C6EAD80F052E84FE8B92CB1718FCD975C
|
||||
:1541DF000B45DFB3ED5EA1B60C7A17207C11DD8B1D1840FB8A9B
|
||||
:1541F400D51B34D8DC15EB3668D3E94F83275020CE13B2828A7C
|
||||
:154209003307C57BE95C8D5EF2604C97D997F45994E780C44203
|
||||
:15421E005EFB791F3D17AE23F8884F0A8BEA75FEBD06EDD0EB49
|
||||
:154233000D5AE1B9B57A09A7B47DAB74FED97B88DFEFD140FB92
|
||||
:1542480012C265C55A0B07724C6A51D9165E4F38F34A0FEBFE75
|
||||
:15425D00580E62F807F3B15753BEBA7596F4A8EE9757EAFE153F
|
||||
:15427200D4D6DD8FEBFE55F7E87B73566A5823975764F3E7852A
|
||||
:15428700AC3324227FA2D6CAFFDA1775FFAB0DFADE9DB59A97C5
|
||||
:15429C00E6ECC0F7366B159FCE69C177627CF1DA8DF9630D1B06
|
||||
:1542B1009FC6B78679AD5E71EE615D3ADBA073CA2BF9B2F8DF16
|
||||
:1542C60086311D12674E362176B4AF9DCA9D6ED828ECDA65ACCF
|
||||
:1542DB00253710DE981758B6B1A26BBDB69B6401E982C5BBE8C3
|
||||
:1542F000FE879031FFF331DDBFAB41870DA1AA8F72B16F98F838
|
||||
:15430500A22EADFD922EDEBDD640EF6BF5BD842FD01C7C0DFB89
|
||||
:15431A00ABE09B524BC539C21F6FD74BCE7D512F3CDB2DE8DE86
|
||||
:15432F0043749F45F42E88F08D6E39045A835EC25FD7A623F818
|
||||
:15434400F06E82A505F0138E11377A1D3D2772B66AB3A81DC03C
|
||||
:15435900DFB9D37ABEFB7ABA0472C8F98DBC34AF6C3A4869289B
|
||||
:15436E000B7E36C98C04FE20E7C8BE9CE3F0D276CA237CAB09C3
|
||||
:1543830086ADF41CF8DE7CADE26C29E1B3549F896F7EC9B27C78
|
||||
:15439800F377CCE21BE0BD80F826E4DF2A70F1759B77C03725B1
|
||||
:1543AD009CD2A6F14E77FCBEC70A425B8826B1D66EF6E863B372
|
||||
:1543C20042D156C9FFB8EEFC2E8C3CFA186833AB7DFD46F67A95
|
||||
:1543D700CB46E75EF1AE477C1FA220BE7E63E158CB46299FE89F
|
||||
:1543EC00FC894AEE25DC5F277A0367B70BFC7B5A0A7907E1FE98
|
||||
:1544010071C2FD1E21B7DDF8CFB1F19FB0BE4B11947C9FA0B6CC
|
||||
:15441600A39BCE085A8057A29B46A7D102DF6D7BD0A605C9D76D
|
||||
:15442B00E2F52E5ADCEAA2C57BC287303B8677D2F8ED75D106C1
|
||||
:15444000EB55A03BD277D8F4394FB471E8B1659AFFE787D1E3D1
|
||||
:15445500828B1E7F65D30363B8C4A6C50D7420DAB86991177966
|
||||
:15446A00E4B1DCC8FAC7D876D6E21F7B64E32C65CBC63CF69F69
|
||||
:15447F001F2B88FFC946FFD8A3E277C51F8B315AEC67F43BF207
|
||||
:15449400258177794725F7908CBD9E17E5050EDE696C16FA775A
|
||||
:1544A900929CBB5F2F5CFBD414BC17CC84F7AE85A0B90BEF3177
|
||||
:1544BE008177A7BF6EFC936C2FBEDBC63FD67C30361CFC17BBB3
|
||||
:1544D300F0EF116B37167E7B6DFC164136D13BEC33BBF9DE2957
|
||||
:1544E800FF4B21FF2D9AA19C887B69D3C1C279FD14589E408C43
|
||||
:1544FD00AAA4D48273D5099237B954C72304C3A17B37EB15EBF0
|
||||
:154512009A34256789969773A7061EF693BC61AF376C3CF4031B
|
||||
:154527007A776EAD569CF3592D3FE70FAC77D2CA8D6CCD3D1BF6
|
||||
:15453C0077C73C2D806B2170522ED6B603B9AA47CC8548473C72
|
||||
:1545510037C7A641FBD89BCA71E6687B9E403EF80E03AEB7C9AB
|
||||
:15456600ECA43C99F1FE1A8D77CC5117D26905EB41D003684EA5
|
||||
:15457B000BBE6AE7FF163D57BC2BE35E7CD2EA77C1FF01EF9849
|
||||
:06459000C0E6B892000035
|
||||
:00000001FF
|
|
@ -1,906 +0,0 @@
|
|||
:150000001F8B0808AC5A10380203706361323030655F65636428
|
||||
:150015002E62696E327D00DC3A0D7054459AFD261333136278A4
|
||||
:15002A00192663E02479728060A10E9063213F64F0700F3DE05E
|
||||
:15003F009E6CDC7B2F3514B35EF0A28B9A5A731E554B91474C5C
|
||||
:1500540034E11AB6692618B7609D8404A2121CA8648D7551435D
|
||||
:150069009DA578A56C8AF276A9AB829DF3AC92DD52CC5EB177A0
|
||||
:15007E00D4CA32F77DDD6F665E263FA25B775B7753D5E9F7BEA8
|
||||
:15009300FEFAFBEBEFFBFAEB7E79F4A91F6C270A21A1870849C1
|
||||
:1500A8007C974CFA8536C11F37B9A99FFEAD9C49302569258321
|
||||
:1500BD00D8EF4EEE6E14EF59E3B3EDFED3E3C735EC67E50822CC
|
||||
:1500D200A9FE0FFD29BF7CEA97A26F4EC993D537AF13234A5E2D
|
||||
:1500E7005EDE94F3BF245F4AFCF1F129E7CF9E866E0ADE2C3919
|
||||
:1500FC002BF0237F849F3240F688FEB5EC75792D39E3BCB43E9B
|
||||
:15011100C9A9F54BDE24FFBC9C3C6987DDCD33F3938CB0674E4E
|
||||
:1501260078D6F8D7D63FD9DC8CEEABDC4824B2F9DC949E391965
|
||||
:15013B00FED7BF11FF975E7267F17D1CFB4BE77E3625BFBC0C26
|
||||
:150150003F0FF9BFFF5372CB72671A1F3D3EF99DF51312ECCF0D
|
||||
:15016500C070095C0E5FF8FFFE4B3A7E246851FDD31C5230FA46
|
||||
:15017A00FC0A35E009832F79ADB5E45140A3A4743C8CE3E39F62
|
||||
:15018F00C35BB09DEAFF05BD7A95BB3DADE6B56DADE538465425
|
||||
:1501A40052C90E11EF08B4773A8857FB013CB7112F090619CEAC
|
||||
:1501B9005B125380AEB695F80197D874FE9A9022A5D554ADE572
|
||||
:1501CE002661CA73EE80B5F5F26AE22D7F9A78FC814838484AB5
|
||||
:1501E300E8B36DBD4D843D4C4930CE42B06FCC091861CFB9BDAD
|
||||
:1501F8002621C3B438D010BE6DD7091AF29090DFEA334930C6AA
|
||||
:15020D001187E86D9CB09E2EDF18033C8DD220A9BB6D57390DB4
|
||||
:1502220011D2D8B26F23C02CEA0FAC0EB76CBADB3C4F48F1BBF2
|
||||
:150237001157A5EBD25FC0FCCB804A3412ECA211D133EA167DD2
|
||||
:15024C003B8518510311A53A5FDD62226D9C4BD46AEA567ACCA9
|
||||
:15026100362DB78EE8A7683E21017F201E4E927EEAB6169944DB
|
||||
:15027600AFE1ADE3AEBAC0C53534B0EE4194CF8AC2FE47C6065E
|
||||
:15028B007960DD5253D1FA6834346000BC45C0D909BE0A681025
|
||||
:1502A000BDD7BA4BDBBA12ED8A7C09EB8EA79BDA6BF9816681AC
|
||||
:1502B500F70EF3723259F4518D59F578B3AB0A66E7A3597F0E69
|
||||
:1502CA00BA90E04E5BEEC669E5765D2A33DD6762936427C1D5C0
|
||||
:1502DF005CDA40CA8A7AA03EA807AC0147BBA02E52A72974180E
|
||||
:1502F4007B956F461DD851EB3EA14348C8A0EA9689F2332DA72B
|
||||
:150309000E7B941FFB00D8FFD6801526637B69AB8FCC22A5F03C
|
||||
:15031E00ACF65863355BCB4740B7F5A05B6A3CEC239954156CC1
|
||||
:15033300E7B09E9AA7F084F085DB760DD171378910B6285EA406
|
||||
:15034800F64A5F403DE05D8BB4C2F800BD8EE3418BAF06B8AA3D
|
||||
:15035D00EE81F5E96393DE6D3B92E0385D564748698085091946
|
||||
:15037200A79EC256E0D34F49792B1D759310AC032BD6FBCDCEAF
|
||||
:1503870038D845EFE5456A87F95932097ABB5B050D98BFE30F8A
|
||||
:15039C009CDF2BE6B767E667E6C6EDC6D24DB7E7A56AA4888777
|
||||
:1503B1003626DE3B6D253EE5C5810BE19CD8095A7CFEB241D8BF
|
||||
:1503C600765A663C6DAE8CBC4EF7B70D35420264F51833C16105
|
||||
:1503DB00A6438F32018C232C303A64E29A23DCADBDCAE604CE52
|
||||
:1503F000C2DAFC0BE48392B027D20C3E546386122FF0964DDB3D
|
||||
:15040500C0A7BEC35A366D323B120AE8B357F8531ECA1ED46DF0
|
||||
:15041A007F6AE732A6800FFA49302E6321B8C48EB97E560BEFE0
|
||||
:15042F00458110CC6910FE9B84D825C10415992A67940623CBF7
|
||||
:15044400E9EC584E5DD1912DB4E84C9DA9C486689188ABB8F0F0
|
||||
:15045900BD43E494A124DEA49DE43503E75D87B4D6F9E7F81CCD
|
||||
:15046E00E748EF05F296419A062866F84EF23AC04791363CBF24
|
||||
:150483000BCFC31CE5D213EF71C44759162BA4E81F2077148DF9
|
||||
:15049800DE677E1BF429501F117ABAB5A3E037FD527EFD21DE68
|
||||
:1504AD0072EB2653890C502FC844D803BC937403BD7E2113CE66
|
||||
:1504C20027FA51FE0EC4AAE7DCA04906DB38E62BF04FDB0E52E9
|
||||
:1504D700EFC24B09339A731CE3886F2C203A191CE0A344E0591A
|
||||
:1504EC00183F514DC49F88258C471F213EC2FAAC68A8CFB85650
|
||||
:15050100D6535DAAB92A3CE7C0EFCB0728CC6BDC33EBBE3AF4E9
|
||||
:15051600E76BC964B19EF8949519FF64CE568E091F74150C995D
|
||||
:15052B00885B1C83D82FEF43FCD0E167A306513B39C4E31CF4C7
|
||||
:150540000131A6FE965F4D26FD9E7387CD79E78E9AE46AAF90F1
|
||||
:1505550009FC2A0E7E2562E5D1C8C62AB40BFA87E7CCA98C1F9A
|
||||
:15056A00E07CDB0F02E0079ED07A136DD5DEE892EB27D74DDAA8
|
||||
:15057F009075F0D47A1E222F1BA9F524FAABBC1763C2F6998923
|
||||
:15059400F69376FBD1FB4F007E4396CDFA85CD8A1BD166C3B678
|
||||
:1505A900CDE268B322323660755A03C6B5E64D2B053DCC1D2390
|
||||
:1505BE00D266445F1497ADAD0B68E03E15BF6D6448D8278AEB56
|
||||
:1505D300C80678BEF73EB0C30FE947E092E01FC585095735DAFE
|
||||
:1505E800F671D7EE55CF245C958188AB5ADA037C046D01BEE121
|
||||
:1505FD00BAF4A9E9518E9B1D5AC626FE09B121732DAEABB48BBB
|
||||
:150612008C15B459DAD7B3F32CC428FA34D7B6547ACE7D067369
|
||||
:15062700345B4F0631B39A266B102748855D9AEE95FAA9DD5677
|
||||
:15063C00D4EA35EAB4875792D2583897B499FE5D3F12FA91FA31
|
||||
:15065100A3343AFA18E487C7B823BF7489DC027E87B620FA20D5
|
||||
:150666004FD1F043DE9AE5B0C528F877AC664BD58D1BD21EFFFA
|
||||
:15067B0059BA7B79AD423CD23EFF6EAE509A67B0CF7B609F6360
|
||||
:15069000FF23F63989F6D9BCD64CED8550E85072F557D21EB076
|
||||
:1506A5004745AD6EE339DB1EF3C922D37F7DA9B0478E5E629653
|
||||
:1506BA005AA5D57F827B8FBE9F46125FF04F66E1FE5412866761
|
||||
:1506CF0086F945D818ED469ECAF8A08A7BB46860BB6E87ED4EC3
|
||||
:1506E400F114BF6CDB45C1764D60BB8F6DDB5D00DB21FF8083E0
|
||||
:1506F9007F83CD7B22DFE3C67E6F5F26674C9F2BE638724555DF
|
||||
:15070E001A0F7DDA111F0B20A778361F4BE710B11F8EC13CAB3F
|
||||
:15072300CFB85A932B64C35C82792494788F611E51E60E9B4A3C
|
||||
:1507380007E413987728E1C8273927219F0C603EF1E1B81893A8
|
||||
:15074D00F9A4D8B3F9A4F963E02D724A539F88D97980873AFBA5
|
||||
:150762001C3A37E59359CE5C33A1781D3BC1DC9B7BCDA235ED12
|
||||
:15077700A29E2C523E379B4988CE17BAF7F3909FE8EF821F7925
|
||||
:15078C000AB11608D25AE1474B445DF7FC5CCD20E5FB68A3A870
|
||||
:1507A100170E70A2DF010DFCFD7FBBF54429CA4C9ABEA016F86E
|
||||
:1507B6008190DD315E0F7E5103E34F925FAF825A94A30ECFCD41
|
||||
:1507CB00EDC7BD45FA3FEA06F6167AA890B7BE6EEB8ED2E275F7
|
||||
:1507E0005F9819585F7C7324B932C5ABCC90B5C0CDF0B262939A
|
||||
:1507F500695544DE16B4F419E647605EC90313E7DD13D9B652B6
|
||||
:15080A00AE1BE31B70DDEC7941C02DC8C25D1129B371352AEAA4
|
||||
:15081F003D7B5DDD02EF009F3F4EEA549887F684FAAA68452469
|
||||
:15083400AF42D45290DF570BFC56BA0BF015C4D73BF911F04B90
|
||||
:1508490037E243DE03FC62DCA7D1977CA206EDE5CEFA7063BDC6
|
||||
:15085E00A3BEDB4CC197290D617DA68BDC791A7B55055EA967AE
|
||||
:150873000D7A477DD7EA98BF20E2AE48D57848C3FD00350F601C
|
||||
:150888007C421EC69849CFB37FEA060FC6604F20B001CE496318
|
||||
:15089D00F45BB141FAE3B6A126DC2B99A8E7346641AFCCBD0C5D
|
||||
:1508B200FC9F80B3D24E383761AD1C83FDE1320F41BEF0EFBA70
|
||||
:1508C7005F9C89FC501BE39EAAC2D98AE8F5D48775DE582DD4FD
|
||||
:1508DC0079C130D653FB649EE04837404E899AD0B2CF592B7220
|
||||
:1508F10048F13F47DC707EFA7B13EB3699AF0DFBFCA4DB755C24
|
||||
:150906003B75477AA046AD605EF541B3E5D6BBCD36A0A978FFF8
|
||||
:15091B00C6DC8B750C9CBB3007DDB2E7553337827B40B7D80387
|
||||
:150930008A033190A792DF42FECCF4C379E3167106B1EBAEB1A5
|
||||
:150945001EEEC7F307D45D9DA1DE74BD05671CBE429CA18E43BC
|
||||
:15095A00BE5B682CD0CC95E2ACA1F6C4DD381FFA828EE5E21D9F
|
||||
:15096F00CF4F17DE36CBDB9B95EA476A72D279D11F53A6CF9FA5
|
||||
:150984002F7597077ACCF25BD6C49886A7633517D785EC80E7CC
|
||||
:15099900C4DF12320AAD0BDA4E683AB425D008B40B301E87C6CB
|
||||
:1509AE00A0E9625E4FDC6EB04FF43059BBFD16CF2CA13DDE56FB
|
||||
:1509C30043BEDBB50EF83FC2317F3629F20C3409C7410F71268F
|
||||
:1509D8008F2F88CBF60A4BF1D9381D5E9ADF82B8362D3FA475C3
|
||||
:1509ED00BA4BD293F8E3643ABE8067E39C2533D1CBD03A3C13A1
|
||||
:150A02009E8DD33425BF89326D9C964E46A68553D2C9D040BBF7
|
||||
:150A17007F55C31A995C3D2CF1C7A25CE40D8CB1E29881790360
|
||||
:150A2C00623586F12B629A58F412FA289C3F647C34424C9608E5
|
||||
:150A41007F9B2E4E5E8138715DFA8579CB9E939363247D66979D
|
||||
:150A5600B181F1823501C620C60CC64E3A56ACA39958518FC96B
|
||||
:150A6B00B3FA18D457D69F1A6B2156F09CCE223913E224153FF3
|
||||
:150A80001F431E9A8D7990EDA5175CF2ACFE817D7D38027114D6
|
||||
:150A950081380A7D8D38DA6CC751C3639938FA009E23DF07232E
|
||||
:150AAA004223D0128F43850E8D416B8016825602ED1AE0753D49
|
||||
:150ABF0036318EC41D03C412CAEFD9DF938E27E09B965B03B992
|
||||
:150AD400F7BCFF8A21C70726C557AA05537E9F8DEBE047317E33
|
||||
:150AE900DEEF81F157441D23C75BE2B2C13A3649FEF5022F9BEF
|
||||
:150AFE004E8B23CE5AE21F91E9F8B54C8AB35E320D3D874FEF6F
|
||||
:150B13009A915E86969EC69B420F382B230E9D92DF4499668A69
|
||||
:150B28008D7A32959D60BE4D7FE194E3683F394E74A0F3154D74
|
||||
:150B3D00CE4DE17F988EBFD4BA8B38D4FBB846C8AC542C4EA83B
|
||||
:150B520027713FDF91D98F156FABA86DB78CB65588BD1DFC5798
|
||||
:150B67007D286614EF1AA4BA479E078B77F5D28847D6AE88CF94
|
||||
:150B7C00B0C665526784B9B260E38E7DBC445B88674CB6E10A5C
|
||||
:150B910021EE75DDA61F635A2DC718F12B780796AE33FA999E1D
|
||||
:150BA60043484524B702756A8067E58101519721BC73FE108595
|
||||
:150BBB009862B92AE8AF77F3DBB513DC1D6B73DC635914F1AC84
|
||||
:150BD00087F12E56D25A75B3B4622F6768017E1CF67CBF1E338F
|
||||
:150BE50015C85F985FE2F23B9EE0F375F4B11CFA743964B06EE9
|
||||
:150BFA00521FC48BD74A7D2C873E5F492B4B9FC12C7D06BFA10A
|
||||
:150C0F003E71873E671D32C46F521FC44B7C47EA1377E8F3954C
|
||||
:150C2400B4B2F419CED267F81BEAA35EC9E8B3E44A460684DF02
|
||||
:150C39008C3E88A7DAFAE0F3AA9BA595A5CF48963E230E7D4207
|
||||
:150C4E00F6FDA61A180DA77CBCCCA066BB897CA58FE0FB4EFBF0
|
||||
:150C63003D6EBF37D8EFC81FDF0DF11EA3C29781C7CE1CD1D360
|
||||
:150C780041FBBDDF7E1FB6DF2FD8EF23F6FB6AA0B3533BC6C47E
|
||||
:150C8D007E0B63EDDA49BC1BE40C9EBBB49FE2F99F8FC273BFE6
|
||||
:150CA200F6160B698BA97DE6E61ACC2B857D695E24B73A10CB76
|
||||
:150CB700ADF62572AB3DB00E78DE451DCBB597059D7A98BB5EAC
|
||||
:150CCC003B25E844E1B9567B83E1FC77A41C0C79D66B7B98A408
|
||||
:150CE1006BF18540B710724F0D394B4F6F3BB916715096422D36
|
||||
:150CF600B702613FD9F653011B75C0F66E7B4BC050A614EC99A4
|
||||
:150D0B006DCFAD4DD15FACC9F5433AF3C4733FABB7F9A34C0FC4
|
||||
:150D2000960DAC49D14CE122AD146E4A5694ADD4C645BAF768FE
|
||||
:150D3500B9D5381EB56DAA3D216D1ABA22EF6F904789BD3FE19D
|
||||
:150D4A00B8BEC3392EF9DD65D358286174F44989B3DEA681BC57
|
||||
:150D5F00FD4803C6C69FC88C55D9760CC3F846B01FDA8EC2739B
|
||||
:150D7400583BC0F0DC392264BA2CE4DCA1BDC88E08FB76F1DBED
|
||||
:150D8900AF0807F47DF7466E65D9853BCDCDA56F2C7F612C6631
|
||||
:150D9E007C7B2DCAD12E6C940F67B9556BDD952B4AF72C6730C3
|
||||
:150DB3007697188B0B79F363B915F3DE7257064A0F2CE7305641
|
||||
:150DC800B856CA8FF6CA8738B9F17B77E5EFE6BFB8FC208CFDBE
|
||||
:150DDD0047756E753E9C577F7DF1F32AA4F9F17C5A85F3FFF557
|
||||
:150DF200C86015E29EBF78026AAD06C113E48F5BA22F113283A0
|
||||
:150E07009E715DF43B056D120CC555D1370A39E07C18C798B8BB
|
||||
:150E1C00EDCC6553F93002F1F71A2D10DF7F625CCEBBCC6B45C5
|
||||
:150E31002F6D4482116E403F67DD5153D9F47DA8B3F6D15B712C
|
||||
:150E4600AF04BB49BE31DE2AFA06DE2EFA2E61CFBC3D80BFEF5E
|
||||
:150E5B0069C0BF9B16068280AF895C26F2ADE81BF9B0E8570B92
|
||||
:150E70009BCF3A03F81FFE10F037D1D9011DF0435CCA1DE37EDB
|
||||
:150E8500E89F15EBB093975CC9EC6DA454033C43ACCD23B0367D
|
||||
:150E9A008DDA7EA606C6007681AE96B6E141D15FE0E5D037AD30
|
||||
:150EAF00245E1674D52944A3FBAF277DE84B3B005EA01D83BA29
|
||||
:150EC400C112F6CB81B3F8ED77209E8C2BDC2B1FB171D1DE7613
|
||||
:150ED900BC517CDE0D3C55EF0766EB9A98FD6DB39F22BF48E2BF
|
||||
:150EEE0067DCBF6B08EB5F529F789DC33BB340367FA8CF54BDFC
|
||||
:150F0300782FF021776B43FC9315B63CDA1DF4C69792C76198CC
|
||||
:150F1800AFDAF2305B1EAA65E4C1BDEEBC8D3BEA9067740679E9
|
||||
:150F2D0074873CB5200FBC3336853CB50E799EB4797C807164D6
|
||||
:150F4200CB336ACB73BD2C230FEE55F7D9B8E86F2979F0793A72
|
||||
:150F570079420E79D6833CF0CE6253C8F3CEF28C3C977E277943
|
||||
:150F6C002CBB827B9A940779A03C3B1CF2E05E735AE20A5E2E36
|
||||
:150F8100C8ADADD57DFC7A32994CE55867F917D10659443B01F6
|
||||
:150F960039BA96AA810DE1CE35FD14FF4FA873ECB821758973F1
|
||||
:150FAB00DDCE291BAFE0A505F1791CFB6658EB6539856F9A5A59
|
||||
:150FC00002CE58E939FD7C839D8F53B806E04521B67D901B9DD8
|
||||
:150FD500F3752DCA6A81BF017218DA61689FB1466D21DBA92DFB
|
||||
:150FEA00039F2967ED5A15ACD57A56663C627272B07149A28F90
|
||||
:150FFF0046ADBEC62EC08F6923AC5FA3ACF3C8095A4C06CC398E
|
||||
:151014005B8FD0F9173FA3AD5BEFA46DF397D2E7B62EA7CF1F57
|
||||
:151029005943DB2FAEA387E69FA6783FF357BFC8C198A6F8BFCB
|
||||
:15103E00542F1C7993169CE9310F5CDC07F5C0BE554EB9CEDE5D
|
||||
:1510530043BC85DAFAEA344C6FA1E5F712AFCF09130AB4D0C3DD
|
||||
:15106800D3C06BAF2527C18D480BC37C89F6F12F9E621E6BA1D1
|
||||
:15107D00CBD64C01875AE093F9C4BB30D6C3704D312FD45EC9C3
|
||||
:15109200D405E99F3AC2884A995B13DF2FD855FCC78E2063D72D
|
||||
:1510A70044DFC5AEBB64AD33EE92DF494812EAA2C23E336A0D67
|
||||
:1510BC0019F87D638EBBCF3C9433641C0A0D189DB0962F586F8B
|
||||
:1510D100189E0F3E1777C9F825E280D561A81BA9897E90EF9079
|
||||
:1510E6000FCFF76E3A24E0CF440A2A3E49FD7B8D9D377E5E23CE
|
||||
:1510FB00F7C7487A2F8D31947F01EC63F9B1DF97CF8BFD1DEE8E
|
||||
:1511100023F65E382CEA18B97F0DCB5C073693FB1FB371BA04B5
|
||||
:151125004E43669F14F1F0A4CD6774129F5B27F091FBE5B0A8F2
|
||||
:15113A0087527CE2369FF5361F89D345651EEE67B171428E04DB
|
||||
:15114F0095BABCFD7DA63FB4C83C06BAFA2277560560AFBA7A78
|
||||
:1511640043EA7B3E726FC56578F680FDCB0C3807E50E34C29EFD
|
||||
:1511790055AD94F687550DBF8B04E9D8DB9027624A5DADF6326D
|
||||
:15118E00DED9F9DCEADDB00F75B0D2D0BEAA0324DA48D43DD4DD
|
||||
:1511A30055DA15762F851A4DFF0D5FA8FD86BB6C5B57691D3C31
|
||||
:1511B800A41DE0FE441F63B97D4DCBB46E8E79C51A053D12BD56
|
||||
:1511CD004C059A08276A94C281CBE3E4B9E527DDD5CEF965C6B7
|
||||
:1511E2004193DB34702E3E232D1D68B94B97844359F37D303FCA
|
||||
:1511F700A4BDC8A186B0E747A79CAFFE23EE4D4BC2284B10C611
|
||||
:15120C0096419D11D43AC45D3427AD8D86F62B9EAB609E3B411A
|
||||
:1512210039E96C74475AB90FF66017D6BB7A2FF744A2BC2032BB
|
||||
:1512360022EE9C27FAF1B0EDC7D6043F4EFBEF689FA13AFCB79B
|
||||
:15124B00106A85B48F821FE0FAA18FE6ED1F308BC92253EAB616
|
||||
:1512600044EA16EAAE76FAB35FEB608188BBD28DE768C2A807ED
|
||||
:15127500D6A3E94EE2C5F7E7E7B61B259B89F7A5B93143D596FA
|
||||
:15128A008AB5598FEB0073D9FAE876EC73578BFF21CABF23206C
|
||||
:15129F0069AAAB3C61159E676A128F885E0BA4E4D620EECA880B
|
||||
:1512B4005AB8CC6C752DDD9E6BC399CFDA9E1AC7FF6352430BCD
|
||||
:1512C900BFE74ED10845BFE74B3DAFCBC0459C801EF81D11EF02
|
||||
:1512DE00CD0E6AEE3A96DE9BE4BDD916BCABB2EFA5314E08DEDD
|
||||
:1512F300AFE9C75940AB2EC7B51570BD8F5DAFA95E29EEFB990A
|
||||
:15130800BCE39FA37799F8BD016922CCA746CDB3C9A47F527EA9
|
||||
:15131D00B2F9D74EE2DF6EDF9D4B39EE127766BD71A4A3240E38
|
||||
:151332004BBA3A7E4790307C4E4C419FC571FF91F4D500F0620B
|
||||
:1513470094E2BE68D3F4F9347FD50AADA02264E78D0AEDF66A05
|
||||
:15135C00A0C97C6A47FAEE1068B3A2ACF7F4B3CD8F8F1D355654
|
||||
:1513710068F757F8B4FBCB03DAA28AD47DEB0A6DBBA46DD35490
|
||||
:15138600BC8727D155DE9F19B638717B25D610F8EC4638D8F716
|
||||
:15139B00207ECF8950FC3E731ABFE72C4EB82B713D104791385F
|
||||
:1513B000EC20E660C4D1FB38E2A0ACA501AC11A1B67B88903162
|
||||
:1513C5000236FE4BE255C5DD690CCF9BEA79D24FF15ED2F20E35
|
||||
:1513DA0088EF6B44AC7B4CE0FBD5D7E47730FBDC81304D1BA0C3
|
||||
:1513EF00E28CE280056D58A303B6CC8635E0D9B754F0E33B1C7E
|
||||
:15140400E3E2FF0C865D648936C09D30DC971766C188CB4DCA55
|
||||
:1514190027C2583DF46A6488A910CBABB3C712CAF87016AC0146
|
||||
:15142E0060235930F7BF29E3A3593002B0771066AFF37F13F3E9
|
||||
:1514430084C1511569F6242F3203617CC0644C280C0F0C1AF656
|
||||
:15145800229960D0640871E2A297502C37025AEFB141264ADC60
|
||||
:15146D00E0A1CC4156D92DEE7CC144126CB07926122DDD9DB8D3
|
||||
:1514820099327844070F14B7425DEE8E73BD2D6A2B6559B7D497
|
||||
:151497009D52B355DE15578538BAE8B2559C73DFD7DD6FE6CDD5
|
||||
:1514AC006450F1F6EA7E4CBD37DDFDBEEFEBAFBFFEBEAFFBFBA7
|
||||
:1514C100BA31DE44D82DB80EE738919E4FBE9AF31B37FF6E8C0B
|
||||
:1514D600D97D8E4A1BC19FE113CC3500EB7D15DAA8986B25E05C
|
||||
:1514EB0087B471F62449D02133CEFDA473208FA0ED37A19F74B0
|
||||
:151500003663C7C458757D99E6E3144ABE9AA12F947C9BF50CD4
|
||||
:151515008CEBAB1D34234CD447180B4298111E57823AA4431D81
|
||||
:15152A006768C3D7CAB2AD92C6AD92463FE63CA91C16DF3FF7EC
|
||||
:15153F00E1FF709CDAB90469291BFD5236446E9DE415D833C0CF
|
||||
:151554000DBEEBAB6C10E61C105FC6F58DEC875B3ED5BCE799CF
|
||||
:15156900AF3269B70EFEBE8AB2C2569792B0D97682E72DADE6FD
|
||||
:15157E00717D5146D64D2F2B7296012DDCE704CDE492EFAB5527
|
||||
:15159300511E4ABE0134BEC1CA529CCF7E53D2C1CBC0E6F81BA9
|
||||
:1515A800C7A4FE495015BE293361DC608CF8337C825E8FF0D8F6
|
||||
:1515BD00B855A83D29D09E64DABF2DF80B65F06EEDC9F843208F
|
||||
:1515D200770BC03B94FDC477DE271FD06EF709DE2FB9C6F8FCD9
|
||||
:1515E70009F8B2F5FBDAB2F576D9D305CA9475D3CB4A9C65796F
|
||||
:1515FC00F1542EDF728EDAF3DFA91B7AF274033EA764DDD5BE7C
|
||||
:15161100310B7C63D755E3F3FBD96FD1EE4ECD27B36CBD843CC7
|
||||
:1516260079CA9639785F78B6D748E4D5CF3A3766081863B4A142
|
||||
:15163B001CFCA948C92615F7A301D6853FCFEA38940F9C17769B
|
||||
:15165000DD94B30E78E19670F8D301632C0F86CD032183A2CC22
|
||||
:15166500CC2F03787BED325FB6CC2C5036D39B5B867DEA73F4B0
|
||||
:15167A00D92EEB2D5056EC7596993451A9105621F9436214752A
|
||||
:15168F0006CE4B1FC83CC6CA306EC2FFFBC7DACB1C6B51524A3A
|
||||
:1516A400F89A13E5D7C7E5374E6D399F7910F72B13AC1DE6BA33
|
||||
:1516B9003F2474592118EA35C380BA700CDFB19DA53BD60968C7
|
||||
:1516CE001F501F6E475D02FFF1BB0315633A878FB2E223AC503C
|
||||
:1516E300B9EA28A7CEF6E585CB5528EF92712E94FB7C7E617C84
|
||||
:1516F800B820BF7C85FB3AEB5CC21832C7A3072A123AD703DF1D
|
||||
:15170D00866F7F4258D8CFAF1B037A2D747D6758B9E39A907AAE
|
||||
:15172200DEB6FD421FE7F23A571F17A005BE11B48C51FE04D841
|
||||
:15173700D7233CF06F0AF2A1407B92699F4BDF1E87DCE1FC7519
|
||||
:15174C0079A7CF6FE29D3EBF8BBCD3E7322950B6DF337D7E97A8
|
||||
:1517610078A7CF6525AF0CDB3FE7FC36BB26E13ABB92CF716123
|
||||
:151776001B90A70B1DB60FE3E0DD72AF86386CA19A57A738EAD9
|
||||
:15178B007C79756E475D795E5DA9A36E812AED48204577F72309
|
||||
:1517A0005D268F1F667D8F380BDA7BE6DCDF88338C69E058640C
|
||||
:1517B500FD8D98217C8BDCDC45A266737E547F75BBABAD8E9F57
|
||||
:1517CA0067C09C7AF516428A0E361AC9CFD31E5843EA53F054F3
|
||||
:1517DF00802798FB87FB643F03997A3EF6C77A726984BDD79F79
|
||||
:1517F4008DAFB70EFCFFFECEB7104F0DD0CA423DFAEA3B9555D3
|
||||
:1518090076EC09E339A4DB7C7312CFA274C7DE9CE2CF495CDB6C
|
||||
:15181E00C033F9668A9F5101FFF25EB157E2F039A98B8C9F43E4
|
||||
:151833007E52807D39C4E339D2CEF6839D1D053B0BCFEF8FEA65
|
||||
:151848008277D59C77B6CD8D7D96F6106FAFCE3E93FC8BB8384D
|
||||
:15185D00FF50FF35013C13CA3FBC53B903F1EDB957CC93DDF0B5
|
||||
:15187200447F12734E79CC08FEAFCFF137E36CCD771C7335E3A0
|
||||
:15188700FFA62CEC2BF024217992903C49489E249027C5B09E3B
|
||||
:15189C00BE16FEE15CF26A4B0233B5BEC04BC58257A2EC562824
|
||||
:1518B1003B1018CB295B01654381E3765929969541D98D8149CF
|
||||
:1518C6002CE3FBEE829F7A0AF8077C6C4D4DE7E3A53B89A721F4
|
||||
:1518DB00857CACBAE34FDD9FFE02F25024E5610FE03DDF9C4B45
|
||||
:1518F0006783423C473F853903B4BEF4E9745A5BE11BFA29D2CB
|
||||
:151905005AF3AD69B5E391DF86DEED05E82D96F49E015A1B9ABF
|
||||
:15191A00A7CBAF8939BE0564F7E38B694F11F4E3838BD3FB616C
|
||||
:15192F00029CD317B11FBE6BEA47E63CEEB7EC4F5781FE28B23F
|
||||
:151944003F5756114F17FCBE0BFEF73E813E69554CD56A18D73C
|
||||
:15195900FDA0F35CCB09998472FCAF9056FA21BE0774AA017723
|
||||
:15196E00166886A56A2D2F22FE08E899B511DC0F8C51DC35426B
|
||||
:151983009B98A262AD12DB0FB65831C11EF6F3FD2C0AEDCE4436
|
||||
:151998008E58A51DC7ACB512762F3CD3D79B74233C5DE2BFBBA6
|
||||
:1519AD00218F9E06D95687E746F0357D9AC04774810FF120BED8
|
||||
:1519C200E833B9F81640BBD28E23D65AC0F7E10501C327F17D8A
|
||||
:1519D7007C41E083FF6E273F55C9CFA34D44D437919CFA39B6C6
|
||||
:1519EC00FE93F59756E6D6CF95F5DB65FD0779F5F364FD5A59A5
|
||||
:151A01007F9CD7A7A8EFD9ECF9A334F491913E1DF790DC68A32C
|
||||
:151A1600F3CE1BF5833FC4F0CC47656C7333EE2F997D75959A13
|
||||
:151A2B0012D4A53E1BA838AF3787F6055B1DF1DCBD273B7E8D0B
|
||||
:151A4000BC7ABCFBFDE680A3FCDC0BCF5CC1F2959B7FDDEC8CD9
|
||||
:151A5500FF9E7DEBA72F63F983FFF8AB665289B1C761DAFBDB56
|
||||
:151A6A00275A7C7E7373EC87C433761FF14CA3D391AF9B7A36C9
|
||||
:151A7F00D73E0B5F2365A10E7179C53A8C97A9B97DB3FD236C72
|
||||
:151A94003713647D3028721BB0ED40DBB83E33725F607F1BD7AA
|
||||
:151AA900E5CCB47539D4719D0F3079591E3C5C6F52B02D5D5C15
|
||||
:151ABE0086ED35183306CD2A1DF7BDC16FF4F457C4F4BBC89216
|
||||
:151AD300A0972CA99BAFB98298233650C1F4756655F0BD0C5F2F
|
||||
:151AE800C6F83EC46CCE0FB6177D9412F0F546F3EA3D8E7A059E
|
||||
:151AFD00EA7BB37CED2F5248BF1BEA5DB5307EB2CD7C6ECFC40A
|
||||
:151B1200B7D741FB8DB2FDF740FFFBB592805DE787BA0622E42F
|
||||
:151B270009FF2F3C3B6254C3FFF98E360BCFC60D5F1E3DF7C0A8
|
||||
:151B3C0038252271CB0DBAB6FECBB4277625EDD9FA557A96EC0C
|
||||
:151B5100DFAA49D0D3203F397AC527E574B491F079134A3E4B1F
|
||||
:151B660093256416CA19FAC136EC27619E610C4775D0E5AA8842
|
||||
:151B7B0019C723DCFED2808C3FEF01B8D5C0FFDE45C493AA12E9
|
||||
:151B9000B27FB20160CB7D72226DF99364980E4E8EEA336F4273
|
||||
:151BA5009B1EA0C297D5E43E6D35C576459EB8F1AF8B7E50EF22
|
||||
:151BBA006B8CB1062BEB6F45E0BD669090283C1B9E23C484E70C
|
||||
:151BCF0065F895C3FB65F885E0C79E13FB5D08A7F53FD29ED399
|
||||
:151BE400B82693FFDDE7D39EE3F89F8DB079303E181BA8E47B6F
|
||||
:151BF9000929EBF4FD843C87B6818D58367FED75C669919FC22E
|
||||
:151C0E0061281AC6285EC77C7A9ABA8F102FEA228C9B711FF33D
|
||||
:151C230088E56AA306EE2763EC8AE7CAAB23B8B75AD6E4A0E3B9
|
||||
:151C3800AC9BCCC2D82AE2C7734FB857B100EAC73CD25E713CCB
|
||||
:151C4D000798CA7535A326FC5FF05F609F501F89FC8B0C2D99AC
|
||||
:151C6200B39958F63B570AF0F17D3CC5F18E7B97F63BEE59F2DD
|
||||
:151C7700B80FFC1F73C4B96C783E76C4405D904A5FCFE71EC6BA
|
||||
:151C8C004486FEF9282F23A9EB89EFDD51F10E7F701CB36D6341
|
||||
:151CA10016C65186268FEA650ADF43B1447C2566613CA5C94103
|
||||
:151CB600B7D8BF1CA60F4C3D30B5787234472E67A35C227D20D4
|
||||
:151CCB009BBB6F271E1EAF0C1F61E8F7EDD7560510861B73A2DD
|
||||
:151CE00022A798163941FDFC9CD3179697E700279862EF075FF5
|
||||
:151CF50014F916FC5C82DAC3F74C791C397CCC7A5CCEC76BF51C
|
||||
:151D0A00279B1CFCFA661A246E3CAB84F80BCC81F25560EBE5AC
|
||||
:151D1F00FC60B8F7AC522E5764B288801D328662CA263C7B40E5
|
||||
:151D3400EFE5716FBFBD6E9B43460CD46BC85B2AE9C3EFCFDEF8
|
||||
:151D4900463CCAD45386FAFE53BA5347E2792466821EE76BBC5A
|
||||
:151D5E007E9AFEBBD30AC626152EFBA6581F4D017FCCB87E3379
|
||||
:151D7300190DE299C5D496A3CDCE71B94EEA8BEE159C0779F150
|
||||
:151D8800175CBFD9704D0E374D4ED2CC99447594611CED7B66CF
|
||||
:151D9D00BC20EC191276F90A92B38F9B858F79A4FD745FC5B0E0
|
||||
:151DB200CECFC7838E45FA63FCEC42DC5C8CEB03C0519C1C3729
|
||||
:151DC70095E409D35D1A37704F7026E09B1B66862B42E9A1A492
|
||||
:151DDC00B249D17AE90DEA2F8D33E9B4DF1B5382D9757098A279
|
||||
:151DF1005FBBDB85BAB015CAAAF9790D9EAE8B3EC3FD620D515C
|
||||
:151E06008ECFCA06983B77BFC8D75A01ED4D727F017AC13E46AC
|
||||
:151E1B000EA37D1CE6F6715FC549DD3BD9773BC737A5F4B2C6FC
|
||||
:151E300031417B386E7AD1DF93E54591B8A9362678FF0E9103BC
|
||||
:151E4500BA05F2EA5E07F38DC5AD9BC51955E68A8C67FA3737FD
|
||||
:151E5A00341AB4BF15FA2AF33E8D9EF70E67F371F7817FE13540
|
||||
:151E6F00253DEC2AF440B90AFA176971E2748978EADE9C3334E2
|
||||
:151E8400A82741C648E549B18F20FD33E09DE08FC82DC8E5A33C
|
||||
:151E9900DAF762CE7E3DCCBDC806EC036BC7791A4A1EDE5B29A3
|
||||
:151EAE00D681E683503E188EE96EAFD86B4B024DE78B4D3CA3AA
|
||||
:151EC3003E0BEB03EB458E0CDAB0C572EDD8CA6564CCAC833ABB
|
||||
:151ED8009B764E37B46F58CFFD6C1EC75F2BDB353ADAB5245FE1
|
||||
:151EED00DD0B3F13CBA3EB798CC4C43831F605D7AA48C7E05399
|
||||
:151F020071DD3729F704A1DCC6DB25E1FD5501BCBB1D78B7CB1C
|
||||
:151F1700763F71B4BB0BF0623BD3D12E2ADBF514A0EFAEE41B6C
|
||||
:151F2C0026CEB17E4EE3DF9B685FDC408B0AF43DCF65679CEF03
|
||||
:151F4100430FFE13D04AC4397EB783D66E097BA000ADCC41C374
|
||||
:151F56006ED9EE50015A871DEDF6C8762F7C0DAD38C636ADA5E6
|
||||
:151F6B00DF406BA983D6A484DDB1613AAD5D1BB2347C2CDB6D89
|
||||
:151F8000DB7095F1DC901D4FE52AE3A938F09EB7C7B300DEDD56
|
||||
:151F95000EBC17ECF1BC0ADED68D38BF2690074C75E2C5FECA8E
|
||||
:151FAA00FB36B0DC96F935D0FE308967647E638990F92B2E21E2
|
||||
:151FBF00F3A18D59DCE11281BB65E3D7E006BC3E89D7C6E77309
|
||||
:151FD400F473A384D1561806C3396BEF7597E7EB3CD02FC75F90
|
||||
:151FE900CAEA3B3E9FF95D0A4719B767784F8E7A9CA11FE92EF7
|
||||
:151FFE00ED33F6815FAA826D53D79E32CAE909E32021739C3A1C
|
||||
:15201300E86FA05F85748FFD9DDF15D70F9BE33ACA8B88271E8C
|
||||
:15202800D0613DBC17D7BF77715859DBB01C6015815DC8E8D5B4
|
||||
:15203D00D0B8EE5E17E73A95EB53DB5E98A84FE35C9FAA6D40B2
|
||||
:152052003FE85197E33DA7BF9598AF31ACBB2A9881E7F178AE2F
|
||||
:152067008CB0F9D23625047E26F5697848F8946063455F46F90A
|
||||
:15207C00F9097E3E08ED52641CECD23B863B7682A26D2A684F28
|
||||
:152091005ECEAE1F193FC7D46BF8319C8E7B15F2FFA5747A5E1E
|
||||
:1520A600FE5A52EC77F278BD359C02FDEA81B915AEA12CD41386
|
||||
:1520BB00455DEC2E163A59917E7C293CA37F486772FF588AE7B0
|
||||
:1520D000E79539F3C6944671EF4CABA31D5EF893DF0E6DC2F3A4
|
||||
:1520E5001A9E5B3AC910CE83987F510BFF8167E877BB2A13EDD1
|
||||
:1520FA00587F4368D4B821F40ECA8CD5CC7345C618C2C372FF1D
|
||||
:15210F00E6B895FDFF8EC1CBFE3A8E3E0BF1B38421BE7F076D69
|
||||
:15212400BAAFC8DB631CFF324BD3608AFB4D0E9A12B4991C5B1C
|
||||
:15213900E9D75C011B37DEBDC3F34230FF1ADAFB6FFCC2CABCBE
|
||||
:15214E00AFFA228327B9F058535126EF07D6AB320F1BE92ABB9B
|
||||
:15216300310E7EFE10B3F819D31A3A07F87D3BB24315B044DB21
|
||||
:152178003186FC07B368A9EAD330D6C7E19B414BD18E5BED0E8D
|
||||
:15218D00BF12D6DDE411AD64E5844BAE8B0BE05983BE4B41D8DD
|
||||
:1521A200555689FA16C09EA0840D594AEC94856704C4797E691E
|
||||
:1521B700BB51BF15CBF98B396DF25C0091759305FD19915B88C8
|
||||
:1521CC0072746106D29560ED226798B9257D6E271D682B8B05AC
|
||||
:1521E1005C7F30415522CF2AA8C72CA443FD6889C56D51868E26
|
||||
:1521F60014ED8A65E51BE11CBD4FC0194C09F8026E82F3A7EC3D
|
||||
:15220B00A33EE68235223F8347C6753C138F3EB0F82661619B93
|
||||
:152220009C7900F03F8C65FD1FBBDF083F719FE89FC0339683D4
|
||||
:15223500C7DE73C0B69C8F49C1C71B36F75AFE7082D7259C38A8
|
||||
:15224A0033E7914354D0D24055CE975679875080BA653E202FCF
|
||||
:15225F000F8FB28717A1EFFA0ACF4773D2E07B7909738E1DB4DE
|
||||
:15227400B114F508C6FE992D27E80BE30D65CF935E9DDFD31477
|
||||
:15228900A69C2FFCAC05D42BD05FD660525C841797F61AECC022
|
||||
:15229E00ADC607FF96F690A911BEBEF7E118A96F1A8A768AF9BB
|
||||
:1522B30023E24E017B0D535E3C7D1DD5D37624735E3EB39E9A77
|
||||
:1522C8003A66DD7EADEBA9F06B962D539847365C22D6BDB93243
|
||||
:1522DD002564086919967CE163128C7179E2EB5958C7A33D4393
|
||||
:1522F200794219E0BC32C51AFEA5AF44AE52A1F504CF1B0EC06E
|
||||
:15230700DC6717E83C7FA01DF767BCDA92FAF7D19EC23AFC1118
|
||||
:15231C00EDD6E0659893CB93BE55DC36DE2FF37DEEC74B4F0E1C
|
||||
:1523310070B9E3F960A2DCC2F2F7E4FA3622DB46F3DACA720B9E
|
||||
:15234600CBEDF3B836FC5EF9CD60DE37B2DCC2F22E09BF5FB607
|
||||
:15235B008DE5B595E51696DBEBD4C512FE6AD916DBE1FB028718
|
||||
:15237000BE6975D4E13B9E6DC2334D6E90A362B0558A36622134
|
||||
:15238500BF1475BF81E31DD046F19EA9B9734343CD0AAC57CB16
|
||||
:15239A007A2E18A5DA116BBEF94993BFE55343891CB75E8E95C9
|
||||
:1523AF006C72C39A0BECF1BC9991192B95C805CB96D999A0DB1C
|
||||
:1523C4009257709F2E3B077E0A3652E1E746D8B4F928E757464D
|
||||
:1523D900AF200CF5E08831583CAA236D73375759F67CE632C014
|
||||
:1523EE00CFE58EF3BB8BF8592FA147ACFCF92CF2400127CC19EB
|
||||
:15240300E73C796A76AF91F8ADD84754A54EFBA679F27480DF1E
|
||||
:152418008D23E6C8C008CF89518BB3F98F8B31F7007C8D07F85F
|
||||
:15242D00DE7E36AEB50EE4CD67CBCDFF36BEE9984FAD45FF072C
|
||||
:152442003A3ACF9F086B23ACC4DBC7F9F912C06BFAD4E10B5CB6
|
||||
:15245700CCB3BB400BB611FB20A6C5F7472AC7DA4B0EC68D21C8
|
||||
:15246C009015B5294E93220662B9C57E29BF37096D33D66BB0B8
|
||||
:152481006E4FA17D97F0307EAB4716B1622FDE75D743272F66C3
|
||||
:1524960071AB05FC107704F0F23D0AD3C2F11A02BBAF4E8CD0AA
|
||||
:1524AB00CB12278E6F0E4EA877E7E1CCED7F75FB4607FE900352
|
||||
:1524C000BF5600BFE2C0BFA000FEAA6BC48FFE456F6380DAB4A9
|
||||
:1524D500200D139F081A1600AE7CFCEAC4118E4B8B8CC0DA3C30
|
||||
:1524EA00D10E6B6F0B7D1F45E377CACC5B101961CF83DF833679
|
||||
:1524FF00ED92D3CFC1589F5A65F5B65103EF74BBF46455338FA4
|
||||
:152514002756DFB4B4AA6D6B50FB6143E366ED9EBF587FB7B6A6
|
||||
:15252900E127BBBA3B1FDDA5ADEFDCDED9B1AB33A8B56CB9679D
|
||||
:15253E00C7CECE8D5D3B7EFCA3AEEE2DF5CB6E5B16D0AA1FD909
|
||||
:15255300D5B56DE7CE1D8F6DE978BC235457D75877DBD23F5BD6
|
||||
:15256800AE3DBC6D7BE72E2DD0585BD750DB7807BC04EB03C11A
|
||||
:15257D00FADBB4AA4CFCCCC6575BBBB533BAA3BBF6A11D8F4646
|
||||
:152592006B3BB67644773D51FB68C7B6C76A77ED7CA8B6735700
|
||||
:1525A700B4F6E1276A3B3AB6F3B2ED3B764497EDBAA96E857601
|
||||
:1525BC00ABD6B9755BB7B6B5F3E18E1F6FEFD61EEAEA78EC478C
|
||||
:1525D1009D5AF5EEEECEDDDD4B11CBB783BF75E7B6C73B77D624
|
||||
:1525E6003E0CDDDAD2D1FDE896AD3B1F5FF6D04D2B1AAE063F10
|
||||
:1525FB00039E9F6799E30FB7EFC77D42B58ACEF537B4576BF5C9
|
||||
:152610006C199EE5B1F3F423CACA85FA05E350E870B4880CD334
|
||||
:15262500F63FA63379FAEDDABDD67FFECEB552517F6054692D59
|
||||
:15263A00B40AE6DE39D0253E78BE85BA539ECBEEFA22ED797785
|
||||
:15264F009112DCA81D613550379F8C3787B401C6EBC3CAD30165
|
||||
:1526640028437DD3E428C3762AD8408069F56BA5AB6C9B500E21
|
||||
:15267900BA710611BE04FEBF02B0F7A9CF44D14F1CFE657A16F7
|
||||
:15268E00D2E5CC6B77E6B4C72E8B585C1F6F5F4DBBA03D513FA2
|
||||
:1526A300B77CF0CD04E68D39F0B328E1676797B9C85CA40FE9F8
|
||||
:1526B800F069C718F66106AC53317F8E4C2DC538ACCFDF72AB4E
|
||||
:1526CD00817DC77B164BFEA1D1C02B54AA0096D8AF3A44C3DAC6
|
||||
:1526E2000BB4FE6DC00DFE940FBEB7F1E0391EBCB301CA2C2721
|
||||
:1526F700CE35E934C7C9EF6D04FFEA783A3DA732E2127B6AE153
|
||||
:15270C00017A1DD80584997C0BF3660350F60AA7AB04ECE521AB
|
||||
:152721007E6FC47EDC972BB3C7CD3E6311FB038EDDE77CEC30F5
|
||||
:152736007EA36930EFD4BE845B5B6195B41C85F13EC061E33C5F
|
||||
:15274B00C43958AABD6CD57CE56ACAFAAB620C6C7E3BC7C1F730
|
||||
:152760004EDAFD75F5574EA66739C703E951811E9F63BCA211D6
|
||||
:15277500378D257F65A920875A722431D7BF1BDA76515F7211DD
|
||||
:15278A009B9D2CDEB43AB914E435DA8E776AE01D89782F0E0997
|
||||
:15279F00DF4DDF55709DA453F465947F79D0C07B36D662FC4621
|
||||
:1527B400C533BB61EE8B0E9ACBF5D74275ABD66845ABDE2F396E
|
||||
:1527C9004FFDA15BF83E63EFEBE959975C765ED6009B9133FE04
|
||||
:1527DE006B29DE5D89EDDAA1DD19D92E906C01B8ADD66A11DF97
|
||||
:1527F30048F03B29E5B326B2860EF0BC9145D485F77F014FC4CC
|
||||
:152808009D94B9CFBD2E71278EB8E76B047CE95AFD52B180EFB5
|
||||
:15281D00A523C603DAECE05C6D76DDEB8BCA82D6E21B83A7B1E3
|
||||
:152832000EE3BAE3E9598B355790D3A90E50DC8376C3BC3C0DA3
|
||||
:15284700F320137F9B7A45D8E7A957AC9F5754EB7CBF1874E630
|
||||
:15285C00A0840FDFF3BDD47E8065B7B5DB6D873607DBF0BEB4B9
|
||||
:1528710012DE07DCDFCDC7A57F21E6512B7CCFE358324E77F2F6
|
||||
:1528860028C233D982D251C3F7DF87190A4E6B12CF389FE7E720
|
||||
:15289B00A9ACD0ABFA10C09D5F5A632C07BEE2D9D81A729EF631
|
||||
:1528B00086DE88624C2D896B83B6A5860563751DC84EC99E710C
|
||||
:1528C5008AB90441DCFF507F21C646CE65F4A915BE2ED380AECD
|
||||
:1528DA00503BA75FFD85357129ED395A24FA79178C75538131D3
|
||||
:1528EF00857575597E9F7A2FA5790E09C2D92EBF9F0F73AE6456
|
||||
:15290400CA34F0BEBA2258A784928729FD4DDA637F8B730575F3
|
||||
:15291900E284E43BC66F911701E083DD6618EAF83B7B864652D2
|
||||
:15292E006911EF8436A54773798F325888569CC7E5C91EE6FB92
|
||||
:152943004CF0FC83BFCDFD6E02F98F72CE75C37E6AF37A1078EE
|
||||
:15295800DD9A1CB1265E933E80B3DFB83724FB4D7F2FFA8D63CC
|
||||
:15296D008FF0A200AF468E1997CD51219B788ED6D576B71186B2
|
||||
:15298200FA9B6DF9936321F89885D1F07B416B1464E2E3D78499
|
||||
:152997004CCC2FAD37FC23AEA02D1B78CC3B2AE2B952364EE849
|
||||
:1529AC00E8DF2D262756A15CF81A135C1E2C73B1EE1E386228C5
|
||||
:1529C100A073174B3910FB02B9E37E12F8EC575F0199EFA15EF8
|
||||
:1529D600900B5F4F9D91BA28F96DCF07C737181B2FC4EF6538A7
|
||||
:1529EB00DFA13DE7793E1E984F9837649F7FB9CE211BDD201B4B
|
||||
:152A0000D13342365C781796940DCC8343DEF01C07CCEB782D44
|
||||
:152A15003B7E086F76B8CBD0FFFD2FEB41C759D5C936AB2AD9BA
|
||||
:152A2A0062819EB3400FB202F909FC5E665CEF946A553CC61AE4
|
||||
:152A3F002BB00F06FA9BCEF00E1891728C1B8DB5A3DFE6F28C47
|
||||
:152A540018B89FA6CB73D6E8833FC0F79712FCAC18DFFF8275A5
|
||||
:152A69003B9E0FFB79C54958ABC6F95E981AEBB3300F7275EC6C
|
||||
:152A7E0014F7FFCC581C65729EAAF559ABB553168367191B3372
|
||||
:152A93004E6BA29E2C8AD38FAFE21FBAC984E723A5B9F8B1A2B3
|
||||
:152AA800CF5D3F73FD4F7B4F1B1DC575DD9BD5AC342B0D627676
|
||||
:152ABD00D95D495848232C12C9519C5DB1C8922CC242A88FEC13
|
||||
:152AD20010654B9D744612F63AB603B19D84B634C7E784C42B00
|
||||
:152AE7005889058FF03015F65A266695480E6E209539909014D9
|
||||
:152AFC0092A5761C9152B2E1381C9AA4F638716C9AB8B6EC6293
|
||||
:152B110087A436DB7BEFCCAC56027F25ED39FDD13367CECCFB72
|
||||
:152B2600BEEFDEF7EEBBEFBDFBEEBB95BB86F37317D82FD98F5D
|
||||
:152B3B00D9F7D9636C823DC40CB69D6D619BD917D84676275BBC
|
||||
:152B5000CF6E6537B33EA6B04FB0B5ECE3EC63ECA3AC9B5DC784
|
||||
:152B650056B3556C255BC196C38CB29375B076D6C696B1085B45
|
||||
:152B7A00CA5A599885D887D8D5EC83AC059E0FB0AB58333C4D64
|
||||
:152B8F00ECFDF0BC8F2D81A7119E2BE1590C4F033C323CF5F4B3
|
||||
:152BA400D4C1B3889E5A7AAEA067A1FDD4D0536D3F558527687B
|
||||
:152BB9003F81C2E32F7A16143DBE598F77CE235DF2CCBFE4A91D
|
||||
:152BCE00BCEC33EF2D1FF16D9F8A777CCADFF5E379C747C0C3D7
|
||||
:152BE300535AF6BB963D6099CEB280EC52D7DE1F63F241F46BAC
|
||||
:152BF800043FDDFE6F82FF9CFDDF02FF1207FFC863EA9A207EDC
|
||||
:152C0D0054D359B7968349B2C4299A242F3E28C5E1CDC06B2E5B
|
||||
:152C22003E487602C97E6C13D9BE9365DBCF63FB71E017B7FD26
|
||||
:152C3700CA6D3F17F8656CBF0ADBAF04FC303F2893CE264A2C4B
|
||||
:152C4C0016B2F342BDE2909D07EA1187ECB4A8371C8234310E91
|
||||
:152C6100F768656DE3B751D0BA4A83D9F6A81BE41AF48BD1B952
|
||||
:152C7600FFB0EECB70ADC25433F081865161AA83EC1B26DE2674
|
||||
:152C8B006CF26DC2C81E0B84554218F81BE8CF9FE850A9EC5CF1
|
||||
:152CA000B3E1E0CEC139D62367C3983B4234D1659A8787749C89
|
||||
:152CB500F731AC27A509F5237E118792CB8A3F99B5C3813776CE
|
||||
:152CCA00C98B0DDDC9E7B8E51F837831E49BD262831740067A12
|
||||
:152CDF008B6F8C9B89932BFA975C33FFBAED4FF8CFE6E7A36DBF
|
||||
:152CF40009EB3CB7AC4D93FD5BD9D2E720DD4999743D4AED7F28
|
||||
:152D09003A37EB82B686F66043EDC03B5D2CE96A37CA609ECA75
|
||||
:152D1E00473BD4E9860E5A9F9BFEBE7B19E204DDB8469A857495
|
||||
:152D3300226B471D6CA30570018C5613E456A38C5D05B05F65E1
|
||||
:152D4800B883D1FEDC65FC24CEF263F2AB06F2DAA6B96B14217A
|
||||
:152D5D0059273F6CDFF0BD49E65A79A099941868E571BE2C35E6
|
||||
:152D7200A03D4A18CFC35064BBDE42EB5061834908974CB0C425
|
||||
:152D87005CD55046B38EE5F353D5AA94688EE0574834B7E23778
|
||||
:152D9C008675CD8548A6C6B8D48ED15E6528A425A84FB46B511B
|
||||
:152DB100D26D8AA27F3C3FBF1BE2C4C88E24CAD0D659D8B8163F
|
||||
:152DC600A573001BAC33B1A18D961E14BBDBBE272065EB48E02C
|
||||
:152DDB003AEF7C002A09F397A4AEB3A482FB3DE87E7505BF8CF3
|
||||
:152DF000E5B6E8A2CCB7B2D856FD3CD62B27EB96DD5C4B6FAAC7
|
||||
:152E0500C52C69A53C213F5A57C2FFD8889EAA49281CD9F31C8E
|
||||
:152E1A00310A7A20B11FA4B17EB5F2FD3A2F9F30989E84791408
|
||||
:152E2F00BFEC9B377F13F27F328DFEE8D7027EA373FCAAC16F26
|
||||
:152E4400688EDFA6150097F47CFA7337BF1006815913E5A7F5FB
|
||||
:152E5900BBD99456BBF205B5B7FE99F043EDE7ECB316093A3FF3
|
||||
:152E6E00BC287106EF0EA075B3452B4FA97C665C77C1B828CBA6
|
||||
:152E8300DF4A33FDBC21A44668AE836B6D4276775B10E7515087
|
||||
:152E98000ED3BF615CC1BDA0221ECAD933E1C99B5F6A031880EB
|
||||
:152EAD00A64F035CA7744EDBA93EB4EE79ED8AA806ED68A70154
|
||||
:152EC200384B5C5CB13A2C6C87F2625B27D9BE52B42D3E2908A7
|
||||
:152ED70068EB74DBA8D0FD02F83F306AB9BF6EBBBF3D3A95CFC1
|
||||
:152EEC00073217E75CF311FB693AE99AD2116F77B3AC96F85E05
|
||||
:152F010069EB97BF5CDA8AFA10A3B9879485A71F504A4E3DA5BB
|
||||
:152F16005EC7CE8417668FA964672DA4DB76067354D780F4F77E
|
||||
:152F2B00EAF95B9E3616724F42F81943481C68C3392CE63D7D7E
|
||||
:152F4000CB295DC894B61EBAA77419CA26C447A4B18349570694
|
||||
:152F5500E87C58C7BAFC61EF6024781CF2967EAD617D24843B52
|
||||
:152F6A00F6F8A4807B23D2B68312C1FFC383CF431F2C978753B1
|
||||
:152F7F0068DBBA4C1E4CEC4A680AD7A3411FFDA98E3657E38FD5
|
||||
:152F940031769F80FB095A6ABAE13503E2EE78496E591683F8DE
|
||||
:152FA9009BE3AB5B518EA1BE251DD0F9CC578047BA5BE3D9FD8E
|
||||
:152FBE00AD4C3FAC4F63DB8370EC3F6BC19FCF1C80F63348B612
|
||||
:152FD300299A6CDB31D4D7F461B20BDF44FD0C64DBCC30F4B3E3
|
||||
:152FE80084C6036D25A645F02B30AD15BFB85F266476431E596D
|
||||
:152FFD00B2C55A9D49EA9C00380A65C9862AB643EC1FFBA6308D
|
||||
:153012006CDC88A1CC9D491A572534F2CF803FBA512E9C6ED029
|
||||
:153027007431CEB77A4176C47E32DD306E2C0C66FA8F5E742F22
|
||||
:15303C00035C1A536FE40509E0E98232CE60BF0AA5B52CF0E088
|
||||
:153051002EC89765F6184F15CEF7A47411301002E09E1FD42243
|
||||
:153066004C3F9EA67929F0B3EDD153CAE9DB4B5BD36C504927FD
|
||||
:15307B00762B171BF965E9E8B052951C51776DD5945D1D6749C3
|
||||
:15309000B694CCFBD39D4BEAAEA13DA3506212D762BD8B92B8B7
|
||||
:1530A50027A8D766A84ED69AB680F67513B466DDCEA32CFDBCA3
|
||||
:1530BA00CE75A38EE113C6AEACA6E07AA190D903E9B6219E69A5
|
||||
:1530CF006FAFDABCDFA8351F369A0037B550D75C298805108ECA
|
||||
:1530E400FDB349DE46B63C280F49439B4E42B57C9F4E36F7D6B9
|
||||
:1530F900691AA4D39137F0F1437AC4FC1EC4DD66A00D4E616AB7
|
||||
:15310E008F8A79BA4E4E908E5AEC71C66A70BF3F74846C05F0F8
|
||||
:153123003D432AD469D4D5B3534D95B1D9FD23876BFB29ED8BE7
|
||||
:15313800FFC6FFF0618EE8427B1E7EF311D203A45B7670CD1FF4
|
||||
:15314D00FD5892F4B5B0CED6FE478AF63F8CEC88526D0EA543D0
|
||||
:15316200E6231969A5A60AD76B6AC91A4DE565CD1005DCD3DEE3
|
||||
:15317700A3354577B7E1B9B1C000B41F98B75627D07DD808DA47
|
||||
:15318C006E3CD36EF1FDDD86DF145BD18FEC8D16F643D2B4E610
|
||||
:1531A100EF42DCE446F446A28375C69963FB34D4CBB6CE365B69
|
||||
:1531B6007720FC02F2E2D6A0CE5E86E8C7A50EA8C14583C60317
|
||||
:1531CB0051EB5C2CAE9DBB7A2CDBCB3716D921E03EAA912D62AA
|
||||
:1531E0000969AB7FED20D93284FAE33A346F022FCB9D277C7B31
|
||||
:1531F5004DBE57A4B9439AF6195CA46B6ADDB101F35C03ED4235
|
||||
:15320A0021BC9CF945ADC95C102EE6F1C8DB918EC4DF0BBC1DC8
|
||||
:15321F00F8FC86D25EBFF9BA4176DBFE11DBE190B1E5CD7CA012
|
||||
:15323400E54DECBB162D10D77E73A7EED246546FA7B5D7EF02FD
|
||||
:153249001E81F7CB886C64A9086D65211B09231DB5A236AA591F
|
||||
:15325E00F4D2D3A4F375AE9FDA18D00FDD3CB3F45F5336DD9182
|
||||
:15327300CE9806DD48D7B934251AD8F478271CBF5B5AFD4FD299
|
||||
:15328800A29C6891B6F7796668F28EB4281A6B1D3AE8DF477B45
|
||||
:15329D005995A1629AF8E2EF0F93DDEDD8C0E4857BDEDF26C538
|
||||
:1532B200CB605C1DD0D1B636F2AECD5F2C6D9DFA2F871F59FCB0
|
||||
:1532C700A31A68E65BA4191CF04DA421D6D5DAF3B1CAC0F230DC
|
||||
:1532DC00EFC2B9A882BC64D1A5A688269B099E94657705C27175
|
||||
:1532F1005F5132771A9C9CA4F6846EA5C8BE40A4287DE4930561
|
||||
:153306007D5FD2134EB309D2DB6C42DA0F4C28A2EC26DE1C225F
|
||||
:15331B003D404DAF895ABCA8D00FA1CEDC061C8FE17BFD29C2BE
|
||||
:1533300001F45B7FEA0F567DCD39D76CA18DFBEA60AABF06645E
|
||||
:153345000199650E8658F660949907AB7F9BF7C07712DC93E0AA
|
||||
:15335A003FD96DA77FABF8CAB9D9F1ABEDF838AEEF7FBDA84C2E
|
||||
:15336F00D4C780F947715AB2CF45771668FAC57BF8655DB87E3E
|
||||
:153384002E1F4DDC37754C2985E9062F8FA4D04E49B9FC448ADD
|
||||
:15339900EC86D37E5096CE544AF22198B72475D15CD27AE3FDB6
|
||||
:1533AE00790FE2417B30EF999B67316CA4770869BBE407F5F373
|
||||
:1533C300CF6A2023E96403C56A877F6750DBB56CAD4CEF0279DE
|
||||
:1533D800B115E4A2F7D236A79F1DD193AE94CEF6F1BDD3CF6A0E
|
||||
:1533ED0046D29536BAE45DC6EB17B17F24ECB9C980F11CCA42CA
|
||||
:15340200407FDC5F95A18C629C5C787A363E717FD796672D5DEB
|
||||
:15341700687D8F8EB23307FD0BEB086E63F5DF82BC188A914D54
|
||||
:15342C0074279FEC8F67F2697C2D2FD4E2D9A16035C8F103FAC1
|
||||
:153441004928F36E16D798194AE3BA986836E9A5C7C3EAB7121E
|
||||
:15345600CDE1C1F6F659B26519C375E276EAF765DCADC067AE49
|
||||
:15346B00D765339666D22B862034A8B8D66CC9958BDBCA61EE8B
|
||||
:15348000E2AA53A80CB4878769DC0361B5321A8E944399FBEB54
|
||||
:15349500AF6DAB3565181B9BF46A33A47362A73AF895B0E6CE17
|
||||
:1534AA00C23C31D76E387788A0EE07B374D041DE6C0CF3B8563E
|
||||
:1534BF001DFBD424D36F191552B87FF857F43557B896CDACFF5A
|
||||
:1534D40057DB7A174D363F0B013F6B5750AEF7C95C88E62A504F
|
||||
:1534E9000FDEB11D937B64B226BB47ADB1EF6FF0C3388DE3317F
|
||||
:1534FE00CB7DC7F072CFA9AD0D95D7B0BAA97EC6CE6912FB759A
|
||||
:153513009B9F7B59DD29BB5B51560C01AFACE526D440F048BF54
|
||||
:1535280010FDF5D25AF8BA4EED26BBF4C827AB56A26EC011FBD2
|
||||
:15353D00BEA1843605E3BE2F7158F5D682DC52B0CFFCCE6F157A
|
||||
:15355200C8E6F84DAF288BF8E2653067F98ECECC470E8E83CCE6
|
||||
:15356700556BDEAF23EFC276817BD85E18AF9FAA19591A05598C
|
||||
:15357C0007C7A14FB875926FFEE9412DECC8346FBC997F4B99EA
|
||||
:1535910026FDFBFC5BCA34ED6F25D3C45ED04CE77C39F21CC0B6
|
||||
:1535A60095D0707B5B39E93423DE8EB5F98FFF07E47F4C5B0B28
|
||||
:1535BB00B87BA05D776C76109E828943053C05CD2561E11CEEF2
|
||||
:1535D000296D99E44F1C437E1D5C68CE0B835BF79901FA969B53
|
||||
:1535E5008BE8AB035FBF5CFD619C8DB8BA5F564F5EC80B880779
|
||||
:1535FA00AC6B8B5D7766D7BDF63275C734E90BEFBDFE8B80EE1D
|
||||
:15360F00D5C85763BBD2B1D7E7CC6FA08E747744113D5B8AE3A5
|
||||
:15362400C476EB37B0B47623C8F0CF3F35B254968F4F0297D654
|
||||
:153639007C1C8CB7D219C36FB74B1EF505A49F1B77B3B39A97FE
|
||||
:15364E007B91EE4FB862E5CB6A28FBBDC8151D163EAF602F502E
|
||||
:15366300DBC3FE7A05CE67426709A7D8E6703D17D784EB4C771E
|
||||
:15367800AB13A7EAF8D305BC57415A491E48272A92BD18F72EE4
|
||||
:15368D005CB28D1D4AA32E4AC9D4310C1B759D3CA6EA799847E0
|
||||
:1536A2004178937C7B1B7E119EF32BCA966DBAF91990177FAEFD
|
||||
:1536B7000BF263A32DF2BF1AD5E7ED3AC6862645D437CBACD512
|
||||
:1536CC00AC7F9C4B0D4D9E5B61A53F0278F3DB795D58B1BEED6D
|
||||
:1536E1006AF6F5569A0B15C5C5B49847713AB4F7BEE5DE334AFE
|
||||
:1536F60048FECBA5E88FE32588D21FC7FF0771CC8C0D65503E7B
|
||||
:15370B00C5B4E5A8630FB8C4F361B5BBBE4A785D28838C60E796
|
||||
:153720005F39EBBF2AECB2FED3E5F2FC307C7557A525B763FE8C
|
||||
:15373500AE8777A83437FA21F00A90BB8CE8238A144DAAD5302F
|
||||
:15374A0096D079BD7761A31F5F1863525C6AAD8AFB984CDA4A08
|
||||
:15375F00E3901480F1C41E87684CC2B0F7301E3963913D2E5D94
|
||||
:15377400763CC2B108C7A408D9F4288C291A3B618D29563932C9
|
||||
:15378900AB965F3116A06C01E394206F37BA5FCD0BE5192D5589
|
||||
:15379E000E7047A2C956677E580DE31AC6697AD5A1F7A05EDB5A
|
||||
:1537B3006ACD2B733FA0701DC343801F4CCF32CFE97417484EF5
|
||||
:1537C8008379654A2BCD24133E2847CA1C4A639F2B318F699847
|
||||
:1537DD0027B6356C734DF2B3A3D8A6CEBEE1C86B36CC00EBA1A5
|
||||
:1537F2005D5F813E3CA0D37959B439FA5D6B5CDDF3CA4CFFF2E4
|
||||
:1538070006ADF32F82BD5F3659C53C208B7AF62DB0DC719E794D
|
||||
:15381C0036BB98670A5E4BCE6EB27993A523E2C6BB03FCCE58AA
|
||||
:1538310098D136039EFCC73BD45520CFBA07C6D491DC98522753
|
||||
:15384600BB3B17CA1FFC30AE9D511AA9592D9C178D3540BBE016
|
||||
:15385B0086F87883EE96701D8E1B7A716F73849D1FD0CC1378F1
|
||||
:15387000B9D15C797276F9AB12CD4BFFA4722ED1BF09F53756D0
|
||||
:15388500B10A495AACA2BE2DEE75476A58855BFA06E9475E9528
|
||||
:15389A0079B30B75A7825F0AA3AC4B3A51645F00CFE5423CA71A
|
||||
:1538AF003CF4EF02F78CCD6E9AEB94E3BEF81341B47DD3D4FF48
|
||||
:1538C4004610F36D253D9F5C35AB10E363C05797A8EF93B98E87
|
||||
:1538D90052482FC61B8C0BE0CF7F6940B7F412F921679DC02DFA
|
||||
:1538EE006D517F0161685F6F04E340BD704F4F46DD29F0E3E3FC
|
||||
:1539030063C651F487FF17618E7ED64E877B5BCF813F7EC78161
|
||||
:15391800C6783EF0A8CB3A53398234F74FA31D4656B60FEDE209
|
||||
:15392D00BDAC49A71F5450AFB51AE737D2214D100FA83D40DB6E
|
||||
:153942000532DF5B66EE21BB48B5C00B8326C61FDEC26D1FA1AC
|
||||
:15395700FBE170AE7355A66BA9245A672FD0F6C97CCA736254CD
|
||||
:15396C0080388215C75F9DE19772FB2E4DCB6265A4EFAA03DE24
|
||||
:153981002201EB4C23EAB7A0DD41DCCF37C18F49C9C2FE1A2F08
|
||||
:153996009F37EE02BAF1801711FA66BCCABEA3720E7D437141CA
|
||||
:1539AB008B9B3F3CC83F3DA0BEE177F2AD2DE49BB2F38DDBB65E
|
||||
:1539C000677700AF385A86B695E47E964B18B4FE2E4534AEAEF2
|
||||
:1539D500BD9F379B0CC1443FA095D94EE5579BD306CA4392991B
|
||||
:1539EA00813CE3FDB82EB9A3668342BCAA6E637FAD8967CCCFD0
|
||||
:1539FF00F6F3F2678DA341AB7D34429A263337DA02E923905F61
|
||||
:153A1400D702E609417A0BB63F4B236C68A77415CAA076FB725B
|
||||
:153A2900D545FBA3E6EF8C1D3531254A792AFD317043FC83ABCF
|
||||
:153A3E00E11B87BC4B614E70A3B9D7889A0FA4BB4D7D34065FA4
|
||||
:153A5300DCD38BC17F16C215282BE7B36DF1B20CE1009015D890
|
||||
:153A6800519351FACD8C711BE41B07D8FCD85E01572DF015E0BB
|
||||
:153A7D008B362E6508AF85FFD590871FBE8D3077DB00FFE716D1
|
||||
:153A920060DB065C815F37F8F1C06F9E02BF50D0A2477C8E4D94
|
||||
:153AA7005FF7D30915DA5D854FE6979714D18B4378E47103D74A
|
||||
:153ABC00A042F2B826E0FFE5F4E5E83C48448BB958C5D5995BCC
|
||||
:153AD10022D86F4A3B642D4B3A81CD7A359E6991068C52DA2366
|
||||
:153AE600E6869C3C3250667D7A8CCE0570350975C67E4B14E2A1
|
||||
:153AFB00453406F90D215EFC4D05DEA69CC231AD5945BBE28BDE
|
||||
:153B1000E5DEA56CD32B8353CF32E6E4C3360D68999FD8FB05AF
|
||||
:153B25009BC63413FE51074328C0D3A12FC47105C39EB5F48CEF
|
||||
:153B3A005B1CFE047ED99FA0AEDEB2E502C00A3207C1EDD09B26
|
||||
:153B4F00492097DBE9826CF972B6A983F277F46D310DE45551D0
|
||||
:153B6400C9BA280CF32A0B5E8A2FECDF7E6E461F5EC2BB96FCCD
|
||||
:153B7900FB0A75ECFA31D6F1807A030C0DD29726F4F88F11604E
|
||||
:153B8E00B44D64ADF7EBE0CEC03B096F16DE1CBC26BCD3787B99
|
||||
:153BA300758E0CAD3119DE50CE8ACB360D5A75B574E6C9CD7E81
|
||||
:153BB80039DB2DCF7147E7B8E373DC8939EECC1C77768EDB9CD5
|
||||
:153BCD00E366BF9A53FEAF8A74FA013FDDDC6CFB0393483BFFD1
|
||||
:153BE20064C16E531CEA161838AC56D2D9503B1F9873E3DCFA61
|
||||
:153BF70086F8BA48E0D8849ECE219D66F03605EEB3F09E83F799
|
||||
:153C0C0002BC02D0A71ADE2678DBE1ED86578177C34FACB8ECF6
|
||||
:153C2100D004E12DE3D01FDC8837BDC88D784B14B9116F1B8B77
|
||||
:153C3600DC88B778911BF1162B7223DEA2456EC45BA8C88D78AC
|
||||
:153C4B00938BCBFFD58C5D442A1FDC818E8C816D1BF54BF97BFD
|
||||
:153C6000D65DEB9C6B279C5DCE3E03E0576445F89D1BE74F0C29
|
||||
:153C750047DE7314E417908DF427E6310FEA1AC29CBA33CD31E8
|
||||
:153C8A008F00FFC0673A451823CBE545D73C05E3622DFC231DFB
|
||||
:153C9F0079699B7A971778D67C5671076BEC8CCEB778DA4DF0DC
|
||||
:153CB4001F996FF1B23AD6B8DCD11B91D1CE2F8CF93AE48138E6
|
||||
:153CC9009BAE84F11BD29FAB44D9E1D1193B0A20EF9DA91F80D0
|
||||
:153CDE0071793FCA08FAF40AF7F227208EECBDFCF8E48C73B8E8
|
||||
:153CF3009789E311A0D1531C4F8472B7DA67BC41DE597E16F2D1
|
||||
:153D0800F290FC3E9B8FD502BC9B251C0F51BED8AEEF88E3B99A
|
||||
:153D1D009E47F52DD1FD547FCF87DCBD92DCAC23CF6F03B4794F
|
||||
:153D320057EEC6B5306DE33C5CCF1FD399FEA81E80B97B271B90
|
||||
:153D4700A4F8839E0985AB6987B175CCC07B8078905BC9B66F83
|
||||
:153D5C006C587B6A3E8E637ABFE44D511E47459021218D203F57
|
||||
:153D7100AAF330167B2A715D6ECC401B0688E746C9923F10D617
|
||||
:153D86009C385BBEDB378F553C01F965E6E138D3A827696C6ACA
|
||||
:153D9B00A2B109CF137235213A9F7EF662DE539E18E874C79ABA
|
||||
:153DB00054596ED05F5CC12DBF0BD24CCDB76422070F3E5B5772
|
||||
:153DC5006B66FD43D6A7A7914F6D25BB6B98BF74FA030A9ED3D9
|
||||
:153DDA0040987DD1B1A53CC82A3CE4390D79F6824C85E7407863
|
||||
:153DEF00D265A57138407607A62D9BA17C7CC21065EBFED03C4A
|
||||
:153E0400E9413FAA0580E7F3F26306C6AF043E4AF7A59780FC2C
|
||||
:153E19008C770C16DDDF721EF2F8511CDA5E1C6D16587691BFD7
|
||||
:153E2E00CBC63A4570E33883B88C9633CFEBD0665F65039D0EF2
|
||||
:153E4300EC164EF6116FC23CE8CC045BD2E9C07D1EE046FD401A
|
||||
:153E5800A04305DAF9C0B6C1A3DED985BCC7B1FB5D5CA7605144
|
||||
:153E6D009D9CF106EB45FBBCC0EF102E777618E039AA511DA462
|
||||
:153E8200319C7340BDB7CFD89D8D0F68231EE6B9016075D27CEB
|
||||
:153E9700383AD8897BD4FF7CE0E7FB45B9C50890AEA70A7D760A
|
||||
:153EAC00B5E1C0CECBFB691E86FF38C64B368ED6D8703A7A6FBD
|
||||
:153EC100362E03B8BFD60261BE38BFDC5F32D337244FA36ADD4C
|
||||
:153ED600E39AA6F28CE3E3CB5924827BD6796BEF219FFFF2F1E0
|
||||
:153EEB0008F82575BC5BC09BBB57F59EBE56918EAF54EB645735
|
||||
:153F000017E9B4E6B6A30E89C7533C6EDA70B6B225342E4F0ACC
|
||||
:153F1500CCF334D4F167D0F6D8A6AF525E185F405E1F19A77B66
|
||||
:153F2A000BE8FC47570B9D7B00395CFF6662AC13CF44207E1FE7
|
||||
:153F3F00887374AF9C8D779FCF747756A1BC6E1ED3CFDFFC9DFD
|
||||
:153F5400E53F0337D69937272EDFDE0047567BB3DA8F681ED6B2
|
||||
:153F6900779BEEDE60D7049587FDCCA2A74C3875F835DFB5043E
|
||||
:153F7E00F729315CAFCB8E459CFAC6B8D9ED12F5122EC6B94E46
|
||||
:153F930084DBC1DB4BD971E201621C78825DCECF208F775BA70C
|
||||
:153FA8003AD3BD3C543EBB2D76BF9EF7AC063A8AF1A2BAC88FA0
|
||||
:153FBD00E9A87F56A80BCC61ACFA3715EA8270F05D1FA4BA1001
|
||||
:153FD2009EE2636F8927B7D4A8DAEB1E79ACAF707C17E9FAE127
|
||||
:153FE700DC688FCBE6138003E0E99E82CDF1DC8076F2BF1C7DE8
|
||||
:153FFC00CB16AA13EACF3A696F837448EF34A429E63377BF6960
|
||||
:15401100B55751DEAFCBF171ED73D18930968D6D51DA7CD43A54
|
||||
:1540260057969B80F9C2A041F6E1A72D5EEEF415DE3C60489E81
|
||||
:15403B0009D50B3CF77E985B8926F215CDAEFF9199FA43BBA8E9
|
||||
:15405000EA3A46F5AF02BAD9F42D8C21E5C8EFA83F68AA6507E9
|
||||
:15406500DCEA0F17D1164AE4D0ACFEF09BEC21B28F82386BBD10
|
||||
:15407A00C53AEF8DE53CCC863BA12D5BFDA46BD06AC700EB5097
|
||||
:15408F0002CF30EBFDBBC9B6F9B139F4D62D7AD71F5D6E805B09
|
||||
:1540A4008C8F17D1F5908E6966E83A6ED72B45F5429EE3ED1A8C
|
||||
:1540B900A63A2DCCF0CBB1ED3BB42CB45FF0E333686B3FA90FC2
|
||||
:1540CE0041FFB3ECEC5BF5F802B44FA72DFAD8D1CE4A281F618E
|
||||
:1540E300B900B02C84B677A86C76DB3BF99FD0EEE422F8E200AC
|
||||
:1540F8005FBC083ED981CFE24B84CFAE4182AF982F4C4F5B7B51
|
||||
:15410D00C8F8E5E3D69DB37A34B9B1B268CC49FCDE694B85B9DC
|
||||
:15412200AB8F454608B768CB223D9DAF28B43D906D7E81BADD7A
|
||||
:154137005FE5AF95E2D6FCDB17DDAF3E0969020D7CAFF7745A0A
|
||||
:15414C007171CCBB00C3728774E97446E1610E7E10609570CC13
|
||||
:1541610081F683EB92828072A7A6058347FA65909112F78EF437
|
||||
:154176006E41FFD4EF90876F114E1EA37DF073F5C3CB58EEA8CC
|
||||
:15418B006E84B85ECCA72E398C36C1FC5578BF10F827613ECE96
|
||||
:1541A000A4618387FC708F93DC502E4F7B2AC306A5C3B2F461E7
|
||||
:1541B500D4175D5097E13B07AC345B1230A7C77511618DA6D2CC
|
||||
:1541CA00FDBCA87364CFE91156CC7F6BB7A694F49C5713F9BC33
|
||||
:1541DF006FE4239A8275E6214D5DF2C03A841FC74E840561C3C2
|
||||
:1541F4003D8476802170FA88521587BA9EF88AEA631AF0F08C51
|
||||
:15420900F22D1C17EC3CD1FE3CC8C03E4CE7D47D08F24FED3C5F
|
||||
:15421E004CF7FE627BA1B8B1435B84EDBF534D840DEA8475C1C0
|
||||
:154233007B41912E8807A61FD3109F6DA83600E10E2ECE16F0E9
|
||||
:15424800609555C003AEBFE62C3C04BFCF77A67A70AF79421B7B
|
||||
:15425D0000FF11EC2F8013F4C3B50D1C832D788F010E0E289865
|
||||
:154272007F49CF6BEA66C2C301C50BF5431C48782E05F74EF013
|
||||
:15428700CE0D280B6DDA86A0FCBAE0B97EC75EAD65DF04E6FFDB
|
||||
:15429C00AF30B6A326A5BCCACE698B42ECD38D32FF61C79E62DB
|
||||
:1542B100EE9364AF96ECCE74D31AC19251EB6C608AD245CD6D7D
|
||||
:1542C6001AB46D0F7C711FCDC8BD36D3CEF13C18AE55611B6D33
|
||||
:1542DB00C1B934EA1E86DA35F61AE9B58DC2989B4D34B97B3965
|
||||
:1542F00021A2F289B0BA0760AD5726F19E385D977777D1FC14F6
|
||||
:15430500E248C03B44F9639D82FCD94E49FEC4723E26E3789DC3
|
||||
:15431A007D0EE461FCF6E35C2AF628D9BC0D74C886953FCA8CB7
|
||||
:15432F0063D91084B540FA2648DF08E9D1AF56FE44A79307B46F
|
||||
:15434400A74E11C205087F6EC567293F91E666AF6C71E26CC493
|
||||
:154359007200267FC7B495B76EC18D388A60DF00385BE467BB1B
|
||||
:15436E00F88E901183705C2FE882F934970AAB5202F7D2ACF8F1
|
||||
:15438300981FB481000FF9603CD2E77E0DCF015AF769601F6EDA
|
||||
:1543980067F6FC1ADBBC346E97B3AF1F6D3254D3D97DCB0FE76F
|
||||
:1543AD004CE8876D2260E9B05F325FE2388B9E057FC8BFD6990B
|
||||
:1543C200FF901E1F944F7704650CF3B54BE75CD6D9C17D3A8668
|
||||
:1543D70021FF015E6B95057102B9AFA9FED35F53505EF5771D0F
|
||||
:1543EC00B2EEE580303FCEFDD9611CDFB58FBF50C26AB387DBB4
|
||||
:1544010036C2B827DAF30C4B67D09273D066BC9038B0B40A64E3
|
||||
:154416004F3FE61BDA67C151E0932982CF1F4D46C83E04B8311D
|
||||
:15442B00CFEAE8785B6D519E85B90BF05C4A6FF3CFDFD8ED19DF
|
||||
:15444000EB81733B80CDF71CADE934CEA4293E8F48F76DDFA789
|
||||
:15445500FDF632E9F6CF4907ED5DBFDC7A52D4DCABFDFB65D2F4
|
||||
:15446A00DFF52ED2BF7C997491778477AF76EE32E9DE60EF5C67
|
||||
:15447F00DEF49B73F6D3707DA7B8FD01ADA65F9BBDBE31373CC9
|
||||
:15449400F1FADB874FBF53F8FF76FE73C2C5E2F6FF76EB03FFC6
|
||||
:1544A9001FFE47854B45F8F7CDE54BFF67E0B7DB47ECBDA5C765
|
||||
:1544BE00FEB580974916FB24D9B869EA1F94E2B7AD82AE287AF2
|
||||
:1544D3006F573508C7BB56C5EBB6AB74D607656EEF0675DEEA92
|
||||
:1544E800EDAA2CDFA9CDBB6E40F5F7688AC835A8FECA063509AF
|
||||
:1544FD00728BDDA7D75D80B159F236A998DF1F9BD7DEEB35652F
|
||||
:154512001275FF7A70EE12D7502389974B7A3F073C392036A83C
|
||||
:15452700E53D2DEAC3D7372BF53DCD4A50BC4D1D2CF98082F66E
|
||||
:15453C002017F17167AEE2C7F83C77A54A6B0FAB078877200F1F
|
||||
:15455100A9AF4C2AA8DFE584FB28BC59757B1324DFD5DF9450C1
|
||||
:15456600697FC9BE2F7C2E0CAB6C182A0086BD0043A0A87C2C1D
|
||||
:15457B00B70E60C078942FE45F5CF6053BDFE9A27CF3F967F20B
|
||||
:15459000229E150FB3DEB578473AE49D28896B888F3CB3F2BAA4
|
||||
:1545A5009AB10555801B11CAF4AC69061C35288BC416B5F6430B
|
||||
:1545BA007CAF9B0DF4D57F9EEFDD3B3F4934C0759110C0817BDE
|
||||
:1545CF00705791DD9019D81126929358E21EAA1BC074D286E933
|
||||
:1545E40028D65DBC51ADDFB956E52A1DD8F2171DD83A01B66A62
|
||||
:1545F900B181FC1320203AF4F254B6A822C1B45D595499547755
|
||||
:15460E006DDD51680B88E73FE4F3360C8CEA893695ACFDE3E983
|
||||
:154623007BB0DC9C0D075793C2BBA784F99A05837767A3EA852E
|
||||
:15463800F2B06EBDB62E3F2ABD115ECA66F0520F6DA7624D974C
|
||||
:15464D001AE889103CDB4AB62BE580970A31A996B264DF0EBB47
|
||||
:154662006D2EA6BACF947B0ECAD221CC0BF802BAFB1C1890F65F
|
||||
:15467700F5DD372A280BD5F7DCA8CCA53F74226F39ED1BCCF4C2
|
||||
:15468C00A7FAA93D148F3BD5A2066E8AAB3CBB539D07711FE630
|
||||
:1546A10058D06DFF1BF05FD10370427BA9A88CA8DAE31DCADEFE
|
||||
:1546B600131D4AC5A9356A4003BF9DAB55ED233740DBBF41C1A6
|
||||
:1546CB003610009CD6AFB170C1C7B95E996DA0B60D729ADFCD92
|
||||
:1546E000DDA28AF112BCF7C4EFC1BD9ABAEEFE79DCADAAC8AF72
|
||||
:1546F50052C59550DE7577A8E2EA1BD4E192554A04D70156CE75
|
||||
:15470A00C42F0B5AE766287E326CC57FF233AAF844873ABC35B0
|
||||
:15471F00ACB861DCF53E7E9B52FFA1925EB48D2C24C27D9E6CDC
|
||||
:1547340047DFFD684F4A0BABF5A76E51B9931DAA067139618691
|
||||
:15474900169BB08F07E99CCD3AB4A5220C40BAE31D7D34D76B64
|
||||
:15475E0067BDA5DE505F99B7BDAF3EB556D906BC4106FF21F8F1
|
||||
:154773007E1A79CE4FD6ABE250878A72B52CDF8AB29D20263FAF
|
||||
:15478800A3726BEE5429ECC90E080FABC38033A43FB6719C93FD
|
||||
:15479D0094FF03D75B7F0A70A80DA881539F512B4E6EA736B0B1
|
||||
:1547B2000BDAC03CA07D7954EB2BE64B4877A41DE928DB34C57B
|
||||
:1547C70036791DC0D28BF0039EF16EBF1EF84F96DCA5CC837208
|
||||
:1547DC0010FEC1ADD6FFAA8BF900F225C78D71616C58B7278FDB
|
||||
:1547F1006B3856DB36606A85F843BE0773AE054EBBBA1BE290E4
|
||||
:154806003E39C070D71CFD4AEFE3B54AFDC96AC06DB57AB97630
|
||||
:15481B00F4129B6947BF64563B421A94433B0A8A77115E1EB6C7
|
||||
:15483000DB12B6A380067E73DAD2F6C49FAF2F0F6E00FAC4FB9D
|
||||
:15484500B7B35BD7CF0BC6FA39F10ED57157446F5D8F749A376F
|
||||
:15485A00B0B68F9DE8ED73BEF52FBBE87E9DF2C4DABE8A6C6F1C
|
||||
:15486F001FE7019A5FD9A0B9810E1781F688BFAB8916AEDE0ABE
|
||||
:154884006D0BD0E10EA0C30EE2E9C5B428B16991B4EEF5F17365
|
||||
:15489900C29550766CDD14D105DB4D6CDDD13974019AF86EB218
|
||||
:1548AE00E9027CD7B7B6882EEF2BA2CBABA43339D3B7B742BF10
|
||||
:1548C3001E29A213D987863680FE9B6D5A9D063A39B4D9F01E37
|
||||
:1548D800E971A6881E3FB2E9817D3A60D3E2123A006D8A695101
|
||||
:1548ED0016FDD4FAD2E8DAF5EC6ED62B663FD5374FDAD057C62A
|
||||
:15490200FE7A7D79E26FFAC4ECADE4AEFF3CF5579FC8C01DBD70
|
||||
:1549170093F0CE6F6ED05CC07B2F96C5B47207EFD04F2BC4AD95
|
||||
:15492C00C0FFFE42AD5873EF2CBC975F0EEFA9C548F322BCC7E7
|
||||
:1549410009EF4E7D8BF10F3CDF779D8D7F5C13C17EE2E0DF5732
|
||||
:15495600847F17AD6D58F81DB1F15B897C0AC2F0DEF0E23EE01F
|
||||
:15496B00A47F89C6058B66988EECD3DB74B0701E9905CB97015C
|
||||
:15498000CF6286EB7D12BE49E03DA59007DE9FBCF763B7A9F5A9
|
||||
:154995003D5D8A54B254292BB956C1362C02EF61273AFAF6FE68
|
||||
:1549AA000B849D5AA3F84A3EA2784A3E6A8571ABFAD8F537F4B0
|
||||
:1549BF006D8BBB7A11AEC5F69DF2D046BCA5B28BC648F4477B35
|
||||
:1549D40018CE1C05CB47BB9125CED86D8F1F180F75A511AEE79C
|
||||
:1549E900F3793FC429F4FD27A1EFE3D87506A693B85E82F2017F
|
||||
:1549FE008C75FE27ECF8DF82FFFA9779FCFA8E505E2975976B5E
|
||||
:154A1300FC36D4D3629C7597298C2C795F74FC768369A4F38504
|
||||
:104A2800FEFE99F5D6F2FF06E2E5D1A4A89C0000A7
|
||||
:00000001FF
|
|
@ -1,928 +0,0 @@
|
|||
:150000001F8B0808AC5A10380203736261323030655F65636426
|
||||
:150015002E62696E327D00DC3A0D6C14D7996FD7B3F5AE71CCD4
|
||||
:15002A0078592F3F8DD70F0AA949E8DD022E07F61A1644AA40C3
|
||||
:15003F00012D88A433EE52268844E8924B571792229D1B0F8EB1
|
||||
:15005400013B7DD0C7608813E1640D5E58529C6C909D101DE4AC
|
||||
:1500690016357749A4E4BA8A7227541DC9AA17295C4A2F76455E
|
||||
:15007E00259438EC7DDF9B19EF7831C4A1524F772B8DDF9BF742
|
||||
:15009300BEF7FDBFEFFBDE1B3FFCD3BF7F88B808896E2484FED3
|
||||
:1500A8008890844A880EFD1CB4BBA00DB710128396439B8076CC
|
||||
:1500BD0018DA4E68B51FC3036D16DA1DB8364E88026DE92FBA6D
|
||||
:1500D2001EFE486452BF7C63D90D63AE825E0863FB54E1A984C2
|
||||
:1500E700782F999F6AB59F9E3C49B19D522690D8ED9FFB737D9F
|
||||
:1500FC00FCD38F45DB66F353D2B6AD1433AEF2F2F209D77F491D
|
||||
:15011100BE34E18787275C3FF52678EDF13693B20B7EE47FE17D
|
||||
:15012600E71A20BB45FB4AA95D5E29DC72DD983C8589E52B4C68
|
||||
:15013B00927E7959B9A987A7DA6E4DCF24842D778E97CC7F63BA
|
||||
:15015000F90B6D6DE8BEAEEBF97C299D49C95956A43F7A5BF4D5
|
||||
:150165005F7C512AA1FBB7D87EF4AFBF99905E79919E97FCDF83
|
||||
:15017A00FFB93C759E5BCDF3F48DEFDA29E89C2A8EA109DC0E0B
|
||||
:15018F005FF8FFFE2B387E24ACB3FC6765A432BB6F911CF4C674
|
||||
:1501A400C1977CFA72F2308031121A8EE3BC3E026FE14E96FF67
|
||||
:1501B900025AF9AA21793BD46B5B3B1A708EC8A429FF1CF1557A
|
||||
:1501CE003E4F7C81FDC4977802FA5DC447C2618EEBEA932EC057
|
||||
:1501E3004BB79000C012130F873C52EDEA50657DA14AB86BAFA6
|
||||
:1501F80014D4B75C5C467C1D4F126F20B8231E269759EF9EFE32
|
||||
:15020D009D846F61249CE1FA03844C0B6A716FD52F20EB9C6518
|
||||
:1502220035C1447C7AEB6916F59268404FA9249C341086C4F6C2
|
||||
:15023700182477ACC79FE300570FFC87E3FBC3A4657AEB6A1692
|
||||
:15024C0085F4D4BE7FB34AE4F5AC7D7DB3FA3C213546D2DD045F
|
||||
:150261007C32C81F7230EF6A9E22B7A8B81EE7116EDFCCCB8A9D
|
||||
:1502760067E549751FF5B490DC6C5641483010844C26EF66BEA1
|
||||
:15028B006067FCC3B9C4E721F3D53DC3EE1669F72655BAB04CF6
|
||||
:1502A00095B6AC654B008EF03EFD6EBA6531EA08F113F958A63E
|
||||
:1502B500F8F4EB015853B966BE7AB950A8FEB04D8DB4FF933BA0
|
||||
:1502CA00021254BC2478DA75DB3C456FC2D306E429775C5F2546
|
||||
:1502DF0078A202FFB7626115F9D9AB95B5608BFC601B04DD5402
|
||||
:1502F4000575C0F90BA1C39DD5640A91FBF4DC8A2D0DE780D715
|
||||
:150309001DC0AB3D1FAB26E3C3487898BD07DA0F053964FC6180
|
||||
:15031E00B09F6E2C85F4EFDDC054B2B33F93978886ED30B49447
|
||||
:15033300768879E085CA723BCEF75CC37918AB1763BB718C8F81
|
||||
:15034800E218973A503F887F41CB78FCF545FC0256ACB3E8DA10
|
||||
:15035D0034052D8BEE84341DF8D924F1874DFC62BDC065D1B458
|
||||
:1503720069396575E2BF52823F5CC47F03AE9BF17F2BFD283F5C
|
||||
:15038700BE7DFE1BC41863C362AC4325B1FE8C3D3EF66ED31296
|
||||
:15039C00F6BE39FF0257281DAF69ED17F8883C2F83386A5A1923
|
||||
:1503B1001BB5E418C30B73E3E48AF573539E9BF37F2BFCD76E07
|
||||
:1503C600827FCCEEB1FE1E1B7F838D9FA45929AE521C387FCD8B
|
||||
:1503DB00E143B62C02A73CD433A10CE3F647A7B91FAAFA55D204
|
||||
:1503F00030CFB4AD06B685FE0DBED990327DD38903EC5BB9A572
|
||||
:15040500685F6F5587E09B3474B0AC44A2105B784D2CAD1ECE76
|
||||
:15041A00B85B80BE512D77A9570A85A0D33FD6FD99EB3BC4FAF6
|
||||
:15042F00CE09D78FAD053C57715DCCE12B18A2352F4BE4DF3E26
|
||||
:15044400A3E73F3562F9670D7FEEAC3AFD034D21B14BAC4EB966
|
||||
:15045900475D4C7FC5F6DC3B9020F2BF81EF26793FC4F5605035
|
||||
:15046E0089631EE0D00FC49222DEE3788D3E00FDB481E324B744
|
||||
:15048300A8470EEE8A93DC7B10B366C4F7CDDCA178E9E3ACFDEA
|
||||
:15049800FD956A27C4B7F6F7D7837DE688787987152FBF0532CD
|
||||
:1504AD00C87598AB92BC1BCF26E134E7D056692EE07F3ED0CF67
|
||||
:1504C20033CC96D2CAB56AA12CCB24D72A55EADDC8BAC949C5A3
|
||||
:1504D700A50DB0EEB2E30AC28C421A3D4C5E56C05E0CAB886E6F
|
||||
:1504EC00F23A8C67712DF4FF45113C02DE68FE6D03E4309096C9
|
||||
:15050100DB45AABB203749D1BBD5BB80A7629CBF17F86C6701DD
|
||||
:15051600E06D6788F8BC40FB933677C4BBE135950CFEDCC09CF9
|
||||
:15052B0087FC728B5FC455F5515EED2E3BA9A05ED65592181934
|
||||
:150540001C30B244C0E918E7BB519E705AC4FC2A42FC2496D294
|
||||
:1505550047B7F635873457A377C309F0B30106F089DD3F9C0F86
|
||||
:15056A00364FF16B85424D9DF26B359AFF9457B94EA8B1FCDB9D
|
||||
:15057F009C84327177E57915E18379C83D202BD2385A0672CBE6
|
||||
:1505940003461053742C63CEC97F32C0F601EF8697D559078ED5
|
||||
:1505A900C3BE4D097EC0EE19B0BBD8136BE99A8829F3A21ECFAA
|
||||
:1505BE00CAE3AAB013E634CB4601878D1EADB5725A02721ADA1A
|
||||
:1505D30000748276C8A27FA15F800E9016D959D40FEAE5975DB2
|
||||
:1505E800DF079D844D9D583CD83A09002E874EAA854E56AC5F7D
|
||||
:1505FD002CF0900C0BB60AF9C00FF764AC07F676126B984CB013
|
||||
:1506120055E82BFA3CD80FD619159837071F671F423DF547CC48
|
||||
:150627009D9ABBB94EF94FD5EDFED9920D9ABB2948DDCDE3ED05
|
||||
:15063C007B3FE4F1ACE201DD96CA8CF2A1DC1EB2006AA3679877
|
||||
:150651000CB2CABD9BD88E3B896FAFB6B1C9BBE105F0796ED6EE
|
||||
:1506660014E1A5ACB002FD803221E3D52B26CFBC5F7F80DEBF28
|
||||
:15067B00988492F15AB2470D8C32C12FE9EF63DDD98560AF85B3
|
||||
:1506900006ECCF8CF5F4E05E053D0AD9486CD0C0F501D8C35394
|
||||
:1506A5001C72BD05754ABA6D6364519B29DBDD753F5B485DC4FE
|
||||
:1506BA006BCAFA6BF53A79F216B2E641D6939396B5F5DBC477B6
|
||||
:1506CF004CC8FA30C8BAC39435047BBBE1F7A67CB1E3FA532095
|
||||
:1506E4005F6DF63BEAD4489390AD2C36430DE9A1E66F635D12CB
|
||||
:1506F9003B20628096FFDC38EB2553A0E5B81F85AE5007644910
|
||||
:15070E00D12FE4BE8CF5801EFA8A7AC8BD6A209D523DF4801E4A
|
||||
:1507230074D043D0D24325E80169074B68831F4E194FF38472E3
|
||||
:15073800C0972AEED189F7E6346B6F46C6E6D1C78027EC8760F4
|
||||
:15074D00EF3AF72BEE55C253FAB5151EC10BC417D8AF2761BF9D
|
||||
:150762007ECADD9543AA6BE659D5D53524F6EC11C79EED297B45
|
||||
:15077700C5DEB37E9C3F52DCB335E8FFE8D7CE7D3B0BE05046FB
|
||||
:15078C00BF4346AD9C4C71EEE7B1FC943BCDFDC1CBF1EA46B191
|
||||
:1507A1005788F48AD452BDAC53F4AB5DEB45BC8E06486C8EF056
|
||||
:1507B6005F6EE65EC88572F20A93D6ACC59C974940CE2B4C4D3A
|
||||
:1507CB00B05EFDB8C2662694C06E880F77A4541FFA4FCCB0FC60
|
||||
:1507E00087C7671D931ABD55AB61BFC6581BD118FA4ADA05352E
|
||||
:1507F50041586188A322F20CD3A03568598B1F7CEB04ACF36627
|
||||
:15080A008FA9011DF3FFEF0D51CBE01EF84BB6DB3E6764B09B53
|
||||
:15081F00E9E04BC89773FE51F0AD1524C1B6E9879693F065A3B1
|
||||
:150834001E6581396FB61DCE4A585F7C435A0F9AB4B278CE7380
|
||||
:15084900CCAD4A8E3621FE34B9357E5D33D7E74BD637265BC568
|
||||
:15085E00FAA513ACA7DA492677758B1C6DCF47110FCCDD958C37
|
||||
:1508730034A1FEEDB501FD984A61CE8BF0B1B9803B950925C1C8
|
||||
:15088800A6164C8305238BF5A9CC647C22F0A6D48CF11F7DAC82
|
||||
:15089D00167D35D76F94D64FEB1E76D43FA2AE642C8AB58F2916
|
||||
:1508B200DF196CCD7ACFEA53689DF58F63FD1C0D7D1060A1FEDC
|
||||
:1508C700411CD21AA61EC43D0BF2E27E1A572BE3F1F93E2FEEED
|
||||
:1508DC0053C31FCCC6F17C5BA75C51FF86BE06E7DDA19D24F6BF
|
||||
:1508F10004C39C9E7B40D4893C8BF50E9C875D33CD9A270A7153
|
||||
:1509060003EB2B92DB8E7006C2C9C119702E7E5A9C8BA747FA68
|
||||
:15091B00C59938181D54B1CEC0F544AE15676212AA8F4F8F3447
|
||||
:150930008873309E89CB8066FBFEFBADF3F0BDEAF32EFB3CBC70
|
||||
:15094500D43C7BDE10C78B67CF89F2349E3DDFAA29397B62AE9C
|
||||
:15095A00B6CFC3B992F33087986B3F373B0F7F4D8C7C4CDB1875
|
||||
:15096F00F11C3CA3BA601DC6BA3D10C776BF9B56BC55C7314647
|
||||
:150984008A5A40C43898C739A0853569CD9CA4A7C98449A13EBA
|
||||
:15099900A222060A9B891858EDADFA15F8C48098DB4EACF36D2F
|
||||
:1509AE0091DF1EC423D60B9D9B7024F62763F7BB19657A24259F
|
||||
:1509C3006C00670103C726F7FCB3217C16EC1BA8492A585360D5
|
||||
:1509D8002C47BF7906F9224BD94BA843FB5EE0366C531F98D827
|
||||
:1509ED003613DD0B94C796AA28EB3EBC178056DC0B403BFE5E71
|
||||
:150A020060693CEEBAF15EE0EB6CD6FE17B0D944FAE413D8D15A
|
||||
:150A17005B750FD830CA2C7939CAEB6D9D6DE290470CBF43DE6A
|
||||
:150A2C00042153049FAD7D967D070C8499DC73613C3F729F6190
|
||||
:150A4100E39D01786D5BDBF1E9CE478AF1C5E5EB107ADA94DD30
|
||||
:150A5600D3689F51E58D49A5A67590C5800FAC0FF04CAA79CD1A
|
||||
:150A6B003C8DF05CE80DFC0A748363EE92B161475C9A41E7F61F
|
||||
:150A800060CCB93802B97A659F1AD0D07F1A18C81E708580C77E
|
||||
:150A950031BED23C564648A3E66944597640DFB5C63C7FE1F838
|
||||
:150AAA00E1DA2106B508F7C82F412CEF33EEA4A70D29B9C7210B
|
||||
:150ABF0097CE104EFF119EB74C5C4B268B2B79AA880BE087AD61
|
||||
:150AD40073A08BE8784634F0DDA6F34DE4D11DF2F43878D02783
|
||||
:150AE900290FC2651E30E5D11DF27C2DAE1279AE96C873F536FA
|
||||
:150AFE00E5C938E479C7C1436692F2205CFE7E539E8C439EAFE6
|
||||
:150B1300C55522CFB51279AEDDA63CC991A23C67478A3CE0F891
|
||||
:150B280064E44138D99207FB4B268BAB449ED11279461DF2440C
|
||||
:150B3D00ADFB0C19F3B9E5E3750A53EFFB09D2357D04DF975A45
|
||||
:150B5200EF19EBBDDE7A47FAF83E43BC2799F065A0B1AB4CB4FF
|
||||
:150B6700ECAAF59EB6DEAF59EF17ADF751EBFD1DC0B38B9EE038
|
||||
:150B7C00D8D760AE93BECCC5BD03F47BE86B5CD403D04FD337E7
|
||||
:150B91007994DEC5CC73C5592303EBE05C51334BF33407939EC7
|
||||
:150BA600667FDED3EC053B606D8F3236D05302CF7658BB9ABEDF
|
||||
:150BBB002AF074437F337D83E3FAB74C3E38D2DC4E777313AFA4
|
||||
:150BD0006E0C025EBC6B5841DE6167B6BEBC5CDC59004C15F5B9
|
||||
:150BE50034E2D80B5B5F136359C7D8335BDF1463C8933DF6E484
|
||||
:150BFA00D6BDCB6DFC7751D37E886796E8A7F9768B3EF2B4B65E
|
||||
:150C0F006E60998DD386455C36ACCD2BF216B26011EF5F514FEF
|
||||
:150C2400B3B84BB1743AFC88A9D39CF8EE61CA3EC3CE1F304F8C
|
||||
:150C3900C7CD9BF4EEB6700C9A638CFF9D09F3A1850369071099
|
||||
:150C4E0007CC651F2DCE452C3DC6617E1DE80F75C7A01FA7072F
|
||||
:150C6300399E8FCE099E2E0B3E1FA5CFF15EA1DF1EE3F48870DB
|
||||
:150C780040FF03D73D4D7B67526543E88D85CFE692CA0F962315
|
||||
:150C8D001F9D424715509B2E592E352D0AED5EC861EE6E319754
|
||||
:150CA20011FC56243D8DB3DE949A82A1830B0D98AB5A6EF28FE3
|
||||
:150CB700FAAA807D72FD2BA9E98BDAE7161E82B93F367B9A2BEB
|
||||
:150CCC00B4F2C6CF2EFD2182387F57CB22B8FEB7BD831184FDD0
|
||||
:150CE100E0D269C8FB3B044DE03FA38B7686E019E4CCC444BBDF
|
||||
:150CF6004BE026E1682629DA84E0036A8E0CEE89E9172EABAEBD
|
||||
:150D0B00F735D87FAFB0CA60268EFA31D75D36368BD6D41109F9
|
||||
:150D20006B8602EDB495C755D7FA47A0F6D9CFEEC05C097A3363
|
||||
:150D3500E9268D0ED1EE303A45DB23F4590EE705D7FEC701FEB1
|
||||
:150D4A007BAC2A1806782A6219C20F8A36619C15ED52A1F32969
|
||||
:150D5F001700FEFD7F10B5D5D4600CE0A386C977D2E887F6692B
|
||||
:150D740061875D467AA498DB4808EAADB0226CB30D6C93A007C3
|
||||
:150D8900B81CCCC1D845B6B4CCBA2B17ED45A301DA9DDF273E14
|
||||
:150D9E001E76B7C0318F1D182DF8D1971E85F14A7A02EA055D0D
|
||||
:150DB300E8AF0CCE160BBE8370E6BEC25CB9CD82457D5BFB8D79
|
||||
:150DC80061FF29A029FBDE533B9625AD6F6D507FC1B896FF8DAF
|
||||
:150DDD0011681D62E8C0DBF3AF1BF0CE75E02D104DA9B20FCFF3
|
||||
:150DF20039EF1B121D323E69B0F8A1B3D9F52F4D1A4761BD6C70
|
||||
:150E0700F1C32D7E8ECE29F283B9EE030B36EBE0277B0B7E623A
|
||||
:150E1C000E7E36033FF0CEF904FC6C76F0F39845E33DDC47160B
|
||||
:150E31003F598B9F4A073F98AB5659B0E86F363FD8BF193F51AC
|
||||
:150E4600073FAB811F78E7C909F8796B71919F8FBE30699C1BBB
|
||||
:150E5B00C19C66F28334909FD6D9457E30D79C3161052D37C413
|
||||
:150E7000D68EE694310A676A3BC63A3F0F6874906BF434C4E84F
|
||||
:150E8500CD4C0EDE173FBC2CCDF0FF560EE74E2AD65D9091B78B
|
||||
:150E9A0062CA7F8CE0652EF17B1D79334EFB7959D57995E60779
|
||||
:150EAF0058714DDAB868C5631B5601B86ED8DB7E888DCEF53124
|
||||
:150EC400DACD37037D05F850E85178AEF0049DCB77D105E03353
|
||||
:150ED9000DBC9346C056AB799DB24D35C8A1447D3EC5BAF55427
|
||||
:150EEE00A207E093F41C4F53C60FF79E663564409DB6A597D514
|
||||
:150F03005EBAC23AB67C97EDA99DCFF66E59C8F6F52E639D97C5
|
||||
:150F180056B223B56718DED37CFCDB32DCD30CFFB7E7D9DEF32D
|
||||
:150F2D00ACF2C231F5E0A5FD500FEC5FE2E4EB9D30F155D1D593
|
||||
:150F4200CD6363B176D6B090F8FCCE3121403B3B7A93F1CDD75E
|
||||
:150F57000A378C2B5A3BC77889FA09D44FB08EB7B33B9B26184E
|
||||
:150F6C00875AE06A1DF179434911ABC046F2DCE4318EF6C5F74D
|
||||
:150F81004F46AC1A413EC789CCB844C51D2BBF8AFF6810E6FCBA
|
||||
:150F96009A687BF8A8DBAC7586451B66A4007551554AEDD6878E
|
||||
:150FAB00946EBD5F9926A5D4236543CA91E88072186CF9ACFEB4
|
||||
:150FC00086E27DEF0FAA8005E0837A9722AF632AFA4185833FB6
|
||||
:150FD500BC8390D890187F52AB6CFCC4FE770F2B6EFCFB0A33BF
|
||||
:150FEA003F6A63B934C991E73990C72A925F35CC4A3E8179C4C6
|
||||
:150FFF00CA8567451D63E6AFB366AC039D99F98F5B303D026617
|
||||
:1510140047314F8AFDF09845277B039D3BC6D131F3E559510FD6
|
||||
:15102900D97432169D0F2D3A264C0F33E3709A87AF12D21B76BE
|
||||
:15103E00B5941F48A981E83CBCDFF3FBB5EF468290ABAE5E372C
|
||||
:15105300E5FD40FBEBC6CBD0F782FEEB14380779061290B39AFC
|
||||
:151068005DA1745CA678DF1B66C92CC489A4AB65333D652C022E
|
||||
:15107D001C92FC3DC8435D3C14DD1F3948BA13788676877AE21E
|
||||
:15109200D23D50A3C5468CB974C4705BBA8ED02E234A0F1A8197
|
||||
:1510A7007C8A734F6AE702DA67605C895D0039F2FD5C069C38D8
|
||||
:1510BC000E276206072EAF93E6A617FA9A9DEBEB9443AA61E19E
|
||||
:1510D100C0B5D8475C147049A1FA78B464BD1FD647E97306D4F3
|
||||
:1510E60010D6FAEE09D7E7FE1173537D1C7909C3DC02A833C232
|
||||
:1510FB00B48BE1DD96413A120AFD2FC3E3C238779A19E470422A
|
||||
:15111000D23A0C3FE46037D6BBB17EC3AB751B95DA39718F365C
|
||||
:15112500DE8FCF5A7EAC8FF3E331FFCDA614D9E1BF55502B8C04
|
||||
:15113A00F928F801DA0F7DB4FCC0805A43E6A9A66CF5A66CD11A
|
||||
:15114F00BE66A73F0768170F6A529384E766C29917ECB1733E0C
|
||||
:15116400F1E1FBBE999DCAC54DC4F7E2CCA422D3F9C236ABD16A
|
||||
:151179000EB096AFEE7E085BCF52F13F2D15B383264E79893719
|
||||
:15118E002E43FF568F0947444B8336DF14F65D1D91AB16A81DE5
|
||||
:1511A300EEF90F79AC71EED71FB2E7F1FF6AE4E8DC07251B479E
|
||||
:1511B800B4FB41BFDD5F591C17FB04E498438E36617E801A931D
|
||||
:1511CD004E8BF5604D631CA2520BD51883B37A0061360998CB74
|
||||
:1511E200D6779F4EBCA3A0247692076973837DCF82DF034657E0
|
||||
:1511F700342F36BFD19B7797884F4E7633C487637EB95B7D077F
|
||||
:15120C00713AE82F17B829C33B5949FE0CE87719B80EE95BEBFC
|
||||
:1512210032B80EE89D71F62F3AF158BF83B9E39073F0FBEF1552
|
||||
:15123600568DF74FFC285B8BFB92DE1B09D2798DCC8A0F3FA1C4
|
||||
:15124B000F35EA629F778AEFE5BBA75C413ADC2F3F67DE75C28B
|
||||
:1512600018E4AB1A1BBFA4CD6558B309D81F7EDE4272FD7C9ADA
|
||||
:1512750003B6C2829520374F16EE10F0BA0AE2DD0B5A5D13D6FA
|
||||
:15128A0008E677FE432A9C9E184473435AF339F8E46CD63B4C08
|
||||
:15129F00104FA67AF42893454EE83FF3BB42A11AEF06B789B5BD
|
||||
:1512B40069B17681B69FD5C84FAB776AE759448333656C9E811D
|
||||
:1512C900F489DC6F081EB09F4B19923C5745DC52FEA88DDBE4E5
|
||||
:1512DE0011F6DA589FA78C2CD058A44D6FACD2A6477EA04D6DF9
|
||||
:1512F30044BE376975CDB67C923C5B2D956F3273820F7BACC455
|
||||
:151308007E7C18BF7D9F03DB65E24B08A9C63AC6E53BA7BEE98E
|
||||
:15131D00C2FBC734D64D747A10725E6CC8C0DA424A0E31D7BBE7
|
||||
:15133200E7D5FF065E7B5CC48BF6C77BF9465AD358456B227E15
|
||||
:151347007A47E366D0D32A5ADBB8CEB237E2A8965F1577D4E057
|
||||
:15135C000C34289F51CB80C60298AF86BE1BFA088773F6B90BB5
|
||||
:15137100E15DD638AE0F26E78571BD8CB2027D19F8284CA5ECCB
|
||||
:1513860008E953189C8702AE3EF17DE059F17F5203D67D685A64
|
||||
:15139B009CD1719F797D57D4368823337C4755D7CC4EF57052CB
|
||||
:1513B0006AA9B9705E9D23EE5933868EDF5E760E88EF34384755
|
||||
:1513C5008E0DB1CBE2FB0C65B3C8A9E508432C18F17DA56F880C
|
||||
:1513DA00CDD2BE6A126B89398EDF4DF4248EFFBC89C883064DB6
|
||||
:1513EF00A6F03B8821AF1950A330EED79AC5B817DEA980AB6D72
|
||||
:1514040092F05E22F6BA7118FC026582FD5F8D7715B3A2A71B27
|
||||
:15141900C59D456ED038AC4942EF788FF70CC43C5BC6A0252368
|
||||
:15142E00CA11B1F27D7D01CF75FF43CC13064755A4D993BC91CC
|
||||
:151443001988C3038611280C0F1CD6E045326894648038C168C9
|
||||
:151458002556E40688EE7B5CD089266EB450729055768B5B5FCA
|
||||
:15146D003081041F5CF34C206BE1DE84CD94932B2203071A3D8B
|
||||
:15148200ACCBDE79BB68A5AE721677C7D5B9DEECD69E4779615E
|
||||
:151497008D6CDC65AB38E7BEAFBBDFCC9BC9A0E0DED5FD987AC3
|
||||
:1514AC006FBEEEF77D5F7FFDF5F77DDDFD7547F5F31B315A88AC
|
||||
:1514C1001BB88ED10BB618607BCEF31C0253B2E941318E59B05A
|
||||
:1514D600E751CCF18671A03F4CDCB28FC53814642D3F01387A39
|
||||
:1514EB00433155770FB3BC0699D9A328ABEF954FB03595493179
|
||||
:151500002F4698A20CB3BD8A291B2C2060E47206562A6057702E
|
||||
:151515006D46C454576DDF30DD1B292025CAB0698761DCE8CF5F
|
||||
:15152A00819102899467C3E8203CE5C8192A83AFA9C032D15E21
|
||||
:15153F00DC8F21F4769E6B22BEBFF4E59C7F70B1EFE3D4E291CB
|
||||
:151554003FC5FFF019EAE881BE606BC0316AD10929C3F44592AE
|
||||
:1515690030FAF4188BBB3F01BB07D1C3168CBB93E9B888CB7601
|
||||
:15157E00C1548AC935947C3DCD6728F916EDE819566B6CBC2309
|
||||
:151593004EF46F7DA14186B319437E5C0345D9C8C3B42F1C65B4
|
||||
:1515A800F07A019F12B1117B029F3EDC2F92193EA6035EFC1FE0
|
||||
:1515BD008E1956FFA7447F768BFE64BA60C90D6224A00FF3A197
|
||||
:1515D200D7696F826C29B2D96359B4C7259E72CEF3BD2FD3E9DE
|
||||
:1515E700C559F685CBFB75B6CF555344C27ADD1915C74C0DDB68
|
||||
:1515FC0013E730B2613AACC00E2BC6711C376BC1E339C47B8D20
|
||||
:15161100CCE1A1E409E0F7049D3FC9E4EED3053F0C0636CD57B4
|
||||
:15162600191773BF8421C3372C8708FA8C3DC3678CD9888F0E7C
|
||||
:15163B009BF9EA933CF549BAFE5B5CD600837773773ADE8E53ED
|
||||
:151650006931CC3E443BF19DB5C90BBC5B6D82F729479CE97FDA
|
||||
:15166500C09B29DF579729B7607BF3C0A40DD3614E3B2C67FFB1
|
||||
:15167A0091E9BB1863D6F8B58FED8E9CB18D4FE7C7710DCBAE50
|
||||
:15168F00F58D9EE71BABEC255B19C674ED8BC82CCBA6A03CAC55
|
||||
:1516A400727C5F72A1536BC8299F85B4EF47DA71A3028C776FB2
|
||||
:1516B900C4B945C6BD0EC0157E28639F5037702C5865E5F6325F
|
||||
:1516CE0090834BE0614F1B8EA21C1C56FBB9FE71989E0B037C5D
|
||||
:1516E3007B2C983703D3F3C0667AB261D8A62E5B9B2D58671E54
|
||||
:1516F80058A1C70ED38D4431D8B685423E246AA0FDC0F1E915CD
|
||||
:15170D00FA1E4FEB3BC0D017D8D63A4811616B1AA8BF5EA6BF42
|
||||
:1517220031C3D2F39907713D3C418FC2B8F785B86DCB8743BE31
|
||||
:15173700611C5086397BF230D6331B6CF350B4EF681FB7A15DC2
|
||||
:15174C00C1B526F8EEC0C2B8CAF0839EC14490E683CB36B861D9
|
||||
:15176100AFBF203F5C0678AB43D8DF626E732D99615C500F659D
|
||||
:1517760079E5E5CDDFD6591F27B43E7DB8EDC0C284CA7310AFE4
|
||||
:15178B00436EFF8BB8B09D5FD507C68DF0F58D7165F76B42D8B7
|
||||
:1517A0007BCB77737B9C2DEB6C7B9C8717F886F302710A3E0187
|
||||
:1517B500F76CC4C7F6C3F3C8214F7D92AE9FCDDF6E9BDEE11865
|
||||
:1517CA007678A68F71E2993EC60B3CD3C733C903DBEF9E3EC6AB
|
||||
:1517DF009D9EE9E359CA8161FD57ECDF66E6BC221EC371CE7D03
|
||||
:1517F40003CA7489CDF7C15397785C62129B2F9473CA245B99AC
|
||||
:1518090037A7CC652B5B905356642B5B2C0B3F129834E23DC8D7
|
||||
:15181E00972EF2CBAD582446838A3390893D6294E5EA425F6464
|
||||
:15183300628FA8C6E38C9CD853CEE4C8C8BE924647DD2AE853AA
|
||||
:1518480098670742867C3B2105072B357D32E5763A3AD5367878
|
||||
:15185D004A20935E85AFC3FE0874EA70F4F7E5646A805EE941AA
|
||||
:15187200044EC44576EDFFFFFDD5D610F7D86729370D75A835F8
|
||||
:15188700F749EBACBD4DDC2F24EDFA293667688F9E1A67CFD1D9
|
||||
:15189C00532CC7AA3D796A929DC989D2C446BE16678B410D07AF
|
||||
:1518B10019FE18E539713F71ABF7F3BC65EE67BBC1CF0E829F2F
|
||||
:1518C600051FC9E456C2E466F9EA1AE083783AD5F2CF84EC22A0
|
||||
:1518DB000E263BB47D51C0E307F847F749AB91D6D98D7C8C8CD2
|
||||
:1518F000C013D71B1D0A8B154DFCBF212BF68CD107BF617F17F3
|
||||
:15190500B179E0A4896D045924842C12421609218B04CAA2F079
|
||||
:15191A005E57A33D7EB95EF9E158F228CB033395AEC0D1422EFD
|
||||
:15192F002B0EBB13600702F12CD83D00EB0B9CB66045089B0F62
|
||||
:15194400B05B03A30863FB3A5CA6572E810C4196172F4D9765C3
|
||||
:15195900C37AE2BE700965E95F7DBDEDBADEF69CCBA30F054261
|
||||
:15196E001F3EAA26EEDAEA6C3E2B24E2AE075E9CC0EBDA3CBC7E
|
||||
:15198300C6A17E29E3B574F58DF4C1F5F27B3C0FBF8582DF525A
|
||||
:15199800A0DD1F9AAEBFFA35F4B77322E52E8076B44F4C6F471A
|
||||
:1519AD0012F0344F603BBCAB6F54976EA43DF13CED91447B1A71
|
||||
:1519C200818773F7417BBE01FDD6FF8236297E2A2BA594D97E0D
|
||||
:1519D700B0798EBB0889001CFF4BA4D6D88DEF01D550403A8B99
|
||||
:1519EC0015CD9495EA57D91E33D899FA08AE37478DF001EE1352
|
||||
:151A010095837CAE32FE32F86249077FD8CDD64B0DA837161922
|
||||
:151A1600328B9A4E9A139F72DC7EC09B9AAD1B53F0DFC1FFBBA4
|
||||
:151A2B002E7C9ACDCF0551F70A3C1B20DEF42A9C1E51393DA4D7
|
||||
:151A400083F4D02BDBE92D867A454D43663DD0DB2D709CFE9440
|
||||
:151A5500D3EB14F4E0BFCB2E4F59C8B3086489E5ED5524AB7C94
|
||||
:151A6A008E65FFAA7879434EF95C513E26CACB73CAE789F2E328
|
||||
:151A7F00A2DCCBCA278D1A9A39CF92823652D2A5E2DE9D0B7DD7
|
||||
:151A940074CEF9956E888768D4B905E28CAD55B8AEA977AD2A29
|
||||
:151AA90056A4A02AE29A9E8517D5AAD0BE60AD2D5F60CF48D3BE
|
||||
:151ABE000728ABE7DB3FAC0AD8E01FFFF0E5AB085FB3F5832A70
|
||||
:151AD3007B7EC18537BFFF1AC29FF8DB9F559162DCDBEE373A7F
|
||||
:151AE800FFE5856AAF4FDF4A1E236E974ADCD3F8B4E58F2987E0
|
||||
:151AFD00B2FD338F35264DB4210E0F9FC331989CDD362B3EC2C4
|
||||
:151B12007A3341D7A7D6F2DC19ACDB5337ACCE8C3C12D85FC732
|
||||
:151B2700EC391DB5EC39945967724637E69FEF1B9FA7DCF14B5D
|
||||
:151B3C002977661E46B55EDDAFE2BE0AC48DEEEE8551753D59D3
|
||||
:151B51001EF490E5AB16298EE0799045CF42AA6ED0FDC17369BF
|
||||
:151B6600B9C4D99AC4CD4C1E740FC6284E88F50673CADDB672FB
|
||||
:151B7B0009CA3B3372ED2E9048B70BCA1D65D07FA2CE22E6D307
|
||||
:151B9000F8B73741FD0651FF0EB0FF3EE1DFB0CC07651584EB9F
|
||||
:151BA50013FE5F7261402B81FF8B6C75965C8869DE1C7E1E8494
|
||||
:151BBA007E4A4462A60B7C6CF96F53EEE8D594BBF9CBD42CD1C5
|
||||
:151BCF00BE7511B0D3A03F5976C52BF45442F9839E86927F6EF3
|
||||
:151BE400E84E320BF50CE3600B37AE5FE21EA16CE30B73854FA4
|
||||
:151BF90047980F360222BFA108F02E00F97B9712B7EEE7BABFE7
|
||||
:151C0E00600DE016FB3054F8F31749BFD13B3AA8BEB90CF7E984
|
||||
:151C230002068F654B0C561EA830D07717B863DA0F963E5CEE8D
|
||||
:151C3800AD8CD2D65732F1168577A90F2255788EC2EF1CFC9498
|
||||
:151C4D005EB0AFF01B17BFD65EBEFE85F82EFE12D7BF94C6F455
|
||||
:151C6200BC4CC0A3FFC1E161012F009F5683EF7480CE837E2B7B
|
||||
:151C770000FF50CCD618264DE9DB84BC823E830E9896DCADF9D7
|
||||
:151C8C000796596D9394037406B3ADD4083C4A48D17FA6DC93CD
|
||||
:151CA100249BAEEE22B370AD1BF1FF33CC476702DD31A81376E8
|
||||
:151CB600733F65E191051EF932E76DF493947B90E7F5883A101A
|
||||
:151CCB0007D1210DC7EC646A361B23B837D6F7F7C7198C4CCED0
|
||||
:151CE00026DE9F0EF277F883F2CED48D9AB89FD6377A5C9D2F99
|
||||
:151CF500B1F50E93EFB3454DDC575B6BA3C3D71DFB8DC7C61FD8
|
||||
:151D0A001B5F363A98A53F37A3FE209FA043814ADCA386B8203C
|
||||
:151D1F003C443146DBAFAC0BB01C45CC8D8BBC4B95C819C3C77B
|
||||
:151D340072E8BF303D7CED9BF68A7557BE8E3BC2F70C020ADF8D
|
||||
:151D49002F40BA387EC227CDE7593FDC40FC373E8438D2F3B0B3
|
||||
:151D5E00AFE741D0065A69FA79F475DB3AF0CB69FB17A5E3B899
|
||||
:151D7300D62B1BEC9C14192D20E037D8FA3EE0A0631B591E841D
|
||||
:151D8800CF9A67CD2103EC0C12CA784CD834FCBEFB5EE296C690
|
||||
:151D9D005FD2E40F5F52ED362D6D77D99C6CC448FDD57B923824
|
||||
:151DB2003324A32D66F3191AA37790C120E6EA4FFDFB7095BD05
|
||||
:151DC7006F6E1263BBA482E45D1FE56B9BBAC03B22F026742EFA
|
||||
:151DDC003FC0ABC738DE25C7B3F0CE1078C757E7E0457B08F1E8
|
||||
:151DF100D5BE85FD2A3BAF0F3610F126393E7D19EEC9CB83B482
|
||||
:151E06003039AC4BC933BAAB28C6D6F966029DB961AA3922869F
|
||||
:151E1B007128296D91944EE316F91D6D2C95F279A25230334FC2
|
||||
:151E30000D1B1877EE72A0ADAA6DB4CEDD635E358B4B587EE23F
|
||||
:151E4500A4A9E2B3B8A291C80FBCCAE64201E554E8D13CED0713
|
||||
:151E5A00FF15E847FFD5CFFCD7BE8523AA67B4EB5E466F5CEA4B
|
||||
:151E6F00A49571CE7B38A67B301E13F082484C972B13AC7D8726
|
||||
:151E8400C801D584B1ECDA30C8F6D1BE85361EFAC411194EB76D
|
||||
:151E99006F6E6830687DCBED46FA7D1A3FFDFD997CEC7DE0FFB5
|
||||
:151EAE003DBAE0875E831F80CB601F91173B4D07DF4FDF9375AB
|
||||
:151EC3002604ED1501BE8B47F83C5FC44F203B2E1F9E4F922D53
|
||||
:151ED80047B9EBD5ACFD0B186FC88303FA1AD73F43C9237B8A4E
|
||||
:151EED00F95C4DFF25C07BC351D5E5116B64C0D3C5421DCF3873
|
||||
:151F0200CFC2F2B64D3C470A7DCC3231BFAB653A12D7FF14CA3C
|
||||
:151F17002CDE19DF507FD7261607B33C8E7A51EF7BB67AD5C94A
|
||||
:151F2C00D7F7C04F47786213DBD3D0314F00DB82F349E4A3F77A
|
||||
:151F4100A598EA1DE5FC20DCA2DB2AF09DCC4377C446779BA8EC
|
||||
:151F5600F7B6ADDE7AA08BF5466DF5DA44BD9FE4E16F7DF2845B
|
||||
:151F6B008EE3EA1CE3F16F74F403B5789E06F83BCC746798AD4C
|
||||
:151F800015F7FE1DF04A0619AFB5365EDB05EEF7F3F03A6EE3A1
|
||||
:151F95006197A8F78F7978BD60ABB75BD4FBD7AFE035BA39C326
|
||||
:151FAA006BFDD7F05A6FE33529700F6C9ECE6B7C7386875F8943
|
||||
:151FBF007A439BAFD19F9B33FD59738DFEACB1D1BD68F5671EA7
|
||||
:151FD400BA2336BA13567F5E836E77038EAFB328031AB6D3C5F7
|
||||
:151FE900F68AFB3F106EE9FC7EA87F84C4D23ADFE0E43A7FD59C
|
||||
:151FFE00C1755E6FC8D00E3B39ED8E86AFA00D741B045D8B5E7B
|
||||
:1520130083AD9D0D02474F7E1C14C7ACB516ADE6DA3C3C4FF630
|
||||
:152028005AC6DEB1F18CE771E5E394F92FBCB7473E4D31CE73E4
|
||||
:15203D00157569FB206E94C197C9F5EF6A0B8C33DA41DCA3B7F4
|
||||
:15205200D9A01F40BBF2D91EEB3B9F23A61ED18755D417BEF704
|
||||
:15206700774085F9EA1E9C9FAE67B832BEE12EC055007E216DFF
|
||||
:15207C005743C3AA6B438CD954664F2D7FA1A33D8D317B2AD7C5
|
||||
:1520910001FF60471DB6F7ACF61663BE4EBFEA5848B514E65951
|
||||
:1520A600E0BAEF659EFBC57D5382D3A7C29E86FB786C07BE8FF4
|
||||
:1520BB00B765909DE791C3BA46D12F4586C12FBDADB9A2670C99
|
||||
:1520D000F44D79FDC98F32F33B9ECFD0A9F970BB1AD712C4FFBC
|
||||
:1520E500A9546A5EEE5C8FAF47B2FD70B3640AECAB1BC656B88C
|
||||
:1520FA00D4A0A18E36B4C5AE426E93252BCEC6F32DBF4BA57368
|
||||
:15210F003F9529969F39DF9E372855F27B70545B3DBC8028B73B
|
||||
:152124001EFA84C30A9EA11AA188E7093C4355E6C0DBD558FC4D
|
||||
:15213900EB284E3462F92DA141ED96D0DBA8336615D6C19800DF
|
||||
:15214E00F3A901EEDB1A3333FFDFD618ECCF6218A3101F4D680E
|
||||
:15216300FCFBB7D1A77B0B3C1DDA7BBFCDF0E49F6271928DA775
|
||||
:152178008451454EAEF1298E80451BEF02BA83D18C52ACEFBB81
|
||||
:15218D00F50B33FDBEEE8B349DE492936B0BD2795F309F147980
|
||||
:1521A200F8C8D7FC5B3127A28F9AEC2C5729CB19BA17C5217371
|
||||
:1521B7005CBC6E9CA2FCC12D9AB2BC17FAFA347CD36B4ACA69E7
|
||||
:1521CC00B3D1164F5E7C84906714E79AB30E316FCD43E7218C26
|
||||
:1521E1005DF2E2F69B4EF94DC07DD620B4CF94A2EF9A986F8196
|
||||
:1521F600EB9F69DF8DF38A42317E11EFB7C57D14A20CFFE7B9AD
|
||||
:15220B00EF83E596A21E4DCC40BE127482E78C5397E0CF65E79A
|
||||
:1522200003FA1BF945BCBE6082E51BB1BC0FF9A4897CC83F5F73
|
||||
:152235008EBC73DD13EBF1150319FD463C138F703CFE298E9FB9
|
||||
:15224A00E34D30F9CCFF791775C01C0EEFAFE823C32A9EA3C3D2
|
||||
:15225F0098977F9330B14ED63800FCC707ECF7C9F07623FEC926
|
||||
:152274004778FB389D78161D6B4D00EB323926B91C6FD9DA6987
|
||||
:15228900E23D116C4E63A7993E5F1B32382F1586CCE4526BF06A
|
||||
:15229E009C8480E112F9A00C1E1EA44F2DC5D8F518CB47B4F334
|
||||
:1522B300E07D6D39B5F71DD431257908F7E6A9A5272CC606DB7A
|
||||
:1522C8007A9874AAECDEA8B0C1E4827C61B904EDA515BA819379
|
||||
:1522DD00E4C2A24E8D1EB8533B7F21E526E3036CFEEDC53E92E8
|
||||
:1522F2004F6992F22EF545F8F9796BEEB2A070FAFCA9A36E8876
|
||||
:15230700CDE7B2E650E327CD7B6F740E15FE4BD3D229CC23ECDB
|
||||
:15231C0077F2F969B64E711D425E4A845C589F04A33C7F4D1EC1
|
||||
:1523310030713E8DFE0CF5097580C94AE773E9A35FA6E6D8F47E
|
||||
:15234600384B9F59DE7800C63E9D30E6F9028DB87EE2519697DC
|
||||
:15235B007F88FE14E6E9CF287706AFC098BC2BE965E7B07B1FA4
|
||||
:15237000E5F4E38FE2251B0798DE610E97809B083F27E6B551F3
|
||||
:152385005137915357C04D841F15E3DDC2FF9EF8E67CCE37023B
|
||||
:15239A006E22BC55E03F27EA2673EA0AB889F0B502FF3281BF77
|
||||
:1523AF0053D4C57AF8BED8666FBA6D65F88E67DBF04C9B0BF426
|
||||
:1523C400A8107C95A40C98282F49DEAFA19F092883788676EE70
|
||||
:1523D900DC505F9504F3D3F91D135A9132642ED22FADF5557FB6
|
||||
:1523EE00A64991D3E66B51E71617CFFB9C373332638D14993002
|
||||
:152403002D9D9D09B62D7915D7D13263E0FBE02325766E884EE9
|
||||
:152418001B8F627CA5ED0AE2900F0E68BD85832AF23677ABDF7C
|
||||
:15242D00B4C633D301B409101B3892EFB2FD46FEFD88993B9E8E
|
||||
:1524420079FE24D08431631F272FDDDCA925FE89AFF3C9C2A6AC
|
||||
:152457007DDD38D98BB9A2D618E91960392BB2F0A7385696619D
|
||||
:15246C006E00C41A8FB1B5F7CCDED306C51910E7A9FEF0FD47F0
|
||||
:15248100DB78AA2DF83FB0D139F1445819A04E4F17936729E02E
|
||||
:15249600ABFF2CE377E9E7397E1778C13A44EEC03326265B170D
|
||||
:1524AB00298E373A0FC6B43ED015796D8CDFCF00B8703D05C6F8
|
||||
:1524C000E33C764700F8662CC77BC33087D8F2BFB8BFAA46965F
|
||||
:1524D500D2420FDEBDD7618CFF3A435BCE1387B8224097AF4988
|
||||
:1524EA0098D85F7DE0F7E5B303C6154113FB378B2694BB7268E4
|
||||
:1524FF0066B7BFA4B1C1463F6CA3AFE4A12FD9E82FCE43DF7F80
|
||||
:1525140083F431BEE8AC0C18162FC8C3D825CEC362A0954B5FF5
|
||||
:152529003E3BC46829910103EF4082B9B789B18FA4F03B8F16DC
|
||||
:15253E004706E861887BD0A74DD9E31C5C7393FD66679DA1E108
|
||||
:152553005D60532FFAABD87E5FC96D2BFC75CD41E54F2A2AB7BB
|
||||
:152568002A0FFEF1A60794CDDFDBD9DEF2EC4E6553CBB696A616
|
||||
:15257D009D2D41A5FAF107B7EF686968DDFEDDEFB4B63F5EBE5C
|
||||
:15259200F2EE9501A5E4999DAD4FEFD8B1FDB9C79B9E6F0AADAF
|
||||
:1525A7005A55B9EAEE157F7497F2D4D3DB5A762A81CAB255156B
|
||||
:1525BC006595ABE125581E0896DFADF8D3FB5B16BDB2B2E696EB
|
||||
:1525D100B6EDED654F6E7FB6ADACA9B9A96DE70B65CF363DFDA7
|
||||
:1525E6005CD9CE1D4F96B5EC6C2B7BEA85B2A6A66D0CB66DFB24
|
||||
:1525FB00F6B6953B6F5B758F72A7D2D2FC74BBD2DCF254D3775B
|
||||
:15261000B7B52B4FB6363DF79D16A564577BCBAEF61548E5FA76
|
||||
:15262500F037EF78FAF9961D654F41B31E6F6A7FF6F1E61DCF95
|
||||
:15263A00AF7CF2B67B2AAE853F8D9E9D679AE30B37EE67F71A4D
|
||||
:15264F00F88DB9BE8AC612A59CAEC4B35CD6398D88B406EFD1B8
|
||||
:1526640038143AD25640FA8DC6DFA7D2E7341A958DE627BF703B
|
||||
:15267900AC91E48735BF526DF861EC7D0CB6C40BCF37D176E26F
|
||||
:15268E003E09DD6FB47E9172FF74A9146C50866829942D22C3C6
|
||||
:1526A3005521A587B2F2B0B4370030B4376B6D30AC27830F04B5
|
||||
:1526B8009C66B752B4CEF2090BC036CE203C96C0FF5701F73E78
|
||||
:1526CD00F9E5368C13CFFD756A16F2653FD7603FD310BDC2F71F
|
||||
:1526E200CABA58FD12A31FEA13F9B2E9856FCE027D3B4FB48D99
|
||||
:1526F700B0B3D32B1D642EF2877C78959314DB3003E6A998E3FD
|
||||
:15270C0046C657E03EA9D7577DA7866DEF02393A7F52A9E1B5D5
|
||||
:152721006A7EC0C5D7AB0E1961E58746CD08D08678CA0BDF5BC8
|
||||
:1527360074F01C97B77A850630D34EF3A1548AD1EC62FD72CC9E
|
||||
:15274B003C9D4ACDC1FBC4F8BA738F7113F805C439F916AEE733
|
||||
:152760000700768CF1E5047F7908F90AEFC775B9F956BF5967CC
|
||||
:152775006CA2BFC3BEBBCCFA0EF7571405C69DDC957029F7980F
|
||||
:15278A00CEEAE3D0DF07186E1C8738068B94D7CCD22F1D6BED4A
|
||||
:15279F00EBBF28734BDEF67EA87927E5FAAAF2D27752B3ECFD49
|
||||
:1527B40081FCC8C08FD7D65F6D1197114DFEEC556C93121D4848
|
||||
:1527C900CCC13BE7E8622314ED4890E2B6464F926CF14697828B
|
||||
:1527DE003F3EC7EEC3F3F96AA1ED0F18787F29CE1DDF9470BE3A
|
||||
:1527F300A41A18D348EF3FA3E11D51F5B8CF12C6B3DB611693D4
|
||||
:15280800F6EA41D50C55AEDBA414ACFBD079D1F0856E67EB8DA0
|
||||
:15281D00462235EB23B12F128AF6D09BB2F4A01EF3BFE763BD01
|
||||
:1528320066A8773ABDAF1231F07EEE40B49A12F915EA666D83D9
|
||||
:15284700793795F63ADCEB35DC4767F617BEDFE3C0F58C8BFC2C
|
||||
:15285C00CEAAE601889DCB204E78925E29242ECFD880F69872A0
|
||||
:152871007370AE72F3AA3796CE0FBEBAECD6E018C091DED4894A
|
||||
:15288600D4AC658A23C8F8917B0C5C7376C1383C0F7A9FDE0F44
|
||||
:15289B001B3FC6FDF1F831F32F1696A86C7D186CE4D142116F97
|
||||
:1528B000290EB6761A075C565DAB5E3BD4395837A0E29DA7C812
|
||||
:1528C5002FAEE7E6D2C2F18BDFB7C2F7EF39385FB8A679E10D71
|
||||
:1528DA001C3F7BE9E2A241CDFBDF47282A4A6D14CFB45F64E72D
|
||||
:1528EF00E7CCD0EB6A1FE05D5454AADD8577C28E47D55272D174
|
||||
:15290400E80C9D68C33D2E05FBA96E8566429FA0AE38770F1B8D
|
||||
:15291900B8B71FC4F58EF08F791F88B18B31B4C4E6610AF015FA
|
||||
:15292E006A64FC877F6C8E4DA5DCA70B783BD7439FAECDD37719
|
||||
:15294300308F9E9FDBA6DEA914CBE9403CEDE2FB4530C69CE3B3
|
||||
:152958003A8C83FD4601CC4B42C923863196725BDFCE80B1811F
|
||||
:15296D0036F0AC903BEEA7A22CC22007AB4E3F94B1F7F1970D63
|
||||
:15298200CCA762FB8F50A7F48D6CD95F0539E6E315C7ED82680B
|
||||
:1529970007F57FCE653E359CFD1D933FEA33B305FB0D4BD6BDC7
|
||||
:1529AC0020EBDAE88079F5B8F0F9F676A34E8A761FFD0D6F378E
|
||||
:1529C100F63DE2DB05F84A599F458C5D2C6E133AFA2BAEA378CF
|
||||
:1529D6007EDA51F780867B86DFB2F450F40997670657E8379C5D
|
||||
:1529EB00E736D00DE083E9C6A2A2B59AEF178EA0A523783CBFC9
|
||||
:152A00008DEFB30A1D39A3625CB78C9C5987FAE1AD4C30BD3021
|
||||
:152A1500F565AAEBFD214D025BBB4CE8035F0FC8EEFF1190B788
|
||||
:152A2A004F3EC6E29DD9A01F5EB0BF577E2DE46E8D0BDB37B8AA
|
||||
:152A3F00679D4FEE2B717C437D94FD343A30AE7A218EAC17FDA3
|
||||
:152A54003EC3A623EDA023AD1F701D71809C25A123E597B99C53
|
||||
:152A690059EE01F6FFF14C3F223E4FB84D6BFDB7B672B0676627
|
||||
:152A7E0049B4CEF447FFA7BDEF8F8EE2B8F3AC1EF54833D22015
|
||||
:152A93005AC3CC20B0905A443892A33833625024598481B05E2D
|
||||
:152AA8009910769673B2DD92B0C7B1BD109B64B93B6E1FEF85E7
|
||||
:152ABD00C42318890137B8E913589615337224AF7C0B398507C9
|
||||
:152AD200397C4F24E2C239B021DC2C211C9764F1388FD8BAACE3
|
||||
:152AE700CF283E62E3C466EEFBA9EE1E8D846CECDDBDF7EE8F21
|
||||
:152AFC009B7EF3BAEBF7B7BEDF6F557DABEA5BDF5A69AC4D3DC0
|
||||
:152B110064AC4ED519D4075AF65353DC2E34E6371EB9869F2B10
|
||||
:152B26000ACEB2EE45FDB55654BA5B0DDE817DA2914EC869824F
|
||||
:152B3B007B50C5FAD98475AE1E32F7037C3D69949F0DE4EB5DA3
|
||||
:152B5000B09131CED8A10527686E3ACCD7BEA454B701BDC4D514
|
||||
:152B6500A9935CDE8BA786C193F324B9DB582D9F34747AFBF5F8
|
||||
:152B7A0011F5B46C86B3EA61EDEA07C8832E36E6FE07F17305BB
|
||||
:152B8F005F77BC253C273C2C7C56F00937D8AFD97F633F64DFE9
|
||||
:152BA40063C3EC5966B0DD6C07DBCEFE9A6D618FB38DEC61F62A
|
||||
:152BB90020EB600AFB125BCFFE8C7D917D81B5B17BD96AB68A61
|
||||
:152BCE00AD642BD8729A41B6B066D6C41AD93216664B59030BD8
|
||||
:152BE300B120FB0CBB9B7D9AD5D3F3297617ABA3A7967D929E0F
|
||||
:152BF8003BD9127A6AE8F9043D8BE9A9A647A6A78A3F95F42CC7
|
||||
:152C0D00E24F057FEEE0CF42EB59C09F72EB999F7B02D6E3CFE1
|
||||
:152C22003DBEBC675EDEE39DF694CD78A45B9EB9B73CA5B33E15
|
||||
:152C3700733EF0F17CE85372DBA7F8233FEEDB3E2E6E3B338E52
|
||||
:152C4C00F3B1C15A4DE6674B4856A96CEA8C32F928FC6AC84FD6
|
||||
:152C6100B7BE6BE93B6D7DD7D3B724D037FA96CA5A8A1FD17442
|
||||
:152C7600D6A6A569522C098A26C98B8F4A31FAA7E89F597C1419
|
||||
:152C8B00E598B6496BB90D3659B6FCDC969F407E31CBAFD8F202
|
||||
:152CA00073905FCAF22BB1FC0AC80FF95199FC2CAAC4A2412BC1
|
||||
:152CB5002FE8F906AD3CA0D71BB4D2428F374869A202F66465D7
|
||||
:152CCA002D880E49BE4BA3D975BF93E469F845B99D8790EE4D6B
|
||||
:152CDF00090DAE3375D4FEABFB5D679A558E9F0F091BFD90302C
|
||||
:152CF4006E7F87C24A298CFC0DF88B679B555E76BACEB07167CF
|
||||
:152D0900E31CF5485B30EA2F719AE8329F770775CCF318EAC994
|
||||
:152D1E00D3043B815FE0507298F1E3A7AC70EA135BE5C5866EE7
|
||||
:152D3300E593FA2FA67F94E245D15F4A8B0DD105BBA3B3BFA3AF
|
||||
:152D4800C2549C74DEB7E498FAD62D7F8EFFF1EC5CE82698E770
|
||||
:152D5D00F7656DD2B4C76AEA6D705D4699EB74145ADFFC9CB4E6
|
||||
:152D720083788DD11C34D8447DA783251C4D4611ECA1469AD5B9
|
||||
:152D8700C9EA66BE1E37F943E732E0046EAC898E533A0F6B8218
|
||||
:152D9C004EB4514FB8A08E5673C90D4611BB8B60BFCB700622DC
|
||||
:152DB1009DE959FC24C1F463F25B06FADADA996B124159E77EE0
|
||||
:152DC600E0EF029CCB151A44A29914EF6A10313F96AAF537A019
|
||||
:152DDB003B2F85A8C826BD9EAF3BC17E6C33D7C9803BEA28A727
|
||||
:152DF00032EA74942F9E2957A5785D186F57BCAE01EF28EA9AFF
|
||||
:152E05000E72191A71391FC3DE6230A8C5799B68D2225CD728D1
|
||||
:152E1A0002FF58766E1BC58972FB879095CD33CF312DC2F5F20E
|
||||
:152E2F0037F133A82CB8C53C03CDB659F714242D5D08ACEBCEA1
|
||||
:152E440025A012345F49E83A4B28D8DF81FBAD15E23296DEA113
|
||||
:152E59007B64B1814577C2AE9C8BA565DDB4FF6AEA31D5670A9B
|
||||
:152E6E001A789E941F5F47C277B4574F2E882B42AA17DF464EDC
|
||||
:152E8300CF23FA5FFB50BF0AF9A02ECA670DA62768DE242EFB76
|
||||
:152E9800EE83DFA5FC5FEE833FFCEAC9AF7F865F39F9F5CCF080
|
||||
:152EAD00DBBA82E0925EEBFBFA83AF874860D63CF2157D1B3BFC
|
||||
:152EC200A355AC7C5D6DAF7A25F46CD3045FB75814BF44F57999
|
||||
:152ED7004A5BB4F2BCEABA4FE336CACB2DBBF3934F88CBC4D496
|
||||
:152EEC0090EEA0F15196BFDFC7F4EB862B69DAE3E476D4C70FBC
|
||||
:152F01003406307FA2F298FEB7C61DC2EB2AF051CC5E098D3CFA
|
||||
:152F1600F86623C142B4BD42F09DD7056D9FFAEC86D7B43B22A6
|
||||
:152F2B005486B4CF20DCC56FAE581D72ED46F93B47D94821CDB2
|
||||
:152F4000E3BE33EA725DA3F05DFDAEB6D7C9FFE97ED3FD3796FB
|
||||
:152F5500FB3FF59FC966FD7DF679C0E8CFFB128E333AF0B68DCF
|
||||
:152F6A008D6BF11F14367CEB5B850DD07FE84F3FAB2CBCF0B4B0
|
||||
:152F7F005270FEA2BA865D0A2D1C3FA9422748F8C900F4F5CCDC
|
||||
:152F94003A120D70EED52FFD07F5FA43578C85C2CB14E792E1D4
|
||||
:152FA9008A1F69C4BC15F94F3E745E77A50A1B469F285CC6F5AF
|
||||
:152FBE00645FE26BDE47138E14D1FAB88E7AFCE1507738708AB3
|
||||
:152FD300F2977EA3A12E12608EFE68D485FD1069D75189C3FEC9
|
||||
:152FE800E3A3AF513B2C96F726B3244F16C9DDF1FD714D11D6BF
|
||||
:152FFD0069D44E7FAEC36E288D00EC2917F610B4E464F5EF0D02
|
||||
:153012008ABBE74DB97E5994E26F8FAD6EE0EBAF05E6594D31D5
|
||||
:15302700F56DEA279D0DB1F1C30D4C3FAE4F82FFB0BE47E1EB7B
|
||||
:15303C00C95F4C1D211EEAE6F6486A2D7B41BCBDE97BB9DDF0EB
|
||||
:153051005ADED648AE4DEDA5B616D744A2ABC4B430DE2EA635C4
|
||||
:15306600E08D3D3257EA00EC1D733BA2E5A9842EB85EC63C93F4
|
||||
:15307B00DB0B052FA28DB8CE216CC88842EE4E258CBBE21AF7B7
|
||||
:153090007FEF27541EB921134ED2D4D013131BCA486E445B997A
|
||||
:1530A500AC1E321606529D63379DCB0897C6E9F7B22E89E06916
|
||||
:1530BA00A5322EA16D05FB349DFAE156CA97A5068C8BBC7E4946
|
||||
:1530CF009DDAA91424C0DEEED6C24C3F053BDAA3E82F7747CE85
|
||||
:1530E4002BBF7EB4B0A18F752B7DF1034AE91271595F64AF3217
|
||||
:1530F9003FD1ABEEDFA929FB9B2F73D952CA1CEC5BB3A4F2B3DC
|
||||
:15310E007C8F28181FC5DA6BD9A204F600F58A14AF8FB986EDC6
|
||||
:1531230032EDF5E3BB4D24193AF39A2EB411EFEAA78DFDE39A1A
|
||||
:1531380082F541576A80D2ED028EF95E5E79E6A0519179CEA8B5
|
||||
:15314D0025BC54503D338524165038DA67ADBC8BDB6EE1794811
|
||||
:153162009A7191E6A1E5F2533AB7B1B841D3289D8EBE418C1DA2
|
||||
:15317700D3C3991F50DC5DD4467A699C1B509167762EF4786000
|
||||
:15318C004B80BAFC7327D583F15EC5BBB257756843AA6B7CB87A
|
||||
:1531A10011E7E87DA78E98F6BC4F33B6003A00D029A39FB8AE2A
|
||||
:1531B60047A57AF73BD6ED53134579776CA4B1D69FD4BEF10F46
|
||||
:1531CB00E28F0F0A9C667C0FC4977981EB03F25B806033057EB2
|
||||
:1531E0002CC1F5B78013733F24C9F7438CF15EA53CD3D317CC90
|
||||
:1531F500BC9092566ABC0F2958ABA9A2AC191E17F6B807B4DAA8
|
||||
:15320A00C881469CF3F277116FD1BCB63C0EF7712360B985B33F
|
||||
:15321F0003AA392E1C307C194F03FCB0B6EFCAED8FF4F13D009A
|
||||
:15323400077097EED56B389DCCF3C9021BD1A0476D9E4B1EE5BE
|
||||
:153249007DE9AF282F612DFAB214A7AF903CA20616751B4F47B0
|
||||
:15325E00CC73AC584B17BEA071BBBA12A7B3693B5AE23CFF9D4E
|
||||
:15327300A35761D392EA8DF56831437D5BFA3AA7435946C4B92C
|
||||
:15328800E57980A79CDB5F4A76DA773430FD4903F6C100A7902A
|
||||
:15329D00F986569B9917CAEFFBD1E783BEBCDFCFF5F9D4FF6FB5
|
||||
:1532B2002A6CF765DEC638C06DAB48991EE3B1F7B37EDFFBE0EC
|
||||
:1532C700779306C0B12FB34F7768BD6A598BB9E7EFA07E03F7AF
|
||||
:1532DC00DE7858EF520FF1D042D61B02FDCE7D798A77CF59B649
|
||||
:1532F1007F2F73DDAF894ECE7B4437B845BEDF11E7FB58A037C4
|
||||
:15330600E8CB6D5EA19D133D67D292E3DEA2C3ED70FB9169045F
|
||||
:15331B001AE4E3DEA6C7C7A04131A7419FB5CF33458BDBD220BD
|
||||
:153330006FECB5F11F1B87BDB4D2603E2DBCB14F86605F8345EF
|
||||
:15334500BB466F3CF1C946295644E36C972E901FFAB1CDDF28C2
|
||||
:15335A006C38F147FB3CA0D99F9413ADBC8B3443A03A8176A8A8
|
||||
:15336F00A3B9E7639681F290B77DBE7D4A7E32E9B1208F16DB67
|
||||
:15338400393C49D3EE0E85635F51CAEC3304EBBE1BB8953CFDD8
|
||||
:15339900E3AD79E9B77E39A7E7CBF583FBD830D7DBDC049A7748
|
||||
:1533AE000D2B1ED9C9FBE92D5C0F50D31744CCBE29D7EEA8CE2A
|
||||
:1533C300C2268CCBF4BEEF3CC701B553DFB63F98F5CDCCB8F661
|
||||
:1533D8000BF6DCCB03C9CE052413C82C7534C8C68F4658E668BC
|
||||
:1533ED00F93F66DDF41E25F728F98F3659E93F28BE32313DBE77
|
||||
:15340200CB8A8F717EE0EDBC32B1DF48F391FCB4A80F9F7B51F9
|
||||
:153417007D6E92FCD28AF573792CFED499934A2189F6A2DC9BBD
|
||||
:15342C00849D9A62F97412679ECDFDA0717EE651928FD13C2606
|
||||
:15344100A17B324B1A4E1FC8BA81878167B3EE9979E6C3C6F7CB
|
||||
:1534560031296DABFC8C7EFD558D64259C19485A7CF8EF0DCEEC
|
||||
:15346B00BB416EB37E723FC98F0D241F7D1CDE9C7CB5574F3836
|
||||
:15348000481E1D11DB275FD58C84A3CF6895F71B6FDF44FB88C7
|
||||
:153495005B73952EE32A6422A23FF657652A231F2737AE4CC7E0
|
||||
:1534AA0027F6772DF9D6D47FD60774C8D202B52FD491DC46F8DA
|
||||
:1534BF00DF91FC188C72BBDF763E727A2A1FDFEFB3AE0A9CED31
|
||||
:1534D4000994C32EB47E91CADC06BBF91968DC46344FA6562FE1
|
||||
:1534E9003C15527F10AF0B753735F13EAB88D1DC287D9F562434
|
||||
:1534FE003C4C7DCB9A19B2A6639928DFA7CB99681FEC1CBB5C2A
|
||||
:15351300D514DE66C9998B1B8B694EE3A8547859B08B0879DDE3
|
||||
:15352800D915524B23A17031953D54754F634546A631B3562FB7
|
||||
:15353D00CF0475C1D3A2767F3BA439C769FE986E326C7BD4D0FD
|
||||
:1535520001E132BFD445F2674D4874134CD1AF8C32FDA17E5706
|
||||
:1535670012FB88FF9ABF332B1CCB6ED5BF29B7F4306AAD7E2D55
|
||||
:15357C0048FD5A9302B9DF2B0B413E9709364DD94049BF30BA8B
|
||||
:15359100607C405D60DD59E0A3711C63314BBF64940957D55FDC
|
||||
:1535A60057977E96914CCED88426B1DF34FA846B6A69B5B301F8
|
||||
:1535BB0072648464F60A6158D593DD4A39E618D46FA29F14DD49
|
||||
:1535D000AF73FB344CDA31FA00FBEF212ECBC1760CB91792FC9F
|
||||
:1535E5008DB7FD5F2817B5E7DC83669A8FF23F9CCD06642ABF7B
|
||||
:1535FA00D1CA9FDBF69F257FFB1F4F4DE57DA7FCA73C0DEC3F98
|
||||
:15360F0049B566F92E8259B6E250BF1E58287F32945F1FF84BF5
|
||||
:15362400DC864D11CDA95ED259E685A33E6AE7C998735945E6DD
|
||||
:15363900A08EFE14BC8A7DF5329219DA16F42E8D903C8631F194
|
||||
:15364E004B4E9DCB608DCF68215BEEDAF47EF603E52ECFBBD91D
|
||||
:153663000F94BB9A6691BB1CE78EA890BD206FD9F2574EEE8AAB
|
||||
:153678000C37E28CBB6F25CEBABFAE35DD9CDE1FF23E9368DB97
|
||||
:15368D0056FD686331D7C99ED03CEC64A3EFD4FF22584E6A8B1D
|
||||
:1536A200334B7278704D38DB6D3CC006D104E1E9DECC1C93BEB6
|
||||
:1536B700382B6386EB62F2B87A37A1A1006E2B0C7E080B4085CD
|
||||
:1536CC006486DF091AAF3E088F243B841D6DD7D41BEF645DC0D6
|
||||
:1536E1002770566FE1B0E63D138715B3E010694EBFF32F8B4708
|
||||
:1536F6003FE457C2E3A2C089CECBC063747F5FECF733AE95B49A
|
||||
:15370B007065F3FFEDDCF2CCF4D103FA1AD6A7DD4FF39DEFFF58
|
||||
:15372000AC77A92C9F1AA5514CF30A24A74A970C9FD54E45E8FD
|
||||
:153735005348BF34B6B1CB5A99F0867AC7CA6BEA216A87341F91
|
||||
:15374A006FC01AB85466A898FBB2F401CD357E90DE07B53B5395
|
||||
:15375F00628397E6805EF6BAEA3D754515F8BD15A3DCBE14B79D
|
||||
:15377400AFF4438C1B716D60FC07E13B28DE1D142F30DE13B21D
|
||||
:153789006D3F4994066D54A638B63F6C3FC11FEDAB32736F4889
|
||||
:15379E009A28E434E736A7CE5EE16D0AF76905327786A6EC5777
|
||||
:1537B3005DE1FD43F0D5D2507EF9F2AB81696EE9D5CA696EE8E9
|
||||
:1537C8005BCDA7B2E673B8BAF3E03A990757771E5C272DB8FEA1
|
||||
:1537DD0084E072E6C175320FAE25A19976B582164FE7E0CAF8FC
|
||||
:1537F200A7C3955934CD0D9EA9A0B1B531833E90DF11C9F8DC00
|
||||
:153807004700EF8C111DC61AE711CFCC3F457C263F63283769B9
|
||||
:15381C009E9E7E5E0F73FB865D7DF192443BDCDBF85D55C7FA7E
|
||||
:15383100A00F5570866091BBFA1DE7BECD797284AFDD3CAF0766
|
||||
:15384600E5471BCDB897B5EB2B8A96791E7885E629BFD45DF29A
|
||||
:15385B00F7FAEBE5FF61C47F37939F7A463DD07F4CADD7CC6F34
|
||||
:15387000CCF37B46275698F98C52BE3E2BCF1B2B3636DECDFE86
|
||||
:15388500A681CFD3F3E2222DF2C84F778EE2EC78F2921294FFC4
|
||||
:15389A006229FC21BFD134EECFF0FD0C64B8684F0AF323A42D33
|
||||
:1538AF00C6990FE25D9C27ACD8FF3CE763F4AFA2957FE9B4EFA6
|
||||
:1538C400F92187F9DD572CCF0DD15B7770BD769DE7EF786E8FEB
|
||||
:1538D900CA714CF3761FC9FF46E405458A24D472C23F3FDF2953
|
||||
:1538EE009936FF6FF72799272924D7ABD85767D24E2E1749FE99
|
||||
:15390300B862CB455C4642D8C7908F6CD9C8929366958F201BEC
|
||||
:1539180041460A731B30391947D3CF99328E598ECCCAE5DF195D
|
||||
:15392D00F320EB92DCE492771B23D7B2AEE294962C26B8C3914D
|
||||
:153942004483BD76514E7216E224AF8166DD3AAB15DBB75F33B8
|
||||
:15395700E5AEF11FF3701DE141C20FD2B3D4555D583041E3BBD3
|
||||
:15396C00466D21A915A612712F9523A58EF5A19F04DF214FCC1D
|
||||
:15398100DFC17FB5F2ABFDE6BC7E265FF7F2FE653EC9C5DE53D5
|
||||
:153996007B492619D3C08315046BEB1FF3E55FAB8E54B7792958
|
||||
:1539AB00677BE6CDACBF96E4DD6DBF356556BE1741F09D79D3A5
|
||||
:1539C0004C531630CF6FB9ACFDDFD1F9CC4D7329F7C83CD38DB4
|
||||
:1539D500F3A3DB1DCC7D86FEE6FCB0D6B28F62EA383953423B4C
|
||||
:1539EA00F33569F6D962CF4F894F4E35ABAB683EE6EC1A547BD6
|
||||
:1539FF00D3834AA5EC6C59287FFA73580BE669A43A35771E3916
|
||||
:153A14005A4D7C24F488B16ADD29615D59E879E3505D985DEFCD
|
||||
:153A2900D2B6FC149750CD9C0F4D2F7F55BC6EE93FAB9C5BF459
|
||||
:153A3E00C7829D35F35989242D56A12F0E5D0DD843724A7FCB73
|
||||
:153A5300F57BEF4ABDDF0ADDBFC03743E8C3B84E1FB761111D23
|
||||
:153A680036D6523CBB3CF8B7927BEACE013E472F96024D9DA766
|
||||
:153A7D0003B0AF54DBF95E00F936987A72E5ACC4131BA4B1734E
|
||||
:153A9200897AA72C34632FD513AB366E90BFF8CD2EDDD4AB1599
|
||||
:153AA7007B2E5AF32BA7B443FD1585C13E682FE250BDB0372D1B
|
||||
:153ABC0043F78FFCC4D8A031067FFA7EA390B92F5BE98AC87D98
|
||||
:153AD10095FCF11E221AC35ED698C33CB3DB0B9AFB26614796E4
|
||||
:153AE600158DC02EE7354DBAF08C02BDEC729C75938E692ECFE7
|
||||
:153AFB0011751DD1769E2CB6176506349CF3A8A07E349041FC40
|
||||
:153B1000BD3B30C60996EDC0BB52AD4B258F797608B675E6F2B3
|
||||
:153B25003C87FB711F93CB8CE32B4F894B85915BD3B26811D7DC
|
||||
:153B3A00D7D6096F61BF797616FA59B09B0A3D948C1F77C324AA
|
||||
:153B4F0072F73188F2756333D14D24BC78A82DC7E89BCDB21F0F
|
||||
:153B64001B8CB9B458E6C747C52B5DEA7B3E3BDF8A5CBE492BCA
|
||||
:153B7900DF98653B7B0FF52D63458C9F1966E9B8C1F793A4B0E2
|
||||
:153B8E00265436758A995AC395811FD12AD3C4CB2FCF4C92FB54
|
||||
:153BA3004CA79449519EB14EACB3EF59B049E17D5BE596CE8A23
|
||||
:153BB8000C6C185CEE14E5AF196301933F6A284D6D26DD5F4F2A
|
||||
:153BCD00E9C3945FEB3CE60E527A13B63FE9036CB0B3BC0A7361
|
||||
:153BE20028669F5B8E744632EF187B16449508CF53E98C929B8F
|
||||
:153BF700E21F5D4DEF18E55D4873DAFB33878C48E6E9BEB68CD8
|
||||
:153C0C00DE1FA537F6A8A3F43D4EE10A9595F65AB6C4598AE365
|
||||
:153C210000F64B61F3B13393321EA17C63049B0FFC4AB8AAA7B5
|
||||
:153C3600B78BDEB0D12B5378057DAFA63C7CF4AEA1F9DA26FA1D
|
||||
:153C4B009E9807DE265C915F1BF989D4D75C24BF60C0A4476CD9
|
||||
:153C6000864D72E795B84A7C57E295C5E50579F412008F3C64E5
|
||||
:153C7500604D35280F515F3764CC464FF33C53588B3A58C9DDD8
|
||||
:153C8A00A987C2683785CDB216E53AAD757A39BF43A8CB30756C
|
||||
:153C9F001D841E3B8F149559D537C8CFB5080BE2EA947DA00895
|
||||
:153CB400C50B6B8CF2EB015E7CB5B9BE6DE2EF3106D6A9B8178D
|
||||
:153CC90061B1DCBE946DFD5DB7F21BC6EC7CD8D62E2DF8736B0E
|
||||
:153CDE00FF6BEBA0B685BE7B6467BB2B074FB3BE10E310C27EAD
|
||||
:153CF30063EAC9D7DBFD13F9457F0E5DD365CB5D046B8C997058
|
||||
:153D0800DBF4E6772A5AE9026CF972B6B599E76FEB8B230DE54F
|
||||
:153D1D005552CA5A7918F22A0ADC8A2FB46F9F30759E439A7424
|
||||
:153D3200501D4772753C7701753CA2AE8149D46F0EEB9317007C
|
||||
:153D4700306C5F99FB57F2CF281AFD23F48FD23F46FF2DF48FD5
|
||||
:153D5C00D35FA77F8AFEA3F41FFF9919976DED36EB6A9EF9E018
|
||||
:153D71006E7D867B74863B3DC33D39C32DBD36DD1D9CE18ECEF0
|
||||
:153D8600706F99E1D667B8475FCB3B9342F86913A6DBB78880A5
|
||||
:153D9B0076BED19C5DB049AA97BFEBB85ACACF365BF9548E74A6
|
||||
:153DB000626D684D6C43D87F7258AFBD083A4DE14D21F726FA49
|
||||
:153DC5006FA37F92FE7DF41FA1FF09FA9FA1FF65FA4FD0FFC613
|
||||
:153DDA0045332E3B36CCF196B2E94F6EE04DCF73036FF13C37CD
|
||||
:153DEF00F0B625CF0DBCC5F2DCC05B34CF0DBC45F2DCC05B3084
|
||||
:153E0400CF0DBCC9F9E5BF36657F93974F6E7F73CA006F433FFD
|
||||
:153E19005A7C62C33DB67D048EB3D9EC7F107E3D2C0FBF33E3C5
|
||||
:153E2E00FC33C3D1F78C91FC42B2947E7A0E734357B658165B92
|
||||
:153E4300FA04E676D137F5332D1E1A238BE5459FBD48E36205B5
|
||||
:153E58007D838EA2B44BDD5C467DD65C56F218AB6989CC35FBFF
|
||||
:153E6D00B407E83B3CD7ECCB2A59CD725BFF49869D72DCFB4582
|
||||
:153E820079006793A5347E53FA8952C80E2F4ED9E92019F152A8
|
||||
:153E970055178DCB872123E8932B9CCB4F531CB96CF6F1C91EC9
|
||||
:153EAC00E7B0378FF1689299363AEC781E2A77A7659780E49DE9
|
||||
:153EC100E597292F3797F7A7F7631504EF7609E321E48BDDFA81
|
||||
:153ED6009E18CEA5BDA8EF881CE6F5777FC6D92EC9753AFA7C2A
|
||||
:153EEB009C112A5B79006BB9DA9639D89F1AD499FEA2EE178621
|
||||
:153F0000D516D6CDE377BB87156141138DAD83460DD54D243929
|
||||
:153F150097DB268FEED52ECEC538A6774A65499EC7988764486F
|
||||
:153F2A004AE3925FD4451A8BDDA558571EA4BEFC450378AE91FA
|
||||
:153F3F004CF903B0A63DD3E5BB9139ACE434E5979A8371A6469B
|
||||
:153F54004FF0B1A9968F4D380F2B2C08727B0A976F66DDC5F1B1
|
||||
:153F6900AE1667B45695E56AFD8D15C2F2CD94E6CC5C5326B23D
|
||||
:153F7E00F1E0B5740FA7F477653D4EBC29A57772BB7EC85FBA96
|
||||
:153F9300F02905E78C00B33732B854245945A43C2729CF769297
|
||||
:153FA800A9708E49E4BAD87C1C862D490379A0BD8BB161C323AE
|
||||
:153FBD009BF7BA66B91EFF8B9A9FFA7C51FE9E81F8B8FB976419
|
||||
:153FD200B00D1305243FE3CEC7BCFBA71294C7DFC588F762B02A
|
||||
:153FE700B561DA75FFCF6CB0C5436E8C33C065A498B9DF269E84
|
||||
:153FFC007D8B75B5D8B09B3819E17D13F2E0677ED892161BEE59
|
||||
:15401100EB0437F45D890E25B02303DE100907176F64DDF6BD19
|
||||
:1540260005F9750AE4D5C91E6F502FAEB740FD1DE0728ED39C6C
|
||||
:15403B00233AA6F13A4883FD34F7A07AEF9EB2731CEBD27ADD53
|
||||
:15405000CCBD8660B5D37C2ED2DD029D8B9F1CF9E5618F5C6F8D
|
||||
:15406500F8B9AEB24A6D76B561C32ECA87F9BC0DDF18E3250BE4
|
||||
:15407A00476B2D386D3D4E0B977EEC15D7539837262EF7154C5C
|
||||
:15408F00B50DC95DA39AF7EBF6F1F28C5343CB59380C1D8CAC5D
|
||||
:1540A400B96796CD7EEB5498FC123AEE46294B3FA9965DB84765
|
||||
:1540B900914EAD542B65472BD7C94EEF864E94DB9D3F6E5A70DC
|
||||
:1540CE0036B0257C5C1E7531F715AAE32F88F7D8D6E7795E88FB
|
||||
:1540E300EF425F1F1EE2F7AEF0F34BADF5FCDC0EC9E1FA77E3C0
|
||||
:1540F800832D38D303FC3E8D7B0B49A6B5F0EEF5669C2DF321EE
|
||||
:15410D00AF674EEAD71F7C69F92FC88D3A8B99E1D9F98D706485
|
||||
:15412200F29BC93F9ECC71FD40C6D91E681DE6E5A19D99F4946F
|
||||
:15413700394EEDFE5A6C5D82B51884EB95E38361BBBE51613A5F
|
||||
:15414C005F42CFE6664C6801DC36DEDE1C1FE27D8027467D8299
|
||||
:1541610055CE2F288F8F5AA7CA8C7379B0783A2FB6BD9D75AFA9
|
||||
:15417600263A7A62797591BFA7439F3257179AC398F5AFCDD556
|
||||
:15418B00057088AD9FE675E1788A0D7E209E9C528D6AAD9364C6
|
||||
:1541A000515FD7A9FD5C671573A30187D54F100EA84F77E7EEE2
|
||||
:1541B5004C487769E7FE68EB0FD7F33A411FDC4EFB08A503BD44
|
||||
:1541CA00FB284D7E3FB3ED7D935F3DF2615D8E0D695F8F0C8732
|
||||
:1541DF0050367851DA3E669E8B4C0FD37CA11BFB9D567D877409
|
||||
:1541F400BBAD88992386E41E56CBA8CF3D48732B4F06FD8A6685
|
||||
:15420900D5FFC454FD892FE6B79EE4F59F4F74B3E89B1B438A6B
|
||||
:15421E00D1DFF1F6A0C1DE7FAE3DDC840D9FF0B169EDE1B7E3CD
|
||||
:15423300C7B85D1FE0ACE121D35E01CA798EED6D215E36DB49B7
|
||||
:154248006BB7C9C7046B4F1C67F0F5CE03B8B3217A7206BD7508
|
||||
:15425D0093DE5563CB0D727B624379743DA623CD145D87AC7ADB
|
||||
:154272002579BDD0E794B5EEE5755A98129783F76D5AE6F89743
|
||||
:15428700FCC414EE0A49E83DD4FECC7B42CC7AFC35F1A7CD8B26
|
||||
:15429C005E36D6524AE503961B04CB42E2BD6345D379EFDCFF00
|
||||
:1542B10026BE93F3E08B117CB13CF8641B3EB35FE2F86CEDE6C9
|
||||
:1542C600F0E5F70BF1EBA6CE03DE62CCBC07588F24B694E68D22
|
||||
:1542DB0039F1776D5ECACD5DBD2CDCCB710B5B2C7D93D9921C44
|
||||
:1542F000EF916CF32B9C55785EBC478A99F36F6FE4B0FA32A58C
|
||||
:15430500F1578BED6517FA1487C0CAE6212C7D4C972EA414DCF3
|
||||
:15431A00F17094609530E610FF6C06AFBA20776A5A2070A253C4
|
||||
:15432F00261929FE646FFB0EF827DF411FBEC375EE24D7DB9887
|
||||
:15434400A8DABB8CA5C7742328B4239FCAC45ED89CF3CDC7FD16
|
||||
:1543590068E49FC07AB5B4D710293FECCD7337952BF23DC1BDA2
|
||||
:15436E00064F87B2F4BDD07F9E87BB95BBCC343BE234A7C7BA03
|
||||
:15438300886BAD063D0E3FD7A1B3E6F412BF4F604CDFD9A6299D
|
||||
:1543980005EBAEABF16CD6DBFB794D419D454A539938B201F0C4
|
||||
:1543AD0063EC042C80CD4F75692218FC174E28F36354D7B3DF2C
|
||||
:1543C20056BD4CA33E3CA57C1FE38295A77876402519D88B7446
|
||||
:1543D70076DD7B28FFE4BEE3FC1E66F00B8F1B3DB6C3B5FB1DAF
|
||||
:1543EC003503D8A84EA80BBB3EA0812EC003D34F6AC06723D44E
|
||||
:154401005C28DCC6C5E51C1ECCB27278C07A6DDAC443E08762E3
|
||||
:154416004B721D742486B52EF2EF457B219CC00F6B1B18834D1B
|
||||
:15442B00784F120E8E28C8BF60DDEFD5ED1C0F479432AA1F70F9
|
||||
:1544400020E15C15D5DB853B83A82CD84C0E52F99581894EDBE9
|
||||
:154455001EB2699F27AEE9C4837B162495B7D884B628C8FEB2C2
|
||||
:15446A0046163F97B3D7F917DC1E32B79BD4C6D70896F49B67EE
|
||||
:15447F005B933C5D24B30B7756B8E98D7D6023F6EE149FE33C0E
|
||||
:1544940023D6AAC0A3F5984B439736D8A4E937B89E663F8DB948
|
||||
:1544A900E3F15A67BBE00AAB623CA40E10AC55CA28EEB9D475D6
|
||||
:1544BE00F9402B9F9F521C89FA0E8FFCC51697FCB51649FED26B
|
||||
:1544D30072312A63BC1EBF4AF230DE9D984B455FE43695FDCD24
|
||||
:1544E800B261E60F9971703C4861F594BE96D2D7507AF855C8F3
|
||||
:1544FD005F6AB1F3207E6AF150B88BC2AFAEF81ACFCFC3E766D2
|
||||
:15451200BFDB61C7D9827208265FF3A499B76EC20D1C85D136AC
|
||||
:1545270008CE7AF9D556B1396864281CEB05AD349F1692215583
|
||||
:15453C008A630FD88C8FFC8807FC22E58378FC7C020EA4C7CC33
|
||||
:15455100FB80D0869B9835BF06CF4B435639239DB02952CE6D45
|
||||
:154566004F987E9833C18FEB1B9A67316E992F098249CF9C3FD4
|
||||
:15457B00E55F61CF7FB85E2A95CFEF384B195BDEBD75CE659ECD
|
||||
:154590007D1DD11186FE07772CF8ADFEC69FFE8EEABBF01D0521
|
||||
:1545A500F2AAAFF59879AF1085F930F767C731BE6BAFFCB680E3
|
||||
:1545BA00558C1F6FDC42E39EC79A67983AB0A69C833B095CF13E
|
||||
:1545CF00234BE793ECE943BEC111138E5C3F99E4F0F9228930CA
|
||||
:1545E400B76F426EE4591E196AACC8CB333777A13E97A7B7FA20
|
||||
:1545F900CFDF5AFC8C7A606E47B079AFF2359D9AA934F9E76932
|
||||
:15460E00F9FDE74F69FF384BBAC333D211BFEBB3AD27453287BE
|
||||
:15462300B4FF394BFACD1F21FDB559D2856F0BEF216D6296747F
|
||||
:15463800EFB1DB9737F9FE8CFD27ACEFE4F31FD6FCDF9DBEBE22
|
||||
:15464D0031335CFAC38787C76F17FE7F3BFF19E19E7CFEFFB008
|
||||
:15466200F581FF1FFE4F0A97F2F0EF9DD92FFD3F03BFC51FD198
|
||||
:154677008F971EED6B9E287359ECCBDC46536D67B7147B641541
|
||||
:15468C0035454FD9A3AA46E1B82BDA73EF6E15ED14E3A4A76CC6
|
||||
:1546A100933A67F56E55961FD7E6DCDBA5FAD6698A47A8567DC5
|
||||
:1546B600A5D56A82E416AB4D6FB84163B35456AB22BF7F6A5E9C
|
||||
:1546CB0087EED314EC110BEB30778969D0A813E582F6AF539F69
|
||||
:1546E000ECF754ABC5EBEAD5E7EEAB53AAD6D52901CF236A774F
|
||||
:1546F500C1A714DCC5B8488CD973151FE28BC22754BEF6B0BABF
|
||||
:15470A008BF71DE843AA4A130AF413ED702F0FAF539D65712E7A
|
||||
:15471F00DF553D1057F9FE1264E459605865C15042301C22180D
|
||||
:15473400FC79E5A3DC4A8201F178BE947F7ED937AC7C27F3F2CE
|
||||
:15474900CD665FC97A60EB20C4DAD7331640DEF18298067C644E
|
||||
:15475E009999D7DD8CCD9B4FB8F15099EEB57584A36A6591A745
|
||||
:154773005EADF88CD8EE645D1D557F25B61F9A9BE034C0BA4825
|
||||
:1547880090E0C01EDC5DDC76DA14EC5EAE07833DB8F813BC6EA9
|
||||
:15479D0004D3390BA631D4DD73BF5AB56FBD2A94DAB0656FDA01
|
||||
:1547B200B0B5106CE59E6AEE1F2701D1A697BBB45EF5709876A1
|
||||
:1547C7002B8B4A13EAFE9D7B72BC003CFF219BB56060BC9EB026
|
||||
:1547DC000966EE374F3E8172D3161CB81FEC0C7DCFD54C18CA91
|
||||
:1547F100F6D5A865541EEAD66E9D4D81D226C74BD1145EAA8851
|
||||
:15480600774AD6B6AAFE75610ECFAE82DD4A31E1A5C493500B35
|
||||
:15481B0059A2638FC59B8B79DDA7CA9DA0B2740A2B237C11DDC4
|
||||
:15483000BD360CA07D55DBFD0A64A1AA75F72B33E94F8DA8AC8E
|
||||
:1548450098EF1B4CB5A7AA33033C9E70BE5EF53F105345F6B844
|
||||
:15485A003A87E23E27B080D3FA36E8BB641DC149FC52521A56D0
|
||||
:15486F00B51F352B87CE362B25E7D7AA7E8DFCF6AD56B5CFAF8A
|
||||
:1548840021DE5FA38007FC84D3AAB5262EC498D02EB34D9CB7E4
|
||||
:15489900494EF3398587544FAC0077EBF8DCD8ABA96CEB9C2374
|
||||
:1548AE003CAC7AC455AA67259577EF63AA67F51A756FC12A05F2
|
||||
:1548C300FA1EE2CAA9F84501F31C188F9F0899F15FFEAAEA3924
|
||||
:1548D800DDACEEDD19529C34EE96FDE811A5EA3305EDB0BDEDB4
|
||||
:1548ED008A873ADCE3CD1D07610F4D0BA955E71F528573CDAA2E
|
||||
:15490200467105D7142DB6A28D07F8B9B10DB005E4EAA274A731
|
||||
:154917009A3BF85CAF89B51796053B8ACA9A3AAA92EB955DD473
|
||||
:15492C0037C8E4DF43EFBF449FF3F71B554F4FB30AB95A961F63
|
||||
:15494100866CE7F224BEAA0A6B1F5779D8CBCD141E52F712CEDB
|
||||
:15495600407FF038E624C5FF5168AF3A4F38D4BA54FFF9AFAA3B
|
||||
:15496B0025E776731ED84F3C3087685F1CD13AF2FB25D01DB469
|
||||
:15498000E33AF5164DC193F7122CED809FF08CBB49D7D177A2D7
|
||||
:1549950060B33287CA01FCDD3BCDEF5537B37EF44BB61B7169FF
|
||||
:1549AA006CD83090C51A8EC9DB064DAD803FF47B34E79A67F3A6
|
||||
:1549BF00D5368AC3CF47100C9B67E80797FDA842A93A574EB8AA
|
||||
:1549D4002D5767E3A337D9141FFD9A997C041A14131F053C9B2E
|
||||
:1549E900395E9EB378097CE4D7C86F062FED8EFFF9C6E2C026AC
|
||||
:1549FE00A24FAC73377B78E39C40B453F03CA6DAEE92C8C31BD2
|
||||
:154A130041A7395DEB3BD8D9F60EFB5D75CDC1EF702A8EAFEF25
|
||||
:154A280028196FEF10DC44F34F546B4EA2C34DA23DF07737A785
|
||||
:154A3D0085A3BD44DB4174788CE8B087F7E9F9B428B0689130FA
|
||||
:154A5200EF8EF209AE4F50D9D10D67385DC037D10D6333E84242
|
||||
:154A670034F13E60D185FA5DEFFA3CBADC994797B7B8CEEF5418
|
||||
:154A7C00DBDE49EDBA378F4EDCFE38F100FCB75BB4BA803BFF2F
|
||||
:154A91002CDA6CFA98F4B894478FBFB3E88136EDB768710B1D40
|
||||
:154AA6008836F9B4288A7C65636164FD46B68DB57BC6BFD23197
|
||||
:154ABB0047DAD451C4FECDC6E2F8BFEDF08C3FCCDD557FC5DBED
|
||||
:154AD000ABD7C3C81D799CE35DDC5EAD39A8EFBD5914D58A6DA5
|
||||
:154AE500BC533B2DF1ECA4FEEF5FA9256B9F9C86F7E2D9F09E3E
|
||||
:154AFA005C0C9AE7E13DC6F16ED7371FFFD4E77BEFB5F08F35C1
|
||||
:154B0F0011B4131BFFDE3CFC3BF8DA8689DF5E0BBFA5E8A7280A
|
||||
:154B2400AC92E65AF96DC04EFF261F174C9A211DE8A658743081
|
||||
:154B3900711E9E06CBB708CF9E94D0FE32BD13D4F714521EB8D2
|
||||
:154B4E00FFFDD0171F51ABD6B52A52C152A5A8E01E053CECA121
|
||||
:154B6300BE879D6DEE38F4530A3BBF56F1167C5E71177CC10C75
|
||||
:154B7800135675B0FBD674EC8A39DA01D762E084CA261E292BCC
|
||||
:154B8D00941D7C8C843FECB9D87314940FBBA705F6D86D8D1FA2
|
||||
:154BA20088075D7FC0F55A36EBA338B9B6FF32B57D8C5D9768CE
|
||||
:154BB7003A89F512C80734D6F94E5BF1BF4FDF55D744BCBD27B6
|
||||
:154BCC00785E4975BF63E8117EC65230EF62A69125EB8D0C3DF1
|
||||
:154BE1006A308DEB88C1DF37B5DE5AFC7F00E871AED038A00037
|
||||
:014BF60000BE
|
||||
:00000001FF
|
|
@ -1,8 +1,14 @@
|
|||
/* drivers/atm/suni.c - PMC PM5346 SUNI (PHY) driver */
|
||||
/*
|
||||
* drivers/atm/suni.c - S/UNI PHY driver
|
||||
*
|
||||
* Supports the following:
|
||||
* PMC PM5346 S/UNI LITE
|
||||
* PMC PM5350 S/UNI 155 ULTRA
|
||||
* PMC PM5355 S/UNI 622
|
||||
*/
|
||||
|
||||
/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
|
||||
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/kernel.h>
|
||||
|
@ -29,15 +35,6 @@
|
|||
#define DPRINTK(format,args...)
|
||||
#endif
|
||||
|
||||
|
||||
struct suni_priv {
|
||||
struct k_sonet_stats sonet_stats; /* link diagnostics */
|
||||
int loop_mode; /* loopback mode */
|
||||
struct atm_dev *dev; /* device back-pointer */
|
||||
struct suni_priv *next; /* next SUNI */
|
||||
};
|
||||
|
||||
|
||||
#define PRIV(dev) ((struct suni_priv *) dev->phy_data)
|
||||
|
||||
#define PUT(val,reg) dev->ops->phy_put(dev,val,SUNI_##reg)
|
||||
|
@ -155,25 +152,105 @@ static int get_diag(struct atm_dev *dev,void __user *arg)
|
|||
static int set_loopback(struct atm_dev *dev,int mode)
|
||||
{
|
||||
unsigned char control;
|
||||
int reg, dle, lle;
|
||||
|
||||
control = GET(MCT) & ~(SUNI_MCT_DLE | SUNI_MCT_LLE);
|
||||
if (PRIV(dev)->type == SUNI_MRI_TYPE_PM5355) {
|
||||
reg = SUNI_MCM;
|
||||
dle = SUNI_MCM_DLE;
|
||||
lle = SUNI_MCM_LLE;
|
||||
} else {
|
||||
reg = SUNI_MCT;
|
||||
dle = SUNI_MCT_DLE;
|
||||
lle = SUNI_MCT_LLE;
|
||||
}
|
||||
|
||||
control = dev->ops->phy_get(dev, reg) & ~(dle | lle);
|
||||
switch (mode) {
|
||||
case ATM_LM_NONE:
|
||||
break;
|
||||
case ATM_LM_LOC_PHY:
|
||||
control |= SUNI_MCT_DLE;
|
||||
control |= dle;
|
||||
break;
|
||||
case ATM_LM_RMT_PHY:
|
||||
control |= SUNI_MCT_LLE;
|
||||
control |= lle;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
PUT(control,MCT);
|
||||
dev->ops->phy_put(dev, control, reg);
|
||||
PRIV(dev)->loop_mode = mode;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* SONET vs. SDH Configuration
|
||||
*
|
||||
* Z0INS (register 0x06): 0 for SONET, 1 for SDH
|
||||
* ENSS (register 0x3D): 0 for SONET, 1 for SDH
|
||||
* LEN16 (register 0x28): 0 for SONET, 1 for SDH (n/a for S/UNI 155 QUAD)
|
||||
* LEN16 (register 0x50): 0 for SONET, 1 for SDH (n/a for S/UNI 155 QUAD)
|
||||
* S[1:0] (register 0x46): 00 for SONET, 10 for SDH
|
||||
*/
|
||||
|
||||
static int set_sonet(struct atm_dev *dev)
|
||||
{
|
||||
if (PRIV(dev)->type == SUNI_MRI_TYPE_PM5355) {
|
||||
PUT(GET(RPOP_RC) & ~SUNI_RPOP_RC_ENSS, RPOP_RC);
|
||||
PUT(GET(SSTB_CTRL) & ~SUNI_SSTB_CTRL_LEN16, SSTB_CTRL);
|
||||
PUT(GET(SPTB_CTRL) & ~SUNI_SPTB_CTRL_LEN16, SPTB_CTRL);
|
||||
}
|
||||
|
||||
REG_CHANGE(SUNI_TPOP_APM_S, SUNI_TPOP_APM_S_SHIFT,
|
||||
SUNI_TPOP_S_SONET, TPOP_APM);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_sdh(struct atm_dev *dev)
|
||||
{
|
||||
if (PRIV(dev)->type == SUNI_MRI_TYPE_PM5355) {
|
||||
PUT(GET(RPOP_RC) | SUNI_RPOP_RC_ENSS, RPOP_RC);
|
||||
PUT(GET(SSTB_CTRL) | SUNI_SSTB_CTRL_LEN16, SSTB_CTRL);
|
||||
PUT(GET(SPTB_CTRL) | SUNI_SPTB_CTRL_LEN16, SPTB_CTRL);
|
||||
}
|
||||
|
||||
REG_CHANGE(SUNI_TPOP_APM_S, SUNI_TPOP_APM_S_SHIFT,
|
||||
SUNI_TPOP_S_SDH, TPOP_APM);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int get_framing(struct atm_dev *dev, void __user *arg)
|
||||
{
|
||||
int framing;
|
||||
unsigned char s;
|
||||
|
||||
|
||||
s = (GET(TPOP_APM) & SUNI_TPOP_APM_S) >> SUNI_TPOP_APM_S_SHIFT;
|
||||
if (s == SUNI_TPOP_S_SONET)
|
||||
framing = SONET_FRAME_SONET;
|
||||
else
|
||||
framing = SONET_FRAME_SDH;
|
||||
|
||||
return put_user(framing, (int __user *) arg) ? -EFAULT : 0;
|
||||
}
|
||||
|
||||
static int set_framing(struct atm_dev *dev, void __user *arg)
|
||||
{
|
||||
int mode;
|
||||
|
||||
if (get_user(mode, (int __user *) arg))
|
||||
return -EFAULT;
|
||||
|
||||
if (mode == SONET_FRAME_SONET)
|
||||
return set_sonet(dev);
|
||||
else if (mode == SONET_FRAME_SDH)
|
||||
return set_sdh(dev);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
static int suni_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
|
||||
{
|
||||
|
@ -188,14 +265,16 @@ static int suni_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
|
|||
case SONET_GETDIAG:
|
||||
return get_diag(dev,arg);
|
||||
case SONET_SETFRAMING:
|
||||
if ((int)(unsigned long)arg != SONET_FRAME_SONET) return -EINVAL;
|
||||
return 0;
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
return set_framing(dev, arg);
|
||||
case SONET_GETFRAMING:
|
||||
return put_user(SONET_FRAME_SONET,(int __user *)arg) ?
|
||||
-EFAULT : 0;
|
||||
return get_framing(dev, arg);
|
||||
case SONET_GETFRSENSE:
|
||||
return -EINVAL;
|
||||
case ATM_SETLOOP:
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
return set_loopback(dev,(int)(unsigned long)arg);
|
||||
case ATM_GETLOOP:
|
||||
return put_user(PRIV(dev)->loop_mode,(int __user *)arg) ?
|
||||
|
@ -229,10 +308,6 @@ static int suni_start(struct atm_dev *dev)
|
|||
unsigned long flags;
|
||||
int first;
|
||||
|
||||
if (!(dev->phy_data = kmalloc(sizeof(struct suni_priv),GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
|
||||
PRIV(dev)->dev = dev;
|
||||
spin_lock_irqsave(&sunis_lock,flags);
|
||||
first = !sunis;
|
||||
PRIV(dev)->next = sunis;
|
||||
|
@ -293,16 +368,21 @@ int suni_init(struct atm_dev *dev)
|
|||
{
|
||||
unsigned char mri;
|
||||
|
||||
if (!(dev->phy_data = kmalloc(sizeof(struct suni_priv),GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
PRIV(dev)->dev = dev;
|
||||
|
||||
mri = GET(MRI); /* reset SUNI */
|
||||
PRIV(dev)->type = (mri & SUNI_MRI_TYPE) >> SUNI_MRI_TYPE_SHIFT;
|
||||
PUT(mri | SUNI_MRI_RESET,MRI);
|
||||
PUT(mri,MRI);
|
||||
PUT((GET(MT) & SUNI_MT_DS27_53),MT); /* disable all tests */
|
||||
REG_CHANGE(SUNI_TPOP_APM_S,SUNI_TPOP_APM_S_SHIFT,SUNI_TPOP_S_SONET,
|
||||
TPOP_APM); /* use SONET */
|
||||
set_sonet(dev);
|
||||
REG_CHANGE(SUNI_TACP_IUCHP_CLP,0,SUNI_TACP_IUCHP_CLP,
|
||||
TACP_IUCHP); /* idle cells */
|
||||
PUT(SUNI_IDLE_PATTERN,TACP_IUCPOP);
|
||||
dev->phy = &suni_ops;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
/* drivers/atm/suni.h - PMC PM5346 SUNI (PHY) declarations */
|
||||
/*
|
||||
* drivers/atm/suni.h - S/UNI PHY driver
|
||||
*/
|
||||
|
||||
/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
|
||||
|
||||
|
||||
#ifndef DRIVER_ATM_SUNI_H
|
||||
#define DRIVER_ATM_SUNI_H
|
||||
|
||||
#include <linux/atmdev.h>
|
||||
#include <linux/atmioc.h>
|
||||
|
||||
#include <linux/sonet.h>
|
||||
|
||||
/* SUNI registers */
|
||||
|
||||
|
@ -39,7 +40,8 @@
|
|||
#define SUNI_RLOP_LFM 0x1F /* RLOP Line FEBE MSB */
|
||||
#define SUNI_TLOP_CTRL 0x20 /* TLOP Control */
|
||||
#define SUNI_TLOP_DIAG 0x21 /* TLOP Diagnostic */
|
||||
/* 0x22-0x2F reserved */
|
||||
/* 0x22-0x27 reserved */
|
||||
#define SUNI_SSTB_CTRL 0x28
|
||||
#define SUNI_RPOP_SC 0x30 /* RPOP Status/Control */
|
||||
#define SUNI_RPOP_IS 0x31 /* RPOP Interrupt Status */
|
||||
/* 0x32 reserved */
|
||||
|
@ -52,6 +54,7 @@
|
|||
#define SUNI_RPOP_PFM 0x3B /* RPOP Path FEBE MSB */
|
||||
/* 0x3C reserved */
|
||||
#define SUNI_RPOP_PBC 0x3D /* RPOP Path BIP-8 Configuration */
|
||||
#define SUNI_RPOP_RC 0x3D /* RPOP Ring Control (PM5355) */
|
||||
/* 0x3E-0x3F reserved */
|
||||
#define SUNI_TPOP_CD 0x40 /* TPOP Control/Diagnostic */
|
||||
#define SUNI_TPOP_PC 0x41 /* TPOP Pointer Control */
|
||||
|
@ -82,7 +85,8 @@
|
|||
#define SUNI_TACP_TCC 0x65 /* TACP Transmit Cell Counter */
|
||||
#define SUNI_TACP_TCCM 0x66 /* TACP Transmit Cell Counter MSB */
|
||||
#define SUNI_TACP_CFG 0x67 /* TACP Configuration */
|
||||
/* 0x68-0x7F reserved */
|
||||
#define SUNI_SPTB_CTRL 0x68 /* SPTB Control */
|
||||
/* 0x69-0x7F reserved */
|
||||
#define SUNI_MT 0x80 /* Master Test */
|
||||
/* 0x81-0xFF reserved */
|
||||
|
||||
|
@ -94,9 +98,18 @@
|
|||
#define SUNI_MRI_ID_SHIFT 0
|
||||
#define SUNI_MRI_TYPE 0x70 /* R, SUNI type (lite is 011) */
|
||||
#define SUNI_MRI_TYPE_SHIFT 4
|
||||
#define SUNI_MRI_TYPE_PM5346 0x3 /* S/UNI 155 LITE */
|
||||
#define SUNI_MRI_TYPE_PM5347 0x4 /* S/UNI 155 PLUS */
|
||||
#define SUNI_MRI_TYPE_PM5350 0x7 /* S/UNI 155 ULTRA */
|
||||
#define SUNI_MRI_TYPE_PM5355 0x1 /* S/UNI 622 */
|
||||
#define SUNI_MRI_RESET 0x80 /* RW, reset & power down chip
|
||||
0: normal operation
|
||||
1: reset & low power */
|
||||
|
||||
/* MCM is reg 0x4 */
|
||||
#define SUNI_MCM_LLE 0x20 /* line loopback (PM5355) */
|
||||
#define SUNI_MCM_DLE 0x10 /* diagnostic loopback (PM5355) */
|
||||
|
||||
/* MCT is reg 5 */
|
||||
#define SUNI_MCT_LOOPT 0x01 /* RW, timing source, 0: from
|
||||
TRCLK+/- */
|
||||
|
@ -144,6 +157,12 @@
|
|||
/* TLOP_DIAG is reg 0x21 */
|
||||
#define SUNI_TLOP_DIAG_DBIP 0x01 /* insert line BIP err (continuously) */
|
||||
|
||||
/* SSTB_CTRL is reg 0x28 */
|
||||
#define SUNI_SSTB_CTRL_LEN16 0x01 /* path trace message length bit */
|
||||
|
||||
/* RPOP_RC is reg 0x3D (PM5355) */
|
||||
#define SUNI_RPOP_RC_ENSS 0x40 /* enable size bit */
|
||||
|
||||
/* TPOP_DIAG is reg 0x40 */
|
||||
#define SUNI_TPOP_DIAG_PAIS 0x01 /* insert STS path alarm ind (cont) */
|
||||
#define SUNI_TPOP_DIAG_DB3 0x02 /* insert path BIP err (continuously) */
|
||||
|
@ -191,6 +210,9 @@
|
|||
pattern */
|
||||
#define SUNI_TACP_IUCHP_GFC_SHIFT 4
|
||||
|
||||
/* SPTB_CTRL is reg 0x68 */
|
||||
#define SUNI_SPTB_CTRL_LEN16 0x01 /* path trace message length */
|
||||
|
||||
/* MT is reg 0x80 */
|
||||
#define SUNI_MT_HIZIO 0x01 /* RW, all but data bus & MP interface
|
||||
tri-state */
|
||||
|
@ -205,6 +227,14 @@
|
|||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct suni_priv {
|
||||
struct k_sonet_stats sonet_stats; /* link diagnostics */
|
||||
int loop_mode; /* loopback mode */
|
||||
int type; /* phy type */
|
||||
struct atm_dev *dev; /* device back-pointer */
|
||||
struct suni_priv *next; /* next SUNI */
|
||||
};
|
||||
|
||||
int suni_init(struct atm_dev *dev);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ config BT_HCIUART_H4
|
|||
config BT_HCIUART_BCSP
|
||||
bool "BCSP protocol support"
|
||||
depends on BT_HCIUART
|
||||
select BITREVERSE
|
||||
help
|
||||
BCSP (BlueCore Serial Protocol) is serial protocol for communication
|
||||
between Bluetooth device and host. This protocol is required for non
|
||||
|
|
|
@ -39,6 +39,8 @@
|
|||
#include <linux/signal.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/bitrev.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include <net/bluetooth/bluetooth.h>
|
||||
#include <net/bluetooth/hci_core.h>
|
||||
|
@ -124,27 +126,6 @@ static void bcsp_crc_update(u16 *crc, u8 d)
|
|||
*crc = reg;
|
||||
}
|
||||
|
||||
/*
|
||||
Get reverse of generated crc
|
||||
|
||||
Implementation note
|
||||
The crc generator (bcsp_crc_init() and bcsp_crc_update())
|
||||
creates a reversed crc, so it needs to be swapped back before
|
||||
being passed on.
|
||||
*/
|
||||
static u16 bcsp_crc_reverse(u16 crc)
|
||||
{
|
||||
u16 b, rev;
|
||||
|
||||
for (b = 0, rev = 0; b < 16; b++) {
|
||||
rev = rev << 1;
|
||||
rev |= (crc & 1);
|
||||
crc = crc >> 1;
|
||||
}
|
||||
|
||||
return (rev);
|
||||
}
|
||||
|
||||
/* ---- BCSP core ---- */
|
||||
|
||||
static void bcsp_slip_msgdelim(struct sk_buff *skb)
|
||||
|
@ -235,10 +216,10 @@ static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
|
|||
}
|
||||
|
||||
if (hciextn && chan == 5) {
|
||||
struct hci_command_hdr *hdr = (struct hci_command_hdr *) data;
|
||||
__le16 opcode = ((struct hci_command_hdr *)data)->opcode;
|
||||
|
||||
/* Vendor specific commands */
|
||||
if (hci_opcode_ogf(__le16_to_cpu(hdr->opcode)) == 0x3f) {
|
||||
if (hci_opcode_ogf(__le16_to_cpu(opcode)) == 0x3f) {
|
||||
u8 desc = *(data + HCI_COMMAND_HDR_SIZE);
|
||||
if ((desc & 0xf0) == 0xc0) {
|
||||
data += HCI_COMMAND_HDR_SIZE + 1;
|
||||
|
@ -296,7 +277,7 @@ static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
|
|||
|
||||
/* Put CRC */
|
||||
if (bcsp->use_crc) {
|
||||
bcsp_txmsg_crc = bcsp_crc_reverse(bcsp_txmsg_crc);
|
||||
bcsp_txmsg_crc = bitrev16(bcsp_txmsg_crc);
|
||||
bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
|
||||
bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
|
||||
}
|
||||
|
@ -566,6 +547,11 @@ static void bcsp_complete_rx_pkt(struct hci_uart *hu)
|
|||
bcsp->rx_skb = NULL;
|
||||
}
|
||||
|
||||
static u16 bscp_get_crc(struct bcsp_struct *bcsp)
|
||||
{
|
||||
return get_unaligned_be16(&bcsp->rx_skb->data[bcsp->rx_skb->len - 2]);
|
||||
}
|
||||
|
||||
/* Recv data */
|
||||
static int bcsp_recv(struct hci_uart *hu, void *data, int count)
|
||||
{
|
||||
|
@ -624,14 +610,10 @@ static int bcsp_recv(struct hci_uart *hu, void *data, int count)
|
|||
continue;
|
||||
|
||||
case BCSP_W4_CRC:
|
||||
if (bcsp_crc_reverse(bcsp->message_crc) !=
|
||||
(bcsp->rx_skb->data[bcsp->rx_skb->len - 2] << 8) +
|
||||
bcsp->rx_skb->data[bcsp->rx_skb->len - 1]) {
|
||||
|
||||
if (bitrev16(bcsp->message_crc) != bscp_get_crc(bcsp)) {
|
||||
BT_ERR ("Checksum failed: computed %04x received %04x",
|
||||
bcsp_crc_reverse(bcsp->message_crc),
|
||||
(bcsp->rx_skb-> data[bcsp->rx_skb->len - 2] << 8) +
|
||||
bcsp->rx_skb->data[bcsp->rx_skb->len - 1]);
|
||||
bitrev16(bcsp->message_crc),
|
||||
bscp_get_crc(bcsp));
|
||||
|
||||
kfree_skb(bcsp->rx_skb);
|
||||
bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
|
||||
|
|
|
@ -3886,9 +3886,8 @@ static bool rx_get_frame(MGSLPC_INFO *info)
|
|||
framesize = 0;
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
{
|
||||
struct net_device_stats *stats = hdlc_stats(info->netdev);
|
||||
stats->rx_errors++;
|
||||
stats->rx_frame_errors++;
|
||||
info->netdev->stats.rx_errors++;
|
||||
info->netdev->stats.rx_frame_errors++;
|
||||
}
|
||||
#endif
|
||||
} else
|
||||
|
@ -4144,7 +4143,6 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
|
|||
static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
MGSLPC_INFO *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
|
@ -4159,8 +4157,8 @@ static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
info->tx_put = info->tx_count = skb->len;
|
||||
|
||||
/* update network statistics */
|
||||
stats->tx_packets++;
|
||||
stats->tx_bytes += skb->len;
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
/* done with socket buffer, so free it */
|
||||
dev_kfree_skb(skb);
|
||||
|
@ -4376,14 +4374,13 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||
static void hdlcdev_tx_timeout(struct net_device *dev)
|
||||
{
|
||||
MGSLPC_INFO *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("hdlcdev_tx_timeout(%s)\n",dev->name);
|
||||
|
||||
stats->tx_errors++;
|
||||
stats->tx_aborted_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
tx_stop(info);
|
||||
|
@ -4416,27 +4413,26 @@ static void hdlcdev_rx(MGSLPC_INFO *info, char *buf, int size)
|
|||
{
|
||||
struct sk_buff *skb = dev_alloc_skb(size);
|
||||
struct net_device *dev = info->netdev;
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("hdlcdev_rx(%s)\n",dev->name);
|
||||
|
||||
if (skb == NULL) {
|
||||
printk(KERN_NOTICE "%s: can't alloc skb, dropping packet\n", dev->name);
|
||||
stats->rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(skb_put(skb, size),buf,size);
|
||||
memcpy(skb_put(skb, size), buf, size);
|
||||
|
||||
skb->protocol = hdlc_type_trans(skb, info->netdev);
|
||||
skb->protocol = hdlc_type_trans(skb, dev);
|
||||
|
||||
stats->rx_packets++;
|
||||
stats->rx_bytes += size;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += size;
|
||||
|
||||
netif_rx(skb);
|
||||
|
||||
info->netdev->last_rx = jiffies;
|
||||
dev->last_rx = jiffies;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -6631,9 +6631,8 @@ static bool mgsl_get_rx_frame(struct mgsl_struct *info)
|
|||
framesize = 0;
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
{
|
||||
struct net_device_stats *stats = hdlc_stats(info->netdev);
|
||||
stats->rx_errors++;
|
||||
stats->rx_frame_errors++;
|
||||
info->netdev->stats.rx_errors++;
|
||||
info->netdev->stats.rx_frame_errors++;
|
||||
}
|
||||
#endif
|
||||
} else
|
||||
|
@ -7744,7 +7743,6 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
|
|||
static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct mgsl_struct *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
|
@ -7758,8 +7756,8 @@ static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
mgsl_load_tx_dma_buffer(info, skb->data, skb->len);
|
||||
|
||||
/* update network statistics */
|
||||
stats->tx_packets++;
|
||||
stats->tx_bytes += skb->len;
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
/* done with socket buffer, so free it */
|
||||
dev_kfree_skb(skb);
|
||||
|
@ -7975,14 +7973,13 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||
static void hdlcdev_tx_timeout(struct net_device *dev)
|
||||
{
|
||||
struct mgsl_struct *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("hdlcdev_tx_timeout(%s)\n",dev->name);
|
||||
|
||||
stats->tx_errors++;
|
||||
stats->tx_aborted_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
|
||||
spin_lock_irqsave(&info->irq_spinlock,flags);
|
||||
usc_stop_transmitter(info);
|
||||
|
@ -8015,27 +8012,27 @@ static void hdlcdev_rx(struct mgsl_struct *info, char *buf, int size)
|
|||
{
|
||||
struct sk_buff *skb = dev_alloc_skb(size);
|
||||
struct net_device *dev = info->netdev;
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("hdlcdev_rx(%s)\n",dev->name);
|
||||
printk("hdlcdev_rx(%s)\n", dev->name);
|
||||
|
||||
if (skb == NULL) {
|
||||
printk(KERN_NOTICE "%s: can't alloc skb, dropping packet\n", dev->name);
|
||||
stats->rx_dropped++;
|
||||
printk(KERN_NOTICE "%s: can't alloc skb, dropping packet\n",
|
||||
dev->name);
|
||||
dev->stats.rx_dropped++;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(skb_put(skb, size),buf,size);
|
||||
memcpy(skb_put(skb, size), buf, size);
|
||||
|
||||
skb->protocol = hdlc_type_trans(skb, info->netdev);
|
||||
skb->protocol = hdlc_type_trans(skb, dev);
|
||||
|
||||
stats->rx_packets++;
|
||||
stats->rx_bytes += size;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += size;
|
||||
|
||||
netif_rx(skb);
|
||||
|
||||
info->netdev->last_rx = jiffies;
|
||||
dev->last_rx = jiffies;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1536,7 +1536,6 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
|
|||
static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct slgt_info *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
DBGINFO(("%s hdlc_xmit\n", dev->name));
|
||||
|
@ -1549,8 +1548,8 @@ static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
tx_load(info, skb->data, skb->len);
|
||||
|
||||
/* update network statistics */
|
||||
stats->tx_packets++;
|
||||
stats->tx_bytes += skb->len;
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
/* done with socket buffer, so free it */
|
||||
dev_kfree_skb(skb);
|
||||
|
@ -1767,13 +1766,12 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||
static void hdlcdev_tx_timeout(struct net_device *dev)
|
||||
{
|
||||
struct slgt_info *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
DBGINFO(("%s hdlcdev_tx_timeout\n", dev->name));
|
||||
|
||||
stats->tx_errors++;
|
||||
stats->tx_aborted_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
tx_stop(info);
|
||||
|
@ -1806,26 +1804,25 @@ static void hdlcdev_rx(struct slgt_info *info, char *buf, int size)
|
|||
{
|
||||
struct sk_buff *skb = dev_alloc_skb(size);
|
||||
struct net_device *dev = info->netdev;
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
|
||||
DBGINFO(("%s hdlcdev_rx\n", dev->name));
|
||||
|
||||
if (skb == NULL) {
|
||||
DBGERR(("%s: can't alloc skb, drop packet\n", dev->name));
|
||||
stats->rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(skb_put(skb, size),buf,size);
|
||||
memcpy(skb_put(skb, size), buf, size);
|
||||
|
||||
skb->protocol = hdlc_type_trans(skb, info->netdev);
|
||||
skb->protocol = hdlc_type_trans(skb, dev);
|
||||
|
||||
stats->rx_packets++;
|
||||
stats->rx_bytes += size;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += size;
|
||||
|
||||
netif_rx(skb);
|
||||
|
||||
info->netdev->last_rx = jiffies;
|
||||
dev->last_rx = jiffies;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4568,9 +4565,8 @@ static bool rx_get_frame(struct slgt_info *info)
|
|||
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
if (framesize == 0) {
|
||||
struct net_device_stats *stats = hdlc_stats(info->netdev);
|
||||
stats->rx_errors++;
|
||||
stats->rx_frame_errors++;
|
||||
info->netdev->stats.rx_errors++;
|
||||
info->netdev->stats.rx_frame_errors++;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1672,7 +1672,6 @@ static int hdlcdev_attach(struct net_device *dev, unsigned short encoding,
|
|||
static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
SLMP_INFO *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
|
@ -1686,8 +1685,8 @@ static int hdlcdev_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
tx_load_dma_buffer(info, skb->data, skb->len);
|
||||
|
||||
/* update network statistics */
|
||||
stats->tx_packets++;
|
||||
stats->tx_bytes += skb->len;
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
/* done with socket buffer, so free it */
|
||||
dev_kfree_skb(skb);
|
||||
|
@ -1903,14 +1902,13 @@ static int hdlcdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||
static void hdlcdev_tx_timeout(struct net_device *dev)
|
||||
{
|
||||
SLMP_INFO *info = dev_to_port(dev);
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
unsigned long flags;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("hdlcdev_tx_timeout(%s)\n",dev->name);
|
||||
|
||||
stats->tx_errors++;
|
||||
stats->tx_aborted_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
tx_stop(info);
|
||||
|
@ -1943,27 +1941,27 @@ static void hdlcdev_rx(SLMP_INFO *info, char *buf, int size)
|
|||
{
|
||||
struct sk_buff *skb = dev_alloc_skb(size);
|
||||
struct net_device *dev = info->netdev;
|
||||
struct net_device_stats *stats = hdlc_stats(dev);
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_INFO)
|
||||
printk("hdlcdev_rx(%s)\n",dev->name);
|
||||
|
||||
if (skb == NULL) {
|
||||
printk(KERN_NOTICE "%s: can't alloc skb, dropping packet\n", dev->name);
|
||||
stats->rx_dropped++;
|
||||
printk(KERN_NOTICE "%s: can't alloc skb, dropping packet\n",
|
||||
dev->name);
|
||||
dev->stats.rx_dropped++;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(skb_put(skb, size),buf,size);
|
||||
memcpy(skb_put(skb, size), buf, size);
|
||||
|
||||
skb->protocol = hdlc_type_trans(skb, info->netdev);
|
||||
skb->protocol = hdlc_type_trans(skb, dev);
|
||||
|
||||
stats->rx_packets++;
|
||||
stats->rx_bytes += size;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += size;
|
||||
|
||||
netif_rx(skb);
|
||||
|
||||
info->netdev->last_rx = jiffies;
|
||||
dev->last_rx = jiffies;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4976,9 +4974,8 @@ static bool rx_get_frame(SLMP_INFO *info)
|
|||
framesize = 0;
|
||||
#if SYNCLINK_GENERIC_HDLC
|
||||
{
|
||||
struct net_device_stats *stats = hdlc_stats(info->netdev);
|
||||
stats->rx_errors++;
|
||||
stats->rx_frame_errors++;
|
||||
info->netdev->stats.rx_errors++;
|
||||
info->netdev->stats.rx_frame_errors++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -769,7 +769,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
|
|||
ipoib_mcast_stop_thread(dev, 0);
|
||||
|
||||
local_irq_save(flags);
|
||||
netif_tx_lock(dev);
|
||||
netif_addr_lock(dev);
|
||||
spin_lock(&priv->lock);
|
||||
|
||||
/*
|
||||
|
@ -846,7 +846,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
|
|||
}
|
||||
|
||||
spin_unlock(&priv->lock);
|
||||
netif_tx_unlock(dev);
|
||||
netif_addr_unlock(dev);
|
||||
local_irq_restore(flags);
|
||||
|
||||
/* We have to cancel outside of the spinlock */
|
||||
|
|
|
@ -287,7 +287,7 @@ isdn_net_unbind_channel(isdn_net_local * lp)
|
|||
BEWARE! This chunk of code cannot be called from hardware
|
||||
interrupt handler. I hope it is true. --ANK
|
||||
*/
|
||||
qdisc_reset(lp->netdev->dev->qdisc);
|
||||
qdisc_reset_all_tx(lp->netdev->dev);
|
||||
}
|
||||
lp->dialstate = 0;
|
||||
dev->rx_netdev[isdn_dc2minor(lp->isdn_device, lp->isdn_channel)] = NULL;
|
||||
|
|
|
@ -1133,7 +1133,7 @@ static void wq_set_multicast_list (struct work_struct *work)
|
|||
|
||||
dvb_net_feed_stop(dev);
|
||||
priv->rx_mode = RX_MODE_UNI;
|
||||
netif_tx_lock_bh(dev);
|
||||
netif_addr_lock_bh(dev);
|
||||
|
||||
if (dev->flags & IFF_PROMISC) {
|
||||
dprintk("%s: promiscuous mode\n", dev->name);
|
||||
|
@ -1158,7 +1158,7 @@ static void wq_set_multicast_list (struct work_struct *work)
|
|||
}
|
||||
}
|
||||
|
||||
netif_tx_unlock_bh(dev);
|
||||
netif_addr_unlock_bh(dev);
|
||||
dvb_net_feed_start(dev);
|
||||
}
|
||||
|
||||
|
|
|
@ -149,7 +149,7 @@ el2_pio_probe(struct net_device *dev)
|
|||
#ifndef MODULE
|
||||
struct net_device * __init el2_probe(int unit)
|
||||
{
|
||||
struct net_device *dev = alloc_ei_netdev();
|
||||
struct net_device *dev = alloc_eip_netdev();
|
||||
int err;
|
||||
|
||||
if (!dev)
|
||||
|
@ -340,7 +340,7 @@ el2_probe1(struct net_device *dev, int ioaddr)
|
|||
dev->stop = &el2_close;
|
||||
dev->ethtool_ops = &netdev_ethtool_ops;
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
dev->poll_controller = ei_poll;
|
||||
dev->poll_controller = eip_poll;
|
||||
#endif
|
||||
|
||||
retval = register_netdev(dev);
|
||||
|
@ -386,7 +386,7 @@ el2_open(struct net_device *dev)
|
|||
outb_p(0x00, E33G_IDCFR);
|
||||
if (*irqp == probe_irq_off(cookie) /* It's a good IRQ line! */
|
||||
&& ((retval = request_irq(dev->irq = *irqp,
|
||||
ei_interrupt, 0, dev->name, dev)) == 0))
|
||||
eip_interrupt, 0, dev->name, dev)) == 0))
|
||||
break;
|
||||
}
|
||||
} while (*++irqp);
|
||||
|
@ -395,13 +395,13 @@ el2_open(struct net_device *dev)
|
|||
return retval;
|
||||
}
|
||||
} else {
|
||||
if ((retval = request_irq(dev->irq, ei_interrupt, 0, dev->name, dev))) {
|
||||
if ((retval = request_irq(dev->irq, eip_interrupt, 0, dev->name, dev))) {
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
||||
el2_init_card(dev);
|
||||
ei_open(dev);
|
||||
eip_open(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -412,7 +412,7 @@ el2_close(struct net_device *dev)
|
|||
dev->irq = ei_status.saved_irq;
|
||||
outb(EGACFR_IRQOFF, E33G_GACFR); /* disable interrupts. */
|
||||
|
||||
ei_close(dev);
|
||||
eip_close(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -698,7 +698,7 @@ init_module(void)
|
|||
if (this_dev != 0) break; /* only autoprobe 1st one */
|
||||
printk(KERN_NOTICE "3c503.c: Presently autoprobing (not recommended) for a single card.\n");
|
||||
}
|
||||
dev = alloc_ei_netdev();
|
||||
dev = alloc_eip_netdev();
|
||||
if (!dev)
|
||||
break;
|
||||
dev->irq = irq[this_dev];
|
||||
|
|
|
@ -572,12 +572,16 @@ static int corkscrew_setup(struct net_device *dev, int ioaddr,
|
|||
int irq;
|
||||
DECLARE_MAC_BUF(mac);
|
||||
|
||||
#ifdef __ISAPNP__
|
||||
if (idev) {
|
||||
irq = pnp_irq(idev, 0);
|
||||
vp->dev = &idev->dev;
|
||||
} else {
|
||||
irq = inw(ioaddr + 0x2002) & 15;
|
||||
}
|
||||
#else
|
||||
irq = inw(ioaddr + 0x2002) & 15;
|
||||
#endif
|
||||
|
||||
dev->base_addr = ioaddr;
|
||||
dev->irq = irq;
|
||||
|
|
|
@ -202,7 +202,6 @@ static void elmc_xmt_int(struct net_device *dev);
|
|||
static void elmc_rnr_int(struct net_device *dev);
|
||||
|
||||
struct priv {
|
||||
struct net_device_stats stats;
|
||||
unsigned long base;
|
||||
char *memtop;
|
||||
unsigned long mapped_start; /* Start of ioremap */
|
||||
|
@ -989,18 +988,18 @@ static void elmc_rcv_int(struct net_device *dev)
|
|||
skb->protocol = eth_type_trans(skb, dev);
|
||||
netif_rx(skb);
|
||||
dev->last_rx = jiffies;
|
||||
p->stats.rx_packets++;
|
||||
p->stats.rx_bytes += totlen;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += totlen;
|
||||
} else {
|
||||
p->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
}
|
||||
} else {
|
||||
printk(KERN_WARNING "%s: received oversized frame.\n", dev->name);
|
||||
p->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
}
|
||||
} else { /* frame !(ok), only with 'save-bad-frames' */
|
||||
printk(KERN_WARNING "%s: oops! rfd-error-status: %04x\n", dev->name, status);
|
||||
p->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
}
|
||||
p->rfd_top->status = 0;
|
||||
p->rfd_top->last = RFD_SUSP;
|
||||
|
@ -1018,7 +1017,7 @@ static void elmc_rnr_int(struct net_device *dev)
|
|||
{
|
||||
struct priv *p = (struct priv *) dev->priv;
|
||||
|
||||
p->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
|
||||
WAIT_4_SCB_CMD(); /* wait for the last cmd */
|
||||
p->scb->cmd = RUC_ABORT; /* usually the RU is in the 'no resource'-state .. abort it now. */
|
||||
|
@ -1046,24 +1045,24 @@ static void elmc_xmt_int(struct net_device *dev)
|
|||
printk(KERN_WARNING "%s: strange .. xmit-int without a 'COMPLETE'\n", dev->name);
|
||||
}
|
||||
if (status & STAT_OK) {
|
||||
p->stats.tx_packets++;
|
||||
p->stats.collisions += (status & TCMD_MAXCOLLMASK);
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.collisions += (status & TCMD_MAXCOLLMASK);
|
||||
} else {
|
||||
p->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
if (status & TCMD_LATECOLL) {
|
||||
printk(KERN_WARNING "%s: late collision detected.\n", dev->name);
|
||||
p->stats.collisions++;
|
||||
dev->stats.collisions++;
|
||||
} else if (status & TCMD_NOCARRIER) {
|
||||
p->stats.tx_carrier_errors++;
|
||||
dev->stats.tx_carrier_errors++;
|
||||
printk(KERN_WARNING "%s: no carrier detected.\n", dev->name);
|
||||
} else if (status & TCMD_LOSTCTS) {
|
||||
printk(KERN_WARNING "%s: loss of CTS detected.\n", dev->name);
|
||||
} else if (status & TCMD_UNDERRUN) {
|
||||
p->stats.tx_fifo_errors++;
|
||||
dev->stats.tx_fifo_errors++;
|
||||
printk(KERN_WARNING "%s: DMA underrun detected.\n", dev->name);
|
||||
} else if (status & TCMD_MAXCOLL) {
|
||||
printk(KERN_WARNING "%s: Max. collisions exceeded.\n", dev->name);
|
||||
p->stats.collisions += 16;
|
||||
dev->stats.collisions += 16;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1215,12 +1214,12 @@ static struct net_device_stats *elmc_get_stats(struct net_device *dev)
|
|||
ovrn = p->scb->ovrn_errs;
|
||||
p->scb->ovrn_errs -= ovrn;
|
||||
|
||||
p->stats.rx_crc_errors += crc;
|
||||
p->stats.rx_fifo_errors += ovrn;
|
||||
p->stats.rx_frame_errors += aln;
|
||||
p->stats.rx_dropped += rsc;
|
||||
dev->stats.rx_crc_errors += crc;
|
||||
dev->stats.rx_fifo_errors += ovrn;
|
||||
dev->stats.rx_frame_errors += aln;
|
||||
dev->stats.rx_dropped += rsc;
|
||||
|
||||
return &p->stats;
|
||||
return &dev->stats;
|
||||
}
|
||||
|
||||
/********************************************************
|
||||
|
|
|
@ -158,7 +158,6 @@ struct mc32_local
|
|||
int slot;
|
||||
|
||||
u32 base;
|
||||
struct net_device_stats net_stats;
|
||||
volatile struct mc32_mailbox *rx_box;
|
||||
volatile struct mc32_mailbox *tx_box;
|
||||
volatile struct mc32_mailbox *exec_box;
|
||||
|
@ -1093,24 +1092,24 @@ static void mc32_update_stats(struct net_device *dev)
|
|||
|
||||
u32 rx_errors=0;
|
||||
|
||||
rx_errors+=lp->net_stats.rx_crc_errors +=st->rx_crc_errors;
|
||||
rx_errors+=dev->stats.rx_crc_errors +=st->rx_crc_errors;
|
||||
st->rx_crc_errors=0;
|
||||
rx_errors+=lp->net_stats.rx_fifo_errors +=st->rx_overrun_errors;
|
||||
rx_errors+=dev->stats.rx_fifo_errors +=st->rx_overrun_errors;
|
||||
st->rx_overrun_errors=0;
|
||||
rx_errors+=lp->net_stats.rx_frame_errors +=st->rx_alignment_errors;
|
||||
rx_errors+=dev->stats.rx_frame_errors +=st->rx_alignment_errors;
|
||||
st->rx_alignment_errors=0;
|
||||
rx_errors+=lp->net_stats.rx_length_errors+=st->rx_tooshort_errors;
|
||||
rx_errors+=dev->stats.rx_length_errors+=st->rx_tooshort_errors;
|
||||
st->rx_tooshort_errors=0;
|
||||
rx_errors+=lp->net_stats.rx_missed_errors+=st->rx_outofresource_errors;
|
||||
rx_errors+=dev->stats.rx_missed_errors+=st->rx_outofresource_errors;
|
||||
st->rx_outofresource_errors=0;
|
||||
lp->net_stats.rx_errors=rx_errors;
|
||||
dev->stats.rx_errors=rx_errors;
|
||||
|
||||
/* Number of packets which saw one collision */
|
||||
lp->net_stats.collisions+=st->dataC[10];
|
||||
dev->stats.collisions+=st->dataC[10];
|
||||
st->dataC[10]=0;
|
||||
|
||||
/* Number of packets which saw 2--15 collisions */
|
||||
lp->net_stats.collisions+=st->dataC[11];
|
||||
dev->stats.collisions+=st->dataC[11];
|
||||
st->dataC[11]=0;
|
||||
}
|
||||
|
||||
|
@ -1178,7 +1177,7 @@ static void mc32_rx_ring(struct net_device *dev)
|
|||
skb=dev_alloc_skb(length+2);
|
||||
|
||||
if(skb==NULL) {
|
||||
lp->net_stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
goto dropped;
|
||||
}
|
||||
|
||||
|
@ -1189,8 +1188,8 @@ static void mc32_rx_ring(struct net_device *dev)
|
|||
|
||||
skb->protocol=eth_type_trans(skb,dev);
|
||||
dev->last_rx = jiffies;
|
||||
lp->net_stats.rx_packets++;
|
||||
lp->net_stats.rx_bytes += length;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += length;
|
||||
netif_rx(skb);
|
||||
}
|
||||
|
||||
|
@ -1253,34 +1252,34 @@ static void mc32_tx_ring(struct net_device *dev)
|
|||
/* Not COMPLETED */
|
||||
break;
|
||||
}
|
||||
lp->net_stats.tx_packets++;
|
||||
dev->stats.tx_packets++;
|
||||
if(!(np->status & (1<<6))) /* Not COMPLETED_OK */
|
||||
{
|
||||
lp->net_stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
|
||||
switch(np->status&0x0F)
|
||||
{
|
||||
case 1:
|
||||
lp->net_stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
break; /* Max collisions */
|
||||
case 2:
|
||||
lp->net_stats.tx_fifo_errors++;
|
||||
dev->stats.tx_fifo_errors++;
|
||||
break;
|
||||
case 3:
|
||||
lp->net_stats.tx_carrier_errors++;
|
||||
dev->stats.tx_carrier_errors++;
|
||||
break;
|
||||
case 4:
|
||||
lp->net_stats.tx_window_errors++;
|
||||
dev->stats.tx_window_errors++;
|
||||
break; /* CTS Lost */
|
||||
case 5:
|
||||
lp->net_stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
break; /* Transmit timeout */
|
||||
}
|
||||
}
|
||||
/* Packets are sent in order - this is
|
||||
basically a FIFO queue of buffers matching
|
||||
the card ring */
|
||||
lp->net_stats.tx_bytes+=lp->tx_ring[t].skb->len;
|
||||
dev->stats.tx_bytes+=lp->tx_ring[t].skb->len;
|
||||
dev_kfree_skb_irq(lp->tx_ring[t].skb);
|
||||
lp->tx_ring[t].skb=NULL;
|
||||
atomic_inc(&lp->tx_count);
|
||||
|
@ -1367,7 +1366,7 @@ static irqreturn_t mc32_interrupt(int irq, void *dev_id)
|
|||
case 6:
|
||||
/* Out of RX buffers stat */
|
||||
/* Must restart rx */
|
||||
lp->net_stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
mc32_rx_ring(dev);
|
||||
mc32_start_transceiver(dev);
|
||||
break;
|
||||
|
@ -1489,10 +1488,8 @@ static int mc32_close(struct net_device *dev)
|
|||
|
||||
static struct net_device_stats *mc32_get_stats(struct net_device *dev)
|
||||
{
|
||||
struct mc32_local *lp = netdev_priv(dev);
|
||||
|
||||
mc32_update_stats(dev);
|
||||
return &lp->net_stats;
|
||||
return &dev->stats;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -340,7 +340,6 @@ struct cp_private {
|
|||
u32 rx_config;
|
||||
u16 cpcmd;
|
||||
|
||||
struct net_device_stats net_stats;
|
||||
struct cp_extra_stats cp_stats;
|
||||
|
||||
unsigned rx_head ____cacheline_aligned;
|
||||
|
@ -457,8 +456,8 @@ static inline void cp_rx_skb (struct cp_private *cp, struct sk_buff *skb,
|
|||
{
|
||||
skb->protocol = eth_type_trans (skb, cp->dev);
|
||||
|
||||
cp->net_stats.rx_packets++;
|
||||
cp->net_stats.rx_bytes += skb->len;
|
||||
cp->dev->stats.rx_packets++;
|
||||
cp->dev->stats.rx_bytes += skb->len;
|
||||
cp->dev->last_rx = jiffies;
|
||||
|
||||
#if CP_VLAN_TAG_USED
|
||||
|
@ -477,17 +476,17 @@ static void cp_rx_err_acct (struct cp_private *cp, unsigned rx_tail,
|
|||
printk (KERN_DEBUG
|
||||
"%s: rx err, slot %d status 0x%x len %d\n",
|
||||
cp->dev->name, rx_tail, status, len);
|
||||
cp->net_stats.rx_errors++;
|
||||
cp->dev->stats.rx_errors++;
|
||||
if (status & RxErrFrame)
|
||||
cp->net_stats.rx_frame_errors++;
|
||||
cp->dev->stats.rx_frame_errors++;
|
||||
if (status & RxErrCRC)
|
||||
cp->net_stats.rx_crc_errors++;
|
||||
cp->dev->stats.rx_crc_errors++;
|
||||
if ((status & RxErrRunt) || (status & RxErrLong))
|
||||
cp->net_stats.rx_length_errors++;
|
||||
cp->dev->stats.rx_length_errors++;
|
||||
if ((status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag))
|
||||
cp->net_stats.rx_length_errors++;
|
||||
cp->dev->stats.rx_length_errors++;
|
||||
if (status & RxErrFIFO)
|
||||
cp->net_stats.rx_fifo_errors++;
|
||||
cp->dev->stats.rx_fifo_errors++;
|
||||
}
|
||||
|
||||
static inline unsigned int cp_rx_csum_ok (u32 status)
|
||||
|
@ -539,7 +538,7 @@ static int cp_rx_poll(struct napi_struct *napi, int budget)
|
|||
* that RX fragments are never encountered
|
||||
*/
|
||||
cp_rx_err_acct(cp, rx_tail, status, len);
|
||||
cp->net_stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
cp->cp_stats.rx_frags++;
|
||||
goto rx_next;
|
||||
}
|
||||
|
@ -556,7 +555,7 @@ static int cp_rx_poll(struct napi_struct *napi, int budget)
|
|||
buflen = cp->rx_buf_sz + RX_OFFSET;
|
||||
new_skb = dev_alloc_skb (buflen);
|
||||
if (!new_skb) {
|
||||
cp->net_stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
goto rx_next;
|
||||
}
|
||||
|
||||
|
@ -710,20 +709,20 @@ static void cp_tx (struct cp_private *cp)
|
|||
if (netif_msg_tx_err(cp))
|
||||
printk(KERN_DEBUG "%s: tx err, status 0x%x\n",
|
||||
cp->dev->name, status);
|
||||
cp->net_stats.tx_errors++;
|
||||
cp->dev->stats.tx_errors++;
|
||||
if (status & TxOWC)
|
||||
cp->net_stats.tx_window_errors++;
|
||||
cp->dev->stats.tx_window_errors++;
|
||||
if (status & TxMaxCol)
|
||||
cp->net_stats.tx_aborted_errors++;
|
||||
cp->dev->stats.tx_aborted_errors++;
|
||||
if (status & TxLinkFail)
|
||||
cp->net_stats.tx_carrier_errors++;
|
||||
cp->dev->stats.tx_carrier_errors++;
|
||||
if (status & TxFIFOUnder)
|
||||
cp->net_stats.tx_fifo_errors++;
|
||||
cp->dev->stats.tx_fifo_errors++;
|
||||
} else {
|
||||
cp->net_stats.collisions +=
|
||||
cp->dev->stats.collisions +=
|
||||
((status >> TxColCntShift) & TxColCntMask);
|
||||
cp->net_stats.tx_packets++;
|
||||
cp->net_stats.tx_bytes += skb->len;
|
||||
cp->dev->stats.tx_packets++;
|
||||
cp->dev->stats.tx_bytes += skb->len;
|
||||
if (netif_msg_tx_done(cp))
|
||||
printk(KERN_DEBUG "%s: tx done, slot %d\n", cp->dev->name, tx_tail);
|
||||
}
|
||||
|
@ -956,7 +955,7 @@ static void cp_set_rx_mode (struct net_device *dev)
|
|||
static void __cp_get_stats(struct cp_private *cp)
|
||||
{
|
||||
/* only lower 24 bits valid; write any value to clear */
|
||||
cp->net_stats.rx_missed_errors += (cpr32 (RxMissed) & 0xffffff);
|
||||
cp->dev->stats.rx_missed_errors += (cpr32 (RxMissed) & 0xffffff);
|
||||
cpw32 (RxMissed, 0);
|
||||
}
|
||||
|
||||
|
@ -971,7 +970,7 @@ static struct net_device_stats *cp_get_stats(struct net_device *dev)
|
|||
__cp_get_stats(cp);
|
||||
spin_unlock_irqrestore(&cp->lock, flags);
|
||||
|
||||
return &cp->net_stats;
|
||||
return &dev->stats;
|
||||
}
|
||||
|
||||
static void cp_stop_hw (struct cp_private *cp)
|
||||
|
@ -1142,7 +1141,7 @@ static void cp_clean_rings (struct cp_private *cp)
|
|||
PCI_DMA_TODEVICE);
|
||||
if (le32_to_cpu(desc->opts1) & LastFrag)
|
||||
dev_kfree_skb(skb);
|
||||
cp->net_stats.tx_dropped++;
|
||||
cp->dev->stats.tx_dropped++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1214,7 +1213,6 @@ static int cp_close (struct net_device *dev)
|
|||
|
||||
spin_unlock_irqrestore(&cp->lock, flags);
|
||||
|
||||
synchronize_irq(dev->irq);
|
||||
free_irq(dev->irq, dev);
|
||||
|
||||
cp_free_rings(cp);
|
||||
|
|
|
@ -107,8 +107,8 @@
|
|||
#include <linux/mii.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
#define RTL8139_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION
|
||||
|
@ -134,7 +134,7 @@
|
|||
|
||||
#if RTL8139_DEBUG
|
||||
/* note: prints function name for you */
|
||||
# define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args)
|
||||
# define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __func__ , ## args)
|
||||
#else
|
||||
# define DPRINTK(fmt, args...)
|
||||
#endif
|
||||
|
@ -145,7 +145,7 @@
|
|||
# define assert(expr) \
|
||||
if(unlikely(!(expr))) { \
|
||||
printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \
|
||||
#expr,__FILE__,__FUNCTION__,__LINE__); \
|
||||
#expr, __FILE__, __func__, __LINE__); \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -219,7 +219,7 @@ enum {
|
|||
#define RTL8139B_IO_SIZE 256
|
||||
|
||||
#define RTL8129_CAPS HAS_MII_XCVR
|
||||
#define RTL8139_CAPS HAS_CHIP_XCVR|HAS_LNK_CHNG
|
||||
#define RTL8139_CAPS (HAS_CHIP_XCVR|HAS_LNK_CHNG)
|
||||
|
||||
typedef enum {
|
||||
RTL8139 = 0,
|
||||
|
@ -574,7 +574,6 @@ struct rtl8139_private {
|
|||
u32 msg_enable;
|
||||
struct napi_struct napi;
|
||||
struct net_device *dev;
|
||||
struct net_device_stats stats;
|
||||
|
||||
unsigned char *rx_ring;
|
||||
unsigned int cur_rx; /* RX buf index of next pkt */
|
||||
|
@ -1711,7 +1710,7 @@ static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev)
|
|||
dev_kfree_skb(skb);
|
||||
} else {
|
||||
dev_kfree_skb(skb);
|
||||
tp->stats.tx_dropped++;
|
||||
dev->stats.tx_dropped++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1762,27 +1761,27 @@ static void rtl8139_tx_interrupt (struct net_device *dev,
|
|||
if (netif_msg_tx_err(tp))
|
||||
printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",
|
||||
dev->name, txstatus);
|
||||
tp->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
if (txstatus & TxAborted) {
|
||||
tp->stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
RTL_W32 (TxConfig, TxClearAbt);
|
||||
RTL_W16 (IntrStatus, TxErr);
|
||||
wmb();
|
||||
}
|
||||
if (txstatus & TxCarrierLost)
|
||||
tp->stats.tx_carrier_errors++;
|
||||
dev->stats.tx_carrier_errors++;
|
||||
if (txstatus & TxOutOfWindow)
|
||||
tp->stats.tx_window_errors++;
|
||||
dev->stats.tx_window_errors++;
|
||||
} else {
|
||||
if (txstatus & TxUnderrun) {
|
||||
/* Add 64 to the Tx FIFO threshold. */
|
||||
if (tp->tx_flag < 0x00300000)
|
||||
tp->tx_flag += 0x00020000;
|
||||
tp->stats.tx_fifo_errors++;
|
||||
dev->stats.tx_fifo_errors++;
|
||||
}
|
||||
tp->stats.collisions += (txstatus >> 24) & 15;
|
||||
tp->stats.tx_bytes += txstatus & 0x7ff;
|
||||
tp->stats.tx_packets++;
|
||||
dev->stats.collisions += (txstatus >> 24) & 15;
|
||||
dev->stats.tx_bytes += txstatus & 0x7ff;
|
||||
dev->stats.tx_packets++;
|
||||
}
|
||||
|
||||
dirty_tx++;
|
||||
|
@ -1818,7 +1817,7 @@ static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
|
|||
if (netif_msg_rx_err (tp))
|
||||
printk(KERN_DEBUG "%s: Ethernet frame had errors, status %8.8x.\n",
|
||||
dev->name, rx_status);
|
||||
tp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
if (!(rx_status & RxStatusOK)) {
|
||||
if (rx_status & RxTooLong) {
|
||||
DPRINTK ("%s: Oversized Ethernet frame, status %4.4x!\n",
|
||||
|
@ -1826,11 +1825,11 @@ static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
|
|||
/* A.C.: The chip hangs here. */
|
||||
}
|
||||
if (rx_status & (RxBadSymbol | RxBadAlign))
|
||||
tp->stats.rx_frame_errors++;
|
||||
dev->stats.rx_frame_errors++;
|
||||
if (rx_status & (RxRunt | RxTooLong))
|
||||
tp->stats.rx_length_errors++;
|
||||
dev->stats.rx_length_errors++;
|
||||
if (rx_status & RxCRCErr)
|
||||
tp->stats.rx_crc_errors++;
|
||||
dev->stats.rx_crc_errors++;
|
||||
} else {
|
||||
tp->xstats.rx_lost_in_ring++;
|
||||
}
|
||||
|
@ -1890,7 +1889,7 @@ static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
|
|||
}
|
||||
|
||||
#if RX_BUF_IDX == 3
|
||||
static __inline__ void wrap_copy(struct sk_buff *skb, const unsigned char *ring,
|
||||
static inline void wrap_copy(struct sk_buff *skb, const unsigned char *ring,
|
||||
u32 offset, unsigned int size)
|
||||
{
|
||||
u32 left = RX_BUF_LEN - offset;
|
||||
|
@ -1913,9 +1912,9 @@ static void rtl8139_isr_ack(struct rtl8139_private *tp)
|
|||
/* Clear out errors and receive interrupts */
|
||||
if (likely(status != 0)) {
|
||||
if (unlikely(status & (RxFIFOOver | RxOverflow))) {
|
||||
tp->stats.rx_errors++;
|
||||
tp->dev->stats.rx_errors++;
|
||||
if (status & RxFIFOOver)
|
||||
tp->stats.rx_fifo_errors++;
|
||||
tp->dev->stats.rx_fifo_errors++;
|
||||
}
|
||||
RTL_W16_F (IntrStatus, RxAckBits);
|
||||
}
|
||||
|
@ -2016,8 +2015,8 @@ static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
|
|||
skb->protocol = eth_type_trans (skb, dev);
|
||||
|
||||
dev->last_rx = jiffies;
|
||||
tp->stats.rx_bytes += pkt_size;
|
||||
tp->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += pkt_size;
|
||||
dev->stats.rx_packets++;
|
||||
|
||||
netif_receive_skb (skb);
|
||||
} else {
|
||||
|
@ -2025,7 +2024,7 @@ static int rtl8139_rx(struct net_device *dev, struct rtl8139_private *tp,
|
|||
printk (KERN_WARNING
|
||||
"%s: Memory squeeze, dropping packet.\n",
|
||||
dev->name);
|
||||
tp->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
}
|
||||
received++;
|
||||
|
||||
|
@ -2072,7 +2071,7 @@ static void rtl8139_weird_interrupt (struct net_device *dev,
|
|||
assert (ioaddr != NULL);
|
||||
|
||||
/* Update the error count. */
|
||||
tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
RTL_W32 (RxMissed, 0);
|
||||
|
||||
if ((status & RxUnderrun) && link_changed &&
|
||||
|
@ -2082,12 +2081,12 @@ static void rtl8139_weird_interrupt (struct net_device *dev,
|
|||
}
|
||||
|
||||
if (status & (RxUnderrun | RxErr))
|
||||
tp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
|
||||
if (status & PCSTimeout)
|
||||
tp->stats.rx_length_errors++;
|
||||
dev->stats.rx_length_errors++;
|
||||
if (status & RxUnderrun)
|
||||
tp->stats.rx_fifo_errors++;
|
||||
dev->stats.rx_fifo_errors++;
|
||||
if (status & PCIErr) {
|
||||
u16 pci_cmd_status;
|
||||
pci_read_config_word (tp->pci_dev, PCI_STATUS, &pci_cmd_status);
|
||||
|
@ -2227,12 +2226,11 @@ static int rtl8139_close (struct net_device *dev)
|
|||
RTL_W16 (IntrMask, 0);
|
||||
|
||||
/* Update the error counts. */
|
||||
tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
RTL_W32 (RxMissed, 0);
|
||||
|
||||
spin_unlock_irqrestore (&tp->lock, flags);
|
||||
|
||||
synchronize_irq (dev->irq); /* racy, but that's ok here */
|
||||
free_irq (dev->irq, dev);
|
||||
|
||||
rtl8139_tx_clear (tp);
|
||||
|
@ -2472,12 +2470,12 @@ static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
|
|||
|
||||
if (netif_running(dev)) {
|
||||
spin_lock_irqsave (&tp->lock, flags);
|
||||
tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
RTL_W32 (RxMissed, 0);
|
||||
spin_unlock_irqrestore (&tp->lock, flags);
|
||||
}
|
||||
|
||||
return &tp->stats;
|
||||
return &dev->stats;
|
||||
}
|
||||
|
||||
/* Set or clear the multicast filter for this adaptor.
|
||||
|
@ -2561,7 +2559,7 @@ static int rtl8139_suspend (struct pci_dev *pdev, pm_message_t state)
|
|||
RTL_W8 (ChipCmd, 0);
|
||||
|
||||
/* Update the error counts. */
|
||||
tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
|
||||
RTL_W32 (RxMissed, 0);
|
||||
|
||||
spin_unlock_irqrestore (&tp->lock, flags);
|
||||
|
|
|
@ -30,8 +30,10 @@ extern int ei_debug;
|
|||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
extern void ei_poll(struct net_device *dev);
|
||||
extern void eip_poll(struct net_device *dev);
|
||||
#endif
|
||||
|
||||
/* Without I/O delay - non ISA or later chips */
|
||||
extern void NS8390_init(struct net_device *dev, int startp);
|
||||
extern int ei_open(struct net_device *dev);
|
||||
extern int ei_close(struct net_device *dev);
|
||||
|
@ -42,6 +44,17 @@ static inline struct net_device *alloc_ei_netdev(void)
|
|||
return __alloc_ei_netdev(0);
|
||||
}
|
||||
|
||||
/* With I/O delay form */
|
||||
extern void NS8390p_init(struct net_device *dev, int startp);
|
||||
extern int eip_open(struct net_device *dev);
|
||||
extern int eip_close(struct net_device *dev);
|
||||
extern irqreturn_t eip_interrupt(int irq, void *dev_id);
|
||||
extern struct net_device *__alloc_eip_netdev(int size);
|
||||
static inline struct net_device *alloc_eip_netdev(void)
|
||||
{
|
||||
return __alloc_eip_netdev(0);
|
||||
}
|
||||
|
||||
/* You have one of these per-board */
|
||||
struct ei_device {
|
||||
const char *name;
|
||||
|
@ -69,7 +82,6 @@ struct ei_device {
|
|||
unsigned char reg0; /* Register '0' in a WD8013 */
|
||||
unsigned char reg5; /* Register '5' in a WD8013 */
|
||||
unsigned char saved_irq; /* Original dev->irq value. */
|
||||
struct net_device_stats stat; /* The new statistics table. */
|
||||
u32 *reg_offset; /* Register mapping table */
|
||||
spinlock_t page_lock; /* Page register locks */
|
||||
unsigned long priv; /* Private field to store bus IDs etc. */
|
||||
|
@ -116,13 +128,14 @@ struct ei_device {
|
|||
/*
|
||||
* Only generate indirect loads given a machine that needs them.
|
||||
* - removed AMIGA_PCMCIA from this list, handled as ISA io now
|
||||
* - the _p for generates no delay by default 8390p.c overrides this.
|
||||
*/
|
||||
|
||||
#ifndef ei_inb
|
||||
#define ei_inb(_p) inb(_p)
|
||||
#define ei_outb(_v,_p) outb(_v,_p)
|
||||
#define ei_inb_p(_p) inb_p(_p)
|
||||
#define ei_outb_p(_v,_p) outb_p(_v,_p)
|
||||
#define ei_inb_p(_p) inb(_p)
|
||||
#define ei_outb_p(_v,_p) outb(_v,_p)
|
||||
#endif
|
||||
|
||||
#ifndef EI_SHIFT
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
/* 8390 core for ISA devices needing bus delays */
|
||||
|
||||
static const char version[] =
|
||||
"8390p.c:v1.10cvs 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n";
|
||||
|
||||
#define ei_inb(_p) inb(_p)
|
||||
#define ei_outb(_v,_p) outb(_v,_p)
|
||||
#define ei_inb_p(_p) inb_p(_p)
|
||||
#define ei_outb_p(_v,_p) outb_p(_v,_p)
|
||||
|
||||
#include "lib8390.c"
|
||||
|
||||
int eip_open(struct net_device *dev)
|
||||
{
|
||||
return __ei_open(dev);
|
||||
}
|
||||
|
||||
int eip_close(struct net_device *dev)
|
||||
{
|
||||
return __ei_close(dev);
|
||||
}
|
||||
|
||||
irqreturn_t eip_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
return __ei_interrupt(irq, dev_id);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
void eip_poll(struct net_device *dev)
|
||||
{
|
||||
__ei_poll(dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct net_device *__alloc_eip_netdev(int size)
|
||||
{
|
||||
return ____alloc_ei_netdev(size);
|
||||
}
|
||||
|
||||
void NS8390p_init(struct net_device *dev, int startp)
|
||||
{
|
||||
return __NS8390_init(dev, startp);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(eip_open);
|
||||
EXPORT_SYMBOL(eip_close);
|
||||
EXPORT_SYMBOL(eip_interrupt);
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
EXPORT_SYMBOL(eip_poll);
|
||||
#endif
|
||||
EXPORT_SYMBOL(NS8390p_init);
|
||||
EXPORT_SYMBOL(__alloc_eip_netdev);
|
||||
|
||||
#if defined(MODULE)
|
||||
|
||||
int init_module(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cleanup_module(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* MODULE */
|
||||
MODULE_LICENSE("GPL");
|
|
@ -26,14 +26,6 @@ menuconfig NETDEVICES
|
|||
# that for each of the symbols.
|
||||
if NETDEVICES
|
||||
|
||||
config NETDEVICES_MULTIQUEUE
|
||||
bool "Netdevice multiple hardware queue support"
|
||||
---help---
|
||||
Say Y here if you want to allow the network stack to use multiple
|
||||
hardware TX queues on an ethernet device.
|
||||
|
||||
Most people will say N here.
|
||||
|
||||
config IFB
|
||||
tristate "Intermediate Functional Block support"
|
||||
depends on NET_CLS_ACT
|
||||
|
@ -515,6 +507,18 @@ config STNIC
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config SH_ETH
|
||||
tristate "Renesas SuperH Ethernet support"
|
||||
depends on SUPERH && \
|
||||
(CPU_SUBTYPE_SH7710 || CPU_SUBTYPE_SH7712)
|
||||
select CRC32
|
||||
select MII
|
||||
select MDIO_BITBANG
|
||||
select PHYLIB
|
||||
help
|
||||
Renesas SuperH Ethernet device driver.
|
||||
This driver support SH7710 and SH7712.
|
||||
|
||||
config SUNLANCE
|
||||
tristate "Sun LANCE support"
|
||||
depends on SBUS
|
||||
|
@ -917,6 +921,23 @@ config DM9000
|
|||
To compile this driver as a module, choose M here. The module
|
||||
will be called dm9000.
|
||||
|
||||
config DM9000_DEBUGLEVEL
|
||||
int "DM9000 maximum debug level"
|
||||
depends on DM9000
|
||||
default 4
|
||||
help
|
||||
The maximum level of debugging code compiled into the DM9000
|
||||
driver.
|
||||
|
||||
config DM9000_FORCE_SIMPLE_PHY_POLL
|
||||
bool "Force simple NSR based PHY polling"
|
||||
depends on DM9000
|
||||
---help---
|
||||
This configuration forces the DM9000 to use the NSR's LinkStatus
|
||||
bit to determine if the link is up or down instead of the more
|
||||
costly MII PHY reads. Note, this will not work if the chip is
|
||||
operating with an external PHY.
|
||||
|
||||
config ENC28J60
|
||||
tristate "ENC28J60 support"
|
||||
depends on EXPERIMENTAL && SPI && NET_ETHERNET
|
||||
|
@ -934,19 +955,11 @@ config ENC28J60_WRITEVERIFY
|
|||
Enable the verify after the buffer write useful for debugging purpose.
|
||||
If unsure, say N.
|
||||
|
||||
config DM9000_DEBUGLEVEL
|
||||
int "DM9000 maximum debug level"
|
||||
depends on DM9000
|
||||
default 4
|
||||
help
|
||||
The maximum level of debugging code compiled into the DM9000
|
||||
driver.
|
||||
|
||||
config SMC911X
|
||||
tristate "SMSC LAN911[5678] support"
|
||||
select CRC32
|
||||
select MII
|
||||
depends on ARCH_PXA || SH_MAGIC_PANEL_R2
|
||||
depends on ARCH_PXA || SUPERH
|
||||
help
|
||||
This is a driver for SMSC's LAN911x series of Ethernet chipsets
|
||||
including the new LAN9115, LAN9116, LAN9117, and LAN9118.
|
||||
|
@ -1234,7 +1247,6 @@ config IBMVETH
|
|||
To compile this driver as a module, choose M here. The module will
|
||||
be called ibmveth.
|
||||
|
||||
source "drivers/net/ibm_emac/Kconfig"
|
||||
source "drivers/net/ibm_newemac/Kconfig"
|
||||
|
||||
config NET_PCI
|
||||
|
@ -1277,20 +1289,6 @@ config AMD8111_ETH
|
|||
To compile this driver as a module, choose M here. The module
|
||||
will be called amd8111e.
|
||||
|
||||
config AMD8111E_NAPI
|
||||
bool "Use RX polling (NAPI)"
|
||||
depends on AMD8111_ETH
|
||||
help
|
||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card. It is
|
||||
still somewhat experimental and thus not yet enabled by default.
|
||||
|
||||
If your estimated Rx load is 10kpps or more, or if the card will be
|
||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||
then say Y here.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config ADAPTEC_STARFIRE
|
||||
tristate "Adaptec Starfire/DuraLAN support"
|
||||
depends on NET_PCI && PCI
|
||||
|
@ -1305,20 +1303,6 @@ config ADAPTEC_STARFIRE
|
|||
To compile this driver as a module, choose M here: the module
|
||||
will be called starfire. This is recommended.
|
||||
|
||||
config ADAPTEC_STARFIRE_NAPI
|
||||
bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
|
||||
depends on ADAPTEC_STARFIRE && EXPERIMENTAL
|
||||
help
|
||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card. It is
|
||||
still somewhat experimental and thus not yet enabled by default.
|
||||
|
||||
If your estimated Rx load is 10kpps or more, or if the card will be
|
||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||
then say Y here.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config AC3200
|
||||
tristate "Ansel Communications EISA 3200 support (EXPERIMENTAL)"
|
||||
depends on NET_PCI && (ISA || EISA) && EXPERIMENTAL
|
||||
|
@ -1661,7 +1645,7 @@ config SUNDANCE_MMIO
|
|||
|
||||
config TLAN
|
||||
tristate "TI ThunderLAN support"
|
||||
depends on NET_PCI && (PCI || EISA) && !64BIT
|
||||
depends on NET_PCI && (PCI || EISA)
|
||||
---help---
|
||||
If you have a PCI Ethernet network card based on the ThunderLAN chip
|
||||
which is supported by this driver, say Y and read the
|
||||
|
@ -1701,26 +1685,6 @@ config VIA_RHINE_MMIO
|
|||
|
||||
If unsure, say Y.
|
||||
|
||||
config VIA_RHINE_NAPI
|
||||
bool "Use Rx Polling (NAPI)"
|
||||
depends on VIA_RHINE
|
||||
help
|
||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card.
|
||||
|
||||
If your estimated Rx load is 10kpps or more, or if the card will be
|
||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||
then say Y here.
|
||||
|
||||
config LAN_SAA9730
|
||||
bool "Philips SAA9730 Ethernet support"
|
||||
depends on NET_PCI && PCI && MIPS_ATLAS
|
||||
help
|
||||
The SAA9730 is a combined multimedia and peripheral controller used
|
||||
in thin clients, Internet access terminals, and diskless
|
||||
workstations.
|
||||
See <http://www.semiconductors.philips.com/pip/SAA9730_flyer_1>.
|
||||
|
||||
config SC92031
|
||||
tristate "Silan SC92031 PCI Fast Ethernet Adapter driver (EXPERIMENTAL)"
|
||||
depends on NET_PCI && PCI && EXPERIMENTAL
|
||||
|
@ -2004,9 +1968,6 @@ config E1000E
|
|||
To compile this driver as a module, choose M here. The module
|
||||
will be called e1000e.
|
||||
|
||||
config E1000E_ENABLED
|
||||
def_bool E1000E != n
|
||||
|
||||
config IP1000
|
||||
tristate "IP1000 Gigabit Ethernet support"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
|
@ -2038,6 +1999,15 @@ config IGB
|
|||
To compile this driver as a module, choose M here. The module
|
||||
will be called igb.
|
||||
|
||||
config IGB_LRO
|
||||
bool "Use software LRO"
|
||||
depends on IGB && INET
|
||||
select INET_LRO
|
||||
---help---
|
||||
Say Y here if you want to use large receive offload.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
source "drivers/net/ixp2000/Kconfig"
|
||||
|
||||
config MYRI_SBUS
|
||||
|
@ -2095,27 +2065,13 @@ config R8169
|
|||
To compile this driver as a module, choose M here: the module
|
||||
will be called r8169. This is recommended.
|
||||
|
||||
config R8169_NAPI
|
||||
bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
|
||||
depends on R8169 && EXPERIMENTAL
|
||||
help
|
||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card. It is
|
||||
still somewhat experimental and thus not yet enabled by default.
|
||||
|
||||
If your estimated Rx load is 10kpps or more, or if the card will be
|
||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||
then say Y here.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config R8169_VLAN
|
||||
bool "VLAN support"
|
||||
depends on R8169 && VLAN_8021Q
|
||||
---help---
|
||||
Say Y here for the r8169 driver to support the functions required
|
||||
by the kernel 802.1Q code.
|
||||
|
||||
|
||||
If in doubt, say Y.
|
||||
|
||||
config SB1250_MAC
|
||||
|
@ -2218,6 +2174,7 @@ config VIA_VELOCITY
|
|||
config TIGON3
|
||||
tristate "Broadcom Tigon3 support"
|
||||
depends on PCI
|
||||
select PHYLIB
|
||||
help
|
||||
This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
|
||||
|
||||
|
@ -2273,6 +2230,19 @@ config GELIC_WIRELESS
|
|||
the driver automatically distinguishes the models, you can
|
||||
safely enable this option even if you have a wireless-less model.
|
||||
|
||||
config GELIC_WIRELESS_OLD_PSK_INTERFACE
|
||||
bool "PS3 Wireless private PSK interface (OBSOLETE)"
|
||||
depends on GELIC_WIRELESS
|
||||
help
|
||||
This option retains the obsolete private interface to pass
|
||||
the PSK from user space programs to the driver. The PSK
|
||||
stands for 'Pre Shared Key' and is used for WPA[2]-PSK
|
||||
(WPA-Personal) environment.
|
||||
If WPA[2]-PSK is used and you need to use old programs that
|
||||
support only this old interface, say Y. Otherwise N.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config GIANFAR
|
||||
tristate "Gianfar Ethernet"
|
||||
depends on FSL_SOC
|
||||
|
@ -2282,10 +2252,6 @@ config GIANFAR
|
|||
This driver supports the Gigabit TSEC on the MPC83xx, MPC85xx,
|
||||
and MPC86xx family of chips, and the FEC on the 8540.
|
||||
|
||||
config GFAR_NAPI
|
||||
bool "Use Rx Polling (NAPI)"
|
||||
depends on GIANFAR
|
||||
|
||||
config UCC_GETH
|
||||
tristate "Freescale QE Gigabit Ethernet"
|
||||
depends on QUICC_ENGINE
|
||||
|
@ -2294,10 +2260,6 @@ config UCC_GETH
|
|||
This driver supports the Gigabit Ethernet mode of the QUICC Engine,
|
||||
which is available on some Freescale SOCs.
|
||||
|
||||
config UGETH_NAPI
|
||||
bool "Use Rx Polling (NAPI)"
|
||||
depends on UCC_GETH
|
||||
|
||||
config UGETH_MAGIC_PACKET
|
||||
bool "Magic Packet detection support"
|
||||
depends on UCC_GETH
|
||||
|
@ -2387,18 +2349,11 @@ config CHELSIO_T1_1G
|
|||
Enables support for Chelsio's gigabit Ethernet PCI cards. If you
|
||||
are using only 10G cards say 'N' here.
|
||||
|
||||
config CHELSIO_T1_NAPI
|
||||
bool "Use Rx Polling (NAPI)"
|
||||
depends on CHELSIO_T1
|
||||
default y
|
||||
help
|
||||
NAPI is a driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card.
|
||||
|
||||
config CHELSIO_T3
|
||||
tristate "Chelsio Communications T3 10Gb Ethernet support"
|
||||
depends on PCI
|
||||
depends on PCI && INET
|
||||
select FW_LOADER
|
||||
select INET_LRO
|
||||
help
|
||||
This driver supports Chelsio T3-based gigabit and 10Gb Ethernet
|
||||
adapters.
|
||||
|
@ -2426,7 +2381,8 @@ config EHEA
|
|||
|
||||
config IXGBE
|
||||
tristate "Intel(R) 10GbE PCI Express adapters support"
|
||||
depends on PCI
|
||||
depends on PCI && INET
|
||||
select INET_LRO
|
||||
---help---
|
||||
This driver supports Intel(R) 10GbE PCI Express family of
|
||||
adapters. For more information on how to identify your adapter, go
|
||||
|
@ -2464,20 +2420,6 @@ config IXGB
|
|||
To compile this driver as a module, choose M here. The module
|
||||
will be called ixgb.
|
||||
|
||||
config IXGB_NAPI
|
||||
bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
|
||||
depends on IXGB && EXPERIMENTAL
|
||||
help
|
||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card. It is
|
||||
still somewhat experimental and thus not yet enabled by default.
|
||||
|
||||
If your estimated Rx load is 10kpps or more, or if the card will be
|
||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||
then say Y here.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config S2IO
|
||||
tristate "S2IO 10Gbe XFrame NIC"
|
||||
depends on PCI
|
||||
|
@ -2486,20 +2428,6 @@ config S2IO
|
|||
More specific information on configuring the driver is in
|
||||
<file:Documentation/networking/s2io.txt>.
|
||||
|
||||
config S2IO_NAPI
|
||||
bool "Use Rx Polling (NAPI) (EXPERIMENTAL)"
|
||||
depends on S2IO && EXPERIMENTAL
|
||||
help
|
||||
NAPI is a new driver API designed to reduce CPU and interrupt load
|
||||
when the driver is receiving lots of packets from the card. It is
|
||||
still somewhat experimental and thus not yet enabled by default.
|
||||
|
||||
If your estimated Rx load is 10kpps or more, or if the card will be
|
||||
deployed on potentially unfriendly networks (e.g. in a firewall),
|
||||
then say Y here.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config MYRI10GE
|
||||
tristate "Myricom Myri-10G Ethernet support"
|
||||
depends on PCI && INET
|
||||
|
@ -2564,6 +2492,7 @@ config BNX2X
|
|||
tristate "Broadcom NetXtremeII 10Gb support"
|
||||
depends on PCI
|
||||
select ZLIB_INFLATE
|
||||
select LIBCRC32C
|
||||
help
|
||||
This driver supports Broadcom NetXtremeII 10 gigabit Ethernet cards.
|
||||
To compile this driver as a module, choose M here: the module
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
obj-$(CONFIG_E1000) += e1000/
|
||||
obj-$(CONFIG_E1000E) += e1000e/
|
||||
obj-$(CONFIG_IBM_EMAC) += ibm_emac/
|
||||
obj-$(CONFIG_IBM_NEW_EMAC) += ibm_newemac/
|
||||
obj-$(CONFIG_IGB) += igb/
|
||||
obj-$(CONFIG_IXGBE) += ixgbe/
|
||||
|
@ -67,6 +66,7 @@ obj-$(CONFIG_FEALNX) += fealnx.o
|
|||
obj-$(CONFIG_TIGON3) += tg3.o
|
||||
obj-$(CONFIG_BNX2) += bnx2.o
|
||||
obj-$(CONFIG_BNX2X) += bnx2x.o
|
||||
bnx2x-objs := bnx2x_main.o bnx2x_link.o
|
||||
spidernet-y += spider_net.o spider_net_ethtool.o
|
||||
obj-$(CONFIG_SPIDER_NET) += spidernet.o sungem_phy.o
|
||||
obj-$(CONFIG_GELIC_NET) += ps3_gelic.o
|
||||
|
@ -80,6 +80,7 @@ obj-$(CONFIG_VIA_RHINE) += via-rhine.o
|
|||
obj-$(CONFIG_VIA_VELOCITY) += via-velocity.o
|
||||
obj-$(CONFIG_ADAPTEC_STARFIRE) += starfire.o
|
||||
obj-$(CONFIG_RIONET) += rionet.o
|
||||
obj-$(CONFIG_SH_ETH) += sh_eth.o
|
||||
|
||||
#
|
||||
# end link order section
|
||||
|
@ -105,11 +106,11 @@ ifeq ($(CONFIG_FEC_MPC52xx_MDIO),y)
|
|||
endif
|
||||
obj-$(CONFIG_68360_ENET) += 68360enet.o
|
||||
obj-$(CONFIG_WD80x3) += wd.o 8390.o
|
||||
obj-$(CONFIG_EL2) += 3c503.o 8390.o
|
||||
obj-$(CONFIG_NE2000) += ne.o 8390.o
|
||||
obj-$(CONFIG_NE2_MCA) += ne2.o 8390.o
|
||||
obj-$(CONFIG_HPLAN) += hp.o 8390.o
|
||||
obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390.o
|
||||
obj-$(CONFIG_EL2) += 3c503.o 8390p.o
|
||||
obj-$(CONFIG_NE2000) += ne.o 8390p.o
|
||||
obj-$(CONFIG_NE2_MCA) += ne2.o 8390p.o
|
||||
obj-$(CONFIG_HPLAN) += hp.o 8390p.o
|
||||
obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390p.o
|
||||
obj-$(CONFIG_ULTRA) += smc-ultra.o 8390.o
|
||||
obj-$(CONFIG_ULTRAMCA) += smc-mca.o 8390.o
|
||||
obj-$(CONFIG_ULTRA32) += smc-ultra32.o 8390.o
|
||||
|
@ -165,7 +166,6 @@ obj-$(CONFIG_EEXPRESS_PRO) += eepro.o
|
|||
obj-$(CONFIG_8139CP) += 8139cp.o
|
||||
obj-$(CONFIG_8139TOO) += 8139too.o
|
||||
obj-$(CONFIG_ZNET) += znet.o
|
||||
obj-$(CONFIG_LAN_SAA9730) += saa9730.o
|
||||
obj-$(CONFIG_CPMAC) += cpmac.o
|
||||
obj-$(CONFIG_DEPCA) += depca.o
|
||||
obj-$(CONFIG_EWRK3) += ewrk3.o
|
||||
|
@ -235,6 +235,7 @@ obj-$(CONFIG_USB_CATC) += usb/
|
|||
obj-$(CONFIG_USB_KAWETH) += usb/
|
||||
obj-$(CONFIG_USB_PEGASUS) += usb/
|
||||
obj-$(CONFIG_USB_RTL8150) += usb/
|
||||
obj-$(CONFIG_USB_HSO) += usb/
|
||||
obj-$(CONFIG_USB_USBNET) += usb/
|
||||
obj-$(CONFIG_USB_ZD1201) += usb/
|
||||
|
||||
|
|
|
@ -475,16 +475,12 @@ static irqreturn_t lance_interrupt (int irq, void *dev_id)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
struct net_device *last_dev;
|
||||
|
||||
static int lance_open (struct net_device *dev)
|
||||
{
|
||||
struct lance_private *lp = netdev_priv(dev);
|
||||
volatile struct lance_regs *ll = lp->ll;
|
||||
int ret;
|
||||
|
||||
last_dev = dev;
|
||||
|
||||
/* Stop the Lance */
|
||||
ll->rap = LE_CSR0;
|
||||
ll->rdp = LE_C0_STOP;
|
||||
|
|
|
@ -1457,11 +1457,6 @@ static int __devinit ace_init(struct net_device *dev)
|
|||
ace_set_txprd(regs, ap, 0);
|
||||
writel(0, ®s->RxRetCsm);
|
||||
|
||||
/*
|
||||
* Zero the stats before starting the interface
|
||||
*/
|
||||
memset(&ap->stats, 0, sizeof(ap->stats));
|
||||
|
||||
/*
|
||||
* Enable DMA engine now.
|
||||
* If we do this sooner, Mckinley box pukes.
|
||||
|
@ -2041,8 +2036,8 @@ static void ace_rx_int(struct net_device *dev, u32 rxretprd, u32 rxretcsm)
|
|||
netif_rx(skb);
|
||||
|
||||
dev->last_rx = jiffies;
|
||||
ap->stats.rx_packets++;
|
||||
ap->stats.rx_bytes += retdesc->size;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += retdesc->size;
|
||||
|
||||
idx = (idx + 1) % RX_RETURN_RING_ENTRIES;
|
||||
}
|
||||
|
@ -2090,8 +2085,8 @@ static inline void ace_tx_int(struct net_device *dev,
|
|||
}
|
||||
|
||||
if (skb) {
|
||||
ap->stats.tx_packets++;
|
||||
ap->stats.tx_bytes += skb->len;
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
dev_kfree_skb_irq(skb);
|
||||
info->skb = NULL;
|
||||
}
|
||||
|
@ -2863,11 +2858,11 @@ static struct net_device_stats *ace_get_stats(struct net_device *dev)
|
|||
struct ace_mac_stats __iomem *mac_stats =
|
||||
(struct ace_mac_stats __iomem *)ap->regs->Stats;
|
||||
|
||||
ap->stats.rx_missed_errors = readl(&mac_stats->drop_space);
|
||||
ap->stats.multicast = readl(&mac_stats->kept_mc);
|
||||
ap->stats.collisions = readl(&mac_stats->coll);
|
||||
dev->stats.rx_missed_errors = readl(&mac_stats->drop_space);
|
||||
dev->stats.multicast = readl(&mac_stats->kept_mc);
|
||||
dev->stats.collisions = readl(&mac_stats->coll);
|
||||
|
||||
return &ap->stats;
|
||||
return &dev->stats;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -693,7 +693,6 @@ struct ace_private
|
|||
__attribute__ ((aligned (SMP_CACHE_BYTES)));
|
||||
u32 last_tx, last_std_rx, last_mini_rx;
|
||||
#endif
|
||||
struct net_device_stats stats;
|
||||
int pci_using_dac;
|
||||
};
|
||||
|
||||
|
|
|
@ -101,9 +101,9 @@ Revision History:
|
|||
|
||||
#include "amd8111e.h"
|
||||
#define MODULE_NAME "amd8111e"
|
||||
#define MODULE_VERS "3.0.6"
|
||||
#define MODULE_VERS "3.0.7"
|
||||
MODULE_AUTHOR("Advanced Micro Devices, Inc.");
|
||||
MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version 3.0.6");
|
||||
MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version "MODULE_VERS);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, amd8111e_pci_tbl);
|
||||
module_param_array(speed_duplex, int, NULL, 0);
|
||||
|
@ -671,11 +671,7 @@ This is the receive indication function for packets with vlan tag.
|
|||
*/
|
||||
static int amd8111e_vlan_rx(struct amd8111e_priv *lp, struct sk_buff *skb, u16 vlan_tag)
|
||||
{
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
return vlan_hwaccel_receive_skb(skb, lp->vlgrp,vlan_tag);
|
||||
#else
|
||||
return vlan_hwaccel_rx(skb, lp->vlgrp, vlan_tag);
|
||||
#endif /* CONFIG_AMD8111E_NAPI */
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -722,7 +718,6 @@ static int amd8111e_tx(struct net_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
/* This function handles the driver receive operation in polling mode */
|
||||
static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
|
||||
{
|
||||
|
@ -734,7 +729,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
|
|||
int min_pkt_len, status;
|
||||
unsigned int intr0;
|
||||
int num_rx_pkt = 0;
|
||||
/*int max_rx_pkt = NUM_RX_BUFFERS;*/
|
||||
short pkt_len;
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
short vtag;
|
||||
|
@ -850,108 +844,6 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
|
|||
return num_rx_pkt;
|
||||
}
|
||||
|
||||
#else
|
||||
/*
|
||||
This function will check the ownership of receive buffers and descriptors. It will indicate to kernel up to half the number of maximum receive buffers in the descriptor ring, in a single receive interrupt. It will also replenish the descriptors with new skbs.
|
||||
*/
|
||||
static int amd8111e_rx(struct net_device *dev)
|
||||
{
|
||||
struct amd8111e_priv *lp = netdev_priv(dev);
|
||||
struct sk_buff *skb,*new_skb;
|
||||
int rx_index = lp->rx_idx & RX_RING_DR_MOD_MASK;
|
||||
int min_pkt_len, status;
|
||||
int num_rx_pkt = 0;
|
||||
int max_rx_pkt = NUM_RX_BUFFERS;
|
||||
short pkt_len;
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
short vtag;
|
||||
#endif
|
||||
|
||||
/* If we own the next entry, it's a new packet. Send it up. */
|
||||
while(++num_rx_pkt <= max_rx_pkt){
|
||||
status = le16_to_cpu(lp->rx_ring[rx_index].rx_flags);
|
||||
if(status & OWN_BIT)
|
||||
return 0;
|
||||
|
||||
/* check if err summary bit is set */
|
||||
if(status & ERR_BIT){
|
||||
/*
|
||||
* There is a tricky error noted by John Murphy,
|
||||
* <murf@perftech.com> to Russ Nelson: Even with full-sized
|
||||
* buffers it's possible for a jabber packet to use two
|
||||
* buffers, with only the last correctly noting the error. */
|
||||
/* reseting flags */
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
/* check for STP and ENP */
|
||||
if(!((status & STP_BIT) && (status & ENP_BIT))){
|
||||
/* reseting flags */
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
pkt_len = le16_to_cpu(lp->rx_ring[rx_index].msg_count) - 4;
|
||||
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
vtag = status & TT_MASK;
|
||||
/*MAC will strip vlan tag*/
|
||||
if(lp->vlgrp != NULL && vtag !=0)
|
||||
min_pkt_len =MIN_PKT_LEN - 4;
|
||||
else
|
||||
#endif
|
||||
min_pkt_len =MIN_PKT_LEN;
|
||||
|
||||
if (pkt_len < min_pkt_len) {
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
lp->drv_rx_errors++;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
if(!(new_skb = dev_alloc_skb(lp->rx_buff_len))){
|
||||
/* if allocation fail,
|
||||
ignore that pkt and go to next one */
|
||||
lp->rx_ring[rx_index].rx_flags &= RESET_RX_FLAGS;
|
||||
lp->drv_rx_errors++;
|
||||
goto err_next_pkt;
|
||||
}
|
||||
|
||||
skb_reserve(new_skb, 2);
|
||||
skb = lp->rx_skbuff[rx_index];
|
||||
pci_unmap_single(lp->pci_dev,lp->rx_dma_addr[rx_index],
|
||||
lp->rx_buff_len-2, PCI_DMA_FROMDEVICE);
|
||||
skb_put(skb, pkt_len);
|
||||
lp->rx_skbuff[rx_index] = new_skb;
|
||||
lp->rx_dma_addr[rx_index] = pci_map_single(lp->pci_dev,
|
||||
new_skb->data, lp->rx_buff_len-2,PCI_DMA_FROMDEVICE);
|
||||
|
||||
skb->protocol = eth_type_trans(skb, dev);
|
||||
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
if(lp->vlgrp != NULL && (vtag == TT_VLAN_TAGGED)){
|
||||
amd8111e_vlan_rx(lp, skb,
|
||||
le16_to_cpu(lp->rx_ring[rx_index].tag_ctrl_info));
|
||||
} else
|
||||
#endif
|
||||
|
||||
netif_rx (skb);
|
||||
/*COAL update rx coalescing parameters*/
|
||||
lp->coal_conf.rx_packets++;
|
||||
lp->coal_conf.rx_bytes += pkt_len;
|
||||
|
||||
dev->last_rx = jiffies;
|
||||
|
||||
err_next_pkt:
|
||||
lp->rx_ring[rx_index].buff_phy_addr
|
||||
= cpu_to_le32(lp->rx_dma_addr[rx_index]);
|
||||
lp->rx_ring[rx_index].buff_count =
|
||||
cpu_to_le16(lp->rx_buff_len-2);
|
||||
wmb();
|
||||
lp->rx_ring[rx_index].rx_flags |= cpu_to_le16(OWN_BIT);
|
||||
rx_index = (++lp->rx_idx) & RX_RING_DR_MOD_MASK;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_AMD8111E_NAPI */
|
||||
/*
|
||||
This function will indicate the link status to the kernel.
|
||||
*/
|
||||
|
@ -1280,29 +1172,22 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id)
|
|||
writel(intr0, mmio + INT0);
|
||||
|
||||
/* Check if Receive Interrupt has occurred. */
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
if(intr0 & RINT0){
|
||||
if(netif_rx_schedule_prep(dev, &lp->napi)){
|
||||
if (intr0 & RINT0) {
|
||||
if (netif_rx_schedule_prep(dev, &lp->napi)) {
|
||||
/* Disable receive interupts */
|
||||
writel(RINTEN0, mmio + INTEN0);
|
||||
/* Schedule a polling routine */
|
||||
__netif_rx_schedule(dev, &lp->napi);
|
||||
}
|
||||
else if (intren0 & RINTEN0) {
|
||||
} else if (intren0 & RINTEN0) {
|
||||
printk("************Driver bug! \
|
||||
interrupt while in poll\n");
|
||||
/* Fix by disable receive interrupts */
|
||||
writel(RINTEN0, mmio + INTEN0);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if(intr0 & RINT0){
|
||||
amd8111e_rx(dev);
|
||||
writel(VAL2 | RDMD0, mmio + CMD0);
|
||||
}
|
||||
#endif /* CONFIG_AMD8111E_NAPI */
|
||||
|
||||
/* Check if Transmit Interrupt has occurred. */
|
||||
if(intr0 & TINT0)
|
||||
if (intr0 & TINT0)
|
||||
amd8111e_tx(dev);
|
||||
|
||||
/* Check if Link Change Interrupt has occurred. */
|
||||
|
@ -1340,9 +1225,7 @@ static int amd8111e_close(struct net_device * dev)
|
|||
struct amd8111e_priv *lp = netdev_priv(dev);
|
||||
netif_stop_queue(dev);
|
||||
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
napi_disable(&lp->napi);
|
||||
#endif
|
||||
|
||||
spin_lock_irq(&lp->lock);
|
||||
|
||||
|
@ -1374,9 +1257,7 @@ static int amd8111e_open(struct net_device * dev )
|
|||
dev->name, dev))
|
||||
return -EAGAIN;
|
||||
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
napi_enable(&lp->napi);
|
||||
#endif
|
||||
|
||||
spin_lock_irq(&lp->lock);
|
||||
|
||||
|
@ -1384,9 +1265,7 @@ static int amd8111e_open(struct net_device * dev )
|
|||
|
||||
if(amd8111e_restart(dev)){
|
||||
spin_unlock_irq(&lp->lock);
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
napi_disable(&lp->napi);
|
||||
#endif
|
||||
if (dev->irq)
|
||||
free_irq(dev->irq, dev);
|
||||
return -ENOMEM;
|
||||
|
@ -2036,9 +1915,7 @@ static int __devinit amd8111e_probe_one(struct pci_dev *pdev,
|
|||
dev->irq =pdev->irq;
|
||||
dev->tx_timeout = amd8111e_tx_timeout;
|
||||
dev->watchdog_timeo = AMD8111E_TX_TIMEOUT;
|
||||
#ifdef CONFIG_AMD8111E_NAPI
|
||||
netif_napi_add(dev, &lp->napi, amd8111e_rx_poll, 32);
|
||||
#endif
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
dev->poll_controller = amd8111e_poll;
|
||||
#endif
|
||||
|
|
|
@ -522,7 +522,6 @@ static int eth_poll(struct napi_struct *napi, int budget)
|
|||
#endif
|
||||
|
||||
if ((n = queue_get_desc(rxq, port, 0)) < 0) {
|
||||
received = 0; /* No packet received */
|
||||
#if DEBUG_RX
|
||||
printk(KERN_DEBUG "%s: eth_poll netif_rx_complete\n",
|
||||
dev->name);
|
||||
|
@ -543,7 +542,7 @@ static int eth_poll(struct napi_struct *napi, int budget)
|
|||
printk(KERN_DEBUG "%s: eth_poll all done\n",
|
||||
dev->name);
|
||||
#endif
|
||||
return 0; /* all work done */
|
||||
return received; /* all work done */
|
||||
}
|
||||
|
||||
desc = rx_desc_ptr(port, n);
|
||||
|
|
|
@ -243,7 +243,7 @@ struct lance_private {
|
|||
|
||||
/* Possible memory/IO addresses for probing */
|
||||
|
||||
struct lance_addr {
|
||||
static struct lance_addr {
|
||||
unsigned long memaddr;
|
||||
unsigned long ioaddr;
|
||||
int slow_flag;
|
||||
|
|
|
@ -1859,7 +1859,8 @@ static u16 atl1_alloc_rx_buffers(struct atl1_adapter *adapter)
|
|||
|
||||
rfd_desc = ATL1_RFD_DESC(rfd_ring, rfd_next_to_use);
|
||||
|
||||
skb = dev_alloc_skb(adapter->rx_buffer_len + NET_IP_ALIGN);
|
||||
skb = netdev_alloc_skb(adapter->netdev,
|
||||
adapter->rx_buffer_len + NET_IP_ALIGN);
|
||||
if (unlikely(!skb)) {
|
||||
/* Better luck next round */
|
||||
adapter->net_stats.rx_dropped++;
|
||||
|
|
|
@ -912,7 +912,7 @@ au1000_adjust_link(struct net_device *dev)
|
|||
// link state changed
|
||||
|
||||
if (phydev->link) // link went up
|
||||
netif_schedule(dev);
|
||||
netif_tx_schedule_all(dev);
|
||||
else { // link went down
|
||||
aup->old_speed = 0;
|
||||
aup->old_duplex = -1;
|
||||
|
|
|
@ -148,9 +148,9 @@ static inline void b44_sync_dma_desc_for_device(struct ssb_device *sdev,
|
|||
unsigned long offset,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
dma_sync_single_range_for_device(sdev->dma_dev, dma_base,
|
||||
offset & dma_desc_align_mask,
|
||||
dma_desc_sync_size, dir);
|
||||
ssb_dma_sync_single_range_for_device(sdev, dma_base,
|
||||
offset & dma_desc_align_mask,
|
||||
dma_desc_sync_size, dir);
|
||||
}
|
||||
|
||||
static inline void b44_sync_dma_desc_for_cpu(struct ssb_device *sdev,
|
||||
|
@ -158,9 +158,9 @@ static inline void b44_sync_dma_desc_for_cpu(struct ssb_device *sdev,
|
|||
unsigned long offset,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
dma_sync_single_range_for_cpu(sdev->dma_dev, dma_base,
|
||||
offset & dma_desc_align_mask,
|
||||
dma_desc_sync_size, dir);
|
||||
ssb_dma_sync_single_range_for_cpu(sdev, dma_base,
|
||||
offset & dma_desc_align_mask,
|
||||
dma_desc_sync_size, dir);
|
||||
}
|
||||
|
||||
static inline unsigned long br32(const struct b44 *bp, unsigned long reg)
|
||||
|
@ -613,10 +613,10 @@ static void b44_tx(struct b44 *bp)
|
|||
|
||||
BUG_ON(skb == NULL);
|
||||
|
||||
dma_unmap_single(bp->sdev->dma_dev,
|
||||
rp->mapping,
|
||||
skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
ssb_dma_unmap_single(bp->sdev,
|
||||
rp->mapping,
|
||||
skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
rp->skb = NULL;
|
||||
dev_kfree_skb_irq(skb);
|
||||
}
|
||||
|
@ -653,29 +653,29 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
|
|||
if (skb == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
mapping = ssb_dma_map_single(bp->sdev, skb->data,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
|
||||
/* Hardware bug work-around, the chip is unable to do PCI DMA
|
||||
to/from anything above 1GB :-( */
|
||||
if (dma_mapping_error(mapping) ||
|
||||
if (ssb_dma_mapping_error(bp->sdev, mapping) ||
|
||||
mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
|
||||
/* Sigh... */
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping,
|
||||
RX_PKT_BUF_SZ, DMA_FROM_DEVICE);
|
||||
if (!ssb_dma_mapping_error(bp->sdev, mapping))
|
||||
ssb_dma_unmap_single(bp->sdev, mapping,
|
||||
RX_PKT_BUF_SZ, DMA_FROM_DEVICE);
|
||||
dev_kfree_skb_any(skb);
|
||||
skb = __netdev_alloc_skb(bp->dev, RX_PKT_BUF_SZ, GFP_ATOMIC|GFP_DMA);
|
||||
if (skb == NULL)
|
||||
return -ENOMEM;
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(mapping) ||
|
||||
mapping = ssb_dma_map_single(bp->sdev, skb->data,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
if (ssb_dma_mapping_error(bp->sdev, mapping) ||
|
||||
mapping + RX_PKT_BUF_SZ > DMA_30BIT_MASK) {
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
|
||||
if (!ssb_dma_mapping_error(bp->sdev, mapping))
|
||||
ssb_dma_unmap_single(bp->sdev, mapping, RX_PKT_BUF_SZ,DMA_FROM_DEVICE);
|
||||
dev_kfree_skb_any(skb);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -750,9 +750,9 @@ static void b44_recycle_rx(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
|
|||
dest_idx * sizeof(dest_desc),
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
dma_sync_single_for_device(bp->sdev->dma_dev, le32_to_cpu(src_desc->addr),
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
ssb_dma_sync_single_for_device(bp->sdev, le32_to_cpu(src_desc->addr),
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
}
|
||||
|
||||
static int b44_rx(struct b44 *bp, int budget)
|
||||
|
@ -772,7 +772,7 @@ static int b44_rx(struct b44 *bp, int budget)
|
|||
struct rx_header *rh;
|
||||
u16 len;
|
||||
|
||||
dma_sync_single_for_cpu(bp->sdev->dma_dev, map,
|
||||
ssb_dma_sync_single_for_cpu(bp->sdev, map,
|
||||
RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
rh = (struct rx_header *) skb->data;
|
||||
|
@ -806,8 +806,8 @@ static int b44_rx(struct b44 *bp, int budget)
|
|||
skb_size = b44_alloc_rx_skb(bp, cons, bp->rx_prod);
|
||||
if (skb_size < 0)
|
||||
goto drop_it;
|
||||
dma_unmap_single(bp->sdev->dma_dev, map,
|
||||
skb_size, DMA_FROM_DEVICE);
|
||||
ssb_dma_unmap_single(bp->sdev, map,
|
||||
skb_size, DMA_FROM_DEVICE);
|
||||
/* Leave out rx_header */
|
||||
skb_put(skb, len + RX_PKT_OFFSET);
|
||||
skb_pull(skb, RX_PKT_OFFSET);
|
||||
|
@ -966,25 +966,25 @@ static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
goto err_out;
|
||||
}
|
||||
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, skb->data, len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
|
||||
mapping = ssb_dma_map_single(bp->sdev, skb->data, len, DMA_TO_DEVICE);
|
||||
if (ssb_dma_mapping_error(bp->sdev, mapping) || mapping + len > DMA_30BIT_MASK) {
|
||||
struct sk_buff *bounce_skb;
|
||||
|
||||
/* Chip can't handle DMA to/from >1GB, use bounce buffer */
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping, len,
|
||||
DMA_TO_DEVICE);
|
||||
if (!ssb_dma_mapping_error(bp->sdev, mapping))
|
||||
ssb_dma_unmap_single(bp->sdev, mapping, len,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
bounce_skb = __dev_alloc_skb(len, GFP_ATOMIC | GFP_DMA);
|
||||
if (!bounce_skb)
|
||||
goto err_out;
|
||||
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, bounce_skb->data,
|
||||
len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(mapping) || mapping + len > DMA_30BIT_MASK) {
|
||||
if (!dma_mapping_error(mapping))
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping,
|
||||
len, DMA_TO_DEVICE);
|
||||
mapping = ssb_dma_map_single(bp->sdev, bounce_skb->data,
|
||||
len, DMA_TO_DEVICE);
|
||||
if (ssb_dma_mapping_error(bp->sdev, mapping) || mapping + len > DMA_30BIT_MASK) {
|
||||
if (!ssb_dma_mapping_error(bp->sdev, mapping))
|
||||
ssb_dma_unmap_single(bp->sdev, mapping,
|
||||
len, DMA_TO_DEVICE);
|
||||
dev_kfree_skb_any(bounce_skb);
|
||||
goto err_out;
|
||||
}
|
||||
|
@ -1082,8 +1082,8 @@ static void b44_free_rings(struct b44 *bp)
|
|||
|
||||
if (rp->skb == NULL)
|
||||
continue;
|
||||
dma_unmap_single(bp->sdev->dma_dev, rp->mapping, RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
ssb_dma_unmap_single(bp->sdev, rp->mapping, RX_PKT_BUF_SZ,
|
||||
DMA_FROM_DEVICE);
|
||||
dev_kfree_skb_any(rp->skb);
|
||||
rp->skb = NULL;
|
||||
}
|
||||
|
@ -1094,8 +1094,8 @@ static void b44_free_rings(struct b44 *bp)
|
|||
|
||||
if (rp->skb == NULL)
|
||||
continue;
|
||||
dma_unmap_single(bp->sdev->dma_dev, rp->mapping, rp->skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
ssb_dma_unmap_single(bp->sdev, rp->mapping, rp->skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
dev_kfree_skb_any(rp->skb);
|
||||
rp->skb = NULL;
|
||||
}
|
||||
|
@ -1117,14 +1117,14 @@ static void b44_init_rings(struct b44 *bp)
|
|||
memset(bp->tx_ring, 0, B44_TX_RING_BYTES);
|
||||
|
||||
if (bp->flags & B44_FLAG_RX_RING_HACK)
|
||||
dma_sync_single_for_device(bp->sdev->dma_dev, bp->rx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
ssb_dma_sync_single_for_device(bp->sdev, bp->rx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
if (bp->flags & B44_FLAG_TX_RING_HACK)
|
||||
dma_sync_single_for_device(bp->sdev->dma_dev, bp->tx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
ssb_dma_sync_single_for_device(bp->sdev, bp->tx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
for (i = 0; i < bp->rx_pending; i++) {
|
||||
if (b44_alloc_rx_skb(bp, -1, i) < 0)
|
||||
|
@ -1144,25 +1144,27 @@ static void b44_free_consistent(struct b44 *bp)
|
|||
bp->tx_buffers = NULL;
|
||||
if (bp->rx_ring) {
|
||||
if (bp->flags & B44_FLAG_RX_RING_HACK) {
|
||||
dma_unmap_single(bp->sdev->dma_dev, bp->rx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
ssb_dma_unmap_single(bp->sdev, bp->rx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
kfree(bp->rx_ring);
|
||||
} else
|
||||
dma_free_coherent(bp->sdev->dma_dev, DMA_TABLE_BYTES,
|
||||
bp->rx_ring, bp->rx_ring_dma);
|
||||
ssb_dma_free_consistent(bp->sdev, DMA_TABLE_BYTES,
|
||||
bp->rx_ring, bp->rx_ring_dma,
|
||||
GFP_KERNEL);
|
||||
bp->rx_ring = NULL;
|
||||
bp->flags &= ~B44_FLAG_RX_RING_HACK;
|
||||
}
|
||||
if (bp->tx_ring) {
|
||||
if (bp->flags & B44_FLAG_TX_RING_HACK) {
|
||||
dma_unmap_single(bp->sdev->dma_dev, bp->tx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
ssb_dma_unmap_single(bp->sdev, bp->tx_ring_dma,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
kfree(bp->tx_ring);
|
||||
} else
|
||||
dma_free_coherent(bp->sdev->dma_dev, DMA_TABLE_BYTES,
|
||||
bp->tx_ring, bp->tx_ring_dma);
|
||||
ssb_dma_free_consistent(bp->sdev, DMA_TABLE_BYTES,
|
||||
bp->tx_ring, bp->tx_ring_dma,
|
||||
GFP_KERNEL);
|
||||
bp->tx_ring = NULL;
|
||||
bp->flags &= ~B44_FLAG_TX_RING_HACK;
|
||||
}
|
||||
|
@ -1187,7 +1189,7 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
goto out_err;
|
||||
|
||||
size = DMA_TABLE_BYTES;
|
||||
bp->rx_ring = dma_alloc_coherent(bp->sdev->dma_dev, size, &bp->rx_ring_dma, gfp);
|
||||
bp->rx_ring = ssb_dma_alloc_consistent(bp->sdev, size, &bp->rx_ring_dma, gfp);
|
||||
if (!bp->rx_ring) {
|
||||
/* Allocation may have failed due to pci_alloc_consistent
|
||||
insisting on use of GFP_DMA, which is more restrictive
|
||||
|
@ -1199,11 +1201,11 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
if (!rx_ring)
|
||||
goto out_err;
|
||||
|
||||
rx_ring_dma = dma_map_single(bp->sdev->dma_dev, rx_ring,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
rx_ring_dma = ssb_dma_map_single(bp->sdev, rx_ring,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
if (dma_mapping_error(rx_ring_dma) ||
|
||||
if (ssb_dma_mapping_error(bp->sdev, rx_ring_dma) ||
|
||||
rx_ring_dma + size > DMA_30BIT_MASK) {
|
||||
kfree(rx_ring);
|
||||
goto out_err;
|
||||
|
@ -1214,9 +1216,9 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
bp->flags |= B44_FLAG_RX_RING_HACK;
|
||||
}
|
||||
|
||||
bp->tx_ring = dma_alloc_coherent(bp->sdev->dma_dev, size, &bp->tx_ring_dma, gfp);
|
||||
bp->tx_ring = ssb_dma_alloc_consistent(bp->sdev, size, &bp->tx_ring_dma, gfp);
|
||||
if (!bp->tx_ring) {
|
||||
/* Allocation may have failed due to dma_alloc_coherent
|
||||
/* Allocation may have failed due to ssb_dma_alloc_consistent
|
||||
insisting on use of GFP_DMA, which is more restrictive
|
||||
than necessary... */
|
||||
struct dma_desc *tx_ring;
|
||||
|
@ -1226,11 +1228,11 @@ static int b44_alloc_consistent(struct b44 *bp, gfp_t gfp)
|
|||
if (!tx_ring)
|
||||
goto out_err;
|
||||
|
||||
tx_ring_dma = dma_map_single(bp->sdev->dma_dev, tx_ring,
|
||||
tx_ring_dma = ssb_dma_map_single(bp->sdev, tx_ring,
|
||||
DMA_TABLE_BYTES,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
if (dma_mapping_error(tx_ring_dma) ||
|
||||
if (ssb_dma_mapping_error(bp->sdev, tx_ring_dma) ||
|
||||
tx_ring_dma + size > DMA_30BIT_MASK) {
|
||||
kfree(tx_ring);
|
||||
goto out_err;
|
||||
|
|
|
@ -357,7 +357,7 @@ static void bfin_mac_adjust_link(struct net_device *dev)
|
|||
if (!lp->old_link) {
|
||||
new_state = 1;
|
||||
lp->old_link = 1;
|
||||
netif_schedule(dev);
|
||||
netif_tx_schedule_all(dev);
|
||||
}
|
||||
} else if (lp->old_link) {
|
||||
new_state = 1;
|
||||
|
|
1345
drivers/net/bnx2.c
1345
drivers/net/bnx2.c
File diff suppressed because it is too large
Load Diff
|
@ -309,6 +309,7 @@ struct l2_fhdr {
|
|||
#endif
|
||||
};
|
||||
|
||||
#define BNX2_RX_OFFSET (sizeof(struct l2_fhdr) + 2)
|
||||
|
||||
/*
|
||||
* l2_context definition
|
||||
|
@ -4156,6 +4157,23 @@ struct l2_fhdr {
|
|||
#define BNX2_RPM_ACPI_PATTERN_CRC7_PATTERN_CRC7 (0xffffffffL<<0)
|
||||
|
||||
|
||||
/*
|
||||
* rlup_reg definition
|
||||
* offset: 0x2000
|
||||
*/
|
||||
#define BNX2_RLUP_RSS_CONFIG 0x0000201c
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV4_RSS_TYPE_XI (0x3L<<0)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV4_RSS_TYPE_OFF_XI (0L<<0)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV4_RSS_TYPE_ALL_XI (1L<<0)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV4_RSS_TYPE_IP_ONLY_XI (2L<<0)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV4_RSS_TYPE_RES_XI (3L<<0)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV6_RSS_TYPE_XI (0x3L<<2)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV6_RSS_TYPE_OFF_XI (0L<<2)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV6_RSS_TYPE_ALL_XI (1L<<2)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV6_RSS_TYPE_IP_ONLY_XI (2L<<2)
|
||||
#define BNX2_RLUP_RSS_CONFIG_IPV6_RSS_TYPE_RES_XI (3L<<2)
|
||||
|
||||
|
||||
/*
|
||||
* rbuf_reg definition
|
||||
* offset: 0x200000
|
||||
|
@ -5527,6 +5545,9 @@ struct l2_fhdr {
|
|||
#define BNX2_HC_TX_QUICK_CONS_TRIP_OFF (BNX2_HC_TX_QUICK_CONS_TRIP_1 - \
|
||||
BNX2_HC_SB_CONFIG_1)
|
||||
#define BNX2_HC_TX_TICKS_OFF (BNX2_HC_TX_TICKS_1 - BNX2_HC_SB_CONFIG_1)
|
||||
#define BNX2_HC_RX_QUICK_CONS_TRIP_OFF (BNX2_HC_RX_QUICK_CONS_TRIP_1 - \
|
||||
BNX2_HC_SB_CONFIG_1)
|
||||
#define BNX2_HC_RX_TICKS_OFF (BNX2_HC_RX_TICKS_1 - BNX2_HC_SB_CONFIG_1)
|
||||
|
||||
|
||||
/*
|
||||
|
@ -5855,6 +5876,9 @@ struct l2_fhdr {
|
|||
#define BNX2_RXP_FTQ_CTL_CUR_DEPTH (0x3ffL<<22)
|
||||
|
||||
#define BNX2_RXP_SCRATCH 0x000e0000
|
||||
#define BNX2_RXP_SCRATCH_RSS_TBL_SZ 0x000e0038
|
||||
#define BNX2_RXP_SCRATCH_RSS_TBL 0x000e003c
|
||||
#define BNX2_RXP_SCRATCH_RSS_TBL_MAX_ENTRIES 128
|
||||
|
||||
|
||||
/*
|
||||
|
@ -6412,10 +6436,15 @@ struct l2_fhdr {
|
|||
#define MAX_ETHERNET_PACKET_SIZE 1514
|
||||
#define MAX_ETHERNET_JUMBO_PACKET_SIZE 9014
|
||||
|
||||
#define RX_COPY_THRESH 128
|
||||
#define BNX2_RX_COPY_THRESH 128
|
||||
|
||||
#define BNX2_MISC_ENABLE_DEFAULT 0x17ffffff
|
||||
|
||||
#define BNX2_START_UNICAST_ADDRESS_INDEX 4
|
||||
#define BNX2_END_UNICAST_ADDRESS_INDEX 7
|
||||
#define BNX2_MAX_UNICAST_ADDRESSES (BNX2_END_UNICAST_ADDRESS_INDEX - \
|
||||
BNX2_START_UNICAST_ADDRESS_INDEX + 1)
|
||||
|
||||
#define DMA_READ_CHANS 5
|
||||
#define DMA_WRITE_CHANS 3
|
||||
|
||||
|
@ -6478,6 +6507,11 @@ struct l2_fhdr {
|
|||
#define TX_CID 16
|
||||
#define TX_TSS_CID 32
|
||||
#define RX_CID 0
|
||||
#define RX_RSS_CID 4
|
||||
#define RX_MAX_RSS_RINGS 7
|
||||
#define RX_MAX_RINGS (RX_MAX_RSS_RINGS + 1)
|
||||
#define TX_MAX_TSS_RINGS 7
|
||||
#define TX_MAX_RINGS (TX_MAX_TSS_RINGS + 1)
|
||||
|
||||
#define MB_TX_CID_ADDR MB_GET_CID_ADDR(TX_CID)
|
||||
#define MB_RX_CID_ADDR MB_GET_CID_ADDR(RX_CID)
|
||||
|
@ -6556,7 +6590,7 @@ struct flash_spec {
|
|||
};
|
||||
|
||||
#define BNX2_MAX_MSIX_HW_VEC 9
|
||||
#define BNX2_MAX_MSIX_VEC 2
|
||||
#define BNX2_MAX_MSIX_VEC 9
|
||||
#define BNX2_BASE_VEC 0
|
||||
#define BNX2_TX_VEC 1
|
||||
#define BNX2_TX_INT_NUM (BNX2_TX_VEC << BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT)
|
||||
|
@ -6568,24 +6602,56 @@ struct bnx2_irq {
|
|||
char name[16];
|
||||
};
|
||||
|
||||
struct bnx2_napi {
|
||||
struct napi_struct napi ____cacheline_aligned;
|
||||
struct bnx2 *bp;
|
||||
struct status_block *status_blk;
|
||||
struct status_block_msix *status_blk_msix;
|
||||
u32 last_status_idx;
|
||||
u32 int_num;
|
||||
struct bnx2_tx_ring_info {
|
||||
u32 tx_prod_bseq;
|
||||
u16 tx_prod;
|
||||
u32 tx_bidx_addr;
|
||||
u32 tx_bseq_addr;
|
||||
|
||||
struct tx_bd *tx_desc_ring;
|
||||
struct sw_bd *tx_buf_ring;
|
||||
|
||||
u16 tx_cons;
|
||||
u16 hw_tx_cons;
|
||||
|
||||
dma_addr_t tx_desc_mapping;
|
||||
};
|
||||
|
||||
struct bnx2_rx_ring_info {
|
||||
u32 rx_prod_bseq;
|
||||
u16 rx_prod;
|
||||
u16 rx_cons;
|
||||
|
||||
u32 rx_bidx_addr;
|
||||
u32 rx_bseq_addr;
|
||||
u32 rx_pg_bidx_addr;
|
||||
|
||||
u16 rx_pg_prod;
|
||||
u16 rx_pg_cons;
|
||||
|
||||
struct sw_bd *rx_buf_ring;
|
||||
struct rx_bd *rx_desc_ring[MAX_RX_RINGS];
|
||||
struct sw_pg *rx_pg_ring;
|
||||
struct rx_bd *rx_pg_desc_ring[MAX_RX_PG_RINGS];
|
||||
|
||||
dma_addr_t rx_desc_mapping[MAX_RX_RINGS];
|
||||
dma_addr_t rx_pg_desc_mapping[MAX_RX_PG_RINGS];
|
||||
};
|
||||
|
||||
struct bnx2_napi {
|
||||
struct napi_struct napi ____cacheline_aligned;
|
||||
struct bnx2 *bp;
|
||||
union {
|
||||
struct status_block *msi;
|
||||
struct status_block_msix *msix;
|
||||
} status_blk;
|
||||
u16 *hw_tx_cons_ptr;
|
||||
u16 *hw_rx_cons_ptr;
|
||||
u32 last_status_idx;
|
||||
u32 int_num;
|
||||
|
||||
struct bnx2_rx_ring_info rx_ring;
|
||||
struct bnx2_tx_ring_info tx_ring;
|
||||
};
|
||||
|
||||
struct bnx2 {
|
||||
|
@ -6612,14 +6678,7 @@ struct bnx2 {
|
|||
#define BNX2_FLAG_USING_MSI_OR_MSIX (BNX2_FLAG_USING_MSI | \
|
||||
BNX2_FLAG_USING_MSIX)
|
||||
#define BNX2_FLAG_JUMBO_BROKEN 0x00000800
|
||||
|
||||
/* Put tx producer and consumer fields in separate cache lines. */
|
||||
|
||||
u32 tx_prod_bseq __attribute__((aligned(L1_CACHE_BYTES)));
|
||||
u16 tx_prod;
|
||||
u8 tx_vec;
|
||||
u32 tx_bidx_addr;
|
||||
u32 tx_bseq_addr;
|
||||
#define BNX2_FLAG_CAN_KEEP_VLAN 0x00001000
|
||||
|
||||
struct bnx2_napi bnx2_napi[BNX2_MAX_MSIX_VEC];
|
||||
|
||||
|
@ -6627,7 +6686,6 @@ struct bnx2 {
|
|||
struct vlan_group *vlgrp;
|
||||
#endif
|
||||
|
||||
u32 rx_offset;
|
||||
u32 rx_buf_use_size; /* useable size */
|
||||
u32 rx_buf_size; /* with alignment */
|
||||
u32 rx_copy_thresh;
|
||||
|
@ -6637,14 +6695,7 @@ struct bnx2 {
|
|||
|
||||
u32 rx_csum;
|
||||
|
||||
struct sw_bd *rx_buf_ring;
|
||||
struct rx_bd *rx_desc_ring[MAX_RX_RINGS];
|
||||
struct sw_pg *rx_pg_ring;
|
||||
struct rx_bd *rx_pg_desc_ring[MAX_RX_PG_RINGS];
|
||||
|
||||
/* TX constants */
|
||||
struct tx_bd *tx_desc_ring;
|
||||
struct sw_bd *tx_buf_ring;
|
||||
int tx_ring_size;
|
||||
u32 tx_wake_thresh;
|
||||
|
||||
|
@ -6722,16 +6773,11 @@ struct bnx2 {
|
|||
u16 fw_wr_seq;
|
||||
u16 fw_drv_pulse_wr_seq;
|
||||
|
||||
dma_addr_t tx_desc_mapping;
|
||||
|
||||
|
||||
int rx_max_ring;
|
||||
int rx_ring_size;
|
||||
dma_addr_t rx_desc_mapping[MAX_RX_RINGS];
|
||||
|
||||
int rx_max_pg_ring;
|
||||
int rx_pg_ring_size;
|
||||
dma_addr_t rx_pg_desc_mapping[MAX_RX_PG_RINGS];
|
||||
|
||||
u16 tx_quick_cons_trip;
|
||||
u16 tx_quick_cons_trip_int;
|
||||
|
@ -6750,7 +6796,6 @@ struct bnx2 {
|
|||
|
||||
u32 stats_ticks;
|
||||
|
||||
struct status_block *status_blk;
|
||||
dma_addr_t status_blk_mapping;
|
||||
|
||||
struct statistics_block *stats_blk;
|
||||
|
@ -6812,6 +6857,9 @@ struct bnx2 {
|
|||
|
||||
struct bnx2_irq irq_tbl[BNX2_MAX_MSIX_VEC];
|
||||
int irq_nvecs;
|
||||
|
||||
u8 num_tx_rings;
|
||||
u8 num_rx_rings;
|
||||
};
|
||||
|
||||
#define REG_RD(bp, offset) \
|
||||
|
@ -6912,6 +6960,7 @@ struct fw_info {
|
|||
#define BNX2_DRV_MSG_CODE_DIAG 0x07000000
|
||||
#define BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL 0x09000000
|
||||
#define BNX2_DRV_MSG_CODE_UNLOAD_LNK_DN 0x0b000000
|
||||
#define BNX2_DRV_MSG_CODE_KEEP_VLAN_UPDATE 0x0d000000
|
||||
#define BNX2_DRV_MSG_CODE_CMD_SET_LINK 0x10000000
|
||||
|
||||
#define BNX2_DRV_MSG_DATA 0x00ff0000
|
||||
|
@ -7240,6 +7289,10 @@ struct fw_info {
|
|||
#define BNX2_FW_CAP_SIGNATURE_MASK 0xffff0000
|
||||
#define BNX2_FW_CAP_REMOTE_PHY_CAPABLE 0x00000001
|
||||
#define BNX2_FW_CAP_REMOTE_PHY_PRESENT 0x00000002
|
||||
#define BNX2_FW_CAP_MFW_CAN_KEEP_VLAN 0x00000008
|
||||
#define BNX2_FW_CAP_BC_CAN_KEEP_VLAN 0x00000010
|
||||
#define BNX2_FW_CAP_CAN_KEEP_VLAN (BNX2_FW_CAP_BC_CAN_KEEP_VLAN | \
|
||||
BNX2_FW_CAP_MFW_CAN_KEEP_VLAN)
|
||||
|
||||
#define BNX2_RPHY_SIGNATURE 0x36c
|
||||
#define BNX2_RPHY_LOAD_SIGNATURE 0x5a5a5a5a
|
||||
|
|
|
@ -886,6 +886,23 @@ static struct fw_info bnx2_com_fw_06 = {
|
|||
.rodata = bnx2_COM_b06FwRodata,
|
||||
};
|
||||
|
||||
/* Initialized Values for the Completion Processor. */
|
||||
static const struct cpu_reg cpu_reg_com = {
|
||||
.mode = BNX2_COM_CPU_MODE,
|
||||
.mode_value_halt = BNX2_COM_CPU_MODE_SOFT_HALT,
|
||||
.mode_value_sstep = BNX2_COM_CPU_MODE_STEP_ENA,
|
||||
.state = BNX2_COM_CPU_STATE,
|
||||
.state_value_clear = 0xffffff,
|
||||
.gpr0 = BNX2_COM_CPU_REG_FILE,
|
||||
.evmask = BNX2_COM_CPU_EVENT_MASK,
|
||||
.pc = BNX2_COM_CPU_PROGRAM_COUNTER,
|
||||
.inst = BNX2_COM_CPU_INSTRUCTION,
|
||||
.bp = BNX2_COM_CPU_HW_BREAKPOINT,
|
||||
.spad_base = BNX2_COM_SCRATCH,
|
||||
.mips_view_base = 0x8000000,
|
||||
};
|
||||
|
||||
|
||||
static u8 bnx2_CP_b06FwText[] = {
|
||||
0x9d, 0xbc, 0x0d, 0x78, 0x13, 0xe7, 0x99, 0x2e, 0x7c, 0xcf, 0x48, 0xb2,
|
||||
0x65, 0x5b, 0xb6, 0xc7, 0xb6, 0x0c, 0x22, 0x65, 0x41, 0x83, 0x47, 0x20,
|
||||
|
@ -2167,6 +2184,22 @@ static struct fw_info bnx2_cp_fw_06 = {
|
|||
.rodata = bnx2_CP_b06FwRodata,
|
||||
};
|
||||
|
||||
/* Initialized Values the Command Processor. */
|
||||
static const struct cpu_reg cpu_reg_cp = {
|
||||
.mode = BNX2_CP_CPU_MODE,
|
||||
.mode_value_halt = BNX2_CP_CPU_MODE_SOFT_HALT,
|
||||
.mode_value_sstep = BNX2_CP_CPU_MODE_STEP_ENA,
|
||||
.state = BNX2_CP_CPU_STATE,
|
||||
.state_value_clear = 0xffffff,
|
||||
.gpr0 = BNX2_CP_CPU_REG_FILE,
|
||||
.evmask = BNX2_CP_CPU_EVENT_MASK,
|
||||
.pc = BNX2_CP_CPU_PROGRAM_COUNTER,
|
||||
.inst = BNX2_CP_CPU_INSTRUCTION,
|
||||
.bp = BNX2_CP_CPU_HW_BREAKPOINT,
|
||||
.spad_base = BNX2_CP_SCRATCH,
|
||||
.mips_view_base = 0x8000000,
|
||||
};
|
||||
|
||||
static u8 bnx2_RXP_b06FwText[] = {
|
||||
0xec, 0x5b, 0x5d, 0x70, 0x5c, 0xd7, 0x5d, 0xff, 0xdf, 0xb3, 0x2b, 0x69,
|
||||
0x2d, 0x4b, 0xf2, 0x95, 0xbc, 0x71, 0x56, 0xa9, 0x92, 0xec, 0x5a, 0x57,
|
||||
|
@ -2946,6 +2979,22 @@ static struct fw_info bnx2_rxp_fw_06 = {
|
|||
.rodata = bnx2_RXP_b06FwRodata,
|
||||
};
|
||||
|
||||
/* Initialized Values for the RX Processor. */
|
||||
static const struct cpu_reg cpu_reg_rxp = {
|
||||
.mode = BNX2_RXP_CPU_MODE,
|
||||
.mode_value_halt = BNX2_RXP_CPU_MODE_SOFT_HALT,
|
||||
.mode_value_sstep = BNX2_RXP_CPU_MODE_STEP_ENA,
|
||||
.state = BNX2_RXP_CPU_STATE,
|
||||
.state_value_clear = 0xffffff,
|
||||
.gpr0 = BNX2_RXP_CPU_REG_FILE,
|
||||
.evmask = BNX2_RXP_CPU_EVENT_MASK,
|
||||
.pc = BNX2_RXP_CPU_PROGRAM_COUNTER,
|
||||
.inst = BNX2_RXP_CPU_INSTRUCTION,
|
||||
.bp = BNX2_RXP_CPU_HW_BREAKPOINT,
|
||||
.spad_base = BNX2_RXP_SCRATCH,
|
||||
.mips_view_base = 0x8000000,
|
||||
};
|
||||
|
||||
static u8 bnx2_rv2p_proc1[] = {
|
||||
/* Date: 12/07/2007 15:02 */
|
||||
0xd5, 0x56, 0x41, 0x6b, 0x13, 0x51, 0x10, 0x9e, 0xdd, 0x6c, 0xbb, 0xdb,
|
||||
|
@ -3651,6 +3700,22 @@ static struct fw_info bnx2_tpat_fw_06 = {
|
|||
.rodata = bnx2_TPAT_b06FwRodata,
|
||||
};
|
||||
|
||||
/* Initialized Values for the TX Patch-up Processor. */
|
||||
static const struct cpu_reg cpu_reg_tpat = {
|
||||
.mode = BNX2_TPAT_CPU_MODE,
|
||||
.mode_value_halt = BNX2_TPAT_CPU_MODE_SOFT_HALT,
|
||||
.mode_value_sstep = BNX2_TPAT_CPU_MODE_STEP_ENA,
|
||||
.state = BNX2_TPAT_CPU_STATE,
|
||||
.state_value_clear = 0xffffff,
|
||||
.gpr0 = BNX2_TPAT_CPU_REG_FILE,
|
||||
.evmask = BNX2_TPAT_CPU_EVENT_MASK,
|
||||
.pc = BNX2_TPAT_CPU_PROGRAM_COUNTER,
|
||||
.inst = BNX2_TPAT_CPU_INSTRUCTION,
|
||||
.bp = BNX2_TPAT_CPU_HW_BREAKPOINT,
|
||||
.spad_base = BNX2_TPAT_SCRATCH,
|
||||
.mips_view_base = 0x8000000,
|
||||
};
|
||||
|
||||
static u8 bnx2_TXP_b06FwText[] = {
|
||||
0xad, 0x7b, 0x7f, 0x70, 0x9b, 0x75, 0x7a, 0xe7, 0xe7, 0xd5, 0x0f, 0x5b,
|
||||
0xb2, 0x65, 0x59, 0x0e, 0x4a, 0x90, 0x77, 0xbd, 0x8d, 0x5e, 0xf4, 0xca,
|
||||
|
@ -4531,3 +4596,18 @@ static struct fw_info bnx2_txp_fw_06 = {
|
|||
.rodata = bnx2_TXP_b06FwRodata,
|
||||
};
|
||||
|
||||
/* Initialized Values for the TX Processor. */
|
||||
static const struct cpu_reg cpu_reg_txp = {
|
||||
.mode = BNX2_TXP_CPU_MODE,
|
||||
.mode_value_halt = BNX2_TXP_CPU_MODE_SOFT_HALT,
|
||||
.mode_value_sstep = BNX2_TXP_CPU_MODE_STEP_ENA,
|
||||
.state = BNX2_TXP_CPU_STATE,
|
||||
.state_value_clear = 0xffffff,
|
||||
.gpr0 = BNX2_TXP_CPU_REG_FILE,
|
||||
.evmask = BNX2_TXP_CPU_EVENT_MASK,
|
||||
.pc = BNX2_TXP_CPU_PROGRAM_COUNTER,
|
||||
.inst = BNX2_TXP_CPU_INSTRUCTION,
|
||||
.bp = BNX2_TXP_CPU_HW_BREAKPOINT,
|
||||
.spad_base = BNX2_TXP_SCRATCH,
|
||||
.mips_view_base = 0x8000000,
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load Diff
9988
drivers/net/bnx2x.c
9988
drivers/net/bnx2x.c
File diff suppressed because it is too large
Load Diff
1575
drivers/net/bnx2x.h
1575
drivers/net/bnx2x.h
File diff suppressed because it is too large
Load Diff
|
@ -8,191 +8,390 @@
|
|||
*/
|
||||
|
||||
|
||||
#define CSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\
|
||||
(0x1922 + (port * 0x40) + (index * 0x4))
|
||||
#define CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\
|
||||
(0x1900 + (port * 0x40))
|
||||
#define CSTORM_HC_BTR_OFFSET(port)\
|
||||
(0x1984 + (port * 0xc0))
|
||||
#define CSTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index)\
|
||||
(0x141a + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4))
|
||||
#define CSTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index)\
|
||||
(0x1418 + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4))
|
||||
#define CSTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id)\
|
||||
(0x1400 + (port * 0x280) + (cpu_id * 0x28))
|
||||
#define CSTORM_STATS_FLAGS_OFFSET(port) (0x5108 + (port * 0x8))
|
||||
#define TSTORM_CLIENT_CONFIG_OFFSET(port, client_id)\
|
||||
(0x1510 + (port * 0x240) + (client_id * 0x20))
|
||||
#define TSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\
|
||||
(0x138a + (port * 0x28) + (index * 0x4))
|
||||
#define TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\
|
||||
(0x1370 + (port * 0x28))
|
||||
#define TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port)\
|
||||
(0x4b70 + (port * 0x8))
|
||||
#define TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(function)\
|
||||
(0x1418 + (function * 0x30))
|
||||
#define TSTORM_HC_BTR_OFFSET(port)\
|
||||
(0x13c4 + (port * 0x18))
|
||||
#define TSTORM_INDIRECTION_TABLE_OFFSET(port)\
|
||||
(0x22c8 + (port * 0x80))
|
||||
#define TSTORM_INDIRECTION_TABLE_SIZE 0x80
|
||||
#define TSTORM_MAC_FILTER_CONFIG_OFFSET(port)\
|
||||
(0x1420 + (port * 0x30))
|
||||
#define TSTORM_RCQ_PROD_OFFSET(port, client_id)\
|
||||
(0x1508 + (port * 0x240) + (client_id * 0x20))
|
||||
#define TSTORM_STATS_FLAGS_OFFSET(port) (0x4b90 + (port * 0x8))
|
||||
#define USTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\
|
||||
(0x191a + (port * 0x28) + (index * 0x4))
|
||||
#define USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\
|
||||
(0x1900 + (port * 0x28))
|
||||
#define USTORM_HC_BTR_OFFSET(port)\
|
||||
(0x1954 + (port * 0xb8))
|
||||
#define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(port)\
|
||||
(0x5408 + (port * 0x8))
|
||||
#define USTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index)\
|
||||
(0x141a + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4))
|
||||
#define USTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index)\
|
||||
(0x1418 + (port * 0x280) + (cpu_id * 0x28) + (index * 0x4))
|
||||
#define USTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id)\
|
||||
(0x1400 + (port * 0x280) + (cpu_id * 0x28))
|
||||
#define XSTORM_ASSERT_LIST_INDEX_OFFSET 0x1000
|
||||
#define XSTORM_ASSERT_LIST_OFFSET(idx) (0x1020 + (idx * 0x10))
|
||||
#define XSTORM_DEF_SB_HC_DISABLE_OFFSET(port, index)\
|
||||
(0x141a + (port * 0x28) + (index * 0x4))
|
||||
#define XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(port)\
|
||||
(0x1400 + (port * 0x28))
|
||||
#define XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(port)\
|
||||
(0x5408 + (port * 0x8))
|
||||
#define XSTORM_HC_BTR_OFFSET(port)\
|
||||
(0x1454 + (port * 0x18))
|
||||
#define XSTORM_SPQ_PAGE_BASE_OFFSET(port)\
|
||||
(0x5328 + (port * 0x18))
|
||||
#define XSTORM_SPQ_PROD_OFFSET(port)\
|
||||
(0x5330 + (port * 0x18))
|
||||
#define XSTORM_STATS_FLAGS_OFFSET(port) (0x53f8 + (port * 0x8))
|
||||
#define CSTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET? 0x7000 : 0x1000)
|
||||
#define CSTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET? (0x7020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define CSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET? (0x8522 + ((function>>1) * 0x40) + ((function&1) \
|
||||
* 0x100) + (index * 0x4)) : (0x1922 + (function * 0x40) + (index \
|
||||
* 0x4)))
|
||||
#define CSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x8500 + ((function>>1) * 0x40) + ((function&1) \
|
||||
* 0x100)) : (0x1900 + (function * 0x40)))
|
||||
#define CSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x8508 + ((function>>1) * 0x40) + ((function&1) \
|
||||
* 0x100)) : (0x1908 + (function * 0x40)))
|
||||
#define CSTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET? 0x11e8 : 0xffffffff)
|
||||
#define CSTORM_HC_BTR_OFFSET(port) \
|
||||
(IS_E1H_OFFSET? (0x8704 + (port * 0xf0)) : (0x1984 + (port * 0xc0)))
|
||||
#define CSTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET? (0x801a + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)) : (0x141a + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)))
|
||||
#define CSTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET? (0x8018 + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)) : (0x1418 + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)))
|
||||
#define CSTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET? (0x8000 + (port * 0x280) + (cpu_id * 0x28)) : \
|
||||
(0x1400 + (port * 0x280) + (cpu_id * 0x28)))
|
||||
#define CSTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET? (0x8008 + (port * 0x280) + (cpu_id * 0x28)) : \
|
||||
(0x1408 + (port * 0x280) + (cpu_id * 0x28)))
|
||||
#define CSTORM_STATS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x1108 + (function * 0x8)) : (0x5108 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_APPROXIMATE_MATCH_MULTICAST_FILTERING_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x31c0 + (function * 0x20)) : 0xffffffff)
|
||||
#define TSTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET? 0xa000 : 0x1000)
|
||||
#define TSTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET? (0xa020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define TSTORM_CLIENT_CONFIG_OFFSET(port, client_id) \
|
||||
(IS_E1H_OFFSET? (0x3358 + (port * 0x3e8) + (client_id * 0x28)) : \
|
||||
(0x9c8 + (port * 0x2f8) + (client_id * 0x28)))
|
||||
#define TSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET? (0xb01a + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0) + (index * 0x4)) : (0x141a + (function * 0x28) + (index * \
|
||||
0x4)))
|
||||
#define TSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0xb000 + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0)) : (0x1400 + (function * 0x28)))
|
||||
#define TSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0xb008 + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0)) : (0x1408 + (function * 0x28)))
|
||||
#define TSTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2b80 + (function * 0x8)) : (0x4b68 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_FUNCTION_COMMON_CONFIG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x3000 + (function * 0x38)) : (0x1500 + \
|
||||
(function * 0x38)))
|
||||
#define TSTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET? 0x1ad0 : 0xffffffff)
|
||||
#define TSTORM_HC_BTR_OFFSET(port) \
|
||||
(IS_E1H_OFFSET? (0xb144 + (port * 0x30)) : (0x1454 + (port * 0x18)))
|
||||
#define TSTORM_INDIRECTION_TABLE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x12c8 + (function * 0x80)) : (0x22c8 + \
|
||||
(function * 0x80)))
|
||||
#define TSTORM_INDIRECTION_TABLE_SIZE 0x80
|
||||
#define TSTORM_MAC_FILTER_CONFIG_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x3008 + (function * 0x38)) : (0x1508 + \
|
||||
(function * 0x38)))
|
||||
#define TSTORM_RX_PRODS_OFFSET(port, client_id) \
|
||||
(IS_E1H_OFFSET? (0x3350 + (port * 0x3e8) + (client_id * 0x28)) : \
|
||||
(0x9c0 + (port * 0x2f8) + (client_id * 0x28)))
|
||||
#define TSTORM_STATS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2c00 + (function * 0x8)) : (0x4b88 + \
|
||||
(function * 0x8)))
|
||||
#define TSTORM_TPA_EXIST_OFFSET (IS_E1H_OFFSET? 0x3b30 : 0x1c20)
|
||||
#define USTORM_AGG_DATA_OFFSET (IS_E1H_OFFSET? 0xa040 : 0x2c10)
|
||||
#define USTORM_AGG_DATA_SIZE (IS_E1H_OFFSET? 0x2440 : 0x1200)
|
||||
#define USTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET? 0x8000 : 0x1000)
|
||||
#define USTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET? (0x8020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define USTORM_CQE_PAGE_BASE_OFFSET(port, clientId) \
|
||||
(IS_E1H_OFFSET? (0x3298 + (port * 0x258) + (clientId * 0x18)) : \
|
||||
(0x5450 + (port * 0x1c8) + (clientId * 0x18)))
|
||||
#define USTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET? (0x951a + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0) + (index * 0x4)) : (0x191a + (function * 0x28) + (index * \
|
||||
0x4)))
|
||||
#define USTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x9500 + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0)) : (0x1900 + (function * 0x28)))
|
||||
#define USTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x9508 + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0)) : (0x1908 + (function * 0x28)))
|
||||
#define USTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET? 0x2448 : 0xffffffff)
|
||||
#define USTORM_HC_BTR_OFFSET(port) \
|
||||
(IS_E1H_OFFSET? (0x9644 + (port * 0xd0)) : (0x1954 + (port * 0xb8)))
|
||||
#define USTORM_MAX_AGG_SIZE_OFFSET(port, clientId) \
|
||||
(IS_E1H_OFFSET? (0x3290 + (port * 0x258) + (clientId * 0x18)) : \
|
||||
(0x5448 + (port * 0x1c8) + (clientId * 0x18)))
|
||||
#define USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2408 + (function * 0x8)) : (0x5408 + \
|
||||
(function * 0x8)))
|
||||
#define USTORM_SB_HC_DISABLE_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET? (0x901a + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)) : (0x141a + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)))
|
||||
#define USTORM_SB_HC_TIMEOUT_OFFSET(port, cpu_id, index) \
|
||||
(IS_E1H_OFFSET? (0x9018 + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)) : (0x1418 + (port * 0x280) + (cpu_id * 0x28) + \
|
||||
(index * 0x4)))
|
||||
#define USTORM_SB_HOST_SB_ADDR_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET? (0x9000 + (port * 0x280) + (cpu_id * 0x28)) : \
|
||||
(0x1400 + (port * 0x280) + (cpu_id * 0x28)))
|
||||
#define USTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, cpu_id) \
|
||||
(IS_E1H_OFFSET? (0x9008 + (port * 0x280) + (cpu_id * 0x28)) : \
|
||||
(0x1408 + (port * 0x280) + (cpu_id * 0x28)))
|
||||
#define XSTORM_ASSERT_LIST_INDEX_OFFSET \
|
||||
(IS_E1H_OFFSET? 0x9000 : 0x1000)
|
||||
#define XSTORM_ASSERT_LIST_OFFSET(idx) \
|
||||
(IS_E1H_OFFSET? (0x9020 + (idx * 0x10)) : (0x1020 + (idx * 0x10)))
|
||||
#define XSTORM_CMNG_PER_PORT_VARS_OFFSET(port) \
|
||||
(IS_E1H_OFFSET? (0x24a8 + (port * 0x40)) : (0x3ba0 + (port * 0x40)))
|
||||
#define XSTORM_DEF_SB_HC_DISABLE_OFFSET(function, index) \
|
||||
(IS_E1H_OFFSET? (0xa01a + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0) + (index * 0x4)) : (0x141a + (function * 0x28) + (index * \
|
||||
0x4)))
|
||||
#define XSTORM_DEF_SB_HOST_SB_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0xa000 + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0)) : (0x1400 + (function * 0x28)))
|
||||
#define XSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0xa008 + ((function>>1) * 0x28) + ((function&1) \
|
||||
* 0xa0)) : (0x1408 + (function * 0x28)))
|
||||
#define XSTORM_E1HOV_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2ab8 + (function * 0x2)) : 0xffffffff)
|
||||
#define XSTORM_ETH_STATS_QUERY_ADDR_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2418 + (function * 0x8)) : (0x3b70 + \
|
||||
(function * 0x8)))
|
||||
#define XSTORM_FAIRNESS_PER_VN_VARS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2568 + (function * 0x70)) : (0x3c60 + \
|
||||
(function * 0x70)))
|
||||
#define XSTORM_FUNCTION_MODE_OFFSET \
|
||||
(IS_E1H_OFFSET? 0x2ac8 : 0xffffffff)
|
||||
#define XSTORM_HC_BTR_OFFSET(port) \
|
||||
(IS_E1H_OFFSET? (0xa144 + (port * 0x30)) : (0x1454 + (port * 0x18)))
|
||||
#define XSTORM_RATE_SHAPING_PER_VN_VARS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2528 + (function * 0x70)) : (0x3c20 + \
|
||||
(function * 0x70)))
|
||||
#define XSTORM_SPQ_PAGE_BASE_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2000 + (function * 0x10)) : (0x3328 + \
|
||||
(function * 0x10)))
|
||||
#define XSTORM_SPQ_PROD_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x2008 + (function * 0x10)) : (0x3330 + \
|
||||
(function * 0x10)))
|
||||
#define XSTORM_STATS_FLAGS_OFFSET(function) \
|
||||
(IS_E1H_OFFSET? (0x23d8 + (function * 0x8)) : (0x3b60 + \
|
||||
(function * 0x8)))
|
||||
#define COMMON_ASM_INVALID_ASSERT_OPCODE 0x0
|
||||
|
||||
/**
|
||||
* This file defines HSI constatnts for the ETH flow
|
||||
*/
|
||||
#ifdef _EVEREST_MICROCODE
|
||||
#include "microcode_constants.h"
|
||||
#include "eth_rx_bd.h"
|
||||
#include "eth_tx_bd.h"
|
||||
#include "eth_rx_cqe.h"
|
||||
#include "eth_rx_sge.h"
|
||||
#include "eth_rx_cqe_next_page.h"
|
||||
#endif
|
||||
|
||||
/* hash types */
|
||||
#define DEFAULT_HASH_TYPE 0
|
||||
#define IPV4_HASH_TYPE 1
|
||||
#define TCP_IPV4_HASH_TYPE 2
|
||||
#define IPV6_HASH_TYPE 3
|
||||
#define TCP_IPV6_HASH_TYPE 4
|
||||
/* RSS hash types */
|
||||
#define DEFAULT_HASH_TYPE 0
|
||||
#define IPV4_HASH_TYPE 1
|
||||
#define TCP_IPV4_HASH_TYPE 2
|
||||
#define IPV6_HASH_TYPE 3
|
||||
#define TCP_IPV6_HASH_TYPE 4
|
||||
|
||||
/* Ethernet Ring parmaters */
|
||||
#define X_ETH_LOCAL_RING_SIZE 13
|
||||
#define FIRST_BD_IN_PKT 0
|
||||
#define PARSE_BD_INDEX 1
|
||||
#define NUM_OF_ETH_BDS_IN_PAGE \
|
||||
((PAGE_SIZE) / (STRUCT_SIZE(eth_tx_bd)/8))
|
||||
|
||||
|
||||
/* Rx ring params */
|
||||
#define U_ETH_LOCAL_BD_RING_SIZE (16)
|
||||
#define U_ETH_LOCAL_SGE_RING_SIZE (12)
|
||||
#define U_ETH_SGL_SIZE (8)
|
||||
|
||||
|
||||
#define U_ETH_BDS_PER_PAGE_MASK \
|
||||
((PAGE_SIZE/(STRUCT_SIZE(eth_rx_bd)/8))-1)
|
||||
#define U_ETH_CQE_PER_PAGE_MASK \
|
||||
((PAGE_SIZE/(STRUCT_SIZE(eth_rx_cqe)/8))-1)
|
||||
#define U_ETH_SGES_PER_PAGE_MASK \
|
||||
((PAGE_SIZE/(STRUCT_SIZE(eth_rx_sge)/8))-1)
|
||||
|
||||
#define U_ETH_SGES_PER_PAGE_INVERSE_MASK \
|
||||
(0xFFFF - ((PAGE_SIZE/((STRUCT_SIZE(eth_rx_sge))/8))-1))
|
||||
|
||||
|
||||
#define TU_ETH_CQES_PER_PAGE \
|
||||
(PAGE_SIZE/(STRUCT_SIZE(eth_rx_cqe_next_page)/8))
|
||||
#define U_ETH_BDS_PER_PAGE (PAGE_SIZE/(STRUCT_SIZE(eth_rx_bd)/8))
|
||||
#define U_ETH_SGES_PER_PAGE (PAGE_SIZE/(STRUCT_SIZE(eth_rx_sge)/8))
|
||||
|
||||
#define U_ETH_UNDEFINED_Q 0xFF
|
||||
|
||||
/* values of command IDs in the ramrod message */
|
||||
#define RAMROD_CMD_ID_ETH_PORT_SETUP (80)
|
||||
#define RAMROD_CMD_ID_ETH_CLIENT_SETUP (85)
|
||||
#define RAMROD_CMD_ID_ETH_STAT_QUERY (90)
|
||||
#define RAMROD_CMD_ID_ETH_UPDATE (100)
|
||||
#define RAMROD_CMD_ID_ETH_HALT (105)
|
||||
#define RAMROD_CMD_ID_ETH_SET_MAC (110)
|
||||
#define RAMROD_CMD_ID_ETH_CFC_DEL (115)
|
||||
#define RAMROD_CMD_ID_ETH_PORT_DEL (120)
|
||||
#define RAMROD_CMD_ID_ETH_FORWARD_SETUP (125)
|
||||
#define RAMROD_CMD_ID_ETH_PORT_SETUP (80)
|
||||
#define RAMROD_CMD_ID_ETH_CLIENT_SETUP (85)
|
||||
#define RAMROD_CMD_ID_ETH_STAT_QUERY (90)
|
||||
#define RAMROD_CMD_ID_ETH_UPDATE (100)
|
||||
#define RAMROD_CMD_ID_ETH_HALT (105)
|
||||
#define RAMROD_CMD_ID_ETH_SET_MAC (110)
|
||||
#define RAMROD_CMD_ID_ETH_CFC_DEL (115)
|
||||
#define RAMROD_CMD_ID_ETH_PORT_DEL (120)
|
||||
#define RAMROD_CMD_ID_ETH_FORWARD_SETUP (125)
|
||||
|
||||
|
||||
/* command values for set mac command */
|
||||
#define T_ETH_MAC_COMMAND_SET 0
|
||||
#define T_ETH_MAC_COMMAND_INVALIDATE 1
|
||||
#define T_ETH_MAC_COMMAND_SET 0
|
||||
#define T_ETH_MAC_COMMAND_INVALIDATE 1
|
||||
|
||||
#define T_ETH_INDIRECTION_TABLE_SIZE 128
|
||||
#define T_ETH_INDIRECTION_TABLE_SIZE 128
|
||||
|
||||
/*The CRC32 seed, that is used for the hash(reduction) multicast address */
|
||||
#define T_ETH_CRC32_HASH_SEED 0x00000000
|
||||
|
||||
/* Maximal L2 clients supported */
|
||||
#define ETH_MAX_RX_CLIENTS (18)
|
||||
#define ETH_MAX_RX_CLIENTS_E1 19
|
||||
#define ETH_MAX_RX_CLIENTS_E1H 25
|
||||
|
||||
/* Maximal aggregation queues supported */
|
||||
#define ETH_MAX_AGGREGATION_QUEUES_E1 (32)
|
||||
#define ETH_MAX_AGGREGATION_QUEUES_E1H (64)
|
||||
|
||||
|
||||
/**
|
||||
* This file defines HSI constatnts common to all microcode flows
|
||||
*/
|
||||
|
||||
/* Connection types */
|
||||
#define ETH_CONNECTION_TYPE 0
|
||||
#define ETH_CONNECTION_TYPE 0
|
||||
#define TOE_CONNECTION_TYPE 1
|
||||
#define RDMA_CONNECTION_TYPE 2
|
||||
#define ISCSI_CONNECTION_TYPE 3
|
||||
#define FCOE_CONNECTION_TYPE 4
|
||||
#define RESERVED_CONNECTION_TYPE_0 5
|
||||
#define RESERVED_CONNECTION_TYPE_1 6
|
||||
#define RESERVED_CONNECTION_TYPE_2 7
|
||||
|
||||
#define PROTOCOL_STATE_BIT_OFFSET 6
|
||||
|
||||
#define ETH_STATE (ETH_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
#define PROTOCOL_STATE_BIT_OFFSET 6
|
||||
|
||||
#define ETH_STATE (ETH_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
#define TOE_STATE (TOE_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
#define RDMA_STATE (RDMA_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
#define ISCSI_STATE \
|
||||
(ISCSI_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
#define FCOE_STATE (FCOE_CONNECTION_TYPE << PROTOCOL_STATE_BIT_OFFSET)
|
||||
|
||||
/* microcode fixed page page size 4K (chains and ring segments) */
|
||||
#define MC_PAGE_SIZE (4096)
|
||||
#define MC_PAGE_SIZE (4096)
|
||||
|
||||
|
||||
/* Host coalescing constants */
|
||||
|
||||
/* IGU constants */
|
||||
#define IGU_PORT_BASE 0x0400
|
||||
|
||||
#define IGU_ADDR_MSIX 0x0000
|
||||
#define IGU_ADDR_INT_ACK 0x0200
|
||||
#define IGU_ADDR_PROD_UPD 0x0201
|
||||
#define IGU_ADDR_ATTN_BITS_UPD 0x0202
|
||||
#define IGU_ADDR_ATTN_BITS_SET 0x0203
|
||||
#define IGU_ADDR_ATTN_BITS_CLR 0x0204
|
||||
#define IGU_ADDR_COALESCE_NOW 0x0205
|
||||
#define IGU_ADDR_SIMD_MASK 0x0206
|
||||
#define IGU_ADDR_SIMD_NOMASK 0x0207
|
||||
#define IGU_ADDR_MSI_CTL 0x0210
|
||||
#define IGU_ADDR_MSI_ADDR_LO 0x0211
|
||||
#define IGU_ADDR_MSI_ADDR_HI 0x0212
|
||||
#define IGU_ADDR_MSI_DATA 0x0213
|
||||
|
||||
#define IGU_INT_ENABLE 0
|
||||
#define IGU_INT_DISABLE 1
|
||||
#define IGU_INT_NOP 2
|
||||
#define IGU_INT_NOP2 3
|
||||
|
||||
/* index numbers */
|
||||
#define HC_USTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_CSTORM_DEF_SB_NUM_INDICES 8
|
||||
#define HC_XSTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_TSTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_USTORM_SB_NUM_INDICES 4
|
||||
#define HC_CSTORM_SB_NUM_INDICES 4
|
||||
#define HC_USTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_CSTORM_DEF_SB_NUM_INDICES 8
|
||||
#define HC_XSTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_TSTORM_DEF_SB_NUM_INDICES 4
|
||||
#define HC_USTORM_SB_NUM_INDICES 4
|
||||
#define HC_CSTORM_SB_NUM_INDICES 4
|
||||
|
||||
/* index values - which counterto update */
|
||||
|
||||
#define HC_INDEX_U_ETH_RX_CQ_CONS 1
|
||||
#define HC_INDEX_U_TOE_RX_CQ_CONS 0
|
||||
#define HC_INDEX_U_ETH_RX_CQ_CONS 1
|
||||
#define HC_INDEX_U_ETH_RX_BD_CONS 2
|
||||
#define HC_INDEX_U_FCOE_EQ_CONS 3
|
||||
|
||||
#define HC_INDEX_C_ETH_TX_CQ_CONS 1
|
||||
#define HC_INDEX_C_TOE_TX_CQ_CONS 0
|
||||
#define HC_INDEX_C_ETH_TX_CQ_CONS 1
|
||||
#define HC_INDEX_C_ISCSI_EQ_CONS 2
|
||||
|
||||
#define HC_INDEX_DEF_X_SPQ_CONS 0
|
||||
#define HC_INDEX_DEF_X_SPQ_CONS 0
|
||||
|
||||
#define HC_INDEX_DEF_C_RDMA_EQ_CONS 0
|
||||
#define HC_INDEX_DEF_C_RDMA_NAL_PROD 1
|
||||
#define HC_INDEX_DEF_C_ETH_FW_TX_CQ_CONS 2
|
||||
#define HC_INDEX_DEF_C_ETH_SLOW_PATH 3
|
||||
#define HC_INDEX_DEF_C_ETH_RDMA_CQ_CONS 4
|
||||
#define HC_INDEX_DEF_C_ETH_ISCSI_CQ_CONS 5
|
||||
|
||||
#define HC_INDEX_DEF_U_ETH_RDMA_RX_CQ_CONS 0
|
||||
#define HC_INDEX_DEF_U_ETH_ISCSI_RX_CQ_CONS 1
|
||||
#define HC_INDEX_DEF_U_ETH_RDMA_RX_BD_CONS 2
|
||||
#define HC_INDEX_DEF_U_ETH_ISCSI_RX_BD_CONS 3
|
||||
|
||||
#define HC_INDEX_DEF_C_ETH_FW_TX_CQ_CONS 2
|
||||
#define HC_INDEX_DEF_C_ETH_SLOW_PATH 3
|
||||
|
||||
/* used by the driver to get the SB offset */
|
||||
#define USTORM_ID 0
|
||||
#define CSTORM_ID 1
|
||||
#define XSTORM_ID 2
|
||||
#define TSTORM_ID 3
|
||||
#define ATTENTION_ID 4
|
||||
#define USTORM_ID 0
|
||||
#define CSTORM_ID 1
|
||||
#define XSTORM_ID 2
|
||||
#define TSTORM_ID 3
|
||||
#define ATTENTION_ID 4
|
||||
|
||||
/* max number of slow path commands per port */
|
||||
#define MAX_RAMRODS_PER_PORT (8)
|
||||
#define MAX_RAMRODS_PER_PORT (8)
|
||||
|
||||
/* values for RX ETH CQE type field */
|
||||
#define RX_ETH_CQE_TYPE_ETH_FASTPATH (0)
|
||||
#define RX_ETH_CQE_TYPE_ETH_RAMROD (1)
|
||||
#define RX_ETH_CQE_TYPE_ETH_FASTPATH (0)
|
||||
#define RX_ETH_CQE_TYPE_ETH_RAMROD (1)
|
||||
|
||||
/* MAC address list size */
|
||||
#define T_MAC_ADDRESS_LIST_SIZE (96)
|
||||
|
||||
/**** DEFINES FOR TIMERS/CLOCKS RESOLUTIONS ****/
|
||||
#define EMULATION_FREQUENCY_FACTOR (1600)
|
||||
#define FPGA_FREQUENCY_FACTOR (100)
|
||||
|
||||
#define TIMERS_TICK_SIZE_CHIP (1e-3)
|
||||
#define TIMERS_TICK_SIZE_EMUL \
|
||||
((TIMERS_TICK_SIZE_CHIP)/((EMULATION_FREQUENCY_FACTOR)))
|
||||
#define TIMERS_TICK_SIZE_FPGA \
|
||||
((TIMERS_TICK_SIZE_CHIP)/((FPGA_FREQUENCY_FACTOR)))
|
||||
|
||||
#define TSEMI_CLK1_RESUL_CHIP (1e-3)
|
||||
#define TSEMI_CLK1_RESUL_EMUL \
|
||||
((TSEMI_CLK1_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define TSEMI_CLK1_RESUL_FPGA \
|
||||
((TSEMI_CLK1_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
#define USEMI_CLK1_RESUL_CHIP \
|
||||
(TIMERS_TICK_SIZE_CHIP)
|
||||
#define USEMI_CLK1_RESUL_EMUL \
|
||||
(TIMERS_TICK_SIZE_EMUL)
|
||||
#define USEMI_CLK1_RESUL_FPGA \
|
||||
(TIMERS_TICK_SIZE_FPGA)
|
||||
|
||||
#define XSEMI_CLK1_RESUL_CHIP (1e-3)
|
||||
#define XSEMI_CLK1_RESUL_EMUL \
|
||||
((XSEMI_CLK1_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define XSEMI_CLK1_RESUL_FPGA \
|
||||
((XSEMI_CLK1_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
#define XSEMI_CLK2_RESUL_CHIP (1e-6)
|
||||
#define XSEMI_CLK2_RESUL_EMUL \
|
||||
((XSEMI_CLK2_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define XSEMI_CLK2_RESUL_FPGA \
|
||||
((XSEMI_CLK2_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
#define SDM_TIMER_TICK_RESUL_CHIP (4*(1e-6))
|
||||
#define SDM_TIMER_TICK_RESUL_EMUL \
|
||||
((SDM_TIMER_TICK_RESUL_CHIP)/(EMULATION_FREQUENCY_FACTOR))
|
||||
#define SDM_TIMER_TICK_RESUL_FPGA \
|
||||
((SDM_TIMER_TICK_RESUL_CHIP)/(FPGA_FREQUENCY_FACTOR))
|
||||
|
||||
|
||||
/**** END DEFINES FOR TIMERS/CLOCKS RESOLUTIONS ****/
|
||||
#define XSTORM_IP_ID_ROLL_HALF 0x8000
|
||||
#define XSTORM_IP_ID_ROLL_ALL 0
|
||||
|
||||
#define FW_LOG_LIST_SIZE (50)
|
||||
#define FW_LOG_LIST_SIZE (50)
|
||||
|
||||
#define NUM_OF_PROTOCOLS 4
|
||||
#define MAX_COS_NUMBER 16
|
||||
#define MAX_T_STAT_COUNTER_ID 18
|
||||
#define NUM_OF_PROTOCOLS 4
|
||||
#define MAX_COS_NUMBER 16
|
||||
#define MAX_T_STAT_COUNTER_ID 18
|
||||
#define MAX_X_STAT_COUNTER_ID 18
|
||||
|
||||
#define T_FAIR 1
|
||||
#define FAIR_MEM 2
|
||||
#define RS_PERIODIC_TIMEOUT_IN_SDM_TICS 25
|
||||
#define UNKNOWN_ADDRESS 0
|
||||
#define UNICAST_ADDRESS 1
|
||||
#define MULTICAST_ADDRESS 2
|
||||
#define BROADCAST_ADDRESS 3
|
||||
|
||||
#define UNKNOWN_ADDRESS 0
|
||||
#define UNICAST_ADDRESS 1
|
||||
#define MULTICAST_ADDRESS 2
|
||||
#define BROADCAST_ADDRESS 3
|
||||
#define SINGLE_FUNCTION 0
|
||||
#define MULTI_FUNCTION 1
|
||||
|
||||
#define IP_V4 0
|
||||
#define IP_V6 1
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -22,7 +22,8 @@
|
|||
#define INIT_ASIC 0x4
|
||||
#define INIT_HARDWARE 0x7
|
||||
|
||||
#define STORM_INTMEM_SIZE (0x5800 / 4)
|
||||
#define STORM_INTMEM_SIZE_E1 (0x5800 / 4)
|
||||
#define STORM_INTMEM_SIZE_E1H (0x10000 / 4)
|
||||
#define TSTORM_INTMEM_ADDR 0x1a0000
|
||||
#define CSTORM_INTMEM_ADDR 0x220000
|
||||
#define XSTORM_INTMEM_ADDR 0x2a0000
|
||||
|
@ -30,7 +31,7 @@
|
|||
|
||||
|
||||
/* Init operation types and structures */
|
||||
|
||||
/* Common for both E1 and E1H */
|
||||
#define OP_RD 0x1 /* read single register */
|
||||
#define OP_WR 0x2 /* write single register */
|
||||
#define OP_IW 0x3 /* write single register using mailbox */
|
||||
|
@ -38,7 +39,37 @@
|
|||
#define OP_SI 0x5 /* copy a string using mailbox */
|
||||
#define OP_ZR 0x6 /* clear memory */
|
||||
#define OP_ZP 0x7 /* unzip then copy with DMAE */
|
||||
#define OP_WB 0x8 /* copy a string using DMAE */
|
||||
#define OP_WR_64 0x8 /* write 64 bit pattern */
|
||||
#define OP_WB 0x9 /* copy a string using DMAE */
|
||||
|
||||
/* Operation specific for E1 */
|
||||
#define OP_RD_E1 0xa /* read single register */
|
||||
#define OP_WR_E1 0xb /* write single register */
|
||||
#define OP_IW_E1 0xc /* write single register using mailbox */
|
||||
#define OP_SW_E1 0xd /* copy a string to the device */
|
||||
#define OP_SI_E1 0xe /* copy a string using mailbox */
|
||||
#define OP_ZR_E1 0xf /* clear memory */
|
||||
#define OP_ZP_E1 0x10 /* unzip then copy with DMAE */
|
||||
#define OP_WR_64_E1 0x11 /* write 64 bit pattern on E1 */
|
||||
#define OP_WB_E1 0x12 /* copy a string using DMAE */
|
||||
|
||||
/* Operation specific for E1H */
|
||||
#define OP_RD_E1H 0x13 /* read single register */
|
||||
#define OP_WR_E1H 0x14 /* write single register */
|
||||
#define OP_IW_E1H 0x15 /* write single register using mailbox */
|
||||
#define OP_SW_E1H 0x16 /* copy a string to the device */
|
||||
#define OP_SI_E1H 0x17 /* copy a string using mailbox */
|
||||
#define OP_ZR_E1H 0x18 /* clear memory */
|
||||
#define OP_ZP_E1H 0x19 /* unzip then copy with DMAE */
|
||||
#define OP_WR_64_E1H 0x1a /* write 64 bit pattern on E1H */
|
||||
#define OP_WB_E1H 0x1b /* copy a string using DMAE */
|
||||
|
||||
/* FPGA and EMUL specific operations */
|
||||
#define OP_WR_EMUL_E1H 0x1c /* write single register on E1H Emul */
|
||||
#define OP_WR_EMUL 0x1d /* write single register on Emulation */
|
||||
#define OP_WR_FPGA 0x1e /* write single register on FPGA */
|
||||
#define OP_WR_ASIC 0x1f /* write single register on ASIC */
|
||||
|
||||
|
||||
struct raw_op {
|
||||
u32 op :8;
|
||||
|
@ -87,10 +118,6 @@ union init_op {
|
|||
#include "bnx2x_init_values.h"
|
||||
|
||||
static void bnx2x_reg_wr_ind(struct bnx2x *bp, u32 addr, u32 val);
|
||||
|
||||
static void bnx2x_write_dmae(struct bnx2x *bp, dma_addr_t dma_addr,
|
||||
u32 dst_addr, u32 len32);
|
||||
|
||||
static int bnx2x_gunzip(struct bnx2x *bp, u8 *zbuf, int len);
|
||||
|
||||
static void bnx2x_init_str_wr(struct bnx2x *bp, u32 addr, const u32 *data,
|
||||
|
@ -107,9 +134,6 @@ static void bnx2x_init_str_wr(struct bnx2x *bp, u32 addr, const u32 *data,
|
|||
}
|
||||
}
|
||||
|
||||
#define INIT_MEM_WR(reg, data, reg_off, len) \
|
||||
bnx2x_init_str_wr(bp, reg + reg_off*4, data, len)
|
||||
|
||||
static void bnx2x_init_ind_wr(struct bnx2x *bp, u32 addr, const u32 *data,
|
||||
u16 len)
|
||||
{
|
||||
|
@ -124,11 +148,117 @@ static void bnx2x_init_ind_wr(struct bnx2x *bp, u32 addr, const u32 *data,
|
|||
}
|
||||
}
|
||||
|
||||
static void bnx2x_write_big_buf(struct bnx2x *bp, u32 addr, u32 len)
|
||||
{
|
||||
#ifdef USE_DMAE
|
||||
int offset = 0;
|
||||
|
||||
if (bp->dmae_ready) {
|
||||
while (len > DMAE_LEN32_WR_MAX) {
|
||||
bnx2x_write_dmae(bp, bp->gunzip_mapping + offset,
|
||||
addr + offset, DMAE_LEN32_WR_MAX);
|
||||
offset += DMAE_LEN32_WR_MAX * 4;
|
||||
len -= DMAE_LEN32_WR_MAX;
|
||||
}
|
||||
bnx2x_write_dmae(bp, bp->gunzip_mapping + offset,
|
||||
addr + offset, len);
|
||||
} else
|
||||
bnx2x_init_str_wr(bp, addr, bp->gunzip_buf, len);
|
||||
#else
|
||||
bnx2x_init_str_wr(bp, addr, bp->gunzip_buf, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void bnx2x_init_fill(struct bnx2x *bp, u32 addr, int fill, u32 len)
|
||||
{
|
||||
if ((len * 4) > FW_BUF_SIZE) {
|
||||
BNX2X_ERR("LARGE DMAE OPERATION ! addr 0x%x len 0x%x\n",
|
||||
addr, len*4);
|
||||
return;
|
||||
}
|
||||
memset(bp->gunzip_buf, fill, len * 4);
|
||||
|
||||
bnx2x_write_big_buf(bp, addr, len);
|
||||
}
|
||||
|
||||
static void bnx2x_init_wr_64(struct bnx2x *bp, u32 addr, const u32 *data,
|
||||
u32 len64)
|
||||
{
|
||||
u32 buf_len32 = FW_BUF_SIZE/4;
|
||||
u32 len = len64*2;
|
||||
u64 data64 = 0;
|
||||
int i;
|
||||
|
||||
/* 64 bit value is in a blob: first low DWORD, then high DWORD */
|
||||
data64 = HILO_U64((*(data + 1)), (*data));
|
||||
len64 = min((u32)(FW_BUF_SIZE/8), len64);
|
||||
for (i = 0; i < len64; i++) {
|
||||
u64 *pdata = ((u64 *)(bp->gunzip_buf)) + i;
|
||||
|
||||
*pdata = data64;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i += buf_len32) {
|
||||
u32 cur_len = min(buf_len32, len - i);
|
||||
|
||||
bnx2x_write_big_buf(bp, addr + i * 4, cur_len);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
There are different blobs for each PRAM section.
|
||||
In addition, each blob write operation is divided into a few operations
|
||||
in order to decrease the amount of phys. contigious buffer needed.
|
||||
Thus, when we select a blob the address may be with some offset
|
||||
from the beginning of PRAM section.
|
||||
The same holds for the INT_TABLE sections.
|
||||
**********************************************************/
|
||||
#define IF_IS_INT_TABLE_ADDR(base, addr) \
|
||||
if (((base) <= (addr)) && ((base) + 0x400 >= (addr)))
|
||||
|
||||
#define IF_IS_PRAM_ADDR(base, addr) \
|
||||
if (((base) <= (addr)) && ((base) + 0x40000 >= (addr)))
|
||||
|
||||
static const u32 *bnx2x_sel_blob(u32 addr, const u32 *data, int is_e1)
|
||||
{
|
||||
IF_IS_INT_TABLE_ADDR(TSEM_REG_INT_TABLE, addr)
|
||||
data = is_e1 ? tsem_int_table_data_e1 :
|
||||
tsem_int_table_data_e1h;
|
||||
else
|
||||
IF_IS_INT_TABLE_ADDR(CSEM_REG_INT_TABLE, addr)
|
||||
data = is_e1 ? csem_int_table_data_e1 :
|
||||
csem_int_table_data_e1h;
|
||||
else
|
||||
IF_IS_INT_TABLE_ADDR(USEM_REG_INT_TABLE, addr)
|
||||
data = is_e1 ? usem_int_table_data_e1 :
|
||||
usem_int_table_data_e1h;
|
||||
else
|
||||
IF_IS_INT_TABLE_ADDR(XSEM_REG_INT_TABLE, addr)
|
||||
data = is_e1 ? xsem_int_table_data_e1 :
|
||||
xsem_int_table_data_e1h;
|
||||
else
|
||||
IF_IS_PRAM_ADDR(TSEM_REG_PRAM, addr)
|
||||
data = is_e1 ? tsem_pram_data_e1 : tsem_pram_data_e1h;
|
||||
else
|
||||
IF_IS_PRAM_ADDR(CSEM_REG_PRAM, addr)
|
||||
data = is_e1 ? csem_pram_data_e1 : csem_pram_data_e1h;
|
||||
else
|
||||
IF_IS_PRAM_ADDR(USEM_REG_PRAM, addr)
|
||||
data = is_e1 ? usem_pram_data_e1 : usem_pram_data_e1h;
|
||||
else
|
||||
IF_IS_PRAM_ADDR(XSEM_REG_PRAM, addr)
|
||||
data = is_e1 ? xsem_pram_data_e1 : xsem_pram_data_e1h;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
static void bnx2x_init_wr_wb(struct bnx2x *bp, u32 addr, const u32 *data,
|
||||
u32 len, int gunzip)
|
||||
u32 len, int gunzip, int is_e1, u32 blob_off)
|
||||
{
|
||||
int offset = 0;
|
||||
|
||||
data = bnx2x_sel_blob(addr, data, is_e1) + blob_off;
|
||||
|
||||
if (gunzip) {
|
||||
int rc;
|
||||
#ifdef __BIG_ENDIAN
|
||||
|
@ -143,64 +273,59 @@ static void bnx2x_init_wr_wb(struct bnx2x *bp, u32 addr, const u32 *data,
|
|||
#endif
|
||||
rc = bnx2x_gunzip(bp, (u8 *)data, len);
|
||||
if (rc) {
|
||||
DP(NETIF_MSG_HW, "gunzip failed ! rc %d\n", rc);
|
||||
BNX2X_ERR("gunzip failed ! rc %d\n", rc);
|
||||
return;
|
||||
}
|
||||
len = bp->gunzip_outlen;
|
||||
#ifdef __BIG_ENDIAN
|
||||
kfree(temp);
|
||||
for (i = 0; i < len; i++)
|
||||
((u32 *)bp->gunzip_buf)[i] =
|
||||
((u32 *)bp->gunzip_buf)[i] =
|
||||
swab32(((u32 *)bp->gunzip_buf)[i]);
|
||||
#endif
|
||||
} else {
|
||||
if ((len * 4) > FW_BUF_SIZE) {
|
||||
BNX2X_ERR("LARGE DMAE OPERATION ! len 0x%x\n", len*4);
|
||||
BNX2X_ERR("LARGE DMAE OPERATION ! "
|
||||
"addr 0x%x len 0x%x\n", addr, len*4);
|
||||
return;
|
||||
}
|
||||
memcpy(bp->gunzip_buf, data, len * 4);
|
||||
}
|
||||
|
||||
while (len > DMAE_LEN32_MAX) {
|
||||
if (bp->dmae_ready) {
|
||||
while (len > DMAE_LEN32_WR_MAX) {
|
||||
bnx2x_write_dmae(bp, bp->gunzip_mapping + offset,
|
||||
addr + offset, DMAE_LEN32_WR_MAX);
|
||||
offset += DMAE_LEN32_WR_MAX * 4;
|
||||
len -= DMAE_LEN32_WR_MAX;
|
||||
}
|
||||
bnx2x_write_dmae(bp, bp->gunzip_mapping + offset,
|
||||
addr + offset, DMAE_LEN32_MAX);
|
||||
offset += DMAE_LEN32_MAX * 4;
|
||||
len -= DMAE_LEN32_MAX;
|
||||
}
|
||||
bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, addr + offset, len);
|
||||
}
|
||||
|
||||
#define INIT_MEM_WB(reg, data, reg_off, len) \
|
||||
bnx2x_init_wr_wb(bp, reg + reg_off*4, data, len, 0)
|
||||
|
||||
#define INIT_GUNZIP_DMAE(reg, data, reg_off, len) \
|
||||
bnx2x_init_wr_wb(bp, reg + reg_off*4, data, len, 1)
|
||||
|
||||
static void bnx2x_init_fill(struct bnx2x *bp, u32 addr, int fill, u32 len)
|
||||
{
|
||||
int offset = 0;
|
||||
|
||||
if ((len * 4) > FW_BUF_SIZE) {
|
||||
BNX2X_ERR("LARGE DMAE OPERATION ! len 0x%x\n", len * 4);
|
||||
return;
|
||||
}
|
||||
memset(bp->gunzip_buf, fill, len * 4);
|
||||
|
||||
while (len > DMAE_LEN32_MAX) {
|
||||
bnx2x_write_dmae(bp, bp->gunzip_mapping + offset,
|
||||
addr + offset, DMAE_LEN32_MAX);
|
||||
offset += DMAE_LEN32_MAX * 4;
|
||||
len -= DMAE_LEN32_MAX;
|
||||
}
|
||||
bnx2x_write_dmae(bp, bp->gunzip_mapping + offset, addr + offset, len);
|
||||
addr + offset, len);
|
||||
} else
|
||||
bnx2x_init_ind_wr(bp, addr, bp->gunzip_buf, len);
|
||||
}
|
||||
|
||||
static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end)
|
||||
{
|
||||
int i;
|
||||
int is_e1 = CHIP_IS_E1(bp);
|
||||
int is_e1h = CHIP_IS_E1H(bp);
|
||||
int is_emul_e1h = (CHIP_REV_IS_EMUL(bp) && is_e1h);
|
||||
int hw_wr, i;
|
||||
union init_op *op;
|
||||
u32 op_type, addr, len;
|
||||
const u32 *data;
|
||||
const u32 *data, *data_base;
|
||||
|
||||
if (CHIP_REV_IS_FPGA(bp))
|
||||
hw_wr = OP_WR_FPGA;
|
||||
else if (CHIP_REV_IS_EMUL(bp))
|
||||
hw_wr = OP_WR_EMUL;
|
||||
else
|
||||
hw_wr = OP_WR_ASIC;
|
||||
|
||||
if (is_e1)
|
||||
data_base = init_data_e1;
|
||||
else /* CHIP_IS_E1H(bp) */
|
||||
data_base = init_data_e1h;
|
||||
|
||||
for (i = op_start; i < op_end; i++) {
|
||||
|
||||
|
@ -209,7 +334,30 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end)
|
|||
op_type = op->str_wr.op;
|
||||
addr = op->str_wr.offset;
|
||||
len = op->str_wr.data_len;
|
||||
data = init_data + op->str_wr.data_off;
|
||||
data = data_base + op->str_wr.data_off;
|
||||
|
||||
/* carefull! it must be in order */
|
||||
if (unlikely(op_type > OP_WB)) {
|
||||
|
||||
/* If E1 only */
|
||||
if (op_type <= OP_WB_E1) {
|
||||
if (is_e1)
|
||||
op_type -= (OP_RD_E1 - OP_RD);
|
||||
|
||||
/* If E1H only */
|
||||
} else if (op_type <= OP_WB_E1H) {
|
||||
if (is_e1h)
|
||||
op_type -= (OP_RD_E1H - OP_RD);
|
||||
}
|
||||
|
||||
/* HW/EMUL specific */
|
||||
if (op_type == hw_wr)
|
||||
op_type = OP_WR;
|
||||
|
||||
/* EMUL on E1H is special */
|
||||
if ((op_type == OP_WR_EMUL_E1H) && is_emul_e1h)
|
||||
op_type = OP_WR;
|
||||
}
|
||||
|
||||
switch (op_type) {
|
||||
case OP_RD:
|
||||
|
@ -222,7 +370,7 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end)
|
|||
bnx2x_init_str_wr(bp, addr, data, len);
|
||||
break;
|
||||
case OP_WB:
|
||||
bnx2x_init_wr_wb(bp, addr, data, len, 0);
|
||||
bnx2x_init_wr_wb(bp, addr, data, len, 0, is_e1, 0);
|
||||
break;
|
||||
case OP_SI:
|
||||
bnx2x_init_ind_wr(bp, addr, data, len);
|
||||
|
@ -231,10 +379,21 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end)
|
|||
bnx2x_init_fill(bp, addr, 0, op->zero.len);
|
||||
break;
|
||||
case OP_ZP:
|
||||
bnx2x_init_wr_wb(bp, addr, data, len, 1);
|
||||
bnx2x_init_wr_wb(bp, addr, data, len, 1, is_e1,
|
||||
op->str_wr.data_off);
|
||||
break;
|
||||
case OP_WR_64:
|
||||
bnx2x_init_wr_64(bp, addr, data, len);
|
||||
break;
|
||||
default:
|
||||
BNX2X_ERR("BAD init operation!\n");
|
||||
/* happens whenever an op is of a diff HW */
|
||||
#if 0
|
||||
DP(NETIF_MSG_HW, "skipping init operation "
|
||||
"index %d[%d:%d]: type %d addr 0x%x "
|
||||
"len %d(0x%x)\n",
|
||||
i, op_start, op_end, op_type, addr, len, len);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -245,7 +404,7 @@ static void bnx2x_init_block(struct bnx2x *bp, u32 op_start, u32 op_end)
|
|||
****************************************************************************/
|
||||
/*
|
||||
* This code configures the PCI read/write arbiter
|
||||
* which implements a wighted round robin
|
||||
* which implements a weighted round robin
|
||||
* between the virtual queues in the chip.
|
||||
*
|
||||
* The values were derived for each PCI max payload and max request size.
|
||||
|
@ -315,7 +474,7 @@ static const struct arb_line write_arb_data[NUM_WR_Q][MAX_WR_ORD + 1] = {
|
|||
{{8 , 64 , 25}, {16 , 64 , 41}, {32 , 64 , 81} }
|
||||
};
|
||||
|
||||
/* register adresses for read queues */
|
||||
/* register addresses for read queues */
|
||||
static const struct arb_line read_arb_addr[NUM_RD_Q-1] = {
|
||||
{PXP2_REG_RQ_BW_RD_L0, PXP2_REG_RQ_BW_RD_ADD0,
|
||||
PXP2_REG_RQ_BW_RD_UBOUND0},
|
||||
|
@ -375,7 +534,7 @@ static const struct arb_line read_arb_addr[NUM_RD_Q-1] = {
|
|||
PXP2_REG_PSWRQ_BW_UB28}
|
||||
};
|
||||
|
||||
/* register adresses for wrtie queues */
|
||||
/* register addresses for write queues */
|
||||
static const struct arb_line write_arb_addr[NUM_WR_Q-1] = {
|
||||
{PXP2_REG_PSWRQ_BW_L1, PXP2_REG_PSWRQ_BW_ADD1,
|
||||
PXP2_REG_PSWRQ_BW_UB1},
|
||||
|
@ -424,6 +583,10 @@ static void bnx2x_init_pxp(struct bnx2x *bp)
|
|||
w_order, MAX_WR_ORD);
|
||||
w_order = MAX_WR_ORD;
|
||||
}
|
||||
if (CHIP_REV_IS_FPGA(bp)) {
|
||||
DP(NETIF_MSG_HW, "write order adjusted to 1 for FPGA\n");
|
||||
w_order = 0;
|
||||
}
|
||||
DP(NETIF_MSG_HW, "read order %d write order %d\n", r_order, w_order);
|
||||
|
||||
for (i = 0; i < NUM_RD_Q-1; i++) {
|
||||
|
@ -481,7 +644,20 @@ static void bnx2x_init_pxp(struct bnx2x *bp)
|
|||
REG_WR(bp, PXP2_REG_RQ_PDR_LIMIT, 0xe00);
|
||||
|
||||
REG_WR(bp, PXP2_REG_WR_USDMDP_TH, (0x18 << w_order));
|
||||
REG_WR(bp, PXP2_REG_WR_DMAE_TH, (128 << w_order)/16);
|
||||
|
||||
if (CHIP_IS_E1H(bp)) {
|
||||
REG_WR(bp, PXP2_REG_WR_HC_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_USDM_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_CSDM_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_TSDM_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_XSDM_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_QM_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_TM_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_SRC_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_DBG_MPS, w_order+1);
|
||||
REG_WR(bp, PXP2_REG_WR_DMAE_MPS, 2); /* DMAE is special */
|
||||
REG_WR(bp, PXP2_REG_WR_CDU_MPS, w_order+1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -564,6 +740,72 @@ static u8 calc_crc8(u32 data, u8 crc)
|
|||
return crc_res;
|
||||
}
|
||||
|
||||
/* regiesers addresses are not in order
|
||||
so these arrays help simplify the code */
|
||||
static const int cm_start[E1H_FUNC_MAX][9] = {
|
||||
{MISC_FUNC0_START, TCM_FUNC0_START, UCM_FUNC0_START, CCM_FUNC0_START,
|
||||
XCM_FUNC0_START, TSEM_FUNC0_START, USEM_FUNC0_START, CSEM_FUNC0_START,
|
||||
XSEM_FUNC0_START},
|
||||
{MISC_FUNC1_START, TCM_FUNC1_START, UCM_FUNC1_START, CCM_FUNC1_START,
|
||||
XCM_FUNC1_START, TSEM_FUNC1_START, USEM_FUNC1_START, CSEM_FUNC1_START,
|
||||
XSEM_FUNC1_START},
|
||||
{MISC_FUNC2_START, TCM_FUNC2_START, UCM_FUNC2_START, CCM_FUNC2_START,
|
||||
XCM_FUNC2_START, TSEM_FUNC2_START, USEM_FUNC2_START, CSEM_FUNC2_START,
|
||||
XSEM_FUNC2_START},
|
||||
{MISC_FUNC3_START, TCM_FUNC3_START, UCM_FUNC3_START, CCM_FUNC3_START,
|
||||
XCM_FUNC3_START, TSEM_FUNC3_START, USEM_FUNC3_START, CSEM_FUNC3_START,
|
||||
XSEM_FUNC3_START},
|
||||
{MISC_FUNC4_START, TCM_FUNC4_START, UCM_FUNC4_START, CCM_FUNC4_START,
|
||||
XCM_FUNC4_START, TSEM_FUNC4_START, USEM_FUNC4_START, CSEM_FUNC4_START,
|
||||
XSEM_FUNC4_START},
|
||||
{MISC_FUNC5_START, TCM_FUNC5_START, UCM_FUNC5_START, CCM_FUNC5_START,
|
||||
XCM_FUNC5_START, TSEM_FUNC5_START, USEM_FUNC5_START, CSEM_FUNC5_START,
|
||||
XSEM_FUNC5_START},
|
||||
{MISC_FUNC6_START, TCM_FUNC6_START, UCM_FUNC6_START, CCM_FUNC6_START,
|
||||
XCM_FUNC6_START, TSEM_FUNC6_START, USEM_FUNC6_START, CSEM_FUNC6_START,
|
||||
XSEM_FUNC6_START},
|
||||
{MISC_FUNC7_START, TCM_FUNC7_START, UCM_FUNC7_START, CCM_FUNC7_START,
|
||||
XCM_FUNC7_START, TSEM_FUNC7_START, USEM_FUNC7_START, CSEM_FUNC7_START,
|
||||
XSEM_FUNC7_START}
|
||||
};
|
||||
|
||||
static const int cm_end[E1H_FUNC_MAX][9] = {
|
||||
{MISC_FUNC0_END, TCM_FUNC0_END, UCM_FUNC0_END, CCM_FUNC0_END,
|
||||
XCM_FUNC0_END, TSEM_FUNC0_END, USEM_FUNC0_END, CSEM_FUNC0_END,
|
||||
XSEM_FUNC0_END},
|
||||
{MISC_FUNC1_END, TCM_FUNC1_END, UCM_FUNC1_END, CCM_FUNC1_END,
|
||||
XCM_FUNC1_END, TSEM_FUNC1_END, USEM_FUNC1_END, CSEM_FUNC1_END,
|
||||
XSEM_FUNC1_END},
|
||||
{MISC_FUNC2_END, TCM_FUNC2_END, UCM_FUNC2_END, CCM_FUNC2_END,
|
||||
XCM_FUNC2_END, TSEM_FUNC2_END, USEM_FUNC2_END, CSEM_FUNC2_END,
|
||||
XSEM_FUNC2_END},
|
||||
{MISC_FUNC3_END, TCM_FUNC3_END, UCM_FUNC3_END, CCM_FUNC3_END,
|
||||
XCM_FUNC3_END, TSEM_FUNC3_END, USEM_FUNC3_END, CSEM_FUNC3_END,
|
||||
XSEM_FUNC3_END},
|
||||
{MISC_FUNC4_END, TCM_FUNC4_END, UCM_FUNC4_END, CCM_FUNC4_END,
|
||||
XCM_FUNC4_END, TSEM_FUNC4_END, USEM_FUNC4_END, CSEM_FUNC4_END,
|
||||
XSEM_FUNC4_END},
|
||||
{MISC_FUNC5_END, TCM_FUNC5_END, UCM_FUNC5_END, CCM_FUNC5_END,
|
||||
XCM_FUNC5_END, TSEM_FUNC5_END, USEM_FUNC5_END, CSEM_FUNC5_END,
|
||||
XSEM_FUNC5_END},
|
||||
{MISC_FUNC6_END, TCM_FUNC6_END, UCM_FUNC6_END, CCM_FUNC6_END,
|
||||
XCM_FUNC6_END, TSEM_FUNC6_END, USEM_FUNC6_END, CSEM_FUNC6_END,
|
||||
XSEM_FUNC6_END},
|
||||
{MISC_FUNC7_END, TCM_FUNC7_END, UCM_FUNC7_END, CCM_FUNC7_END,
|
||||
XCM_FUNC7_END, TSEM_FUNC7_END, USEM_FUNC7_END, CSEM_FUNC7_END,
|
||||
XSEM_FUNC7_END},
|
||||
};
|
||||
|
||||
static const int hc_limits[E1H_FUNC_MAX][2] = {
|
||||
{HC_FUNC0_START, HC_FUNC0_END},
|
||||
{HC_FUNC1_START, HC_FUNC1_END},
|
||||
{HC_FUNC2_START, HC_FUNC2_END},
|
||||
{HC_FUNC3_START, HC_FUNC3_END},
|
||||
{HC_FUNC4_START, HC_FUNC4_END},
|
||||
{HC_FUNC5_START, HC_FUNC5_END},
|
||||
{HC_FUNC6_START, HC_FUNC6_END},
|
||||
{HC_FUNC7_START, HC_FUNC7_END}
|
||||
};
|
||||
|
||||
#endif /* BNX2X_INIT_H */
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,168 @@
|
|||
/* Copyright 2008 Broadcom Corporation
|
||||
*
|
||||
* Unless you and Broadcom execute a separate written software license
|
||||
* agreement governing use of this software, this software is licensed to you
|
||||
* under the terms of the GNU General Public License version 2, available
|
||||
* at http://www.gnu.org/licenses/old-licenses/gpl-2.0.html (the "GPL").
|
||||
*
|
||||
* Notwithstanding the above, under no circumstances may you combine this
|
||||
* software in any way with any other Broadcom software provided under a
|
||||
* license other than the GPL, without Broadcom's express prior written
|
||||
* consent.
|
||||
*
|
||||
* Written by Yaniv Rosner
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef BNX2X_LINK_H
|
||||
#define BNX2X_LINK_H
|
||||
|
||||
|
||||
|
||||
/***********************************************************/
|
||||
/* Defines */
|
||||
/***********************************************************/
|
||||
#define DEFAULT_PHY_DEV_ADDR 3
|
||||
|
||||
|
||||
|
||||
#define FLOW_CTRL_AUTO PORT_FEATURE_FLOW_CONTROL_AUTO
|
||||
#define FLOW_CTRL_TX PORT_FEATURE_FLOW_CONTROL_TX
|
||||
#define FLOW_CTRL_RX PORT_FEATURE_FLOW_CONTROL_RX
|
||||
#define FLOW_CTRL_BOTH PORT_FEATURE_FLOW_CONTROL_BOTH
|
||||
#define FLOW_CTRL_NONE PORT_FEATURE_FLOW_CONTROL_NONE
|
||||
|
||||
#define SPEED_AUTO_NEG 0
|
||||
#define SPEED_12000 12000
|
||||
#define SPEED_12500 12500
|
||||
#define SPEED_13000 13000
|
||||
#define SPEED_15000 15000
|
||||
#define SPEED_16000 16000
|
||||
|
||||
|
||||
/***********************************************************/
|
||||
/* Structs */
|
||||
/***********************************************************/
|
||||
/* Inputs parameters to the CLC */
|
||||
struct link_params {
|
||||
|
||||
u8 port;
|
||||
|
||||
/* Default / User Configuration */
|
||||
u8 loopback_mode;
|
||||
#define LOOPBACK_NONE 0
|
||||
#define LOOPBACK_EMAC 1
|
||||
#define LOOPBACK_BMAC 2
|
||||
#define LOOPBACK_XGXS_10 3
|
||||
#define LOOPBACK_EXT_PHY 4
|
||||
|
||||
u16 req_duplex;
|
||||
u16 req_flow_ctrl;
|
||||
u16 req_line_speed; /* Also determine AutoNeg */
|
||||
|
||||
/* Device parameters */
|
||||
u8 mac_addr[6];
|
||||
u16 mtu;
|
||||
|
||||
|
||||
/* shmem parameters */
|
||||
u32 shmem_base;
|
||||
u32 speed_cap_mask;
|
||||
u32 switch_cfg;
|
||||
#define SWITCH_CFG_1G PORT_FEATURE_CON_SWITCH_1G_SWITCH
|
||||
#define SWITCH_CFG_10G PORT_FEATURE_CON_SWITCH_10G_SWITCH
|
||||
#define SWITCH_CFG_AUTO_DETECT PORT_FEATURE_CON_SWITCH_AUTO_DETECT
|
||||
|
||||
u16 hw_led_mode; /* part of the hw_config read from the shmem */
|
||||
u32 serdes_config;
|
||||
u32 lane_config;
|
||||
u32 ext_phy_config;
|
||||
#define XGXS_EXT_PHY_TYPE(ext_phy_config) (ext_phy_config & \
|
||||
PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK)
|
||||
#define SERDES_EXT_PHY_TYPE(ext_phy_config) (ext_phy_config & \
|
||||
PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK)
|
||||
/* Phy register parameter */
|
||||
u32 chip_id;
|
||||
|
||||
/* phy_addr populated by the CLC */
|
||||
u8 phy_addr;
|
||||
/* Device pointer passed to all callback functions */
|
||||
struct bnx2x *bp;
|
||||
};
|
||||
|
||||
/* Output parameters */
|
||||
struct link_vars {
|
||||
u8 phy_link_up; /* internal phy link indication */
|
||||
u8 link_up;
|
||||
u16 duplex;
|
||||
u16 flow_ctrl;
|
||||
u32 ieee_fc;
|
||||
u8 mac_type;
|
||||
|
||||
#define MAC_TYPE_NONE 0
|
||||
#define MAC_TYPE_EMAC 1
|
||||
#define MAC_TYPE_BMAC 2
|
||||
u16 line_speed;
|
||||
u32 autoneg;
|
||||
#define AUTO_NEG_DISABLED 0x0
|
||||
#define AUTO_NEG_ENABLED 0x1
|
||||
#define AUTO_NEG_COMPLETE 0x2
|
||||
#define AUTO_NEG_PARALLEL_DETECTION_USED 0x3
|
||||
|
||||
u8 phy_flags;
|
||||
|
||||
/* The same definitions as the shmem parameter */
|
||||
u32 link_status;
|
||||
};
|
||||
|
||||
/***********************************************************/
|
||||
/* Functions */
|
||||
/***********************************************************/
|
||||
|
||||
/* Initialize the phy */
|
||||
u8 bnx2x_phy_init(struct link_params *input, struct link_vars *output);
|
||||
|
||||
/* Reset the link. Should be called when driver or interface goes down */
|
||||
u8 bnx2x_link_reset(struct link_params *params, struct link_vars *vars);
|
||||
|
||||
/* bnx2x_link_update should be called upon link interrupt */
|
||||
u8 bnx2x_link_update(struct link_params *input, struct link_vars *output);
|
||||
|
||||
/* use the following cl45 functions to read/write from external_phy
|
||||
In order to use it to read/write internal phy registers, use
|
||||
DEFAULT_PHY_DEV_ADDR as devad, and (_bank + (_addr & 0xf)) as
|
||||
Use ext_phy_type of 0 in case of cl22 over cl45
|
||||
the register */
|
||||
u8 bnx2x_cl45_read(struct bnx2x *bp, u8 port, u32 ext_phy_type,
|
||||
u8 phy_addr, u8 devad, u16 reg, u16 *ret_val);
|
||||
|
||||
u8 bnx2x_cl45_write(struct bnx2x *bp, u8 port, u32 ext_phy_type,
|
||||
u8 phy_addr, u8 devad, u16 reg, u16 val);
|
||||
|
||||
/* Reads the link_status from the shmem,
|
||||
and update the link vars accordinaly */
|
||||
void bnx2x_link_status_update(struct link_params *input,
|
||||
struct link_vars *output);
|
||||
/* returns string representing the fw_version of the external phy */
|
||||
u8 bnx2x_get_ext_phy_fw_version(struct link_params *params, u8 driver_loaded,
|
||||
u8 *version, u16 len);
|
||||
|
||||
/* Set/Unset the led
|
||||
Basically, the CLC takes care of the led for the link, but in case one needs
|
||||
to set/unset the led unnatually, set the "mode" to LED_MODE_OPER to
|
||||
blink the led, and LED_MODE_OFF to set the led off.*/
|
||||
u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed,
|
||||
u16 hw_led_mode, u32 chip_id);
|
||||
#define LED_MODE_OFF 0
|
||||
#define LED_MODE_OPER 2
|
||||
|
||||
u8 bnx2x_override_led_value(struct bnx2x *bp, u8 port, u32 led_idx, u32 value);
|
||||
|
||||
u8 bnx2x_flash_download(struct bnx2x *bp, u8 port, u32 ext_phy_config,
|
||||
u8 driver_loaded, char data[], u32 size);
|
||||
/* Get the actual link status. In case it returns 0, link is up,
|
||||
otherwise link is down*/
|
||||
u8 bnx2x_test_link(struct link_params *input, struct link_vars *vars);
|
||||
|
||||
|
||||
#endif /* BNX2X_LINK_H */
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -419,8 +419,10 @@ static void rlb_teach_disabled_mac_on_primary(struct bonding *bond, u8 addr[])
|
|||
}
|
||||
|
||||
if (!bond->alb_info.primary_is_promisc) {
|
||||
bond->alb_info.primary_is_promisc = 1;
|
||||
dev_set_promiscuity(bond->curr_active_slave->dev, 1);
|
||||
if (!dev_set_promiscuity(bond->curr_active_slave->dev, 1))
|
||||
bond->alb_info.primary_is_promisc = 1;
|
||||
else
|
||||
bond->alb_info.primary_is_promisc = 0;
|
||||
}
|
||||
|
||||
bond->alb_info.rlb_promisc_timeout_counter = 0;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -50,9 +50,9 @@ extern struct bond_parm_tbl bond_mode_tbl[];
|
|||
extern struct bond_parm_tbl bond_lacp_tbl[];
|
||||
extern struct bond_parm_tbl xmit_hashtype_tbl[];
|
||||
extern struct bond_parm_tbl arp_validate_tbl[];
|
||||
extern struct bond_parm_tbl fail_over_mac_tbl[];
|
||||
|
||||
static int expected_refcount = -1;
|
||||
static struct class *netdev_class;
|
||||
/*--------------------------- Data Structures -----------------------------*/
|
||||
|
||||
/* Bonding sysfs lock. Why can't we just use the subsystem lock?
|
||||
|
@ -111,7 +111,6 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
|
|||
char *ifname;
|
||||
int rv, res = count;
|
||||
struct bonding *bond;
|
||||
struct bonding *nxt;
|
||||
|
||||
sscanf(buffer, "%16s", command); /* IFNAMSIZ*/
|
||||
ifname = command + 1;
|
||||
|
@ -122,7 +121,7 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
|
|||
if (command[0] == '+') {
|
||||
printk(KERN_INFO DRV_NAME
|
||||
": %s is being created...\n", ifname);
|
||||
rv = bond_create(ifname, &bonding_defaults, &bond);
|
||||
rv = bond_create(ifname, &bonding_defaults);
|
||||
if (rv) {
|
||||
printk(KERN_INFO DRV_NAME ": Bond creation failed.\n");
|
||||
res = rv;
|
||||
|
@ -134,7 +133,7 @@ static ssize_t bonding_store_bonds(struct class *cls, const char *buffer, size_t
|
|||
rtnl_lock();
|
||||
down_write(&bonding_rwsem);
|
||||
|
||||
list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
|
||||
list_for_each_entry(bond, &bond_dev_list, bond_list)
|
||||
if (strnicmp(bond->dev->name, ifname, IFNAMSIZ) == 0) {
|
||||
/* check the ref count on the bond's kobject.
|
||||
* If it's > expected, then there's a file open,
|
||||
|
@ -548,42 +547,37 @@ static ssize_t bonding_show_fail_over_mac(struct device *d, struct device_attrib
|
|||
{
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
return sprintf(buf, "%d\n", bond->params.fail_over_mac) + 1;
|
||||
return sprintf(buf, "%s %d\n",
|
||||
fail_over_mac_tbl[bond->params.fail_over_mac].modename,
|
||||
bond->params.fail_over_mac);
|
||||
}
|
||||
|
||||
static ssize_t bonding_store_fail_over_mac(struct device *d, struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
int new_value;
|
||||
int ret = count;
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
if (bond->slave_cnt != 0) {
|
||||
printk(KERN_ERR DRV_NAME
|
||||
": %s: Can't alter fail_over_mac with slaves in bond.\n",
|
||||
bond->dev->name);
|
||||
ret = -EPERM;
|
||||
goto out;
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (sscanf(buf, "%d", &new_value) != 1) {
|
||||
new_value = bond_parse_parm(buf, fail_over_mac_tbl);
|
||||
if (new_value < 0) {
|
||||
printk(KERN_ERR DRV_NAME
|
||||
": %s: no fail_over_mac value specified.\n",
|
||||
bond->dev->name);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
": %s: Ignoring invalid fail_over_mac value %s.\n",
|
||||
bond->dev->name, buf);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((new_value == 0) || (new_value == 1)) {
|
||||
bond->params.fail_over_mac = new_value;
|
||||
printk(KERN_INFO DRV_NAME ": %s: Setting fail_over_mac to %d.\n",
|
||||
bond->dev->name, new_value);
|
||||
} else {
|
||||
printk(KERN_INFO DRV_NAME
|
||||
": %s: Ignoring invalid fail_over_mac value %d.\n",
|
||||
bond->dev->name, new_value);
|
||||
}
|
||||
out:
|
||||
return ret;
|
||||
bond->params.fail_over_mac = new_value;
|
||||
printk(KERN_INFO DRV_NAME ": %s: Setting fail_over_mac to %s (%d).\n",
|
||||
bond->dev->name, fail_over_mac_tbl[new_value].modename,
|
||||
new_value);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(fail_over_mac, S_IRUGO | S_IWUSR, bonding_show_fail_over_mac, bonding_store_fail_over_mac);
|
||||
|
@ -951,6 +945,45 @@ static ssize_t bonding_store_lacp(struct device *d,
|
|||
}
|
||||
static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR, bonding_show_lacp, bonding_store_lacp);
|
||||
|
||||
/*
|
||||
* Show and set the number of grat ARP to send after a failover event.
|
||||
*/
|
||||
static ssize_t bonding_show_n_grat_arp(struct device *d,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
return sprintf(buf, "%d\n", bond->params.num_grat_arp);
|
||||
}
|
||||
|
||||
static ssize_t bonding_store_n_grat_arp(struct device *d,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
int new_value, ret = count;
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
if (sscanf(buf, "%d", &new_value) != 1) {
|
||||
printk(KERN_ERR DRV_NAME
|
||||
": %s: no num_grat_arp value specified.\n",
|
||||
bond->dev->name);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (new_value < 0 || new_value > 255) {
|
||||
printk(KERN_ERR DRV_NAME
|
||||
": %s: Invalid num_grat_arp value %d not in range 0-255; rejected.\n",
|
||||
bond->dev->name, new_value);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
} else {
|
||||
bond->params.num_grat_arp = new_value;
|
||||
}
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR(num_grat_arp, S_IRUGO | S_IWUSR, bonding_show_n_grat_arp, bonding_store_n_grat_arp);
|
||||
/*
|
||||
* Show and set the MII monitor interval. There are two tricky bits
|
||||
* here. First, if MII monitoring is activated, then we must disable
|
||||
|
@ -1388,6 +1421,7 @@ static struct attribute *per_bond_attrs[] = {
|
|||
&dev_attr_updelay.attr,
|
||||
&dev_attr_lacp_rate.attr,
|
||||
&dev_attr_xmit_hash_policy.attr,
|
||||
&dev_attr_num_grat_arp.attr,
|
||||
&dev_attr_miimon.attr,
|
||||
&dev_attr_primary.attr,
|
||||
&dev_attr_use_carrier.attr,
|
||||
|
@ -1412,19 +1446,9 @@ static struct attribute_group bonding_group = {
|
|||
*/
|
||||
int bond_create_sysfs(void)
|
||||
{
|
||||
int ret = 0;
|
||||
struct bonding *firstbond;
|
||||
int ret;
|
||||
|
||||
/* get the netdev class pointer */
|
||||
firstbond = container_of(bond_dev_list.next, struct bonding, bond_list);
|
||||
if (!firstbond)
|
||||
return -ENODEV;
|
||||
|
||||
netdev_class = firstbond->dev->dev.class;
|
||||
if (!netdev_class)
|
||||
return -ENODEV;
|
||||
|
||||
ret = class_create_file(netdev_class, &class_attr_bonding_masters);
|
||||
ret = netdev_class_create_file(&class_attr_bonding_masters);
|
||||
/*
|
||||
* Permit multiple loads of the module by ignoring failures to
|
||||
* create the bonding_masters sysfs file. Bonding devices
|
||||
|
@ -1443,10 +1467,6 @@ int bond_create_sysfs(void)
|
|||
printk(KERN_ERR
|
||||
"network device named %s already exists in sysfs",
|
||||
class_attr_bonding_masters.attr.name);
|
||||
else {
|
||||
netdev_class = NULL;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -1458,8 +1478,7 @@ int bond_create_sysfs(void)
|
|||
*/
|
||||
void bond_destroy_sysfs(void)
|
||||
{
|
||||
if (netdev_class)
|
||||
class_remove_file(netdev_class, &class_attr_bonding_masters);
|
||||
netdev_class_remove_file(&class_attr_bonding_masters);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
#include "bond_3ad.h"
|
||||
#include "bond_alb.h"
|
||||
|
||||
#define DRV_VERSION "3.2.5"
|
||||
#define DRV_RELDATE "March 21, 2008"
|
||||
#define DRV_VERSION "3.3.0"
|
||||
#define DRV_RELDATE "June 10, 2008"
|
||||
#define DRV_NAME "bonding"
|
||||
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
|
||||
|
||||
|
@ -125,6 +125,7 @@ struct bond_params {
|
|||
int mode;
|
||||
int xmit_policy;
|
||||
int miimon;
|
||||
int num_grat_arp;
|
||||
int arp_interval;
|
||||
int arp_validate;
|
||||
int use_carrier;
|
||||
|
@ -157,6 +158,7 @@ struct slave {
|
|||
unsigned long jiffies;
|
||||
unsigned long last_arp_rx;
|
||||
s8 link; /* one of BOND_LINK_XXXX */
|
||||
s8 new_link;
|
||||
s8 state; /* one of BOND_STATE_XXXX */
|
||||
u32 original_flags;
|
||||
u32 original_mtu;
|
||||
|
@ -168,6 +170,11 @@ struct slave {
|
|||
struct tlb_slave_info tlb_info;
|
||||
};
|
||||
|
||||
/*
|
||||
* Link pseudo-state only used internally by monitors
|
||||
*/
|
||||
#define BOND_LINK_NOCHANGE -1
|
||||
|
||||
/*
|
||||
* Here are the locking policies for the two bonding locks:
|
||||
*
|
||||
|
@ -241,6 +248,10 @@ static inline struct bonding *bond_get_bond_by_slave(struct slave *slave)
|
|||
return (struct bonding *)slave->dev->master->priv;
|
||||
}
|
||||
|
||||
#define BOND_FOM_NONE 0
|
||||
#define BOND_FOM_ACTIVE 1
|
||||
#define BOND_FOM_FOLLOW 2
|
||||
|
||||
#define BOND_ARP_VALIDATE_NONE 0
|
||||
#define BOND_ARP_VALIDATE_ACTIVE (1 << BOND_STATE_ACTIVE)
|
||||
#define BOND_ARP_VALIDATE_BACKUP (1 << BOND_STATE_BACKUP)
|
||||
|
@ -301,7 +312,7 @@ static inline void bond_unset_master_alb_flags(struct bonding *bond)
|
|||
|
||||
struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr);
|
||||
int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
|
||||
int bond_create(char *name, struct bond_params *params, struct bonding **newbond);
|
||||
int bond_create(char *name, struct bond_params *params);
|
||||
void bond_destroy(struct bonding *bond);
|
||||
int bond_release_and_destroy(struct net_device *bond_dev, struct net_device *slave_dev);
|
||||
int bond_create_sysfs(void);
|
||||
|
|
|
@ -1153,9 +1153,7 @@ static int __devinit init_one(struct pci_dev *pdev,
|
|||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
netdev->poll_controller = t1_netpoll;
|
||||
#endif
|
||||
#ifdef CONFIG_CHELSIO_T1_NAPI
|
||||
netif_napi_add(netdev, &adapter->napi, t1_poll, 64);
|
||||
#endif
|
||||
|
||||
SET_ETHTOOL_OPS(netdev, &t1_ethtool_ops);
|
||||
}
|
||||
|
|
|
@ -1396,20 +1396,10 @@ static void sge_rx(struct sge *sge, struct freelQ *fl, unsigned int len)
|
|||
|
||||
if (unlikely(adapter->vlan_grp && p->vlan_valid)) {
|
||||
st->vlan_xtract++;
|
||||
#ifdef CONFIG_CHELSIO_T1_NAPI
|
||||
vlan_hwaccel_receive_skb(skb, adapter->vlan_grp,
|
||||
ntohs(p->vlan));
|
||||
#else
|
||||
vlan_hwaccel_rx(skb, adapter->vlan_grp,
|
||||
ntohs(p->vlan));
|
||||
#endif
|
||||
} else {
|
||||
#ifdef CONFIG_CHELSIO_T1_NAPI
|
||||
vlan_hwaccel_receive_skb(skb, adapter->vlan_grp,
|
||||
ntohs(p->vlan));
|
||||
} else
|
||||
netif_receive_skb(skb);
|
||||
#else
|
||||
netif_rx(skb);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1568,7 +1558,6 @@ static inline int responses_pending(const struct adapter *adapter)
|
|||
return (e->GenerationBit == Q->genbit);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CHELSIO_T1_NAPI
|
||||
/*
|
||||
* A simpler version of process_responses() that handles only pure (i.e.,
|
||||
* non data-carrying) responses. Such respones are too light-weight to justify
|
||||
|
@ -1636,9 +1625,6 @@ int t1_poll(struct napi_struct *napi, int budget)
|
|||
return work_done;
|
||||
}
|
||||
|
||||
/*
|
||||
* NAPI version of the main interrupt handler.
|
||||
*/
|
||||
irqreturn_t t1_interrupt(int irq, void *data)
|
||||
{
|
||||
struct adapter *adapter = data;
|
||||
|
@ -1656,7 +1642,8 @@ irqreturn_t t1_interrupt(int irq, void *data)
|
|||
else {
|
||||
/* no data, no NAPI needed */
|
||||
writel(sge->respQ.cidx, adapter->regs + A_SG_SLEEPING);
|
||||
napi_enable(&adapter->napi); /* undo schedule_prep */
|
||||
/* undo schedule_prep */
|
||||
napi_enable(&adapter->napi);
|
||||
}
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
|
@ -1672,53 +1659,6 @@ irqreturn_t t1_interrupt(int irq, void *data)
|
|||
return IRQ_RETVAL(handled != 0);
|
||||
}
|
||||
|
||||
#else
|
||||
/*
|
||||
* Main interrupt handler, optimized assuming that we took a 'DATA'
|
||||
* interrupt.
|
||||
*
|
||||
* 1. Clear the interrupt
|
||||
* 2. Loop while we find valid descriptors and process them; accumulate
|
||||
* information that can be processed after the loop
|
||||
* 3. Tell the SGE at which index we stopped processing descriptors
|
||||
* 4. Bookkeeping; free TX buffers, ring doorbell if there are any
|
||||
* outstanding TX buffers waiting, replenish RX buffers, potentially
|
||||
* reenable upper layers if they were turned off due to lack of TX
|
||||
* resources which are available again.
|
||||
* 5. If we took an interrupt, but no valid respQ descriptors was found we
|
||||
* let the slow_intr_handler run and do error handling.
|
||||
*/
|
||||
irqreturn_t t1_interrupt(int irq, void *cookie)
|
||||
{
|
||||
int work_done;
|
||||
struct adapter *adapter = cookie;
|
||||
struct respQ *Q = &adapter->sge->respQ;
|
||||
|
||||
spin_lock(&adapter->async_lock);
|
||||
|
||||
writel(F_PL_INTR_SGE_DATA, adapter->regs + A_PL_CAUSE);
|
||||
|
||||
if (likely(responses_pending(adapter)))
|
||||
work_done = process_responses(adapter, -1);
|
||||
else
|
||||
work_done = t1_slow_intr_handler(adapter);
|
||||
|
||||
/*
|
||||
* The unconditional clearing of the PL_CAUSE above may have raced
|
||||
* with DMA completion and the corresponding generation of a response
|
||||
* to cause us to miss the resulting data interrupt. The next write
|
||||
* is also unconditional to recover the missed interrupt and render
|
||||
* this race harmless.
|
||||
*/
|
||||
writel(Q->cidx, adapter->regs + A_SG_SLEEPING);
|
||||
|
||||
if (!work_done)
|
||||
adapter->sge->stats.unhandled_irqs++;
|
||||
spin_unlock(&adapter->async_lock);
|
||||
return IRQ_RETVAL(work_done != 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Enqueues the sk_buff onto the cmdQ[qid] and has hardware fetch it.
|
||||
*
|
||||
|
|
|
@ -544,7 +544,7 @@ static int cpmac_poll(struct napi_struct *napi, int budget)
|
|||
|
||||
spin_unlock(&priv->rx_lock);
|
||||
netif_rx_complete(priv->dev, napi);
|
||||
netif_stop_queue(priv->dev);
|
||||
netif_tx_stop_all_queues(priv->dev);
|
||||
napi_disable(&priv->napi);
|
||||
|
||||
atomic_inc(&priv->reset_pending);
|
||||
|
@ -569,11 +569,7 @@ static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
|
||||
len = max(skb->len, ETH_ZLEN);
|
||||
queue = skb_get_queue_mapping(skb);
|
||||
#ifdef CONFIG_NETDEVICES_MULTIQUEUE
|
||||
netif_stop_subqueue(dev, queue);
|
||||
#else
|
||||
netif_stop_queue(dev);
|
||||
#endif
|
||||
|
||||
desc = &priv->desc_ring[queue];
|
||||
if (unlikely(desc->dataflags & CPMAC_OWN)) {
|
||||
|
@ -626,24 +622,14 @@ static void cpmac_end_xmit(struct net_device *dev, int queue)
|
|||
|
||||
dev_kfree_skb_irq(desc->skb);
|
||||
desc->skb = NULL;
|
||||
#ifdef CONFIG_NETDEVICES_MULTIQUEUE
|
||||
if (netif_subqueue_stopped(dev, queue))
|
||||
netif_wake_subqueue(dev, queue);
|
||||
#else
|
||||
if (netif_queue_stopped(dev))
|
||||
netif_wake_queue(dev);
|
||||
#endif
|
||||
} else {
|
||||
if (netif_msg_tx_err(priv) && net_ratelimit())
|
||||
printk(KERN_WARNING
|
||||
"%s: end_xmit: spurious interrupt\n", dev->name);
|
||||
#ifdef CONFIG_NETDEVICES_MULTIQUEUE
|
||||
if (netif_subqueue_stopped(dev, queue))
|
||||
netif_wake_subqueue(dev, queue);
|
||||
#else
|
||||
if (netif_queue_stopped(dev))
|
||||
netif_wake_queue(dev);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -764,9 +750,7 @@ static void cpmac_hw_error(struct work_struct *work)
|
|||
barrier();
|
||||
atomic_dec(&priv->reset_pending);
|
||||
|
||||
for (i = 0; i < CPMAC_QUEUES; i++)
|
||||
netif_wake_subqueue(priv->dev, i);
|
||||
netif_wake_queue(priv->dev);
|
||||
netif_tx_wake_all_queues(priv->dev);
|
||||
cpmac_write(priv->regs, CPMAC_MAC_INT_ENABLE, 3);
|
||||
}
|
||||
|
||||
|
@ -795,7 +779,7 @@ static void cpmac_check_status(struct net_device *dev)
|
|||
dev->name, tx_code, tx_channel, macstatus);
|
||||
}
|
||||
|
||||
netif_stop_queue(dev);
|
||||
netif_tx_stop_all_queues(dev);
|
||||
cpmac_hw_stop(dev);
|
||||
if (schedule_work(&priv->reset_work))
|
||||
atomic_inc(&priv->reset_pending);
|
||||
|
@ -856,9 +840,7 @@ static void cpmac_tx_timeout(struct net_device *dev)
|
|||
barrier();
|
||||
atomic_dec(&priv->reset_pending);
|
||||
|
||||
netif_wake_queue(priv->dev);
|
||||
for (i = 0; i < CPMAC_QUEUES; i++)
|
||||
netif_wake_subqueue(dev, i);
|
||||
netif_tx_wake_all_queues(priv->dev);
|
||||
}
|
||||
|
||||
static int cpmac_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
|
@ -949,7 +931,7 @@ static void cpmac_adjust_link(struct net_device *dev)
|
|||
|
||||
spin_lock(&priv->lock);
|
||||
if (priv->phy->link) {
|
||||
netif_start_queue(dev);
|
||||
netif_tx_start_all_queues(dev);
|
||||
if (priv->phy->duplex != priv->oldduplex) {
|
||||
new_state = 1;
|
||||
priv->oldduplex = priv->phy->duplex;
|
||||
|
@ -963,10 +945,10 @@ static void cpmac_adjust_link(struct net_device *dev)
|
|||
if (!priv->oldlink) {
|
||||
new_state = 1;
|
||||
priv->oldlink = 1;
|
||||
netif_schedule(dev);
|
||||
netif_tx_schedule_all(dev);
|
||||
}
|
||||
} else if (priv->oldlink) {
|
||||
netif_stop_queue(dev);
|
||||
netif_tx_stop_all_queues(dev);
|
||||
new_state = 1;
|
||||
priv->oldlink = 0;
|
||||
priv->oldspeed = 0;
|
||||
|
@ -1086,7 +1068,7 @@ static int cpmac_stop(struct net_device *dev)
|
|||
struct cpmac_priv *priv = netdev_priv(dev);
|
||||
struct resource *mem;
|
||||
|
||||
netif_stop_queue(dev);
|
||||
netif_tx_stop_all_queues(dev);
|
||||
|
||||
cancel_work_sync(&priv->reset_work);
|
||||
napi_disable(&priv->napi);
|
||||
|
@ -1179,7 +1161,6 @@ static int __devinit cpmac_probe(struct platform_device *pdev)
|
|||
dev->set_multicast_list = cpmac_set_multicast_list;
|
||||
dev->tx_timeout = cpmac_tx_timeout;
|
||||
dev->ethtool_ops = &cpmac_ethtool_ops;
|
||||
dev->features |= NETIF_F_MULTI_QUEUE;
|
||||
|
||||
netif_napi_add(dev, &priv->napi, cpmac_poll, 64);
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include <linux/cache.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/inet_lro.h>
|
||||
#include "t3cdev.h"
|
||||
#include <asm/io.h>
|
||||
|
||||
|
@ -92,6 +93,7 @@ struct sge_fl { /* SGE per free-buffer list state */
|
|||
unsigned int gen; /* free list generation */
|
||||
struct fl_pg_chunk pg_chunk;/* page chunk cache */
|
||||
unsigned int use_pages; /* whether FL uses pages or sk_buffs */
|
||||
unsigned int order; /* order of page allocations */
|
||||
struct rx_desc *desc; /* address of HW Rx descriptor ring */
|
||||
struct rx_sw_desc *sdesc; /* address of SW Rx descriptor ring */
|
||||
dma_addr_t phys_addr; /* physical address of HW ring start */
|
||||
|
@ -116,12 +118,15 @@ struct sge_rspq { /* state for an SGE response queue */
|
|||
unsigned int polling; /* is the queue serviced through NAPI? */
|
||||
unsigned int holdoff_tmr; /* interrupt holdoff timer in 100ns */
|
||||
unsigned int next_holdoff; /* holdoff time for next interrupt */
|
||||
unsigned int rx_recycle_buf; /* whether recycling occurred
|
||||
within current sop-eop */
|
||||
struct rsp_desc *desc; /* address of HW response ring */
|
||||
dma_addr_t phys_addr; /* physical address of the ring */
|
||||
unsigned int cntxt_id; /* SGE context id for the response q */
|
||||
spinlock_t lock; /* guards response processing */
|
||||
struct sk_buff *rx_head; /* offload packet receive queue head */
|
||||
struct sk_buff *rx_tail; /* offload packet receive queue tail */
|
||||
struct sk_buff *pg_skb; /* used to build frag list in napi handler */
|
||||
|
||||
unsigned long offload_pkts;
|
||||
unsigned long offload_bundles;
|
||||
|
@ -169,16 +174,29 @@ enum { /* per port SGE statistics */
|
|||
SGE_PSTAT_TX_CSUM, /* # of TX checksum offloads */
|
||||
SGE_PSTAT_VLANEX, /* # of VLAN tag extractions */
|
||||
SGE_PSTAT_VLANINS, /* # of VLAN tag insertions */
|
||||
SGE_PSTAT_LRO_AGGR, /* # of page chunks added to LRO sessions */
|
||||
SGE_PSTAT_LRO_FLUSHED, /* # of flushed LRO sessions */
|
||||
SGE_PSTAT_LRO_NO_DESC, /* # of overflown LRO sessions */
|
||||
|
||||
SGE_PSTAT_MAX /* must be last */
|
||||
};
|
||||
|
||||
#define T3_MAX_LRO_SES 8
|
||||
#define T3_MAX_LRO_MAX_PKTS 64
|
||||
|
||||
struct sge_qset { /* an SGE queue set */
|
||||
struct adapter *adap;
|
||||
struct napi_struct napi;
|
||||
struct sge_rspq rspq;
|
||||
struct sge_fl fl[SGE_RXQ_PER_SET];
|
||||
struct sge_txq txq[SGE_TXQ_PER_SET];
|
||||
struct net_lro_mgr lro_mgr;
|
||||
struct net_lro_desc lro_desc[T3_MAX_LRO_SES];
|
||||
struct skb_frag_struct *lro_frag_tbl;
|
||||
int lro_nfrags;
|
||||
int lro_enabled;
|
||||
int lro_frag_len;
|
||||
void *lro_va;
|
||||
struct net_device *netdev;
|
||||
unsigned long txq_stopped; /* which Tx queues are stopped */
|
||||
struct timer_list tx_reclaim_timer; /* reclaims TX buffers */
|
||||
|
|
|
@ -351,6 +351,7 @@ struct tp_params {
|
|||
|
||||
struct qset_params { /* SGE queue set parameters */
|
||||
unsigned int polling; /* polling/interrupt service for rspq */
|
||||
unsigned int lro; /* large receive offload */
|
||||
unsigned int coalesce_usecs; /* irq coalescing timer */
|
||||
unsigned int rspq_size; /* # of entries in response queue */
|
||||
unsigned int fl_size; /* # of entries in regular free list */
|
||||
|
|
|
@ -111,10 +111,7 @@ struct ulp_iscsi_info {
|
|||
unsigned int llimit;
|
||||
unsigned int ulimit;
|
||||
unsigned int tagmask;
|
||||
unsigned int pgsz3;
|
||||
unsigned int pgsz2;
|
||||
unsigned int pgsz1;
|
||||
unsigned int pgsz0;
|
||||
u8 pgsz_factor[4];
|
||||
unsigned int max_rxsz;
|
||||
unsigned int max_txsz;
|
||||
struct pci_dev *pdev;
|
||||
|
|
|
@ -90,6 +90,7 @@ struct ch_qset_params {
|
|||
int32_t fl_size[2];
|
||||
int32_t intr_lat;
|
||||
int32_t polling;
|
||||
int32_t lro;
|
||||
int32_t cong_thres;
|
||||
};
|
||||
|
||||
|
|
|
@ -1212,6 +1212,9 @@ static char stats_strings[][ETH_GSTRING_LEN] = {
|
|||
"VLANinsertions ",
|
||||
"TxCsumOffload ",
|
||||
"RxCsumGood ",
|
||||
"LroAggregated ",
|
||||
"LroFlushed ",
|
||||
"LroNoDesc ",
|
||||
"RxDrops ",
|
||||
|
||||
"CheckTXEnToggled ",
|
||||
|
@ -1340,6 +1343,9 @@ static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
|
|||
*data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_VLANINS);
|
||||
*data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_TX_CSUM);
|
||||
*data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_RX_CSUM_GOOD);
|
||||
*data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_LRO_AGGR);
|
||||
*data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_LRO_FLUSHED);
|
||||
*data++ = collect_sge_port_stats(adapter, pi, SGE_PSTAT_LRO_NO_DESC);
|
||||
*data++ = s->rx_cong_drops;
|
||||
|
||||
*data++ = s->num_toggled;
|
||||
|
@ -1558,6 +1564,13 @@ static int set_rx_csum(struct net_device *dev, u32 data)
|
|||
struct port_info *p = netdev_priv(dev);
|
||||
|
||||
p->rx_csum_offload = data;
|
||||
if (!data) {
|
||||
struct adapter *adap = p->adapter;
|
||||
int i;
|
||||
|
||||
for (i = p->first_qset; i < p->first_qset + p->nqsets; i++)
|
||||
adap->sge.qs[i].lro_enabled = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1830,6 +1843,11 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
|
|||
}
|
||||
}
|
||||
}
|
||||
if (t.lro >= 0) {
|
||||
struct sge_qset *qs = &adapter->sge.qs[t.qset_idx];
|
||||
q->lro = t.lro;
|
||||
qs->lro_enabled = t.lro;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHELSIO_GET_QSET_PARAMS:{
|
||||
|
@ -1849,6 +1867,7 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
|
|||
t.fl_size[0] = q->fl_size;
|
||||
t.fl_size[1] = q->jumbo_size;
|
||||
t.polling = q->polling;
|
||||
t.lro = q->lro;
|
||||
t.intr_lat = q->coalesce_usecs;
|
||||
t.cong_thres = q->cong_thres;
|
||||
|
||||
|
|
|
@ -207,6 +207,17 @@ static int cxgb_ulp_iscsi_ctl(struct adapter *adapter, unsigned int req,
|
|||
break;
|
||||
case ULP_ISCSI_SET_PARAMS:
|
||||
t3_write_reg(adapter, A_ULPRX_ISCSI_TAGMASK, uiip->tagmask);
|
||||
/* set MaxRxData and MaxCoalesceSize to 16224 */
|
||||
t3_write_reg(adapter, A_TP_PARA_REG2, 0x3f603f60);
|
||||
/* program the ddp page sizes */
|
||||
{
|
||||
int i;
|
||||
unsigned int val = 0;
|
||||
for (i = 0; i < 4; i++)
|
||||
val |= (uiip->pgsz_factor[i] & 0xF) << (8 * i);
|
||||
if (val)
|
||||
t3_write_reg(adapter, A_ULPRX_ISCSI_PSZ, val);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ret = -EOPNOTSUPP;
|
||||
|
@ -1255,6 +1266,25 @@ static inline void unregister_tdev(struct t3cdev *tdev)
|
|||
mutex_unlock(&cxgb3_db_lock);
|
||||
}
|
||||
|
||||
static inline int adap2type(struct adapter *adapter)
|
||||
{
|
||||
int type = 0;
|
||||
|
||||
switch (adapter->params.rev) {
|
||||
case T3_REV_A:
|
||||
type = T3A;
|
||||
break;
|
||||
case T3_REV_B:
|
||||
case T3_REV_B2:
|
||||
type = T3B;
|
||||
break;
|
||||
case T3_REV_C:
|
||||
type = T3C;
|
||||
break;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
void __devinit cxgb3_adapter_ofld(struct adapter *adapter)
|
||||
{
|
||||
struct t3cdev *tdev = &adapter->tdev;
|
||||
|
@ -1264,7 +1294,7 @@ void __devinit cxgb3_adapter_ofld(struct adapter *adapter)
|
|||
cxgb3_set_dummy_ops(tdev);
|
||||
tdev->send = t3_offload_tx;
|
||||
tdev->ctl = cxgb_offload_ctl;
|
||||
tdev->type = adapter->params.rev == 0 ? T3A : T3B;
|
||||
tdev->type = adap2type(adapter);
|
||||
|
||||
register_tdev(tdev);
|
||||
}
|
||||
|
|
|
@ -337,7 +337,7 @@ struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct neighbour *neigh,
|
|||
atomic_set(&e->refcnt, 1);
|
||||
neigh_replace(e, neigh);
|
||||
if (neigh->dev->priv_flags & IFF_802_1Q_VLAN)
|
||||
e->vlan = vlan_dev_info(neigh->dev)->vlan_id;
|
||||
e->vlan = vlan_dev_vlan_id(neigh->dev);
|
||||
else
|
||||
e->vlan = VLAN_NONE;
|
||||
spin_unlock(&e->lock);
|
||||
|
|
|
@ -1517,16 +1517,18 @@
|
|||
|
||||
#define A_ULPRX_ISCSI_TAGMASK 0x514
|
||||
|
||||
#define S_HPZ0 0
|
||||
#define M_HPZ0 0xf
|
||||
#define V_HPZ0(x) ((x) << S_HPZ0)
|
||||
#define G_HPZ0(x) (((x) >> S_HPZ0) & M_HPZ0)
|
||||
#define A_ULPRX_ISCSI_PSZ 0x518
|
||||
|
||||
#define A_ULPRX_TDDP_LLIMIT 0x51c
|
||||
|
||||
#define A_ULPRX_TDDP_ULIMIT 0x520
|
||||
#define A_ULPRX_TDDP_PSZ 0x528
|
||||
|
||||
#define S_HPZ0 0
|
||||
#define M_HPZ0 0xf
|
||||
#define V_HPZ0(x) ((x) << S_HPZ0)
|
||||
#define G_HPZ0(x) (((x) >> S_HPZ0) & M_HPZ0)
|
||||
|
||||
#define A_ULPRX_STAG_LLIMIT 0x52c
|
||||
|
||||
#define A_ULPRX_STAG_ULIMIT 0x530
|
||||
|
|
|
@ -55,6 +55,9 @@
|
|||
* directly.
|
||||
*/
|
||||
#define FL0_PG_CHUNK_SIZE 2048
|
||||
#define FL0_PG_ORDER 0
|
||||
#define FL1_PG_CHUNK_SIZE (PAGE_SIZE > 8192 ? 16384 : 8192)
|
||||
#define FL1_PG_ORDER (PAGE_SIZE > 8192 ? 0 : 1)
|
||||
|
||||
#define SGE_RX_DROP_THRES 16
|
||||
|
||||
|
@ -359,7 +362,7 @@ static void free_rx_bufs(struct pci_dev *pdev, struct sge_fl *q)
|
|||
}
|
||||
|
||||
if (q->pg_chunk.page) {
|
||||
__free_page(q->pg_chunk.page);
|
||||
__free_pages(q->pg_chunk.page, q->order);
|
||||
q->pg_chunk.page = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -376,13 +379,16 @@ static void free_rx_bufs(struct pci_dev *pdev, struct sge_fl *q)
|
|||
* Add a buffer of the given length to the supplied HW and SW Rx
|
||||
* descriptors.
|
||||
*/
|
||||
static inline void add_one_rx_buf(void *va, unsigned int len,
|
||||
struct rx_desc *d, struct rx_sw_desc *sd,
|
||||
unsigned int gen, struct pci_dev *pdev)
|
||||
static inline int add_one_rx_buf(void *va, unsigned int len,
|
||||
struct rx_desc *d, struct rx_sw_desc *sd,
|
||||
unsigned int gen, struct pci_dev *pdev)
|
||||
{
|
||||
dma_addr_t mapping;
|
||||
|
||||
mapping = pci_map_single(pdev, va, len, PCI_DMA_FROMDEVICE);
|
||||
if (unlikely(pci_dma_mapping_error(mapping)))
|
||||
return -ENOMEM;
|
||||
|
||||
pci_unmap_addr_set(sd, dma_addr, mapping);
|
||||
|
||||
d->addr_lo = cpu_to_be32(mapping);
|
||||
|
@ -390,12 +396,14 @@ static inline void add_one_rx_buf(void *va, unsigned int len,
|
|||
wmb();
|
||||
d->len_gen = cpu_to_be32(V_FLD_GEN1(gen));
|
||||
d->gen2 = cpu_to_be32(V_FLD_GEN2(gen));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int alloc_pg_chunk(struct sge_fl *q, struct rx_sw_desc *sd, gfp_t gfp)
|
||||
static int alloc_pg_chunk(struct sge_fl *q, struct rx_sw_desc *sd, gfp_t gfp,
|
||||
unsigned int order)
|
||||
{
|
||||
if (!q->pg_chunk.page) {
|
||||
q->pg_chunk.page = alloc_page(gfp);
|
||||
q->pg_chunk.page = alloc_pages(gfp, order);
|
||||
if (unlikely(!q->pg_chunk.page))
|
||||
return -ENOMEM;
|
||||
q->pg_chunk.va = page_address(q->pg_chunk.page);
|
||||
|
@ -404,7 +412,7 @@ static int alloc_pg_chunk(struct sge_fl *q, struct rx_sw_desc *sd, gfp_t gfp)
|
|||
sd->pg_chunk = q->pg_chunk;
|
||||
|
||||
q->pg_chunk.offset += q->buf_size;
|
||||
if (q->pg_chunk.offset == PAGE_SIZE)
|
||||
if (q->pg_chunk.offset == (PAGE_SIZE << order))
|
||||
q->pg_chunk.page = NULL;
|
||||
else {
|
||||
q->pg_chunk.va += q->buf_size;
|
||||
|
@ -424,15 +432,18 @@ static int alloc_pg_chunk(struct sge_fl *q, struct rx_sw_desc *sd, gfp_t gfp)
|
|||
* allocated with the supplied gfp flags. The caller must assure that
|
||||
* @n does not exceed the queue's capacity.
|
||||
*/
|
||||
static void refill_fl(struct adapter *adap, struct sge_fl *q, int n, gfp_t gfp)
|
||||
static int refill_fl(struct adapter *adap, struct sge_fl *q, int n, gfp_t gfp)
|
||||
{
|
||||
void *buf_start;
|
||||
struct rx_sw_desc *sd = &q->sdesc[q->pidx];
|
||||
struct rx_desc *d = &q->desc[q->pidx];
|
||||
unsigned int count = 0;
|
||||
|
||||
while (n--) {
|
||||
int err;
|
||||
|
||||
if (q->use_pages) {
|
||||
if (unlikely(alloc_pg_chunk(q, sd, gfp))) {
|
||||
if (unlikely(alloc_pg_chunk(q, sd, gfp, q->order))) {
|
||||
nomem: q->alloc_failed++;
|
||||
break;
|
||||
}
|
||||
|
@ -447,8 +458,16 @@ nomem: q->alloc_failed++;
|
|||
buf_start = skb->data;
|
||||
}
|
||||
|
||||
add_one_rx_buf(buf_start, q->buf_size, d, sd, q->gen,
|
||||
adap->pdev);
|
||||
err = add_one_rx_buf(buf_start, q->buf_size, d, sd, q->gen,
|
||||
adap->pdev);
|
||||
if (unlikely(err)) {
|
||||
if (!q->use_pages) {
|
||||
kfree_skb(sd->skb);
|
||||
sd->skb = NULL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
d++;
|
||||
sd++;
|
||||
if (++q->pidx == q->size) {
|
||||
|
@ -458,14 +477,19 @@ nomem: q->alloc_failed++;
|
|||
d = q->desc;
|
||||
}
|
||||
q->credits++;
|
||||
count++;
|
||||
}
|
||||
wmb();
|
||||
t3_write_reg(adap, A_SG_KDOORBELL, V_EGRCNTX(q->cntxt_id));
|
||||
if (likely(count))
|
||||
t3_write_reg(adap, A_SG_KDOORBELL, V_EGRCNTX(q->cntxt_id));
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static inline void __refill_fl(struct adapter *adap, struct sge_fl *fl)
|
||||
{
|
||||
refill_fl(adap, fl, min(16U, fl->size - fl->credits), GFP_ATOMIC);
|
||||
refill_fl(adap, fl, min(16U, fl->size - fl->credits),
|
||||
GFP_ATOMIC | __GFP_COMP);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -560,6 +584,8 @@ static void t3_reset_qset(struct sge_qset *q)
|
|||
memset(q->txq, 0, sizeof(struct sge_txq) * SGE_TXQ_PER_SET);
|
||||
q->txq_stopped = 0;
|
||||
memset(&q->tx_reclaim_timer, 0, sizeof(q->tx_reclaim_timer));
|
||||
kfree(q->lro_frag_tbl);
|
||||
q->lro_nfrags = q->lro_frag_len = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -740,19 +766,22 @@ static struct sk_buff *get_packet(struct adapter *adap, struct sge_fl *fl,
|
|||
* that are page chunks rather than sk_buffs.
|
||||
*/
|
||||
static struct sk_buff *get_packet_pg(struct adapter *adap, struct sge_fl *fl,
|
||||
unsigned int len, unsigned int drop_thres)
|
||||
struct sge_rspq *q, unsigned int len,
|
||||
unsigned int drop_thres)
|
||||
{
|
||||
struct sk_buff *skb = NULL;
|
||||
struct sk_buff *newskb, *skb;
|
||||
struct rx_sw_desc *sd = &fl->sdesc[fl->cidx];
|
||||
|
||||
if (len <= SGE_RX_COPY_THRES) {
|
||||
skb = alloc_skb(len, GFP_ATOMIC);
|
||||
if (likely(skb != NULL)) {
|
||||
__skb_put(skb, len);
|
||||
newskb = skb = q->pg_skb;
|
||||
|
||||
if (!skb && (len <= SGE_RX_COPY_THRES)) {
|
||||
newskb = alloc_skb(len, GFP_ATOMIC);
|
||||
if (likely(newskb != NULL)) {
|
||||
__skb_put(newskb, len);
|
||||
pci_dma_sync_single_for_cpu(adap->pdev,
|
||||
pci_unmap_addr(sd, dma_addr), len,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
memcpy(skb->data, sd->pg_chunk.va, len);
|
||||
memcpy(newskb->data, sd->pg_chunk.va, len);
|
||||
pci_dma_sync_single_for_device(adap->pdev,
|
||||
pci_unmap_addr(sd, dma_addr), len,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
|
@ -761,14 +790,16 @@ static struct sk_buff *get_packet_pg(struct adapter *adap, struct sge_fl *fl,
|
|||
recycle:
|
||||
fl->credits--;
|
||||
recycle_rx_buf(adap, fl, fl->cidx);
|
||||
return skb;
|
||||
q->rx_recycle_buf++;
|
||||
return newskb;
|
||||
}
|
||||
|
||||
if (unlikely(fl->credits <= drop_thres))
|
||||
if (unlikely(q->rx_recycle_buf || (!skb && fl->credits <= drop_thres)))
|
||||
goto recycle;
|
||||
|
||||
skb = alloc_skb(SGE_RX_PULL_LEN, GFP_ATOMIC);
|
||||
if (unlikely(!skb)) {
|
||||
if (!skb)
|
||||
newskb = alloc_skb(SGE_RX_PULL_LEN, GFP_ATOMIC);
|
||||
if (unlikely(!newskb)) {
|
||||
if (!drop_thres)
|
||||
return NULL;
|
||||
goto recycle;
|
||||
|
@ -776,21 +807,29 @@ static struct sk_buff *get_packet_pg(struct adapter *adap, struct sge_fl *fl,
|
|||
|
||||
pci_unmap_single(adap->pdev, pci_unmap_addr(sd, dma_addr),
|
||||
fl->buf_size, PCI_DMA_FROMDEVICE);
|
||||
__skb_put(skb, SGE_RX_PULL_LEN);
|
||||
memcpy(skb->data, sd->pg_chunk.va, SGE_RX_PULL_LEN);
|
||||
skb_fill_page_desc(skb, 0, sd->pg_chunk.page,
|
||||
sd->pg_chunk.offset + SGE_RX_PULL_LEN,
|
||||
len - SGE_RX_PULL_LEN);
|
||||
skb->len = len;
|
||||
skb->data_len = len - SGE_RX_PULL_LEN;
|
||||
skb->truesize += skb->data_len;
|
||||
if (!skb) {
|
||||
__skb_put(newskb, SGE_RX_PULL_LEN);
|
||||
memcpy(newskb->data, sd->pg_chunk.va, SGE_RX_PULL_LEN);
|
||||
skb_fill_page_desc(newskb, 0, sd->pg_chunk.page,
|
||||
sd->pg_chunk.offset + SGE_RX_PULL_LEN,
|
||||
len - SGE_RX_PULL_LEN);
|
||||
newskb->len = len;
|
||||
newskb->data_len = len - SGE_RX_PULL_LEN;
|
||||
} else {
|
||||
skb_fill_page_desc(newskb, skb_shinfo(newskb)->nr_frags,
|
||||
sd->pg_chunk.page,
|
||||
sd->pg_chunk.offset, len);
|
||||
newskb->len += len;
|
||||
newskb->data_len += len;
|
||||
}
|
||||
newskb->truesize += newskb->data_len;
|
||||
|
||||
fl->credits--;
|
||||
/*
|
||||
* We do not refill FLs here, we let the caller do it to overlap a
|
||||
* prefetch.
|
||||
*/
|
||||
return skb;
|
||||
return newskb;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1831,9 +1870,10 @@ static void restart_tx(struct sge_qset *qs)
|
|||
* if it was immediate data in a response.
|
||||
*/
|
||||
static void rx_eth(struct adapter *adap, struct sge_rspq *rq,
|
||||
struct sk_buff *skb, int pad)
|
||||
struct sk_buff *skb, int pad, int lro)
|
||||
{
|
||||
struct cpl_rx_pkt *p = (struct cpl_rx_pkt *)(skb->data + pad);
|
||||
struct sge_qset *qs = rspq_to_qset(rq);
|
||||
struct port_info *pi;
|
||||
|
||||
skb_pull(skb, sizeof(*p) + pad);
|
||||
|
@ -1850,18 +1890,202 @@ static void rx_eth(struct adapter *adap, struct sge_rspq *rq,
|
|||
if (unlikely(p->vlan_valid)) {
|
||||
struct vlan_group *grp = pi->vlan_grp;
|
||||
|
||||
rspq_to_qset(rq)->port_stats[SGE_PSTAT_VLANEX]++;
|
||||
qs->port_stats[SGE_PSTAT_VLANEX]++;
|
||||
if (likely(grp))
|
||||
__vlan_hwaccel_rx(skb, grp, ntohs(p->vlan),
|
||||
rq->polling);
|
||||
if (lro)
|
||||
lro_vlan_hwaccel_receive_skb(&qs->lro_mgr, skb,
|
||||
grp,
|
||||
ntohs(p->vlan),
|
||||
p);
|
||||
else
|
||||
__vlan_hwaccel_rx(skb, grp, ntohs(p->vlan),
|
||||
rq->polling);
|
||||
else
|
||||
dev_kfree_skb_any(skb);
|
||||
} else if (rq->polling)
|
||||
netif_receive_skb(skb);
|
||||
else
|
||||
} else if (rq->polling) {
|
||||
if (lro)
|
||||
lro_receive_skb(&qs->lro_mgr, skb, p);
|
||||
else
|
||||
netif_receive_skb(skb);
|
||||
} else
|
||||
netif_rx(skb);
|
||||
}
|
||||
|
||||
static inline int is_eth_tcp(u32 rss)
|
||||
{
|
||||
return G_HASHTYPE(ntohl(rss)) == RSS_HASH_4_TUPLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* lro_frame_ok - check if an ingress packet is eligible for LRO
|
||||
* @p: the CPL header of the packet
|
||||
*
|
||||
* Returns true if a received packet is eligible for LRO.
|
||||
* The following conditions must be true:
|
||||
* - packet is TCP/IP Ethernet II (checked elsewhere)
|
||||
* - not an IP fragment
|
||||
* - no IP options
|
||||
* - TCP/IP checksums are correct
|
||||
* - the packet is for this host
|
||||
*/
|
||||
static inline int lro_frame_ok(const struct cpl_rx_pkt *p)
|
||||
{
|
||||
const struct ethhdr *eh = (struct ethhdr *)(p + 1);
|
||||
const struct iphdr *ih = (struct iphdr *)(eh + 1);
|
||||
|
||||
return (*((u8 *)p + 1) & 0x90) == 0x10 && p->csum == htons(0xffff) &&
|
||||
eh->h_proto == htons(ETH_P_IP) && ih->ihl == (sizeof(*ih) >> 2);
|
||||
}
|
||||
|
||||
#define TCP_FLAG_MASK (TCP_FLAG_CWR | TCP_FLAG_ECE | TCP_FLAG_URG |\
|
||||
TCP_FLAG_ACK | TCP_FLAG_PSH | TCP_FLAG_RST |\
|
||||
TCP_FLAG_SYN | TCP_FLAG_FIN)
|
||||
#define TSTAMP_WORD ((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |\
|
||||
(TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP)
|
||||
|
||||
/**
|
||||
* lro_segment_ok - check if a TCP segment is eligible for LRO
|
||||
* @tcph: the TCP header of the packet
|
||||
*
|
||||
* Returns true if a TCP packet is eligible for LRO. This requires that
|
||||
* the packet have only the ACK flag set and no TCP options besides
|
||||
* time stamps.
|
||||
*/
|
||||
static inline int lro_segment_ok(const struct tcphdr *tcph)
|
||||
{
|
||||
int optlen;
|
||||
|
||||
if (unlikely((tcp_flag_word(tcph) & TCP_FLAG_MASK) != TCP_FLAG_ACK))
|
||||
return 0;
|
||||
|
||||
optlen = (tcph->doff << 2) - sizeof(*tcph);
|
||||
if (optlen) {
|
||||
const u32 *opt = (const u32 *)(tcph + 1);
|
||||
|
||||
if (optlen != TCPOLEN_TSTAMP_ALIGNED ||
|
||||
*opt != htonl(TSTAMP_WORD) || !opt[2])
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int t3_get_lro_header(void **eh, void **iph, void **tcph,
|
||||
u64 *hdr_flags, void *priv)
|
||||
{
|
||||
const struct cpl_rx_pkt *cpl = priv;
|
||||
|
||||
if (!lro_frame_ok(cpl))
|
||||
return -1;
|
||||
|
||||
*eh = (struct ethhdr *)(cpl + 1);
|
||||
*iph = (struct iphdr *)((struct ethhdr *)*eh + 1);
|
||||
*tcph = (struct tcphdr *)((struct iphdr *)*iph + 1);
|
||||
|
||||
if (!lro_segment_ok(*tcph))
|
||||
return -1;
|
||||
|
||||
*hdr_flags = LRO_IPV4 | LRO_TCP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int t3_get_skb_header(struct sk_buff *skb,
|
||||
void **iph, void **tcph, u64 *hdr_flags,
|
||||
void *priv)
|
||||
{
|
||||
void *eh;
|
||||
|
||||
return t3_get_lro_header(&eh, iph, tcph, hdr_flags, priv);
|
||||
}
|
||||
|
||||
static int t3_get_frag_header(struct skb_frag_struct *frag, void **eh,
|
||||
void **iph, void **tcph, u64 *hdr_flags,
|
||||
void *priv)
|
||||
{
|
||||
return t3_get_lro_header(eh, iph, tcph, hdr_flags, priv);
|
||||
}
|
||||
|
||||
/**
|
||||
* lro_add_page - add a page chunk to an LRO session
|
||||
* @adap: the adapter
|
||||
* @qs: the associated queue set
|
||||
* @fl: the free list containing the page chunk to add
|
||||
* @len: packet length
|
||||
* @complete: Indicates the last fragment of a frame
|
||||
*
|
||||
* Add a received packet contained in a page chunk to an existing LRO
|
||||
* session.
|
||||
*/
|
||||
static void lro_add_page(struct adapter *adap, struct sge_qset *qs,
|
||||
struct sge_fl *fl, int len, int complete)
|
||||
{
|
||||
struct rx_sw_desc *sd = &fl->sdesc[fl->cidx];
|
||||
struct cpl_rx_pkt *cpl;
|
||||
struct skb_frag_struct *rx_frag = qs->lro_frag_tbl;
|
||||
int nr_frags = qs->lro_nfrags, frag_len = qs->lro_frag_len;
|
||||
int offset = 0;
|
||||
|
||||
if (!nr_frags) {
|
||||
offset = 2 + sizeof(struct cpl_rx_pkt);
|
||||
qs->lro_va = cpl = sd->pg_chunk.va + 2;
|
||||
}
|
||||
|
||||
fl->credits--;
|
||||
|
||||
len -= offset;
|
||||
pci_unmap_single(adap->pdev, pci_unmap_addr(sd, dma_addr),
|
||||
fl->buf_size, PCI_DMA_FROMDEVICE);
|
||||
|
||||
rx_frag += nr_frags;
|
||||
rx_frag->page = sd->pg_chunk.page;
|
||||
rx_frag->page_offset = sd->pg_chunk.offset + offset;
|
||||
rx_frag->size = len;
|
||||
frag_len += len;
|
||||
qs->lro_nfrags++;
|
||||
qs->lro_frag_len = frag_len;
|
||||
|
||||
if (!complete)
|
||||
return;
|
||||
|
||||
qs->lro_nfrags = qs->lro_frag_len = 0;
|
||||
cpl = qs->lro_va;
|
||||
|
||||
if (unlikely(cpl->vlan_valid)) {
|
||||
struct net_device *dev = qs->netdev;
|
||||
struct port_info *pi = netdev_priv(dev);
|
||||
struct vlan_group *grp = pi->vlan_grp;
|
||||
|
||||
if (likely(grp != NULL)) {
|
||||
lro_vlan_hwaccel_receive_frags(&qs->lro_mgr,
|
||||
qs->lro_frag_tbl,
|
||||
frag_len, frag_len,
|
||||
grp, ntohs(cpl->vlan),
|
||||
cpl, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
lro_receive_frags(&qs->lro_mgr, qs->lro_frag_tbl,
|
||||
frag_len, frag_len, cpl, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* init_lro_mgr - initialize a LRO manager object
|
||||
* @lro_mgr: the LRO manager object
|
||||
*/
|
||||
static void init_lro_mgr(struct sge_qset *qs, struct net_lro_mgr *lro_mgr)
|
||||
{
|
||||
lro_mgr->dev = qs->netdev;
|
||||
lro_mgr->features = LRO_F_NAPI;
|
||||
lro_mgr->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
lro_mgr->ip_summed_aggr = CHECKSUM_UNNECESSARY;
|
||||
lro_mgr->max_desc = T3_MAX_LRO_SES;
|
||||
lro_mgr->lro_arr = qs->lro_desc;
|
||||
lro_mgr->get_frag_header = t3_get_frag_header;
|
||||
lro_mgr->get_skb_header = t3_get_skb_header;
|
||||
lro_mgr->max_aggr = T3_MAX_LRO_MAX_PKTS;
|
||||
if (lro_mgr->max_aggr > MAX_SKB_FRAGS)
|
||||
lro_mgr->max_aggr = MAX_SKB_FRAGS;
|
||||
}
|
||||
|
||||
/**
|
||||
* handle_rsp_cntrl_info - handles control information in a response
|
||||
* @qs: the queue set corresponding to the response
|
||||
|
@ -1947,6 +2171,12 @@ static inline int is_new_response(const struct rsp_desc *r,
|
|||
return (r->intr_gen & F_RSPD_GEN2) == q->gen;
|
||||
}
|
||||
|
||||
static inline void clear_rspq_bufstate(struct sge_rspq * const q)
|
||||
{
|
||||
q->pg_skb = NULL;
|
||||
q->rx_recycle_buf = 0;
|
||||
}
|
||||
|
||||
#define RSPD_GTS_MASK (F_RSPD_TXQ0_GTS | F_RSPD_TXQ1_GTS)
|
||||
#define RSPD_CTRL_MASK (RSPD_GTS_MASK | \
|
||||
V_RSPD_TXQ0_CR(M_RSPD_TXQ0_CR) | \
|
||||
|
@ -1984,10 +2214,11 @@ static int process_responses(struct adapter *adap, struct sge_qset *qs,
|
|||
q->next_holdoff = q->holdoff_tmr;
|
||||
|
||||
while (likely(budget_left && is_new_response(r, q))) {
|
||||
int eth, ethpad = 2;
|
||||
int packet_complete, eth, ethpad = 2, lro = qs->lro_enabled;
|
||||
struct sk_buff *skb = NULL;
|
||||
u32 len, flags = ntohl(r->flags);
|
||||
__be32 rss_hi = *(const __be32 *)r, rss_lo = r->rss_hdr.rss_hash_val;
|
||||
__be32 rss_hi = *(const __be32 *)r,
|
||||
rss_lo = r->rss_hdr.rss_hash_val;
|
||||
|
||||
eth = r->rss_hdr.opcode == CPL_RX_PKT;
|
||||
|
||||
|
@ -2015,6 +2246,9 @@ static int process_responses(struct adapter *adap, struct sge_qset *qs,
|
|||
} else if ((len = ntohl(r->len_cq)) != 0) {
|
||||
struct sge_fl *fl;
|
||||
|
||||
if (eth)
|
||||
lro = qs->lro_enabled && is_eth_tcp(rss_hi);
|
||||
|
||||
fl = (len & F_RSPD_FLQ) ? &qs->fl[1] : &qs->fl[0];
|
||||
if (fl->use_pages) {
|
||||
void *addr = fl->sdesc[fl->cidx].pg_chunk.va;
|
||||
|
@ -2024,9 +2258,18 @@ static int process_responses(struct adapter *adap, struct sge_qset *qs,
|
|||
prefetch(addr + L1_CACHE_BYTES);
|
||||
#endif
|
||||
__refill_fl(adap, fl);
|
||||
if (lro > 0) {
|
||||
lro_add_page(adap, qs, fl,
|
||||
G_RSPD_LEN(len),
|
||||
flags & F_RSPD_EOP);
|
||||
goto next_fl;
|
||||
}
|
||||
|
||||
skb = get_packet_pg(adap, fl, G_RSPD_LEN(len),
|
||||
eth ? SGE_RX_DROP_THRES : 0);
|
||||
skb = get_packet_pg(adap, fl, q,
|
||||
G_RSPD_LEN(len),
|
||||
eth ?
|
||||
SGE_RX_DROP_THRES : 0);
|
||||
q->pg_skb = skb;
|
||||
} else
|
||||
skb = get_packet(adap, fl, G_RSPD_LEN(len),
|
||||
eth ? SGE_RX_DROP_THRES : 0);
|
||||
|
@ -2036,7 +2279,7 @@ static int process_responses(struct adapter *adap, struct sge_qset *qs,
|
|||
q->rx_drops++;
|
||||
} else if (unlikely(r->rss_hdr.opcode == CPL_TRACE_PKT))
|
||||
__skb_pull(skb, 2);
|
||||
|
||||
next_fl:
|
||||
if (++fl->cidx == fl->size)
|
||||
fl->cidx = 0;
|
||||
} else
|
||||
|
@ -2060,9 +2303,13 @@ static int process_responses(struct adapter *adap, struct sge_qset *qs,
|
|||
q->credits = 0;
|
||||
}
|
||||
|
||||
if (likely(skb != NULL)) {
|
||||
packet_complete = flags &
|
||||
(F_RSPD_EOP | F_RSPD_IMM_DATA_VALID |
|
||||
F_RSPD_ASYNC_NOTIF);
|
||||
|
||||
if (skb != NULL && packet_complete) {
|
||||
if (eth)
|
||||
rx_eth(adap, q, skb, ethpad);
|
||||
rx_eth(adap, q, skb, ethpad, lro);
|
||||
else {
|
||||
q->offload_pkts++;
|
||||
/* Preserve the RSS info in csum & priority */
|
||||
|
@ -2072,11 +2319,19 @@ static int process_responses(struct adapter *adap, struct sge_qset *qs,
|
|||
offload_skbs,
|
||||
ngathered);
|
||||
}
|
||||
|
||||
if (flags & F_RSPD_EOP)
|
||||
clear_rspq_bufstate(q);
|
||||
}
|
||||
--budget_left;
|
||||
}
|
||||
|
||||
deliver_partial_bundle(&adap->tdev, q, offload_skbs, ngathered);
|
||||
lro_flush_all(&qs->lro_mgr);
|
||||
qs->port_stats[SGE_PSTAT_LRO_AGGR] = qs->lro_mgr.stats.aggregated;
|
||||
qs->port_stats[SGE_PSTAT_LRO_FLUSHED] = qs->lro_mgr.stats.flushed;
|
||||
qs->port_stats[SGE_PSTAT_LRO_NO_DESC] = qs->lro_mgr.stats.no_desc;
|
||||
|
||||
if (sleeping)
|
||||
check_ring_db(adap, qs, sleeping);
|
||||
|
||||
|
@ -2618,8 +2873,9 @@ int t3_sge_alloc_qset(struct adapter *adapter, unsigned int id, int nports,
|
|||
int irq_vec_idx, const struct qset_params *p,
|
||||
int ntxq, struct net_device *dev)
|
||||
{
|
||||
int i, ret = -ENOMEM;
|
||||
int i, avail, ret = -ENOMEM;
|
||||
struct sge_qset *q = &adapter->sge.qs[id];
|
||||
struct net_lro_mgr *lro_mgr = &q->lro_mgr;
|
||||
|
||||
init_qset_cntxt(q, id);
|
||||
init_timer(&q->tx_reclaim_timer);
|
||||
|
@ -2687,11 +2943,23 @@ int t3_sge_alloc_qset(struct adapter *adapter, unsigned int id, int nports,
|
|||
#else
|
||||
q->fl[0].buf_size = SGE_RX_SM_BUF_SIZE + sizeof(struct cpl_rx_data);
|
||||
#endif
|
||||
q->fl[0].use_pages = FL0_PG_CHUNK_SIZE > 0;
|
||||
#if FL1_PG_CHUNK_SIZE > 0
|
||||
q->fl[1].buf_size = FL1_PG_CHUNK_SIZE;
|
||||
#else
|
||||
q->fl[1].buf_size = is_offload(adapter) ?
|
||||
(16 * 1024) - SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) :
|
||||
MAX_FRAME_SIZE + 2 + sizeof(struct cpl_rx_pkt);
|
||||
#endif
|
||||
|
||||
q->fl[0].use_pages = FL0_PG_CHUNK_SIZE > 0;
|
||||
q->fl[1].use_pages = FL1_PG_CHUNK_SIZE > 0;
|
||||
q->fl[0].order = FL0_PG_ORDER;
|
||||
q->fl[1].order = FL1_PG_ORDER;
|
||||
|
||||
q->lro_frag_tbl = kcalloc(MAX_FRAME_SIZE / FL1_PG_CHUNK_SIZE + 1,
|
||||
sizeof(struct skb_frag_struct),
|
||||
GFP_KERNEL);
|
||||
q->lro_nfrags = q->lro_frag_len = 0;
|
||||
spin_lock_irq(&adapter->sge.reg_lock);
|
||||
|
||||
/* FL threshold comparison uses < */
|
||||
|
@ -2742,8 +3010,23 @@ int t3_sge_alloc_qset(struct adapter *adapter, unsigned int id, int nports,
|
|||
q->netdev = dev;
|
||||
t3_update_qset_coalesce(q, p);
|
||||
|
||||
refill_fl(adapter, &q->fl[0], q->fl[0].size, GFP_KERNEL);
|
||||
refill_fl(adapter, &q->fl[1], q->fl[1].size, GFP_KERNEL);
|
||||
init_lro_mgr(q, lro_mgr);
|
||||
|
||||
avail = refill_fl(adapter, &q->fl[0], q->fl[0].size,
|
||||
GFP_KERNEL | __GFP_COMP);
|
||||
if (!avail) {
|
||||
CH_ALERT(adapter, "free list queue 0 initialization failed\n");
|
||||
goto err;
|
||||
}
|
||||
if (avail < q->fl[0].size)
|
||||
CH_WARN(adapter, "free list queue 0 enabled with %d credits\n",
|
||||
avail);
|
||||
|
||||
avail = refill_fl(adapter, &q->fl[1], q->fl[1].size,
|
||||
GFP_KERNEL | __GFP_COMP);
|
||||
if (avail < q->fl[1].size)
|
||||
CH_WARN(adapter, "free list queue 1 enabled with %d credits\n",
|
||||
avail);
|
||||
refill_rspq(adapter, &q->rspq, q->rspq.size - 1);
|
||||
|
||||
t3_write_reg(adapter, A_SG_GTS, V_RSPQ(q->rspq.cntxt_id) |
|
||||
|
@ -2752,9 +3035,9 @@ int t3_sge_alloc_qset(struct adapter *adapter, unsigned int id, int nports,
|
|||
mod_timer(&q->tx_reclaim_timer, jiffies + TX_RECLAIM_PERIOD);
|
||||
return 0;
|
||||
|
||||
err_unlock:
|
||||
err_unlock:
|
||||
spin_unlock_irq(&adapter->sge.reg_lock);
|
||||
err:
|
||||
err:
|
||||
t3_free_qset(adapter, q);
|
||||
return ret;
|
||||
}
|
||||
|
@ -2876,7 +3159,7 @@ void t3_sge_prep(struct adapter *adap, struct sge_params *p)
|
|||
q->coalesce_usecs = 5;
|
||||
q->rspq_size = 1024;
|
||||
q->fl_size = 1024;
|
||||
q->jumbo_size = 512;
|
||||
q->jumbo_size = 512;
|
||||
q->txq_size[TXQ_ETH] = 1024;
|
||||
q->txq_size[TXQ_OFLD] = 1024;
|
||||
q->txq_size[TXQ_CTRL] = 256;
|
||||
|
|
|
@ -174,6 +174,13 @@ enum { /* TCP congestion control algorithms */
|
|||
CONG_ALG_HIGHSPEED
|
||||
};
|
||||
|
||||
enum { /* RSS hash type */
|
||||
RSS_HASH_NONE = 0,
|
||||
RSS_HASH_2_TUPLE = 1,
|
||||
RSS_HASH_4_TUPLE = 2,
|
||||
RSS_HASH_TCPV6 = 3
|
||||
};
|
||||
|
||||
union opcode_tid {
|
||||
__be32 opcode_tid;
|
||||
__u8 opcode;
|
||||
|
@ -184,6 +191,13 @@ union opcode_tid {
|
|||
#define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF)
|
||||
#define G_TID(x) ((x) & 0xFFFFFF)
|
||||
|
||||
#define S_QNUM 0
|
||||
#define G_QNUM(x) (((x) >> S_QNUM) & 0xFFFF)
|
||||
|
||||
#define S_HASHTYPE 22
|
||||
#define M_HASHTYPE 0x3
|
||||
#define G_HASHTYPE(x) (((x) >> S_HASHTYPE) & M_HASHTYPE)
|
||||
|
||||
/* tid is assumed to be 24-bits */
|
||||
#define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid))
|
||||
|
||||
|
@ -768,6 +782,12 @@ struct tx_data_wr {
|
|||
__be32 param;
|
||||
};
|
||||
|
||||
/* tx_data_wr.flags fields */
|
||||
#define S_TX_ACK_PAGES 21
|
||||
#define M_TX_ACK_PAGES 0x7
|
||||
#define V_TX_ACK_PAGES(x) ((x) << S_TX_ACK_PAGES)
|
||||
#define G_TX_ACK_PAGES(x) (((x) >> S_TX_ACK_PAGES) & M_TX_ACK_PAGES)
|
||||
|
||||
/* tx_data_wr.param fields */
|
||||
#define S_TX_PORT 0
|
||||
#define M_TX_PORT 0x7
|
||||
|
@ -1441,4 +1461,35 @@ struct cpl_rdma_terminate {
|
|||
#define M_TERM_TID 0xFFFFF
|
||||
#define V_TERM_TID(x) ((x) << S_TERM_TID)
|
||||
#define G_TERM_TID(x) (((x) >> S_TERM_TID) & M_TERM_TID)
|
||||
|
||||
/* ULP_TX opcodes */
|
||||
enum { ULP_MEM_READ = 2, ULP_MEM_WRITE = 3, ULP_TXPKT = 4 };
|
||||
|
||||
#define S_ULPTX_CMD 28
|
||||
#define M_ULPTX_CMD 0xF
|
||||
#define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD)
|
||||
|
||||
#define S_ULPTX_NFLITS 0
|
||||
#define M_ULPTX_NFLITS 0xFF
|
||||
#define V_ULPTX_NFLITS(x) ((x) << S_ULPTX_NFLITS)
|
||||
|
||||
struct ulp_mem_io {
|
||||
WR_HDR;
|
||||
__be32 cmd_lock_addr;
|
||||
__be32 len;
|
||||
};
|
||||
|
||||
/* ulp_mem_io.cmd_lock_addr fields */
|
||||
#define S_ULP_MEMIO_ADDR 0
|
||||
#define M_ULP_MEMIO_ADDR 0x7FFFFFF
|
||||
#define V_ULP_MEMIO_ADDR(x) ((x) << S_ULP_MEMIO_ADDR)
|
||||
#define S_ULP_MEMIO_LOCK 27
|
||||
#define V_ULP_MEMIO_LOCK(x) ((x) << S_ULP_MEMIO_LOCK)
|
||||
#define F_ULP_MEMIO_LOCK V_ULP_MEMIO_LOCK(1U)
|
||||
|
||||
/* ulp_mem_io.len fields */
|
||||
#define S_ULP_MEMIO_DATA_LEN 28
|
||||
#define M_ULP_MEMIO_DATA_LEN 0xF
|
||||
#define V_ULP_MEMIO_DATA_LEN(x) ((x) << S_ULP_MEMIO_DATA_LEN)
|
||||
|
||||
#endif /* T3_CPL_H */
|
||||
|
|
|
@ -45,7 +45,8 @@ struct cxgb3_client;
|
|||
|
||||
enum t3ctype {
|
||||
T3A = 0,
|
||||
T3B
|
||||
T3B,
|
||||
T3C,
|
||||
};
|
||||
|
||||
struct t3cdev {
|
||||
|
@ -63,6 +64,7 @@ struct t3cdev {
|
|||
void *l3opt; /* optional layer 3 data */
|
||||
void *l4opt; /* optional layer 4 data */
|
||||
void *ulp; /* ulp stuff */
|
||||
void *ulp_iscsi; /* ulp iscsi */
|
||||
};
|
||||
|
||||
#endif /* _T3CDEV_H_ */
|
||||
|
|
|
@ -773,8 +773,6 @@ static irqreturn_t lance_interrupt(int irq, void *dev_id)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
struct net_device *last_dev = 0;
|
||||
|
||||
static int lance_open(struct net_device *dev)
|
||||
{
|
||||
volatile u16 *ib = (volatile u16 *)dev->mem_start;
|
||||
|
@ -782,8 +780,6 @@ static int lance_open(struct net_device *dev)
|
|||
volatile struct lance_regs *ll = lp->ll;
|
||||
int status = 0;
|
||||
|
||||
last_dev = dev;
|
||||
|
||||
/* Stop the Lance */
|
||||
writereg(&ll->rap, LE_CSR0);
|
||||
writereg(&ll->rdp, LE_C0_STOP);
|
||||
|
|
|
@ -499,7 +499,7 @@ rio_timer (unsigned long data)
|
|||
entry = np->old_rx % RX_RING_SIZE;
|
||||
/* Dropped packets don't need to re-allocate */
|
||||
if (np->rx_skbuff[entry] == NULL) {
|
||||
skb = dev_alloc_skb (np->rx_buf_sz);
|
||||
skb = netdev_alloc_skb (dev, np->rx_buf_sz);
|
||||
if (skb == NULL) {
|
||||
np->rx_ring[entry].fraginfo = 0;
|
||||
printk (KERN_INFO
|
||||
|
@ -570,7 +570,7 @@ alloc_list (struct net_device *dev)
|
|||
/* Allocate the rx buffers */
|
||||
for (i = 0; i < RX_RING_SIZE; i++) {
|
||||
/* Allocated fixed size of skbuff */
|
||||
struct sk_buff *skb = dev_alloc_skb (np->rx_buf_sz);
|
||||
struct sk_buff *skb = netdev_alloc_skb (dev, np->rx_buf_sz);
|
||||
np->rx_skbuff[i] = skb;
|
||||
if (skb == NULL) {
|
||||
printk (KERN_ERR
|
||||
|
@ -867,7 +867,7 @@ receive_packet (struct net_device *dev)
|
|||
PCI_DMA_FROMDEVICE);
|
||||
skb_put (skb = np->rx_skbuff[entry], pkt_len);
|
||||
np->rx_skbuff[entry] = NULL;
|
||||
} else if ((skb = dev_alloc_skb (pkt_len + 2)) != NULL) {
|
||||
} else if ((skb = netdev_alloc_skb(dev, pkt_len + 2))) {
|
||||
pci_dma_sync_single_for_cpu(np->pdev,
|
||||
desc_to_dma(desc),
|
||||
np->rx_buf_sz,
|
||||
|
@ -904,7 +904,7 @@ receive_packet (struct net_device *dev)
|
|||
struct sk_buff *skb;
|
||||
/* Dropped packets don't need to re-allocate */
|
||||
if (np->rx_skbuff[entry] == NULL) {
|
||||
skb = dev_alloc_skb (np->rx_buf_sz);
|
||||
skb = netdev_alloc_skb(dev, np->rx_buf_sz);
|
||||
if (skb == NULL) {
|
||||
np->rx_ring[entry].fraginfo = 0;
|
||||
printk (KERN_INFO
|
||||
|
@ -1753,7 +1753,7 @@ rio_close (struct net_device *dev)
|
|||
|
||||
/* Stop Tx and Rx logics */
|
||||
writel (TxDisable | RxDisable | StatsDisable, ioaddr + MACCtrl);
|
||||
synchronize_irq (dev->irq);
|
||||
|
||||
free_irq (dev->irq, dev);
|
||||
del_timer_sync (&np->timer);
|
||||
|
||||
|
|
1225
drivers/net/dm9000.c
1225
drivers/net/dm9000.c
File diff suppressed because it is too large
Load Diff
|
@ -45,6 +45,9 @@
|
|||
#define DM9000_CHIPR 0x2C
|
||||
#define DM9000_SMCR 0x2F
|
||||
|
||||
#define CHIPR_DM9000A 0x19
|
||||
#define CHIPR_DM9000B 0x1B
|
||||
|
||||
#define DM9000_MRCMDX 0xF0
|
||||
#define DM9000_MRCMD 0xF2
|
||||
#define DM9000_MRRL 0xF4
|
||||
|
@ -131,5 +134,13 @@
|
|||
#define DM9000_PKT_RDY 0x01 /* Packet ready to receive */
|
||||
#define DM9000_PKT_MAX 1536 /* Received packet max size */
|
||||
|
||||
/* DM9000A / DM9000B definitions */
|
||||
|
||||
#define IMR_LNKCHNG (1<<5)
|
||||
#define IMR_UNDERRUN (1<<4)
|
||||
|
||||
#define ISR_LNKCHNG (1<<5)
|
||||
#define ISR_UNDERRUN (1<<4)
|
||||
|
||||
#endif /* _DM9000X_H_ */
|
||||
|
||||
|
|
|
@ -47,12 +47,6 @@ static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation
|
|||
* Macro expands to...
|
||||
* {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}
|
||||
*/
|
||||
#ifdef CONFIG_E1000E_ENABLED
|
||||
#define PCIE(x)
|
||||
#else
|
||||
#define PCIE(x) x,
|
||||
#endif
|
||||
|
||||
static struct pci_device_id e1000_pci_tbl[] = {
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1000),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1001),
|
||||
|
@ -79,14 +73,6 @@ static struct pci_device_id e1000_pci_tbl[] = {
|
|||
INTEL_E1000_ETHERNET_DEVICE(0x1026),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1027),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1028),
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1049))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104A))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104B))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104C))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104D))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x105E))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x105F))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1060))
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1075),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1076),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1077),
|
||||
|
@ -95,28 +81,9 @@ PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1060))
|
|||
INTEL_E1000_ETHERNET_DEVICE(0x107A),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x107B),
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x107C),
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x107D))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x107E))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x107F))
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x108A),
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x108B))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x108C))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1096))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1098))
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x1099),
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x109A))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10A4))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10A5))
|
||||
INTEL_E1000_ETHERNET_DEVICE(0x10B5),
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10B9))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10BA))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10BB))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10BC))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10C4))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10C5))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10D5))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10D9))
|
||||
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10DA))
|
||||
/* required last entry */
|
||||
{0,}
|
||||
};
|
||||
|
@ -1505,6 +1472,8 @@ e1000_open(struct net_device *netdev)
|
|||
|
||||
e1000_irq_enable(adapter);
|
||||
|
||||
netif_start_queue(netdev);
|
||||
|
||||
/* fire a link status change interrupt to start the watchdog */
|
||||
E1000_WRITE_REG(&adapter->hw, ICS, E1000_ICS_LSC);
|
||||
|
||||
|
@ -2510,10 +2479,15 @@ e1000_set_rx_mode(struct net_device *netdev)
|
|||
|
||||
if (netdev->flags & IFF_PROMISC) {
|
||||
rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
|
||||
} else if (netdev->flags & IFF_ALLMULTI) {
|
||||
rctl |= E1000_RCTL_MPE;
|
||||
rctl &= ~E1000_RCTL_VFE;
|
||||
} else {
|
||||
rctl &= ~E1000_RCTL_MPE;
|
||||
if (netdev->flags & IFF_ALLMULTI) {
|
||||
rctl |= E1000_RCTL_MPE;
|
||||
} else {
|
||||
rctl &= ~E1000_RCTL_MPE;
|
||||
}
|
||||
if (adapter->hw.mac_type != e1000_ich8lan)
|
||||
rctl |= E1000_RCTL_VFE;
|
||||
}
|
||||
|
||||
uc_ptr = NULL;
|
||||
|
@ -4310,8 +4284,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
if (unlikely(adapter->vlgrp &&
|
||||
(status & E1000_RXD_STAT_VP))) {
|
||||
vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
|
||||
le16_to_cpu(rx_desc->special) &
|
||||
E1000_RXD_SPC_VLAN_MASK);
|
||||
le16_to_cpu(rx_desc->special));
|
||||
} else {
|
||||
netif_receive_skb(skb);
|
||||
}
|
||||
|
@ -4319,8 +4292,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
if (unlikely(adapter->vlgrp &&
|
||||
(status & E1000_RXD_STAT_VP))) {
|
||||
vlan_hwaccel_rx(skb, adapter->vlgrp,
|
||||
le16_to_cpu(rx_desc->special) &
|
||||
E1000_RXD_SPC_VLAN_MASK);
|
||||
le16_to_cpu(rx_desc->special));
|
||||
} else {
|
||||
netif_rx(skb);
|
||||
}
|
||||
|
@ -4497,16 +4469,14 @@ e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
|
|||
#ifdef CONFIG_E1000_NAPI
|
||||
if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {
|
||||
vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
|
||||
le16_to_cpu(rx_desc->wb.middle.vlan) &
|
||||
E1000_RXD_SPC_VLAN_MASK);
|
||||
le16_to_cpu(rx_desc->wb.middle.vlan));
|
||||
} else {
|
||||
netif_receive_skb(skb);
|
||||
}
|
||||
#else /* CONFIG_E1000_NAPI */
|
||||
if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {
|
||||
vlan_hwaccel_rx(skb, adapter->vlgrp,
|
||||
le16_to_cpu(rx_desc->wb.middle.vlan) &
|
||||
E1000_RXD_SPC_VLAN_MASK);
|
||||
le16_to_cpu(rx_desc->wb.middle.vlan));
|
||||
} else {
|
||||
netif_rx(skb);
|
||||
}
|
||||
|
@ -4999,7 +4969,6 @@ e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
|
|||
if (adapter->hw.mac_type != e1000_ich8lan) {
|
||||
/* enable VLAN receive filtering */
|
||||
rctl = E1000_READ_REG(&adapter->hw, RCTL);
|
||||
rctl |= E1000_RCTL_VFE;
|
||||
rctl &= ~E1000_RCTL_CFIEN;
|
||||
E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
|
||||
e1000_update_mng_vlan(adapter);
|
||||
|
@ -5011,10 +4980,6 @@ e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
|
|||
E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
|
||||
|
||||
if (adapter->hw.mac_type != e1000_ich8lan) {
|
||||
/* disable VLAN filtering */
|
||||
rctl = E1000_READ_REG(&adapter->hw, RCTL);
|
||||
rctl &= ~E1000_RCTL_VFE;
|
||||
E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
|
||||
if (adapter->mng_vlan_id !=
|
||||
(u16)E1000_MNG_VLAN_NONE) {
|
||||
e1000_vlan_rx_kill_vid(netdev,
|
||||
|
@ -5284,7 +5249,6 @@ e1000_netpoll(struct net_device *netdev)
|
|||
|
||||
disable_irq(adapter->pdev->irq);
|
||||
e1000_intr(adapter->pdev->irq, netdev);
|
||||
e1000_clean_tx_irq(adapter, adapter->tx_ring);
|
||||
#ifndef CONFIG_E1000_NAPI
|
||||
adapter->clean_rx(adapter, adapter->rx_ring);
|
||||
#endif
|
||||
|
|
|
@ -283,6 +283,10 @@ struct e1000_adapter {
|
|||
unsigned long led_status;
|
||||
|
||||
unsigned int flags;
|
||||
|
||||
/* for ioport free */
|
||||
int bars;
|
||||
int need_ioport;
|
||||
};
|
||||
|
||||
struct e1000_info {
|
||||
|
|
|
@ -98,8 +98,7 @@ static void e1000_receive_skb(struct e1000_adapter *adapter,
|
|||
|
||||
if (adapter->vlgrp && (status & E1000_RXD_STAT_VP))
|
||||
vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
|
||||
le16_to_cpu(vlan) &
|
||||
E1000_RXD_SPC_VLAN_MASK);
|
||||
le16_to_cpu(vlan));
|
||||
else
|
||||
netif_receive_skb(skb);
|
||||
|
||||
|
@ -1793,7 +1792,6 @@ static void e1000_vlan_rx_register(struct net_device *netdev,
|
|||
if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) {
|
||||
/* enable VLAN receive filtering */
|
||||
rctl = er32(RCTL);
|
||||
rctl |= E1000_RCTL_VFE;
|
||||
rctl &= ~E1000_RCTL_CFIEN;
|
||||
ew32(RCTL, rctl);
|
||||
e1000_update_mng_vlan(adapter);
|
||||
|
@ -1805,10 +1803,6 @@ static void e1000_vlan_rx_register(struct net_device *netdev,
|
|||
ew32(CTRL, ctrl);
|
||||
|
||||
if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER) {
|
||||
/* disable VLAN filtering */
|
||||
rctl = er32(RCTL);
|
||||
rctl &= ~E1000_RCTL_VFE;
|
||||
ew32(RCTL, rctl);
|
||||
if (adapter->mng_vlan_id !=
|
||||
(u16)E1000_MNG_VLAN_NONE) {
|
||||
e1000_vlan_rx_kill_vid(netdev,
|
||||
|
@ -2231,11 +2225,16 @@ static void e1000_set_multi(struct net_device *netdev)
|
|||
|
||||
if (netdev->flags & IFF_PROMISC) {
|
||||
rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
|
||||
} else if (netdev->flags & IFF_ALLMULTI) {
|
||||
rctl |= E1000_RCTL_MPE;
|
||||
rctl &= ~E1000_RCTL_UPE;
|
||||
rctl &= ~E1000_RCTL_VFE;
|
||||
} else {
|
||||
rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
|
||||
if (netdev->flags & IFF_ALLMULTI) {
|
||||
rctl |= E1000_RCTL_MPE;
|
||||
rctl &= ~E1000_RCTL_UPE;
|
||||
} else {
|
||||
rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
|
||||
}
|
||||
if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER)
|
||||
rctl |= E1000_RCTL_VFE;
|
||||
}
|
||||
|
||||
ew32(RCTL, rctl);
|
||||
|
@ -2514,7 +2513,7 @@ void e1000e_down(struct e1000_adapter *adapter)
|
|||
ew32(RCTL, rctl & ~E1000_RCTL_EN);
|
||||
/* flush and sleep below */
|
||||
|
||||
netif_stop_queue(netdev);
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
|
||||
/* disable transmits in the hardware */
|
||||
tctl = er32(TCTL);
|
||||
|
@ -2664,6 +2663,8 @@ static int e1000_open(struct net_device *netdev)
|
|||
|
||||
e1000_irq_enable(adapter);
|
||||
|
||||
netif_tx_start_all_queues(netdev);
|
||||
|
||||
/* fire a link status change interrupt to start the watchdog */
|
||||
ew32(ICS, E1000_ICS_LSC);
|
||||
|
||||
|
@ -3119,7 +3120,7 @@ static void e1000_watchdog_task(struct work_struct *work)
|
|||
ew32(TCTL, tctl);
|
||||
|
||||
netif_carrier_on(netdev);
|
||||
netif_wake_queue(netdev);
|
||||
netif_tx_wake_all_queues(netdev);
|
||||
|
||||
if (!test_bit(__E1000_DOWN, &adapter->state))
|
||||
mod_timer(&adapter->phy_info_timer,
|
||||
|
@ -3131,7 +3132,7 @@ static void e1000_watchdog_task(struct work_struct *work)
|
|||
adapter->link_duplex = 0;
|
||||
ndev_info(netdev, "Link is Down\n");
|
||||
netif_carrier_off(netdev);
|
||||
netif_stop_queue(netdev);
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
if (!test_bit(__E1000_DOWN, &adapter->state))
|
||||
mod_timer(&adapter->phy_info_timer,
|
||||
round_jiffies(jiffies + 2 * HZ));
|
||||
|
@ -4003,7 +4004,11 @@ static int e1000_resume(struct pci_dev *pdev)
|
|||
pci_set_power_state(pdev, PCI_D0);
|
||||
pci_restore_state(pdev);
|
||||
e1000e_disable_l1aspm(pdev);
|
||||
err = pci_enable_device(pdev);
|
||||
|
||||
if (adapter->need_ioport)
|
||||
err = pci_enable_device(pdev);
|
||||
else
|
||||
err = pci_enable_device_mem(pdev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev,
|
||||
"Cannot enable PCI device from suspend\n");
|
||||
|
@ -4104,9 +4109,14 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
|
|||
struct net_device *netdev = pci_get_drvdata(pdev);
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
int err;
|
||||
|
||||
e1000e_disable_l1aspm(pdev);
|
||||
if (pci_enable_device(pdev)) {
|
||||
if (adapter->need_ioport)
|
||||
err = pci_enable_device(pdev);
|
||||
else
|
||||
err = pci_enable_device_mem(pdev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev,
|
||||
"Cannot re-enable PCI device after reset.\n");
|
||||
return PCI_ERS_RESULT_DISCONNECT;
|
||||
|
@ -4184,6 +4194,21 @@ static void e1000_print_device_info(struct e1000_adapter *adapter)
|
|||
(pba_num >> 8), (pba_num & 0xff));
|
||||
}
|
||||
|
||||
/**
|
||||
* e1000e_is_need_ioport - determine if an adapter needs ioport resources or not
|
||||
* @pdev: PCI device information struct
|
||||
*
|
||||
* Returns true if an adapters needs ioport resources
|
||||
**/
|
||||
static int e1000e_is_need_ioport(struct pci_dev *pdev)
|
||||
{
|
||||
switch (pdev->device) {
|
||||
/* Currently there are no adapters that need ioport resources */
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* e1000_probe - Device Initialization Routine
|
||||
* @pdev: PCI device information struct
|
||||
|
@ -4209,9 +4234,19 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
|||
int i, err, pci_using_dac;
|
||||
u16 eeprom_data = 0;
|
||||
u16 eeprom_apme_mask = E1000_EEPROM_APME;
|
||||
int bars, need_ioport;
|
||||
|
||||
e1000e_disable_l1aspm(pdev);
|
||||
err = pci_enable_device(pdev);
|
||||
|
||||
/* do not allocate ioport bars when not needed */
|
||||
need_ioport = e1000e_is_need_ioport(pdev);
|
||||
if (need_ioport) {
|
||||
bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO);
|
||||
err = pci_enable_device(pdev);
|
||||
} else {
|
||||
bars = pci_select_bars(pdev, IORESOURCE_MEM);
|
||||
err = pci_enable_device_mem(pdev);
|
||||
}
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
@ -4234,7 +4269,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
|||
}
|
||||
}
|
||||
|
||||
err = pci_request_regions(pdev, e1000e_driver_name);
|
||||
err = pci_request_selected_regions(pdev, bars, e1000e_driver_name);
|
||||
if (err)
|
||||
goto err_pci_reg;
|
||||
|
||||
|
@ -4259,6 +4294,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
|||
adapter->hw.adapter = adapter;
|
||||
adapter->hw.mac.type = ei->mac;
|
||||
adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1;
|
||||
adapter->bars = bars;
|
||||
adapter->need_ioport = need_ioport;
|
||||
|
||||
mmio_start = pci_resource_start(pdev, 0);
|
||||
mmio_len = pci_resource_len(pdev, 0);
|
||||
|
@ -4344,6 +4381,11 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
|||
netdev->features |= NETIF_F_TSO;
|
||||
netdev->features |= NETIF_F_TSO6;
|
||||
|
||||
netdev->vlan_features |= NETIF_F_TSO;
|
||||
netdev->vlan_features |= NETIF_F_TSO6;
|
||||
netdev->vlan_features |= NETIF_F_HW_CSUM;
|
||||
netdev->vlan_features |= NETIF_F_SG;
|
||||
|
||||
if (pci_using_dac)
|
||||
netdev->features |= NETIF_F_HIGHDMA;
|
||||
|
||||
|
@ -4464,7 +4506,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
|||
|
||||
/* tell the stack to leave us alone until e1000_open() is called */
|
||||
netif_carrier_off(netdev);
|
||||
netif_stop_queue(netdev);
|
||||
netif_tx_stop_all_queues(netdev);
|
||||
|
||||
strcpy(netdev->name, "eth%d");
|
||||
err = register_netdev(netdev);
|
||||
|
@ -4493,7 +4535,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
|||
err_ioremap:
|
||||
free_netdev(netdev);
|
||||
err_alloc_etherdev:
|
||||
pci_release_regions(pdev);
|
||||
pci_release_selected_regions(pdev, bars);
|
||||
err_pci_reg:
|
||||
err_dma:
|
||||
pci_disable_device(pdev);
|
||||
|
@ -4541,7 +4583,7 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
|
|||
iounmap(adapter->hw.hw_addr);
|
||||
if (adapter->hw.flash_address)
|
||||
iounmap(adapter->hw.flash_address);
|
||||
pci_release_regions(pdev);
|
||||
pci_release_selected_regions(pdev, adapter->bars);
|
||||
|
||||
free_netdev(netdev);
|
||||
|
||||
|
|
|
@ -90,6 +90,7 @@ static int full_duplex[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 };
|
|||
#include <asm/processor.h> /* Processor type for cache alignment. */
|
||||
#include <asm/io.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
/* These identify the driver base version and may not be removed. */
|
||||
static char version[] =
|
||||
|
@ -861,40 +862,20 @@ static int netdev_open(struct net_device *dev)
|
|||
Wait the specified 50 PCI cycles after a reset by initializing
|
||||
Tx and Rx queues and the address filter list.
|
||||
FIXME (Ueimor): optimistic for alpha + posted writes ? */
|
||||
#if defined(__powerpc__) || defined(__sparc__)
|
||||
// 89/9/1 modify,
|
||||
// np->bcrvalue=0x04 | 0x0x38; /* big-endian, 256 burst length */
|
||||
np->bcrvalue = 0x04 | 0x10; /* big-endian, tx 8 burst length */
|
||||
np->crvalue = 0xe00; /* rx 128 burst length */
|
||||
#elif defined(__alpha__) || defined(__x86_64__)
|
||||
// 89/9/1 modify,
|
||||
// np->bcrvalue=0x38; /* little-endian, 256 burst length */
|
||||
|
||||
np->bcrvalue = 0x10; /* little-endian, 8 burst length */
|
||||
np->crvalue = 0xe00; /* rx 128 burst length */
|
||||
#elif defined(__i386__)
|
||||
#if defined(MODULE)
|
||||
// 89/9/1 modify,
|
||||
// np->bcrvalue=0x38; /* little-endian, 256 burst length */
|
||||
np->bcrvalue = 0x10; /* little-endian, 8 burst length */
|
||||
np->crvalue = 0xe00; /* rx 128 burst length */
|
||||
#else
|
||||
/* When not a module we can work around broken '486 PCI boards. */
|
||||
#define x86 boot_cpu_data.x86
|
||||
// 89/9/1 modify,
|
||||
// np->bcrvalue=(x86 <= 4 ? 0x10 : 0x38);
|
||||
np->bcrvalue = 0x10;
|
||||
np->crvalue = (x86 <= 4 ? 0xa00 : 0xe00);
|
||||
if (x86 <= 4)
|
||||
printk(KERN_INFO "%s: This is a 386/486 PCI system, setting burst "
|
||||
"length to %x.\n", dev->name, (x86 <= 4 ? 0x10 : 0x38));
|
||||
#ifdef __BIG_ENDIAN
|
||||
np->bcrvalue |= 0x04; /* big-endian */
|
||||
#endif
|
||||
#else
|
||||
// 89/9/1 modify,
|
||||
// np->bcrvalue=0x38;
|
||||
np->bcrvalue = 0x10;
|
||||
np->crvalue = 0xe00; /* rx 128 burst length */
|
||||
#warning Processor architecture undefined!
|
||||
|
||||
#if defined(__i386__) && !defined(MODULE)
|
||||
if (boot_cpu_data.x86 <= 4)
|
||||
np->crvalue = 0xa00;
|
||||
else
|
||||
#endif
|
||||
np->crvalue = 0xe00; /* rx 128 burst length */
|
||||
|
||||
|
||||
// 89/12/29 add,
|
||||
// 90/1/16 modify,
|
||||
// np->imrvalue=FBE|TUNF|CNTOVF|RBU|TI|RI;
|
||||
|
|
|
@ -197,7 +197,7 @@ static void mpc52xx_fec_adjust_link(struct net_device *dev)
|
|||
if (priv->link == PHY_DOWN) {
|
||||
new_state = 1;
|
||||
priv->link = phydev->link;
|
||||
netif_schedule(dev);
|
||||
netif_tx_schedule_all(dev);
|
||||
netif_carrier_on(dev);
|
||||
netif_start_queue(dev);
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue