Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1745 commits) dp83640: free packet queues on remove dp83640: use proper function to free transmit time stamping packets ipv6: Do not use routes from locally generated RAs |PATCH net-next] tg3: add tx_dropped counter be2net: don't create multiple RX/TX rings in multi channel mode be2net: don't create multiple TXQs in BE2 be2net: refactor VF setup/teardown code into be_vf_setup/clear() be2net: add vlan/rx-mode/flow-control config to be_setup() net_sched: cls_flow: use skb_header_pointer() ipv4: avoid useless call of the function check_peer_pmtu TCP: remove TCP_DEBUG net: Fix driver name for mdio-gpio.c ipv4: tcp: fix TOS value in ACK messages sent from TIME_WAIT rtnetlink: Add missing manual netlink notification in dev_change_net_namespaces ipv4: fix ipsec forward performance regression jme: fix irq storm after suspend/resume route: fix ICMP redirect validation net: hold sock reference while processing tx timestamps tcp: md5: add more const attributes Add ethtool -g support to virtio_net ... Fix up conflicts in: - drivers/net/Kconfig: The split-up generated a trivial conflict with removal of a stale reference to Documentation/networking/net-modules.txt. Remove it from the new location instead. - fs/sysfs/dir.c: Fairly nasty conflicts with the sysfs rb-tree usage, conflicting with Eric Biederman's changes for tagged directories.
This commit is contained in:
Коммит
8a9ea3237e
|
@ -22,6 +22,14 @@ Description:
|
|||
mesh will be fragmented or silently discarded if the
|
||||
packet size exceeds the outgoing interface MTU.
|
||||
|
||||
What: /sys/class/net/<mesh_iface>/mesh/ap_isolation
|
||||
Date: May 2011
|
||||
Contact: Antonio Quartulli <ordex@autistici.org>
|
||||
Description:
|
||||
Indicates whether the data traffic going from a
|
||||
wireless client to another wireless client will be
|
||||
silently dropped.
|
||||
|
||||
What: /sys/class/net/<mesh_iface>/mesh/gw_bandwidth
|
||||
Date: October 2010
|
||||
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||
|
|
|
@ -433,8 +433,18 @@
|
|||
Insert notes about VLAN interfaces with hw crypto here or
|
||||
in the hw crypto chapter.
|
||||
</para>
|
||||
<section id="ps-client">
|
||||
<title>support for powersaving clients</title>
|
||||
!Pinclude/net/mac80211.h AP support for powersaving clients
|
||||
</section>
|
||||
!Finclude/net/mac80211.h ieee80211_get_buffered_bc
|
||||
!Finclude/net/mac80211.h ieee80211_beacon_get
|
||||
!Finclude/net/mac80211.h ieee80211_sta_eosp_irqsafe
|
||||
!Finclude/net/mac80211.h ieee80211_frame_release_type
|
||||
!Finclude/net/mac80211.h ieee80211_sta_ps_transition
|
||||
!Finclude/net/mac80211.h ieee80211_sta_ps_transition_ni
|
||||
!Finclude/net/mac80211.h ieee80211_sta_set_buffered
|
||||
!Finclude/net/mac80211.h ieee80211_sta_block_awake
|
||||
</chapter>
|
||||
|
||||
<chapter id="multi-iface">
|
||||
|
@ -460,7 +470,6 @@
|
|||
!Finclude/net/mac80211.h sta_notify_cmd
|
||||
!Finclude/net/mac80211.h ieee80211_find_sta
|
||||
!Finclude/net/mac80211.h ieee80211_find_sta_by_ifaddr
|
||||
!Finclude/net/mac80211.h ieee80211_sta_block_awake
|
||||
</chapter>
|
||||
|
||||
<chapter id="hardware-scan-offload">
|
||||
|
|
|
@ -1,61 +1,24 @@
|
|||
CAN Device Tree Bindings
|
||||
------------------------
|
||||
2011 Freescale Semiconductor, Inc.
|
||||
Flexcan CAN contoller on Freescale's ARM and PowerPC system-on-a-chip (SOC).
|
||||
|
||||
fsl,flexcan-v1.0 nodes
|
||||
-----------------------
|
||||
In addition to the required compatible-, reg- and interrupt-properties, you can
|
||||
also specify which clock source shall be used for the controller.
|
||||
Required properties:
|
||||
|
||||
CPI Clock- Can Protocol Interface Clock
|
||||
This CLK_SRC bit of CTRL(control register) selects the clock source to
|
||||
the CAN Protocol Interface(CPI) to be either the peripheral clock
|
||||
(driven by the PLL) or the crystal oscillator clock. The selected clock
|
||||
is the one fed to the prescaler to generate the Serial Clock (Sclock).
|
||||
The PRESDIV field of CTRL(control register) controls a prescaler that
|
||||
generates the Serial Clock (Sclock), whose period defines the
|
||||
time quantum used to compose the CAN waveform.
|
||||
- compatible : Should be "fsl,<processor>-flexcan"
|
||||
|
||||
Can Engine Clock Source
|
||||
There are two sources for CAN clock
|
||||
- Platform Clock It represents the bus clock
|
||||
- Oscillator Clock
|
||||
An implementation should also claim any of the following compatibles
|
||||
that it is fully backwards compatible with:
|
||||
|
||||
Peripheral Clock (PLL)
|
||||
--------------
|
||||
|
|
||||
--------- -------------
|
||||
| |CPI Clock | Prescaler | Sclock
|
||||
| |---------------->| (1.. 256) |------------>
|
||||
--------- -------------
|
||||
| |
|
||||
-------------- ---------------------CLK_SRC
|
||||
Oscillator Clock
|
||||
- fsl,p1010-flexcan
|
||||
|
||||
- fsl,flexcan-clock-source : CAN Engine Clock Source.This property selects
|
||||
the peripheral clock. PLL clock is fed to the
|
||||
prescaler to generate the Serial Clock (Sclock).
|
||||
Valid values are "oscillator" and "platform"
|
||||
"oscillator": CAN engine clock source is oscillator clock.
|
||||
"platform" The CAN engine clock source is the bus clock
|
||||
(platform clock).
|
||||
- reg : Offset and length of the register set for this device
|
||||
- interrupts : Interrupt tuple for this device
|
||||
- clock-frequency : The oscillator frequency driving the flexcan device
|
||||
|
||||
- fsl,flexcan-clock-divider : for the reference and system clock, an additional
|
||||
clock divider can be specified.
|
||||
- clock-frequency: frequency required to calculate the bitrate for FlexCAN.
|
||||
Example:
|
||||
|
||||
Note:
|
||||
- v1.0 of flexcan-v1.0 represent the IP block version for P1010 SOC.
|
||||
- P1010 does not have oscillator as the Clock Source.So the default
|
||||
Clock Source is platform clock.
|
||||
Examples:
|
||||
|
||||
can0@1c000 {
|
||||
compatible = "fsl,flexcan-v1.0";
|
||||
can@1c000 {
|
||||
compatible = "fsl,p1010-flexcan";
|
||||
reg = <0x1c000 0x1000>;
|
||||
interrupts = <48 0x2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
fsl,flexcan-clock-source = "platform";
|
||||
fsl,flexcan-clock-divider = <2>;
|
||||
clock-frequency = <fixed by u-boot>;
|
||||
clock-frequency = <200000000>; // filled in by bootloader
|
||||
};
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
* Smart Mixed-Signal Connectivity (SMSC) LAN911x/912x Controller
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "smsc,lan<model>", "smsc,lan9115"
|
||||
- reg : Address and length of the io space for SMSC LAN
|
||||
- interrupts : Should contain SMSC LAN interrupt line
|
||||
- interrupt-parent : Should be the phandle for the interrupt controller
|
||||
that services interrupts for this device
|
||||
- phy-mode : String, operation mode of the PHY interface.
|
||||
Supported values are: "mii", "gmii", "sgmii", "tbi", "rmii",
|
||||
"rgmii", "rgmii-id", "rgmii-rxid", "rgmii-txid", "rtbi", "smii".
|
||||
|
||||
Optional properties:
|
||||
- reg-shift : Specify the quantity to shift the register offsets by
|
||||
- reg-io-width : Specify the size (in bytes) of the IO accesses that
|
||||
should be performed on the device. Valid value for SMSC LAN is
|
||||
2 or 4. If it's omitted or invalid, the size would be 2.
|
||||
- smsc,irq-active-high : Indicates the IRQ polarity is active-high
|
||||
- smsc,irq-push-pull : Indicates the IRQ type is push-pull
|
||||
- smsc,force-internal-phy : Forces SMSC LAN controller to use
|
||||
internal PHY
|
||||
- smsc,force-external-phy : Forces SMSC LAN controller to use
|
||||
external PHY
|
||||
- smsc,save-mac-address : Indicates that mac address needs to be saved
|
||||
before resetting the controller
|
||||
- local-mac-address : 6 bytes, mac address
|
||||
|
||||
Examples:
|
||||
|
||||
lan9220@f4000000 {
|
||||
compatible = "smsc,lan9220", "smsc,lan9115";
|
||||
reg = <0xf4000000 0x2000000>;
|
||||
phy-mode = "mii";
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <31>;
|
||||
reg-io-width = <4>;
|
||||
smsc,irq-push-pull;
|
||||
};
|
|
@ -594,9 +594,18 @@ Why: In 3.0, we can now autodetect internal 3G device and already have
|
|||
Who: Lee, Chun-Yi <jlee@novell.com>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: The XFS nodelaylog mount option
|
||||
When: 3.3
|
||||
Why: The delaylog mode that has been the default since 2.6.39 has proven
|
||||
stable, and the old code is in the way of additional improvements in
|
||||
the log code.
|
||||
Who: Christoph Hellwig <hch@lst.de>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: iwlagn alias support
|
||||
When: 3.5
|
||||
Why: The iwlagn module has been renamed iwlwifi. The alias will be around
|
||||
for backward compatibility for several cycles and then dropped.
|
||||
Who: Don Fry <donald.h.fry@intel.com>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[state: 17-04-2011]
|
||||
[state: 21-08-2011]
|
||||
|
||||
BATMAN-ADV
|
||||
----------
|
||||
|
@ -68,9 +68,9 @@ All mesh wide settings can be found in batman's own interface
|
|||
folder:
|
||||
|
||||
# ls /sys/class/net/bat0/mesh/
|
||||
# aggregated_ogms gw_bandwidth hop_penalty
|
||||
# bonding gw_mode orig_interval
|
||||
# fragmentation gw_sel_class vis_mode
|
||||
# aggregated_ogms fragmentation gw_sel_class vis_mode
|
||||
# ap_isolation gw_bandwidth hop_penalty
|
||||
# bonding gw_mode orig_interval
|
||||
|
||||
|
||||
There is a special folder for debugging information:
|
||||
|
|
|
@ -1045,6 +1045,11 @@ conf/interface/*:
|
|||
accept_ra - INTEGER
|
||||
Accept Router Advertisements; autoconfigure using them.
|
||||
|
||||
It also determines whether or not to transmit Router
|
||||
Solicitations. If and only if the functional setting is to
|
||||
accept Router Advertisements, Router Solicitations will be
|
||||
transmitted.
|
||||
|
||||
Possible values are:
|
||||
0 Do not accept Router Advertisements.
|
||||
1 Accept Router Advertisements if forwarding is disabled.
|
||||
|
@ -1115,14 +1120,14 @@ forwarding - INTEGER
|
|||
Possible values are:
|
||||
0 Forwarding disabled
|
||||
1 Forwarding enabled
|
||||
2 Forwarding enabled (Hybrid Mode)
|
||||
|
||||
FALSE (0):
|
||||
|
||||
By default, Host behaviour is assumed. This means:
|
||||
|
||||
1. IsRouter flag is not set in Neighbour Advertisements.
|
||||
2. Router Solicitations are being sent when necessary.
|
||||
2. If accept_ra is TRUE (default), transmit Router
|
||||
Solicitations.
|
||||
3. If accept_ra is TRUE (default), accept Router
|
||||
Advertisements (and do autoconfiguration).
|
||||
4. If accept_redirects is TRUE (default), accept Redirects.
|
||||
|
@ -1133,16 +1138,10 @@ forwarding - INTEGER
|
|||
This means exactly the reverse from the above:
|
||||
|
||||
1. IsRouter flag is set in Neighbour Advertisements.
|
||||
2. Router Solicitations are not sent.
|
||||
2. Router Solicitations are not sent unless accept_ra is 2.
|
||||
3. Router Advertisements are ignored unless accept_ra is 2.
|
||||
4. Redirects are ignored.
|
||||
|
||||
TRUE (2):
|
||||
|
||||
Hybrid mode. Same behaviour as TRUE, except for:
|
||||
|
||||
2. Router Solicitations are being sent when necessary.
|
||||
|
||||
Default: 0 (disabled) if global forwarding is disabled (default),
|
||||
otherwise 1 (enabled).
|
||||
|
||||
|
|
|
@ -23,6 +23,10 @@ radiotap headers and used to control injection:
|
|||
IEEE80211_RADIOTAP_F_FRAG: frame will be fragmented if longer than the
|
||||
current fragmentation threshold.
|
||||
|
||||
* IEEE80211_RADIOTAP_TX_FLAGS
|
||||
|
||||
IEEE80211_RADIOTAP_F_TX_NOACK: frame should be sent without waiting for
|
||||
an ACK even if it is a unicast frame
|
||||
|
||||
The injection code can also skip all other currently defined radiotap fields
|
||||
facilitating replay of captured radiotap headers directly.
|
||||
|
|
|
@ -73,7 +73,7 @@ dev->hard_start_xmit:
|
|||
has to lock by itself when needed. It is recommended to use a try lock
|
||||
for this and return NETDEV_TX_LOCKED when the spin lock fails.
|
||||
The locking there should also properly protect against
|
||||
set_multicast_list. Note that the use of NETIF_F_LLTX is deprecated.
|
||||
set_rx_mode. Note that the use of NETIF_F_LLTX is deprecated.
|
||||
Don't use it for new drivers.
|
||||
|
||||
Context: Process with BHs disabled or BH (timer),
|
||||
|
@ -92,7 +92,7 @@ dev->tx_timeout:
|
|||
Context: BHs disabled
|
||||
Notes: netif_queue_stopped() is guaranteed true
|
||||
|
||||
dev->set_multicast_list:
|
||||
dev->set_rx_mode:
|
||||
Synchronization: netif_tx_lock spinlock.
|
||||
Context: BHs disabled
|
||||
|
||||
|
|
|
@ -76,7 +76,16 @@ core.
|
|||
|
||||
4.5) DMA descriptors
|
||||
Driver handles both normal and enhanced descriptors. The latter has been only
|
||||
tested on DWC Ether MAC 10/100/1000 Universal version 3.41a.
|
||||
tested on DWC Ether MAC 10/100/1000 Universal version 3.41a and later.
|
||||
|
||||
STMMAC supports DMA descriptor to operate both in dual buffer (RING)
|
||||
and linked-list(CHAINED) mode. In RING each descriptor points to two
|
||||
data buffer pointers whereas in CHAINED mode they point to only one data
|
||||
buffer pointer. RING mode is the default.
|
||||
|
||||
In CHAINED mode each descriptor will have pointer to next descriptor in
|
||||
the list, hence creating the explicit chaining in the descriptor itself,
|
||||
whereas such explicit chaining is not possible in RING mode.
|
||||
|
||||
4.6) Ethtool support
|
||||
Ethtool is supported. Driver statistics and internal errors can be taken using:
|
||||
|
@ -235,7 +244,38 @@ reset procedure etc).
|
|||
o enh_desc.c: functions for handling enhanced descriptors
|
||||
o norm_desc.c: functions for handling normal descriptors
|
||||
|
||||
5) TODO:
|
||||
5) Debug Information
|
||||
|
||||
The driver exports many information i.e. internal statistics,
|
||||
debug information, MAC and DMA registers etc.
|
||||
|
||||
These can be read in several ways depending on the
|
||||
type of the information actually needed.
|
||||
|
||||
For example a user can be use the ethtool support
|
||||
to get statistics: e.g. using: ethtool -S ethX
|
||||
(that shows the Management counters (MMC) if supported)
|
||||
or sees the MAC/DMA registers: e.g. using: ethtool -d ethX
|
||||
|
||||
Compiling the Kernel with CONFIG_DEBUG_FS and enabling the
|
||||
STMMAC_DEBUG_FS option the driver will export the following
|
||||
debugfs entries:
|
||||
|
||||
/sys/kernel/debug/stmmaceth/descriptors_status
|
||||
To show the DMA TX/RX descriptor rings
|
||||
|
||||
Developer can also use the "debug" module parameter to get
|
||||
further debug information.
|
||||
|
||||
In the end, there are other macros (that cannot be enabled
|
||||
via menuconfig) to turn-on the RX/TX DMA debugging,
|
||||
specific MAC core debug printk etc. Others to enable the
|
||||
debug in the TX and RX processes.
|
||||
All these are only useful during the developing stage
|
||||
and should never enabled inside the code for general usage.
|
||||
In fact, these can generate an huge amount of debug messages.
|
||||
|
||||
6) TODO:
|
||||
o XGMAC is not supported.
|
||||
o Review the timer optimisation code to use an embedded device that will be
|
||||
available in new chip generations.
|
||||
|
|
218
MAINTAINERS
218
MAINTAINERS
|
@ -117,20 +117,20 @@ Maintainers List (try to look for most precise areas first)
|
|||
M: Philip Blundell <philb@gnu.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/3c505*
|
||||
F: drivers/net/ethernet/i825xx/3c505*
|
||||
|
||||
3C59X NETWORK DRIVER
|
||||
M: Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/networking/vortex.txt
|
||||
F: drivers/net/3c59x.c
|
||||
F: drivers/net/ethernet/3com/3c59x.c
|
||||
|
||||
3CR990 NETWORK DRIVER
|
||||
M: David Dillow <dave@thedillows.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/typhoon*
|
||||
F: drivers/net/ethernet/3com/typhoon*
|
||||
|
||||
3WARE SAS/SATA-RAID SCSI DRIVERS (3W-XXXX, 3W-9XXX, 3W-SAS)
|
||||
M: Adam Radford <linuxraid@lsi.com>
|
||||
|
@ -156,7 +156,7 @@ M: Realtek linux nic maintainers <nic_swsd@realtek.com>
|
|||
M: Francois Romieu <romieu@fr.zoreil.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/r8169.c
|
||||
F: drivers/net/ethernet/realtek/r8169.c
|
||||
|
||||
8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
|
||||
M: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
@ -170,8 +170,7 @@ F: include/linux/serial_8250.h
|
|||
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
|
||||
L: netdev@vger.kernel.org
|
||||
S: Orphan / Obsolete
|
||||
F: drivers/net/*8390*
|
||||
F: drivers/net/ax88796.c
|
||||
F: drivers/net/ethernet/8390/
|
||||
|
||||
9P FILE SYSTEM
|
||||
M: Eric Van Hensbergen <ericvh@gmail.com>
|
||||
|
@ -214,7 +213,7 @@ ACENIC DRIVER
|
|||
M: Jes Sorensen <jes@trained-monkey.org>
|
||||
L: linux-acenic@sunsite.dk
|
||||
S: Maintained
|
||||
F: drivers/net/acenic*
|
||||
F: drivers/net/ethernet/alteon/acenic*
|
||||
|
||||
ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
|
||||
M: Peter Feuerer <peter@piie.net>
|
||||
|
@ -746,7 +745,7 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|||
W: http://www.arm.linux.org.uk/
|
||||
S: Maintained
|
||||
F: arch/arm/mach-ebsa110/
|
||||
F: drivers/net/arm/am79c961a.*
|
||||
F: drivers/net/ethernet/amd/am79c961a.*
|
||||
|
||||
ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
|
||||
M: Daniel Ribeiro <drwyrm@gmail.com>
|
||||
|
@ -1015,7 +1014,8 @@ F: arch/arm/include/asm/hardware/ioc.h
|
|||
F: arch/arm/include/asm/hardware/iomd.h
|
||||
F: arch/arm/include/asm/hardware/memc.h
|
||||
F: arch/arm/mach-rpc/
|
||||
F: drivers/net/arm/ether*
|
||||
F: drivers/net/ethernet/i825xx/ether1*
|
||||
F: drivers/net/ethernet/seeq/ether3*
|
||||
F: drivers/scsi/arm/
|
||||
|
||||
ARM/SHARK MACHINE SUPPORT
|
||||
|
@ -1127,7 +1127,7 @@ F: arch/arm/mach-nuc93x/
|
|||
F: drivers/input/keyboard/w90p910_keypad.c
|
||||
F: drivers/input/touchscreen/w90p910_ts.c
|
||||
F: drivers/watchdog/nuc900_wdt.c
|
||||
F: drivers/net/arm/w90p910_ether.c
|
||||
F: drivers/net/ethernet/nuvoton/w90p910_ether.c
|
||||
F: drivers/mtd/nand/nuc900_nand.c
|
||||
F: drivers/rtc/rtc-nuc900.c
|
||||
F: drivers/spi/spi_nuc900.c
|
||||
|
@ -1230,7 +1230,7 @@ F: Documentation/aoe/
|
|||
F: drivers/block/aoe/
|
||||
|
||||
ATHEROS ATH GENERIC UTILITIES
|
||||
M: "Luis R. Rodriguez" <lrodriguez@atheros.com>
|
||||
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/wireless/ath/*
|
||||
|
@ -1238,7 +1238,7 @@ F: drivers/net/wireless/ath/*
|
|||
ATHEROS ATH5K WIRELESS DRIVER
|
||||
M: Jiri Slaby <jirislaby@gmail.com>
|
||||
M: Nick Kossifidis <mickflemm@gmail.com>
|
||||
M: "Luis R. Rodriguez" <lrodriguez@atheros.com>
|
||||
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
|
||||
M: Bob Copeland <me@bobcopeland.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
L: ath5k-devel@lists.ath5k.org
|
||||
|
@ -1246,11 +1246,19 @@ W: http://wireless.kernel.org/en/users/Drivers/ath5k
|
|||
S: Maintained
|
||||
F: drivers/net/wireless/ath/ath5k/
|
||||
|
||||
ATHEROS ATH6KL WIRELESS DRIVER
|
||||
M: Kalle Valo <kvalo@qca.qualcomm.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
W: http://wireless.kernel.org/en/users/Drivers/ath6kl
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath6kl.git
|
||||
S: Supported
|
||||
F: drivers/net/wireless/ath/ath6kl/
|
||||
|
||||
ATHEROS ATH9K WIRELESS DRIVER
|
||||
M: "Luis R. Rodriguez" <lrodriguez@atheros.com>
|
||||
M: Jouni Malinen <jmalinen@atheros.com>
|
||||
M: Vasanthakumar Thiagarajan <vasanth@atheros.com>
|
||||
M: Senthil Balasubramanian <senthilkumar@atheros.com>
|
||||
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
|
||||
M: Jouni Malinen <jouni@qca.qualcomm.com>
|
||||
M: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
|
||||
M: Senthil Balasubramanian <senthilb@qca.qualcomm.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
L: ath9k-devel@lists.ath9k.org
|
||||
W: http://wireless.kernel.org/en/users/Drivers/ath9k
|
||||
|
@ -1282,7 +1290,7 @@ L: netdev@vger.kernel.org
|
|||
W: http://sourceforge.net/projects/atl1
|
||||
W: http://atl1.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/net/atlx/
|
||||
F: drivers/net/ethernet/atheros/
|
||||
|
||||
ATM
|
||||
M: Chas Williams <chas@cmf.nrl.navy.mil>
|
||||
|
@ -1322,7 +1330,7 @@ F: include/video/atmel_lcdc.h
|
|||
ATMEL MACB ETHERNET DRIVER
|
||||
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
||||
S: Supported
|
||||
F: drivers/net/macb.*
|
||||
F: drivers/net/ethernet/cadence/
|
||||
|
||||
ATMEL SPI DRIVER
|
||||
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
||||
|
@ -1445,7 +1453,7 @@ BLACKFIN EMAC DRIVER
|
|||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: drivers/net/bfin_mac.*
|
||||
F: drivers/net/ethernet/adi/
|
||||
|
||||
BLACKFIN RTC DRIVER
|
||||
M: Mike Frysinger <vapier.adi@gmail.com>
|
||||
|
@ -1526,27 +1534,27 @@ BROADCOM B44 10/100 ETHERNET DRIVER
|
|||
M: Gary Zambrano <zambrano@broadcom.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/b44.*
|
||||
F: drivers/net/ethernet/broadcom/b44.*
|
||||
|
||||
BROADCOM BNX2 GIGABIT ETHERNET DRIVER
|
||||
M: Michael Chan <mchan@broadcom.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/bnx2.*
|
||||
F: drivers/net/bnx2_*
|
||||
F: drivers/net/ethernet/broadcom/bnx2.*
|
||||
F: drivers/net/ethernet/broadcom/bnx2_*
|
||||
|
||||
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
||||
M: Eilon Greenstein <eilong@broadcom.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/bnx2x/
|
||||
F: drivers/net/ethernet/broadcom/bnx2x/
|
||||
|
||||
BROADCOM TG3 GIGABIT ETHERNET DRIVER
|
||||
M: Matt Carlson <mcarlson@broadcom.com>
|
||||
M: Michael Chan <mchan@broadcom.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/tg3.*
|
||||
F: drivers/net/ethernet/broadcom/tg3.*
|
||||
|
||||
BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
|
||||
M: Brett Rudley <brudley@broadcom.com>
|
||||
|
@ -1575,7 +1583,7 @@ BROCADE BNA 10 GIGABIT ETHERNET DRIVER
|
|||
M: Rasesh Mody <rmody@brocade.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/bna/
|
||||
F: drivers/net/ethernet/brocade/bna/
|
||||
|
||||
BSG (block layer generic sg v4 driver)
|
||||
M: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||
|
@ -1663,7 +1671,7 @@ CAN NETWORK LAYER
|
|||
M: Oliver Hartkopp <socketcan@hartkopp.net>
|
||||
M: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
|
||||
M: Urs Thuermann <urs.thuermann@volkswagen.de>
|
||||
L: socketcan-core@lists.berlios.de (subscribers-only)
|
||||
L: linux-can@vger.kernel.org
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://developer.berlios.de/projects/socketcan/
|
||||
S: Maintained
|
||||
|
@ -1675,7 +1683,7 @@ F: include/linux/can/raw.h
|
|||
|
||||
CAN NETWORK DRIVERS
|
||||
M: Wolfgang Grandegger <wg@grandegger.com>
|
||||
L: socketcan-core@lists.berlios.de (subscribers-only)
|
||||
L: linux-can@vger.kernel.org
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://developer.berlios.de/projects/socketcan/
|
||||
S: Maintained
|
||||
|
@ -1759,13 +1767,13 @@ M: Christian Benvenuti <benve@cisco.com>
|
|||
M: Roopa Prabhu <roprabhu@cisco.com>
|
||||
M: David Wang <dwang2@cisco.com>
|
||||
S: Supported
|
||||
F: drivers/net/enic/
|
||||
F: drivers/net/ethernet/cisco/enic/
|
||||
|
||||
CIRRUS LOGIC EP93XX ETHERNET DRIVER
|
||||
M: Hartley Sweeten <hsweeten@visionengravers.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/arm/ep93xx_eth.c
|
||||
F: drivers/net/ethernet/cirrus/ep93xx_eth.c
|
||||
|
||||
CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
|
||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||
|
@ -1905,7 +1913,7 @@ CPMAC ETHERNET DRIVER
|
|||
M: Florian Fainelli <florian@openwrt.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/cpmac.c
|
||||
F: drivers/net/ethernet/ti/cpmac.c
|
||||
|
||||
CPU FREQUENCY DRIVERS
|
||||
M: Dave Jones <davej@redhat.com>
|
||||
|
@ -1992,7 +2000,7 @@ M: Divy Le Ray <divy@chelsio.com>
|
|||
L: netdev@vger.kernel.org
|
||||
W: http://www.chelsio.com
|
||||
S: Supported
|
||||
F: drivers/net/cxgb3/
|
||||
F: drivers/net/ethernet/chelsio/cxgb3/
|
||||
|
||||
CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
|
||||
M: Steve Wise <swise@chelsio.com>
|
||||
|
@ -2006,7 +2014,7 @@ M: Dimitris Michailidis <dm@chelsio.com>
|
|||
L: netdev@vger.kernel.org
|
||||
W: http://www.chelsio.com
|
||||
S: Supported
|
||||
F: drivers/net/cxgb4/
|
||||
F: drivers/net/ethernet/chelsio/cxgb4/
|
||||
|
||||
CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
|
||||
M: Steve Wise <swise@chelsio.com>
|
||||
|
@ -2020,14 +2028,14 @@ M: Casey Leedom <leedom@chelsio.com>
|
|||
L: netdev@vger.kernel.org
|
||||
W: http://www.chelsio.com
|
||||
S: Supported
|
||||
F: drivers/net/cxgb4vf/
|
||||
F: drivers/net/ethernet/chelsio/cxgb4vf/
|
||||
|
||||
STMMAC ETHERNET DRIVER
|
||||
M: Giuseppe Cavallaro <peppe.cavallaro@st.com>
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.stlinux.com
|
||||
S: Supported
|
||||
F: drivers/net/stmmac/
|
||||
F: drivers/net/ethernet/stmicro/stmmac/
|
||||
|
||||
CYBERPRO FB DRIVER
|
||||
M: Russell King <linux@arm.linux.org.uk>
|
||||
|
@ -2071,7 +2079,7 @@ DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
|
|||
L: netdev@vger.kernel.org
|
||||
S: Orphan
|
||||
F: Documentation/networking/dmfe.txt
|
||||
F: drivers/net/tulip/dmfe.c
|
||||
F: drivers/net/ethernet/tulip/dmfe.c
|
||||
|
||||
DC390/AM53C974 SCSI driver
|
||||
M: Kurt Garloff <garloff@suse.de>
|
||||
|
@ -2110,7 +2118,7 @@ F: net/decnet/
|
|||
DEFXX FDDI NETWORK DRIVER
|
||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||
S: Maintained
|
||||
F: drivers/net/defxx.*
|
||||
F: drivers/net/fddi/defxx.*
|
||||
|
||||
DELL LAPTOP DRIVER
|
||||
M: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
|
@ -2477,7 +2485,7 @@ EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER
|
|||
M: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ehea/
|
||||
F: drivers/net/ethernet/ibm/ehea/
|
||||
|
||||
EMBEDDED LINUX
|
||||
M: Paul Gortmaker <paul.gortmaker@windriver.com>
|
||||
|
@ -2522,7 +2530,7 @@ ETHEREXPRESS-16 NETWORK DRIVER
|
|||
M: Philip Blundell <philb@gnu.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/eexpress.*
|
||||
F: drivers/net/ethernet/i825xx/eexpress.*
|
||||
|
||||
ETHERNET BRIDGE
|
||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
||||
|
@ -2536,7 +2544,7 @@ F: net/bridge/
|
|||
ETHERTEAM 16I DRIVER
|
||||
M: Mika Kuoppala <miku@iki.fi>
|
||||
S: Maintained
|
||||
F: drivers/net/eth16i.c
|
||||
F: drivers/net/ethernet/fujitsu/eth16i.c
|
||||
|
||||
EXT2 FILE SYSTEM
|
||||
M: Jan Kara <jack@suse.cz>
|
||||
|
@ -2705,7 +2713,7 @@ M: Vitaly Bordug <vbordug@ru.mvista.com>
|
|||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/fs_enet/
|
||||
F: drivers/net/ethernet/freescale/fs_enet/
|
||||
F: include/linux/fs_enet_pd.h
|
||||
|
||||
FREESCALE QUICC ENGINE LIBRARY
|
||||
|
@ -2727,7 +2735,7 @@ M: Li Yang <leoli@freescale.com>
|
|||
L: netdev@vger.kernel.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: drivers/net/ucc_geth*
|
||||
F: drivers/net/ethernet/freescale/ucc_geth*
|
||||
|
||||
FREESCALE QUICC ENGINE UCC UART DRIVER
|
||||
M: Timur Tabi <timur@freescale.com>
|
||||
|
@ -3065,6 +3073,7 @@ S: Maintained
|
|||
F: include/linux/hippidevice.h
|
||||
F: include/linux/if_hippi.h
|
||||
F: net/802/hippi.c
|
||||
F: drivers/net/hippi/
|
||||
|
||||
HOST AP DRIVER
|
||||
M: Jouni Malinen <j@w1.fi>
|
||||
|
@ -3082,7 +3091,7 @@ F: drivers/platform/x86/tc1100-wmi.c
|
|||
HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
|
||||
M: Jaroslav Kysela <perex@perex.cz>
|
||||
S: Maintained
|
||||
F: drivers/net/hp100.*
|
||||
F: drivers/net/ethernet/hp/hp100.*
|
||||
|
||||
HPET: High Precision Event Timers driver
|
||||
M: Clemens Ladisch <clemens@ladisch.de>
|
||||
|
@ -3180,7 +3189,7 @@ IBM Power Virtual Ethernet Device Driver
|
|||
M: Santiago Leon <santil@linux.vnet.ibm.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/ibmveth.*
|
||||
F: drivers/net/ethernet/ibm/ibmveth.*
|
||||
|
||||
IBM ServeRAID RAID DRIVER
|
||||
P: Jack Hammer
|
||||
|
@ -3347,7 +3356,7 @@ F: arch/arm/mach-ixp4xx/include/mach/qmgr.h
|
|||
F: arch/arm/mach-ixp4xx/include/mach/npe.h
|
||||
F: arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
|
||||
F: arch/arm/mach-ixp4xx/ixp4xx_npe.c
|
||||
F: drivers/net/arm/ixp4xx_eth.c
|
||||
F: drivers/net/ethernet/xscale/ixp4xx_eth.c
|
||||
F: drivers/net/wan/ixp4xx_hss.c
|
||||
|
||||
INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT
|
||||
|
@ -3359,7 +3368,7 @@ INTEL IXP2000 ETHERNET DRIVER
|
|||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ixp2000/
|
||||
F: drivers/net/ethernet/xscale/ixp2000/
|
||||
|
||||
INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf)
|
||||
M: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
|
||||
|
@ -3368,13 +3377,13 @@ M: Bruce Allan <bruce.w.allan@intel.com>
|
|||
M: Carolyn Wyborny <carolyn.wyborny@intel.com>
|
||||
M: Don Skidmore <donald.c.skidmore@intel.com>
|
||||
M: Greg Rose <gregory.v.rose@intel.com>
|
||||
M: PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com>
|
||||
M: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
|
||||
M: Alex Duyck <alexander.h.duyck@intel.com>
|
||||
M: John Ronciak <john.ronciak@intel.com>
|
||||
L: e1000-devel@lists.sourceforge.net
|
||||
W: http://e1000.sourceforge.net/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git
|
||||
S: Supported
|
||||
F: Documentation/networking/e100.txt
|
||||
F: Documentation/networking/e1000.txt
|
||||
|
@ -3384,14 +3393,7 @@ F: Documentation/networking/igbvf.txt
|
|||
F: Documentation/networking/ixgb.txt
|
||||
F: Documentation/networking/ixgbe.txt
|
||||
F: Documentation/networking/ixgbevf.txt
|
||||
F: drivers/net/e100.c
|
||||
F: drivers/net/e1000/
|
||||
F: drivers/net/e1000e/
|
||||
F: drivers/net/igb/
|
||||
F: drivers/net/igbvf/
|
||||
F: drivers/net/ixgb/
|
||||
F: drivers/net/ixgbe/
|
||||
F: drivers/net/ixgbevf/
|
||||
F: drivers/net/ethernet/intel/
|
||||
|
||||
INTEL MRST PMU DRIVER
|
||||
M: Len Brown <len.brown@intel.com>
|
||||
|
@ -3443,7 +3445,7 @@ M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
|||
M: Intel Linux Wireless <ilw@linux.intel.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
W: http://intellinuxwireless.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git
|
||||
S: Supported
|
||||
F: drivers/net/wireless/iwlwifi/
|
||||
|
||||
|
@ -3459,7 +3461,7 @@ IOC3 ETHERNET DRIVER
|
|||
M: Ralf Baechle <ralf@linux-mips.org>
|
||||
L: linux-mips@linux-mips.org
|
||||
S: Maintained
|
||||
F: drivers/net/ioc3-eth.c
|
||||
F: drivers/net/ethernet/sgi/ioc3-eth.c
|
||||
|
||||
IOC3 SERIAL DRIVER
|
||||
M: Pat Gefre <pfg@sgi.com>
|
||||
|
@ -3477,7 +3479,7 @@ M: Francois Romieu <romieu@fr.zoreil.com>
|
|||
M: Sorbica Shieh <sorbica@icplus.com.tw>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ipg.*
|
||||
F: drivers/net/ethernet/icplus/ipg.*
|
||||
|
||||
IPATH DRIVER
|
||||
M: Mike Marciniszyn <infinipath@qlogic.com>
|
||||
|
@ -3625,7 +3627,7 @@ JME NETWORK DRIVER
|
|||
M: Guo-Fu Tseng <cooldavid@cooldavid.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/jme.*
|
||||
F: drivers/net/ethernet/jme.*
|
||||
|
||||
JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
|
||||
M: David Woodhouse <dwmw2@infradead.org>
|
||||
|
@ -4156,7 +4158,7 @@ MARVELL MV643XX ETHERNET DRIVER
|
|||
M: Lennert Buytenhek <buytenh@wantstofly.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/mv643xx_eth.*
|
||||
F: drivers/net/ethernet/marvell/mv643xx_eth.*
|
||||
F: include/linux/mv643xx.h
|
||||
|
||||
MARVELL MWIFIEX WIRELESS DRIVER
|
||||
|
@ -4370,12 +4372,12 @@ M: Andrew Gallatin <gallatin@myri.com>
|
|||
L: netdev@vger.kernel.org
|
||||
W: http://www.myri.com/scs/download-Myri10GE.html
|
||||
S: Supported
|
||||
F: drivers/net/myri10ge/
|
||||
F: drivers/net/ethernet/myricom/myri10ge/
|
||||
|
||||
NATSEMI ETHERNET DRIVER (DP8381x)
|
||||
M: Tim Hockin <thockin@hockin.org>
|
||||
S: Maintained
|
||||
F: drivers/net/natsemi.c
|
||||
F: drivers/net/ethernet/natsemi/natsemi.c
|
||||
|
||||
NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
|
||||
M: Daniel Mack <zonque@gmail.com>
|
||||
|
@ -4415,9 +4417,8 @@ W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous
|
|||
W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous
|
||||
S: Supported
|
||||
F: Documentation/networking/s2io.txt
|
||||
F: drivers/net/s2io*
|
||||
F: Documentation/networking/vxge.txt
|
||||
F: drivers/net/vxge/
|
||||
F: drivers/net/ethernet/neterion/
|
||||
|
||||
NETFILTER/IPTABLES/IPCHAINS
|
||||
P: Rusty Russell
|
||||
|
@ -4531,11 +4532,23 @@ F: include/linux/if_*
|
|||
F: include/linux/*device.h
|
||||
|
||||
NETXEN (1/10) GbE SUPPORT
|
||||
M: Amit Kumar Salecha <amit.salecha@qlogic.com>
|
||||
M: Sony Chacko <sony.chacko@qlogic.com>
|
||||
M: Rajesh Borundia <rajesh.borundia@qlogic.com>
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.qlogic.com
|
||||
S: Supported
|
||||
F: drivers/net/netxen/
|
||||
F: drivers/net/ethernet/qlogic/netxen/
|
||||
|
||||
NFC SUBSYSTEM
|
||||
M: Lauro Ramos Venancio <lauro.venancio@openbossa.org>
|
||||
M: Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
|
||||
M: Samuel Ortiz <sameo@linux.intel.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
F: net/nfc/
|
||||
F: include/linux/nfc.h
|
||||
F: include/net/nfc/
|
||||
F: drivers/nfc/
|
||||
|
||||
NFS, SUNRPC, AND LOCKD CLIENTS
|
||||
M: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
|
@ -4556,7 +4569,7 @@ M: Jan-Pascal van Best <janpascal@vanbest.org>
|
|||
M: Andreas Mohr <andi@lisas.de>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ni5010.*
|
||||
F: drivers/net/ethernet/racal/ni5010.*
|
||||
|
||||
NILFS2 FILESYSTEM
|
||||
M: KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
|
||||
|
@ -4822,7 +4835,7 @@ PA SEMI ETHERNET DRIVER
|
|||
M: Olof Johansson <olof@lixom.net>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/pasemi_mac.*
|
||||
F: drivers/net/ethernet/pasemi/*
|
||||
|
||||
PA SEMI SMBUS DRIVER
|
||||
M: Olof Johansson <olof@lixom.net>
|
||||
|
@ -4969,7 +4982,7 @@ PCNET32 NETWORK DRIVER
|
|||
M: Don Fry <pcnet32@frontier.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/pcnet32.c
|
||||
F: drivers/net/ethernet/amd/pcnet32.c
|
||||
|
||||
PCRYPT PARALLEL CRYPTO ENGINE
|
||||
M: Steffen Klassert <steffen.klassert@secunet.com>
|
||||
|
@ -5101,7 +5114,7 @@ PPP PROTOCOL DRIVERS AND COMPRESSORS
|
|||
M: Paul Mackerras <paulus@samba.org>
|
||||
L: linux-ppp@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ppp_*
|
||||
F: drivers/net/ppp/ppp_*
|
||||
|
||||
PPP OVER ATM (RFC 2364)
|
||||
M: Mitchell Blank Jr <mitch@sfgoth.com>
|
||||
|
@ -5112,8 +5125,8 @@ F: include/linux/atmppp.h
|
|||
PPP OVER ETHERNET
|
||||
M: Michal Ostrowski <mostrows@earthlink.net>
|
||||
S: Maintained
|
||||
F: drivers/net/pppoe.c
|
||||
F: drivers/net/pppox.c
|
||||
F: drivers/net/ppp/pppoe.c
|
||||
F: drivers/net/ppp/pppox.c
|
||||
|
||||
PPP OVER L2TP
|
||||
M: James Chapman <jchapman@katalix.com>
|
||||
|
@ -5134,7 +5147,7 @@ PPTP DRIVER
|
|||
M: Dmitry Kozlov <xeb@mail.ru>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/pptp.c
|
||||
F: drivers/net/ppp/pptp.c
|
||||
W: http://sourceforge.net/projects/accel-pptp
|
||||
|
||||
PREEMPTIBLE KERNEL
|
||||
|
@ -5163,7 +5176,7 @@ M: Geoff Levand <geoff@infradead.org>
|
|||
L: netdev@vger.kernel.org
|
||||
L: cbe-oss-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: drivers/net/ps3_gelic_net.*
|
||||
F: drivers/net/ethernet/toshiba/ps3_gelic_net.*
|
||||
|
||||
PS3 PLATFORM SUPPORT
|
||||
M: Geoff Levand <geoff@infradead.org>
|
||||
|
@ -5281,23 +5294,24 @@ M: linux-driver@qlogic.com
|
|||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/networking/LICENSE.qla3xxx
|
||||
F: drivers/net/qla3xxx.*
|
||||
F: drivers/net/ethernet/qlogic/qla3xxx.*
|
||||
|
||||
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
|
||||
M: Amit Kumar Salecha <amit.salecha@qlogic.com>
|
||||
M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
|
||||
M: Sony Chacko <sony.chacko@qlogic.com>
|
||||
M: linux-driver@qlogic.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/qlcnic/
|
||||
F: drivers/net/ethernet/qlogic/qlcnic/
|
||||
|
||||
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
||||
M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
|
||||
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
|
||||
M: Ron Mercer <ron.mercer@qlogic.com>
|
||||
M: linux-driver@qlogic.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/qlge/
|
||||
F: drivers/net/ethernet/qlogic/qlge/
|
||||
|
||||
QNX4 FILESYSTEM
|
||||
M: Anders Larsen <al@alarsen.net>
|
||||
|
@ -5379,7 +5393,7 @@ RDC R6040 FAST ETHERNET DRIVER
|
|||
M: Florian Fainelli <florian@openwrt.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/r6040.c
|
||||
F: drivers/net/ethernet/rdc/r6040.c
|
||||
|
||||
RDS - RELIABLE DATAGRAM SOCKETS
|
||||
M: Andy Grover <andy.grover@oracle.com>
|
||||
|
@ -5783,7 +5797,7 @@ M: Ajit Khaparde <ajit.khaparde@emulex.com>
|
|||
L: netdev@vger.kernel.org
|
||||
W: http://www.emulex.com
|
||||
S: Supported
|
||||
F: drivers/net/benet/
|
||||
F: drivers/net/ethernet/emulex/benet/
|
||||
|
||||
SFC NETWORK DRIVER
|
||||
M: Solarflare linux maintainers <linux-net-drivers@solarflare.com>
|
||||
|
@ -5791,7 +5805,7 @@ M: Steve Hodgson <shodgson@solarflare.com>
|
|||
M: Ben Hutchings <bhutchings@solarflare.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/sfc/
|
||||
F: drivers/net/ethernet/sfc/
|
||||
|
||||
SGI GRU DRIVER
|
||||
M: Jack Steiner <steiner@sgi.com>
|
||||
|
@ -5857,14 +5871,14 @@ SIS 190 ETHERNET DRIVER
|
|||
M: Francois Romieu <romieu@fr.zoreil.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/sis190.c
|
||||
F: drivers/net/ethernet/sis/sis190.c
|
||||
|
||||
SIS 900/7016 FAST ETHERNET DRIVER
|
||||
M: Daniele Venzano <venza@brownhat.org>
|
||||
W: http://www.brownhat.org/sis900.html
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/sis900.*
|
||||
F: drivers/net/ethernet/sis/sis900.*
|
||||
|
||||
SIS 96X I2C/SMBUS DRIVER
|
||||
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
|
||||
|
@ -5891,8 +5905,7 @@ SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
|||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/skge.*
|
||||
F: drivers/net/sky2.*
|
||||
F: drivers/net/ethernet/marvell/sk*
|
||||
|
||||
SLAB ALLOCATOR
|
||||
M: Christoph Lameter <cl@linux-foundation.org>
|
||||
|
@ -5906,7 +5919,7 @@ F: mm/sl?b.c
|
|||
SMC91x ETHERNET DRIVER
|
||||
M: Nicolas Pitre <nico@fluxnic.net>
|
||||
S: Odd Fixes
|
||||
F: drivers/net/smc91x.*
|
||||
F: drivers/net/ethernet/smsc/smc91x.*
|
||||
|
||||
SMM665 HARDWARE MONITOR DRIVER
|
||||
M: Guenter Roeck <linux@roeck-us.net>
|
||||
|
@ -5941,13 +5954,13 @@ M: Steve Glendinning <steve.glendinning@smsc.com>
|
|||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: include/linux/smsc911x.h
|
||||
F: drivers/net/smsc911x.*
|
||||
F: drivers/net/ethernet/smsc/smsc911x.*
|
||||
|
||||
SMSC9420 PCI ETHERNET DRIVER
|
||||
M: Steve Glendinning <steve.glendinning@smsc.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/smsc9420.*
|
||||
F: drivers/net/ethernet/smsc/smsc9420.*
|
||||
|
||||
SN-IA64 (Itanium) SUB-PLATFORM
|
||||
M: Jes Sorensen <jes@sgi.com>
|
||||
|
@ -5981,7 +5994,7 @@ SONIC NETWORK DRIVER
|
|||
M: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/sonic.*
|
||||
F: drivers/net/ethernet/natsemi/sonic.*
|
||||
|
||||
SONICS SILICON BACKPLANE DRIVER (SSB)
|
||||
M: Michael Buesch <m@bues.ch>
|
||||
|
@ -6122,7 +6135,7 @@ M: Jens Osterkamp <jens@de.ibm.com>
|
|||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/networking/spider_net.txt
|
||||
F: drivers/net/spider_net*
|
||||
F: drivers/net/ethernet/toshiba/spider_net*
|
||||
|
||||
SPU FILE SYSTEM
|
||||
M: Jeremy Kerr <jk@ozlabs.org>
|
||||
|
@ -6169,12 +6182,6 @@ M: Jakub Schmidtke <sjakub@gmail.com>
|
|||
S: Odd Fixes
|
||||
F: drivers/staging/asus_oled/
|
||||
|
||||
STAGING - ATHEROS ATH6KL WIRELESS DRIVER
|
||||
M: Luis R. Rodriguez <mcgrof@gmail.com>
|
||||
M: Naveen Singh <nsingh@atheros.com>
|
||||
S: Odd Fixes
|
||||
F: drivers/staging/ath6kl/
|
||||
|
||||
STAGING - COMEDI
|
||||
M: Ian Abbott <abbotti@mev.co.uk>
|
||||
M: Mori Hess <fmhess@users.sourceforge.net>
|
||||
|
@ -6300,7 +6307,7 @@ F: drivers/staging/xgifb/
|
|||
STARFIRE/DURALAN NETWORK DRIVER
|
||||
M: Ion Badulescu <ionut@badula.org>
|
||||
S: Odd Fixes
|
||||
F: drivers/net/starfire*
|
||||
F: drivers/net/ethernet/adaptec/starfire*
|
||||
|
||||
SUN3/3X
|
||||
M: Sam Creasey <sammy@sammy.net>
|
||||
|
@ -6309,6 +6316,7 @@ S: Maintained
|
|||
F: arch/m68k/kernel/*sun3*
|
||||
F: arch/m68k/sun3*/
|
||||
F: arch/m68k/include/asm/sun3*
|
||||
F: drivers/net/ethernet/i825xx/sun3*
|
||||
|
||||
SUPERH
|
||||
M: Paul Mundt <lethal@linux-sh.org>
|
||||
|
@ -6396,7 +6404,7 @@ TEHUTI ETHERNET DRIVER
|
|||
M: Andy Gospodarek <andy@greyhouse.net>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/tehuti*
|
||||
F: drivers/net/ethernet/tehuti/*
|
||||
|
||||
Telecom Clock Driver for MCPL0010
|
||||
M: Mark Gross <mark.gross@intel.com>
|
||||
|
@ -6447,7 +6455,7 @@ W: http://www.tilera.com/scm/
|
|||
S: Supported
|
||||
F: arch/tile/
|
||||
F: drivers/tty/hvc/hvc_tile.c
|
||||
F: drivers/net/tile/
|
||||
F: drivers/net/ethernet/tile/
|
||||
F: drivers/edac/tile_edac.c
|
||||
|
||||
TLAN NETWORK DRIVER
|
||||
|
@ -6456,7 +6464,7 @@ L: tlan-devel@lists.sourceforge.net (subscribers-only)
|
|||
W: http://sourceforge.net/projects/tlan/
|
||||
S: Maintained
|
||||
F: Documentation/networking/tlan.txt
|
||||
F: drivers/net/tlan.*
|
||||
F: drivers/net/ethernet/ti/tlan.*
|
||||
|
||||
TOMOYO SECURITY MODULE
|
||||
M: Kentaro Takeda <takedakn@nttdata.co.jp>
|
||||
|
@ -6550,7 +6558,7 @@ TULIP NETWORK DRIVERS
|
|||
M: Grant Grundler <grundler@parisc-linux.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/tulip/
|
||||
F: drivers/net/ethernet/tulip/
|
||||
|
||||
TUN/TAP driver
|
||||
M: Maxim Krasnyansky <maxk@qualcomm.com>
|
||||
|
@ -6596,7 +6604,7 @@ W: http://uclinux-h8.sourceforge.jp/
|
|||
S: Supported
|
||||
F: arch/h8300/
|
||||
F: drivers/ide/ide-h8300.c
|
||||
F: drivers/net/ne-h8300.c
|
||||
F: drivers/net/ethernet/8390/ne-h8300.c
|
||||
|
||||
UDF FILESYSTEM
|
||||
M: Jan Kara <jack@suse.cz>
|
||||
|
@ -7024,7 +7032,7 @@ F: include/linux/vhost.h
|
|||
VIA RHINE NETWORK DRIVER
|
||||
M: Roger Luethi <rl@hellgate.ch>
|
||||
S: Maintained
|
||||
F: drivers/net/via-rhine.c
|
||||
F: drivers/net/ethernet/via/via-rhine.c
|
||||
|
||||
VIAPRO SMBUS DRIVER
|
||||
M: Jean Delvare <khali@linux-fr.org>
|
||||
|
@ -7052,7 +7060,7 @@ VIA VELOCITY NETWORK DRIVER
|
|||
M: Francois Romieu <romieu@fr.zoreil.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/via-velocity.*
|
||||
F: drivers/net/ethernet/via/via-velocity.*
|
||||
|
||||
VLAN (802.1Q)
|
||||
M: Patrick McHardy <kaber@trash.net>
|
||||
|
|
|
@ -4,6 +4,7 @@ config ETRAX_ETHERNET
|
|||
bool "Ethernet support"
|
||||
depends on ETRAX_ARCH_V10
|
||||
select NET_ETHERNET
|
||||
select NET_CORE
|
||||
select MII
|
||||
help
|
||||
This option enables the ETRAX 100LX built-in 10/100Mbit Ethernet
|
||||
|
|
|
@ -4,6 +4,7 @@ config ETRAX_ETHERNET
|
|||
bool "Ethernet support"
|
||||
depends on ETRAX_ARCH_V32
|
||||
select NET_ETHERNET
|
||||
select NET_CORE
|
||||
select MII
|
||||
help
|
||||
This option enables the ETRAX FS built-in 10/100Mbit Ethernet
|
||||
|
|
|
@ -172,7 +172,7 @@ static const struct net_device_ops simeth_netdev_ops = {
|
|||
.ndo_stop = simeth_close,
|
||||
.ndo_start_xmit = simeth_tx,
|
||||
.ndo_get_stats = simeth_get_stats,
|
||||
.ndo_set_multicast_list = set_multicast_list, /* not yet used */
|
||||
.ndo_set_rx_mode = set_multicast_list, /* not yet used */
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -92,15 +92,8 @@ config BCM47XX
|
|||
select DMA_NONCOHERENT
|
||||
select HW_HAS_PCI
|
||||
select IRQ_CPU
|
||||
select SYS_HAS_CPU_MIPS32_R1
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
select SSB
|
||||
select SSB_DRIVER_MIPS
|
||||
select SSB_DRIVER_EXTIF
|
||||
select SSB_EMBEDDED
|
||||
select SSB_B43_PCI_BRIDGE if PCI
|
||||
select SSB_PCICORE_HOSTMODE if PCI
|
||||
select GENERIC_GPIO
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
select CFE
|
||||
|
@ -791,6 +784,7 @@ endchoice
|
|||
|
||||
source "arch/mips/alchemy/Kconfig"
|
||||
source "arch/mips/ath79/Kconfig"
|
||||
source "arch/mips/bcm47xx/Kconfig"
|
||||
source "arch/mips/bcm63xx/Kconfig"
|
||||
source "arch/mips/jazz/Kconfig"
|
||||
source "arch/mips/jz4740/Kconfig"
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
if BCM47XX
|
||||
|
||||
config BCM47XX_SSB
|
||||
bool "SSB Support for Broadcom BCM47XX"
|
||||
select SYS_HAS_CPU_MIPS32_R1
|
||||
select SSB
|
||||
select SSB_DRIVER_MIPS
|
||||
select SSB_DRIVER_EXTIF
|
||||
select SSB_EMBEDDED
|
||||
select SSB_B43_PCI_BRIDGE if PCI
|
||||
select SSB_PCICORE_HOSTMODE if PCI
|
||||
default y
|
||||
help
|
||||
Add support for old Broadcom BCM47xx boards with Sonics Silicon Backplane support.
|
||||
|
||||
This will generate an image with support for SSB and MIPS32 R1 instruction set.
|
||||
|
||||
config BCM47XX_BCMA
|
||||
bool "BCMA Support for Broadcom BCM47XX"
|
||||
select SYS_HAS_CPU_MIPS32_R2
|
||||
select BCMA
|
||||
select BCMA_HOST_SOC
|
||||
select BCMA_DRIVER_MIPS
|
||||
select BCMA_DRIVER_PCI_HOSTMODE if PCI
|
||||
default y
|
||||
help
|
||||
Add support for new Broadcom BCM47xx boards with Broadcom specific Advanced Microcontroller Bus.
|
||||
|
||||
This will generate an image with support for BCMA and MIPS32 R2 instruction set.
|
||||
|
||||
endif
|
|
@ -3,4 +3,5 @@
|
|||
# under Linux.
|
||||
#
|
||||
|
||||
obj-y := gpio.o irq.o nvram.o prom.o serial.o setup.o time.o wgt634u.o
|
||||
obj-y += gpio.o irq.o nvram.o prom.o serial.o setup.o time.o
|
||||
obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o
|
||||
|
|
|
@ -20,42 +20,82 @@ static DECLARE_BITMAP(gpio_in_use, BCM47XX_EXTIF_GPIO_LINES);
|
|||
|
||||
int gpio_request(unsigned gpio, const char *tag)
|
||||
{
|
||||
if (ssb_chipco_available(&ssb_bcm47xx.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
|
||||
if (ssb_extif_available(&ssb_bcm47xx.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
if (ssb_extif_available(&bcm47xx_bus.ssb.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return -EINVAL;
|
||||
|
||||
if (test_and_set_bit(gpio, gpio_in_use))
|
||||
return -EBUSY;
|
||||
if (test_and_set_bit(gpio, gpio_in_use))
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
if (gpio >= BCM47XX_CHIPCO_GPIO_LINES)
|
||||
return -EINVAL;
|
||||
|
||||
if (test_and_set_bit(gpio, gpio_in_use))
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL(gpio_request);
|
||||
|
||||
void gpio_free(unsigned gpio)
|
||||
{
|
||||
if (ssb_chipco_available(&ssb_bcm47xx.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco) &&
|
||||
((unsigned)gpio >= BCM47XX_CHIPCO_GPIO_LINES))
|
||||
return;
|
||||
|
||||
if (ssb_extif_available(&ssb_bcm47xx.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return;
|
||||
if (ssb_extif_available(&bcm47xx_bus.ssb.extif) &&
|
||||
((unsigned)gpio >= BCM47XX_EXTIF_GPIO_LINES))
|
||||
return;
|
||||
|
||||
clear_bit(gpio, gpio_in_use);
|
||||
clear_bit(gpio, gpio_in_use);
|
||||
return;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
if (gpio >= BCM47XX_CHIPCO_GPIO_LINES)
|
||||
return;
|
||||
|
||||
clear_bit(gpio, gpio_in_use);
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(gpio_free);
|
||||
|
||||
int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
if (ssb_chipco_available(&ssb_bcm47xx.chipco))
|
||||
return ssb_mips_irq(ssb_bcm47xx.chipco.dev) + 2;
|
||||
else if (ssb_extif_available(&ssb_bcm47xx.extif))
|
||||
return ssb_mips_irq(ssb_bcm47xx.extif.dev) + 2;
|
||||
else
|
||||
return -EINVAL;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
if (ssb_chipco_available(&bcm47xx_bus.ssb.chipco))
|
||||
return ssb_mips_irq(bcm47xx_bus.ssb.chipco.dev) + 2;
|
||||
else if (ssb_extif_available(&bcm47xx_bus.ssb.extif))
|
||||
return ssb_mips_irq(bcm47xx_bus.ssb.extif.dev) + 2;
|
||||
else
|
||||
return -EINVAL;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
return bcma_core_mips_irq(bcm47xx_bus.bcma.bus.drv_cc.core) + 2;
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpio_to_irq);
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/irq_cpu.h>
|
||||
#include <bcm47xx.h>
|
||||
|
||||
void plat_irq_dispatch(void)
|
||||
{
|
||||
|
@ -51,5 +52,16 @@ void plat_irq_dispatch(void)
|
|||
|
||||
void __init arch_init_irq(void)
|
||||
{
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
if (bcm47xx_bus_type == BCM47XX_BUS_TYPE_BCMA) {
|
||||
bcma_write32(bcm47xx_bus.bcma.bus.drv_mips.core,
|
||||
BCMA_MIPS_MIPS74K_INTMASK(5), 1 << 31);
|
||||
/*
|
||||
* the kernel reads the timer irq from some register and thinks
|
||||
* it's #5, but we offset it by 2 and route to #7
|
||||
*/
|
||||
cp0_compare_irq = 7;
|
||||
}
|
||||
#endif
|
||||
mips_cpu_irq_init();
|
||||
}
|
||||
|
|
|
@ -26,14 +26,35 @@ static char nvram_buf[NVRAM_SPACE];
|
|||
/* Probe for NVRAM header */
|
||||
static void early_nvram_init(void)
|
||||
{
|
||||
struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
struct ssb_mipscore *mcore_ssb;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
struct bcma_drv_cc *bcma_cc;
|
||||
#endif
|
||||
struct nvram_header *header;
|
||||
int i;
|
||||
u32 base, lim, off;
|
||||
u32 base = 0;
|
||||
u32 lim = 0;
|
||||
u32 off;
|
||||
u32 *src, *dst;
|
||||
|
||||
base = mcore->flash_window;
|
||||
lim = mcore->flash_window_size;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
mcore_ssb = &bcm47xx_bus.ssb.mipscore;
|
||||
base = mcore_ssb->flash_window;
|
||||
lim = mcore_ssb->flash_window_size;
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_cc = &bcm47xx_bus.bcma.bus.drv_cc;
|
||||
base = bcma_cc->pflash.window;
|
||||
lim = bcma_cc->pflash.window_size;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
off = FLASH_MIN;
|
||||
while (off <= lim) {
|
||||
|
|
|
@ -23,10 +23,11 @@ static struct platform_device uart8250_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static int __init uart8250_init(void)
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
static int __init uart8250_init_ssb(void)
|
||||
{
|
||||
int i;
|
||||
struct ssb_mipscore *mcore = &(ssb_bcm47xx.mipscore);
|
||||
struct ssb_mipscore *mcore = &(bcm47xx_bus.ssb.mipscore);
|
||||
|
||||
memset(&uart8250_data, 0, sizeof(uart8250_data));
|
||||
|
||||
|
@ -44,6 +45,47 @@ static int __init uart8250_init(void)
|
|||
}
|
||||
return platform_device_register(&uart8250_device);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
static int __init uart8250_init_bcma(void)
|
||||
{
|
||||
int i;
|
||||
struct bcma_drv_cc *cc = &(bcm47xx_bus.bcma.bus.drv_cc);
|
||||
|
||||
memset(&uart8250_data, 0, sizeof(uart8250_data));
|
||||
|
||||
for (i = 0; i < cc->nr_serial_ports; i++) {
|
||||
struct plat_serial8250_port *p = &(uart8250_data[i]);
|
||||
struct bcma_serial_port *bcma_port;
|
||||
bcma_port = &(cc->serial_ports[i]);
|
||||
|
||||
p->mapbase = (unsigned int) bcma_port->regs;
|
||||
p->membase = (void *) bcma_port->regs;
|
||||
p->irq = bcma_port->irq + 2;
|
||||
p->uartclk = bcma_port->baud_base;
|
||||
p->regshift = bcma_port->reg_shift;
|
||||
p->iotype = UPIO_MEM;
|
||||
p->flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
|
||||
}
|
||||
return platform_device_register(&uart8250_device);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __init uart8250_init(void)
|
||||
{
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
return uart8250_init_ssb();
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
return uart8250_init_bcma();
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
module_init(uart8250_init);
|
||||
|
||||
|
|
|
@ -29,21 +29,36 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/ssb/ssb.h>
|
||||
#include <linux/ssb/ssb_embedded.h>
|
||||
#include <linux/bcma/bcma_soc.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/time.h>
|
||||
#include <bcm47xx.h>
|
||||
#include <asm/mach-bcm47xx/nvram.h>
|
||||
|
||||
struct ssb_bus ssb_bcm47xx;
|
||||
EXPORT_SYMBOL(ssb_bcm47xx);
|
||||
union bcm47xx_bus bcm47xx_bus;
|
||||
EXPORT_SYMBOL(bcm47xx_bus);
|
||||
|
||||
enum bcm47xx_bus_type bcm47xx_bus_type;
|
||||
EXPORT_SYMBOL(bcm47xx_bus_type);
|
||||
|
||||
static void bcm47xx_machine_restart(char *command)
|
||||
{
|
||||
printk(KERN_ALERT "Please stand by while rebooting the system...\n");
|
||||
local_irq_disable();
|
||||
/* Set the watchdog timer to reset immediately */
|
||||
ssb_watchdog_timer_set(&ssb_bcm47xx, 1);
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
ssb_watchdog_timer_set(&bcm47xx_bus.ssb, 1);
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_chipco_watchdog_timer_set(&bcm47xx_bus.bcma.bus.drv_cc, 1);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
while (1)
|
||||
cpu_relax();
|
||||
}
|
||||
|
@ -52,11 +67,23 @@ static void bcm47xx_machine_halt(void)
|
|||
{
|
||||
/* Disable interrupts and watchdog and spin forever */
|
||||
local_irq_disable();
|
||||
ssb_watchdog_timer_set(&ssb_bcm47xx, 0);
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
ssb_watchdog_timer_set(&bcm47xx_bus.ssb, 0);
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_chipco_watchdog_timer_set(&bcm47xx_bus.bcma.bus.drv_cc, 0);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
while (1)
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
#define READ_FROM_NVRAM(_outvar, name, buf) \
|
||||
if (nvram_getprefix(prefix, name, buf, sizeof(buf)) >= 0)\
|
||||
sprom->_outvar = simple_strtoul(buf, NULL, 0);
|
||||
|
@ -247,7 +274,7 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void __init plat_mem_setup(void)
|
||||
static void __init bcm47xx_register_ssb(void)
|
||||
{
|
||||
int err;
|
||||
char buf[100];
|
||||
|
@ -258,12 +285,12 @@ void __init plat_mem_setup(void)
|
|||
printk(KERN_WARNING "bcm47xx: someone else already registered"
|
||||
" a ssb SPROM callback handler (err %d)\n", err);
|
||||
|
||||
err = ssb_bus_ssbbus_register(&ssb_bcm47xx, SSB_ENUM_BASE,
|
||||
err = ssb_bus_ssbbus_register(&(bcm47xx_bus.ssb), SSB_ENUM_BASE,
|
||||
bcm47xx_get_invariants);
|
||||
if (err)
|
||||
panic("Failed to initialize SSB bus (err %d)\n", err);
|
||||
|
||||
mcore = &ssb_bcm47xx.mipscore;
|
||||
mcore = &bcm47xx_bus.ssb.mipscore;
|
||||
if (nvram_getenv("kernel_args", buf, sizeof(buf)) >= 0) {
|
||||
if (strstr(buf, "console=ttyS1")) {
|
||||
struct ssb_serial_port port;
|
||||
|
@ -276,8 +303,57 @@ void __init plat_mem_setup(void)
|
|||
memcpy(&mcore->serial_ports[1], &port, sizeof(port));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
static void __init bcm47xx_register_bcma(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = bcma_host_soc_register(&bcm47xx_bus.bcma);
|
||||
if (err)
|
||||
panic("Failed to initialize BCMA bus (err %d)\n", err);
|
||||
}
|
||||
#endif
|
||||
|
||||
void __init plat_mem_setup(void)
|
||||
{
|
||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
||||
|
||||
if (c->cputype == CPU_74K) {
|
||||
printk(KERN_INFO "bcm47xx: using bcma bus\n");
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
bcm47xx_bus_type = BCM47XX_BUS_TYPE_BCMA;
|
||||
bcm47xx_register_bcma();
|
||||
#endif
|
||||
} else {
|
||||
printk(KERN_INFO "bcm47xx: using ssb bus\n");
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
bcm47xx_bus_type = BCM47XX_BUS_TYPE_SSB;
|
||||
bcm47xx_register_ssb();
|
||||
#endif
|
||||
}
|
||||
|
||||
_machine_restart = bcm47xx_machine_restart;
|
||||
_machine_halt = bcm47xx_machine_halt;
|
||||
pm_power_off = bcm47xx_machine_halt;
|
||||
}
|
||||
|
||||
static int __init bcm47xx_register_bus_complete(void)
|
||||
{
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
/* Nothing to do */
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_bus_register(&bcm47xx_bus.bcma.bus);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
device_initcall(bcm47xx_register_bus_complete);
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
void __init plat_time_init(void)
|
||||
{
|
||||
unsigned long hz;
|
||||
unsigned long hz = 0;
|
||||
|
||||
/*
|
||||
* Use deterministic values for initial counter interrupt
|
||||
|
@ -39,7 +39,19 @@ void __init plat_time_init(void)
|
|||
write_c0_count(0);
|
||||
write_c0_compare(0xffff);
|
||||
|
||||
hz = ssb_cpu_clock(&ssb_bcm47xx.mipscore) / 2;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
hz = ssb_cpu_clock(&bcm47xx_bus.ssb.mipscore) / 2;
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
hz = bcma_cpu_clock(&bcm47xx_bus.bcma.bus.drv_mips) / 2;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (!hz)
|
||||
hz = 100000000;
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ static irqreturn_t gpio_interrupt(int irq, void *ignored)
|
|||
|
||||
/* Interrupts are shared, check if the current one is
|
||||
a GPIO interrupt. */
|
||||
if (!ssb_chipco_irq_status(&ssb_bcm47xx.chipco,
|
||||
if (!ssb_chipco_irq_status(&bcm47xx_bus.ssb.chipco,
|
||||
SSB_CHIPCO_IRQ_GPIO))
|
||||
return IRQ_NONE;
|
||||
|
||||
|
@ -132,22 +132,26 @@ static int __init wgt634u_init(void)
|
|||
* machine. Use the MAC address as an heuristic. Netgear Inc. has
|
||||
* been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx.
|
||||
*/
|
||||
u8 *et0mac;
|
||||
|
||||
u8 *et0mac = ssb_bcm47xx.sprom.et0mac;
|
||||
if (bcm47xx_bus_type != BCM47XX_BUS_TYPE_SSB)
|
||||
return -ENODEV;
|
||||
|
||||
et0mac = bcm47xx_bus.ssb.sprom.et0mac;
|
||||
|
||||
if (et0mac[0] == 0x00 &&
|
||||
((et0mac[1] == 0x09 && et0mac[2] == 0x5b) ||
|
||||
(et0mac[1] == 0x0f && et0mac[2] == 0xb5))) {
|
||||
struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;
|
||||
struct ssb_mipscore *mcore = &bcm47xx_bus.ssb.mipscore;
|
||||
|
||||
printk(KERN_INFO "WGT634U machine detected.\n");
|
||||
|
||||
if (!request_irq(gpio_to_irq(WGT634U_GPIO_RESET),
|
||||
gpio_interrupt, IRQF_SHARED,
|
||||
"WGT634U GPIO", &ssb_bcm47xx.chipco)) {
|
||||
"WGT634U GPIO", &bcm47xx_bus.ssb.chipco)) {
|
||||
gpio_direction_input(WGT634U_GPIO_RESET);
|
||||
gpio_intmask(WGT634U_GPIO_RESET, 1);
|
||||
ssb_chipco_irq_mask(&ssb_bcm47xx.chipco,
|
||||
ssb_chipco_irq_mask(&bcm47xx_bus.ssb.chipco,
|
||||
SSB_CHIPCO_IRQ_GPIO,
|
||||
SSB_CHIPCO_IRQ_GPIO);
|
||||
}
|
||||
|
|
|
@ -19,7 +19,29 @@
|
|||
#ifndef __ASM_BCM47XX_H
|
||||
#define __ASM_BCM47XX_H
|
||||
|
||||
/* SSB bus */
|
||||
extern struct ssb_bus ssb_bcm47xx;
|
||||
#include <linux/ssb/ssb.h>
|
||||
#include <linux/bcma/bcma.h>
|
||||
#include <linux/bcma/bcma_soc.h>
|
||||
|
||||
enum bcm47xx_bus_type {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
BCM47XX_BUS_TYPE_SSB,
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
BCM47XX_BUS_TYPE_BCMA,
|
||||
#endif
|
||||
};
|
||||
|
||||
union bcm47xx_bus {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
struct ssb_bus ssb;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
struct bcma_soc bcma;
|
||||
#endif
|
||||
};
|
||||
|
||||
extern union bcm47xx_bus bcm47xx_bus;
|
||||
extern enum bcm47xx_bus_type bcm47xx_bus_type;
|
||||
|
||||
#endif /* __ASM_BCM47XX_H */
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#define __BCM47XX_GPIO_H
|
||||
|
||||
#include <linux/ssb/ssb_embedded.h>
|
||||
#include <linux/bcma/bcma.h>
|
||||
#include <asm/mach-bcm47xx/bcm47xx.h>
|
||||
|
||||
#define BCM47XX_EXTIF_GPIO_LINES 5
|
||||
|
@ -21,41 +22,118 @@ extern int gpio_to_irq(unsigned gpio);
|
|||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
return ssb_gpio_in(&ssb_bcm47xx, 1 << gpio);
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
return ssb_gpio_in(&bcm47xx_bus.ssb, 1 << gpio);
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
return bcma_chipco_gpio_in(&bcm47xx_bus.bcma.bus.drv_cc,
|
||||
1 << gpio);
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
ssb_gpio_out(&ssb_bcm47xx, 1 << gpio, value ? 1 << gpio : 0);
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
ssb_gpio_out(&bcm47xx_bus.ssb, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
return;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_chipco_gpio_out(&bcm47xx_bus.bcma.bus.drv_cc, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static inline int gpio_direction_input(unsigned gpio)
|
||||
{
|
||||
ssb_gpio_outen(&ssb_bcm47xx, 1 << gpio, 0);
|
||||
return 0;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
ssb_gpio_outen(&bcm47xx_bus.ssb, 1 << gpio, 0);
|
||||
return 0;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_chipco_gpio_outen(&bcm47xx_bus.bcma.bus.drv_cc, 1 << gpio,
|
||||
0);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int gpio_direction_output(unsigned gpio, int value)
|
||||
{
|
||||
/* first set the gpio out value */
|
||||
ssb_gpio_out(&ssb_bcm47xx, 1 << gpio, value ? 1 << gpio : 0);
|
||||
/* then set the gpio mode */
|
||||
ssb_gpio_outen(&ssb_bcm47xx, 1 << gpio, 1 << gpio);
|
||||
return 0;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
/* first set the gpio out value */
|
||||
ssb_gpio_out(&bcm47xx_bus.ssb, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
/* then set the gpio mode */
|
||||
ssb_gpio_outen(&bcm47xx_bus.ssb, 1 << gpio, 1 << gpio);
|
||||
return 0;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
/* first set the gpio out value */
|
||||
bcma_chipco_gpio_out(&bcm47xx_bus.bcma.bus.drv_cc, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
/* then set the gpio mode */
|
||||
bcma_chipco_gpio_outen(&bcm47xx_bus.bcma.bus.drv_cc, 1 << gpio,
|
||||
1 << gpio);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int gpio_intmask(unsigned gpio, int value)
|
||||
{
|
||||
ssb_gpio_intmask(&ssb_bcm47xx, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
return 0;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
ssb_gpio_intmask(&bcm47xx_bus.ssb, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
return 0;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_chipco_gpio_intmask(&bcm47xx_bus.bcma.bus.drv_cc,
|
||||
1 << gpio, value ? 1 << gpio : 0);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int gpio_polarity(unsigned gpio, int value)
|
||||
{
|
||||
ssb_gpio_polarity(&ssb_bcm47xx, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
return 0;
|
||||
switch (bcm47xx_bus_type) {
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
case BCM47XX_BUS_TYPE_SSB:
|
||||
ssb_gpio_polarity(&bcm47xx_bus.ssb, 1 << gpio,
|
||||
value ? 1 << gpio : 0);
|
||||
return 0;
|
||||
#endif
|
||||
#ifdef CONFIG_BCM47XX_BCMA
|
||||
case BCM47XX_BUS_TYPE_BCMA:
|
||||
bcma_chipco_gpio_polarity(&bcm47xx_bus.bcma.bus.drv_cc,
|
||||
1 << gpio, value ? 1 << gpio : 0);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/ssb/ssb.h>
|
||||
#include <bcm47xx.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
|
@ -33,9 +34,13 @@ int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
|||
|
||||
int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
{
|
||||
#ifdef CONFIG_BCM47XX_SSB
|
||||
int res;
|
||||
u8 slot, pin;
|
||||
|
||||
if (bcm47xx_bus_type != BCM47XX_BUS_TYPE_SSB)
|
||||
return 0;
|
||||
|
||||
res = ssb_pcibios_plat_dev_init(dev);
|
||||
if (res < 0) {
|
||||
printk(KERN_ALERT "PCI: Failed to init device %s\n",
|
||||
|
@ -55,5 +60,6 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
|||
}
|
||||
|
||||
dev->irq = res;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -321,7 +321,7 @@ void __init tx4939_sio_init(unsigned int sclk, unsigned int cts_mask)
|
|||
static u32 tx4939_get_eth_speed(struct net_device *dev)
|
||||
{
|
||||
struct ethtool_cmd cmd;
|
||||
if (dev_ethtool_get_settings(dev, &cmd))
|
||||
if (__ethtool_get_settings(dev, &cmd))
|
||||
return 100; /* default 100Mbps */
|
||||
|
||||
return ethtool_cmd_speed(&cmd);
|
||||
|
|
|
@ -656,6 +656,8 @@ config SBUS
|
|||
|
||||
config FSL_SOC
|
||||
bool
|
||||
select HAVE_CAN_FLEXCAN if NET && CAN
|
||||
select PPC_CLOCK if CAN_FLEXCAN
|
||||
|
||||
config FSL_PCI
|
||||
bool
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
ethernet2 = &enet2;
|
||||
pci0 = &pci0;
|
||||
pci1 = &pci1;
|
||||
can0 = &can0;
|
||||
can1 = &can1;
|
||||
};
|
||||
|
||||
memory {
|
||||
|
@ -169,14 +171,6 @@
|
|||
};
|
||||
};
|
||||
|
||||
can0@1c000 {
|
||||
fsl,flexcan-clock-source = "platform";
|
||||
};
|
||||
|
||||
can1@1d000 {
|
||||
fsl,flexcan-clock-source = "platform";
|
||||
};
|
||||
|
||||
usb@22000 {
|
||||
phy_type = "utmi";
|
||||
};
|
||||
|
|
|
@ -140,20 +140,18 @@
|
|||
interrupt-parent = <&mpic>;
|
||||
};
|
||||
|
||||
can0@1c000 {
|
||||
compatible = "fsl,flexcan-v1.0";
|
||||
can0: can@1c000 {
|
||||
compatible = "fsl,p1010-flexcan";
|
||||
reg = <0x1c000 0x1000>;
|
||||
interrupts = <48 0x2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
fsl,flexcan-clock-divider = <2>;
|
||||
};
|
||||
|
||||
can1@1d000 {
|
||||
compatible = "fsl,flexcan-v1.0";
|
||||
can1: can@1d000 {
|
||||
compatible = "fsl,p1010-flexcan";
|
||||
reg = <0x1d000 0x1000>;
|
||||
interrupts = <61 0x2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
fsl,flexcan-clock-divider = <2>;
|
||||
};
|
||||
|
||||
L2: l2-cache-controller@20000 {
|
||||
|
|
|
@ -44,12 +44,13 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_IBM_NEW_EMAC_DEBUG=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
CONFIG_IBM_EMAC_DEBUG=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -42,8 +42,9 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -43,8 +43,9 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -51,10 +51,11 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -43,10 +43,11 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -40,8 +40,9 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -44,10 +44,11 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -32,8 +32,9 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -38,10 +38,11 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=2
|
||||
|
|
|
@ -49,10 +49,11 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -40,8 +40,9 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -55,10 +55,11 @@ CONFIG_FUSION=y
|
|||
CONFIG_FUSION_SAS=y
|
||||
CONFIG_I2O=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
CONFIG_E1000E=y
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -56,8 +56,9 @@ CONFIG_FUSION_SAS=y
|
|||
CONFIG_FUSION_CTL=y
|
||||
CONFIG_FUSION_LOGGING=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_WLAN is not set
|
||||
|
|
|
@ -42,8 +42,9 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_MACINTOSH_DRIVERS=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -53,11 +53,12 @@ CONFIG_FUSION=y
|
|||
CONFIG_FUSION_SAS=y
|
||||
CONFIG_I2O=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_NEW_EMAC_RXB=256
|
||||
CONFIG_IBM_NEW_EMAC_TXB=256
|
||||
CONFIG_IBM_NEW_EMAC_DEBUG=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
CONFIG_IBM_EMAC_RXB=256
|
||||
CONFIG_IBM_EMAC_TXB=256
|
||||
CONFIG_IBM_EMAC_DEBUG=y
|
||||
CONFIG_E1000E=y
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -44,8 +44,9 @@ CONFIG_ATA=y
|
|||
# CONFIG_SATA_PMP is not set
|
||||
CONFIG_SATA_SIL=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
CONFIG_INPUT_FF_MEMLESS=m
|
||||
|
|
|
@ -46,8 +46,9 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -40,8 +40,9 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_MACINTOSH_DRIVERS=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_VT is not set
|
||||
|
|
|
@ -54,9 +54,10 @@ CONFIG_BLK_DEV_SD=y
|
|||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_INPUT is not set
|
||||
|
|
|
@ -50,8 +50,9 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_SIZE=35000
|
||||
CONFIG_XILINX_SYSACE=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
CONFIG_SERIO=m
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
|
|
|
@ -63,8 +63,9 @@ CONFIG_BLK_DEV_SD=m
|
|||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_TUN=m
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_IBM_NEW_EMAC=y
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_IBM=y
|
||||
CONFIG_IBM_EMAC=y
|
||||
# CONFIG_INPUT is not set
|
||||
CONFIG_SERIO=m
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
|
|
|
@ -130,21 +130,21 @@ config 405GP
|
|||
bool
|
||||
select IBM405_ERR77
|
||||
select IBM405_ERR51
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_EMAC_ZMII
|
||||
|
||||
config 405EP
|
||||
bool
|
||||
|
||||
config 405EX
|
||||
bool
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_RGMII
|
||||
|
||||
config 405EZ
|
||||
bool
|
||||
select IBM_NEW_EMAC_NO_FLOW_CTRL
|
||||
select IBM_NEW_EMAC_MAL_CLR_ICINTSTAT
|
||||
select IBM_NEW_EMAC_MAL_COMMON_ERR
|
||||
select IBM_EMAC_NO_FLOW_CTRL
|
||||
select IBM_EMAC_MAL_CLR_ICINTSTAT
|
||||
select IBM_EMAC_MAL_COMMON_ERR
|
||||
|
||||
config 405GPR
|
||||
bool
|
||||
|
|
|
@ -23,7 +23,7 @@ config BLUESTONE
|
|||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select APM821xx
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_EMAC_RGMII
|
||||
help
|
||||
This option enables support for the APM APM821xx Evaluation board.
|
||||
|
||||
|
@ -122,8 +122,8 @@ config CANYONLANDS
|
|||
select PPC4xx_PCI_EXPRESS
|
||||
select PCI_MSI
|
||||
select PPC4xx_MSI
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_EMAC_RGMII
|
||||
select IBM_EMAC_ZMII
|
||||
help
|
||||
This option enables support for the AMCC PPC460EX evaluation board.
|
||||
|
||||
|
@ -135,8 +135,8 @@ config GLACIER
|
|||
select 460EX # Odd since it uses 460GT but the effects are the same
|
||||
select PCI
|
||||
select PPC4xx_PCI_EXPRESS
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_EMAC_RGMII
|
||||
select IBM_EMAC_ZMII
|
||||
help
|
||||
This option enables support for the AMCC PPC460GT evaluation board.
|
||||
|
||||
|
@ -161,7 +161,7 @@ config EIGER
|
|||
select 460SX
|
||||
select PCI
|
||||
select PPC4xx_PCI_EXPRESS
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_EMAC_RGMII
|
||||
help
|
||||
This option enables support for the AMCC PPC460SX evaluation board.
|
||||
|
||||
|
@ -260,59 +260,59 @@ config 440EP
|
|||
bool
|
||||
select PPC_FPU
|
||||
select IBM440EP_ERR42
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_EMAC_ZMII
|
||||
select USB_ARCH_HAS_OHCI
|
||||
|
||||
config 440EPX
|
||||
bool
|
||||
select PPC_FPU
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_RGMII
|
||||
select IBM_EMAC_ZMII
|
||||
|
||||
config 440GRX
|
||||
bool
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_RGMII
|
||||
select IBM_EMAC_ZMII
|
||||
|
||||
config 440GP
|
||||
bool
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_EMAC_ZMII
|
||||
|
||||
config 440GX
|
||||
bool
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_NEW_EMAC_ZMII #test only
|
||||
select IBM_NEW_EMAC_TAH #test only
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_RGMII
|
||||
select IBM_EMAC_ZMII #test only
|
||||
select IBM_EMAC_TAH #test only
|
||||
|
||||
config 440SP
|
||||
bool
|
||||
|
||||
config 440SPe
|
||||
bool
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_EMAC_EMAC4
|
||||
|
||||
config 460EX
|
||||
bool
|
||||
select PPC_FPU
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_TAH
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_TAH
|
||||
|
||||
config 460SX
|
||||
bool
|
||||
select PPC_FPU
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_NEW_EMAC_ZMII
|
||||
select IBM_NEW_EMAC_TAH
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_RGMII
|
||||
select IBM_EMAC_ZMII
|
||||
select IBM_EMAC_TAH
|
||||
|
||||
config APM821xx
|
||||
bool
|
||||
select PPC_FPU
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_TAH
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_TAH
|
||||
|
||||
# 44x errata/workaround config symbols, selected by the CPU models above
|
||||
config IBM440EP_ERR42
|
||||
|
|
|
@ -17,10 +17,10 @@ config PPC_CELL_NATIVE
|
|||
select PPC_CELL_COMMON
|
||||
select MPIC
|
||||
select PPC_IO_WORKAROUNDS
|
||||
select IBM_NEW_EMAC_EMAC4
|
||||
select IBM_NEW_EMAC_RGMII
|
||||
select IBM_NEW_EMAC_ZMII #test only
|
||||
select IBM_NEW_EMAC_TAH #test only
|
||||
select IBM_EMAC_EMAC4
|
||||
select IBM_EMAC_RGMII
|
||||
select IBM_EMAC_ZMII #test only
|
||||
select IBM_EMAC_TAH #test only
|
||||
default n
|
||||
|
||||
config PPC_IBM_CELL_BLADE
|
||||
|
|
|
@ -122,6 +122,40 @@ struct slibe {
|
|||
u64 parms;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct qaob - queue asynchronous operation block
|
||||
* @res0: reserved parameters
|
||||
* @res1: reserved parameter
|
||||
* @res2: reserved parameter
|
||||
* @res3: reserved parameter
|
||||
* @aorc: asynchronous operation return code
|
||||
* @flags: internal flags
|
||||
* @cbtbs: control block type
|
||||
* @sb_count: number of storage blocks
|
||||
* @sba: storage block element addresses
|
||||
* @dcount: size of storage block elements
|
||||
* @user0: user defineable value
|
||||
* @res4: reserved paramater
|
||||
* @user1: user defineable value
|
||||
* @user2: user defineable value
|
||||
*/
|
||||
struct qaob {
|
||||
u64 res0[6];
|
||||
u8 res1;
|
||||
u8 res2;
|
||||
u8 res3;
|
||||
u8 aorc;
|
||||
u8 flags;
|
||||
u16 cbtbs;
|
||||
u8 sb_count;
|
||||
u64 sba[QDIO_MAX_ELEMENTS_PER_BUFFER];
|
||||
u16 dcount[QDIO_MAX_ELEMENTS_PER_BUFFER];
|
||||
u64 user0;
|
||||
u64 res4[2];
|
||||
u64 user1;
|
||||
u64 user2;
|
||||
} __attribute__ ((packed, aligned(256)));
|
||||
|
||||
/**
|
||||
* struct slib - storage list information block (SLIB)
|
||||
* @nsliba: next SLIB address (if any)
|
||||
|
@ -225,6 +259,41 @@ struct slsb {
|
|||
#define CHSC_AC2_DATA_DIV_AVAILABLE 0x0010
|
||||
#define CHSC_AC2_DATA_DIV_ENABLED 0x0002
|
||||
|
||||
/**
|
||||
* struct qdio_outbuf_state - SBAL related asynchronous operation information
|
||||
* (for communication with upper layer programs)
|
||||
* (only required for use with completion queues)
|
||||
* @flags: flags indicating state of buffer
|
||||
* @aob: pointer to QAOB used for the particular SBAL
|
||||
* @user: pointer to upper layer program's state information related to SBAL
|
||||
* (stored in user1 data of QAOB)
|
||||
*/
|
||||
struct qdio_outbuf_state {
|
||||
u8 flags;
|
||||
struct qaob *aob;
|
||||
void *user;
|
||||
};
|
||||
|
||||
#define QDIO_OUTBUF_STATE_FLAG_NONE 0x00
|
||||
#define QDIO_OUTBUF_STATE_FLAG_PENDING 0x01
|
||||
|
||||
#define CHSC_AC1_INITIATE_INPUTQ 0x80
|
||||
|
||||
|
||||
/* qdio adapter-characteristics-1 flag */
|
||||
#define AC1_SIGA_INPUT_NEEDED 0x40 /* process input queues */
|
||||
#define AC1_SIGA_OUTPUT_NEEDED 0x20 /* process output queues */
|
||||
#define AC1_SIGA_SYNC_NEEDED 0x10 /* ask hypervisor to sync */
|
||||
#define AC1_AUTOMATIC_SYNC_ON_THININT 0x08 /* set by hypervisor */
|
||||
#define AC1_AUTOMATIC_SYNC_ON_OUT_PCI 0x04 /* set by hypervisor */
|
||||
#define AC1_SC_QEBSM_AVAILABLE 0x02 /* available for subchannel */
|
||||
#define AC1_SC_QEBSM_ENABLED 0x01 /* enabled for subchannel */
|
||||
|
||||
#define CHSC_AC2_DATA_DIV_AVAILABLE 0x0010
|
||||
#define CHSC_AC2_DATA_DIV_ENABLED 0x0002
|
||||
|
||||
#define CHSC_AC3_FORMAT2_CQ_AVAILABLE 0x8000
|
||||
|
||||
struct qdio_ssqd_desc {
|
||||
u8 flags;
|
||||
u8:8;
|
||||
|
@ -243,8 +312,7 @@ struct qdio_ssqd_desc {
|
|||
u64 sch_token;
|
||||
u8 mro;
|
||||
u8 mri;
|
||||
u8:8;
|
||||
u8 sbalic;
|
||||
u16 qdioac3;
|
||||
u16:16;
|
||||
u8:8;
|
||||
u8 mmwc;
|
||||
|
@ -280,9 +348,11 @@ typedef void qdio_handler_t(struct ccw_device *, unsigned int, int,
|
|||
* @no_output_qs: number of output queues
|
||||
* @input_handler: handler to be called for input queues
|
||||
* @output_handler: handler to be called for output queues
|
||||
* @queue_start_poll: polling handlers (one per input queue or NULL)
|
||||
* @int_parm: interruption parameter
|
||||
* @input_sbal_addr_array: address of no_input_qs * 128 pointers
|
||||
* @output_sbal_addr_array: address of no_output_qs * 128 pointers
|
||||
* @output_sbal_state_array: no_output_qs * 128 state info (for CQ or NULL)
|
||||
*/
|
||||
struct qdio_initialize {
|
||||
struct ccw_device *cdev;
|
||||
|
@ -297,11 +367,12 @@ struct qdio_initialize {
|
|||
unsigned int no_output_qs;
|
||||
qdio_handler_t *input_handler;
|
||||
qdio_handler_t *output_handler;
|
||||
void (*queue_start_poll) (struct ccw_device *, int, unsigned long);
|
||||
void (**queue_start_poll) (struct ccw_device *, int, unsigned long);
|
||||
int scan_threshold;
|
||||
unsigned long int_parm;
|
||||
void **input_sbal_addr_array;
|
||||
void **output_sbal_addr_array;
|
||||
struct qdio_outbuf_state *output_sbal_state_array;
|
||||
};
|
||||
|
||||
#define QDIO_STATE_INACTIVE 0x00000002 /* after qdio_cleanup */
|
||||
|
@ -316,6 +387,7 @@ struct qdio_initialize {
|
|||
extern int qdio_allocate(struct qdio_initialize *);
|
||||
extern int qdio_establish(struct qdio_initialize *);
|
||||
extern int qdio_activate(struct ccw_device *);
|
||||
extern void qdio_release_aob(struct qaob *);
|
||||
extern int do_QDIO(struct ccw_device *, unsigned int, int, unsigned int,
|
||||
unsigned int);
|
||||
extern int qdio_start_irq(struct ccw_device *, int);
|
||||
|
|
|
@ -368,7 +368,7 @@ static const struct net_device_ops uml_netdev_ops = {
|
|||
.ndo_open = uml_net_open,
|
||||
.ndo_stop = uml_net_close,
|
||||
.ndo_start_xmit = uml_net_start_xmit,
|
||||
.ndo_set_multicast_list = uml_net_set_multicast_list,
|
||||
.ndo_set_rx_mode = uml_net_set_multicast_list,
|
||||
.ndo_tx_timeout = uml_net_tx_timeout,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_change_mtu = uml_net_change_mtu,
|
||||
|
|
|
@ -633,7 +633,7 @@ static const struct net_device_ops iss_netdev_ops = {
|
|||
.ndo_set_mac_address = iss_net_set_mac,
|
||||
//.ndo_do_ioctl = iss_net_ioctl,
|
||||
.ndo_tx_timeout = iss_net_tx_timeout,
|
||||
.ndo_set_multicast_list = iss_net_set_multicast_list,
|
||||
.ndo_set_rx_mode = iss_net_set_multicast_list,
|
||||
};
|
||||
|
||||
static int iss_net_configure(int index, char *init)
|
||||
|
|
|
@ -1134,8 +1134,9 @@ DPRINTK("doing direct send\n"); /* @@@ well, this doesn't work anyway */
|
|||
skb_headlen(skb));
|
||||
else
|
||||
put_dma(tx->index,eni_dev->dma,&j,(unsigned long)
|
||||
skb_shinfo(skb)->frags[i].page + skb_shinfo(skb)->frags[i].page_offset,
|
||||
skb_shinfo(skb)->frags[i].size);
|
||||
skb_frag_page(&skb_shinfo(skb)->frags[i]) +
|
||||
skb_shinfo(skb)->frags[i].page_offset,
|
||||
skb_frag_size(&skb_shinfo(skb)->frags[i]));
|
||||
}
|
||||
if (skb->len & 3)
|
||||
put_dma(tx->index,eni_dev->dma,&j,zeroes,4-(skb->len & 3));
|
||||
|
|
|
@ -818,127 +818,152 @@ static void ia_hw_type(IADEV *iadev) {
|
|||
|
||||
}
|
||||
|
||||
static void IaFrontEndIntr(IADEV *iadev) {
|
||||
volatile IA_SUNI *suni;
|
||||
volatile ia_mb25_t *mb25;
|
||||
volatile suni_pm7345_t *suni_pm7345;
|
||||
|
||||
if(iadev->phy_type & FE_25MBIT_PHY) {
|
||||
mb25 = (ia_mb25_t*)iadev->phy;
|
||||
iadev->carrier_detect = Boolean(mb25->mb25_intr_status & MB25_IS_GSB);
|
||||
} else if (iadev->phy_type & FE_DS3_PHY) {
|
||||
suni_pm7345 = (suni_pm7345_t *)iadev->phy;
|
||||
/* clear FRMR interrupts */
|
||||
(void) suni_pm7345->suni_ds3_frm_intr_stat;
|
||||
iadev->carrier_detect =
|
||||
Boolean(!(suni_pm7345->suni_ds3_frm_stat & SUNI_DS3_LOSV));
|
||||
} else if (iadev->phy_type & FE_E3_PHY ) {
|
||||
suni_pm7345 = (suni_pm7345_t *)iadev->phy;
|
||||
(void) suni_pm7345->suni_e3_frm_maint_intr_ind;
|
||||
iadev->carrier_detect =
|
||||
Boolean(!(suni_pm7345->suni_e3_frm_fram_intr_ind_stat&SUNI_E3_LOS));
|
||||
}
|
||||
else {
|
||||
suni = (IA_SUNI *)iadev->phy;
|
||||
(void) suni->suni_rsop_status;
|
||||
iadev->carrier_detect = Boolean(!(suni->suni_rsop_status & SUNI_LOSV));
|
||||
}
|
||||
if (iadev->carrier_detect)
|
||||
printk("IA: SUNI carrier detected\n");
|
||||
else
|
||||
printk("IA: SUNI carrier lost signal\n");
|
||||
return;
|
||||
static u32 ia_phy_read32(struct iadev_priv *ia, unsigned int reg)
|
||||
{
|
||||
return readl(ia->phy + (reg >> 2));
|
||||
}
|
||||
|
||||
static void ia_mb25_init (IADEV *iadev)
|
||||
static void ia_phy_write32(struct iadev_priv *ia, unsigned int reg, u32 val)
|
||||
{
|
||||
writel(val, ia->phy + (reg >> 2));
|
||||
}
|
||||
|
||||
static void ia_frontend_intr(struct iadev_priv *iadev)
|
||||
{
|
||||
u32 status;
|
||||
|
||||
if (iadev->phy_type & FE_25MBIT_PHY) {
|
||||
status = ia_phy_read32(iadev, MB25_INTR_STATUS);
|
||||
iadev->carrier_detect = (status & MB25_IS_GSB) ? 1 : 0;
|
||||
} else if (iadev->phy_type & FE_DS3_PHY) {
|
||||
ia_phy_read32(iadev, SUNI_DS3_FRM_INTR_STAT);
|
||||
status = ia_phy_read32(iadev, SUNI_DS3_FRM_STAT);
|
||||
iadev->carrier_detect = (status & SUNI_DS3_LOSV) ? 0 : 1;
|
||||
} else if (iadev->phy_type & FE_E3_PHY) {
|
||||
ia_phy_read32(iadev, SUNI_E3_FRM_MAINT_INTR_IND);
|
||||
status = ia_phy_read32(iadev, SUNI_E3_FRM_FRAM_INTR_IND_STAT);
|
||||
iadev->carrier_detect = (status & SUNI_E3_LOS) ? 0 : 1;
|
||||
} else {
|
||||
status = ia_phy_read32(iadev, SUNI_RSOP_STATUS);
|
||||
iadev->carrier_detect = (status & SUNI_LOSV) ? 0 : 1;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "IA: SUNI carrier %s\n",
|
||||
iadev->carrier_detect ? "detected" : "lost signal");
|
||||
}
|
||||
|
||||
static void ia_mb25_init(struct iadev_priv *iadev)
|
||||
{
|
||||
volatile ia_mb25_t *mb25 = (ia_mb25_t*)iadev->phy;
|
||||
#if 0
|
||||
mb25->mb25_master_ctrl = MB25_MC_DRIC | MB25_MC_DREC | MB25_MC_ENABLED;
|
||||
#endif
|
||||
mb25->mb25_master_ctrl = MB25_MC_DRIC | MB25_MC_DREC;
|
||||
mb25->mb25_diag_control = 0;
|
||||
/*
|
||||
* Initialize carrier detect state
|
||||
*/
|
||||
iadev->carrier_detect = Boolean(mb25->mb25_intr_status & MB25_IS_GSB);
|
||||
return;
|
||||
}
|
||||
ia_phy_write32(iadev, MB25_MASTER_CTRL, MB25_MC_DRIC | MB25_MC_DREC);
|
||||
ia_phy_write32(iadev, MB25_DIAG_CONTROL, 0);
|
||||
|
||||
static void ia_suni_pm7345_init (IADEV *iadev)
|
||||
iadev->carrier_detect =
|
||||
(ia_phy_read32(iadev, MB25_INTR_STATUS) & MB25_IS_GSB) ? 1 : 0;
|
||||
}
|
||||
|
||||
struct ia_reg {
|
||||
u16 reg;
|
||||
u16 val;
|
||||
};
|
||||
|
||||
static void ia_phy_write(struct iadev_priv *iadev,
|
||||
const struct ia_reg *regs, int len)
|
||||
{
|
||||
volatile suni_pm7345_t *suni_pm7345 = (suni_pm7345_t *)iadev->phy;
|
||||
if (iadev->phy_type & FE_DS3_PHY)
|
||||
{
|
||||
iadev->carrier_detect =
|
||||
Boolean(!(suni_pm7345->suni_ds3_frm_stat & SUNI_DS3_LOSV));
|
||||
suni_pm7345->suni_ds3_frm_intr_enbl = 0x17;
|
||||
suni_pm7345->suni_ds3_frm_cfg = 1;
|
||||
suni_pm7345->suni_ds3_tran_cfg = 1;
|
||||
suni_pm7345->suni_config = 0;
|
||||
suni_pm7345->suni_splr_cfg = 0;
|
||||
suni_pm7345->suni_splt_cfg = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
iadev->carrier_detect =
|
||||
Boolean(!(suni_pm7345->suni_e3_frm_fram_intr_ind_stat & SUNI_E3_LOS));
|
||||
suni_pm7345->suni_e3_frm_fram_options = 0x4;
|
||||
suni_pm7345->suni_e3_frm_maint_options = 0x20;
|
||||
suni_pm7345->suni_e3_frm_fram_intr_enbl = 0x1d;
|
||||
suni_pm7345->suni_e3_frm_maint_intr_enbl = 0x30;
|
||||
suni_pm7345->suni_e3_tran_stat_diag_options = 0x0;
|
||||
suni_pm7345->suni_e3_tran_fram_options = 0x1;
|
||||
suni_pm7345->suni_config = SUNI_PM7345_E3ENBL;
|
||||
suni_pm7345->suni_splr_cfg = 0x41;
|
||||
suni_pm7345->suni_splt_cfg = 0x41;
|
||||
}
|
||||
/*
|
||||
* Enable RSOP loss of signal interrupt.
|
||||
*/
|
||||
suni_pm7345->suni_intr_enbl = 0x28;
|
||||
|
||||
/*
|
||||
* Clear error counters
|
||||
*/
|
||||
suni_pm7345->suni_id_reset = 0;
|
||||
while (len--) {
|
||||
ia_phy_write32(iadev, regs->reg, regs->val);
|
||||
regs++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear "PMCTST" in master test register.
|
||||
*/
|
||||
suni_pm7345->suni_master_test = 0;
|
||||
static void ia_suni_pm7345_init_ds3(struct iadev_priv *iadev)
|
||||
{
|
||||
static const struct ia_reg suni_ds3_init [] = {
|
||||
{ SUNI_DS3_FRM_INTR_ENBL, 0x17 },
|
||||
{ SUNI_DS3_FRM_CFG, 0x01 },
|
||||
{ SUNI_DS3_TRAN_CFG, 0x01 },
|
||||
{ SUNI_CONFIG, 0 },
|
||||
{ SUNI_SPLR_CFG, 0 },
|
||||
{ SUNI_SPLT_CFG, 0 }
|
||||
};
|
||||
u32 status;
|
||||
|
||||
suni_pm7345->suni_rxcp_ctrl = 0x2c;
|
||||
suni_pm7345->suni_rxcp_fctrl = 0x81;
|
||||
|
||||
suni_pm7345->suni_rxcp_idle_pat_h1 =
|
||||
suni_pm7345->suni_rxcp_idle_pat_h2 =
|
||||
suni_pm7345->suni_rxcp_idle_pat_h3 = 0;
|
||||
suni_pm7345->suni_rxcp_idle_pat_h4 = 1;
|
||||
|
||||
suni_pm7345->suni_rxcp_idle_mask_h1 = 0xff;
|
||||
suni_pm7345->suni_rxcp_idle_mask_h2 = 0xff;
|
||||
suni_pm7345->suni_rxcp_idle_mask_h3 = 0xff;
|
||||
suni_pm7345->suni_rxcp_idle_mask_h4 = 0xfe;
|
||||
|
||||
suni_pm7345->suni_rxcp_cell_pat_h1 =
|
||||
suni_pm7345->suni_rxcp_cell_pat_h2 =
|
||||
suni_pm7345->suni_rxcp_cell_pat_h3 = 0;
|
||||
suni_pm7345->suni_rxcp_cell_pat_h4 = 1;
|
||||
|
||||
suni_pm7345->suni_rxcp_cell_mask_h1 =
|
||||
suni_pm7345->suni_rxcp_cell_mask_h2 =
|
||||
suni_pm7345->suni_rxcp_cell_mask_h3 =
|
||||
suni_pm7345->suni_rxcp_cell_mask_h4 = 0xff;
|
||||
|
||||
suni_pm7345->suni_txcp_ctrl = 0xa4;
|
||||
suni_pm7345->suni_txcp_intr_en_sts = 0x10;
|
||||
suni_pm7345->suni_txcp_idle_pat_h5 = 0x55;
|
||||
|
||||
suni_pm7345->suni_config &= ~(SUNI_PM7345_LLB |
|
||||
SUNI_PM7345_CLB |
|
||||
SUNI_PM7345_DLB |
|
||||
SUNI_PM7345_PLB);
|
||||
status = ia_phy_read32(iadev, SUNI_DS3_FRM_STAT);
|
||||
iadev->carrier_detect = (status & SUNI_DS3_LOSV) ? 0 : 1;
|
||||
|
||||
ia_phy_write(iadev, suni_ds3_init, ARRAY_SIZE(suni_ds3_init));
|
||||
}
|
||||
|
||||
static void ia_suni_pm7345_init_e3(struct iadev_priv *iadev)
|
||||
{
|
||||
static const struct ia_reg suni_e3_init [] = {
|
||||
{ SUNI_E3_FRM_FRAM_OPTIONS, 0x04 },
|
||||
{ SUNI_E3_FRM_MAINT_OPTIONS, 0x20 },
|
||||
{ SUNI_E3_FRM_FRAM_INTR_ENBL, 0x1d },
|
||||
{ SUNI_E3_FRM_MAINT_INTR_ENBL, 0x30 },
|
||||
{ SUNI_E3_TRAN_STAT_DIAG_OPTIONS, 0 },
|
||||
{ SUNI_E3_TRAN_FRAM_OPTIONS, 0x01 },
|
||||
{ SUNI_CONFIG, SUNI_PM7345_E3ENBL },
|
||||
{ SUNI_SPLR_CFG, 0x41 },
|
||||
{ SUNI_SPLT_CFG, 0x41 }
|
||||
};
|
||||
u32 status;
|
||||
|
||||
status = ia_phy_read32(iadev, SUNI_E3_FRM_FRAM_INTR_IND_STAT);
|
||||
iadev->carrier_detect = (status & SUNI_E3_LOS) ? 0 : 1;
|
||||
ia_phy_write(iadev, suni_e3_init, ARRAY_SIZE(suni_e3_init));
|
||||
}
|
||||
|
||||
static void ia_suni_pm7345_init(struct iadev_priv *iadev)
|
||||
{
|
||||
static const struct ia_reg suni_init [] = {
|
||||
/* Enable RSOP loss of signal interrupt. */
|
||||
{ SUNI_INTR_ENBL, 0x28 },
|
||||
/* Clear error counters. */
|
||||
{ SUNI_ID_RESET, 0 },
|
||||
/* Clear "PMCTST" in master test register. */
|
||||
{ SUNI_MASTER_TEST, 0 },
|
||||
|
||||
{ SUNI_RXCP_CTRL, 0x2c },
|
||||
{ SUNI_RXCP_FCTRL, 0x81 },
|
||||
|
||||
{ SUNI_RXCP_IDLE_PAT_H1, 0 },
|
||||
{ SUNI_RXCP_IDLE_PAT_H2, 0 },
|
||||
{ SUNI_RXCP_IDLE_PAT_H3, 0 },
|
||||
{ SUNI_RXCP_IDLE_PAT_H4, 0x01 },
|
||||
|
||||
{ SUNI_RXCP_IDLE_MASK_H1, 0xff },
|
||||
{ SUNI_RXCP_IDLE_MASK_H2, 0xff },
|
||||
{ SUNI_RXCP_IDLE_MASK_H3, 0xff },
|
||||
{ SUNI_RXCP_IDLE_MASK_H4, 0xfe },
|
||||
|
||||
{ SUNI_RXCP_CELL_PAT_H1, 0 },
|
||||
{ SUNI_RXCP_CELL_PAT_H2, 0 },
|
||||
{ SUNI_RXCP_CELL_PAT_H3, 0 },
|
||||
{ SUNI_RXCP_CELL_PAT_H4, 0x01 },
|
||||
|
||||
{ SUNI_RXCP_CELL_MASK_H1, 0xff },
|
||||
{ SUNI_RXCP_CELL_MASK_H2, 0xff },
|
||||
{ SUNI_RXCP_CELL_MASK_H3, 0xff },
|
||||
{ SUNI_RXCP_CELL_MASK_H4, 0xff },
|
||||
|
||||
{ SUNI_TXCP_CTRL, 0xa4 },
|
||||
{ SUNI_TXCP_INTR_EN_STS, 0x10 },
|
||||
{ SUNI_TXCP_IDLE_PAT_H5, 0x55 }
|
||||
};
|
||||
|
||||
if (iadev->phy_type & FE_DS3_PHY)
|
||||
ia_suni_pm7345_init_ds3(iadev);
|
||||
else
|
||||
ia_suni_pm7345_init_e3(iadev);
|
||||
|
||||
ia_phy_write(iadev, suni_init, ARRAY_SIZE(suni_init));
|
||||
|
||||
ia_phy_write32(iadev, SUNI_CONFIG, ia_phy_read32(iadev, SUNI_CONFIG) &
|
||||
~(SUNI_PM7345_LLB | SUNI_PM7345_CLB |
|
||||
SUNI_PM7345_DLB | SUNI_PM7345_PLB));
|
||||
#ifdef __SNMP__
|
||||
suni_pm7345->suni_rxcp_intr_en_sts |= SUNI_OOCDE;
|
||||
#endif /* __SNMP__ */
|
||||
|
@ -1425,10 +1450,10 @@ static int rx_init(struct atm_dev *dev)
|
|||
iadev->dma + IPHASE5575_RX_LIST_ADDR);
|
||||
IF_INIT(printk("Tx Dle list addr: 0x%p value: 0x%0x\n",
|
||||
iadev->dma+IPHASE5575_TX_LIST_ADDR,
|
||||
*(u32*)(iadev->dma+IPHASE5575_TX_LIST_ADDR));
|
||||
readl(iadev->dma + IPHASE5575_TX_LIST_ADDR));
|
||||
printk("Rx Dle list addr: 0x%p value: 0x%0x\n",
|
||||
iadev->dma+IPHASE5575_RX_LIST_ADDR,
|
||||
*(u32*)(iadev->dma+IPHASE5575_RX_LIST_ADDR));)
|
||||
readl(iadev->dma + IPHASE5575_RX_LIST_ADDR));)
|
||||
|
||||
writew(0xffff, iadev->reass_reg+REASS_MASK_REG);
|
||||
writew(0, iadev->reass_reg+MODE_REG);
|
||||
|
@ -2208,7 +2233,7 @@ static irqreturn_t ia_int(int irq, void *dev_id)
|
|||
if (status & STAT_DLERINT)
|
||||
{
|
||||
/* Clear this bit by writing a 1 to it. */
|
||||
*(u_int *)(iadev->reg+IPHASE5575_BUS_STATUS_REG) = STAT_DLERINT;
|
||||
writel(STAT_DLERINT, iadev->reg + IPHASE5575_BUS_STATUS_REG);
|
||||
rx_dle_intr(dev);
|
||||
}
|
||||
if (status & STAT_SEGINT)
|
||||
|
@ -2219,13 +2244,13 @@ static irqreturn_t ia_int(int irq, void *dev_id)
|
|||
}
|
||||
if (status & STAT_DLETINT)
|
||||
{
|
||||
*(u_int *)(iadev->reg+IPHASE5575_BUS_STATUS_REG) = STAT_DLETINT;
|
||||
writel(STAT_DLETINT, iadev->reg + IPHASE5575_BUS_STATUS_REG);
|
||||
tx_dle_intr(dev);
|
||||
}
|
||||
if (status & (STAT_FEINT | STAT_ERRINT | STAT_MARKINT))
|
||||
{
|
||||
if (status & STAT_FEINT)
|
||||
IaFrontEndIntr(iadev);
|
||||
ia_frontend_intr(iadev);
|
||||
}
|
||||
}
|
||||
return IRQ_RETVAL(handled);
|
||||
|
@ -2556,7 +2581,7 @@ static int __devinit ia_start(struct atm_dev *dev)
|
|||
goto err_free_rx;
|
||||
}
|
||||
/* Get iadev->carrier_detect status */
|
||||
IaFrontEndIntr(iadev);
|
||||
ia_frontend_intr(iadev);
|
||||
}
|
||||
return 0;
|
||||
|
||||
|
@ -2827,7 +2852,7 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg)
|
|||
|
||||
case 0xb:
|
||||
if (!capable(CAP_NET_ADMIN)) return -EPERM;
|
||||
IaFrontEndIntr(iadev);
|
||||
ia_frontend_intr(iadev);
|
||||
break;
|
||||
case 0xa:
|
||||
if (!capable(CAP_NET_ADMIN)) return -EPERM;
|
||||
|
|
|
@ -889,79 +889,71 @@ typedef struct ia_rtn_q {
|
|||
} IARTN_Q;
|
||||
|
||||
#define SUNI_LOSV 0x04
|
||||
typedef struct {
|
||||
u32 suni_master_reset; /* SUNI Master Reset and Identity */
|
||||
u32 suni_master_config; /* SUNI Master Configuration */
|
||||
u32 suni_master_intr_stat; /* SUNI Master Interrupt Status */
|
||||
u32 suni_reserved1; /* Reserved */
|
||||
u32 suni_master_clk_monitor;/* SUNI Master Clock Monitor */
|
||||
u32 suni_master_control; /* SUNI Master Clock Monitor */
|
||||
u32 suni_reserved2[10]; /* Reserved */
|
||||
enum ia_suni {
|
||||
SUNI_MASTER_RESET = 0x000, /* SUNI Master Reset and Identity */
|
||||
SUNI_MASTER_CONFIG = 0x004, /* SUNI Master Configuration */
|
||||
SUNI_MASTER_INTR_STAT = 0x008, /* SUNI Master Interrupt Status */
|
||||
SUNI_RESERVED1 = 0x00c, /* Reserved */
|
||||
SUNI_MASTER_CLK_MONITOR = 0x010, /* SUNI Master Clock Monitor */
|
||||
SUNI_MASTER_CONTROL = 0x014, /* SUNI Master Clock Monitor */
|
||||
/* Reserved (10) */
|
||||
SUNI_RSOP_CONTROL = 0x040, /* RSOP Control/Interrupt Enable */
|
||||
SUNI_RSOP_STATUS = 0x044, /* RSOP Status/Interrupt States */
|
||||
SUNI_RSOP_SECTION_BIP8L = 0x048, /* RSOP Section BIP-8 LSB */
|
||||
SUNI_RSOP_SECTION_BIP8M = 0x04c, /* RSOP Section BIP-8 MSB */
|
||||
|
||||
u32 suni_rsop_control; /* RSOP Control/Interrupt Enable */
|
||||
u32 suni_rsop_status; /* RSOP Status/Interrupt States */
|
||||
u32 suni_rsop_section_bip8l;/* RSOP Section BIP-8 LSB */
|
||||
u32 suni_rsop_section_bip8m;/* RSOP Section BIP-8 MSB */
|
||||
|
||||
u32 suni_tsop_control; /* TSOP Control */
|
||||
u32 suni_tsop_diag; /* TSOP Disgnostics */
|
||||
u32 suni_tsop_reserved[2]; /* TSOP Reserved */
|
||||
|
||||
u32 suni_rlop_cs; /* RLOP Control/Status */
|
||||
u32 suni_rlop_intr; /* RLOP Interrupt Enable/Status */
|
||||
u32 suni_rlop_line_bip24l; /* RLOP Line BIP-24 LSB */
|
||||
u32 suni_rlop_line_bip24; /* RLOP Line BIP-24 */
|
||||
u32 suni_rlop_line_bip24m; /* RLOP Line BIP-24 MSB */
|
||||
u32 suni_rlop_line_febel; /* RLOP Line FEBE LSB */
|
||||
u32 suni_rlop_line_febe; /* RLOP Line FEBE */
|
||||
u32 suni_rlop_line_febem; /* RLOP Line FEBE MSB */
|
||||
|
||||
u32 suni_tlop_control; /* TLOP Control */
|
||||
u32 suni_tlop_disg; /* TLOP Disgnostics */
|
||||
u32 suni_tlop_reserved[14]; /* TLOP Reserved */
|
||||
|
||||
u32 suni_rpop_cs; /* RPOP Status/Control */
|
||||
u32 suni_rpop_intr; /* RPOP Interrupt/Status */
|
||||
u32 suni_rpop_reserved; /* RPOP Reserved */
|
||||
u32 suni_rpop_intr_ena; /* RPOP Interrupt Enable */
|
||||
u32 suni_rpop_reserved1[3]; /* RPOP Reserved */
|
||||
u32 suni_rpop_path_sig; /* RPOP Path Signal Label */
|
||||
u32 suni_rpop_bip8l; /* RPOP Path BIP-8 LSB */
|
||||
u32 suni_rpop_bip8m; /* RPOP Path BIP-8 MSB */
|
||||
u32 suni_rpop_febel; /* RPOP Path FEBE LSB */
|
||||
u32 suni_rpop_febem; /* RPOP Path FEBE MSB */
|
||||
u32 suni_rpop_reserved2[4]; /* RPOP Reserved */
|
||||
|
||||
u32 suni_tpop_cntrl_daig; /* TPOP Control/Disgnostics */
|
||||
u32 suni_tpop_pointer_ctrl; /* TPOP Pointer Control */
|
||||
u32 suni_tpop_sourcer_ctrl; /* TPOP Source Control */
|
||||
u32 suni_tpop_reserved1[2]; /* TPOP Reserved */
|
||||
u32 suni_tpop_arb_prtl; /* TPOP Arbitrary Pointer LSB */
|
||||
u32 suni_tpop_arb_prtm; /* TPOP Arbitrary Pointer MSB */
|
||||
u32 suni_tpop_reserved2; /* TPOP Reserved */
|
||||
u32 suni_tpop_path_sig; /* TPOP Path Signal Lable */
|
||||
u32 suni_tpop_path_status; /* TPOP Path Status */
|
||||
u32 suni_tpop_reserved3[6]; /* TPOP Reserved */
|
||||
|
||||
u32 suni_racp_cs; /* RACP Control/Status */
|
||||
u32 suni_racp_intr; /* RACP Interrupt Enable/Status */
|
||||
u32 suni_racp_hdr_pattern; /* RACP Match Header Pattern */
|
||||
u32 suni_racp_hdr_mask; /* RACP Match Header Mask */
|
||||
u32 suni_racp_corr_hcs; /* RACP Correctable HCS Error Count */
|
||||
u32 suni_racp_uncorr_hcs; /* RACP Uncorrectable HCS Error Count */
|
||||
u32 suni_racp_reserved[10]; /* RACP Reserved */
|
||||
|
||||
u32 suni_tacp_control; /* TACP Control */
|
||||
u32 suni_tacp_idle_hdr_pat; /* TACP Idle Cell Header Pattern */
|
||||
u32 suni_tacp_idle_pay_pay; /* TACP Idle Cell Payld Octet Pattern */
|
||||
u32 suni_tacp_reserved[5]; /* TACP Reserved */
|
||||
|
||||
u32 suni_reserved3[24]; /* Reserved */
|
||||
|
||||
u32 suni_master_test; /* SUNI Master Test */
|
||||
u32 suni_reserved_test; /* SUNI Reserved for Test */
|
||||
} IA_SUNI;
|
||||
SUNI_TSOP_CONTROL = 0x050, /* TSOP Control */
|
||||
SUNI_TSOP_DIAG = 0x054, /* TSOP Disgnostics */
|
||||
/* Reserved (2) */
|
||||
SUNI_RLOP_CS = 0x060, /* RLOP Control/Status */
|
||||
SUNI_RLOP_INTR = 0x064, /* RLOP Interrupt Enable/Status */
|
||||
SUNI_RLOP_LINE_BIP24L = 0x068, /* RLOP Line BIP-24 LSB */
|
||||
SUNI_RLOP_LINE_BIP24 = 0x06c, /* RLOP Line BIP-24 */
|
||||
SUNI_RLOP_LINE_BIP24M = 0x070, /* RLOP Line BIP-24 MSB */
|
||||
SUNI_RLOP_LINE_FEBEL = 0x074, /* RLOP Line FEBE LSB */
|
||||
SUNI_RLOP_LINE_FEBE = 0x078, /* RLOP Line FEBE */
|
||||
SUNI_RLOP_LINE_FEBEM = 0x07c, /* RLOP Line FEBE MSB */
|
||||
|
||||
SUNI_TLOP_CONTROL = 0x080, /* TLOP Control */
|
||||
SUNI_TLOP_DISG = 0x084, /* TLOP Disgnostics */
|
||||
/* Reserved (14) */
|
||||
SUNI_RPOP_CS = 0x0c0, /* RPOP Status/Control */
|
||||
SUNI_RPOP_INTR = 0x0c4, /* RPOP Interrupt/Status */
|
||||
SUNI_RPOP_RESERVED = 0x0c8, /* RPOP Reserved */
|
||||
SUNI_RPOP_INTR_ENA = 0x0cc, /* RPOP Interrupt Enable */
|
||||
/* Reserved (3) */
|
||||
SUNI_RPOP_PATH_SIG = 0x0dc, /* RPOP Path Signal Label */
|
||||
SUNI_RPOP_BIP8L = 0x0e0, /* RPOP Path BIP-8 LSB */
|
||||
SUNI_RPOP_BIP8M = 0x0e4, /* RPOP Path BIP-8 MSB */
|
||||
SUNI_RPOP_FEBEL = 0x0e8, /* RPOP Path FEBE LSB */
|
||||
SUNI_RPOP_FEBEM = 0x0ec, /* RPOP Path FEBE MSB */
|
||||
/* Reserved (4) */
|
||||
SUNI_TPOP_CNTRL_DAIG = 0x100, /* TPOP Control/Disgnostics */
|
||||
SUNI_TPOP_POINTER_CTRL = 0x104, /* TPOP Pointer Control */
|
||||
SUNI_TPOP_SOURCER_CTRL = 0x108, /* TPOP Source Control */
|
||||
/* Reserved (2) */
|
||||
SUNI_TPOP_ARB_PRTL = 0x114, /* TPOP Arbitrary Pointer LSB */
|
||||
SUNI_TPOP_ARB_PRTM = 0x118, /* TPOP Arbitrary Pointer MSB */
|
||||
SUNI_TPOP_RESERVED2 = 0x11c, /* TPOP Reserved */
|
||||
SUNI_TPOP_PATH_SIG = 0x120, /* TPOP Path Signal Lable */
|
||||
SUNI_TPOP_PATH_STATUS = 0x124, /* TPOP Path Status */
|
||||
/* Reserved (6) */
|
||||
SUNI_RACP_CS = 0x140, /* RACP Control/Status */
|
||||
SUNI_RACP_INTR = 0x144, /* RACP Interrupt Enable/Status */
|
||||
SUNI_RACP_HDR_PATTERN = 0x148, /* RACP Match Header Pattern */
|
||||
SUNI_RACP_HDR_MASK = 0x14c, /* RACP Match Header Mask */
|
||||
SUNI_RACP_CORR_HCS = 0x150, /* RACP Correctable HCS Error Count */
|
||||
SUNI_RACP_UNCORR_HCS = 0x154, /* RACP Uncorrectable HCS Err Count */
|
||||
/* Reserved (10) */
|
||||
SUNI_TACP_CONTROL = 0x180, /* TACP Control */
|
||||
SUNI_TACP_IDLE_HDR_PAT = 0x184, /* TACP Idle Cell Header Pattern */
|
||||
SUNI_TACP_IDLE_PAY_PAY = 0x188, /* TACP Idle Cell Payld Octet Patrn */
|
||||
/* Reserved (5) */
|
||||
/* Reserved (24) */
|
||||
/* FIXME: unused but name conflicts.
|
||||
* SUNI_MASTER_TEST = 0x200, SUNI Master Test */
|
||||
SUNI_RESERVED_TEST = 0x204 /* SUNI Reserved for Test */
|
||||
};
|
||||
|
||||
typedef struct _SUNI_STATS_
|
||||
{
|
||||
|
@ -993,13 +985,11 @@ typedef struct _SUNI_STATS_
|
|||
u32 racp_uchcs_count; // uncorrectable HCS error count
|
||||
} IA_SUNI_STATS;
|
||||
|
||||
typedef struct iadev_t {
|
||||
typedef struct iadev_priv {
|
||||
/*-----base pointers into (i)chipSAR+ address space */
|
||||
u32 __iomem *phy; /* base pointer into phy(SUNI) */
|
||||
u32 __iomem *dma; /* base pointer into DMA control
|
||||
registers */
|
||||
u32 __iomem *reg; /* base pointer to SAR registers
|
||||
- Bus Interface Control Regs */
|
||||
u32 __iomem *phy; /* Base pointer into phy (SUNI). */
|
||||
u32 __iomem *dma; /* Base pointer into DMA control registers. */
|
||||
u32 __iomem *reg; /* Base pointer to SAR registers. */
|
||||
u32 __iomem *seg_reg; /* base pointer to segmentation engine
|
||||
internal registers */
|
||||
u32 __iomem *reass_reg; /* base pointer to reassemble engine
|
||||
|
@ -1071,14 +1061,14 @@ typedef struct iadev_t {
|
|||
#define INPH_IA_VCC(v) ((struct ia_vcc *) (v)->dev_data)
|
||||
|
||||
/******************* IDT77105 25MB/s PHY DEFINE *****************************/
|
||||
typedef struct {
|
||||
u_int mb25_master_ctrl; /* Master control */
|
||||
u_int mb25_intr_status; /* Interrupt status */
|
||||
u_int mb25_diag_control; /* Diagnostic control */
|
||||
u_int mb25_led_hec; /* LED driver and HEC status/control */
|
||||
u_int mb25_low_byte_counter; /* Low byte counter */
|
||||
u_int mb25_high_byte_counter; /* High byte counter */
|
||||
} ia_mb25_t;
|
||||
enum ia_mb25 {
|
||||
MB25_MASTER_CTRL = 0x00, /* Master control */
|
||||
MB25_INTR_STATUS = 0x04, /* Interrupt status */
|
||||
MB25_DIAG_CONTROL = 0x08, /* Diagnostic control */
|
||||
MB25_LED_HEC = 0x0c, /* LED driver and HEC status/control */
|
||||
MB25_LOW_BYTE_COUNTER = 0x10,
|
||||
MB25_HIGH_BYTE_COUNTER = 0x14
|
||||
};
|
||||
|
||||
/*
|
||||
* Master Control
|
||||
|
@ -1127,122 +1117,121 @@ typedef struct {
|
|||
#define FE_E3_PHY 0x0090 /* E3 */
|
||||
|
||||
/*********************** SUNI_PM7345 PHY DEFINE HERE *********************/
|
||||
typedef struct _suni_pm7345_t
|
||||
{
|
||||
u_int suni_config; /* SUNI Configuration */
|
||||
u_int suni_intr_enbl; /* SUNI Interrupt Enable */
|
||||
u_int suni_intr_stat; /* SUNI Interrupt Status */
|
||||
u_int suni_control; /* SUNI Control */
|
||||
u_int suni_id_reset; /* SUNI Reset and Identity */
|
||||
u_int suni_data_link_ctrl;
|
||||
u_int suni_rboc_conf_intr_enbl;
|
||||
u_int suni_rboc_stat;
|
||||
u_int suni_ds3_frm_cfg;
|
||||
u_int suni_ds3_frm_intr_enbl;
|
||||
u_int suni_ds3_frm_intr_stat;
|
||||
u_int suni_ds3_frm_stat;
|
||||
u_int suni_rfdl_cfg;
|
||||
u_int suni_rfdl_enbl_stat;
|
||||
u_int suni_rfdl_stat;
|
||||
u_int suni_rfdl_data;
|
||||
u_int suni_pmon_chng;
|
||||
u_int suni_pmon_intr_enbl_stat;
|
||||
u_int suni_reserved1[0x13-0x11];
|
||||
u_int suni_pmon_lcv_evt_cnt_lsb;
|
||||
u_int suni_pmon_lcv_evt_cnt_msb;
|
||||
u_int suni_pmon_fbe_evt_cnt_lsb;
|
||||
u_int suni_pmon_fbe_evt_cnt_msb;
|
||||
u_int suni_pmon_sez_det_cnt_lsb;
|
||||
u_int suni_pmon_sez_det_cnt_msb;
|
||||
u_int suni_pmon_pe_evt_cnt_lsb;
|
||||
u_int suni_pmon_pe_evt_cnt_msb;
|
||||
u_int suni_pmon_ppe_evt_cnt_lsb;
|
||||
u_int suni_pmon_ppe_evt_cnt_msb;
|
||||
u_int suni_pmon_febe_evt_cnt_lsb;
|
||||
u_int suni_pmon_febe_evt_cnt_msb;
|
||||
u_int suni_ds3_tran_cfg;
|
||||
u_int suni_ds3_tran_diag;
|
||||
u_int suni_reserved2[0x23-0x21];
|
||||
u_int suni_xfdl_cfg;
|
||||
u_int suni_xfdl_intr_st;
|
||||
u_int suni_xfdl_xmit_data;
|
||||
u_int suni_xboc_code;
|
||||
u_int suni_splr_cfg;
|
||||
u_int suni_splr_intr_en;
|
||||
u_int suni_splr_intr_st;
|
||||
u_int suni_splr_status;
|
||||
u_int suni_splt_cfg;
|
||||
u_int suni_splt_cntl;
|
||||
u_int suni_splt_diag_g1;
|
||||
u_int suni_splt_f1;
|
||||
u_int suni_cppm_loc_meters;
|
||||
u_int suni_cppm_chng_of_cppm_perf_meter;
|
||||
u_int suni_cppm_b1_err_cnt_lsb;
|
||||
u_int suni_cppm_b1_err_cnt_msb;
|
||||
u_int suni_cppm_framing_err_cnt_lsb;
|
||||
u_int suni_cppm_framing_err_cnt_msb;
|
||||
u_int suni_cppm_febe_cnt_lsb;
|
||||
u_int suni_cppm_febe_cnt_msb;
|
||||
u_int suni_cppm_hcs_err_cnt_lsb;
|
||||
u_int suni_cppm_hcs_err_cnt_msb;
|
||||
u_int suni_cppm_idle_un_cell_cnt_lsb;
|
||||
u_int suni_cppm_idle_un_cell_cnt_msb;
|
||||
u_int suni_cppm_rcv_cell_cnt_lsb;
|
||||
u_int suni_cppm_rcv_cell_cnt_msb;
|
||||
u_int suni_cppm_xmit_cell_cnt_lsb;
|
||||
u_int suni_cppm_xmit_cell_cnt_msb;
|
||||
u_int suni_rxcp_ctrl;
|
||||
u_int suni_rxcp_fctrl;
|
||||
u_int suni_rxcp_intr_en_sts;
|
||||
u_int suni_rxcp_idle_pat_h1;
|
||||
u_int suni_rxcp_idle_pat_h2;
|
||||
u_int suni_rxcp_idle_pat_h3;
|
||||
u_int suni_rxcp_idle_pat_h4;
|
||||
u_int suni_rxcp_idle_mask_h1;
|
||||
u_int suni_rxcp_idle_mask_h2;
|
||||
u_int suni_rxcp_idle_mask_h3;
|
||||
u_int suni_rxcp_idle_mask_h4;
|
||||
u_int suni_rxcp_cell_pat_h1;
|
||||
u_int suni_rxcp_cell_pat_h2;
|
||||
u_int suni_rxcp_cell_pat_h3;
|
||||
u_int suni_rxcp_cell_pat_h4;
|
||||
u_int suni_rxcp_cell_mask_h1;
|
||||
u_int suni_rxcp_cell_mask_h2;
|
||||
u_int suni_rxcp_cell_mask_h3;
|
||||
u_int suni_rxcp_cell_mask_h4;
|
||||
u_int suni_rxcp_hcs_cs;
|
||||
u_int suni_rxcp_lcd_cnt_threshold;
|
||||
u_int suni_reserved3[0x57-0x54];
|
||||
u_int suni_txcp_ctrl;
|
||||
u_int suni_txcp_intr_en_sts;
|
||||
u_int suni_txcp_idle_pat_h1;
|
||||
u_int suni_txcp_idle_pat_h2;
|
||||
u_int suni_txcp_idle_pat_h3;
|
||||
u_int suni_txcp_idle_pat_h4;
|
||||
u_int suni_txcp_idle_pat_h5;
|
||||
u_int suni_txcp_idle_payload;
|
||||
u_int suni_e3_frm_fram_options;
|
||||
u_int suni_e3_frm_maint_options;
|
||||
u_int suni_e3_frm_fram_intr_enbl;
|
||||
u_int suni_e3_frm_fram_intr_ind_stat;
|
||||
u_int suni_e3_frm_maint_intr_enbl;
|
||||
u_int suni_e3_frm_maint_intr_ind;
|
||||
u_int suni_e3_frm_maint_stat;
|
||||
u_int suni_reserved4;
|
||||
u_int suni_e3_tran_fram_options;
|
||||
u_int suni_e3_tran_stat_diag_options;
|
||||
u_int suni_e3_tran_bip_8_err_mask;
|
||||
u_int suni_e3_tran_maint_adapt_options;
|
||||
u_int suni_ttb_ctrl;
|
||||
u_int suni_ttb_trail_trace_id_stat;
|
||||
u_int suni_ttb_ind_addr;
|
||||
u_int suni_ttb_ind_data;
|
||||
u_int suni_ttb_exp_payload_type;
|
||||
u_int suni_ttb_payload_type_ctrl_stat;
|
||||
u_int suni_pad5[0x7f-0x71];
|
||||
u_int suni_master_test;
|
||||
u_int suni_pad6[0xff-0x80];
|
||||
}suni_pm7345_t;
|
||||
enum suni_pm7345 {
|
||||
SUNI_CONFIG = 0x000, /* SUNI Configuration */
|
||||
SUNI_INTR_ENBL = 0x004, /* SUNI Interrupt Enable */
|
||||
SUNI_INTR_STAT = 0x008, /* SUNI Interrupt Status */
|
||||
SUNI_CONTROL = 0x00c, /* SUNI Control */
|
||||
SUNI_ID_RESET = 0x010, /* SUNI Reset and Identity */
|
||||
SUNI_DATA_LINK_CTRL = 0x014,
|
||||
SUNI_RBOC_CONF_INTR_ENBL = 0x018,
|
||||
SUNI_RBOC_STAT = 0x01c,
|
||||
SUNI_DS3_FRM_CFG = 0x020,
|
||||
SUNI_DS3_FRM_INTR_ENBL = 0x024,
|
||||
SUNI_DS3_FRM_INTR_STAT = 0x028,
|
||||
SUNI_DS3_FRM_STAT = 0x02c,
|
||||
SUNI_RFDL_CFG = 0x030,
|
||||
SUNI_RFDL_ENBL_STAT = 0x034,
|
||||
SUNI_RFDL_STAT = 0x038,
|
||||
SUNI_RFDL_DATA = 0x03c,
|
||||
SUNI_PMON_CHNG = 0x040,
|
||||
SUNI_PMON_INTR_ENBL_STAT = 0x044,
|
||||
/* SUNI_RESERVED1 (0x13 - 0x11) */
|
||||
SUNI_PMON_LCV_EVT_CNT_LSB = 0x050,
|
||||
SUNI_PMON_LCV_EVT_CNT_MSB = 0x054,
|
||||
SUNI_PMON_FBE_EVT_CNT_LSB = 0x058,
|
||||
SUNI_PMON_FBE_EVT_CNT_MSB = 0x05c,
|
||||
SUNI_PMON_SEZ_DET_CNT_LSB = 0x060,
|
||||
SUNI_PMON_SEZ_DET_CNT_MSB = 0x064,
|
||||
SUNI_PMON_PE_EVT_CNT_LSB = 0x068,
|
||||
SUNI_PMON_PE_EVT_CNT_MSB = 0x06c,
|
||||
SUNI_PMON_PPE_EVT_CNT_LSB = 0x070,
|
||||
SUNI_PMON_PPE_EVT_CNT_MSB = 0x074,
|
||||
SUNI_PMON_FEBE_EVT_CNT_LSB = 0x078,
|
||||
SUNI_PMON_FEBE_EVT_CNT_MSB = 0x07c,
|
||||
SUNI_DS3_TRAN_CFG = 0x080,
|
||||
SUNI_DS3_TRAN_DIAG = 0x084,
|
||||
/* SUNI_RESERVED2 (0x23 - 0x21) */
|
||||
SUNI_XFDL_CFG = 0x090,
|
||||
SUNI_XFDL_INTR_ST = 0x094,
|
||||
SUNI_XFDL_XMIT_DATA = 0x098,
|
||||
SUNI_XBOC_CODE = 0x09c,
|
||||
SUNI_SPLR_CFG = 0x0a0,
|
||||
SUNI_SPLR_INTR_EN = 0x0a4,
|
||||
SUNI_SPLR_INTR_ST = 0x0a8,
|
||||
SUNI_SPLR_STATUS = 0x0ac,
|
||||
SUNI_SPLT_CFG = 0x0b0,
|
||||
SUNI_SPLT_CNTL = 0x0b4,
|
||||
SUNI_SPLT_DIAG_G1 = 0x0b8,
|
||||
SUNI_SPLT_F1 = 0x0bc,
|
||||
SUNI_CPPM_LOC_METERS = 0x0c0,
|
||||
SUNI_CPPM_CHG_OF_CPPM_PERF_METR = 0x0c4,
|
||||
SUNI_CPPM_B1_ERR_CNT_LSB = 0x0c8,
|
||||
SUNI_CPPM_B1_ERR_CNT_MSB = 0x0cc,
|
||||
SUNI_CPPM_FRAMING_ERR_CNT_LSB = 0x0d0,
|
||||
SUNI_CPPM_FRAMING_ERR_CNT_MSB = 0x0d4,
|
||||
SUNI_CPPM_FEBE_CNT_LSB = 0x0d8,
|
||||
SUNI_CPPM_FEBE_CNT_MSB = 0x0dc,
|
||||
SUNI_CPPM_HCS_ERR_CNT_LSB = 0x0e0,
|
||||
SUNI_CPPM_HCS_ERR_CNT_MSB = 0x0e4,
|
||||
SUNI_CPPM_IDLE_UN_CELL_CNT_LSB = 0x0e8,
|
||||
SUNI_CPPM_IDLE_UN_CELL_CNT_MSB = 0x0ec,
|
||||
SUNI_CPPM_RCV_CELL_CNT_LSB = 0x0f0,
|
||||
SUNI_CPPM_RCV_CELL_CNT_MSB = 0x0f4,
|
||||
SUNI_CPPM_XMIT_CELL_CNT_LSB = 0x0f8,
|
||||
SUNI_CPPM_XMIT_CELL_CNT_MSB = 0x0fc,
|
||||
SUNI_RXCP_CTRL = 0x100,
|
||||
SUNI_RXCP_FCTRL = 0x104,
|
||||
SUNI_RXCP_INTR_EN_STS = 0x108,
|
||||
SUNI_RXCP_IDLE_PAT_H1 = 0x10c,
|
||||
SUNI_RXCP_IDLE_PAT_H2 = 0x110,
|
||||
SUNI_RXCP_IDLE_PAT_H3 = 0x114,
|
||||
SUNI_RXCP_IDLE_PAT_H4 = 0x118,
|
||||
SUNI_RXCP_IDLE_MASK_H1 = 0x11c,
|
||||
SUNI_RXCP_IDLE_MASK_H2 = 0x120,
|
||||
SUNI_RXCP_IDLE_MASK_H3 = 0x124,
|
||||
SUNI_RXCP_IDLE_MASK_H4 = 0x128,
|
||||
SUNI_RXCP_CELL_PAT_H1 = 0x12c,
|
||||
SUNI_RXCP_CELL_PAT_H2 = 0x130,
|
||||
SUNI_RXCP_CELL_PAT_H3 = 0x134,
|
||||
SUNI_RXCP_CELL_PAT_H4 = 0x138,
|
||||
SUNI_RXCP_CELL_MASK_H1 = 0x13c,
|
||||
SUNI_RXCP_CELL_MASK_H2 = 0x140,
|
||||
SUNI_RXCP_CELL_MASK_H3 = 0x144,
|
||||
SUNI_RXCP_CELL_MASK_H4 = 0x148,
|
||||
SUNI_RXCP_HCS_CS = 0x14c,
|
||||
SUNI_RXCP_LCD_CNT_THRESHOLD = 0x150,
|
||||
/* SUNI_RESERVED3 (0x57 - 0x54) */
|
||||
SUNI_TXCP_CTRL = 0x160,
|
||||
SUNI_TXCP_INTR_EN_STS = 0x164,
|
||||
SUNI_TXCP_IDLE_PAT_H1 = 0x168,
|
||||
SUNI_TXCP_IDLE_PAT_H2 = 0x16c,
|
||||
SUNI_TXCP_IDLE_PAT_H3 = 0x170,
|
||||
SUNI_TXCP_IDLE_PAT_H4 = 0x174,
|
||||
SUNI_TXCP_IDLE_PAT_H5 = 0x178,
|
||||
SUNI_TXCP_IDLE_PAYLOAD = 0x17c,
|
||||
SUNI_E3_FRM_FRAM_OPTIONS = 0x180,
|
||||
SUNI_E3_FRM_MAINT_OPTIONS = 0x184,
|
||||
SUNI_E3_FRM_FRAM_INTR_ENBL = 0x188,
|
||||
SUNI_E3_FRM_FRAM_INTR_IND_STAT = 0x18c,
|
||||
SUNI_E3_FRM_MAINT_INTR_ENBL = 0x190,
|
||||
SUNI_E3_FRM_MAINT_INTR_IND = 0x194,
|
||||
SUNI_E3_FRM_MAINT_STAT = 0x198,
|
||||
SUNI_RESERVED4 = 0x19c,
|
||||
SUNI_E3_TRAN_FRAM_OPTIONS = 0x1a0,
|
||||
SUNI_E3_TRAN_STAT_DIAG_OPTIONS = 0x1a4,
|
||||
SUNI_E3_TRAN_BIP_8_ERR_MASK = 0x1a8,
|
||||
SUNI_E3_TRAN_MAINT_ADAPT_OPTS = 0x1ac,
|
||||
SUNI_TTB_CTRL = 0x1b0,
|
||||
SUNI_TTB_TRAIL_TRACE_ID_STAT = 0x1b4,
|
||||
SUNI_TTB_IND_ADDR = 0x1b8,
|
||||
SUNI_TTB_IND_DATA = 0x1bc,
|
||||
SUNI_TTB_EXP_PAYLOAD_TYPE = 0x1c0,
|
||||
SUNI_TTB_PAYLOAD_TYPE_CTRL_STAT = 0x1c4,
|
||||
/* SUNI_PAD5 (0x7f - 0x71) */
|
||||
SUNI_MASTER_TEST = 0x200,
|
||||
/* SUNI_PAD6 (0xff - 0x80) */
|
||||
};
|
||||
|
||||
#define SUNI_PM7345_T suni_pm7345_t
|
||||
#define SUNI_PM7345 0x20 /* Suni chip type */
|
||||
|
|
|
@ -47,6 +47,18 @@ static ssize_t class_attr_store(struct kobject *kobj, struct attribute *attr,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static const void *class_attr_namespace(struct kobject *kobj,
|
||||
const struct attribute *attr)
|
||||
{
|
||||
struct class_attribute *class_attr = to_class_attr(attr);
|
||||
struct subsys_private *cp = to_subsys_private(kobj);
|
||||
const void *ns = NULL;
|
||||
|
||||
if (class_attr->namespace)
|
||||
ns = class_attr->namespace(cp->class, class_attr);
|
||||
return ns;
|
||||
}
|
||||
|
||||
static void class_release(struct kobject *kobj)
|
||||
{
|
||||
struct subsys_private *cp = to_subsys_private(kobj);
|
||||
|
@ -72,8 +84,9 @@ static const struct kobj_ns_type_operations *class_child_ns_type(struct kobject
|
|||
}
|
||||
|
||||
static const struct sysfs_ops class_sysfs_ops = {
|
||||
.show = class_attr_show,
|
||||
.store = class_attr_store,
|
||||
.show = class_attr_show,
|
||||
.store = class_attr_store,
|
||||
.namespace = class_attr_namespace,
|
||||
};
|
||||
|
||||
static struct kobj_type class_ktype = {
|
||||
|
|
|
@ -33,6 +33,19 @@ config BCMA_DRIVER_PCI_HOSTMODE
|
|||
help
|
||||
PCI core hostmode operation (external PCI bus).
|
||||
|
||||
config BCMA_HOST_SOC
|
||||
bool
|
||||
depends on BCMA_DRIVER_MIPS
|
||||
|
||||
config BCMA_DRIVER_MIPS
|
||||
bool "BCMA Broadcom MIPS core driver"
|
||||
depends on BCMA && MIPS
|
||||
help
|
||||
Driver for the Broadcom MIPS core attached to Broadcom specific
|
||||
Advanced Microcontroller Bus.
|
||||
|
||||
If unsure, say N
|
||||
|
||||
config BCMA_DEBUG
|
||||
bool "BCMA debugging"
|
||||
depends on BCMA
|
||||
|
|
|
@ -2,7 +2,9 @@ bcma-y += main.o scan.o core.o sprom.o
|
|||
bcma-y += driver_chipcommon.o driver_chipcommon_pmu.o
|
||||
bcma-y += driver_pci.o
|
||||
bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE) += driver_pci_host.o
|
||||
bcma-$(CONFIG_BCMA_DRIVER_MIPS) += driver_mips.o
|
||||
bcma-$(CONFIG_BCMA_HOST_PCI) += host_pci.o
|
||||
bcma-$(CONFIG_BCMA_HOST_SOC) += host_soc.o
|
||||
obj-$(CONFIG_BCMA) += bcma.o
|
||||
|
||||
ccflags-$(CONFIG_BCMA_DEBUG) := -DDEBUG
|
||||
|
|
|
@ -15,13 +15,29 @@ struct bcma_bus;
|
|||
/* main.c */
|
||||
int bcma_bus_register(struct bcma_bus *bus);
|
||||
void bcma_bus_unregister(struct bcma_bus *bus);
|
||||
int __init bcma_bus_early_register(struct bcma_bus *bus,
|
||||
struct bcma_device *core_cc,
|
||||
struct bcma_device *core_mips);
|
||||
|
||||
/* scan.c */
|
||||
int bcma_bus_scan(struct bcma_bus *bus);
|
||||
int __init bcma_bus_scan_early(struct bcma_bus *bus,
|
||||
struct bcma_device_id *match,
|
||||
struct bcma_device *core);
|
||||
void bcma_init_bus(struct bcma_bus *bus);
|
||||
|
||||
/* sprom.c */
|
||||
int bcma_sprom_get(struct bcma_bus *bus);
|
||||
|
||||
/* driver_chipcommon.c */
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
void bcma_chipco_serial_init(struct bcma_drv_cc *cc);
|
||||
#endif /* CONFIG_BCMA_DRIVER_MIPS */
|
||||
|
||||
/* driver_chipcommon_pmu.c */
|
||||
u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc);
|
||||
u32 bcma_pmu_get_clockcpu(struct bcma_drv_cc *cc);
|
||||
|
||||
#ifdef CONFIG_BCMA_HOST_PCI
|
||||
/* host_pci.c */
|
||||
extern int __init bcma_host_pci_init(void);
|
||||
|
|
|
@ -110,6 +110,8 @@ EXPORT_SYMBOL_GPL(bcma_core_pll_ctl);
|
|||
u32 bcma_core_dma_translation(struct bcma_device *core)
|
||||
{
|
||||
switch (core->bus->hosttype) {
|
||||
case BCMA_HOSTTYPE_SOC:
|
||||
return 0;
|
||||
case BCMA_HOSTTYPE_PCI:
|
||||
if (bcma_aread32(core, BCMA_IOST) & BCMA_IOST_DMA64)
|
||||
return BCMA_DMA_TRANSLATION_DMA64_CMT;
|
||||
|
|
|
@ -26,6 +26,9 @@ void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)
|
|||
u32 leddc_on = 10;
|
||||
u32 leddc_off = 90;
|
||||
|
||||
if (cc->setup_done)
|
||||
return;
|
||||
|
||||
if (cc->core->id.rev >= 11)
|
||||
cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT);
|
||||
cc->capabilities = bcma_cc_read32(cc, BCMA_CC_CAP);
|
||||
|
@ -52,6 +55,8 @@ void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)
|
|||
((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) |
|
||||
(leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT)));
|
||||
}
|
||||
|
||||
cc->setup_done = true;
|
||||
}
|
||||
|
||||
/* Set chip watchdog reset timer to fire in 'ticks' backplane cycles */
|
||||
|
@ -101,3 +106,51 @@ u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value)
|
|||
{
|
||||
return bcma_cc_write32_masked(cc, BCMA_CC_GPIOPOL, mask, value);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
void bcma_chipco_serial_init(struct bcma_drv_cc *cc)
|
||||
{
|
||||
unsigned int irq;
|
||||
u32 baud_base;
|
||||
u32 i;
|
||||
unsigned int ccrev = cc->core->id.rev;
|
||||
struct bcma_serial_port *ports = cc->serial_ports;
|
||||
|
||||
if (ccrev >= 11 && ccrev != 15) {
|
||||
/* Fixed ALP clock */
|
||||
baud_base = bcma_pmu_alp_clock(cc);
|
||||
if (ccrev >= 21) {
|
||||
/* Turn off UART clock before switching clocksource. */
|
||||
bcma_cc_write32(cc, BCMA_CC_CORECTL,
|
||||
bcma_cc_read32(cc, BCMA_CC_CORECTL)
|
||||
& ~BCMA_CC_CORECTL_UARTCLKEN);
|
||||
}
|
||||
/* Set the override bit so we don't divide it */
|
||||
bcma_cc_write32(cc, BCMA_CC_CORECTL,
|
||||
bcma_cc_read32(cc, BCMA_CC_CORECTL)
|
||||
| BCMA_CC_CORECTL_UARTCLK0);
|
||||
if (ccrev >= 21) {
|
||||
/* Re-enable the UART clock. */
|
||||
bcma_cc_write32(cc, BCMA_CC_CORECTL,
|
||||
bcma_cc_read32(cc, BCMA_CC_CORECTL)
|
||||
| BCMA_CC_CORECTL_UARTCLKEN);
|
||||
}
|
||||
} else {
|
||||
pr_err("serial not supported on this device ccrev: 0x%x\n",
|
||||
ccrev);
|
||||
return;
|
||||
}
|
||||
|
||||
irq = bcma_core_mips_irq(cc->core);
|
||||
|
||||
/* Determine the registers of the UARTs */
|
||||
cc->nr_serial_ports = (cc->capabilities & BCMA_CC_CAP_NRUART);
|
||||
for (i = 0; i < cc->nr_serial_ports; i++) {
|
||||
ports[i].regs = cc->core->io_addr + BCMA_CC_UART0_DATA +
|
||||
(i * 256);
|
||||
ports[i].irq = irq;
|
||||
ports[i].baud_base = baud_base;
|
||||
ports[i].reg_shift = 0;
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_BCMA_DRIVER_MIPS */
|
||||
|
|
|
@ -11,20 +11,47 @@
|
|||
#include "bcma_private.h"
|
||||
#include <linux/bcma/bcma.h>
|
||||
|
||||
static void bcma_chipco_chipctl_maskset(struct bcma_drv_cc *cc,
|
||||
u32 offset, u32 mask, u32 set)
|
||||
static u32 bcma_chipco_pll_read(struct bcma_drv_cc *cc, u32 offset)
|
||||
{
|
||||
u32 value;
|
||||
bcma_cc_write32(cc, BCMA_CC_PLLCTL_ADDR, offset);
|
||||
bcma_cc_read32(cc, BCMA_CC_PLLCTL_ADDR);
|
||||
return bcma_cc_read32(cc, BCMA_CC_PLLCTL_DATA);
|
||||
}
|
||||
|
||||
bcma_cc_read32(cc, BCMA_CC_CHIPCTL_ADDR);
|
||||
void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset, u32 value)
|
||||
{
|
||||
bcma_cc_write32(cc, BCMA_CC_PLLCTL_ADDR, offset);
|
||||
bcma_cc_read32(cc, BCMA_CC_PLLCTL_ADDR);
|
||||
bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, value);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bcma_chipco_pll_write);
|
||||
|
||||
void bcma_chipco_pll_maskset(struct bcma_drv_cc *cc, u32 offset, u32 mask,
|
||||
u32 set)
|
||||
{
|
||||
bcma_cc_write32(cc, BCMA_CC_PLLCTL_ADDR, offset);
|
||||
bcma_cc_read32(cc, BCMA_CC_PLLCTL_ADDR);
|
||||
bcma_cc_maskset32(cc, BCMA_CC_PLLCTL_DATA, mask, set);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bcma_chipco_pll_maskset);
|
||||
|
||||
void bcma_chipco_chipctl_maskset(struct bcma_drv_cc *cc,
|
||||
u32 offset, u32 mask, u32 set)
|
||||
{
|
||||
bcma_cc_write32(cc, BCMA_CC_CHIPCTL_ADDR, offset);
|
||||
bcma_cc_read32(cc, BCMA_CC_CHIPCTL_ADDR);
|
||||
value = bcma_cc_read32(cc, BCMA_CC_CHIPCTL_DATA);
|
||||
value &= mask;
|
||||
value |= set;
|
||||
bcma_cc_write32(cc, BCMA_CC_CHIPCTL_DATA, value);
|
||||
bcma_cc_read32(cc, BCMA_CC_CHIPCTL_DATA);
|
||||
bcma_cc_maskset32(cc, BCMA_CC_CHIPCTL_DATA, mask, set);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bcma_chipco_chipctl_maskset);
|
||||
|
||||
void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc, u32 offset, u32 mask,
|
||||
u32 set)
|
||||
{
|
||||
bcma_cc_write32(cc, BCMA_CC_REGCTL_ADDR, offset);
|
||||
bcma_cc_read32(cc, BCMA_CC_REGCTL_ADDR);
|
||||
bcma_cc_maskset32(cc, BCMA_CC_REGCTL_DATA, mask, set);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bcma_chipco_regctl_maskset);
|
||||
|
||||
static void bcma_pmu_pll_init(struct bcma_drv_cc *cc)
|
||||
{
|
||||
|
@ -83,6 +110,24 @@ void bcma_pmu_swreg_init(struct bcma_drv_cc *cc)
|
|||
}
|
||||
}
|
||||
|
||||
/* Disable to allow reading SPROM. Don't know the adventages of enabling it. */
|
||||
void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable)
|
||||
{
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
u32 val;
|
||||
|
||||
val = bcma_cc_read32(cc, BCMA_CC_CHIPCTL);
|
||||
if (enable) {
|
||||
val |= BCMA_CHIPCTL_4331_EXTPA_EN;
|
||||
if (bus->chipinfo.pkg == 9 || bus->chipinfo.pkg == 11)
|
||||
val |= BCMA_CHIPCTL_4331_EXTPA_ON_GPIO2_5;
|
||||
} else {
|
||||
val &= ~BCMA_CHIPCTL_4331_EXTPA_EN;
|
||||
val &= ~BCMA_CHIPCTL_4331_EXTPA_ON_GPIO2_5;
|
||||
}
|
||||
bcma_cc_write32(cc, BCMA_CC_CHIPCTL, val);
|
||||
}
|
||||
|
||||
void bcma_pmu_workarounds(struct bcma_drv_cc *cc)
|
||||
{
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
|
@ -92,7 +137,7 @@ void bcma_pmu_workarounds(struct bcma_drv_cc *cc)
|
|||
bcma_chipco_chipctl_maskset(cc, 0, ~0, 0x7);
|
||||
break;
|
||||
case 0x4331:
|
||||
pr_err("Enabling Ext PA lines not implemented\n");
|
||||
/* BCM4331 workaround is SPROM-related, we put it in sprom.c */
|
||||
break;
|
||||
case 43224:
|
||||
if (bus->chipinfo.rev == 0) {
|
||||
|
@ -136,3 +181,129 @@ void bcma_pmu_init(struct bcma_drv_cc *cc)
|
|||
bcma_pmu_swreg_init(cc);
|
||||
bcma_pmu_workarounds(cc);
|
||||
}
|
||||
|
||||
u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc)
|
||||
{
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
|
||||
switch (bus->chipinfo.id) {
|
||||
case 0x4716:
|
||||
case 0x4748:
|
||||
case 47162:
|
||||
case 0x4313:
|
||||
case 0x5357:
|
||||
case 0x4749:
|
||||
case 53572:
|
||||
/* always 20Mhz */
|
||||
return 20000 * 1000;
|
||||
case 0x5356:
|
||||
case 0x5300:
|
||||
/* always 25Mhz */
|
||||
return 25000 * 1000;
|
||||
default:
|
||||
pr_warn("No ALP clock specified for %04X device, "
|
||||
"pmu rev. %d, using default %d Hz\n",
|
||||
bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK);
|
||||
}
|
||||
return BCMA_CC_PMU_ALP_CLOCK;
|
||||
}
|
||||
|
||||
/* Find the output of the "m" pll divider given pll controls that start with
|
||||
* pllreg "pll0" i.e. 12 for main 6 for phy, 0 for misc.
|
||||
*/
|
||||
static u32 bcma_pmu_clock(struct bcma_drv_cc *cc, u32 pll0, u32 m)
|
||||
{
|
||||
u32 tmp, div, ndiv, p1, p2, fc;
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
|
||||
BUG_ON((pll0 & 3) || (pll0 > BCMA_CC_PMU4716_MAINPLL_PLL0));
|
||||
|
||||
BUG_ON(!m || m > 4);
|
||||
|
||||
if (bus->chipinfo.id == 0x5357 || bus->chipinfo.id == 0x4749) {
|
||||
/* Detect failure in clock setting */
|
||||
tmp = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT);
|
||||
if (tmp & 0x40000)
|
||||
return 133 * 1000000;
|
||||
}
|
||||
|
||||
tmp = bcma_chipco_pll_read(cc, pll0 + BCMA_CC_PPL_P1P2_OFF);
|
||||
p1 = (tmp & BCMA_CC_PPL_P1_MASK) >> BCMA_CC_PPL_P1_SHIFT;
|
||||
p2 = (tmp & BCMA_CC_PPL_P2_MASK) >> BCMA_CC_PPL_P2_SHIFT;
|
||||
|
||||
tmp = bcma_chipco_pll_read(cc, pll0 + BCMA_CC_PPL_M14_OFF);
|
||||
div = (tmp >> ((m - 1) * BCMA_CC_PPL_MDIV_WIDTH)) &
|
||||
BCMA_CC_PPL_MDIV_MASK;
|
||||
|
||||
tmp = bcma_chipco_pll_read(cc, pll0 + BCMA_CC_PPL_NM5_OFF);
|
||||
ndiv = (tmp & BCMA_CC_PPL_NDIV_MASK) >> BCMA_CC_PPL_NDIV_SHIFT;
|
||||
|
||||
/* Do calculation in Mhz */
|
||||
fc = bcma_pmu_alp_clock(cc) / 1000000;
|
||||
fc = (p1 * ndiv * fc) / p2;
|
||||
|
||||
/* Return clock in Hertz */
|
||||
return (fc / div) * 1000000;
|
||||
}
|
||||
|
||||
/* query bus clock frequency for PMU-enabled chipcommon */
|
||||
u32 bcma_pmu_get_clockcontrol(struct bcma_drv_cc *cc)
|
||||
{
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
|
||||
switch (bus->chipinfo.id) {
|
||||
case 0x4716:
|
||||
case 0x4748:
|
||||
case 47162:
|
||||
return bcma_pmu_clock(cc, BCMA_CC_PMU4716_MAINPLL_PLL0,
|
||||
BCMA_CC_PMU5_MAINPLL_SSB);
|
||||
case 0x5356:
|
||||
return bcma_pmu_clock(cc, BCMA_CC_PMU5356_MAINPLL_PLL0,
|
||||
BCMA_CC_PMU5_MAINPLL_SSB);
|
||||
case 0x5357:
|
||||
case 0x4749:
|
||||
return bcma_pmu_clock(cc, BCMA_CC_PMU5357_MAINPLL_PLL0,
|
||||
BCMA_CC_PMU5_MAINPLL_SSB);
|
||||
case 0x5300:
|
||||
return bcma_pmu_clock(cc, BCMA_CC_PMU4706_MAINPLL_PLL0,
|
||||
BCMA_CC_PMU5_MAINPLL_SSB);
|
||||
case 53572:
|
||||
return 75000000;
|
||||
default:
|
||||
pr_warn("No backplane clock specified for %04X device, "
|
||||
"pmu rev. %d, using default %d Hz\n",
|
||||
bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_HT_CLOCK);
|
||||
}
|
||||
return BCMA_CC_PMU_HT_CLOCK;
|
||||
}
|
||||
|
||||
/* query cpu clock frequency for PMU-enabled chipcommon */
|
||||
u32 bcma_pmu_get_clockcpu(struct bcma_drv_cc *cc)
|
||||
{
|
||||
struct bcma_bus *bus = cc->core->bus;
|
||||
|
||||
if (bus->chipinfo.id == 53572)
|
||||
return 300000000;
|
||||
|
||||
if (cc->pmu.rev >= 5) {
|
||||
u32 pll;
|
||||
switch (bus->chipinfo.id) {
|
||||
case 0x5356:
|
||||
pll = BCMA_CC_PMU5356_MAINPLL_PLL0;
|
||||
break;
|
||||
case 0x5357:
|
||||
case 0x4749:
|
||||
pll = BCMA_CC_PMU5357_MAINPLL_PLL0;
|
||||
break;
|
||||
default:
|
||||
pll = BCMA_CC_PMU4716_MAINPLL_PLL0;
|
||||
break;
|
||||
}
|
||||
|
||||
/* TODO: if (bus->chipinfo.id == 0x5300)
|
||||
return si_4706_pmu_clock(sih, osh, cc, PMU4706_MAINPLL_PLL0, PMU5_MAINPLL_CPU); */
|
||||
return bcma_pmu_clock(cc, pll, BCMA_CC_PMU5_MAINPLL_CPU);
|
||||
}
|
||||
|
||||
return bcma_pmu_get_clockcontrol(cc);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,256 @@
|
|||
/*
|
||||
* Broadcom specific AMBA
|
||||
* Broadcom MIPS32 74K core driver
|
||||
*
|
||||
* Copyright 2009, Broadcom Corporation
|
||||
* Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
|
||||
* Copyright 2010, Bernhard Loos <bernhardloos@googlemail.com>
|
||||
* Copyright 2011, Hauke Mehrtens <hauke@hauke-m.de>
|
||||
*
|
||||
* Licensed under the GNU/GPL. See COPYING for details.
|
||||
*/
|
||||
|
||||
#include "bcma_private.h"
|
||||
|
||||
#include <linux/bcma/bcma.h>
|
||||
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_reg.h>
|
||||
#include <linux/time.h>
|
||||
|
||||
/* The 47162a0 hangs when reading MIPS DMP registers registers */
|
||||
static inline bool bcma_core_mips_bcm47162a0_quirk(struct bcma_device *dev)
|
||||
{
|
||||
return dev->bus->chipinfo.id == 47162 && dev->bus->chipinfo.rev == 0 &&
|
||||
dev->id.id == BCMA_CORE_MIPS_74K;
|
||||
}
|
||||
|
||||
/* The 5357b0 hangs when reading USB20H DMP registers */
|
||||
static inline bool bcma_core_mips_bcm5357b0_quirk(struct bcma_device *dev)
|
||||
{
|
||||
return (dev->bus->chipinfo.id == 0x5357 ||
|
||||
dev->bus->chipinfo.id == 0x4749) &&
|
||||
dev->bus->chipinfo.pkg == 11 &&
|
||||
dev->id.id == BCMA_CORE_USB20_HOST;
|
||||
}
|
||||
|
||||
static inline u32 mips_read32(struct bcma_drv_mips *mcore,
|
||||
u16 offset)
|
||||
{
|
||||
return bcma_read32(mcore->core, offset);
|
||||
}
|
||||
|
||||
static inline void mips_write32(struct bcma_drv_mips *mcore,
|
||||
u16 offset,
|
||||
u32 value)
|
||||
{
|
||||
bcma_write32(mcore->core, offset, value);
|
||||
}
|
||||
|
||||
static const u32 ipsflag_irq_mask[] = {
|
||||
0,
|
||||
BCMA_MIPS_IPSFLAG_IRQ1,
|
||||
BCMA_MIPS_IPSFLAG_IRQ2,
|
||||
BCMA_MIPS_IPSFLAG_IRQ3,
|
||||
BCMA_MIPS_IPSFLAG_IRQ4,
|
||||
};
|
||||
|
||||
static const u32 ipsflag_irq_shift[] = {
|
||||
0,
|
||||
BCMA_MIPS_IPSFLAG_IRQ1_SHIFT,
|
||||
BCMA_MIPS_IPSFLAG_IRQ2_SHIFT,
|
||||
BCMA_MIPS_IPSFLAG_IRQ3_SHIFT,
|
||||
BCMA_MIPS_IPSFLAG_IRQ4_SHIFT,
|
||||
};
|
||||
|
||||
static u32 bcma_core_mips_irqflag(struct bcma_device *dev)
|
||||
{
|
||||
u32 flag;
|
||||
|
||||
if (bcma_core_mips_bcm47162a0_quirk(dev))
|
||||
return dev->core_index;
|
||||
if (bcma_core_mips_bcm5357b0_quirk(dev))
|
||||
return dev->core_index;
|
||||
flag = bcma_aread32(dev, BCMA_MIPS_OOBSELOUTA30);
|
||||
|
||||
return flag & 0x1F;
|
||||
}
|
||||
|
||||
/* Get the MIPS IRQ assignment for a specified device.
|
||||
* If unassigned, 0 is returned.
|
||||
*/
|
||||
unsigned int bcma_core_mips_irq(struct bcma_device *dev)
|
||||
{
|
||||
struct bcma_device *mdev = dev->bus->drv_mips.core;
|
||||
u32 irqflag;
|
||||
unsigned int irq;
|
||||
|
||||
irqflag = bcma_core_mips_irqflag(dev);
|
||||
|
||||
for (irq = 1; irq <= 4; irq++)
|
||||
if (bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq)) &
|
||||
(1 << irqflag))
|
||||
return irq;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(bcma_core_mips_irq);
|
||||
|
||||
static void bcma_core_mips_set_irq(struct bcma_device *dev, unsigned int irq)
|
||||
{
|
||||
unsigned int oldirq = bcma_core_mips_irq(dev);
|
||||
struct bcma_bus *bus = dev->bus;
|
||||
struct bcma_device *mdev = bus->drv_mips.core;
|
||||
u32 irqflag;
|
||||
|
||||
irqflag = bcma_core_mips_irqflag(dev);
|
||||
BUG_ON(oldirq == 6);
|
||||
|
||||
dev->irq = irq + 2;
|
||||
|
||||
/* clear the old irq */
|
||||
if (oldirq == 0)
|
||||
bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0),
|
||||
bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0)) &
|
||||
~(1 << irqflag));
|
||||
else
|
||||
bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq), 0);
|
||||
|
||||
/* assign the new one */
|
||||
if (irq == 0) {
|
||||
bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0),
|
||||
bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0)) |
|
||||
(1 << irqflag));
|
||||
} else {
|
||||
u32 oldirqflag = bcma_read32(mdev,
|
||||
BCMA_MIPS_MIPS74K_INTMASK(irq));
|
||||
if (oldirqflag) {
|
||||
struct bcma_device *core;
|
||||
|
||||
/* backplane irq line is in use, find out who uses
|
||||
* it and set user to irq 0
|
||||
*/
|
||||
list_for_each_entry_reverse(core, &bus->cores, list) {
|
||||
if ((1 << bcma_core_mips_irqflag(core)) ==
|
||||
oldirqflag) {
|
||||
bcma_core_mips_set_irq(core, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq),
|
||||
1 << irqflag);
|
||||
}
|
||||
|
||||
pr_info("set_irq: core 0x%04x, irq %d => %d\n",
|
||||
dev->id.id, oldirq + 2, irq + 2);
|
||||
}
|
||||
|
||||
static void bcma_core_mips_print_irq(struct bcma_device *dev, unsigned int irq)
|
||||
{
|
||||
int i;
|
||||
static const char *irq_name[] = {"2(S)", "3", "4", "5", "6", "D", "I"};
|
||||
printk(KERN_INFO KBUILD_MODNAME ": core 0x%04x, irq :", dev->id.id);
|
||||
for (i = 0; i <= 6; i++)
|
||||
printk(" %s%s", irq_name[i], i == irq ? "*" : " ");
|
||||
printk("\n");
|
||||
}
|
||||
|
||||
static void bcma_core_mips_dump_irq(struct bcma_bus *bus)
|
||||
{
|
||||
struct bcma_device *core;
|
||||
|
||||
list_for_each_entry_reverse(core, &bus->cores, list) {
|
||||
bcma_core_mips_print_irq(core, bcma_core_mips_irq(core));
|
||||
}
|
||||
}
|
||||
|
||||
u32 bcma_cpu_clock(struct bcma_drv_mips *mcore)
|
||||
{
|
||||
struct bcma_bus *bus = mcore->core->bus;
|
||||
|
||||
if (bus->drv_cc.capabilities & BCMA_CC_CAP_PMU)
|
||||
return bcma_pmu_get_clockcpu(&bus->drv_cc);
|
||||
|
||||
pr_err("No PMU available, need this to get the cpu clock\n");
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(bcma_cpu_clock);
|
||||
|
||||
static void bcma_core_mips_flash_detect(struct bcma_drv_mips *mcore)
|
||||
{
|
||||
struct bcma_bus *bus = mcore->core->bus;
|
||||
|
||||
switch (bus->drv_cc.capabilities & BCMA_CC_CAP_FLASHT) {
|
||||
case BCMA_CC_FLASHT_STSER:
|
||||
case BCMA_CC_FLASHT_ATSER:
|
||||
pr_err("Serial flash not supported.\n");
|
||||
break;
|
||||
case BCMA_CC_FLASHT_PARA:
|
||||
pr_info("found parallel flash.\n");
|
||||
bus->drv_cc.pflash.window = 0x1c000000;
|
||||
bus->drv_cc.pflash.window_size = 0x02000000;
|
||||
|
||||
if ((bcma_read32(bus->drv_cc.core, BCMA_CC_FLASH_CFG) &
|
||||
BCMA_CC_FLASH_CFG_DS) == 0)
|
||||
bus->drv_cc.pflash.buswidth = 1;
|
||||
else
|
||||
bus->drv_cc.pflash.buswidth = 2;
|
||||
break;
|
||||
default:
|
||||
pr_err("flash not supported.\n");
|
||||
}
|
||||
}
|
||||
|
||||
void bcma_core_mips_init(struct bcma_drv_mips *mcore)
|
||||
{
|
||||
struct bcma_bus *bus;
|
||||
struct bcma_device *core;
|
||||
bus = mcore->core->bus;
|
||||
|
||||
pr_info("Initializing MIPS core...\n");
|
||||
|
||||
if (!mcore->setup_done)
|
||||
mcore->assigned_irqs = 1;
|
||||
|
||||
/* Assign IRQs to all cores on the bus */
|
||||
list_for_each_entry_reverse(core, &bus->cores, list) {
|
||||
int mips_irq;
|
||||
if (core->irq)
|
||||
continue;
|
||||
|
||||
mips_irq = bcma_core_mips_irq(core);
|
||||
if (mips_irq > 4)
|
||||
core->irq = 0;
|
||||
else
|
||||
core->irq = mips_irq + 2;
|
||||
if (core->irq > 5)
|
||||
continue;
|
||||
switch (core->id.id) {
|
||||
case BCMA_CORE_PCI:
|
||||
case BCMA_CORE_PCIE:
|
||||
case BCMA_CORE_ETHERNET:
|
||||
case BCMA_CORE_ETHERNET_GBIT:
|
||||
case BCMA_CORE_MAC_GBIT:
|
||||
case BCMA_CORE_80211:
|
||||
case BCMA_CORE_USB20_HOST:
|
||||
/* These devices get their own IRQ line if available,
|
||||
* the rest goes on IRQ0
|
||||
*/
|
||||
if (mcore->assigned_irqs <= 4)
|
||||
bcma_core_mips_set_irq(core,
|
||||
mcore->assigned_irqs++);
|
||||
break;
|
||||
}
|
||||
}
|
||||
pr_info("IRQ reconfiguration done\n");
|
||||
bcma_core_mips_dump_irq(bus);
|
||||
|
||||
if (mcore->setup_done)
|
||||
return;
|
||||
|
||||
bcma_chipco_serial_init(&bus->drv_cc);
|
||||
bcma_core_mips_flash_detect(mcore);
|
||||
mcore->setup_done = true;
|
||||
}
|
|
@ -173,7 +173,7 @@ static bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc)
|
|||
return false;
|
||||
|
||||
#ifdef CONFIG_SSB_DRIVER_PCICORE
|
||||
if (bus->sprom.boardflags_lo & SSB_PCICORE_BFL_NOPCI)
|
||||
if (bus->sprom.boardflags_lo & SSB_BFL_NOPCI)
|
||||
return false;
|
||||
#endif /* CONFIG_SSB_DRIVER_PCICORE */
|
||||
|
||||
|
@ -189,6 +189,9 @@ static bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc)
|
|||
|
||||
void bcma_core_pci_init(struct bcma_drv_pci *pc)
|
||||
{
|
||||
if (pc->setup_done)
|
||||
return;
|
||||
|
||||
if (bcma_core_pci_is_in_hostmode(pc)) {
|
||||
#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
|
||||
bcma_core_pci_hostmode_init(pc);
|
||||
|
@ -198,6 +201,8 @@ void bcma_core_pci_init(struct bcma_drv_pci *pc)
|
|||
} else {
|
||||
bcma_core_pci_clientmode_init(pc);
|
||||
}
|
||||
|
||||
pc->setup_done = true;
|
||||
}
|
||||
|
||||
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
||||
|
@ -205,7 +210,14 @@ int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
|
|||
{
|
||||
struct pci_dev *pdev = pc->core->bus->host_pci;
|
||||
u32 coremask, tmp;
|
||||
int err;
|
||||
int err = 0;
|
||||
|
||||
if (core->bus->hosttype != BCMA_HOSTTYPE_PCI) {
|
||||
/* This bcma device is not on a PCI host-bus. So the IRQs are
|
||||
* not routed through the PCI core.
|
||||
* So we must not enable routing through the PCI core. */
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = pci_read_config_dword(pdev, BCMA_PCI_IRQMASK, &tmp);
|
||||
if (err)
|
||||
|
|
|
@ -0,0 +1,183 @@
|
|||
/*
|
||||
* Broadcom specific AMBA
|
||||
* System on Chip (SoC) Host
|
||||
*
|
||||
* Licensed under the GNU/GPL. See COPYING for details.
|
||||
*/
|
||||
|
||||
#include "bcma_private.h"
|
||||
#include "scan.h"
|
||||
#include <linux/bcma/bcma.h>
|
||||
#include <linux/bcma/bcma_soc.h>
|
||||
|
||||
static u8 bcma_host_soc_read8(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return readb(core->io_addr + offset);
|
||||
}
|
||||
|
||||
static u16 bcma_host_soc_read16(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return readw(core->io_addr + offset);
|
||||
}
|
||||
|
||||
static u32 bcma_host_soc_read32(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return readl(core->io_addr + offset);
|
||||
}
|
||||
|
||||
static void bcma_host_soc_write8(struct bcma_device *core, u16 offset,
|
||||
u8 value)
|
||||
{
|
||||
writeb(value, core->io_addr + offset);
|
||||
}
|
||||
|
||||
static void bcma_host_soc_write16(struct bcma_device *core, u16 offset,
|
||||
u16 value)
|
||||
{
|
||||
writew(value, core->io_addr + offset);
|
||||
}
|
||||
|
||||
static void bcma_host_soc_write32(struct bcma_device *core, u16 offset,
|
||||
u32 value)
|
||||
{
|
||||
writel(value, core->io_addr + offset);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BCMA_BLOCKIO
|
||||
static void bcma_host_soc_block_read(struct bcma_device *core, void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
{
|
||||
void __iomem *addr = core->io_addr + offset;
|
||||
|
||||
switch (reg_width) {
|
||||
case sizeof(u8): {
|
||||
u8 *buf = buffer;
|
||||
|
||||
while (count) {
|
||||
*buf = __raw_readb(addr);
|
||||
buf++;
|
||||
count--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case sizeof(u16): {
|
||||
__le16 *buf = buffer;
|
||||
|
||||
WARN_ON(count & 1);
|
||||
while (count) {
|
||||
*buf = (__force __le16)__raw_readw(addr);
|
||||
buf++;
|
||||
count -= 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case sizeof(u32): {
|
||||
__le32 *buf = buffer;
|
||||
|
||||
WARN_ON(count & 3);
|
||||
while (count) {
|
||||
*buf = (__force __le32)__raw_readl(addr);
|
||||
buf++;
|
||||
count -= 4;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
WARN_ON(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void bcma_host_soc_block_write(struct bcma_device *core,
|
||||
const void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
{
|
||||
void __iomem *addr = core->io_addr + offset;
|
||||
|
||||
switch (reg_width) {
|
||||
case sizeof(u8): {
|
||||
const u8 *buf = buffer;
|
||||
|
||||
while (count) {
|
||||
__raw_writeb(*buf, addr);
|
||||
buf++;
|
||||
count--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case sizeof(u16): {
|
||||
const __le16 *buf = buffer;
|
||||
|
||||
WARN_ON(count & 1);
|
||||
while (count) {
|
||||
__raw_writew((__force u16)(*buf), addr);
|
||||
buf++;
|
||||
count -= 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case sizeof(u32): {
|
||||
const __le32 *buf = buffer;
|
||||
|
||||
WARN_ON(count & 3);
|
||||
while (count) {
|
||||
__raw_writel((__force u32)(*buf), addr);
|
||||
buf++;
|
||||
count -= 4;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
WARN_ON(1);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_BCMA_BLOCKIO */
|
||||
|
||||
static u32 bcma_host_soc_aread32(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return readl(core->io_wrap + offset);
|
||||
}
|
||||
|
||||
static void bcma_host_soc_awrite32(struct bcma_device *core, u16 offset,
|
||||
u32 value)
|
||||
{
|
||||
writel(value, core->io_wrap + offset);
|
||||
}
|
||||
|
||||
const struct bcma_host_ops bcma_host_soc_ops = {
|
||||
.read8 = bcma_host_soc_read8,
|
||||
.read16 = bcma_host_soc_read16,
|
||||
.read32 = bcma_host_soc_read32,
|
||||
.write8 = bcma_host_soc_write8,
|
||||
.write16 = bcma_host_soc_write16,
|
||||
.write32 = bcma_host_soc_write32,
|
||||
#ifdef CONFIG_BCMA_BLOCKIO
|
||||
.block_read = bcma_host_soc_block_read,
|
||||
.block_write = bcma_host_soc_block_write,
|
||||
#endif
|
||||
.aread32 = bcma_host_soc_aread32,
|
||||
.awrite32 = bcma_host_soc_awrite32,
|
||||
};
|
||||
|
||||
int __init bcma_host_soc_register(struct bcma_soc *soc)
|
||||
{
|
||||
struct bcma_bus *bus = &soc->bus;
|
||||
int err;
|
||||
|
||||
/* iomap only first core. We have to read some register on this core
|
||||
* to scan the bus.
|
||||
*/
|
||||
bus->mmio = ioremap_nocache(BCMA_ADDR_BASE, BCMA_CORE_SIZE * 1);
|
||||
if (!bus->mmio)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Host specific */
|
||||
bus->hosttype = BCMA_HOSTTYPE_SOC;
|
||||
bus->ops = &bcma_host_soc_ops;
|
||||
|
||||
/* Register */
|
||||
err = bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips);
|
||||
if (err)
|
||||
iounmap(bus->mmio);
|
||||
|
||||
return err;
|
||||
}
|
|
@ -68,6 +68,10 @@ static struct bcma_device *bcma_find_core(struct bcma_bus *bus, u16 coreid)
|
|||
static void bcma_release_core_dev(struct device *dev)
|
||||
{
|
||||
struct bcma_device *core = container_of(dev, struct bcma_device, dev);
|
||||
if (core->io_addr)
|
||||
iounmap(core->io_addr);
|
||||
if (core->io_wrap)
|
||||
iounmap(core->io_wrap);
|
||||
kfree(core);
|
||||
}
|
||||
|
||||
|
@ -82,6 +86,7 @@ static int bcma_register_cores(struct bcma_bus *bus)
|
|||
case BCMA_CORE_CHIPCOMMON:
|
||||
case BCMA_CORE_PCI:
|
||||
case BCMA_CORE_PCIE:
|
||||
case BCMA_CORE_MIPS_74K:
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -95,7 +100,10 @@ static int bcma_register_cores(struct bcma_bus *bus)
|
|||
core->dma_dev = &bus->host_pci->dev;
|
||||
core->irq = bus->host_pci->irq;
|
||||
break;
|
||||
case BCMA_HOSTTYPE_NONE:
|
||||
case BCMA_HOSTTYPE_SOC:
|
||||
core->dev.dma_mask = &core->dev.coherent_dma_mask;
|
||||
core->dma_dev = &core->dev;
|
||||
break;
|
||||
case BCMA_HOSTTYPE_SDIO:
|
||||
break;
|
||||
}
|
||||
|
@ -142,6 +150,13 @@ int bcma_bus_register(struct bcma_bus *bus)
|
|||
bcma_core_chipcommon_init(&bus->drv_cc);
|
||||
}
|
||||
|
||||
/* Init MIPS core */
|
||||
core = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
|
||||
if (core) {
|
||||
bus->drv_mips.core = core;
|
||||
bcma_core_mips_init(&bus->drv_mips);
|
||||
}
|
||||
|
||||
/* Init PCIE core */
|
||||
core = bcma_find_core(bus, BCMA_CORE_PCIE);
|
||||
if (core) {
|
||||
|
@ -171,6 +186,59 @@ void bcma_bus_unregister(struct bcma_bus *bus)
|
|||
bcma_unregister_cores(bus);
|
||||
}
|
||||
|
||||
int __init bcma_bus_early_register(struct bcma_bus *bus,
|
||||
struct bcma_device *core_cc,
|
||||
struct bcma_device *core_mips)
|
||||
{
|
||||
int err;
|
||||
struct bcma_device *core;
|
||||
struct bcma_device_id match;
|
||||
|
||||
bcma_init_bus(bus);
|
||||
|
||||
match.manuf = BCMA_MANUF_BCM;
|
||||
match.id = BCMA_CORE_CHIPCOMMON;
|
||||
match.class = BCMA_CL_SIM;
|
||||
match.rev = BCMA_ANY_REV;
|
||||
|
||||
/* Scan for chip common core */
|
||||
err = bcma_bus_scan_early(bus, &match, core_cc);
|
||||
if (err) {
|
||||
pr_err("Failed to scan for common core: %d\n", err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
match.manuf = BCMA_MANUF_MIPS;
|
||||
match.id = BCMA_CORE_MIPS_74K;
|
||||
match.class = BCMA_CL_SIM;
|
||||
match.rev = BCMA_ANY_REV;
|
||||
|
||||
/* Scan for mips core */
|
||||
err = bcma_bus_scan_early(bus, &match, core_mips);
|
||||
if (err) {
|
||||
pr_err("Failed to scan for mips core: %d\n", err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Init CC core */
|
||||
core = bcma_find_core(bus, BCMA_CORE_CHIPCOMMON);
|
||||
if (core) {
|
||||
bus->drv_cc.core = core;
|
||||
bcma_core_chipcommon_init(&bus->drv_cc);
|
||||
}
|
||||
|
||||
/* Init MIPS core */
|
||||
core = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
|
||||
if (core) {
|
||||
bus->drv_mips.core = core;
|
||||
bcma_core_mips_init(&bus->drv_mips);
|
||||
}
|
||||
|
||||
pr_info("Early bus registered\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __bcma_driver_register(struct bcma_driver *drv, struct module *owner)
|
||||
{
|
||||
drv->drv.name = drv->name;
|
||||
|
|
|
@ -200,18 +200,162 @@ static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr,
|
|||
return addrl;
|
||||
}
|
||||
|
||||
int bcma_bus_scan(struct bcma_bus *bus)
|
||||
static struct bcma_device *bcma_find_core_by_index(struct bcma_bus *bus,
|
||||
u16 index)
|
||||
{
|
||||
u32 erombase;
|
||||
u32 __iomem *eromptr, *eromend;
|
||||
struct bcma_device *core;
|
||||
|
||||
list_for_each_entry(core, &bus->cores, list) {
|
||||
if (core->core_index == index)
|
||||
return core;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
|
||||
struct bcma_device_id *match, int core_num,
|
||||
struct bcma_device *core)
|
||||
{
|
||||
s32 tmp;
|
||||
u8 i, j;
|
||||
s32 cia, cib;
|
||||
u8 ports[2], wrappers[2];
|
||||
|
||||
s32 tmp;
|
||||
u8 i, j;
|
||||
/* get CIs */
|
||||
cia = bcma_erom_get_ci(bus, eromptr);
|
||||
if (cia < 0) {
|
||||
bcma_erom_push_ent(eromptr);
|
||||
if (bcma_erom_is_end(bus, eromptr))
|
||||
return -ESPIPE;
|
||||
return -EILSEQ;
|
||||
}
|
||||
cib = bcma_erom_get_ci(bus, eromptr);
|
||||
if (cib < 0)
|
||||
return -EILSEQ;
|
||||
|
||||
int err;
|
||||
/* parse CIs */
|
||||
core->id.class = (cia & SCAN_CIA_CLASS) >> SCAN_CIA_CLASS_SHIFT;
|
||||
core->id.id = (cia & SCAN_CIA_ID) >> SCAN_CIA_ID_SHIFT;
|
||||
core->id.manuf = (cia & SCAN_CIA_MANUF) >> SCAN_CIA_MANUF_SHIFT;
|
||||
ports[0] = (cib & SCAN_CIB_NMP) >> SCAN_CIB_NMP_SHIFT;
|
||||
ports[1] = (cib & SCAN_CIB_NSP) >> SCAN_CIB_NSP_SHIFT;
|
||||
wrappers[0] = (cib & SCAN_CIB_NMW) >> SCAN_CIB_NMW_SHIFT;
|
||||
wrappers[1] = (cib & SCAN_CIB_NSW) >> SCAN_CIB_NSW_SHIFT;
|
||||
core->id.rev = (cib & SCAN_CIB_REV) >> SCAN_CIB_REV_SHIFT;
|
||||
|
||||
if (((core->id.manuf == BCMA_MANUF_ARM) &&
|
||||
(core->id.id == 0xFFF)) ||
|
||||
(ports[1] == 0)) {
|
||||
bcma_erom_skip_component(bus, eromptr);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
/* check if component is a core at all */
|
||||
if (wrappers[0] + wrappers[1] == 0) {
|
||||
/* we could save addrl of the router
|
||||
if (cid == BCMA_CORE_OOB_ROUTER)
|
||||
*/
|
||||
bcma_erom_skip_component(bus, eromptr);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (bcma_erom_is_bridge(bus, eromptr)) {
|
||||
bcma_erom_skip_component(bus, eromptr);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (bcma_find_core_by_index(bus, core_num)) {
|
||||
bcma_erom_skip_component(bus, eromptr);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (match && ((match->manuf != BCMA_ANY_MANUF &&
|
||||
match->manuf != core->id.manuf) ||
|
||||
(match->id != BCMA_ANY_ID && match->id != core->id.id) ||
|
||||
(match->rev != BCMA_ANY_REV && match->rev != core->id.rev) ||
|
||||
(match->class != BCMA_ANY_CLASS && match->class != core->id.class)
|
||||
)) {
|
||||
bcma_erom_skip_component(bus, eromptr);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* get & parse master ports */
|
||||
for (i = 0; i < ports[0]; i++) {
|
||||
s32 mst_port_d = bcma_erom_get_mst_port(bus, eromptr);
|
||||
if (mst_port_d < 0)
|
||||
return -EILSEQ;
|
||||
}
|
||||
|
||||
/* get & parse slave ports */
|
||||
for (i = 0; i < ports[1]; i++) {
|
||||
for (j = 0; ; j++) {
|
||||
tmp = bcma_erom_get_addr_desc(bus, eromptr,
|
||||
SCAN_ADDR_TYPE_SLAVE, i);
|
||||
if (tmp < 0) {
|
||||
/* no more entries for port _i_ */
|
||||
/* pr_debug("erom: slave port %d "
|
||||
* "has %d descriptors\n", i, j); */
|
||||
break;
|
||||
} else {
|
||||
if (i == 0 && j == 0)
|
||||
core->addr = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* get & parse master wrappers */
|
||||
for (i = 0; i < wrappers[0]; i++) {
|
||||
for (j = 0; ; j++) {
|
||||
tmp = bcma_erom_get_addr_desc(bus, eromptr,
|
||||
SCAN_ADDR_TYPE_MWRAP, i);
|
||||
if (tmp < 0) {
|
||||
/* no more entries for port _i_ */
|
||||
/* pr_debug("erom: master wrapper %d "
|
||||
* "has %d descriptors\n", i, j); */
|
||||
break;
|
||||
} else {
|
||||
if (i == 0 && j == 0)
|
||||
core->wrap = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* get & parse slave wrappers */
|
||||
for (i = 0; i < wrappers[1]; i++) {
|
||||
u8 hack = (ports[1] == 1) ? 0 : 1;
|
||||
for (j = 0; ; j++) {
|
||||
tmp = bcma_erom_get_addr_desc(bus, eromptr,
|
||||
SCAN_ADDR_TYPE_SWRAP, i + hack);
|
||||
if (tmp < 0) {
|
||||
/* no more entries for port _i_ */
|
||||
/* pr_debug("erom: master wrapper %d "
|
||||
* has %d descriptors\n", i, j); */
|
||||
break;
|
||||
} else {
|
||||
if (wrappers[0] == 0 && !i && !j)
|
||||
core->wrap = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
|
||||
core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE);
|
||||
if (!core->io_addr)
|
||||
return -ENOMEM;
|
||||
core->io_wrap = ioremap_nocache(core->wrap, BCMA_CORE_SIZE);
|
||||
if (!core->io_wrap) {
|
||||
iounmap(core->io_addr);
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bcma_init_bus(struct bcma_bus *bus)
|
||||
{
|
||||
s32 tmp;
|
||||
|
||||
if (bus->init_done)
|
||||
return;
|
||||
|
||||
INIT_LIST_HEAD(&bus->cores);
|
||||
bus->nr_cores = 0;
|
||||
|
@ -222,9 +366,27 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
|||
bus->chipinfo.id = (tmp & BCMA_CC_ID_ID) >> BCMA_CC_ID_ID_SHIFT;
|
||||
bus->chipinfo.rev = (tmp & BCMA_CC_ID_REV) >> BCMA_CC_ID_REV_SHIFT;
|
||||
bus->chipinfo.pkg = (tmp & BCMA_CC_ID_PKG) >> BCMA_CC_ID_PKG_SHIFT;
|
||||
bus->init_done = true;
|
||||
}
|
||||
|
||||
int bcma_bus_scan(struct bcma_bus *bus)
|
||||
{
|
||||
u32 erombase;
|
||||
u32 __iomem *eromptr, *eromend;
|
||||
|
||||
int err, core_num = 0;
|
||||
|
||||
bcma_init_bus(bus);
|
||||
|
||||
erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
|
||||
eromptr = bus->mmio;
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
|
||||
eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
|
||||
if (!eromptr)
|
||||
return -ENOMEM;
|
||||
} else {
|
||||
eromptr = bus->mmio;
|
||||
}
|
||||
|
||||
eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
|
||||
|
||||
bcma_scan_switch_core(bus, erombase);
|
||||
|
@ -236,125 +398,89 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
|||
INIT_LIST_HEAD(&core->list);
|
||||
core->bus = bus;
|
||||
|
||||
/* get CIs */
|
||||
cia = bcma_erom_get_ci(bus, &eromptr);
|
||||
if (cia < 0) {
|
||||
bcma_erom_push_ent(&eromptr);
|
||||
if (bcma_erom_is_end(bus, &eromptr))
|
||||
break;
|
||||
err= -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
cib = bcma_erom_get_ci(bus, &eromptr);
|
||||
if (cib < 0) {
|
||||
err= -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* parse CIs */
|
||||
core->id.class = (cia & SCAN_CIA_CLASS) >> SCAN_CIA_CLASS_SHIFT;
|
||||
core->id.id = (cia & SCAN_CIA_ID) >> SCAN_CIA_ID_SHIFT;
|
||||
core->id.manuf = (cia & SCAN_CIA_MANUF) >> SCAN_CIA_MANUF_SHIFT;
|
||||
ports[0] = (cib & SCAN_CIB_NMP) >> SCAN_CIB_NMP_SHIFT;
|
||||
ports[1] = (cib & SCAN_CIB_NSP) >> SCAN_CIB_NSP_SHIFT;
|
||||
wrappers[0] = (cib & SCAN_CIB_NMW) >> SCAN_CIB_NMW_SHIFT;
|
||||
wrappers[1] = (cib & SCAN_CIB_NSW) >> SCAN_CIB_NSW_SHIFT;
|
||||
core->id.rev = (cib & SCAN_CIB_REV) >> SCAN_CIB_REV_SHIFT;
|
||||
|
||||
if (((core->id.manuf == BCMA_MANUF_ARM) &&
|
||||
(core->id.id == 0xFFF)) ||
|
||||
(ports[1] == 0)) {
|
||||
bcma_erom_skip_component(bus, &eromptr);
|
||||
err = bcma_get_next_core(bus, &eromptr, NULL, core_num, core);
|
||||
if (err == -ENODEV) {
|
||||
core_num++;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* check if component is a core at all */
|
||||
if (wrappers[0] + wrappers[1] == 0) {
|
||||
/* we could save addrl of the router
|
||||
if (cid == BCMA_CORE_OOB_ROUTER)
|
||||
*/
|
||||
bcma_erom_skip_component(bus, &eromptr);
|
||||
} else if (err == -ENXIO)
|
||||
continue;
|
||||
}
|
||||
else if (err == -ESPIPE)
|
||||
break;
|
||||
else if (err < 0)
|
||||
return err;
|
||||
|
||||
if (bcma_erom_is_bridge(bus, &eromptr)) {
|
||||
bcma_erom_skip_component(bus, &eromptr);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* get & parse master ports */
|
||||
for (i = 0; i < ports[0]; i++) {
|
||||
u32 mst_port_d = bcma_erom_get_mst_port(bus, &eromptr);
|
||||
if (mst_port_d < 0) {
|
||||
err= -EILSEQ;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/* get & parse slave ports */
|
||||
for (i = 0; i < ports[1]; i++) {
|
||||
for (j = 0; ; j++) {
|
||||
tmp = bcma_erom_get_addr_desc(bus, &eromptr,
|
||||
SCAN_ADDR_TYPE_SLAVE, i);
|
||||
if (tmp < 0) {
|
||||
/* no more entries for port _i_ */
|
||||
/* pr_debug("erom: slave port %d "
|
||||
* "has %d descriptors\n", i, j); */
|
||||
break;
|
||||
} else {
|
||||
if (i == 0 && j == 0)
|
||||
core->addr = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* get & parse master wrappers */
|
||||
for (i = 0; i < wrappers[0]; i++) {
|
||||
for (j = 0; ; j++) {
|
||||
tmp = bcma_erom_get_addr_desc(bus, &eromptr,
|
||||
SCAN_ADDR_TYPE_MWRAP, i);
|
||||
if (tmp < 0) {
|
||||
/* no more entries for port _i_ */
|
||||
/* pr_debug("erom: master wrapper %d "
|
||||
* "has %d descriptors\n", i, j); */
|
||||
break;
|
||||
} else {
|
||||
if (i == 0 && j == 0)
|
||||
core->wrap = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* get & parse slave wrappers */
|
||||
for (i = 0; i < wrappers[1]; i++) {
|
||||
u8 hack = (ports[1] == 1) ? 0 : 1;
|
||||
for (j = 0; ; j++) {
|
||||
tmp = bcma_erom_get_addr_desc(bus, &eromptr,
|
||||
SCAN_ADDR_TYPE_SWRAP, i + hack);
|
||||
if (tmp < 0) {
|
||||
/* no more entries for port _i_ */
|
||||
/* pr_debug("erom: master wrapper %d "
|
||||
* has %d descriptors\n", i, j); */
|
||||
break;
|
||||
} else {
|
||||
if (wrappers[0] == 0 && !i && !j)
|
||||
core->wrap = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
core->core_index = core_num++;
|
||||
bus->nr_cores++;
|
||||
|
||||
pr_info("Core %d found: %s "
|
||||
"(manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
|
||||
bus->nr_cores, bcma_device_name(&core->id),
|
||||
core->core_index, bcma_device_name(&core->id),
|
||||
core->id.manuf, core->id.id, core->id.rev,
|
||||
core->id.class);
|
||||
|
||||
core->core_index = bus->nr_cores++;
|
||||
list_add(&core->list, &bus->cores);
|
||||
continue;
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_SOC)
|
||||
iounmap(eromptr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __init bcma_bus_scan_early(struct bcma_bus *bus,
|
||||
struct bcma_device_id *match,
|
||||
struct bcma_device *core)
|
||||
{
|
||||
u32 erombase;
|
||||
u32 __iomem *eromptr, *eromend;
|
||||
|
||||
int err = -ENODEV;
|
||||
int core_num = 0;
|
||||
|
||||
erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
|
||||
eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
|
||||
if (!eromptr)
|
||||
return -ENOMEM;
|
||||
} else {
|
||||
eromptr = bus->mmio;
|
||||
}
|
||||
|
||||
eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
|
||||
|
||||
bcma_scan_switch_core(bus, erombase);
|
||||
|
||||
while (eromptr < eromend) {
|
||||
memset(core, 0, sizeof(*core));
|
||||
INIT_LIST_HEAD(&core->list);
|
||||
core->bus = bus;
|
||||
|
||||
err = bcma_get_next_core(bus, &eromptr, match, core_num, core);
|
||||
if (err == -ENODEV) {
|
||||
core_num++;
|
||||
continue;
|
||||
} else if (err == -ENXIO)
|
||||
continue;
|
||||
else if (err == -ESPIPE)
|
||||
break;
|
||||
else if (err < 0)
|
||||
return err;
|
||||
|
||||
core->core_index = core_num++;
|
||||
bus->nr_cores++;
|
||||
pr_info("Core %d found: %s "
|
||||
"(manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
|
||||
core->core_index, bcma_device_name(&core->id),
|
||||
core->id.manuf, core->id.id, core->id.rev,
|
||||
core->id.class);
|
||||
|
||||
list_add(&core->list, &bus->cores);
|
||||
err = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bus->hosttype == BCMA_HOSTTYPE_SOC)
|
||||
iounmap(eromptr);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -133,6 +133,15 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
|
|||
v = sprom[SPOFF(SSB_SPROM8_IL0MAC) + i];
|
||||
*(((__be16 *)bus->sprom.il0mac) + i) = cpu_to_be16(v);
|
||||
}
|
||||
|
||||
bus->sprom.board_rev = sprom[SPOFF(SSB_SPROM8_BOARDREV)];
|
||||
|
||||
bus->sprom.boardflags_lo = sprom[SPOFF(SSB_SPROM8_BFLLO)];
|
||||
bus->sprom.boardflags_hi = sprom[SPOFF(SSB_SPROM8_BFLHI)];
|
||||
bus->sprom.boardflags2_lo = sprom[SPOFF(SSB_SPROM8_BFL2LO)];
|
||||
bus->sprom.boardflags2_hi = sprom[SPOFF(SSB_SPROM8_BFL2HI)];
|
||||
|
||||
bus->sprom.country_code = sprom[SPOFF(SSB_SPROM8_CCODE)];
|
||||
}
|
||||
|
||||
int bcma_sprom_get(struct bcma_bus *bus)
|
||||
|
@ -152,6 +161,9 @@ int bcma_sprom_get(struct bcma_bus *bus)
|
|||
if (!sprom)
|
||||
return -ENOMEM;
|
||||
|
||||
if (bus->chipinfo.id == 0x4331)
|
||||
bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, false);
|
||||
|
||||
/* Most cards have SPROM moved by additional offset 0x30 (48 dwords).
|
||||
* According to brcm80211 this applies to cards with PCIe rev >= 6
|
||||
* TODO: understand this condition and use it */
|
||||
|
@ -159,6 +171,9 @@ int bcma_sprom_get(struct bcma_bus *bus)
|
|||
BCMA_CC_SPROM_PCIE6;
|
||||
bcma_sprom_read(bus, offset, sprom);
|
||||
|
||||
if (bus->chipinfo.id == 0x4331)
|
||||
bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, true);
|
||||
|
||||
err = bcma_sprom_valid(sprom);
|
||||
if (err)
|
||||
goto out;
|
||||
|
|
|
@ -60,6 +60,9 @@ static struct usb_device_id btusb_table[] = {
|
|||
/* Generic Bluetooth USB device */
|
||||
{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
|
||||
|
||||
/* Broadcom SoftSailing reporting vendor specific */
|
||||
{ USB_DEVICE(0x05ac, 0x21e1) },
|
||||
|
||||
/* Apple MacBookPro 7,1 */
|
||||
{ USB_DEVICE(0x05ac, 0x8213) },
|
||||
|
||||
|
@ -708,8 +711,7 @@ static int btusb_send_frame(struct sk_buff *skb)
|
|||
break;
|
||||
|
||||
case HCI_ACLDATA_PKT:
|
||||
if (!data->bulk_tx_ep || (hdev->conn_hash.acl_num < 1 &&
|
||||
hdev->conn_hash.le_num < 1))
|
||||
if (!data->bulk_tx_ep)
|
||||
return -ENODEV;
|
||||
|
||||
urb = usb_alloc_urb(0, GFP_ATOMIC);
|
||||
|
|
|
@ -205,6 +205,32 @@ void proc_ptrace_connector(struct task_struct *task, int ptrace_id)
|
|||
cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
|
||||
}
|
||||
|
||||
void proc_comm_connector(struct task_struct *task)
|
||||
{
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
struct timespec ts;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
ev = (struct proc_event *)msg->data;
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->what = PROC_EVENT_COMM;
|
||||
ev->event_data.comm.process_pid = task->pid;
|
||||
ev->event_data.comm.process_tgid = task->tgid;
|
||||
get_task_comm(ev->event_data.comm.comm, task);
|
||||
|
||||
memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
|
||||
msg->ack = 0; /* not used */
|
||||
msg->len = sizeof(*ev);
|
||||
cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
|
||||
}
|
||||
|
||||
void proc_exit_connector(struct task_struct *task)
|
||||
{
|
||||
struct cn_msg *msg;
|
||||
|
|
|
@ -800,13 +800,10 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|||
/* Loop thru additional data fragments and queue them */
|
||||
if (skb_shinfo(skb)->nr_frags) {
|
||||
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
|
||||
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
||||
maplen = frag->size;
|
||||
mapaddr =
|
||||
pci_map_page(c2dev->pcidev, frag->page,
|
||||
frag->page_offset, maplen,
|
||||
PCI_DMA_TODEVICE);
|
||||
|
||||
const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
||||
maplen = skb_frag_size(frag);
|
||||
mapaddr = skb_frag_dma_map(&c2dev->pcidev->dev, frag,
|
||||
0, maplen, DMA_TO_DEVICE);
|
||||
elem = elem->next;
|
||||
elem->skb = NULL;
|
||||
elem->mapaddr = mapaddr;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
ccflags-y := -Idrivers/net/cxgb3
|
||||
ccflags-y := -Idrivers/net/ethernet/chelsio/cxgb3
|
||||
|
||||
obj-$(CONFIG_INFINIBAND_CXGB3) += iw_cxgb3.o
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
ccflags-y := -Idrivers/net/cxgb4
|
||||
ccflags-y := -Idrivers/net/ethernet/chelsio/cxgb4
|
||||
|
||||
obj-$(CONFIG_INFINIBAND_CXGB4) += iw_cxgb4.o
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
config MLX4_INFINIBAND
|
||||
tristate "Mellanox ConnectX HCA support"
|
||||
depends on NETDEVICES && NETDEV_10000 && PCI
|
||||
depends on NETDEVICES && ETHERNET && PCI
|
||||
select NET_VENDOR_MELLANOX
|
||||
select MLX4_CORE
|
||||
---help---
|
||||
This driver provides low-level InfiniBand support for
|
||||
|
|
|
@ -441,13 +441,13 @@ static int nes_nic_send(struct sk_buff *skb, struct net_device *netdev)
|
|||
nesnic->tx_skb[nesnic->sq_head] = skb;
|
||||
for (skb_fragment_index = 0; skb_fragment_index < skb_shinfo(skb)->nr_frags;
|
||||
skb_fragment_index++) {
|
||||
bus_address = pci_map_page( nesdev->pcidev,
|
||||
skb_shinfo(skb)->frags[skb_fragment_index].page,
|
||||
skb_shinfo(skb)->frags[skb_fragment_index].page_offset,
|
||||
skb_shinfo(skb)->frags[skb_fragment_index].size,
|
||||
PCI_DMA_TODEVICE);
|
||||
skb_frag_t *frag =
|
||||
&skb_shinfo(skb)->frags[skb_fragment_index];
|
||||
bus_address = skb_frag_dma_map(&nesdev->pcidev->dev,
|
||||
frag, 0, skb_frag_size(frag),
|
||||
DMA_TO_DEVICE);
|
||||
wqe_fragment_length[wqe_fragment_index] =
|
||||
cpu_to_le16(skb_shinfo(skb)->frags[skb_fragment_index].size);
|
||||
cpu_to_le16(skb_frag_size(&skb_shinfo(skb)->frags[skb_fragment_index]));
|
||||
set_wqe_64bit_value(nic_sqe->wqe_words, NES_NIC_SQ_WQE_FRAG0_LOW_IDX+(2*wqe_fragment_index),
|
||||
bus_address);
|
||||
wqe_fragment_index++;
|
||||
|
@ -561,11 +561,12 @@ tso_sq_no_longer_full:
|
|||
/* Map all the buffers */
|
||||
for (tso_frag_count=0; tso_frag_count < skb_shinfo(skb)->nr_frags;
|
||||
tso_frag_count++) {
|
||||
tso_bus_address[tso_frag_count] = pci_map_page( nesdev->pcidev,
|
||||
skb_shinfo(skb)->frags[tso_frag_count].page,
|
||||
skb_shinfo(skb)->frags[tso_frag_count].page_offset,
|
||||
skb_shinfo(skb)->frags[tso_frag_count].size,
|
||||
PCI_DMA_TODEVICE);
|
||||
skb_frag_t *frag =
|
||||
&skb_shinfo(skb)->frags[tso_frag_count];
|
||||
tso_bus_address[tso_frag_count] =
|
||||
skb_frag_dma_map(&nesdev->pcidev->dev,
|
||||
frag, 0, skb_frag_size(frag),
|
||||
DMA_TO_DEVICE);
|
||||
}
|
||||
|
||||
tso_frag_index = 0;
|
||||
|
@ -636,11 +637,11 @@ tso_sq_no_longer_full:
|
|||
}
|
||||
while (wqe_fragment_index < 5) {
|
||||
wqe_fragment_length[wqe_fragment_index] =
|
||||
cpu_to_le16(skb_shinfo(skb)->frags[tso_frag_index].size);
|
||||
cpu_to_le16(skb_frag_size(&skb_shinfo(skb)->frags[tso_frag_index]));
|
||||
set_wqe_64bit_value(nic_sqe->wqe_words, NES_NIC_SQ_WQE_FRAG0_LOW_IDX+(2*wqe_fragment_index),
|
||||
(u64)tso_bus_address[tso_frag_index]);
|
||||
wqe_fragment_index++;
|
||||
tso_wqe_length += skb_shinfo(skb)->frags[tso_frag_index++].size;
|
||||
tso_wqe_length += skb_frag_size(&skb_shinfo(skb)->frags[tso_frag_index++]);
|
||||
if (wqe_fragment_index < 5)
|
||||
wqe_fragment_length[wqe_fragment_index] = 0;
|
||||
if (tso_frag_index == tso_frag_count)
|
||||
|
@ -1638,7 +1639,7 @@ static const struct net_device_ops nes_netdev_ops = {
|
|||
.ndo_get_stats = nes_netdev_get_stats,
|
||||
.ndo_tx_timeout = nes_netdev_tx_timeout,
|
||||
.ndo_set_mac_address = nes_netdev_set_mac_address,
|
||||
.ndo_set_multicast_list = nes_netdev_set_multicast_list,
|
||||
.ndo_set_rx_mode = nes_netdev_set_multicast_list,
|
||||
.ndo_change_mtu = nes_netdev_change_mtu,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_fix_features = nes_fix_features,
|
||||
|
|
|
@ -169,7 +169,7 @@ static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev,
|
|||
goto partial_error;
|
||||
skb_fill_page_desc(skb, i, page, 0, PAGE_SIZE);
|
||||
|
||||
mapping[i + 1] = ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[i].page,
|
||||
mapping[i + 1] = ib_dma_map_page(priv->ca, page,
|
||||
0, PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
if (unlikely(ib_dma_mapping_error(priv->ca, mapping[i + 1])))
|
||||
goto partial_error;
|
||||
|
@ -537,12 +537,13 @@ static void skb_put_frags(struct sk_buff *skb, unsigned int hdr_space,
|
|||
|
||||
if (length == 0) {
|
||||
/* don't need this page */
|
||||
skb_fill_page_desc(toskb, i, frag->page, 0, PAGE_SIZE);
|
||||
skb_fill_page_desc(toskb, i, skb_frag_page(frag),
|
||||
0, PAGE_SIZE);
|
||||
--skb_shinfo(skb)->nr_frags;
|
||||
} else {
|
||||
size = min(length, (unsigned) PAGE_SIZE);
|
||||
|
||||
frag->size = size;
|
||||
skb_frag_size_set(frag, size);
|
||||
skb->data_len += size;
|
||||
skb->truesize += size;
|
||||
skb->len += size;
|
||||
|
|
|
@ -117,7 +117,7 @@ static void ipoib_ud_skb_put_frags(struct ipoib_dev_priv *priv,
|
|||
|
||||
size = length - IPOIB_UD_HEAD_SIZE;
|
||||
|
||||
frag->size = size;
|
||||
skb_frag_size_set(frag, size);
|
||||
skb->data_len += size;
|
||||
skb->truesize += size;
|
||||
} else
|
||||
|
@ -182,7 +182,7 @@ static struct sk_buff *ipoib_alloc_rx_skb(struct net_device *dev, int id)
|
|||
goto partial_error;
|
||||
skb_fill_page_desc(skb, 0, page, 0, PAGE_SIZE);
|
||||
mapping[1] =
|
||||
ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[0].page,
|
||||
ib_dma_map_page(priv->ca, page,
|
||||
0, PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
if (unlikely(ib_dma_mapping_error(priv->ca, mapping[1])))
|
||||
goto partial_error;
|
||||
|
@ -322,9 +322,10 @@ static int ipoib_dma_map_tx(struct ib_device *ca,
|
|||
off = 0;
|
||||
|
||||
for (i = 0; i < skb_shinfo(skb)->nr_frags; ++i) {
|
||||
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
||||
mapping[i + off] = ib_dma_map_page(ca, frag->page,
|
||||
frag->page_offset, frag->size,
|
||||
const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
||||
mapping[i + off] = ib_dma_map_page(ca,
|
||||
skb_frag_page(frag),
|
||||
frag->page_offset, skb_frag_size(frag),
|
||||
DMA_TO_DEVICE);
|
||||
if (unlikely(ib_dma_mapping_error(ca, mapping[i + off])))
|
||||
goto partial_error;
|
||||
|
@ -333,8 +334,9 @@ static int ipoib_dma_map_tx(struct ib_device *ca,
|
|||
|
||||
partial_error:
|
||||
for (; i > 0; --i) {
|
||||
skb_frag_t *frag = &skb_shinfo(skb)->frags[i - 1];
|
||||
ib_dma_unmap_page(ca, mapping[i - !off], frag->size, DMA_TO_DEVICE);
|
||||
const skb_frag_t *frag = &skb_shinfo(skb)->frags[i - 1];
|
||||
|
||||
ib_dma_unmap_page(ca, mapping[i - !off], skb_frag_size(frag), DMA_TO_DEVICE);
|
||||
}
|
||||
|
||||
if (off)
|
||||
|
@ -358,8 +360,9 @@ static void ipoib_dma_unmap_tx(struct ib_device *ca,
|
|||
off = 0;
|
||||
|
||||
for (i = 0; i < skb_shinfo(skb)->nr_frags; ++i) {
|
||||
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
||||
ib_dma_unmap_page(ca, mapping[i + off], frag->size,
|
||||
const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
|
||||
|
||||
ib_dma_unmap_page(ca, mapping[i + off], skb_frag_size(frag),
|
||||
DMA_TO_DEVICE);
|
||||
}
|
||||
}
|
||||
|
@ -509,7 +512,7 @@ static inline int post_send(struct ipoib_dev_priv *priv,
|
|||
|
||||
for (i = 0; i < nr_frags; ++i) {
|
||||
priv->tx_sge[i + off].addr = mapping[i + off];
|
||||
priv->tx_sge[i + off].length = frags[i].size;
|
||||
priv->tx_sge[i + off].length = skb_frag_size(&frags[i]);
|
||||
}
|
||||
priv->tx_wr.num_sge = nr_frags + off;
|
||||
priv->tx_wr.wr_id = wr_id;
|
||||
|
|
|
@ -998,7 +998,7 @@ static const struct net_device_ops ipoib_netdev_ops = {
|
|||
.ndo_fix_features = ipoib_fix_features,
|
||||
.ndo_start_xmit = ipoib_start_xmit,
|
||||
.ndo_tx_timeout = ipoib_timeout,
|
||||
.ndo_set_multicast_list = ipoib_set_mcast_list,
|
||||
.ndo_set_rx_mode = ipoib_set_mcast_list,
|
||||
.ndo_neigh_setup = ipoib_neigh_setup_dev,
|
||||
};
|
||||
|
||||
|
|
|
@ -1230,7 +1230,7 @@ static const struct net_device_ops dvb_netdev_ops = {
|
|||
.ndo_open = dvb_net_open,
|
||||
.ndo_stop = dvb_net_stop,
|
||||
.ndo_start_xmit = dvb_net_tx,
|
||||
.ndo_set_multicast_list = dvb_net_set_multicast_list,
|
||||
.ndo_set_rx_mode = dvb_net_set_multicast_list,
|
||||
.ndo_set_mac_address = dvb_net_set_mac,
|
||||
.ndo_change_mtu = eth_change_mtu,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
|
|
3391
drivers/net/Kconfig
3391
drivers/net/Kconfig
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,278 +1,61 @@
|
|||
#
|
||||
# Makefile for the Linux network (ethercard) device drivers.
|
||||
# Makefile for the Linux network device drivers.
|
||||
#
|
||||
|
||||
obj-$(CONFIG_MII) += mii.o
|
||||
obj-$(CONFIG_MDIO) += mdio.o
|
||||
obj-$(CONFIG_PHYLIB) += phy/
|
||||
|
||||
obj-$(CONFIG_TI_DAVINCI_EMAC) += davinci_emac.o
|
||||
obj-$(CONFIG_TI_DAVINCI_MDIO) += davinci_mdio.o
|
||||
obj-$(CONFIG_TI_DAVINCI_CPDMA) += davinci_cpdma.o
|
||||
|
||||
obj-$(CONFIG_E1000) += e1000/
|
||||
obj-$(CONFIG_E1000E) += e1000e/
|
||||
obj-$(CONFIG_IBM_NEW_EMAC) += ibm_newemac/
|
||||
obj-$(CONFIG_IGB) += igb/
|
||||
obj-$(CONFIG_IGBVF) += igbvf/
|
||||
obj-$(CONFIG_IXGBE) += ixgbe/
|
||||
obj-$(CONFIG_IXGBEVF) += ixgbevf/
|
||||
obj-$(CONFIG_IXGB) += ixgb/
|
||||
obj-$(CONFIG_IP1000) += ipg.o
|
||||
obj-$(CONFIG_CHELSIO_T1) += chelsio/
|
||||
obj-$(CONFIG_CHELSIO_T3) += cxgb3/
|
||||
obj-$(CONFIG_CHELSIO_T4) += cxgb4/
|
||||
obj-$(CONFIG_CHELSIO_T4VF) += cxgb4vf/
|
||||
obj-$(CONFIG_EHEA) += ehea/
|
||||
obj-$(CONFIG_CAN) += can/
|
||||
#
|
||||
# Networking Core Drivers
|
||||
#
|
||||
obj-$(CONFIG_BONDING) += bonding/
|
||||
obj-$(CONFIG_ATL1) += atlx/
|
||||
obj-$(CONFIG_ATL2) += atlx/
|
||||
obj-$(CONFIG_ATL1E) += atl1e/
|
||||
obj-$(CONFIG_ATL1C) += atl1c/
|
||||
obj-$(CONFIG_GIANFAR) += gianfar_driver.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_GIANFAR) += gianfar_ptp.o
|
||||
obj-$(CONFIG_TEHUTI) += tehuti.o
|
||||
obj-$(CONFIG_ENIC) += enic/
|
||||
obj-$(CONFIG_JME) += jme.o
|
||||
obj-$(CONFIG_BE2NET) += benet/
|
||||
obj-$(CONFIG_VMXNET3) += vmxnet3/
|
||||
obj-$(CONFIG_BNA) += bna/
|
||||
|
||||
gianfar_driver-objs := gianfar.o \
|
||||
gianfar_ethtool.o \
|
||||
gianfar_sysfs.o
|
||||
|
||||
obj-$(CONFIG_UCC_GETH) += ucc_geth_driver.o
|
||||
ucc_geth_driver-objs := ucc_geth.o ucc_geth_ethtool.o
|
||||
|
||||
obj-$(CONFIG_FSL_PQ_MDIO) += fsl_pq_mdio.o
|
||||
|
||||
#
|
||||
# link order important here
|
||||
#
|
||||
obj-$(CONFIG_PLIP) += plip.o
|
||||
|
||||
obj-$(CONFIG_ROADRUNNER) += rrunner.o
|
||||
|
||||
obj-$(CONFIG_HAPPYMEAL) += sunhme.o
|
||||
obj-$(CONFIG_SUNLANCE) += sunlance.o
|
||||
obj-$(CONFIG_SUNQE) += sunqe.o
|
||||
obj-$(CONFIG_SUNBMAC) += sunbmac.o
|
||||
obj-$(CONFIG_SUNGEM) += sungem.o sungem_phy.o
|
||||
obj-$(CONFIG_CASSINI) += cassini.o
|
||||
obj-$(CONFIG_SUNVNET) += sunvnet.o
|
||||
|
||||
obj-$(CONFIG_MACE) += mace.o
|
||||
obj-$(CONFIG_BMAC) += bmac.o
|
||||
|
||||
obj-$(CONFIG_VORTEX) += 3c59x.o
|
||||
obj-$(CONFIG_TYPHOON) += typhoon.o
|
||||
obj-$(CONFIG_NE2K_PCI) += ne2k-pci.o 8390.o
|
||||
obj-$(CONFIG_PCNET32) += pcnet32.o
|
||||
obj-$(CONFIG_E100) += e100.o
|
||||
obj-$(CONFIG_TLAN) += tlan.o
|
||||
obj-$(CONFIG_EPIC100) += epic100.o
|
||||
obj-$(CONFIG_SMSC9420) += smsc9420.o
|
||||
obj-$(CONFIG_SIS190) += sis190.o
|
||||
obj-$(CONFIG_SIS900) += sis900.o
|
||||
obj-$(CONFIG_R6040) += r6040.o
|
||||
obj-$(CONFIG_YELLOWFIN) += yellowfin.o
|
||||
obj-$(CONFIG_ACENIC) += acenic.o
|
||||
obj-$(CONFIG_ISERIES_VETH) += iseries_veth.o
|
||||
obj-$(CONFIG_NATSEMI) += natsemi.o
|
||||
obj-$(CONFIG_NS83820) += ns83820.o
|
||||
obj-$(CONFIG_STNIC) += stnic.o 8390.o
|
||||
obj-$(CONFIG_FEALNX) += fealnx.o
|
||||
obj-$(CONFIG_TIGON3) += tg3.o
|
||||
obj-$(CONFIG_BNX2) += bnx2.o
|
||||
obj-$(CONFIG_CNIC) += cnic.o
|
||||
obj-$(CONFIG_BNX2X) += bnx2x/
|
||||
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
|
||||
gelic_wireless-$(CONFIG_GELIC_WIRELESS) += ps3_gelic_wireless.o
|
||||
ps3_gelic-objs += ps3_gelic_net.o $(gelic_wireless-y)
|
||||
obj-$(CONFIG_TC35815) += tc35815.o
|
||||
obj-$(CONFIG_SKGE) += skge.o
|
||||
obj-$(CONFIG_SKY2) += sky2.o
|
||||
obj-$(CONFIG_SKFP) += skfp/
|
||||
obj-$(CONFIG_KS8842) += ks8842.o
|
||||
obj-$(CONFIG_KS8851) += ks8851.o
|
||||
obj-$(CONFIG_KS8851_MLL) += ks8851_mll.o
|
||||
obj-$(CONFIG_KSZ884X_PCI) += ksz884x.o
|
||||
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
|
||||
obj-$(CONFIG_STMMAC_ETH) += stmmac/
|
||||
|
||||
#
|
||||
# end link order section
|
||||
#
|
||||
|
||||
obj-$(CONFIG_SUNDANCE) += sundance.o
|
||||
obj-$(CONFIG_HAMACHI) += hamachi.o
|
||||
obj-$(CONFIG_NET) += Space.o loopback.o
|
||||
obj-$(CONFIG_SEEQ8005) += seeq8005.o
|
||||
obj-$(CONFIG_NET_SB1000) += sb1000.o
|
||||
obj-$(CONFIG_MAC8390) += mac8390.o
|
||||
obj-$(CONFIG_APNE) += apne.o 8390.o
|
||||
obj-$(CONFIG_PCMCIA_PCNET) += 8390.o
|
||||
obj-$(CONFIG_HP100) += hp100.o
|
||||
obj-$(CONFIG_SMC9194) += smc9194.o
|
||||
obj-$(CONFIG_FEC) += fec.o
|
||||
obj-$(CONFIG_FEC_MPC52xx) += fec_mpc52xx.o
|
||||
ifeq ($(CONFIG_FEC_MPC52xx_MDIO),y)
|
||||
obj-$(CONFIG_FEC_MPC52xx) += fec_mpc52xx_phy.o
|
||||
endif
|
||||
obj-$(CONFIG_WD80x3) += wd.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
|
||||
obj-$(CONFIG_E2100) += e2100.o 8390.o
|
||||
obj-$(CONFIG_ES3210) += es3210.o 8390.o
|
||||
obj-$(CONFIG_LNE390) += lne390.o 8390.o
|
||||
obj-$(CONFIG_NE3210) += ne3210.o 8390.o
|
||||
obj-$(CONFIG_SB1250_MAC) += sb1250-mac.o
|
||||
obj-$(CONFIG_B44) += b44.o
|
||||
obj-$(CONFIG_FORCEDETH) += forcedeth.o
|
||||
obj-$(CONFIG_NE_H8300) += ne-h8300.o
|
||||
obj-$(CONFIG_AX88796) += ax88796.o
|
||||
obj-$(CONFIG_BCM63XX_ENET) += bcm63xx_enet.o
|
||||
obj-$(CONFIG_FTGMAC100) += ftgmac100.o
|
||||
obj-$(CONFIG_FTMAC100) += ftmac100.o
|
||||
|
||||
obj-$(CONFIG_TSI108_ETH) += tsi108_eth.o
|
||||
obj-$(CONFIG_MV643XX_ETH) += mv643xx_eth.o
|
||||
ll_temac-objs := ll_temac_main.o ll_temac_mdio.o
|
||||
obj-$(CONFIG_XILINX_LL_TEMAC) += ll_temac.o
|
||||
obj-$(CONFIG_XILINX_EMACLITE) += xilinx_emaclite.o
|
||||
obj-$(CONFIG_QLA3XXX) += qla3xxx.o
|
||||
obj-$(CONFIG_QLCNIC) += qlcnic/
|
||||
obj-$(CONFIG_QLGE) += qlge/
|
||||
|
||||
obj-$(CONFIG_PPP) += ppp_generic.o
|
||||
obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
|
||||
obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
|
||||
obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
|
||||
obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
|
||||
obj-$(CONFIG_PPP_MPPE) += ppp_mppe.o
|
||||
obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
|
||||
obj-$(CONFIG_PPPOL2TP) += pppox.o
|
||||
obj-$(CONFIG_PPTP) += pppox.o pptp.o
|
||||
|
||||
obj-$(CONFIG_SLIP) += slip.o
|
||||
obj-$(CONFIG_SLHC) += slhc.o
|
||||
|
||||
obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o
|
||||
obj-$(CONFIG_XEN_NETDEV_BACKEND) += xen-netback/
|
||||
|
||||
obj-$(CONFIG_DUMMY) += dummy.o
|
||||
obj-$(CONFIG_EQUALIZER) += eql.o
|
||||
obj-$(CONFIG_IFB) += ifb.o
|
||||
obj-$(CONFIG_MACVLAN) += macvlan.o
|
||||
obj-$(CONFIG_MACVTAP) += macvtap.o
|
||||
obj-$(CONFIG_DE600) += de600.o
|
||||
obj-$(CONFIG_DE620) += de620.o
|
||||
obj-$(CONFIG_LANCE) += lance.o
|
||||
obj-$(CONFIG_SUN3_82586) += sun3_82586.o
|
||||
obj-$(CONFIG_SUN3LANCE) += sun3lance.o
|
||||
obj-$(CONFIG_DEFXX) += defxx.o
|
||||
obj-$(CONFIG_SGISEEQ) += sgiseeq.o
|
||||
obj-$(CONFIG_SGI_O2MACE_ETH) += meth.o
|
||||
obj-$(CONFIG_AT1700) += at1700.o
|
||||
obj-$(CONFIG_EL1) += 3c501.o
|
||||
obj-$(CONFIG_EL16) += 3c507.o
|
||||
obj-$(CONFIG_ELMC) += 3c523.o
|
||||
obj-$(CONFIG_IBMLANA) += ibmlana.o
|
||||
obj-$(CONFIG_ELMC_II) += 3c527.o
|
||||
obj-$(CONFIG_EL3) += 3c509.o
|
||||
obj-$(CONFIG_3C515) += 3c515.o
|
||||
obj-$(CONFIG_EEXPRESS) += eexpress.o
|
||||
obj-$(CONFIG_EEXPRESS_PRO) += eepro.o
|
||||
obj-$(CONFIG_8139CP) += 8139cp.o
|
||||
obj-$(CONFIG_8139TOO) += 8139too.o
|
||||
obj-$(CONFIG_ZNET) += znet.o
|
||||
obj-$(CONFIG_CPMAC) += cpmac.o
|
||||
obj-$(CONFIG_DEPCA) += depca.o
|
||||
obj-$(CONFIG_EWRK3) += ewrk3.o
|
||||
obj-$(CONFIG_ATP) += atp.o
|
||||
obj-$(CONFIG_NI5010) += ni5010.o
|
||||
obj-$(CONFIG_NI52) += ni52.o
|
||||
obj-$(CONFIG_NI65) += ni65.o
|
||||
obj-$(CONFIG_ELPLUS) += 3c505.o
|
||||
obj-$(CONFIG_AC3200) += ac3200.o 8390.o
|
||||
obj-$(CONFIG_APRICOT) += 82596.o
|
||||
obj-$(CONFIG_LASI_82596) += lasi_82596.o
|
||||
obj-$(CONFIG_SNI_82596) += sni_82596.o
|
||||
obj-$(CONFIG_MVME16x_NET) += 82596.o
|
||||
obj-$(CONFIG_BVME6000_NET) += 82596.o
|
||||
obj-$(CONFIG_SC92031) += sc92031.o
|
||||
|
||||
# This is also a 82596 and should probably be merged
|
||||
obj-$(CONFIG_LP486E) += lp486e.o
|
||||
|
||||
obj-$(CONFIG_ETH16I) += eth16i.o
|
||||
obj-$(CONFIG_ZORRO8390) += zorro8390.o
|
||||
obj-$(CONFIG_HPLANCE) += hplance.o 7990.o
|
||||
obj-$(CONFIG_MVME147_NET) += mvme147.o 7990.o
|
||||
obj-$(CONFIG_EQUALIZER) += eql.o
|
||||
obj-$(CONFIG_KORINA) += korina.o
|
||||
obj-$(CONFIG_MIPS_JAZZ_SONIC) += jazzsonic.o
|
||||
obj-$(CONFIG_MIPS_AU1X00_ENET) += au1000_eth.o
|
||||
obj-$(CONFIG_MIPS_SIM_NET) += mipsnet.o
|
||||
obj-$(CONFIG_SGI_IOC3_ETH) += ioc3-eth.o
|
||||
obj-$(CONFIG_DECLANCE) += declance.o
|
||||
obj-$(CONFIG_ATARILANCE) += atarilance.o
|
||||
obj-$(CONFIG_A2065) += a2065.o
|
||||
obj-$(CONFIG_HYDRA) += hydra.o
|
||||
obj-$(CONFIG_ARIADNE) += ariadne.o
|
||||
obj-$(CONFIG_CS89x0) += cs89x0.o
|
||||
obj-$(CONFIG_MACSONIC) += macsonic.o
|
||||
obj-$(CONFIG_MACMACE) += macmace.o
|
||||
obj-$(CONFIG_MAC89x0) += mac89x0.o
|
||||
obj-$(CONFIG_MII) += mii.o
|
||||
obj-$(CONFIG_MDIO) += mdio.o
|
||||
obj-$(CONFIG_NET) += Space.o loopback.o
|
||||
obj-$(CONFIG_NETCONSOLE) += netconsole.o
|
||||
obj-$(CONFIG_PHYLIB) += phy/
|
||||
obj-$(CONFIG_RIONET) += rionet.o
|
||||
obj-$(CONFIG_TUN) += tun.o
|
||||
obj-$(CONFIG_VETH) += veth.o
|
||||
obj-$(CONFIG_NET_NETX) += netx-eth.o
|
||||
obj-$(CONFIG_DL2K) += dl2k.o
|
||||
obj-$(CONFIG_R8169) += r8169.o
|
||||
obj-$(CONFIG_AMD8111_ETH) += amd8111e.o
|
||||
obj-$(CONFIG_IBMVETH) += ibmveth.o
|
||||
obj-$(CONFIG_S2IO) += s2io.o
|
||||
obj-$(CONFIG_VXGE) += vxge/
|
||||
obj-$(CONFIG_MYRI10GE) += myri10ge/
|
||||
obj-$(CONFIG_SMC91X) += smc91x.o
|
||||
obj-$(CONFIG_SMC911X) += smc911x.o
|
||||
obj-$(CONFIG_SMSC911X) += smsc911x.o
|
||||
obj-$(CONFIG_PXA168_ETH) += pxa168_eth.o
|
||||
obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
|
||||
obj-$(CONFIG_DM9000) += dm9000.o
|
||||
obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o
|
||||
pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o
|
||||
obj-$(CONFIG_MLX4_CORE) += mlx4/
|
||||
obj-$(CONFIG_ENC28J60) += enc28j60.o
|
||||
obj-$(CONFIG_ETHOC) += ethoc.o
|
||||
obj-$(CONFIG_GRETH) += greth.o
|
||||
obj-$(CONFIG_LANTIQ_ETOP) += lantiq_etop.o
|
||||
obj-$(CONFIG_VIRTIO_NET) += virtio_net.o
|
||||
|
||||
obj-$(CONFIG_XTENSA_XT2000_SONIC) += xtsonic.o
|
||||
|
||||
obj-$(CONFIG_DNET) += dnet.o
|
||||
obj-$(CONFIG_MACB) += macb.o
|
||||
obj-$(CONFIG_S6GMAC) += s6gmac.o
|
||||
|
||||
obj-$(CONFIG_ARM) += arm/
|
||||
#
|
||||
# Networking Drivers
|
||||
#
|
||||
obj-$(CONFIG_ARCNET) += arcnet/
|
||||
obj-$(CONFIG_DEV_APPLETALK) += appletalk/
|
||||
obj-$(CONFIG_CAIF) += caif/
|
||||
obj-$(CONFIG_CAN) += can/
|
||||
obj-$(CONFIG_ETRAX_ETHERNET) += cris/
|
||||
obj-$(CONFIG_ETHERNET) += ethernet/
|
||||
obj-$(CONFIG_FDDI) += fddi/
|
||||
obj-$(CONFIG_HIPPI) += hippi/
|
||||
obj-$(CONFIG_HAMRADIO) += hamradio/
|
||||
obj-$(CONFIG_IRDA) += irda/
|
||||
obj-$(CONFIG_PLIP) += plip/
|
||||
obj-$(CONFIG_PPP) += ppp/
|
||||
obj-$(CONFIG_PPP_ASYNC) += ppp/
|
||||
obj-$(CONFIG_PPP_BSDCOMP) += ppp/
|
||||
obj-$(CONFIG_PPP_DEFLATE) += ppp/
|
||||
obj-$(CONFIG_PPP_MPPE) += ppp/
|
||||
obj-$(CONFIG_PPP_SYNC_TTY) += ppp/
|
||||
obj-$(CONFIG_PPPOE) += ppp/
|
||||
obj-$(CONFIG_PPPOL2TP) += ppp/
|
||||
obj-$(CONFIG_PPTP) += ppp/
|
||||
obj-$(CONFIG_SLIP) += slip/
|
||||
obj-$(CONFIG_SLHC) += slip/
|
||||
obj-$(CONFIG_NET_SB1000) += sb1000.o
|
||||
obj-$(CONFIG_SUNGEM_PHY) += sungem_phy.o
|
||||
obj-$(CONFIG_TR) += tokenring/
|
||||
obj-$(CONFIG_WAN) += wan/
|
||||
obj-$(CONFIG_ARCNET) += arcnet/
|
||||
obj-$(CONFIG_NET_PCMCIA) += pcmcia/
|
||||
obj-$(CONFIG_WLAN) += wireless/
|
||||
obj-$(CONFIG_WIMAX) += wimax/
|
||||
|
||||
obj-$(CONFIG_VMXNET3) += vmxnet3/
|
||||
obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o
|
||||
obj-$(CONFIG_XEN_NETDEV_BACKEND) += xen-netback/
|
||||
|
||||
obj-$(CONFIG_USB_CATC) += usb/
|
||||
obj-$(CONFIG_USB_KAWETH) += usb/
|
||||
|
@ -283,26 +66,3 @@ obj-$(CONFIG_USB_USBNET) += usb/
|
|||
obj-$(CONFIG_USB_ZD1201) += usb/
|
||||
obj-$(CONFIG_USB_IPHETH) += usb/
|
||||
obj-$(CONFIG_USB_CDC_PHONET) += usb/
|
||||
|
||||
obj-$(CONFIG_WLAN) += wireless/
|
||||
obj-$(CONFIG_NET_TULIP) += tulip/
|
||||
obj-$(CONFIG_HAMRADIO) += hamradio/
|
||||
obj-$(CONFIG_IRDA) += irda/
|
||||
obj-$(CONFIG_ETRAX_ETHERNET) += cris/
|
||||
obj-$(CONFIG_ENP2611_MSF_NET) += ixp2000/
|
||||
|
||||
obj-$(CONFIG_NETCONSOLE) += netconsole.o
|
||||
|
||||
obj-$(CONFIG_FS_ENET) += fs_enet/
|
||||
|
||||
obj-$(CONFIG_NETXEN_NIC) += netxen/
|
||||
obj-$(CONFIG_NIU) += niu.o
|
||||
obj-$(CONFIG_VIRTIO_NET) += virtio_net.o
|
||||
obj-$(CONFIG_SFC) += sfc/
|
||||
|
||||
obj-$(CONFIG_WIMAX) += wimax/
|
||||
obj-$(CONFIG_CAIF) += caif/
|
||||
|
||||
obj-$(CONFIG_OCTEON_MGMT_ETHERNET) += octeon/
|
||||
obj-$(CONFIG_PCH_GBE) += pch_gbe/
|
||||
obj-$(CONFIG_TILE_NET) += tile/
|
||||
|
|
|
@ -264,7 +264,7 @@ static const struct net_device_ops cops_netdev_ops = {
|
|||
.ndo_start_xmit = cops_send_packet,
|
||||
.ndo_tx_timeout = cops_timeout,
|
||||
.ndo_do_ioctl = cops_ioctl,
|
||||
.ndo_set_multicast_list = set_multicast_list,
|
||||
.ndo_set_rx_mode = set_multicast_list,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -1014,7 +1014,7 @@ static int __init ltpc_probe_dma(int base, int dma)
|
|||
static const struct net_device_ops ltpc_netdev = {
|
||||
.ndo_start_xmit = ltpc_xmit,
|
||||
.ndo_do_ioctl = ltpc_ioctl,
|
||||
.ndo_set_multicast_list = set_multicast_list,
|
||||
.ndo_set_rx_mode = set_multicast_list,
|
||||
};
|
||||
|
||||
struct net_device * __init ltpc_probe(void)
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
#
|
||||
|
||||
menuconfig ARCNET
|
||||
depends on NETDEVICES && (ISA || PCI)
|
||||
tristate "ARCnet support"
|
||||
depends on NETDEVICES && (ISA || PCI || PCMCIA)
|
||||
bool "ARCnet support"
|
||||
---help---
|
||||
If you have a network card of this type, say Y and check out the
|
||||
(arguably) beautiful poetry in
|
||||
|
@ -123,4 +123,14 @@ config ARCNET_COM20020_PCI
|
|||
tristate "Support for COM20020 on PCI"
|
||||
depends on ARCNET_COM20020 && PCI
|
||||
|
||||
config ARCNET_COM20020_CS
|
||||
tristate "COM20020 ARCnet PCMCIA support"
|
||||
depends on ARCNET_COM20020 && PCMCIA
|
||||
help
|
||||
Say Y here if you intend to attach this type of ARCnet PCMCIA card
|
||||
to your computer.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will be
|
||||
called com20020_cs. If unsure, say N.
|
||||
|
||||
endif # ARCNET
|
||||
|
|
|
@ -12,3 +12,4 @@ obj-$(CONFIG_ARCNET_RIM_I) += arc-rimi.o
|
|||
obj-$(CONFIG_ARCNET_COM20020) += com20020.o
|
||||
obj-$(CONFIG_ARCNET_COM20020_ISA) += com20020-isa.o
|
||||
obj-$(CONFIG_ARCNET_COM20020_PCI) += com20020-pci.o
|
||||
obj-$(CONFIG_ARCNET_COM20020_CS) += com20020_cs.o
|
||||
|
|
|
@ -154,7 +154,7 @@ const struct net_device_ops com20020_netdev_ops = {
|
|||
.ndo_stop = arcnet_close,
|
||||
.ndo_start_xmit = arcnet_send_packet,
|
||||
.ndo_tx_timeout = arcnet_timeout,
|
||||
.ndo_set_multicast_list = com20020_set_mc_list,
|
||||
.ndo_set_rx_mode = com20020_set_mc_list,
|
||||
};
|
||||
|
||||
/* Set up the struct net_device associated with this card. Called after
|
||||
|
|
|
@ -1,74 +0,0 @@
|
|||
#
|
||||
# Acorn Network device configuration
|
||||
# These are for Acorn's Expansion card network interfaces
|
||||
#
|
||||
config ARM_AM79C961A
|
||||
bool "ARM EBSA110 AM79C961A support"
|
||||
depends on ARM && ARCH_EBSA110
|
||||
select CRC32
|
||||
help
|
||||
If you wish to compile a kernel for the EBSA-110, then you should
|
||||
always answer Y to this.
|
||||
|
||||
config ARM_ETHER1
|
||||
tristate "Acorn Ether1 support"
|
||||
depends on ARM && ARCH_ACORN
|
||||
help
|
||||
If you have an Acorn system with one of these (AKA25) network cards,
|
||||
you should say Y to this option if you wish to use it with Linux.
|
||||
|
||||
config ARM_ETHER3
|
||||
tristate "Acorn/ANT Ether3 support"
|
||||
depends on ARM && ARCH_ACORN
|
||||
help
|
||||
If you have an Acorn system with one of these network cards, you
|
||||
should say Y to this option if you wish to use it with Linux.
|
||||
|
||||
config ARM_ETHERH
|
||||
tristate "I-cubed EtherH/ANT EtherM support"
|
||||
depends on ARM && ARCH_ACORN
|
||||
select CRC32
|
||||
help
|
||||
If you have an Acorn system with one of these network cards, you
|
||||
should say Y to this option if you wish to use it with Linux.
|
||||
|
||||
config ARM_AT91_ETHER
|
||||
tristate "AT91RM9200 Ethernet support"
|
||||
depends on ARM && ARCH_AT91RM9200
|
||||
select MII
|
||||
help
|
||||
If you wish to compile a kernel for the AT91RM9200 and enable
|
||||
ethernet support, then you should always answer Y to this.
|
||||
|
||||
config ARM_KS8695_ETHER
|
||||
tristate "KS8695 Ethernet support"
|
||||
depends on ARM && ARCH_KS8695
|
||||
select MII
|
||||
help
|
||||
If you wish to compile a kernel for the KS8695 and want to
|
||||
use the internal ethernet then you should answer Y to this.
|
||||
|
||||
config EP93XX_ETH
|
||||
tristate "EP93xx Ethernet support"
|
||||
depends on ARM && ARCH_EP93XX
|
||||
select MII
|
||||
help
|
||||
This is a driver for the ethernet hardware included in EP93xx CPUs.
|
||||
Say Y if you are building a kernel for EP93xx based devices.
|
||||
|
||||
config IXP4XX_ETH
|
||||
tristate "Intel IXP4xx Ethernet support"
|
||||
depends on ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR
|
||||
select PHYLIB
|
||||
help
|
||||
Say Y here if you want to use built-in Ethernet ports
|
||||
on IXP4xx processor.
|
||||
|
||||
config W90P910_ETH
|
||||
tristate "Nuvoton w90p910 Ethernet support"
|
||||
depends on ARM && ARCH_W90X900
|
||||
select PHYLIB
|
||||
select MII
|
||||
help
|
||||
Say Y here if you want to use built-in Ethernet ports
|
||||
on w90p910 processor.
|
|
@ -1,14 +0,0 @@
|
|||
# File: drivers/net/arm/Makefile
|
||||
#
|
||||
# Makefile for the ARM network device drivers
|
||||
#
|
||||
|
||||
obj-$(CONFIG_ARM_AM79C961A) += am79c961a.o
|
||||
obj-$(CONFIG_ARM_ETHERH) += etherh.o
|
||||
obj-$(CONFIG_ARM_ETHER3) += ether3.o
|
||||
obj-$(CONFIG_ARM_ETHER1) += ether1.o
|
||||
obj-$(CONFIG_ARM_AT91_ETHER) += at91_ether.o
|
||||
obj-$(CONFIG_ARM_KS8695_ETHER) += ks8695net.o
|
||||
obj-$(CONFIG_EP93XX_ETH) += ep93xx_eth.o
|
||||
obj-$(CONFIG_IXP4XX_ETH) += ixp4xx_eth.o
|
||||
obj-$(CONFIG_W90P910_ETH) += w90p910_ether.o
|
|
@ -1,6 +0,0 @@
|
|||
config BE2NET
|
||||
tristate "ServerEngines' 10Gbps NIC - BladeEngine"
|
||||
depends on PCI && INET
|
||||
help
|
||||
This driver implements the NIC functionality for ServerEngines'
|
||||
10Gbps network adapter - BladeEngine.
|
|
@ -1,516 +0,0 @@
|
|||
/*
|
||||
* Linux network driver for Brocade Converged Network Adapter.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (GPL) Version 2 as
|
||||
* published by the Free Software Foundation
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
|
||||
* All rights reserved
|
||||
* www.brocade.com
|
||||
*/
|
||||
|
||||
#include "bfa_ioc.h"
|
||||
#include "cna.h"
|
||||
#include "bfi.h"
|
||||
#include "bfi_ctreg.h"
|
||||
#include "bfa_defs.h"
|
||||
|
||||
#define bfa_ioc_ct_sync_pos(__ioc) \
|
||||
((u32) (1 << bfa_ioc_pcifn(__ioc)))
|
||||
#define BFA_IOC_SYNC_REQD_SH 16
|
||||
#define bfa_ioc_ct_get_sync_ackd(__val) (__val & 0x0000ffff)
|
||||
#define bfa_ioc_ct_clear_sync_ackd(__val) (__val & 0xffff0000)
|
||||
#define bfa_ioc_ct_get_sync_reqd(__val) (__val >> BFA_IOC_SYNC_REQD_SH)
|
||||
#define bfa_ioc_ct_sync_reqd_pos(__ioc) \
|
||||
(bfa_ioc_ct_sync_pos(__ioc) << BFA_IOC_SYNC_REQD_SH)
|
||||
|
||||
/*
|
||||
* forward declarations
|
||||
*/
|
||||
static bool bfa_ioc_ct_firmware_lock(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_firmware_unlock(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_reg_init(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_map_port(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_isr_mode_set(struct bfa_ioc *ioc, bool msix);
|
||||
static void bfa_ioc_ct_notify_fail(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_ownership_reset(struct bfa_ioc *ioc);
|
||||
static bool bfa_ioc_ct_sync_start(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_sync_join(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_sync_leave(struct bfa_ioc *ioc);
|
||||
static void bfa_ioc_ct_sync_ack(struct bfa_ioc *ioc);
|
||||
static bool bfa_ioc_ct_sync_complete(struct bfa_ioc *ioc);
|
||||
static enum bfa_status bfa_ioc_ct_pll_init(void __iomem *rb, bool fcmode);
|
||||
|
||||
static struct bfa_ioc_hwif nw_hwif_ct;
|
||||
|
||||
/**
|
||||
* Called from bfa_ioc_attach() to map asic specific calls.
|
||||
*/
|
||||
void
|
||||
bfa_nw_ioc_set_ct_hwif(struct bfa_ioc *ioc)
|
||||
{
|
||||
nw_hwif_ct.ioc_pll_init = bfa_ioc_ct_pll_init;
|
||||
nw_hwif_ct.ioc_firmware_lock = bfa_ioc_ct_firmware_lock;
|
||||
nw_hwif_ct.ioc_firmware_unlock = bfa_ioc_ct_firmware_unlock;
|
||||
nw_hwif_ct.ioc_reg_init = bfa_ioc_ct_reg_init;
|
||||
nw_hwif_ct.ioc_map_port = bfa_ioc_ct_map_port;
|
||||
nw_hwif_ct.ioc_isr_mode_set = bfa_ioc_ct_isr_mode_set;
|
||||
nw_hwif_ct.ioc_notify_fail = bfa_ioc_ct_notify_fail;
|
||||
nw_hwif_ct.ioc_ownership_reset = bfa_ioc_ct_ownership_reset;
|
||||
nw_hwif_ct.ioc_sync_start = bfa_ioc_ct_sync_start;
|
||||
nw_hwif_ct.ioc_sync_join = bfa_ioc_ct_sync_join;
|
||||
nw_hwif_ct.ioc_sync_leave = bfa_ioc_ct_sync_leave;
|
||||
nw_hwif_ct.ioc_sync_ack = bfa_ioc_ct_sync_ack;
|
||||
nw_hwif_ct.ioc_sync_complete = bfa_ioc_ct_sync_complete;
|
||||
|
||||
ioc->ioc_hwif = &nw_hwif_ct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if firmware of current driver matches the running firmware.
|
||||
*/
|
||||
static bool
|
||||
bfa_ioc_ct_firmware_lock(struct bfa_ioc *ioc)
|
||||
{
|
||||
enum bfi_ioc_state ioc_fwstate;
|
||||
u32 usecnt;
|
||||
struct bfi_ioc_image_hdr fwhdr;
|
||||
|
||||
/**
|
||||
* Firmware match check is relevant only for CNA.
|
||||
*/
|
||||
if (!ioc->cna)
|
||||
return true;
|
||||
|
||||
/**
|
||||
* If bios boot (flash based) -- do not increment usage count
|
||||
*/
|
||||
if (bfa_cb_image_get_size(BFA_IOC_FWIMG_TYPE(ioc)) <
|
||||
BFA_IOC_FWIMG_MINSZ)
|
||||
return true;
|
||||
|
||||
bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
usecnt = readl(ioc->ioc_regs.ioc_usage_reg);
|
||||
|
||||
/**
|
||||
* If usage count is 0, always return TRUE.
|
||||
*/
|
||||
if (usecnt == 0) {
|
||||
writel(1, ioc->ioc_regs.ioc_usage_reg);
|
||||
bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
writel(0, ioc->ioc_regs.ioc_fail_sync);
|
||||
return true;
|
||||
}
|
||||
|
||||
ioc_fwstate = readl(ioc->ioc_regs.ioc_fwstate);
|
||||
|
||||
/**
|
||||
* Use count cannot be non-zero and chip in uninitialized state.
|
||||
*/
|
||||
BUG_ON(!(ioc_fwstate != BFI_IOC_UNINIT));
|
||||
|
||||
/**
|
||||
* Check if another driver with a different firmware is active
|
||||
*/
|
||||
bfa_nw_ioc_fwver_get(ioc, &fwhdr);
|
||||
if (!bfa_nw_ioc_fwver_cmp(ioc, &fwhdr)) {
|
||||
bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Same firmware version. Increment the reference count.
|
||||
*/
|
||||
usecnt++;
|
||||
writel(usecnt, ioc->ioc_regs.ioc_usage_reg);
|
||||
bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
bfa_ioc_ct_firmware_unlock(struct bfa_ioc *ioc)
|
||||
{
|
||||
u32 usecnt;
|
||||
|
||||
/**
|
||||
* Firmware lock is relevant only for CNA.
|
||||
*/
|
||||
if (!ioc->cna)
|
||||
return;
|
||||
|
||||
/**
|
||||
* If bios boot (flash based) -- do not decrement usage count
|
||||
*/
|
||||
if (bfa_cb_image_get_size(BFA_IOC_FWIMG_TYPE(ioc)) <
|
||||
BFA_IOC_FWIMG_MINSZ)
|
||||
return;
|
||||
|
||||
/**
|
||||
* decrement usage count
|
||||
*/
|
||||
bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
usecnt = readl(ioc->ioc_regs.ioc_usage_reg);
|
||||
BUG_ON(!(usecnt > 0));
|
||||
|
||||
usecnt--;
|
||||
writel(usecnt, ioc->ioc_regs.ioc_usage_reg);
|
||||
|
||||
bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify other functions on HB failure.
|
||||
*/
|
||||
static void
|
||||
bfa_ioc_ct_notify_fail(struct bfa_ioc *ioc)
|
||||
{
|
||||
if (ioc->cna) {
|
||||
writel(__FW_INIT_HALT_P, ioc->ioc_regs.ll_halt);
|
||||
writel(__FW_INIT_HALT_P, ioc->ioc_regs.alt_ll_halt);
|
||||
/* Wait for halt to take effect */
|
||||
readl(ioc->ioc_regs.ll_halt);
|
||||
readl(ioc->ioc_regs.alt_ll_halt);
|
||||
} else {
|
||||
writel(__PSS_ERR_STATUS_SET, ioc->ioc_regs.err_set);
|
||||
readl(ioc->ioc_regs.err_set);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Host to LPU mailbox message addresses
|
||||
*/
|
||||
static struct { u32 hfn_mbox, lpu_mbox, hfn_pgn; } iocreg_fnreg[] = {
|
||||
{ HOSTFN0_LPU_MBOX0_0, LPU_HOSTFN0_MBOX0_0, HOST_PAGE_NUM_FN0 },
|
||||
{ HOSTFN1_LPU_MBOX0_8, LPU_HOSTFN1_MBOX0_8, HOST_PAGE_NUM_FN1 },
|
||||
{ HOSTFN2_LPU_MBOX0_0, LPU_HOSTFN2_MBOX0_0, HOST_PAGE_NUM_FN2 },
|
||||
{ HOSTFN3_LPU_MBOX0_8, LPU_HOSTFN3_MBOX0_8, HOST_PAGE_NUM_FN3 }
|
||||
};
|
||||
|
||||
/**
|
||||
* Host <-> LPU mailbox command/status registers - port 0
|
||||
*/
|
||||
static struct { u32 hfn, lpu; } iocreg_mbcmd_p0[] = {
|
||||
{ HOSTFN0_LPU0_MBOX0_CMD_STAT, LPU0_HOSTFN0_MBOX0_CMD_STAT },
|
||||
{ HOSTFN1_LPU0_MBOX0_CMD_STAT, LPU0_HOSTFN1_MBOX0_CMD_STAT },
|
||||
{ HOSTFN2_LPU0_MBOX0_CMD_STAT, LPU0_HOSTFN2_MBOX0_CMD_STAT },
|
||||
{ HOSTFN3_LPU0_MBOX0_CMD_STAT, LPU0_HOSTFN3_MBOX0_CMD_STAT }
|
||||
};
|
||||
|
||||
/**
|
||||
* Host <-> LPU mailbox command/status registers - port 1
|
||||
*/
|
||||
static struct { u32 hfn, lpu; } iocreg_mbcmd_p1[] = {
|
||||
{ HOSTFN0_LPU1_MBOX0_CMD_STAT, LPU1_HOSTFN0_MBOX0_CMD_STAT },
|
||||
{ HOSTFN1_LPU1_MBOX0_CMD_STAT, LPU1_HOSTFN1_MBOX0_CMD_STAT },
|
||||
{ HOSTFN2_LPU1_MBOX0_CMD_STAT, LPU1_HOSTFN2_MBOX0_CMD_STAT },
|
||||
{ HOSTFN3_LPU1_MBOX0_CMD_STAT, LPU1_HOSTFN3_MBOX0_CMD_STAT }
|
||||
};
|
||||
|
||||
static void
|
||||
bfa_ioc_ct_reg_init(struct bfa_ioc *ioc)
|
||||
{
|
||||
void __iomem *rb;
|
||||
int pcifn = bfa_ioc_pcifn(ioc);
|
||||
|
||||
rb = bfa_ioc_bar0(ioc);
|
||||
|
||||
ioc->ioc_regs.hfn_mbox = rb + iocreg_fnreg[pcifn].hfn_mbox;
|
||||
ioc->ioc_regs.lpu_mbox = rb + iocreg_fnreg[pcifn].lpu_mbox;
|
||||
ioc->ioc_regs.host_page_num_fn = rb + iocreg_fnreg[pcifn].hfn_pgn;
|
||||
|
||||
if (ioc->port_id == 0) {
|
||||
ioc->ioc_regs.heartbeat = rb + BFA_IOC0_HBEAT_REG;
|
||||
ioc->ioc_regs.ioc_fwstate = rb + BFA_IOC0_STATE_REG;
|
||||
ioc->ioc_regs.alt_ioc_fwstate = rb + BFA_IOC1_STATE_REG;
|
||||
ioc->ioc_regs.hfn_mbox_cmd = rb + iocreg_mbcmd_p0[pcifn].hfn;
|
||||
ioc->ioc_regs.lpu_mbox_cmd = rb + iocreg_mbcmd_p0[pcifn].lpu;
|
||||
ioc->ioc_regs.ll_halt = rb + FW_INIT_HALT_P0;
|
||||
ioc->ioc_regs.alt_ll_halt = rb + FW_INIT_HALT_P1;
|
||||
} else {
|
||||
ioc->ioc_regs.heartbeat = (rb + BFA_IOC1_HBEAT_REG);
|
||||
ioc->ioc_regs.ioc_fwstate = (rb + BFA_IOC1_STATE_REG);
|
||||
ioc->ioc_regs.alt_ioc_fwstate = rb + BFA_IOC0_STATE_REG;
|
||||
ioc->ioc_regs.hfn_mbox_cmd = rb + iocreg_mbcmd_p1[pcifn].hfn;
|
||||
ioc->ioc_regs.lpu_mbox_cmd = rb + iocreg_mbcmd_p1[pcifn].lpu;
|
||||
ioc->ioc_regs.ll_halt = rb + FW_INIT_HALT_P1;
|
||||
ioc->ioc_regs.alt_ll_halt = rb + FW_INIT_HALT_P0;
|
||||
}
|
||||
|
||||
/*
|
||||
* PSS control registers
|
||||
*/
|
||||
ioc->ioc_regs.pss_ctl_reg = (rb + PSS_CTL_REG);
|
||||
ioc->ioc_regs.pss_err_status_reg = (rb + PSS_ERR_STATUS_REG);
|
||||
ioc->ioc_regs.app_pll_fast_ctl_reg = (rb + APP_PLL_425_CTL_REG);
|
||||
ioc->ioc_regs.app_pll_slow_ctl_reg = (rb + APP_PLL_312_CTL_REG);
|
||||
|
||||
/*
|
||||
* IOC semaphore registers and serialization
|
||||
*/
|
||||
ioc->ioc_regs.ioc_sem_reg = (rb + HOST_SEM0_REG);
|
||||
ioc->ioc_regs.ioc_usage_sem_reg = (rb + HOST_SEM1_REG);
|
||||
ioc->ioc_regs.ioc_init_sem_reg = (rb + HOST_SEM2_REG);
|
||||
ioc->ioc_regs.ioc_usage_reg = (rb + BFA_FW_USE_COUNT);
|
||||
ioc->ioc_regs.ioc_fail_sync = (rb + BFA_IOC_FAIL_SYNC);
|
||||
|
||||
/**
|
||||
* sram memory access
|
||||
*/
|
||||
ioc->ioc_regs.smem_page_start = (rb + PSS_SMEM_PAGE_START);
|
||||
ioc->ioc_regs.smem_pg0 = BFI_IOC_SMEM_PG0_CT;
|
||||
|
||||
/*
|
||||
* err set reg : for notification of hb failure in fcmode
|
||||
*/
|
||||
ioc->ioc_regs.err_set = (rb + ERR_SET_REG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize IOC to port mapping.
|
||||
*/
|
||||
|
||||
#define FNC_PERS_FN_SHIFT(__fn) ((__fn) * 8)
|
||||
static void
|
||||
bfa_ioc_ct_map_port(struct bfa_ioc *ioc)
|
||||
{
|
||||
void __iomem *rb = ioc->pcidev.pci_bar_kva;
|
||||
u32 r32;
|
||||
|
||||
/**
|
||||
* For catapult, base port id on personality register and IOC type
|
||||
*/
|
||||
r32 = readl(rb + FNC_PERS_REG);
|
||||
r32 >>= FNC_PERS_FN_SHIFT(bfa_ioc_pcifn(ioc));
|
||||
ioc->port_id = (r32 & __F0_PORT_MAP_MK) >> __F0_PORT_MAP_SH;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set interrupt mode for a function: INTX or MSIX
|
||||
*/
|
||||
static void
|
||||
bfa_ioc_ct_isr_mode_set(struct bfa_ioc *ioc, bool msix)
|
||||
{
|
||||
void __iomem *rb = ioc->pcidev.pci_bar_kva;
|
||||
u32 r32, mode;
|
||||
|
||||
r32 = readl(rb + FNC_PERS_REG);
|
||||
|
||||
mode = (r32 >> FNC_PERS_FN_SHIFT(bfa_ioc_pcifn(ioc))) &
|
||||
__F0_INTX_STATUS;
|
||||
|
||||
/**
|
||||
* If already in desired mode, do not change anything
|
||||
*/
|
||||
if (!msix && mode)
|
||||
return;
|
||||
|
||||
if (msix)
|
||||
mode = __F0_INTX_STATUS_MSIX;
|
||||
else
|
||||
mode = __F0_INTX_STATUS_INTA;
|
||||
|
||||
r32 &= ~(__F0_INTX_STATUS << FNC_PERS_FN_SHIFT(bfa_ioc_pcifn(ioc)));
|
||||
r32 |= (mode << FNC_PERS_FN_SHIFT(bfa_ioc_pcifn(ioc)));
|
||||
|
||||
writel(r32, rb + FNC_PERS_REG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup hw semaphore and usecnt registers
|
||||
*/
|
||||
static void
|
||||
bfa_ioc_ct_ownership_reset(struct bfa_ioc *ioc)
|
||||
{
|
||||
if (ioc->cna) {
|
||||
bfa_nw_ioc_sem_get(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
writel(0, ioc->ioc_regs.ioc_usage_reg);
|
||||
bfa_nw_ioc_sem_release(ioc->ioc_regs.ioc_usage_sem_reg);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the hw sem reg to make sure that it is locked
|
||||
* before we clear it. If it is not locked, writing 1
|
||||
* will lock it instead of clearing it.
|
||||
*/
|
||||
readl(ioc->ioc_regs.ioc_sem_reg);
|
||||
bfa_nw_ioc_hw_sem_release(ioc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronized IOC failure processing routines
|
||||
*/
|
||||
static bool
|
||||
bfa_ioc_ct_sync_start(struct bfa_ioc *ioc)
|
||||
{
|
||||
u32 r32 = readl(ioc->ioc_regs.ioc_fail_sync);
|
||||
u32 sync_reqd = bfa_ioc_ct_get_sync_reqd(r32);
|
||||
|
||||
/*
|
||||
* Driver load time. If the sync required bit for this PCI fn
|
||||
* is set, it is due to an unclean exit by the driver for this
|
||||
* PCI fn in the previous incarnation. Whoever comes here first
|
||||
* should clean it up, no matter which PCI fn.
|
||||
*/
|
||||
|
||||
if (sync_reqd & bfa_ioc_ct_sync_pos(ioc)) {
|
||||
writel(0, ioc->ioc_regs.ioc_fail_sync);
|
||||
writel(1, ioc->ioc_regs.ioc_usage_reg);
|
||||
writel(BFI_IOC_UNINIT, ioc->ioc_regs.ioc_fwstate);
|
||||
writel(BFI_IOC_UNINIT, ioc->ioc_regs.alt_ioc_fwstate);
|
||||
return true;
|
||||
}
|
||||
|
||||
return bfa_ioc_ct_sync_complete(ioc);
|
||||
}
|
||||
/**
|
||||
* Synchronized IOC failure processing routines
|
||||
*/
|
||||
static void
|
||||
bfa_ioc_ct_sync_join(struct bfa_ioc *ioc)
|
||||
{
|
||||
u32 r32 = readl(ioc->ioc_regs.ioc_fail_sync);
|
||||
u32 sync_pos = bfa_ioc_ct_sync_reqd_pos(ioc);
|
||||
|
||||
writel((r32 | sync_pos), ioc->ioc_regs.ioc_fail_sync);
|
||||
}
|
||||
|
||||
static void
|
||||
bfa_ioc_ct_sync_leave(struct bfa_ioc *ioc)
|
||||
{
|
||||
u32 r32 = readl(ioc->ioc_regs.ioc_fail_sync);
|
||||
u32 sync_msk = bfa_ioc_ct_sync_reqd_pos(ioc) |
|
||||
bfa_ioc_ct_sync_pos(ioc);
|
||||
|
||||
writel((r32 & ~sync_msk), ioc->ioc_regs.ioc_fail_sync);
|
||||
}
|
||||
|
||||
static void
|
||||
bfa_ioc_ct_sync_ack(struct bfa_ioc *ioc)
|
||||
{
|
||||
u32 r32 = readl(ioc->ioc_regs.ioc_fail_sync);
|
||||
|
||||
writel((r32 | bfa_ioc_ct_sync_pos(ioc)), ioc->ioc_regs.ioc_fail_sync);
|
||||
}
|
||||
|
||||
static bool
|
||||
bfa_ioc_ct_sync_complete(struct bfa_ioc *ioc)
|
||||
{
|
||||
u32 r32 = readl(ioc->ioc_regs.ioc_fail_sync);
|
||||
u32 sync_reqd = bfa_ioc_ct_get_sync_reqd(r32);
|
||||
u32 sync_ackd = bfa_ioc_ct_get_sync_ackd(r32);
|
||||
u32 tmp_ackd;
|
||||
|
||||
if (sync_ackd == 0)
|
||||
return true;
|
||||
|
||||
/**
|
||||
* The check below is to see whether any other PCI fn
|
||||
* has reinitialized the ASIC (reset sync_ackd bits)
|
||||
* and failed again while this IOC was waiting for hw
|
||||
* semaphore (in bfa_iocpf_sm_semwait()).
|
||||
*/
|
||||
tmp_ackd = sync_ackd;
|
||||
if ((sync_reqd & bfa_ioc_ct_sync_pos(ioc)) &&
|
||||
!(sync_ackd & bfa_ioc_ct_sync_pos(ioc)))
|
||||
sync_ackd |= bfa_ioc_ct_sync_pos(ioc);
|
||||
|
||||
if (sync_reqd == sync_ackd) {
|
||||
writel(bfa_ioc_ct_clear_sync_ackd(r32),
|
||||
ioc->ioc_regs.ioc_fail_sync);
|
||||
writel(BFI_IOC_FAIL, ioc->ioc_regs.ioc_fwstate);
|
||||
writel(BFI_IOC_FAIL, ioc->ioc_regs.alt_ioc_fwstate);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* If another PCI fn reinitialized and failed again while
|
||||
* this IOC was waiting for hw sem, the sync_ackd bit for
|
||||
* this IOC need to be set again to allow reinitialization.
|
||||
*/
|
||||
if (tmp_ackd != sync_ackd)
|
||||
writel((r32 | sync_ackd), ioc->ioc_regs.ioc_fail_sync);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static enum bfa_status
|
||||
bfa_ioc_ct_pll_init(void __iomem *rb, bool fcmode)
|
||||
{
|
||||
u32 pll_sclk, pll_fclk, r32;
|
||||
|
||||
pll_sclk = __APP_PLL_312_LRESETN | __APP_PLL_312_ENARST |
|
||||
__APP_PLL_312_RSEL200500 | __APP_PLL_312_P0_1(3U) |
|
||||
__APP_PLL_312_JITLMT0_1(3U) |
|
||||
__APP_PLL_312_CNTLMT0_1(1U);
|
||||
pll_fclk = __APP_PLL_425_LRESETN | __APP_PLL_425_ENARST |
|
||||
__APP_PLL_425_RSEL200500 | __APP_PLL_425_P0_1(3U) |
|
||||
__APP_PLL_425_JITLMT0_1(3U) |
|
||||
__APP_PLL_425_CNTLMT0_1(1U);
|
||||
if (fcmode) {
|
||||
writel(0, (rb + OP_MODE));
|
||||
writel(__APP_EMS_CMLCKSEL |
|
||||
__APP_EMS_REFCKBUFEN2 |
|
||||
__APP_EMS_CHANNEL_SEL,
|
||||
(rb + ETH_MAC_SER_REG));
|
||||
} else {
|
||||
writel(__GLOBAL_FCOE_MODE, (rb + OP_MODE));
|
||||
writel(__APP_EMS_REFCKBUFEN1,
|
||||
(rb + ETH_MAC_SER_REG));
|
||||
}
|
||||
writel(BFI_IOC_UNINIT, (rb + BFA_IOC0_STATE_REG));
|
||||
writel(BFI_IOC_UNINIT, (rb + BFA_IOC1_STATE_REG));
|
||||
writel(0xffffffffU, (rb + HOSTFN0_INT_MSK));
|
||||
writel(0xffffffffU, (rb + HOSTFN1_INT_MSK));
|
||||
writel(0xffffffffU, (rb + HOSTFN0_INT_STATUS));
|
||||
writel(0xffffffffU, (rb + HOSTFN1_INT_STATUS));
|
||||
writel(0xffffffffU, (rb + HOSTFN0_INT_MSK));
|
||||
writel(0xffffffffU, (rb + HOSTFN1_INT_MSK));
|
||||
writel(pll_sclk |
|
||||
__APP_PLL_312_LOGIC_SOFT_RESET,
|
||||
rb + APP_PLL_312_CTL_REG);
|
||||
writel(pll_fclk |
|
||||
__APP_PLL_425_LOGIC_SOFT_RESET,
|
||||
rb + APP_PLL_425_CTL_REG);
|
||||
writel(pll_sclk |
|
||||
__APP_PLL_312_LOGIC_SOFT_RESET | __APP_PLL_312_ENABLE,
|
||||
rb + APP_PLL_312_CTL_REG);
|
||||
writel(pll_fclk |
|
||||
__APP_PLL_425_LOGIC_SOFT_RESET | __APP_PLL_425_ENABLE,
|
||||
rb + APP_PLL_425_CTL_REG);
|
||||
readl(rb + HOSTFN0_INT_MSK);
|
||||
udelay(2000);
|
||||
writel(0xffffffffU, (rb + HOSTFN0_INT_STATUS));
|
||||
writel(0xffffffffU, (rb + HOSTFN1_INT_STATUS));
|
||||
writel(pll_sclk |
|
||||
__APP_PLL_312_ENABLE,
|
||||
rb + APP_PLL_312_CTL_REG);
|
||||
writel(pll_fclk |
|
||||
__APP_PLL_425_ENABLE,
|
||||
rb + APP_PLL_425_CTL_REG);
|
||||
if (!fcmode) {
|
||||
writel(__PMM_1T_RESET_P, (rb + PMM_1T_RESET_REG_P0));
|
||||
writel(__PMM_1T_RESET_P, (rb + PMM_1T_RESET_REG_P1));
|
||||
}
|
||||
r32 = readl((rb + PSS_CTL_REG));
|
||||
r32 &= ~__PSS_LMEM_RESET;
|
||||
writel(r32, (rb + PSS_CTL_REG));
|
||||
udelay(1000);
|
||||
if (!fcmode) {
|
||||
writel(0, (rb + PMM_1T_RESET_REG_P0));
|
||||
writel(0, (rb + PMM_1T_RESET_REG_P1));
|
||||
}
|
||||
|
||||
writel(__EDRAM_BISTR_START, (rb + MBIST_CTL_REG));
|
||||
udelay(1000);
|
||||
r32 = readl((rb + MBIST_STAT_REG));
|
||||
writel(0, (rb + MBIST_CTL_REG));
|
||||
return BFA_STATUS_OK;
|
||||
}
|
|
@ -1,646 +0,0 @@
|
|||
/*
|
||||
* Linux network driver for Brocade Converged Network Adapter.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (GPL) Version 2 as
|
||||
* published by the Free Software Foundation
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
|
||||
* All rights reserved
|
||||
* www.brocade.com
|
||||
*/
|
||||
|
||||
/*
|
||||
* bfi_ctreg.h catapult host block register definitions
|
||||
*
|
||||
* !!! Do not edit. Auto generated. !!!
|
||||
*/
|
||||
|
||||
#ifndef __BFI_CTREG_H__
|
||||
#define __BFI_CTREG_H__
|
||||
|
||||
#define HOSTFN0_LPU_MBOX0_0 0x00019200
|
||||
#define HOSTFN1_LPU_MBOX0_8 0x00019260
|
||||
#define LPU_HOSTFN0_MBOX0_0 0x00019280
|
||||
#define LPU_HOSTFN1_MBOX0_8 0x000192e0
|
||||
#define HOSTFN2_LPU_MBOX0_0 0x00019400
|
||||
#define HOSTFN3_LPU_MBOX0_8 0x00019460
|
||||
#define LPU_HOSTFN2_MBOX0_0 0x00019480
|
||||
#define LPU_HOSTFN3_MBOX0_8 0x000194e0
|
||||
#define HOSTFN0_INT_STATUS 0x00014000
|
||||
#define __HOSTFN0_HALT_OCCURRED 0x01000000
|
||||
#define __HOSTFN0_INT_STATUS_LVL_MK 0x00f00000
|
||||
#define __HOSTFN0_INT_STATUS_LVL_SH 20
|
||||
#define __HOSTFN0_INT_STATUS_LVL(_v) ((_v) << __HOSTFN0_INT_STATUS_LVL_SH)
|
||||
#define __HOSTFN0_INT_STATUS_P_MK 0x000f0000
|
||||
#define __HOSTFN0_INT_STATUS_P_SH 16
|
||||
#define __HOSTFN0_INT_STATUS_P(_v) ((_v) << __HOSTFN0_INT_STATUS_P_SH)
|
||||
#define __HOSTFN0_INT_STATUS_F 0x0000ffff
|
||||
#define HOSTFN0_INT_MSK 0x00014004
|
||||
#define HOST_PAGE_NUM_FN0 0x00014008
|
||||
#define __HOST_PAGE_NUM_FN 0x000001ff
|
||||
#define HOST_MSIX_ERR_INDEX_FN0 0x0001400c
|
||||
#define __MSIX_ERR_INDEX_FN 0x000001ff
|
||||
#define HOSTFN1_INT_STATUS 0x00014100
|
||||
#define __HOSTFN1_HALT_OCCURRED 0x01000000
|
||||
#define __HOSTFN1_INT_STATUS_LVL_MK 0x00f00000
|
||||
#define __HOSTFN1_INT_STATUS_LVL_SH 20
|
||||
#define __HOSTFN1_INT_STATUS_LVL(_v) ((_v) << __HOSTFN1_INT_STATUS_LVL_SH)
|
||||
#define __HOSTFN1_INT_STATUS_P_MK 0x000f0000
|
||||
#define __HOSTFN1_INT_STATUS_P_SH 16
|
||||
#define __HOSTFN1_INT_STATUS_P(_v) ((_v) << __HOSTFN1_INT_STATUS_P_SH)
|
||||
#define __HOSTFN1_INT_STATUS_F 0x0000ffff
|
||||
#define HOSTFN1_INT_MSK 0x00014104
|
||||
#define HOST_PAGE_NUM_FN1 0x00014108
|
||||
#define HOST_MSIX_ERR_INDEX_FN1 0x0001410c
|
||||
#define APP_PLL_425_CTL_REG 0x00014204
|
||||
#define __P_425_PLL_LOCK 0x80000000
|
||||
#define __APP_PLL_425_SRAM_USE_100MHZ 0x00100000
|
||||
#define __APP_PLL_425_RESET_TIMER_MK 0x000e0000
|
||||
#define __APP_PLL_425_RESET_TIMER_SH 17
|
||||
#define __APP_PLL_425_RESET_TIMER(_v) ((_v) << __APP_PLL_425_RESET_TIMER_SH)
|
||||
#define __APP_PLL_425_LOGIC_SOFT_RESET 0x00010000
|
||||
#define __APP_PLL_425_CNTLMT0_1_MK 0x0000c000
|
||||
#define __APP_PLL_425_CNTLMT0_1_SH 14
|
||||
#define __APP_PLL_425_CNTLMT0_1(_v) ((_v) << __APP_PLL_425_CNTLMT0_1_SH)
|
||||
#define __APP_PLL_425_JITLMT0_1_MK 0x00003000
|
||||
#define __APP_PLL_425_JITLMT0_1_SH 12
|
||||
#define __APP_PLL_425_JITLMT0_1(_v) ((_v) << __APP_PLL_425_JITLMT0_1_SH)
|
||||
#define __APP_PLL_425_HREF 0x00000800
|
||||
#define __APP_PLL_425_HDIV 0x00000400
|
||||
#define __APP_PLL_425_P0_1_MK 0x00000300
|
||||
#define __APP_PLL_425_P0_1_SH 8
|
||||
#define __APP_PLL_425_P0_1(_v) ((_v) << __APP_PLL_425_P0_1_SH)
|
||||
#define __APP_PLL_425_Z0_2_MK 0x000000e0
|
||||
#define __APP_PLL_425_Z0_2_SH 5
|
||||
#define __APP_PLL_425_Z0_2(_v) ((_v) << __APP_PLL_425_Z0_2_SH)
|
||||
#define __APP_PLL_425_RSEL200500 0x00000010
|
||||
#define __APP_PLL_425_ENARST 0x00000008
|
||||
#define __APP_PLL_425_BYPASS 0x00000004
|
||||
#define __APP_PLL_425_LRESETN 0x00000002
|
||||
#define __APP_PLL_425_ENABLE 0x00000001
|
||||
#define APP_PLL_312_CTL_REG 0x00014208
|
||||
#define __P_312_PLL_LOCK 0x80000000
|
||||
#define __ENABLE_MAC_AHB_1 0x00800000
|
||||
#define __ENABLE_MAC_AHB_0 0x00400000
|
||||
#define __ENABLE_MAC_1 0x00200000
|
||||
#define __ENABLE_MAC_0 0x00100000
|
||||
#define __APP_PLL_312_RESET_TIMER_MK 0x000e0000
|
||||
#define __APP_PLL_312_RESET_TIMER_SH 17
|
||||
#define __APP_PLL_312_RESET_TIMER(_v) ((_v) << __APP_PLL_312_RESET_TIMER_SH)
|
||||
#define __APP_PLL_312_LOGIC_SOFT_RESET 0x00010000
|
||||
#define __APP_PLL_312_CNTLMT0_1_MK 0x0000c000
|
||||
#define __APP_PLL_312_CNTLMT0_1_SH 14
|
||||
#define __APP_PLL_312_CNTLMT0_1(_v) ((_v) << __APP_PLL_312_CNTLMT0_1_SH)
|
||||
#define __APP_PLL_312_JITLMT0_1_MK 0x00003000
|
||||
#define __APP_PLL_312_JITLMT0_1_SH 12
|
||||
#define __APP_PLL_312_JITLMT0_1(_v) ((_v) << __APP_PLL_312_JITLMT0_1_SH)
|
||||
#define __APP_PLL_312_HREF 0x00000800
|
||||
#define __APP_PLL_312_HDIV 0x00000400
|
||||
#define __APP_PLL_312_P0_1_MK 0x00000300
|
||||
#define __APP_PLL_312_P0_1_SH 8
|
||||
#define __APP_PLL_312_P0_1(_v) ((_v) << __APP_PLL_312_P0_1_SH)
|
||||
#define __APP_PLL_312_Z0_2_MK 0x000000e0
|
||||
#define __APP_PLL_312_Z0_2_SH 5
|
||||
#define __APP_PLL_312_Z0_2(_v) ((_v) << __APP_PLL_312_Z0_2_SH)
|
||||
#define __APP_PLL_312_RSEL200500 0x00000010
|
||||
#define __APP_PLL_312_ENARST 0x00000008
|
||||
#define __APP_PLL_312_BYPASS 0x00000004
|
||||
#define __APP_PLL_312_LRESETN 0x00000002
|
||||
#define __APP_PLL_312_ENABLE 0x00000001
|
||||
#define MBIST_CTL_REG 0x00014220
|
||||
#define __EDRAM_BISTR_START 0x00000004
|
||||
#define __MBIST_RESET 0x00000002
|
||||
#define __MBIST_START 0x00000001
|
||||
#define MBIST_STAT_REG 0x00014224
|
||||
#define __EDRAM_BISTR_STATUS 0x00000008
|
||||
#define __EDRAM_BISTR_DONE 0x00000004
|
||||
#define __MEM_BIT_STATUS 0x00000002
|
||||
#define __MBIST_DONE 0x00000001
|
||||
#define HOST_SEM0_REG 0x00014230
|
||||
#define __HOST_SEMAPHORE 0x00000001
|
||||
#define HOST_SEM1_REG 0x00014234
|
||||
#define HOST_SEM2_REG 0x00014238
|
||||
#define HOST_SEM3_REG 0x0001423c
|
||||
#define HOST_SEM0_INFO_REG 0x00014240
|
||||
#define HOST_SEM1_INFO_REG 0x00014244
|
||||
#define HOST_SEM2_INFO_REG 0x00014248
|
||||
#define HOST_SEM3_INFO_REG 0x0001424c
|
||||
#define ETH_MAC_SER_REG 0x00014288
|
||||
#define __APP_EMS_CKBUFAMPIN 0x00000020
|
||||
#define __APP_EMS_REFCLKSEL 0x00000010
|
||||
#define __APP_EMS_CMLCKSEL 0x00000008
|
||||
#define __APP_EMS_REFCKBUFEN2 0x00000004
|
||||
#define __APP_EMS_REFCKBUFEN1 0x00000002
|
||||
#define __APP_EMS_CHANNEL_SEL 0x00000001
|
||||
#define HOSTFN2_INT_STATUS 0x00014300
|
||||
#define __HOSTFN2_HALT_OCCURRED 0x01000000
|
||||
#define __HOSTFN2_INT_STATUS_LVL_MK 0x00f00000
|
||||
#define __HOSTFN2_INT_STATUS_LVL_SH 20
|
||||
#define __HOSTFN2_INT_STATUS_LVL(_v) ((_v) << __HOSTFN2_INT_STATUS_LVL_SH)
|
||||
#define __HOSTFN2_INT_STATUS_P_MK 0x000f0000
|
||||
#define __HOSTFN2_INT_STATUS_P_SH 16
|
||||
#define __HOSTFN2_INT_STATUS_P(_v) ((_v) << __HOSTFN2_INT_STATUS_P_SH)
|
||||
#define __HOSTFN2_INT_STATUS_F 0x0000ffff
|
||||
#define HOSTFN2_INT_MSK 0x00014304
|
||||
#define HOST_PAGE_NUM_FN2 0x00014308
|
||||
#define HOST_MSIX_ERR_INDEX_FN2 0x0001430c
|
||||
#define HOSTFN3_INT_STATUS 0x00014400
|
||||
#define __HALT_OCCURRED 0x01000000
|
||||
#define __HOSTFN3_INT_STATUS_LVL_MK 0x00f00000
|
||||
#define __HOSTFN3_INT_STATUS_LVL_SH 20
|
||||
#define __HOSTFN3_INT_STATUS_LVL(_v) ((_v) << __HOSTFN3_INT_STATUS_LVL_SH)
|
||||
#define __HOSTFN3_INT_STATUS_P_MK 0x000f0000
|
||||
#define __HOSTFN3_INT_STATUS_P_SH 16
|
||||
#define __HOSTFN3_INT_STATUS_P(_v) ((_v) << __HOSTFN3_INT_STATUS_P_SH)
|
||||
#define __HOSTFN3_INT_STATUS_F 0x0000ffff
|
||||
#define HOSTFN3_INT_MSK 0x00014404
|
||||
#define HOST_PAGE_NUM_FN3 0x00014408
|
||||
#define HOST_MSIX_ERR_INDEX_FN3 0x0001440c
|
||||
#define FNC_ID_REG 0x00014600
|
||||
#define __FUNCTION_NUMBER 0x00000007
|
||||
#define FNC_PERS_REG 0x00014604
|
||||
#define __F3_FUNCTION_ACTIVE 0x80000000
|
||||
#define __F3_FUNCTION_MODE 0x40000000
|
||||
#define __F3_PORT_MAP_MK 0x30000000
|
||||
#define __F3_PORT_MAP_SH 28
|
||||
#define __F3_PORT_MAP(_v) ((_v) << __F3_PORT_MAP_SH)
|
||||
#define __F3_VM_MODE 0x08000000
|
||||
#define __F3_INTX_STATUS_MK 0x07000000
|
||||
#define __F3_INTX_STATUS_SH 24
|
||||
#define __F3_INTX_STATUS(_v) ((_v) << __F3_INTX_STATUS_SH)
|
||||
#define __F2_FUNCTION_ACTIVE 0x00800000
|
||||
#define __F2_FUNCTION_MODE 0x00400000
|
||||
#define __F2_PORT_MAP_MK 0x00300000
|
||||
#define __F2_PORT_MAP_SH 20
|
||||
#define __F2_PORT_MAP(_v) ((_v) << __F2_PORT_MAP_SH)
|
||||
#define __F2_VM_MODE 0x00080000
|
||||
#define __F2_INTX_STATUS_MK 0x00070000
|
||||
#define __F2_INTX_STATUS_SH 16
|
||||
#define __F2_INTX_STATUS(_v) ((_v) << __F2_INTX_STATUS_SH)
|
||||
#define __F1_FUNCTION_ACTIVE 0x00008000
|
||||
#define __F1_FUNCTION_MODE 0x00004000
|
||||
#define __F1_PORT_MAP_MK 0x00003000
|
||||
#define __F1_PORT_MAP_SH 12
|
||||
#define __F1_PORT_MAP(_v) ((_v) << __F1_PORT_MAP_SH)
|
||||
#define __F1_VM_MODE 0x00000800
|
||||
#define __F1_INTX_STATUS_MK 0x00000700
|
||||
#define __F1_INTX_STATUS_SH 8
|
||||
#define __F1_INTX_STATUS(_v) ((_v) << __F1_INTX_STATUS_SH)
|
||||
#define __F0_FUNCTION_ACTIVE 0x00000080
|
||||
#define __F0_FUNCTION_MODE 0x00000040
|
||||
#define __F0_PORT_MAP_MK 0x00000030
|
||||
#define __F0_PORT_MAP_SH 4
|
||||
#define __F0_PORT_MAP(_v) ((_v) << __F0_PORT_MAP_SH)
|
||||
#define __F0_VM_MODE 0x00000008
|
||||
#define __F0_INTX_STATUS 0x00000007
|
||||
enum {
|
||||
__F0_INTX_STATUS_MSIX = 0x0,
|
||||
__F0_INTX_STATUS_INTA = 0x1,
|
||||
__F0_INTX_STATUS_INTB = 0x2,
|
||||
__F0_INTX_STATUS_INTC = 0x3,
|
||||
__F0_INTX_STATUS_INTD = 0x4,
|
||||
};
|
||||
#define OP_MODE 0x0001460c
|
||||
#define __APP_ETH_CLK_LOWSPEED 0x00000004
|
||||
#define __GLOBAL_CORECLK_HALFSPEED 0x00000002
|
||||
#define __GLOBAL_FCOE_MODE 0x00000001
|
||||
#define HOST_SEM4_REG 0x00014610
|
||||
#define HOST_SEM5_REG 0x00014614
|
||||
#define HOST_SEM6_REG 0x00014618
|
||||
#define HOST_SEM7_REG 0x0001461c
|
||||
#define HOST_SEM4_INFO_REG 0x00014620
|
||||
#define HOST_SEM5_INFO_REG 0x00014624
|
||||
#define HOST_SEM6_INFO_REG 0x00014628
|
||||
#define HOST_SEM7_INFO_REG 0x0001462c
|
||||
#define HOSTFN0_LPU0_MBOX0_CMD_STAT 0x00019000
|
||||
#define __HOSTFN0_LPU0_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN0_LPU0_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN0_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN0_LPU0_MBOX0_INFO_SH)
|
||||
#define __HOSTFN0_LPU0_MBOX0_CMD_STATUS 0x00000001
|
||||
#define HOSTFN0_LPU1_MBOX0_CMD_STAT 0x00019004
|
||||
#define __HOSTFN0_LPU1_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN0_LPU1_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN0_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN0_LPU1_MBOX0_INFO_SH)
|
||||
#define __HOSTFN0_LPU1_MBOX0_CMD_STATUS 0x00000001
|
||||
#define LPU0_HOSTFN0_MBOX0_CMD_STAT 0x00019008
|
||||
#define __LPU0_HOSTFN0_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU0_HOSTFN0_MBOX0_INFO_SH 1
|
||||
#define __LPU0_HOSTFN0_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN0_MBOX0_INFO_SH)
|
||||
#define __LPU0_HOSTFN0_MBOX0_CMD_STATUS 0x00000001
|
||||
#define LPU1_HOSTFN0_MBOX0_CMD_STAT 0x0001900c
|
||||
#define __LPU1_HOSTFN0_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU1_HOSTFN0_MBOX0_INFO_SH 1
|
||||
#define __LPU1_HOSTFN0_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN0_MBOX0_INFO_SH)
|
||||
#define __LPU1_HOSTFN0_MBOX0_CMD_STATUS 0x00000001
|
||||
#define HOSTFN1_LPU0_MBOX0_CMD_STAT 0x00019010
|
||||
#define __HOSTFN1_LPU0_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN1_LPU0_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN1_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN1_LPU0_MBOX0_INFO_SH)
|
||||
#define __HOSTFN1_LPU0_MBOX0_CMD_STATUS 0x00000001
|
||||
#define HOSTFN1_LPU1_MBOX0_CMD_STAT 0x00019014
|
||||
#define __HOSTFN1_LPU1_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN1_LPU1_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN1_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN1_LPU1_MBOX0_INFO_SH)
|
||||
#define __HOSTFN1_LPU1_MBOX0_CMD_STATUS 0x00000001
|
||||
#define LPU0_HOSTFN1_MBOX0_CMD_STAT 0x00019018
|
||||
#define __LPU0_HOSTFN1_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU0_HOSTFN1_MBOX0_INFO_SH 1
|
||||
#define __LPU0_HOSTFN1_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN1_MBOX0_INFO_SH)
|
||||
#define __LPU0_HOSTFN1_MBOX0_CMD_STATUS 0x00000001
|
||||
#define LPU1_HOSTFN1_MBOX0_CMD_STAT 0x0001901c
|
||||
#define __LPU1_HOSTFN1_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU1_HOSTFN1_MBOX0_INFO_SH 1
|
||||
#define __LPU1_HOSTFN1_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN1_MBOX0_INFO_SH)
|
||||
#define __LPU1_HOSTFN1_MBOX0_CMD_STATUS 0x00000001
|
||||
#define HOSTFN2_LPU0_MBOX0_CMD_STAT 0x00019150
|
||||
#define __HOSTFN2_LPU0_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN2_LPU0_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN2_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN2_LPU0_MBOX0_INFO_SH)
|
||||
#define __HOSTFN2_LPU0_MBOX0_CMD_STATUS 0x00000001
|
||||
#define HOSTFN2_LPU1_MBOX0_CMD_STAT 0x00019154
|
||||
#define __HOSTFN2_LPU1_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN2_LPU1_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN2_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN2_LPU1_MBOX0_INFO_SH)
|
||||
#define __HOSTFN2_LPU1_MBOX0BOX0_CMD_STATUS 0x00000001
|
||||
#define LPU0_HOSTFN2_MBOX0_CMD_STAT 0x00019158
|
||||
#define __LPU0_HOSTFN2_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU0_HOSTFN2_MBOX0_INFO_SH 1
|
||||
#define __LPU0_HOSTFN2_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN2_MBOX0_INFO_SH)
|
||||
#define __LPU0_HOSTFN2_MBOX0_CMD_STATUS 0x00000001
|
||||
#define LPU1_HOSTFN2_MBOX0_CMD_STAT 0x0001915c
|
||||
#define __LPU1_HOSTFN2_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU1_HOSTFN2_MBOX0_INFO_SH 1
|
||||
#define __LPU1_HOSTFN2_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN2_MBOX0_INFO_SH)
|
||||
#define __LPU1_HOSTFN2_MBOX0_CMD_STATUS 0x00000001
|
||||
#define HOSTFN3_LPU0_MBOX0_CMD_STAT 0x00019160
|
||||
#define __HOSTFN3_LPU0_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN3_LPU0_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN3_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN3_LPU0_MBOX0_INFO_SH)
|
||||
#define __HOSTFN3_LPU0_MBOX0_CMD_STATUS 0x00000001
|
||||
#define HOSTFN3_LPU1_MBOX0_CMD_STAT 0x00019164
|
||||
#define __HOSTFN3_LPU1_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __HOSTFN3_LPU1_MBOX0_INFO_SH 1
|
||||
#define __HOSTFN3_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN3_LPU1_MBOX0_INFO_SH)
|
||||
#define __HOSTFN3_LPU1_MBOX0_CMD_STATUS 0x00000001
|
||||
#define LPU0_HOSTFN3_MBOX0_CMD_STAT 0x00019168
|
||||
#define __LPU0_HOSTFN3_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU0_HOSTFN3_MBOX0_INFO_SH 1
|
||||
#define __LPU0_HOSTFN3_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN3_MBOX0_INFO_SH)
|
||||
#define __LPU0_HOSTFN3_MBOX0_CMD_STATUS 0x00000001
|
||||
#define LPU1_HOSTFN3_MBOX0_CMD_STAT 0x0001916c
|
||||
#define __LPU1_HOSTFN3_MBOX0_INFO_MK 0xfffffffe
|
||||
#define __LPU1_HOSTFN3_MBOX0_INFO_SH 1
|
||||
#define __LPU1_HOSTFN3_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN3_MBOX0_INFO_SH)
|
||||
#define __LPU1_HOSTFN3_MBOX0_CMD_STATUS 0x00000001
|
||||
#define FW_INIT_HALT_P0 0x000191ac
|
||||
#define __FW_INIT_HALT_P 0x00000001
|
||||
#define FW_INIT_HALT_P1 0x000191bc
|
||||
#define CPE_PI_PTR_Q0 0x00038000
|
||||
#define __CPE_PI_UNUSED_MK 0xffff0000
|
||||
#define __CPE_PI_UNUSED_SH 16
|
||||
#define __CPE_PI_UNUSED(_v) ((_v) << __CPE_PI_UNUSED_SH)
|
||||
#define __CPE_PI_PTR 0x0000ffff
|
||||
#define CPE_PI_PTR_Q1 0x00038040
|
||||
#define CPE_CI_PTR_Q0 0x00038004
|
||||
#define __CPE_CI_UNUSED_MK 0xffff0000
|
||||
#define __CPE_CI_UNUSED_SH 16
|
||||
#define __CPE_CI_UNUSED(_v) ((_v) << __CPE_CI_UNUSED_SH)
|
||||
#define __CPE_CI_PTR 0x0000ffff
|
||||
#define CPE_CI_PTR_Q1 0x00038044
|
||||
#define CPE_DEPTH_Q0 0x00038008
|
||||
#define __CPE_DEPTH_UNUSED_MK 0xf8000000
|
||||
#define __CPE_DEPTH_UNUSED_SH 27
|
||||
#define __CPE_DEPTH_UNUSED(_v) ((_v) << __CPE_DEPTH_UNUSED_SH)
|
||||
#define __CPE_MSIX_VEC_INDEX_MK 0x07ff0000
|
||||
#define __CPE_MSIX_VEC_INDEX_SH 16
|
||||
#define __CPE_MSIX_VEC_INDEX(_v) ((_v) << __CPE_MSIX_VEC_INDEX_SH)
|
||||
#define __CPE_DEPTH 0x0000ffff
|
||||
#define CPE_DEPTH_Q1 0x00038048
|
||||
#define CPE_QCTRL_Q0 0x0003800c
|
||||
#define __CPE_CTRL_UNUSED30_MK 0xfc000000
|
||||
#define __CPE_CTRL_UNUSED30_SH 26
|
||||
#define __CPE_CTRL_UNUSED30(_v) ((_v) << __CPE_CTRL_UNUSED30_SH)
|
||||
#define __CPE_FUNC_INT_CTRL_MK 0x03000000
|
||||
#define __CPE_FUNC_INT_CTRL_SH 24
|
||||
#define __CPE_FUNC_INT_CTRL(_v) ((_v) << __CPE_FUNC_INT_CTRL_SH)
|
||||
enum {
|
||||
__CPE_FUNC_INT_CTRL_DISABLE = 0x0,
|
||||
__CPE_FUNC_INT_CTRL_F2NF = 0x1,
|
||||
__CPE_FUNC_INT_CTRL_3QUART = 0x2,
|
||||
__CPE_FUNC_INT_CTRL_HALF = 0x3,
|
||||
};
|
||||
#define __CPE_CTRL_UNUSED20_MK 0x00f00000
|
||||
#define __CPE_CTRL_UNUSED20_SH 20
|
||||
#define __CPE_CTRL_UNUSED20(_v) ((_v) << __CPE_CTRL_UNUSED20_SH)
|
||||
#define __CPE_SCI_TH_MK 0x000f0000
|
||||
#define __CPE_SCI_TH_SH 16
|
||||
#define __CPE_SCI_TH(_v) ((_v) << __CPE_SCI_TH_SH)
|
||||
#define __CPE_CTRL_UNUSED10_MK 0x0000c000
|
||||
#define __CPE_CTRL_UNUSED10_SH 14
|
||||
#define __CPE_CTRL_UNUSED10(_v) ((_v) << __CPE_CTRL_UNUSED10_SH)
|
||||
#define __CPE_ACK_PENDING 0x00002000
|
||||
#define __CPE_CTRL_UNUSED40_MK 0x00001c00
|
||||
#define __CPE_CTRL_UNUSED40_SH 10
|
||||
#define __CPE_CTRL_UNUSED40(_v) ((_v) << __CPE_CTRL_UNUSED40_SH)
|
||||
#define __CPE_PCIEID_MK 0x00000300
|
||||
#define __CPE_PCIEID_SH 8
|
||||
#define __CPE_PCIEID(_v) ((_v) << __CPE_PCIEID_SH)
|
||||
#define __CPE_CTRL_UNUSED00_MK 0x000000fe
|
||||
#define __CPE_CTRL_UNUSED00_SH 1
|
||||
#define __CPE_CTRL_UNUSED00(_v) ((_v) << __CPE_CTRL_UNUSED00_SH)
|
||||
#define __CPE_ESIZE 0x00000001
|
||||
#define CPE_QCTRL_Q1 0x0003804c
|
||||
#define __CPE_CTRL_UNUSED31_MK 0xfc000000
|
||||
#define __CPE_CTRL_UNUSED31_SH 26
|
||||
#define __CPE_CTRL_UNUSED31(_v) ((_v) << __CPE_CTRL_UNUSED31_SH)
|
||||
#define __CPE_CTRL_UNUSED21_MK 0x00f00000
|
||||
#define __CPE_CTRL_UNUSED21_SH 20
|
||||
#define __CPE_CTRL_UNUSED21(_v) ((_v) << __CPE_CTRL_UNUSED21_SH)
|
||||
#define __CPE_CTRL_UNUSED11_MK 0x0000c000
|
||||
#define __CPE_CTRL_UNUSED11_SH 14
|
||||
#define __CPE_CTRL_UNUSED11(_v) ((_v) << __CPE_CTRL_UNUSED11_SH)
|
||||
#define __CPE_CTRL_UNUSED41_MK 0x00001c00
|
||||
#define __CPE_CTRL_UNUSED41_SH 10
|
||||
#define __CPE_CTRL_UNUSED41(_v) ((_v) << __CPE_CTRL_UNUSED41_SH)
|
||||
#define __CPE_CTRL_UNUSED01_MK 0x000000fe
|
||||
#define __CPE_CTRL_UNUSED01_SH 1
|
||||
#define __CPE_CTRL_UNUSED01(_v) ((_v) << __CPE_CTRL_UNUSED01_SH)
|
||||
#define RME_PI_PTR_Q0 0x00038020
|
||||
#define __LATENCY_TIME_STAMP_MK 0xffff0000
|
||||
#define __LATENCY_TIME_STAMP_SH 16
|
||||
#define __LATENCY_TIME_STAMP(_v) ((_v) << __LATENCY_TIME_STAMP_SH)
|
||||
#define __RME_PI_PTR 0x0000ffff
|
||||
#define RME_PI_PTR_Q1 0x00038060
|
||||
#define RME_CI_PTR_Q0 0x00038024
|
||||
#define __DELAY_TIME_STAMP_MK 0xffff0000
|
||||
#define __DELAY_TIME_STAMP_SH 16
|
||||
#define __DELAY_TIME_STAMP(_v) ((_v) << __DELAY_TIME_STAMP_SH)
|
||||
#define __RME_CI_PTR 0x0000ffff
|
||||
#define RME_CI_PTR_Q1 0x00038064
|
||||
#define RME_DEPTH_Q0 0x00038028
|
||||
#define __RME_DEPTH_UNUSED_MK 0xf8000000
|
||||
#define __RME_DEPTH_UNUSED_SH 27
|
||||
#define __RME_DEPTH_UNUSED(_v) ((_v) << __RME_DEPTH_UNUSED_SH)
|
||||
#define __RME_MSIX_VEC_INDEX_MK 0x07ff0000
|
||||
#define __RME_MSIX_VEC_INDEX_SH 16
|
||||
#define __RME_MSIX_VEC_INDEX(_v) ((_v) << __RME_MSIX_VEC_INDEX_SH)
|
||||
#define __RME_DEPTH 0x0000ffff
|
||||
#define RME_DEPTH_Q1 0x00038068
|
||||
#define RME_QCTRL_Q0 0x0003802c
|
||||
#define __RME_INT_LATENCY_TIMER_MK 0xff000000
|
||||
#define __RME_INT_LATENCY_TIMER_SH 24
|
||||
#define __RME_INT_LATENCY_TIMER(_v) ((_v) << __RME_INT_LATENCY_TIMER_SH)
|
||||
#define __RME_INT_DELAY_TIMER_MK 0x00ff0000
|
||||
#define __RME_INT_DELAY_TIMER_SH 16
|
||||
#define __RME_INT_DELAY_TIMER(_v) ((_v) << __RME_INT_DELAY_TIMER_SH)
|
||||
#define __RME_INT_DELAY_DISABLE 0x00008000
|
||||
#define __RME_DLY_DELAY_DISABLE 0x00004000
|
||||
#define __RME_ACK_PENDING 0x00002000
|
||||
#define __RME_FULL_INTERRUPT_DISABLE 0x00001000
|
||||
#define __RME_CTRL_UNUSED10_MK 0x00000c00
|
||||
#define __RME_CTRL_UNUSED10_SH 10
|
||||
#define __RME_CTRL_UNUSED10(_v) ((_v) << __RME_CTRL_UNUSED10_SH)
|
||||
#define __RME_PCIEID_MK 0x00000300
|
||||
#define __RME_PCIEID_SH 8
|
||||
#define __RME_PCIEID(_v) ((_v) << __RME_PCIEID_SH)
|
||||
#define __RME_CTRL_UNUSED00_MK 0x000000fe
|
||||
#define __RME_CTRL_UNUSED00_SH 1
|
||||
#define __RME_CTRL_UNUSED00(_v) ((_v) << __RME_CTRL_UNUSED00_SH)
|
||||
#define __RME_ESIZE 0x00000001
|
||||
#define RME_QCTRL_Q1 0x0003806c
|
||||
#define __RME_CTRL_UNUSED11_MK 0x00000c00
|
||||
#define __RME_CTRL_UNUSED11_SH 10
|
||||
#define __RME_CTRL_UNUSED11(_v) ((_v) << __RME_CTRL_UNUSED11_SH)
|
||||
#define __RME_CTRL_UNUSED01_MK 0x000000fe
|
||||
#define __RME_CTRL_UNUSED01_SH 1
|
||||
#define __RME_CTRL_UNUSED01(_v) ((_v) << __RME_CTRL_UNUSED01_SH)
|
||||
#define PSS_CTL_REG 0x00018800
|
||||
#define __PSS_I2C_CLK_DIV_MK 0x007f0000
|
||||
#define __PSS_I2C_CLK_DIV_SH 16
|
||||
#define __PSS_I2C_CLK_DIV(_v) ((_v) << __PSS_I2C_CLK_DIV_SH)
|
||||
#define __PSS_LMEM_INIT_DONE 0x00001000
|
||||
#define __PSS_LMEM_RESET 0x00000200
|
||||
#define __PSS_LMEM_INIT_EN 0x00000100
|
||||
#define __PSS_LPU1_RESET 0x00000002
|
||||
#define __PSS_LPU0_RESET 0x00000001
|
||||
#define PSS_ERR_STATUS_REG 0x00018810
|
||||
#define __PSS_LPU1_TCM_READ_ERR 0x00200000
|
||||
#define __PSS_LPU0_TCM_READ_ERR 0x00100000
|
||||
#define __PSS_LMEM5_CORR_ERR 0x00080000
|
||||
#define __PSS_LMEM4_CORR_ERR 0x00040000
|
||||
#define __PSS_LMEM3_CORR_ERR 0x00020000
|
||||
#define __PSS_LMEM2_CORR_ERR 0x00010000
|
||||
#define __PSS_LMEM1_CORR_ERR 0x00008000
|
||||
#define __PSS_LMEM0_CORR_ERR 0x00004000
|
||||
#define __PSS_LMEM5_UNCORR_ERR 0x00002000
|
||||
#define __PSS_LMEM4_UNCORR_ERR 0x00001000
|
||||
#define __PSS_LMEM3_UNCORR_ERR 0x00000800
|
||||
#define __PSS_LMEM2_UNCORR_ERR 0x00000400
|
||||
#define __PSS_LMEM1_UNCORR_ERR 0x00000200
|
||||
#define __PSS_LMEM0_UNCORR_ERR 0x00000100
|
||||
#define __PSS_BAL_PERR 0x00000080
|
||||
#define __PSS_DIP_IF_ERR 0x00000040
|
||||
#define __PSS_IOH_IF_ERR 0x00000020
|
||||
#define __PSS_TDS_IF_ERR 0x00000010
|
||||
#define __PSS_RDS_IF_ERR 0x00000008
|
||||
#define __PSS_SGM_IF_ERR 0x00000004
|
||||
#define __PSS_LPU1_RAM_ERR 0x00000002
|
||||
#define __PSS_LPU0_RAM_ERR 0x00000001
|
||||
#define ERR_SET_REG 0x00018818
|
||||
#define __PSS_ERR_STATUS_SET 0x003fffff
|
||||
#define PMM_1T_RESET_REG_P0 0x0002381c
|
||||
#define __PMM_1T_RESET_P 0x00000001
|
||||
#define PMM_1T_RESET_REG_P1 0x00023c1c
|
||||
#define HQM_QSET0_RXQ_DRBL_P0 0x00038000
|
||||
#define __RXQ0_ADD_VECTORS_P 0x80000000
|
||||
#define __RXQ0_STOP_P 0x40000000
|
||||
#define __RXQ0_PRD_PTR_P 0x0000ffff
|
||||
#define HQM_QSET1_RXQ_DRBL_P0 0x00038080
|
||||
#define __RXQ1_ADD_VECTORS_P 0x80000000
|
||||
#define __RXQ1_STOP_P 0x40000000
|
||||
#define __RXQ1_PRD_PTR_P 0x0000ffff
|
||||
#define HQM_QSET0_RXQ_DRBL_P1 0x0003c000
|
||||
#define HQM_QSET1_RXQ_DRBL_P1 0x0003c080
|
||||
#define HQM_QSET0_TXQ_DRBL_P0 0x00038020
|
||||
#define __TXQ0_ADD_VECTORS_P 0x80000000
|
||||
#define __TXQ0_STOP_P 0x40000000
|
||||
#define __TXQ0_PRD_PTR_P 0x0000ffff
|
||||
#define HQM_QSET1_TXQ_DRBL_P0 0x000380a0
|
||||
#define __TXQ1_ADD_VECTORS_P 0x80000000
|
||||
#define __TXQ1_STOP_P 0x40000000
|
||||
#define __TXQ1_PRD_PTR_P 0x0000ffff
|
||||
#define HQM_QSET0_TXQ_DRBL_P1 0x0003c020
|
||||
#define HQM_QSET1_TXQ_DRBL_P1 0x0003c0a0
|
||||
#define HQM_QSET0_IB_DRBL_1_P0 0x00038040
|
||||
#define __IB1_0_ACK_P 0x80000000
|
||||
#define __IB1_0_DISABLE_P 0x40000000
|
||||
#define __IB1_0_COALESCING_CFG_P_MK 0x00ff0000
|
||||
#define __IB1_0_COALESCING_CFG_P_SH 16
|
||||
#define __IB1_0_COALESCING_CFG_P(_v) ((_v) << __IB1_0_COALESCING_CFG_P_SH)
|
||||
#define __IB1_0_NUM_OF_ACKED_EVENTS_P 0x0000ffff
|
||||
#define HQM_QSET1_IB_DRBL_1_P0 0x000380c0
|
||||
#define __IB1_1_ACK_P 0x80000000
|
||||
#define __IB1_1_DISABLE_P 0x40000000
|
||||
#define __IB1_1_COALESCING_CFG_P_MK 0x00ff0000
|
||||
#define __IB1_1_COALESCING_CFG_P_SH 16
|
||||
#define __IB1_1_COALESCING_CFG_P(_v) ((_v) << __IB1_1_COALESCING_CFG_P_SH)
|
||||
#define __IB1_1_NUM_OF_ACKED_EVENTS_P 0x0000ffff
|
||||
#define HQM_QSET0_IB_DRBL_1_P1 0x0003c040
|
||||
#define HQM_QSET1_IB_DRBL_1_P1 0x0003c0c0
|
||||
#define HQM_QSET0_IB_DRBL_2_P0 0x00038060
|
||||
#define __IB2_0_ACK_P 0x80000000
|
||||
#define __IB2_0_DISABLE_P 0x40000000
|
||||
#define __IB2_0_COALESCING_CFG_P_MK 0x00ff0000
|
||||
#define __IB2_0_COALESCING_CFG_P_SH 16
|
||||
#define __IB2_0_COALESCING_CFG_P(_v) ((_v) << __IB2_0_COALESCING_CFG_P_SH)
|
||||
#define __IB2_0_NUM_OF_ACKED_EVENTS_P 0x0000ffff
|
||||
#define HQM_QSET1_IB_DRBL_2_P0 0x000380e0
|
||||
#define __IB2_1_ACK_P 0x80000000
|
||||
#define __IB2_1_DISABLE_P 0x40000000
|
||||
#define __IB2_1_COALESCING_CFG_P_MK 0x00ff0000
|
||||
#define __IB2_1_COALESCING_CFG_P_SH 16
|
||||
#define __IB2_1_COALESCING_CFG_P(_v) ((_v) << __IB2_1_COALESCING_CFG_P_SH)
|
||||
#define __IB2_1_NUM_OF_ACKED_EVENTS_P 0x0000ffff
|
||||
#define HQM_QSET0_IB_DRBL_2_P1 0x0003c060
|
||||
#define HQM_QSET1_IB_DRBL_2_P1 0x0003c0e0
|
||||
|
||||
/*
|
||||
* These definitions are either in error/missing in spec. Its auto-generated
|
||||
* from hard coded values in regparse.pl.
|
||||
*/
|
||||
#define __EMPHPOST_AT_4G_MK_FIX 0x0000001c
|
||||
#define __EMPHPOST_AT_4G_SH_FIX 0x00000002
|
||||
#define __EMPHPRE_AT_4G_FIX 0x00000003
|
||||
#define __SFP_TXRATE_EN_FIX 0x00000100
|
||||
#define __SFP_RXRATE_EN_FIX 0x00000080
|
||||
|
||||
/*
|
||||
* These register definitions are auto-generated from hard coded values
|
||||
* in regparse.pl.
|
||||
*/
|
||||
|
||||
/*
|
||||
* These register mapping definitions are auto-generated from mapping tables
|
||||
* in regparse.pl.
|
||||
*/
|
||||
#define BFA_IOC0_HBEAT_REG HOST_SEM0_INFO_REG
|
||||
#define BFA_IOC0_STATE_REG HOST_SEM1_INFO_REG
|
||||
#define BFA_IOC1_HBEAT_REG HOST_SEM2_INFO_REG
|
||||
#define BFA_IOC1_STATE_REG HOST_SEM3_INFO_REG
|
||||
#define BFA_FW_USE_COUNT HOST_SEM4_INFO_REG
|
||||
#define BFA_IOC_FAIL_SYNC HOST_SEM5_INFO_REG
|
||||
|
||||
#define CPE_DEPTH_Q(__n) \
|
||||
(CPE_DEPTH_Q0 + (__n) * (CPE_DEPTH_Q1 - CPE_DEPTH_Q0))
|
||||
#define CPE_QCTRL_Q(__n) \
|
||||
(CPE_QCTRL_Q0 + (__n) * (CPE_QCTRL_Q1 - CPE_QCTRL_Q0))
|
||||
#define CPE_PI_PTR_Q(__n) \
|
||||
(CPE_PI_PTR_Q0 + (__n) * (CPE_PI_PTR_Q1 - CPE_PI_PTR_Q0))
|
||||
#define CPE_CI_PTR_Q(__n) \
|
||||
(CPE_CI_PTR_Q0 + (__n) * (CPE_CI_PTR_Q1 - CPE_CI_PTR_Q0))
|
||||
#define RME_DEPTH_Q(__n) \
|
||||
(RME_DEPTH_Q0 + (__n) * (RME_DEPTH_Q1 - RME_DEPTH_Q0))
|
||||
#define RME_QCTRL_Q(__n) \
|
||||
(RME_QCTRL_Q0 + (__n) * (RME_QCTRL_Q1 - RME_QCTRL_Q0))
|
||||
#define RME_PI_PTR_Q(__n) \
|
||||
(RME_PI_PTR_Q0 + (__n) * (RME_PI_PTR_Q1 - RME_PI_PTR_Q0))
|
||||
#define RME_CI_PTR_Q(__n) \
|
||||
(RME_CI_PTR_Q0 + (__n) * (RME_CI_PTR_Q1 - RME_CI_PTR_Q0))
|
||||
#define HQM_QSET_RXQ_DRBL_P0(__n) \
|
||||
(HQM_QSET0_RXQ_DRBL_P0 + (__n) * \
|
||||
(HQM_QSET1_RXQ_DRBL_P0 - HQM_QSET0_RXQ_DRBL_P0))
|
||||
#define HQM_QSET_TXQ_DRBL_P0(__n) \
|
||||
(HQM_QSET0_TXQ_DRBL_P0 + (__n) * \
|
||||
(HQM_QSET1_TXQ_DRBL_P0 - HQM_QSET0_TXQ_DRBL_P0))
|
||||
#define HQM_QSET_IB_DRBL_1_P0(__n) \
|
||||
(HQM_QSET0_IB_DRBL_1_P0 + (__n) * \
|
||||
(HQM_QSET1_IB_DRBL_1_P0 - HQM_QSET0_IB_DRBL_1_P0))
|
||||
#define HQM_QSET_IB_DRBL_2_P0(__n) \
|
||||
(HQM_QSET0_IB_DRBL_2_P0 + (__n) * \
|
||||
(HQM_QSET1_IB_DRBL_2_P0 - HQM_QSET0_IB_DRBL_2_P0))
|
||||
#define HQM_QSET_RXQ_DRBL_P1(__n) \
|
||||
(HQM_QSET0_RXQ_DRBL_P1 + (__n) * \
|
||||
(HQM_QSET1_RXQ_DRBL_P1 - HQM_QSET0_RXQ_DRBL_P1))
|
||||
#define HQM_QSET_TXQ_DRBL_P1(__n) \
|
||||
(HQM_QSET0_TXQ_DRBL_P1 + (__n) * \
|
||||
(HQM_QSET1_TXQ_DRBL_P1 - HQM_QSET0_TXQ_DRBL_P1))
|
||||
#define HQM_QSET_IB_DRBL_1_P1(__n) \
|
||||
(HQM_QSET0_IB_DRBL_1_P1 + (__n) * \
|
||||
(HQM_QSET1_IB_DRBL_1_P1 - HQM_QSET0_IB_DRBL_1_P1))
|
||||
#define HQM_QSET_IB_DRBL_2_P1(__n) \
|
||||
(HQM_QSET0_IB_DRBL_2_P1 + (__n) * \
|
||||
(HQM_QSET1_IB_DRBL_2_P1 - HQM_QSET0_IB_DRBL_2_P1))
|
||||
|
||||
#define CPE_Q_NUM(__fn, __q) (((__fn) << 2) + (__q))
|
||||
#define RME_Q_NUM(__fn, __q) (((__fn) << 2) + (__q))
|
||||
#define CPE_Q_MASK(__q) ((__q) & 0x3)
|
||||
#define RME_Q_MASK(__q) ((__q) & 0x3)
|
||||
|
||||
/*
|
||||
* PCI MSI-X vector defines
|
||||
*/
|
||||
enum {
|
||||
BFA_MSIX_CPE_Q0 = 0,
|
||||
BFA_MSIX_CPE_Q1 = 1,
|
||||
BFA_MSIX_CPE_Q2 = 2,
|
||||
BFA_MSIX_CPE_Q3 = 3,
|
||||
BFA_MSIX_RME_Q0 = 4,
|
||||
BFA_MSIX_RME_Q1 = 5,
|
||||
BFA_MSIX_RME_Q2 = 6,
|
||||
BFA_MSIX_RME_Q3 = 7,
|
||||
BFA_MSIX_LPU_ERR = 8,
|
||||
BFA_MSIX_CT_MAX = 9,
|
||||
};
|
||||
|
||||
/*
|
||||
* And corresponding host interrupt status bit field defines
|
||||
*/
|
||||
#define __HFN_INT_CPE_Q0 0x00000001U
|
||||
#define __HFN_INT_CPE_Q1 0x00000002U
|
||||
#define __HFN_INT_CPE_Q2 0x00000004U
|
||||
#define __HFN_INT_CPE_Q3 0x00000008U
|
||||
#define __HFN_INT_CPE_Q4 0x00000010U
|
||||
#define __HFN_INT_CPE_Q5 0x00000020U
|
||||
#define __HFN_INT_CPE_Q6 0x00000040U
|
||||
#define __HFN_INT_CPE_Q7 0x00000080U
|
||||
#define __HFN_INT_RME_Q0 0x00000100U
|
||||
#define __HFN_INT_RME_Q1 0x00000200U
|
||||
#define __HFN_INT_RME_Q2 0x00000400U
|
||||
#define __HFN_INT_RME_Q3 0x00000800U
|
||||
#define __HFN_INT_RME_Q4 0x00001000U
|
||||
#define __HFN_INT_RME_Q5 0x00002000U
|
||||
#define __HFN_INT_RME_Q6 0x00004000U
|
||||
#define __HFN_INT_RME_Q7 0x00008000U
|
||||
#define __HFN_INT_ERR_EMC 0x00010000U
|
||||
#define __HFN_INT_ERR_LPU0 0x00020000U
|
||||
#define __HFN_INT_ERR_LPU1 0x00040000U
|
||||
#define __HFN_INT_ERR_PSS 0x00080000U
|
||||
#define __HFN_INT_MBOX_LPU0 0x00100000U
|
||||
#define __HFN_INT_MBOX_LPU1 0x00200000U
|
||||
#define __HFN_INT_MBOX1_LPU0 0x00400000U
|
||||
#define __HFN_INT_MBOX1_LPU1 0x00800000U
|
||||
#define __HFN_INT_LL_HALT 0x01000000U
|
||||
#define __HFN_INT_CPE_MASK 0x000000ffU
|
||||
#define __HFN_INT_RME_MASK 0x0000ff00U
|
||||
|
||||
/*
|
||||
* catapult memory map.
|
||||
*/
|
||||
#define LL_PGN_HQM0 0x0096
|
||||
#define LL_PGN_HQM1 0x0097
|
||||
#define PSS_SMEM_PAGE_START 0x8000
|
||||
#define PSS_SMEM_PGNUM(_pg0, _ma) ((_pg0) + ((_ma) >> 15))
|
||||
#define PSS_SMEM_PGOFF(_ma) ((_ma) & 0x7fff)
|
||||
|
||||
/*
|
||||
* End of catapult memory map
|
||||
*/
|
||||
|
||||
#endif /* __BFI_CTREG_H__ */
|
|
@ -1,438 +0,0 @@
|
|||
/*
|
||||
* Linux network driver for Brocade Converged Network Adapter.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (GPL) Version 2 as
|
||||
* published by the Free Software Foundation
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
|
||||
* All rights reserved
|
||||
* www.brocade.com
|
||||
*/
|
||||
#ifndef __BFI_LL_H__
|
||||
#define __BFI_LL_H__
|
||||
|
||||
#include "bfi.h"
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* "enums" for all LL mailbox messages other than IOC
|
||||
*/
|
||||
enum {
|
||||
BFI_LL_H2I_MAC_UCAST_SET_REQ = 1,
|
||||
BFI_LL_H2I_MAC_UCAST_ADD_REQ = 2,
|
||||
BFI_LL_H2I_MAC_UCAST_DEL_REQ = 3,
|
||||
|
||||
BFI_LL_H2I_MAC_MCAST_ADD_REQ = 4,
|
||||
BFI_LL_H2I_MAC_MCAST_DEL_REQ = 5,
|
||||
BFI_LL_H2I_MAC_MCAST_FILTER_REQ = 6,
|
||||
BFI_LL_H2I_MAC_MCAST_DEL_ALL_REQ = 7,
|
||||
|
||||
BFI_LL_H2I_PORT_ADMIN_REQ = 8,
|
||||
BFI_LL_H2I_STATS_GET_REQ = 9,
|
||||
BFI_LL_H2I_STATS_CLEAR_REQ = 10,
|
||||
|
||||
BFI_LL_H2I_RXF_PROMISCUOUS_SET_REQ = 11,
|
||||
BFI_LL_H2I_RXF_DEFAULT_SET_REQ = 12,
|
||||
|
||||
BFI_LL_H2I_TXQ_STOP_REQ = 13,
|
||||
BFI_LL_H2I_RXQ_STOP_REQ = 14,
|
||||
|
||||
BFI_LL_H2I_DIAG_LOOPBACK_REQ = 15,
|
||||
|
||||
BFI_LL_H2I_SET_PAUSE_REQ = 16,
|
||||
BFI_LL_H2I_MTU_INFO_REQ = 17,
|
||||
|
||||
BFI_LL_H2I_RX_REQ = 18,
|
||||
} ;
|
||||
|
||||
enum {
|
||||
BFI_LL_I2H_MAC_UCAST_SET_RSP = BFA_I2HM(1),
|
||||
BFI_LL_I2H_MAC_UCAST_ADD_RSP = BFA_I2HM(2),
|
||||
BFI_LL_I2H_MAC_UCAST_DEL_RSP = BFA_I2HM(3),
|
||||
|
||||
BFI_LL_I2H_MAC_MCAST_ADD_RSP = BFA_I2HM(4),
|
||||
BFI_LL_I2H_MAC_MCAST_DEL_RSP = BFA_I2HM(5),
|
||||
BFI_LL_I2H_MAC_MCAST_FILTER_RSP = BFA_I2HM(6),
|
||||
BFI_LL_I2H_MAC_MCAST_DEL_ALL_RSP = BFA_I2HM(7),
|
||||
|
||||
BFI_LL_I2H_PORT_ADMIN_RSP = BFA_I2HM(8),
|
||||
BFI_LL_I2H_STATS_GET_RSP = BFA_I2HM(9),
|
||||
BFI_LL_I2H_STATS_CLEAR_RSP = BFA_I2HM(10),
|
||||
|
||||
BFI_LL_I2H_RXF_PROMISCUOUS_SET_RSP = BFA_I2HM(11),
|
||||
BFI_LL_I2H_RXF_DEFAULT_SET_RSP = BFA_I2HM(12),
|
||||
|
||||
BFI_LL_I2H_TXQ_STOP_RSP = BFA_I2HM(13),
|
||||
BFI_LL_I2H_RXQ_STOP_RSP = BFA_I2HM(14),
|
||||
|
||||
BFI_LL_I2H_DIAG_LOOPBACK_RSP = BFA_I2HM(15),
|
||||
|
||||
BFI_LL_I2H_SET_PAUSE_RSP = BFA_I2HM(16),
|
||||
|
||||
BFI_LL_I2H_MTU_INFO_RSP = BFA_I2HM(17),
|
||||
BFI_LL_I2H_RX_RSP = BFA_I2HM(18),
|
||||
|
||||
BFI_LL_I2H_LINK_DOWN_AEN = BFA_I2HM(19),
|
||||
BFI_LL_I2H_LINK_UP_AEN = BFA_I2HM(20),
|
||||
|
||||
BFI_LL_I2H_PORT_ENABLE_AEN = BFA_I2HM(21),
|
||||
BFI_LL_I2H_PORT_DISABLE_AEN = BFA_I2HM(22),
|
||||
} ;
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_mac_addr_req is used by:
|
||||
* BFI_LL_H2I_MAC_UCAST_SET_REQ
|
||||
* BFI_LL_H2I_MAC_UCAST_ADD_REQ
|
||||
* BFI_LL_H2I_MAC_UCAST_DEL_REQ
|
||||
* BFI_LL_H2I_MAC_MCAST_ADD_REQ
|
||||
* BFI_LL_H2I_MAC_MCAST_DEL_REQ
|
||||
*/
|
||||
struct bfi_ll_mac_addr_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u8 rxf_id;
|
||||
u8 rsvd1[3];
|
||||
mac_t mac_addr;
|
||||
u8 rsvd2[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_mcast_filter_req is used by:
|
||||
* BFI_LL_H2I_MAC_MCAST_FILTER_REQ
|
||||
*/
|
||||
struct bfi_ll_mcast_filter_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u8 rxf_id;
|
||||
u8 enable;
|
||||
u8 rsvd[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_mcast_del_all is used by:
|
||||
* BFI_LL_H2I_MAC_MCAST_DEL_ALL_REQ
|
||||
*/
|
||||
struct bfi_ll_mcast_del_all_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u8 rxf_id;
|
||||
u8 rsvd[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_q_stop_req is used by:
|
||||
* BFI_LL_H2I_TXQ_STOP_REQ
|
||||
* BFI_LL_H2I_RXQ_STOP_REQ
|
||||
*/
|
||||
struct bfi_ll_q_stop_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u32 q_id_mask[2]; /* !< bit-mask for queue ids */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_stats_req is used by:
|
||||
* BFI_LL_I2H_STATS_GET_REQ
|
||||
* BFI_LL_I2H_STATS_CLEAR_REQ
|
||||
*/
|
||||
struct bfi_ll_stats_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u16 stats_mask; /* !< bit-mask for non-function statistics */
|
||||
u8 rsvd[2];
|
||||
u32 rxf_id_mask[2]; /* !< bit-mask for RxF Statistics */
|
||||
u32 txf_id_mask[2]; /* !< bit-mask for TxF Statistics */
|
||||
union bfi_addr_u host_buffer; /* !< where statistics are returned */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief defines for "stats_mask" above.
|
||||
*/
|
||||
#define BFI_LL_STATS_MAC (1 << 0) /* !< MAC Statistics */
|
||||
#define BFI_LL_STATS_BPC (1 << 1) /* !< Pause Stats from BPC */
|
||||
#define BFI_LL_STATS_RAD (1 << 2) /* !< Rx Admission Statistics */
|
||||
#define BFI_LL_STATS_RX_FC (1 << 3) /* !< Rx FC Stats from RxA */
|
||||
#define BFI_LL_STATS_TX_FC (1 << 4) /* !< Tx FC Stats from TxA */
|
||||
|
||||
#define BFI_LL_STATS_ALL 0x1f
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_port_admin_req
|
||||
*/
|
||||
struct bfi_ll_port_admin_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u8 up;
|
||||
u8 rsvd[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_rxf_req is used by:
|
||||
* BFI_LL_H2I_RXF_PROMISCUOUS_SET_REQ
|
||||
* BFI_LL_H2I_RXF_DEFAULT_SET_REQ
|
||||
*/
|
||||
struct bfi_ll_rxf_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u8 rxf_id;
|
||||
u8 enable;
|
||||
u8 rsvd[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_rxf_multi_req is used by:
|
||||
* BFI_LL_H2I_RX_REQ
|
||||
*/
|
||||
struct bfi_ll_rxf_multi_req {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u32 rxf_id_mask[2];
|
||||
u8 enable;
|
||||
u8 rsvd[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief enum for Loopback opmodes
|
||||
*/
|
||||
enum {
|
||||
BFI_LL_DIAG_LB_OPMODE_EXT = 0,
|
||||
BFI_LL_DIAG_LB_OPMODE_CBL = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_set_pause_req is used by:
|
||||
* BFI_LL_H2I_SET_PAUSE_REQ
|
||||
*/
|
||||
struct bfi_ll_set_pause_req {
|
||||
struct bfi_mhdr mh;
|
||||
u8 tx_pause; /* 1 = enable, 0 = disable */
|
||||
u8 rx_pause; /* 1 = enable, 0 = disable */
|
||||
u8 rsvd[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_mtu_info_req is used by:
|
||||
* BFI_LL_H2I_MTU_INFO_REQ
|
||||
*/
|
||||
struct bfi_ll_mtu_info_req {
|
||||
struct bfi_mhdr mh;
|
||||
u16 mtu;
|
||||
u8 rsvd[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Response header format used by all responses
|
||||
* For both responses and asynchronous notifications
|
||||
*/
|
||||
struct bfi_ll_rsp {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u8 error;
|
||||
u8 rsvd[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief bfi_ll_cee_aen is used by:
|
||||
* BFI_LL_I2H_LINK_DOWN_AEN
|
||||
* BFI_LL_I2H_LINK_UP_AEN
|
||||
*/
|
||||
struct bfi_ll_aen {
|
||||
struct bfi_mhdr mh; /*!< common msg header */
|
||||
u32 reason;
|
||||
u8 cee_linkup;
|
||||
u8 prio_map; /*!< LL priority bit-map */
|
||||
u8 rsvd[2];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* The following error codes can be returned
|
||||
* by the mbox commands
|
||||
*/
|
||||
enum {
|
||||
BFI_LL_CMD_OK = 0,
|
||||
BFI_LL_CMD_FAIL = 1,
|
||||
BFI_LL_CMD_DUP_ENTRY = 2, /* !< Duplicate entry in CAM */
|
||||
BFI_LL_CMD_CAM_FULL = 3, /* !< CAM is full */
|
||||
BFI_LL_CMD_NOT_OWNER = 4, /* !< Not permitted, b'cos not owner */
|
||||
BFI_LL_CMD_NOT_EXEC = 5, /* !< Was not sent to f/w at all */
|
||||
BFI_LL_CMD_WAITING = 6, /* !< Waiting for completion (VMware) */
|
||||
BFI_LL_CMD_PORT_DISABLED = 7, /* !< port in disabled state */
|
||||
} ;
|
||||
|
||||
/* Statistics */
|
||||
#define BFI_LL_TXF_ID_MAX 64
|
||||
#define BFI_LL_RXF_ID_MAX 64
|
||||
|
||||
/* TxF Frame Statistics */
|
||||
struct bfi_ll_stats_txf {
|
||||
u64 ucast_octets;
|
||||
u64 ucast;
|
||||
u64 ucast_vlan;
|
||||
|
||||
u64 mcast_octets;
|
||||
u64 mcast;
|
||||
u64 mcast_vlan;
|
||||
|
||||
u64 bcast_octets;
|
||||
u64 bcast;
|
||||
u64 bcast_vlan;
|
||||
|
||||
u64 errors;
|
||||
u64 filter_vlan; /* frames filtered due to VLAN */
|
||||
u64 filter_mac_sa; /* frames filtered due to SA check */
|
||||
};
|
||||
|
||||
/* RxF Frame Statistics */
|
||||
struct bfi_ll_stats_rxf {
|
||||
u64 ucast_octets;
|
||||
u64 ucast;
|
||||
u64 ucast_vlan;
|
||||
|
||||
u64 mcast_octets;
|
||||
u64 mcast;
|
||||
u64 mcast_vlan;
|
||||
|
||||
u64 bcast_octets;
|
||||
u64 bcast;
|
||||
u64 bcast_vlan;
|
||||
u64 frame_drops;
|
||||
};
|
||||
|
||||
/* FC Tx Frame Statistics */
|
||||
struct bfi_ll_stats_fc_tx {
|
||||
u64 txf_ucast_octets;
|
||||
u64 txf_ucast;
|
||||
u64 txf_ucast_vlan;
|
||||
|
||||
u64 txf_mcast_octets;
|
||||
u64 txf_mcast;
|
||||
u64 txf_mcast_vlan;
|
||||
|
||||
u64 txf_bcast_octets;
|
||||
u64 txf_bcast;
|
||||
u64 txf_bcast_vlan;
|
||||
|
||||
u64 txf_parity_errors;
|
||||
u64 txf_timeout;
|
||||
u64 txf_fid_parity_errors;
|
||||
};
|
||||
|
||||
/* FC Rx Frame Statistics */
|
||||
struct bfi_ll_stats_fc_rx {
|
||||
u64 rxf_ucast_octets;
|
||||
u64 rxf_ucast;
|
||||
u64 rxf_ucast_vlan;
|
||||
|
||||
u64 rxf_mcast_octets;
|
||||
u64 rxf_mcast;
|
||||
u64 rxf_mcast_vlan;
|
||||
|
||||
u64 rxf_bcast_octets;
|
||||
u64 rxf_bcast;
|
||||
u64 rxf_bcast_vlan;
|
||||
};
|
||||
|
||||
/* RAD Frame Statistics */
|
||||
struct bfi_ll_stats_rad {
|
||||
u64 rx_frames;
|
||||
u64 rx_octets;
|
||||
u64 rx_vlan_frames;
|
||||
|
||||
u64 rx_ucast;
|
||||
u64 rx_ucast_octets;
|
||||
u64 rx_ucast_vlan;
|
||||
|
||||
u64 rx_mcast;
|
||||
u64 rx_mcast_octets;
|
||||
u64 rx_mcast_vlan;
|
||||
|
||||
u64 rx_bcast;
|
||||
u64 rx_bcast_octets;
|
||||
u64 rx_bcast_vlan;
|
||||
|
||||
u64 rx_drops;
|
||||
};
|
||||
|
||||
/* BPC Tx Registers */
|
||||
struct bfi_ll_stats_bpc {
|
||||
/* transmit stats */
|
||||
u64 tx_pause[8];
|
||||
u64 tx_zero_pause[8]; /*!< Pause cancellation */
|
||||
/*!<Pause initiation rather than retention */
|
||||
u64 tx_first_pause[8];
|
||||
|
||||
/* receive stats */
|
||||
u64 rx_pause[8];
|
||||
u64 rx_zero_pause[8]; /*!< Pause cancellation */
|
||||
/*!<Pause initiation rather than retention */
|
||||
u64 rx_first_pause[8];
|
||||
};
|
||||
|
||||
/* MAC Rx Statistics */
|
||||
struct bfi_ll_stats_mac {
|
||||
u64 frame_64; /* both rx and tx counter */
|
||||
u64 frame_65_127; /* both rx and tx counter */
|
||||
u64 frame_128_255; /* both rx and tx counter */
|
||||
u64 frame_256_511; /* both rx and tx counter */
|
||||
u64 frame_512_1023; /* both rx and tx counter */
|
||||
u64 frame_1024_1518; /* both rx and tx counter */
|
||||
u64 frame_1519_1522; /* both rx and tx counter */
|
||||
|
||||
/* receive stats */
|
||||
u64 rx_bytes;
|
||||
u64 rx_packets;
|
||||
u64 rx_fcs_error;
|
||||
u64 rx_multicast;
|
||||
u64 rx_broadcast;
|
||||
u64 rx_control_frames;
|
||||
u64 rx_pause;
|
||||
u64 rx_unknown_opcode;
|
||||
u64 rx_alignment_error;
|
||||
u64 rx_frame_length_error;
|
||||
u64 rx_code_error;
|
||||
u64 rx_carrier_sense_error;
|
||||
u64 rx_undersize;
|
||||
u64 rx_oversize;
|
||||
u64 rx_fragments;
|
||||
u64 rx_jabber;
|
||||
u64 rx_drop;
|
||||
|
||||
/* transmit stats */
|
||||
u64 tx_bytes;
|
||||
u64 tx_packets;
|
||||
u64 tx_multicast;
|
||||
u64 tx_broadcast;
|
||||
u64 tx_pause;
|
||||
u64 tx_deferral;
|
||||
u64 tx_excessive_deferral;
|
||||
u64 tx_single_collision;
|
||||
u64 tx_muliple_collision;
|
||||
u64 tx_late_collision;
|
||||
u64 tx_excessive_collision;
|
||||
u64 tx_total_collision;
|
||||
u64 tx_pause_honored;
|
||||
u64 tx_drop;
|
||||
u64 tx_jabber;
|
||||
u64 tx_fcs_error;
|
||||
u64 tx_control_frame;
|
||||
u64 tx_oversize;
|
||||
u64 tx_undersize;
|
||||
u64 tx_fragments;
|
||||
};
|
||||
|
||||
/* Complete statistics */
|
||||
struct bfi_ll_stats {
|
||||
struct bfi_ll_stats_mac mac_stats;
|
||||
struct bfi_ll_stats_bpc bpc_stats;
|
||||
struct bfi_ll_stats_rad rad_stats;
|
||||
struct bfi_ll_stats_fc_rx fc_rx_stats;
|
||||
struct bfi_ll_stats_fc_tx fc_tx_stats;
|
||||
struct bfi_ll_stats_rxf rxf_stats[BFI_LL_RXF_ID_MAX];
|
||||
struct bfi_ll_stats_txf txf_stats[BFI_LL_TXF_ID_MAX];
|
||||
};
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif /* __BFI_LL_H__ */
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче