Merge branch 'master' into next
Conflicts: security/smack/smack_lsm.c Verified and added fix by Stephen Rothwell <sfr@canb.auug.org.au> Ok'd by Casey Schaufler <casey@schaufler-ca.com> Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
commit
d2e7ad1922
1
.mailmap
1
.mailmap
|
@ -105,3 +105,4 @@ Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
||||||
Uwe Kleine-König <ukl@pengutronix.de>
|
Uwe Kleine-König <ukl@pengutronix.de>
|
||||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||||
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
||||||
|
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||||
|
|
2
CREDITS
2
CREDITS
|
@ -2365,8 +2365,6 @@ E: acme@redhat.com
|
||||||
W: http://oops.ghostprotocols.net:81/blog/
|
W: http://oops.ghostprotocols.net:81/blog/
|
||||||
P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01
|
P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01
|
||||||
D: IPX, LLC, DCCP, cyc2x, wl3501_cs, net/ hacks
|
D: IPX, LLC, DCCP, cyc2x, wl3501_cs, net/ hacks
|
||||||
S: R. Brasílio Itiberê, 4270/1010 - Água Verde
|
|
||||||
S: 80240-060 - Curitiba - Paraná
|
|
||||||
S: Brazil
|
S: Brazil
|
||||||
|
|
||||||
N: Karsten Merker
|
N: Karsten Merker
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
What: /sys/bus/rbd/
|
||||||
|
Date: November 2010
|
||||||
|
Contact: Yehuda Sadeh <yehuda@hq.newdream.net>,
|
||||||
|
Sage Weil <sage@newdream.net>
|
||||||
|
Description:
|
||||||
|
|
||||||
|
Being used for adding and removing rbd block devices.
|
||||||
|
|
||||||
|
Usage: <mon ip addr> <options> <pool name> <rbd image name> [snap name]
|
||||||
|
|
||||||
|
$ echo "192.168.0.1 name=admin rbd foo" > /sys/bus/rbd/add
|
||||||
|
|
||||||
|
The snapshot name can be "-" or omitted to map the image read/write. A <dev-id>
|
||||||
|
will be assigned for any registered block device. If snapshot is used, it will
|
||||||
|
be mapped read-only.
|
||||||
|
|
||||||
|
Removal of a device:
|
||||||
|
|
||||||
|
$ echo <dev-id> > /sys/bus/rbd/remove
|
||||||
|
|
||||||
|
Entries under /sys/bus/rbd/devices/<dev-id>/
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
client_id
|
||||||
|
|
||||||
|
The ceph unique client id that was assigned for this specific session.
|
||||||
|
|
||||||
|
major
|
||||||
|
|
||||||
|
The block device major number.
|
||||||
|
|
||||||
|
name
|
||||||
|
|
||||||
|
The name of the rbd image.
|
||||||
|
|
||||||
|
pool
|
||||||
|
|
||||||
|
The pool where this rbd image resides. The pool-name pair is unique
|
||||||
|
per rados system.
|
||||||
|
|
||||||
|
size
|
||||||
|
|
||||||
|
The size (in bytes) of the mapped block device.
|
||||||
|
|
||||||
|
refresh
|
||||||
|
|
||||||
|
Writing to this file will reread the image header data and set
|
||||||
|
all relevant datastructures accordingly.
|
||||||
|
|
||||||
|
current_snap
|
||||||
|
|
||||||
|
The current snapshot for which the device is mapped.
|
||||||
|
|
||||||
|
create_snap
|
||||||
|
|
||||||
|
Create a snapshot:
|
||||||
|
|
||||||
|
$ echo <snap-name> > /sys/bus/rbd/devices/<dev-id>/snap_create
|
||||||
|
|
||||||
|
rollback_snap
|
||||||
|
|
||||||
|
Rolls back data to the specified snapshot. This goes over the entire
|
||||||
|
list of rados blocks and sends a rollback command to each.
|
||||||
|
|
||||||
|
$ echo <snap-name> > /sys/bus/rbd/devices/<dev-id>/snap_rollback
|
||||||
|
|
||||||
|
snap_*
|
||||||
|
|
||||||
|
A directory per each snapshot
|
||||||
|
|
||||||
|
|
||||||
|
Entries under /sys/bus/rbd/devices/<dev-id>/snap_<snap-name>
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
id
|
||||||
|
|
||||||
|
The rados internal snapshot id assigned for this snapshot
|
||||||
|
|
||||||
|
size
|
||||||
|
|
||||||
|
The size of the image when this snapshot was taken.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
What: /sys/class/net/<iface>/batman-adv/mesh_iface
|
||||||
|
Date: May 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
The /sys/class/net/<iface>/batman-adv/mesh_iface file
|
||||||
|
displays the batman mesh interface this <iface>
|
||||||
|
currently is associated with.
|
||||||
|
|
||||||
|
What: /sys/class/net/<iface>/batman-adv/iface_status
|
||||||
|
Date: May 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
Indicates the status of <iface> as it is seen by batman.
|
|
@ -0,0 +1,69 @@
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/aggregated_ogms
|
||||||
|
Date: May 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
Indicates whether the batman protocol messages of the
|
||||||
|
mesh <mesh_iface> shall be aggregated or not.
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/bonding
|
||||||
|
Date: June 2010
|
||||||
|
Contact: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
|
||||||
|
Description:
|
||||||
|
Indicates whether the data traffic going through the
|
||||||
|
mesh will be sent using multiple interfaces at the
|
||||||
|
same time (if available).
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/fragmentation
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Andreas Langer <an.langer@gmx.de>
|
||||||
|
Description:
|
||||||
|
Indicates whether the data traffic going through the
|
||||||
|
mesh will be fragmented or silently discarded if the
|
||||||
|
packet size exceeds the outgoing interface MTU.
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/gw_bandwidth
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
Defines the bandwidth which is propagated by this
|
||||||
|
node if gw_mode was set to 'server'.
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/gw_mode
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
Defines the state of the gateway features. Can be
|
||||||
|
either 'off', 'client' or 'server'.
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/gw_sel_class
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
Defines the selection criteria this node will use
|
||||||
|
to choose a gateway if gw_mode was set to 'client'.
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/orig_interval
|
||||||
|
Date: May 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
Defines the interval in milliseconds in which batman
|
||||||
|
sends its protocol messages.
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/hop_penalty
|
||||||
|
Date: Oct 2010
|
||||||
|
Contact: Linus Lüssing <linus.luessing@web.de>
|
||||||
|
Description:
|
||||||
|
Defines the penalty which will be applied to an
|
||||||
|
originator message's tq-field on every hop.
|
||||||
|
|
||||||
|
What: /sys/class/net/<mesh_iface>/mesh/vis_mode
|
||||||
|
Date: May 2010
|
||||||
|
Contact: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Description:
|
||||||
|
Each batman node only maintains information about its
|
||||||
|
own local neighborhood, therefore generating graphs
|
||||||
|
showing the topology of the entire mesh is not easily
|
||||||
|
feasible without having a central instance to collect
|
||||||
|
the local topologies from all nodes. This file allows
|
||||||
|
to activate the collecting (server) mode.
|
|
@ -47,6 +47,20 @@ Date: January 2007
|
||||||
KernelVersion: 2.6.20
|
KernelVersion: 2.6.20
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
Description:
|
Description:
|
||||||
Control the bluetooth device. 1 means on, 0 means off.
|
Control the wlan device. 1 means on, 0 means off.
|
||||||
This may control the led, the device or both.
|
This may control the led, the device or both.
|
||||||
Users: Lapsus
|
Users: Lapsus
|
||||||
|
|
||||||
|
What: /sys/devices/platform/asus_laptop/wimax
|
||||||
|
Date: October 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Control the wimax device. 1 means on, 0 means off.
|
||||||
|
|
||||||
|
What: /sys/devices/platform/asus_laptop/wwan
|
||||||
|
Date: October 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Control the wwan (3G) device. 1 means on, 0 means off.
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
What: /sys/devices/platform/eeepc-wmi/cpufv
|
||||||
|
Date: Oct 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Change CPU clock configuration (write-only).
|
||||||
|
There are three available clock configuration:
|
||||||
|
* 0 -> Super Performance Mode
|
||||||
|
* 1 -> High Performance Mode
|
||||||
|
* 2 -> Power Saving Mode
|
|
@ -0,0 +1,19 @@
|
||||||
|
What: /sys/class/tty/console/active
|
||||||
|
Date: Nov 2010
|
||||||
|
Contact: Kay Sievers <kay.sievers@vrfy.org>
|
||||||
|
Description:
|
||||||
|
Shows the list of currently configured
|
||||||
|
console devices, like 'tty1 ttyS0'.
|
||||||
|
The last entry in the file is the active
|
||||||
|
device connected to /dev/console.
|
||||||
|
The file supports poll() to detect virtual
|
||||||
|
console switches.
|
||||||
|
|
||||||
|
What: /sys/class/tty/tty0/active
|
||||||
|
Date: Nov 2010
|
||||||
|
Contact: Kay Sievers <kay.sievers@vrfy.org>
|
||||||
|
Description:
|
||||||
|
Shows the currently active virtual console
|
||||||
|
device, like 'tty1'.
|
||||||
|
The file supports poll() to detect virtual
|
||||||
|
console switches.
|
|
@ -146,6 +146,7 @@
|
||||||
!Finclude/net/cfg80211.h cfg80211_rx_mgmt
|
!Finclude/net/cfg80211.h cfg80211_rx_mgmt
|
||||||
!Finclude/net/cfg80211.h cfg80211_mgmt_tx_status
|
!Finclude/net/cfg80211.h cfg80211_mgmt_tx_status
|
||||||
!Finclude/net/cfg80211.h cfg80211_cqm_rssi_notify
|
!Finclude/net/cfg80211.h cfg80211_cqm_rssi_notify
|
||||||
|
!Finclude/net/cfg80211.h cfg80211_cqm_pktloss_notify
|
||||||
!Finclude/net/cfg80211.h cfg80211_michael_mic_failure
|
!Finclude/net/cfg80211.h cfg80211_michael_mic_failure
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter>
|
<chapter>
|
||||||
|
@ -332,10 +333,16 @@
|
||||||
<title>functions/definitions</title>
|
<title>functions/definitions</title>
|
||||||
!Finclude/net/mac80211.h ieee80211_rx_status
|
!Finclude/net/mac80211.h ieee80211_rx_status
|
||||||
!Finclude/net/mac80211.h mac80211_rx_flags
|
!Finclude/net/mac80211.h mac80211_rx_flags
|
||||||
|
!Finclude/net/mac80211.h mac80211_tx_control_flags
|
||||||
|
!Finclude/net/mac80211.h mac80211_rate_control_flags
|
||||||
|
!Finclude/net/mac80211.h ieee80211_tx_rate
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_info
|
!Finclude/net/mac80211.h ieee80211_tx_info
|
||||||
|
!Finclude/net/mac80211.h ieee80211_tx_info_clear_status
|
||||||
!Finclude/net/mac80211.h ieee80211_rx
|
!Finclude/net/mac80211.h ieee80211_rx
|
||||||
|
!Finclude/net/mac80211.h ieee80211_rx_ni
|
||||||
!Finclude/net/mac80211.h ieee80211_rx_irqsafe
|
!Finclude/net/mac80211.h ieee80211_rx_irqsafe
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_status
|
!Finclude/net/mac80211.h ieee80211_tx_status
|
||||||
|
!Finclude/net/mac80211.h ieee80211_tx_status_ni
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_status_irqsafe
|
!Finclude/net/mac80211.h ieee80211_tx_status_irqsafe
|
||||||
!Finclude/net/mac80211.h ieee80211_rts_get
|
!Finclude/net/mac80211.h ieee80211_rts_get
|
||||||
!Finclude/net/mac80211.h ieee80211_rts_duration
|
!Finclude/net/mac80211.h ieee80211_rts_duration
|
||||||
|
@ -346,6 +353,7 @@
|
||||||
!Finclude/net/mac80211.h ieee80211_stop_queue
|
!Finclude/net/mac80211.h ieee80211_stop_queue
|
||||||
!Finclude/net/mac80211.h ieee80211_wake_queues
|
!Finclude/net/mac80211.h ieee80211_wake_queues
|
||||||
!Finclude/net/mac80211.h ieee80211_stop_queues
|
!Finclude/net/mac80211.h ieee80211_stop_queues
|
||||||
|
!Finclude/net/mac80211.h ieee80211_queue_stopped
|
||||||
</sect1>
|
</sect1>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
@ -354,6 +362,13 @@
|
||||||
!Pinclude/net/mac80211.h Frame filtering
|
!Pinclude/net/mac80211.h Frame filtering
|
||||||
!Finclude/net/mac80211.h ieee80211_filter_flags
|
!Finclude/net/mac80211.h ieee80211_filter_flags
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="workqueue">
|
||||||
|
<title>The mac80211 workqueue</title>
|
||||||
|
!Pinclude/net/mac80211.h mac80211 workqueue
|
||||||
|
!Finclude/net/mac80211.h ieee80211_queue_work
|
||||||
|
!Finclude/net/mac80211.h ieee80211_queue_delayed_work
|
||||||
|
</chapter>
|
||||||
</part>
|
</part>
|
||||||
|
|
||||||
<part id="advanced">
|
<part id="advanced">
|
||||||
|
@ -374,6 +389,9 @@
|
||||||
!Finclude/net/mac80211.h set_key_cmd
|
!Finclude/net/mac80211.h set_key_cmd
|
||||||
!Finclude/net/mac80211.h ieee80211_key_conf
|
!Finclude/net/mac80211.h ieee80211_key_conf
|
||||||
!Finclude/net/mac80211.h ieee80211_key_flags
|
!Finclude/net/mac80211.h ieee80211_key_flags
|
||||||
|
!Finclude/net/mac80211.h ieee80211_tkip_key_type
|
||||||
|
!Finclude/net/mac80211.h ieee80211_get_tkip_key
|
||||||
|
!Finclude/net/mac80211.h ieee80211_key_removed
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="powersave">
|
<chapter id="powersave">
|
||||||
|
@ -417,6 +435,18 @@
|
||||||
supported by mac80211, add notes about supporting hw crypto
|
supported by mac80211, add notes about supporting hw crypto
|
||||||
with it.
|
with it.
|
||||||
</para>
|
</para>
|
||||||
|
!Finclude/net/mac80211.h ieee80211_iterate_active_interfaces
|
||||||
|
!Finclude/net/mac80211.h ieee80211_iterate_active_interfaces_atomic
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="station-handling">
|
||||||
|
<title>Station handling</title>
|
||||||
|
<para>TODO</para>
|
||||||
|
!Finclude/net/mac80211.h ieee80211_sta
|
||||||
|
!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>
|
||||||
|
|
||||||
<chapter id="hardware-scan-offload">
|
<chapter id="hardware-scan-offload">
|
||||||
|
@ -424,6 +454,28 @@
|
||||||
<para>TBD</para>
|
<para>TBD</para>
|
||||||
!Finclude/net/mac80211.h ieee80211_scan_completed
|
!Finclude/net/mac80211.h ieee80211_scan_completed
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="aggregation">
|
||||||
|
<title>Aggregation</title>
|
||||||
|
<sect1>
|
||||||
|
<title>TX A-MPDU aggregation</title>
|
||||||
|
!Pnet/mac80211/agg-tx.c TX A-MPDU aggregation
|
||||||
|
!Cnet/mac80211/agg-tx.c
|
||||||
|
</sect1>
|
||||||
|
<sect1>
|
||||||
|
<title>RX A-MPDU aggregation</title>
|
||||||
|
!Pnet/mac80211/agg-rx.c RX A-MPDU aggregation
|
||||||
|
!Cnet/mac80211/agg-rx.c
|
||||||
|
</sect1>
|
||||||
|
!Finclude/net/mac80211.h ieee80211_ampdu_mlme_action
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="smps">
|
||||||
|
<title>Spatial Multiplexing Powersave (SMPS)</title>
|
||||||
|
!Pinclude/net/mac80211.h Spatial multiplexing power save
|
||||||
|
!Finclude/net/mac80211.h ieee80211_request_smps
|
||||||
|
!Finclude/net/mac80211.h ieee80211_smps_mode
|
||||||
|
</chapter>
|
||||||
</part>
|
</part>
|
||||||
|
|
||||||
<part id="rate-control">
|
<part id="rate-control">
|
||||||
|
@ -435,9 +487,16 @@
|
||||||
interface and how it relates to mac80211 and drivers.
|
interface and how it relates to mac80211 and drivers.
|
||||||
</para>
|
</para>
|
||||||
</partintro>
|
</partintro>
|
||||||
<chapter id="dummy">
|
<chapter id="ratecontrol-api">
|
||||||
<title>dummy chapter</title>
|
<title>Rate Control API</title>
|
||||||
<para>TBD</para>
|
<para>TBD</para>
|
||||||
|
!Finclude/net/mac80211.h ieee80211_start_tx_ba_session
|
||||||
|
!Finclude/net/mac80211.h ieee80211_start_tx_ba_cb_irqsafe
|
||||||
|
!Finclude/net/mac80211.h ieee80211_stop_tx_ba_session
|
||||||
|
!Finclude/net/mac80211.h ieee80211_stop_tx_ba_cb_irqsafe
|
||||||
|
!Finclude/net/mac80211.h rate_control_changed
|
||||||
|
!Finclude/net/mac80211.h ieee80211_tx_rate_control
|
||||||
|
!Finclude/net/mac80211.h rate_control_send_low
|
||||||
</chapter>
|
</chapter>
|
||||||
</part>
|
</part>
|
||||||
|
|
||||||
|
@ -485,6 +544,13 @@
|
||||||
</sect1>
|
</sect1>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="aggregation-internals">
|
||||||
|
<title>Aggregation</title>
|
||||||
|
!Fnet/mac80211/sta_info.h sta_ampdu_mlme
|
||||||
|
!Fnet/mac80211/sta_info.h tid_ampdu_tx
|
||||||
|
!Fnet/mac80211/sta_info.h tid_ampdu_rx
|
||||||
|
</chapter>
|
||||||
|
|
||||||
<chapter id="synchronisation">
|
<chapter id="synchronisation">
|
||||||
<title>Synchronisation</title>
|
<title>Synchronisation</title>
|
||||||
<para>TBD</para>
|
<para>TBD</para>
|
||||||
|
|
|
@ -303,6 +303,10 @@ X!Idrivers/video/console/fonts.c
|
||||||
!Edrivers/input/input.c
|
!Edrivers/input/input.c
|
||||||
!Edrivers/input/ff-core.c
|
!Edrivers/input/ff-core.c
|
||||||
!Edrivers/input/ff-memless.c
|
!Edrivers/input/ff-memless.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Multitouch Library</title>
|
||||||
|
!Iinclude/linux/input/mt.h
|
||||||
|
!Edrivers/input/input-mt.c
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1><title>Polled input devices</title>
|
<sect1><title>Polled input devices</title>
|
||||||
!Iinclude/linux/input-polldev.h
|
!Iinclude/linux/input-polldev.h
|
||||||
|
|
|
@ -34,8 +34,7 @@
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><parameter>request</parameter></term>
|
<term><parameter>request</parameter></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>V4L2 ioctl request code as defined in the <link
|
<para>V4L2 ioctl request code as defined in the <filename>videodev2.h</filename> header file, for example
|
||||||
linkend="videodev">videodev.h</link> header file, for example
|
|
||||||
VIDIOC_QUERYCAP.</para>
|
VIDIOC_QUERYCAP.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -57,7 +56,7 @@ file descriptor. An ioctl <parameter>request</parameter> has encoded
|
||||||
in it whether the argument is an input, output or read/write
|
in it whether the argument is an input, output or read/write
|
||||||
parameter, and the size of the argument <parameter>argp</parameter> in
|
parameter, and the size of the argument <parameter>argp</parameter> in
|
||||||
bytes. Macros and defines specifying V4L2 ioctl requests are located
|
bytes. Macros and defines specifying V4L2 ioctl requests are located
|
||||||
in the <link linkend="videodev">videodev.h</link> header file.
|
in the <filename>videodev2.h</filename> header file.
|
||||||
Applications should use their own copy, not include the version in the
|
Applications should use their own copy, not include the version in the
|
||||||
kernel sources on the system they compile on. All V4L2 ioctl requests,
|
kernel sources on the system they compile on. All V4L2 ioctl requests,
|
||||||
their respective function and parameters are specified in <xref
|
their respective function and parameters are specified in <xref
|
||||||
|
|
|
@ -142,8 +142,8 @@ leftmost pixel of the second row from the top, and so on. The last row
|
||||||
has just as many pad bytes after it as the other rows.</para>
|
has just as many pad bytes after it as the other rows.</para>
|
||||||
|
|
||||||
<para>In V4L2 each format has an identifier which looks like
|
<para>In V4L2 each format has an identifier which looks like
|
||||||
<constant>PIX_FMT_XXX</constant>, defined in the <link
|
<constant>PIX_FMT_XXX</constant>, defined in the <filename>videodev2.h</filename>
|
||||||
linkend="videodev">videodev.h</link> header file. These identifiers
|
header file. These identifiers
|
||||||
represent <link linkend="v4l2-fourcc">four character codes</link>
|
represent <link linkend="v4l2-fourcc">four character codes</link>
|
||||||
which are also listed below, however they are not the same as those
|
which are also listed below, however they are not the same as those
|
||||||
used in the Windows world.</para>
|
used in the Windows world.</para>
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
obj-m := DocBook/ accounting/ auxdisplay/ connector/ \
|
obj-m := DocBook/ accounting/ auxdisplay/ connector/ \
|
||||||
filesystems/ filesystems/configfs/ ia64/ laptops/ networking/ \
|
filesystems/ filesystems/configfs/ ia64/ laptops/ networking/ \
|
||||||
pcmcia/ spi/ timers/ video4linux/ vm/ watchdog/src/
|
pcmcia/ spi/ timers/ vm/ watchdog/src/
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
CONFIG_RCU_TRACE debugfs Files and Formats
|
CONFIG_RCU_TRACE debugfs Files and Formats
|
||||||
|
|
||||||
|
|
||||||
The rcutree implementation of RCU provides debugfs trace output that
|
The rcutree and rcutiny implementations of RCU provide debugfs trace
|
||||||
summarizes counters and state. This information is useful for debugging
|
output that summarizes counters and state. This information is useful for
|
||||||
RCU itself, and can sometimes also help to debug abuses of RCU.
|
debugging RCU itself, and can sometimes also help to debug abuses of RCU.
|
||||||
The following sections describe the debugfs files and formats.
|
The following sections describe the debugfs files and formats, first
|
||||||
|
for rcutree and next for rcutiny.
|
||||||
|
|
||||||
|
|
||||||
Hierarchical RCU debugfs Files and Formats
|
CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats
|
||||||
|
|
||||||
This implementation of RCU provides three debugfs files under the
|
These implementations of RCU provides five debugfs files under the
|
||||||
top-level directory RCU: rcu/rcudata (which displays fields in struct
|
top-level directory RCU: rcu/rcudata (which displays fields in struct
|
||||||
rcu_data), rcu/rcugp (which displays grace-period counters), and
|
rcu_data), rcu/rcudata.csv (which is a .csv spreadsheet version of
|
||||||
rcu/rcuhier (which displays the struct rcu_node hierarchy).
|
rcu/rcudata), rcu/rcugp (which displays grace-period counters),
|
||||||
|
rcu/rcuhier (which displays the struct rcu_node hierarchy), and
|
||||||
|
rcu/rcu_pending (which displays counts of the reasons that the
|
||||||
|
rcu_pending() function decided that there was core RCU work to do).
|
||||||
|
|
||||||
The output of "cat rcu/rcudata" looks as follows:
|
The output of "cat rcu/rcudata" looks as follows:
|
||||||
|
|
||||||
|
@ -130,7 +134,8 @@ o "ci" is the number of RCU callbacks that have been invoked for
|
||||||
been registered in absence of CPU-hotplug activity.
|
been registered in absence of CPU-hotplug activity.
|
||||||
|
|
||||||
o "co" is the number of RCU callbacks that have been orphaned due to
|
o "co" is the number of RCU callbacks that have been orphaned due to
|
||||||
this CPU going offline.
|
this CPU going offline. These orphaned callbacks have been moved
|
||||||
|
to an arbitrarily chosen online CPU.
|
||||||
|
|
||||||
o "ca" is the number of RCU callbacks that have been adopted due to
|
o "ca" is the number of RCU callbacks that have been adopted due to
|
||||||
other CPUs going offline. Note that ci+co-ca+ql is the number of
|
other CPUs going offline. Note that ci+co-ca+ql is the number of
|
||||||
|
@ -168,12 +173,12 @@ o "gpnum" is the number of grace periods that have started. It is
|
||||||
|
|
||||||
The output of "cat rcu/rcuhier" looks as follows, with very long lines:
|
The output of "cat rcu/rcuhier" looks as follows, with very long lines:
|
||||||
|
|
||||||
c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 oqlen=0
|
c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6
|
||||||
1/1 .>. 0:127 ^0
|
1/1 .>. 0:127 ^0
|
||||||
3/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3
|
3/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3
|
||||||
3/3f .>. 0:5 ^0 2/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3
|
3/3f .>. 0:5 ^0 2/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3
|
||||||
rcu_bh:
|
rcu_bh:
|
||||||
c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 oqlen=0
|
c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0
|
||||||
0/1 .>. 0:127 ^0
|
0/1 .>. 0:127 ^0
|
||||||
0/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3
|
0/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3
|
||||||
0/3f .>. 0:5 ^0 0/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3
|
0/3f .>. 0:5 ^0 0/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3
|
||||||
|
@ -212,11 +217,6 @@ o "fqlh" is the number of calls to force_quiescent_state() that
|
||||||
exited immediately (without even being counted in nfqs above)
|
exited immediately (without even being counted in nfqs above)
|
||||||
due to contention on ->fqslock.
|
due to contention on ->fqslock.
|
||||||
|
|
||||||
o "oqlen" is the number of callbacks on the "orphan" callback
|
|
||||||
list. RCU callbacks are placed on this list by CPUs going
|
|
||||||
offline, and are "adopted" either by the CPU helping the outgoing
|
|
||||||
CPU or by the next rcu_barrier*() call, whichever comes first.
|
|
||||||
|
|
||||||
o Each element of the form "1/1 0:127 ^0" represents one struct
|
o Each element of the form "1/1 0:127 ^0" represents one struct
|
||||||
rcu_node. Each line represents one level of the hierarchy, from
|
rcu_node. Each line represents one level of the hierarchy, from
|
||||||
root to leaves. It is best to think of the rcu_data structures
|
root to leaves. It is best to think of the rcu_data structures
|
||||||
|
@ -326,3 +326,115 @@ o "nn" is the number of times that this CPU needed nothing. Alert
|
||||||
readers will note that the rcu "nn" number for a given CPU very
|
readers will note that the rcu "nn" number for a given CPU very
|
||||||
closely matches the rcu_bh "np" number for that same CPU. This
|
closely matches the rcu_bh "np" number for that same CPU. This
|
||||||
is due to short-circuit evaluation in rcu_pending().
|
is due to short-circuit evaluation in rcu_pending().
|
||||||
|
|
||||||
|
|
||||||
|
CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats
|
||||||
|
|
||||||
|
These implementations of RCU provides a single debugfs file under the
|
||||||
|
top-level directory RCU, namely rcu/rcudata, which displays fields in
|
||||||
|
rcu_bh_ctrlblk, rcu_sched_ctrlblk and, for CONFIG_TINY_PREEMPT_RCU,
|
||||||
|
rcu_preempt_ctrlblk.
|
||||||
|
|
||||||
|
The output of "cat rcu/rcudata" is as follows:
|
||||||
|
|
||||||
|
rcu_preempt: qlen=24 gp=1097669 g197/p197/c197 tasks=...
|
||||||
|
ttb=. btg=no ntb=184 neb=0 nnb=183 j=01f7 bt=0274
|
||||||
|
normal balk: nt=1097669 gt=0 bt=371 b=0 ny=25073378 nos=0
|
||||||
|
exp balk: bt=0 nos=0
|
||||||
|
rcu_sched: qlen: 0
|
||||||
|
rcu_bh: qlen: 0
|
||||||
|
|
||||||
|
This is split into rcu_preempt, rcu_sched, and rcu_bh sections, with the
|
||||||
|
rcu_preempt section appearing only in CONFIG_TINY_PREEMPT_RCU builds.
|
||||||
|
The last three lines of the rcu_preempt section appear only in
|
||||||
|
CONFIG_RCU_BOOST kernel builds. The fields are as follows:
|
||||||
|
|
||||||
|
o "qlen" is the number of RCU callbacks currently waiting either
|
||||||
|
for an RCU grace period or waiting to be invoked. This is the
|
||||||
|
only field present for rcu_sched and rcu_bh, due to the
|
||||||
|
short-circuiting of grace period in those two cases.
|
||||||
|
|
||||||
|
o "gp" is the number of grace periods that have completed.
|
||||||
|
|
||||||
|
o "g197/p197/c197" displays the grace-period state, with the
|
||||||
|
"g" number being the number of grace periods that have started
|
||||||
|
(mod 256), the "p" number being the number of grace periods
|
||||||
|
that the CPU has responded to (also mod 256), and the "c"
|
||||||
|
number being the number of grace periods that have completed
|
||||||
|
(once again mode 256).
|
||||||
|
|
||||||
|
Why have both "gp" and "g"? Because the data flowing into
|
||||||
|
"gp" is only present in a CONFIG_RCU_TRACE kernel.
|
||||||
|
|
||||||
|
o "tasks" is a set of bits. The first bit is "T" if there are
|
||||||
|
currently tasks that have recently blocked within an RCU
|
||||||
|
read-side critical section, the second bit is "N" if any of the
|
||||||
|
aforementioned tasks are blocking the current RCU grace period,
|
||||||
|
and the third bit is "E" if any of the aforementioned tasks are
|
||||||
|
blocking the current expedited grace period. Each bit is "."
|
||||||
|
if the corresponding condition does not hold.
|
||||||
|
|
||||||
|
o "ttb" is a single bit. It is "B" if any of the blocked tasks
|
||||||
|
need to be priority boosted and "." otherwise.
|
||||||
|
|
||||||
|
o "btg" indicates whether boosting has been carried out during
|
||||||
|
the current grace period, with "exp" indicating that boosting
|
||||||
|
is in progress for an expedited grace period, "no" indicating
|
||||||
|
that boosting has not yet started for a normal grace period,
|
||||||
|
"begun" indicating that boosting has bebug for a normal grace
|
||||||
|
period, and "done" indicating that boosting has completed for
|
||||||
|
a normal grace period.
|
||||||
|
|
||||||
|
o "ntb" is the total number of tasks subjected to RCU priority boosting
|
||||||
|
periods since boot.
|
||||||
|
|
||||||
|
o "neb" is the number of expedited grace periods that have had
|
||||||
|
to resort to RCU priority boosting since boot.
|
||||||
|
|
||||||
|
o "nnb" is the number of normal grace periods that have had
|
||||||
|
to resort to RCU priority boosting since boot.
|
||||||
|
|
||||||
|
o "j" is the low-order 12 bits of the jiffies counter in hexadecimal.
|
||||||
|
|
||||||
|
o "bt" is the low-order 12 bits of the value that the jiffies counter
|
||||||
|
will have at the next time that boosting is scheduled to begin.
|
||||||
|
|
||||||
|
o In the line beginning with "normal balk", the fields are as follows:
|
||||||
|
|
||||||
|
o "nt" is the number of times that the system balked from
|
||||||
|
boosting because there were no blocked tasks to boost.
|
||||||
|
Note that the system will balk from boosting even if the
|
||||||
|
grace period is overdue when the currently running task
|
||||||
|
is looping within an RCU read-side critical section.
|
||||||
|
There is no point in boosting in this case, because
|
||||||
|
boosting a running task won't make it run any faster.
|
||||||
|
|
||||||
|
o "gt" is the number of times that the system balked
|
||||||
|
from boosting because, although there were blocked tasks,
|
||||||
|
none of them were preventing the current grace period
|
||||||
|
from completing.
|
||||||
|
|
||||||
|
o "bt" is the number of times that the system balked
|
||||||
|
from boosting because boosting was already in progress.
|
||||||
|
|
||||||
|
o "b" is the number of times that the system balked from
|
||||||
|
boosting because boosting had already completed for
|
||||||
|
the grace period in question.
|
||||||
|
|
||||||
|
o "ny" is the number of times that the system balked from
|
||||||
|
boosting because it was not yet time to start boosting
|
||||||
|
the grace period in question.
|
||||||
|
|
||||||
|
o "nos" is the number of times that the system balked from
|
||||||
|
boosting for inexplicable ("not otherwise specified")
|
||||||
|
reasons. This can actually happen due to races involving
|
||||||
|
increments of the jiffies counter.
|
||||||
|
|
||||||
|
o In the line beginning with "exp balk", the fields are as follows:
|
||||||
|
|
||||||
|
o "bt" is the number of times that the system balked from
|
||||||
|
boosting because there were no blocked tasks to boost.
|
||||||
|
|
||||||
|
o "nos" is the number of times that the system balked from
|
||||||
|
boosting for inexplicable ("not otherwise specified")
|
||||||
|
reasons.
|
||||||
|
|
|
@ -516,6 +516,7 @@ int main(int argc, char *argv[])
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Unknown nla_type %d\n",
|
fprintf(stderr, "Unknown nla_type %d\n",
|
||||||
na->nla_type);
|
na->nla_type);
|
||||||
|
case TASKSTATS_TYPE_NULL:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
na = (struct nlattr *) (GENLMSG_DATA(&msg) + len);
|
na = (struct nlattr *) (GENLMSG_DATA(&msg) + len);
|
||||||
|
|
|
@ -34,3 +34,5 @@ memory.txt
|
||||||
- description of the virtual memory layout
|
- description of the virtual memory layout
|
||||||
nwfpe/
|
nwfpe/
|
||||||
- NWFPE floating point emulator documentation
|
- NWFPE floating point emulator documentation
|
||||||
|
swp_emulation
|
||||||
|
- SWP/SWPB emulation handler/logging description
|
||||||
|
|
|
@ -127,3 +127,28 @@ implementation needs:
|
||||||
10. (*pdata->cpu_set_freq)(unsigned long f)
|
10. (*pdata->cpu_set_freq)(unsigned long f)
|
||||||
|
|
||||||
11. (*pdata->cpu_get_freq)(void)
|
11. (*pdata->cpu_get_freq)(void)
|
||||||
|
|
||||||
|
Customizing OPP for platform
|
||||||
|
============================
|
||||||
|
Defining CONFIG_PM should enable OPP layer for the silicon
|
||||||
|
and the registration of OPP table should take place automatically.
|
||||||
|
However, in special cases, the default OPP table may need to be
|
||||||
|
tweaked, for e.g.:
|
||||||
|
* enable default OPPs which are disabled by default, but which
|
||||||
|
could be enabled on a platform
|
||||||
|
* Disable an unsupported OPP on the platform
|
||||||
|
* Define and add a custom opp table entry
|
||||||
|
in these cases, the board file needs to do additional steps as follows:
|
||||||
|
arch/arm/mach-omapx/board-xyz.c
|
||||||
|
#include "pm.h"
|
||||||
|
....
|
||||||
|
static void __init omap_xyz_init_irq(void)
|
||||||
|
{
|
||||||
|
....
|
||||||
|
/* Initialize the default table */
|
||||||
|
omapx_opp_init();
|
||||||
|
/* Do customization to the defaults */
|
||||||
|
....
|
||||||
|
}
|
||||||
|
NOTE: omapx_opp_init will be omap3_opp_init or as required
|
||||||
|
based on the omap family.
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
Software emulation of deprecated SWP instruction (CONFIG_SWP_EMULATE)
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
ARMv6 architecture deprecates use of the SWP/SWPB instructions, and recommeds
|
||||||
|
moving to the load-locked/store-conditional instructions LDREX and STREX.
|
||||||
|
|
||||||
|
ARMv7 multiprocessing extensions introduce the ability to disable these
|
||||||
|
instructions, triggering an undefined instruction exception when executed.
|
||||||
|
Trapped instructions are emulated using an LDREX/STREX or LDREXB/STREXB
|
||||||
|
sequence. If a memory access fault (an abort) occurs, a segmentation fault is
|
||||||
|
signalled to the triggering process.
|
||||||
|
|
||||||
|
/proc/cpu/swp_emulation holds some statistics/information, including the PID of
|
||||||
|
the last process to trigger the emulation to be invocated. For example:
|
||||||
|
---
|
||||||
|
Emulated SWP: 12
|
||||||
|
Emulated SWPB: 0
|
||||||
|
Aborted SWP{B}: 1
|
||||||
|
Last process: 314
|
||||||
|
---
|
||||||
|
|
||||||
|
NOTE: when accessing uncached shared regions, LDREX/STREX rely on an external
|
||||||
|
transaction monitoring block called a global monitor to maintain update
|
||||||
|
atomicity. If your system does not implement a global monitor, this option can
|
||||||
|
cause programs that perform SWP operations to uncached memory to deadlock, as
|
||||||
|
the STREX operation will always fail.
|
||||||
|
|
|
@ -62,6 +62,10 @@ aic7*reg_print.c*
|
||||||
aic7*seq.h*
|
aic7*seq.h*
|
||||||
aicasm
|
aicasm
|
||||||
aicdb.h*
|
aicdb.h*
|
||||||
|
altivec1.c
|
||||||
|
altivec2.c
|
||||||
|
altivec4.c
|
||||||
|
altivec8.c
|
||||||
asm-offsets.h
|
asm-offsets.h
|
||||||
asm_offsets.h
|
asm_offsets.h
|
||||||
autoconf.h*
|
autoconf.h*
|
||||||
|
@ -76,6 +80,7 @@ btfixupprep
|
||||||
build
|
build
|
||||||
bvmlinux
|
bvmlinux
|
||||||
bzImage*
|
bzImage*
|
||||||
|
capflags.c
|
||||||
classlist.h*
|
classlist.h*
|
||||||
comp*.log
|
comp*.log
|
||||||
compile.h*
|
compile.h*
|
||||||
|
@ -94,6 +99,7 @@ devlist.h*
|
||||||
docproc
|
docproc
|
||||||
elf2ecoff
|
elf2ecoff
|
||||||
elfconfig.h*
|
elfconfig.h*
|
||||||
|
evergreen_reg_safe.h
|
||||||
fixdep
|
fixdep
|
||||||
flask.h
|
flask.h
|
||||||
fore200e_mkfirm
|
fore200e_mkfirm
|
||||||
|
@ -108,9 +114,16 @@ genksyms
|
||||||
*_gray256.c
|
*_gray256.c
|
||||||
ihex2fw
|
ihex2fw
|
||||||
ikconfig.h*
|
ikconfig.h*
|
||||||
|
inat-tables.c
|
||||||
initramfs_data.cpio
|
initramfs_data.cpio
|
||||||
initramfs_data.cpio.gz
|
initramfs_data.cpio.gz
|
||||||
initramfs_list
|
initramfs_list
|
||||||
|
int16.c
|
||||||
|
int1.c
|
||||||
|
int2.c
|
||||||
|
int32.c
|
||||||
|
int4.c
|
||||||
|
int8.c
|
||||||
kallsyms
|
kallsyms
|
||||||
kconfig
|
kconfig
|
||||||
keywords.c
|
keywords.c
|
||||||
|
@ -140,6 +153,7 @@ mkprep
|
||||||
mktables
|
mktables
|
||||||
mktree
|
mktree
|
||||||
modpost
|
modpost
|
||||||
|
modules.builtin
|
||||||
modules.order
|
modules.order
|
||||||
modversions.h*
|
modversions.h*
|
||||||
ncscope.*
|
ncscope.*
|
||||||
|
@ -153,14 +167,23 @@ pca200e.bin
|
||||||
pca200e_ecd.bin2
|
pca200e_ecd.bin2
|
||||||
piggy.gz
|
piggy.gz
|
||||||
piggyback
|
piggyback
|
||||||
|
piggy.S
|
||||||
pnmtologo
|
pnmtologo
|
||||||
ppc_defs.h*
|
ppc_defs.h*
|
||||||
pss_boot.h
|
pss_boot.h
|
||||||
qconf
|
qconf
|
||||||
|
r100_reg_safe.h
|
||||||
|
r200_reg_safe.h
|
||||||
|
r300_reg_safe.h
|
||||||
|
r420_reg_safe.h
|
||||||
|
r600_reg_safe.h
|
||||||
raid6altivec*.c
|
raid6altivec*.c
|
||||||
raid6int*.c
|
raid6int*.c
|
||||||
raid6tables.c
|
raid6tables.c
|
||||||
relocs
|
relocs
|
||||||
|
rn50_reg_safe.h
|
||||||
|
rs600_reg_safe.h
|
||||||
|
rv515_reg_safe.h
|
||||||
series
|
series
|
||||||
setup
|
setup
|
||||||
setup.bin
|
setup.bin
|
||||||
|
@ -169,6 +192,7 @@ sImage
|
||||||
sm_tbl*
|
sm_tbl*
|
||||||
split-include
|
split-include
|
||||||
syscalltab.h
|
syscalltab.h
|
||||||
|
tables.c
|
||||||
tags
|
tags
|
||||||
tftpboot.img
|
tftpboot.img
|
||||||
timeconst.h
|
timeconst.h
|
||||||
|
@ -190,6 +214,7 @@ vmlinux
|
||||||
vmlinux-*
|
vmlinux-*
|
||||||
vmlinux.aout
|
vmlinux.aout
|
||||||
vmlinux.lds
|
vmlinux.lds
|
||||||
|
voffset.h
|
||||||
vsyscall.lds
|
vsyscall.lds
|
||||||
vsyscall_32.lds
|
vsyscall_32.lds
|
||||||
wanxlfw.inc
|
wanxlfw.inc
|
||||||
|
@ -200,3 +225,4 @@ wakeup.elf
|
||||||
wakeup.lds
|
wakeup.lds
|
||||||
zImage*
|
zImage*
|
||||||
zconf.hash.c
|
zconf.hash.c
|
||||||
|
zoffset.h
|
||||||
|
|
|
@ -1,129 +0,0 @@
|
||||||
|
|
||||||
Device Interfaces
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Device interfaces are the logical interfaces of device classes that correlate
|
|
||||||
directly to userspace interfaces, like device nodes.
|
|
||||||
|
|
||||||
Each device class may have multiple interfaces through which you can
|
|
||||||
access the same device. An input device may support the mouse interface,
|
|
||||||
the 'evdev' interface, and the touchscreen interface. A SCSI disk would
|
|
||||||
support the disk interface, the SCSI generic interface, and possibly a raw
|
|
||||||
device interface.
|
|
||||||
|
|
||||||
Device interfaces are registered with the class they belong to. As devices
|
|
||||||
are added to the class, they are added to each interface registered with
|
|
||||||
the class. The interface is responsible for determining whether the device
|
|
||||||
supports the interface or not.
|
|
||||||
|
|
||||||
|
|
||||||
Programming Interface
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
struct device_interface {
|
|
||||||
char * name;
|
|
||||||
rwlock_t lock;
|
|
||||||
u32 devnum;
|
|
||||||
struct device_class * devclass;
|
|
||||||
|
|
||||||
struct list_head node;
|
|
||||||
struct driver_dir_entry dir;
|
|
||||||
|
|
||||||
int (*add_device)(struct device *);
|
|
||||||
int (*add_device)(struct intf_data *);
|
|
||||||
};
|
|
||||||
|
|
||||||
int interface_register(struct device_interface *);
|
|
||||||
void interface_unregister(struct device_interface *);
|
|
||||||
|
|
||||||
|
|
||||||
An interface must specify the device class it belongs to. It is added
|
|
||||||
to that class's list of interfaces on registration.
|
|
||||||
|
|
||||||
|
|
||||||
Interfaces can be added to a device class at any time. Whenever it is
|
|
||||||
added, each device in the class is passed to the interface's
|
|
||||||
add_device callback. When an interface is removed, each device is
|
|
||||||
removed from the interface.
|
|
||||||
|
|
||||||
|
|
||||||
Devices
|
|
||||||
~~~~~~~
|
|
||||||
Once a device is added to a device class, it is added to each
|
|
||||||
interface that is registered with the device class. The class
|
|
||||||
is expected to place a class-specific data structure in
|
|
||||||
struct device::class_data. The interface can use that (along with
|
|
||||||
other fields of struct device) to determine whether or not the driver
|
|
||||||
and/or device support that particular interface.
|
|
||||||
|
|
||||||
|
|
||||||
Data
|
|
||||||
~~~~
|
|
||||||
|
|
||||||
struct intf_data {
|
|
||||||
struct list_head node;
|
|
||||||
struct device_interface * intf;
|
|
||||||
struct device * dev;
|
|
||||||
u32 intf_num;
|
|
||||||
};
|
|
||||||
|
|
||||||
int interface_add_data(struct interface_data *);
|
|
||||||
|
|
||||||
The interface is responsible for allocating and initializing a struct
|
|
||||||
intf_data and calling interface_add_data() to add it to the device's list
|
|
||||||
of interfaces it belongs to. This list will be iterated over when the device
|
|
||||||
is removed from the class (instead of all possible interfaces for a class).
|
|
||||||
This structure should probably be embedded in whatever per-device data
|
|
||||||
structure the interface is allocating anyway.
|
|
||||||
|
|
||||||
Devices are enumerated within the interface. This happens in interface_add_data()
|
|
||||||
and the enumerated value is stored in the struct intf_data for that device.
|
|
||||||
|
|
||||||
sysfs
|
|
||||||
~~~~~
|
|
||||||
Each interface is given a directory in the directory of the device
|
|
||||||
class it belongs to:
|
|
||||||
|
|
||||||
Interfaces get a directory in the class's directory as well:
|
|
||||||
|
|
||||||
class/
|
|
||||||
`-- input
|
|
||||||
|-- devices
|
|
||||||
|-- drivers
|
|
||||||
|-- mouse
|
|
||||||
`-- evdev
|
|
||||||
|
|
||||||
When a device is added to the interface, a symlink is created that points
|
|
||||||
to the device's directory in the physical hierarchy:
|
|
||||||
|
|
||||||
class/
|
|
||||||
`-- input
|
|
||||||
|-- devices
|
|
||||||
| `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/
|
|
||||||
|-- drivers
|
|
||||||
| `-- usb:usb_mouse -> ../../../bus/drivers/usb_mouse/
|
|
||||||
|-- mouse
|
|
||||||
| `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/
|
|
||||||
`-- evdev
|
|
||||||
`-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/
|
|
||||||
|
|
||||||
|
|
||||||
Future Plans
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
A device interface is correlated directly with a userspace interface
|
|
||||||
for a device, specifically a device node. For instance, a SCSI disk
|
|
||||||
exposes at least two interfaces to userspace: the standard SCSI disk
|
|
||||||
interface and the SCSI generic interface. It might also export a raw
|
|
||||||
device interface.
|
|
||||||
|
|
||||||
Many interfaces have a major number associated with them and each
|
|
||||||
device gets a minor number. Or, multiple interfaces might share one
|
|
||||||
major number, and each will receive a range of minor numbers (like in
|
|
||||||
the case of input devices).
|
|
||||||
|
|
||||||
These major and minor numbers could be stored in the interface
|
|
||||||
structure. Major and minor allocations could happen when the interface
|
|
||||||
is registered with the class, or via a helper function.
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ and run
|
||||||
Other LG firmware can be extracted manually from US280D.sys
|
Other LG firmware can be extracted manually from US280D.sys
|
||||||
only found in windows/system32/driver.
|
only found in windows/system32/driver.
|
||||||
|
|
||||||
dd if=US280D.sys ibs=1 skip=42616 count=3668 of=dvb-usb-lme2510-lg.fw
|
dd if=US280D.sys ibs=1 skip=42360 count=3924 of=dvb-usb-lme2510-lg.fw
|
||||||
|
|
||||||
for DM04 LME2510C (LG Tuner)
|
for DM04 LME2510C (LG Tuner)
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
|
@ -196,7 +196,7 @@ csrow3.
|
||||||
The representation of the above is reflected in the directory tree
|
The representation of the above is reflected in the directory tree
|
||||||
in EDAC's sysfs interface. Starting in directory
|
in EDAC's sysfs interface. Starting in directory
|
||||||
/sys/devices/system/edac/mc each memory controller will be represented
|
/sys/devices/system/edac/mc each memory controller will be represented
|
||||||
by its own 'mcX' directory, where 'X" is the index of the MC.
|
by its own 'mcX' directory, where 'X' is the index of the MC.
|
||||||
|
|
||||||
|
|
||||||
..../edac/mc/
|
..../edac/mc/
|
||||||
|
@ -207,7 +207,7 @@ by its own 'mcX' directory, where 'X" is the index of the MC.
|
||||||
....
|
....
|
||||||
|
|
||||||
Under each 'mcX' directory each 'csrowX' is again represented by a
|
Under each 'mcX' directory each 'csrowX' is again represented by a
|
||||||
'csrowX', where 'X" is the csrow index:
|
'csrowX', where 'X' is the csrow index:
|
||||||
|
|
||||||
|
|
||||||
.../mc/mc0/
|
.../mc/mc0/
|
||||||
|
@ -232,7 +232,7 @@ EDAC control and attribute files.
|
||||||
|
|
||||||
|
|
||||||
In 'mcX' directories are EDAC control and attribute files for
|
In 'mcX' directories are EDAC control and attribute files for
|
||||||
this 'X" instance of the memory controllers:
|
this 'X' instance of the memory controllers:
|
||||||
|
|
||||||
|
|
||||||
Counter reset control file:
|
Counter reset control file:
|
||||||
|
@ -343,7 +343,7 @@ Sdram memory scrubbing rate:
|
||||||
'csrowX' DIRECTORIES
|
'csrowX' DIRECTORIES
|
||||||
|
|
||||||
In the 'csrowX' directories are EDAC control and attribute files for
|
In the 'csrowX' directories are EDAC control and attribute files for
|
||||||
this 'X" instance of csrow:
|
this 'X' instance of csrow:
|
||||||
|
|
||||||
|
|
||||||
Total Uncorrectable Errors count attribute file:
|
Total Uncorrectable Errors count attribute file:
|
||||||
|
|
|
@ -97,36 +97,38 @@ Who: Pavel Machek <pavel@ucw.cz>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: Video4Linux API 1 ioctls and from Video devices.
|
|
||||||
When: kernel 2.6.38
|
|
||||||
Files: include/linux/videodev.h
|
|
||||||
Check: include/linux/videodev.h
|
|
||||||
Why: V4L1 AP1 was replaced by V4L2 API during migration from 2.4 to 2.6
|
|
||||||
series. The old API have lots of drawbacks and don't provide enough
|
|
||||||
means to work with all video and audio standards. The newer API is
|
|
||||||
already available on the main drivers and should be used instead.
|
|
||||||
Newer drivers should use v4l_compat_translate_ioctl function to handle
|
|
||||||
old calls, replacing to newer ones.
|
|
||||||
Decoder iocts are using internally to allow video drivers to
|
|
||||||
communicate with video decoders. This should also be improved to allow
|
|
||||||
V4L2 calls being translated into compatible internal ioctls.
|
|
||||||
Compatibility ioctls will be provided, for a while, via
|
|
||||||
v4l1-compat module.
|
|
||||||
Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: Video4Linux obsolete drivers using V4L1 API
|
What: Video4Linux obsolete drivers using V4L1 API
|
||||||
When: kernel 2.6.38
|
When: kernel 2.6.39
|
||||||
Files: drivers/staging/cpia/* drivers/staging/stradis/*
|
Files: drivers/staging/se401/* drivers/staging/usbvideo/*
|
||||||
Check: drivers/staging/cpia/cpia.c drivers/staging/stradis/stradis.c
|
Check: drivers/staging/se401/se401.c drivers/staging/usbvideo/usbvideo.c
|
||||||
Why: There are some drivers still using V4L1 API, despite all efforts we've done
|
Why: There are some drivers still using V4L1 API, despite all efforts we've done
|
||||||
to migrate. Those drivers are for obsolete hardware that the old maintainer
|
to migrate. Those drivers are for obsolete hardware that the old maintainer
|
||||||
didn't care (or not have the hardware anymore), and that no other developer
|
didn't care (or not have the hardware anymore), and that no other developer
|
||||||
could find any hardware to buy. They probably have no practical usage today,
|
could find any hardware to buy. They probably have no practical usage today,
|
||||||
and people with such old hardware could probably keep using an older version
|
and people with such old hardware could probably keep using an older version
|
||||||
of the kernel. Those drivers will be moved to staging on 2.6.37 and, if nobody
|
of the kernel. Those drivers will be moved to staging on 2.6.38 and, if nobody
|
||||||
care enough to port and test them with V4L2 API, they'll be removed on 2.6.38.
|
cares enough to port and test them with V4L2 API, they'll be removed on 2.6.39.
|
||||||
|
Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
What: Video4Linux: Remove obsolete ioctl's
|
||||||
|
When: kernel 2.6.39
|
||||||
|
Files: include/media/videodev2.h
|
||||||
|
Why: Some ioctl's were defined wrong on 2.6.2 and 2.6.6, using the wrong
|
||||||
|
type of R/W arguments. They were fixed, but the old ioctl names are
|
||||||
|
still there, maintained to avoid breaking binary compatibility:
|
||||||
|
#define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int)
|
||||||
|
#define VIDIOC_S_PARM_OLD _IOW('V', 22, struct v4l2_streamparm)
|
||||||
|
#define VIDIOC_S_CTRL_OLD _IOW('V', 28, struct v4l2_control)
|
||||||
|
#define VIDIOC_G_AUDIO_OLD _IOWR('V', 33, struct v4l2_audio)
|
||||||
|
#define VIDIOC_G_AUDOUT_OLD _IOWR('V', 49, struct v4l2_audioout)
|
||||||
|
#define VIDIOC_CROPCAP_OLD _IOR('V', 58, struct v4l2_cropcap)
|
||||||
|
There's no sense on preserving those forever, as it is very doubtful
|
||||||
|
that someone would try to use a such old binary with a modern kernel.
|
||||||
|
Removing them will allow us to remove some magic done at the V4L ioctl
|
||||||
|
handler.
|
||||||
|
|
||||||
Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
@ -564,3 +566,13 @@ Why: This field is deprecated. I2C device drivers shouldn't change their
|
||||||
Who: Jean Delvare <khali@linux-fr.org>
|
Who: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
What: cancel_rearming_delayed_work[queue]()
|
||||||
|
When: 2.6.39
|
||||||
|
|
||||||
|
Why: The functions have been superceded by cancel_delayed_work_sync()
|
||||||
|
quite some time ago. The conversion is trivial and there is no
|
||||||
|
in-kernel user left.
|
||||||
|
Who: Tejun Heo <tj@kernel.org>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
|
@ -9,23 +9,25 @@ be able to use diff(1).
|
||||||
|
|
||||||
--------------------------- dentry_operations --------------------------
|
--------------------------- dentry_operations --------------------------
|
||||||
prototypes:
|
prototypes:
|
||||||
int (*d_revalidate)(struct dentry *, int);
|
int (*d_revalidate)(struct dentry *, struct nameidata *);
|
||||||
int (*d_hash) (struct dentry *, struct qstr *);
|
int (*d_hash)(const struct dentry *, const struct inode *,
|
||||||
int (*d_compare) (struct dentry *, struct qstr *, struct qstr *);
|
struct qstr *);
|
||||||
|
int (*d_compare)(const struct dentry *, const struct inode *,
|
||||||
|
const struct dentry *, const struct inode *,
|
||||||
|
unsigned int, const char *, const struct qstr *);
|
||||||
int (*d_delete)(struct dentry *);
|
int (*d_delete)(struct dentry *);
|
||||||
void (*d_release)(struct dentry *);
|
void (*d_release)(struct dentry *);
|
||||||
void (*d_iput)(struct dentry *, struct inode *);
|
void (*d_iput)(struct dentry *, struct inode *);
|
||||||
char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
|
char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
none have BKL
|
rename_lock ->d_lock may block rcu-walk
|
||||||
dcache_lock rename_lock ->d_lock may block
|
d_revalidate: no no yes (ref-walk) maybe
|
||||||
d_revalidate: no no no yes
|
d_hash no no no maybe
|
||||||
d_hash no no no yes
|
d_compare: yes no no maybe
|
||||||
d_compare: no yes no no
|
d_delete: no yes no no
|
||||||
d_delete: yes no yes no
|
d_release: no no yes no
|
||||||
d_release: no no no yes
|
d_iput: no no yes no
|
||||||
d_iput: no no no yes
|
|
||||||
d_dname: no no no no
|
d_dname: no no no no
|
||||||
|
|
||||||
--------------------------- inode_operations ---------------------------
|
--------------------------- inode_operations ---------------------------
|
||||||
|
@ -42,18 +44,23 @@ ata *);
|
||||||
int (*rename) (struct inode *, struct dentry *,
|
int (*rename) (struct inode *, struct dentry *,
|
||||||
struct inode *, struct dentry *);
|
struct inode *, struct dentry *);
|
||||||
int (*readlink) (struct dentry *, char __user *,int);
|
int (*readlink) (struct dentry *, char __user *,int);
|
||||||
int (*follow_link) (struct dentry *, struct nameidata *);
|
void * (*follow_link) (struct dentry *, struct nameidata *);
|
||||||
|
void (*put_link) (struct dentry *, struct nameidata *, void *);
|
||||||
void (*truncate) (struct inode *);
|
void (*truncate) (struct inode *);
|
||||||
int (*permission) (struct inode *, int, struct nameidata *);
|
int (*permission) (struct inode *, int, unsigned int);
|
||||||
|
int (*check_acl)(struct inode *, int, unsigned int);
|
||||||
int (*setattr) (struct dentry *, struct iattr *);
|
int (*setattr) (struct dentry *, struct iattr *);
|
||||||
int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
|
int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
|
||||||
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
|
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
|
||||||
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
||||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||||
int (*removexattr) (struct dentry *, const char *);
|
int (*removexattr) (struct dentry *, const char *);
|
||||||
|
void (*truncate_range)(struct inode *, loff_t, loff_t);
|
||||||
|
long (*fallocate)(struct inode *inode, int mode, loff_t offset, loff_t len);
|
||||||
|
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
all may block, none have BKL
|
all may block
|
||||||
i_mutex(inode)
|
i_mutex(inode)
|
||||||
lookup: yes
|
lookup: yes
|
||||||
create: yes
|
create: yes
|
||||||
|
@ -66,19 +73,24 @@ rmdir: yes (both) (see below)
|
||||||
rename: yes (all) (see below)
|
rename: yes (all) (see below)
|
||||||
readlink: no
|
readlink: no
|
||||||
follow_link: no
|
follow_link: no
|
||||||
|
put_link: no
|
||||||
truncate: yes (see below)
|
truncate: yes (see below)
|
||||||
setattr: yes
|
setattr: yes
|
||||||
permission: no
|
permission: no (may not block if called in rcu-walk mode)
|
||||||
|
check_acl: no
|
||||||
getattr: no
|
getattr: no
|
||||||
setxattr: yes
|
setxattr: yes
|
||||||
getxattr: no
|
getxattr: no
|
||||||
listxattr: no
|
listxattr: no
|
||||||
removexattr: yes
|
removexattr: yes
|
||||||
|
truncate_range: yes
|
||||||
|
fallocate: no
|
||||||
|
fiemap: no
|
||||||
Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
|
Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
|
||||||
victim.
|
victim.
|
||||||
cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
|
cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
|
||||||
->truncate() is never called directly - it's a callback, not a
|
->truncate() is never called directly - it's a callback, not a
|
||||||
method. It's called by vmtruncate() - library function normally used by
|
method. It's called by vmtruncate() - deprecated library function used by
|
||||||
->setattr(). Locking information above applies to that call (i.e. is
|
->setattr(). Locking information above applies to that call (i.e. is
|
||||||
inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been
|
inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been
|
||||||
passed).
|
passed).
|
||||||
|
@ -91,7 +103,7 @@ prototypes:
|
||||||
struct inode *(*alloc_inode)(struct super_block *sb);
|
struct inode *(*alloc_inode)(struct super_block *sb);
|
||||||
void (*destroy_inode)(struct inode *);
|
void (*destroy_inode)(struct inode *);
|
||||||
void (*dirty_inode) (struct inode *);
|
void (*dirty_inode) (struct inode *);
|
||||||
int (*write_inode) (struct inode *, int);
|
int (*write_inode) (struct inode *, struct writeback_control *wbc);
|
||||||
int (*drop_inode) (struct inode *);
|
int (*drop_inode) (struct inode *);
|
||||||
void (*evict_inode) (struct inode *);
|
void (*evict_inode) (struct inode *);
|
||||||
void (*put_super) (struct super_block *);
|
void (*put_super) (struct super_block *);
|
||||||
|
@ -105,10 +117,10 @@ prototypes:
|
||||||
int (*show_options)(struct seq_file *, struct vfsmount *);
|
int (*show_options)(struct seq_file *, struct vfsmount *);
|
||||||
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
|
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
|
||||||
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
|
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
|
||||||
|
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
All may block [not true, see below]
|
All may block [not true, see below]
|
||||||
None have BKL
|
|
||||||
s_umount
|
s_umount
|
||||||
alloc_inode:
|
alloc_inode:
|
||||||
destroy_inode:
|
destroy_inode:
|
||||||
|
@ -127,6 +139,7 @@ umount_begin: no
|
||||||
show_options: no (namespace_sem)
|
show_options: no (namespace_sem)
|
||||||
quota_read: no (see below)
|
quota_read: no (see below)
|
||||||
quota_write: no (see below)
|
quota_write: no (see below)
|
||||||
|
bdev_try_to_free_page: no (see below)
|
||||||
|
|
||||||
->statfs() has s_umount (shared) when called by ustat(2) (native or
|
->statfs() has s_umount (shared) when called by ustat(2) (native or
|
||||||
compat), but that's an accident of bad API; s_umount is used to pin
|
compat), but that's an accident of bad API; s_umount is used to pin
|
||||||
|
@ -139,19 +152,25 @@ be the only ones operating on the quota file by the quota code (via
|
||||||
dqio_sem) (unless an admin really wants to screw up something and
|
dqio_sem) (unless an admin really wants to screw up something and
|
||||||
writes to quota files with quotas on). For other details about locking
|
writes to quota files with quotas on). For other details about locking
|
||||||
see also dquot_operations section.
|
see also dquot_operations section.
|
||||||
|
->bdev_try_to_free_page is called from the ->releasepage handler of
|
||||||
|
the block device inode. See there for more details.
|
||||||
|
|
||||||
--------------------------- file_system_type ---------------------------
|
--------------------------- file_system_type ---------------------------
|
||||||
prototypes:
|
prototypes:
|
||||||
int (*get_sb) (struct file_system_type *, int,
|
int (*get_sb) (struct file_system_type *, int,
|
||||||
const char *, void *, struct vfsmount *);
|
const char *, void *, struct vfsmount *);
|
||||||
|
struct dentry *(*mount) (struct file_system_type *, int,
|
||||||
|
const char *, void *);
|
||||||
void (*kill_sb) (struct super_block *);
|
void (*kill_sb) (struct super_block *);
|
||||||
locking rules:
|
locking rules:
|
||||||
may block BKL
|
may block
|
||||||
get_sb yes no
|
get_sb yes
|
||||||
kill_sb yes no
|
mount yes
|
||||||
|
kill_sb yes
|
||||||
|
|
||||||
->get_sb() returns error or 0 with locked superblock attached to the vfsmount
|
->get_sb() returns error or 0 with locked superblock attached to the vfsmount
|
||||||
(exclusive on ->s_umount).
|
(exclusive on ->s_umount).
|
||||||
|
->mount() returns ERR_PTR or the root dentry.
|
||||||
->kill_sb() takes a write-locked superblock, does all shutdown work on it,
|
->kill_sb() takes a write-locked superblock, does all shutdown work on it,
|
||||||
unlocks and drops the reference.
|
unlocks and drops the reference.
|
||||||
|
|
||||||
|
@ -173,28 +192,38 @@ prototypes:
|
||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
int (*invalidatepage) (struct page *, unsigned long);
|
int (*invalidatepage) (struct page *, unsigned long);
|
||||||
int (*releasepage) (struct page *, int);
|
int (*releasepage) (struct page *, int);
|
||||||
|
void (*freepage)(struct page *);
|
||||||
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||||
loff_t offset, unsigned long nr_segs);
|
loff_t offset, unsigned long nr_segs);
|
||||||
int (*launder_page) (struct page *);
|
int (*get_xip_mem)(struct address_space *, pgoff_t, int, void **,
|
||||||
|
unsigned long *);
|
||||||
|
int (*migratepage)(struct address_space *, struct page *, struct page *);
|
||||||
|
int (*launder_page)(struct page *);
|
||||||
|
int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long);
|
||||||
|
int (*error_remove_page)(struct address_space *, struct page *);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
All except set_page_dirty may block
|
All except set_page_dirty and freepage may block
|
||||||
|
|
||||||
BKL PageLocked(page) i_mutex
|
PageLocked(page) i_mutex
|
||||||
writepage: no yes, unlocks (see below)
|
writepage: yes, unlocks (see below)
|
||||||
readpage: no yes, unlocks
|
readpage: yes, unlocks
|
||||||
sync_page: no maybe
|
sync_page: maybe
|
||||||
writepages: no
|
writepages:
|
||||||
set_page_dirty no no
|
set_page_dirty no
|
||||||
readpages: no
|
readpages:
|
||||||
write_begin: no locks the page yes
|
write_begin: locks the page yes
|
||||||
write_end: no yes, unlocks yes
|
write_end: yes, unlocks yes
|
||||||
perform_write: no n/a yes
|
bmap:
|
||||||
bmap: no
|
invalidatepage: yes
|
||||||
invalidatepage: no yes
|
releasepage: yes
|
||||||
releasepage: no yes
|
freepage: yes
|
||||||
direct_IO: no
|
direct_IO:
|
||||||
launder_page: no yes
|
get_xip_mem: maybe
|
||||||
|
migratepage: yes (both)
|
||||||
|
launder_page: yes
|
||||||
|
is_partially_uptodate: yes
|
||||||
|
error_remove_page: yes
|
||||||
|
|
||||||
->write_begin(), ->write_end(), ->sync_page() and ->readpage()
|
->write_begin(), ->write_end(), ->sync_page() and ->readpage()
|
||||||
may be called from the request handler (/dev/loop).
|
may be called from the request handler (/dev/loop).
|
||||||
|
@ -274,9 +303,8 @@ under spinlock (it cannot block) and is sometimes called with the page
|
||||||
not locked.
|
not locked.
|
||||||
|
|
||||||
->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some
|
->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some
|
||||||
filesystems and by the swapper. The latter will eventually go away. All
|
filesystems and by the swapper. The latter will eventually go away. Please,
|
||||||
instances do not actually need the BKL. Please, keep it that way and don't
|
keep it that way and don't breed new callers.
|
||||||
breed new callers.
|
|
||||||
|
|
||||||
->invalidatepage() is called when the filesystem must attempt to drop
|
->invalidatepage() is called when the filesystem must attempt to drop
|
||||||
some or all of the buffers from the page when it is being truncated. It
|
some or all of the buffers from the page when it is being truncated. It
|
||||||
|
@ -288,53 +316,46 @@ buffers from the page in preparation for freeing it. It returns zero to
|
||||||
indicate that the buffers are (or may be) freeable. If ->releasepage is zero,
|
indicate that the buffers are (or may be) freeable. If ->releasepage is zero,
|
||||||
the kernel assumes that the fs has no private interest in the buffers.
|
the kernel assumes that the fs has no private interest in the buffers.
|
||||||
|
|
||||||
|
->freepage() is called when the kernel is done dropping the page
|
||||||
|
from the page cache.
|
||||||
|
|
||||||
->launder_page() may be called prior to releasing a page if
|
->launder_page() may be called prior to releasing a page if
|
||||||
it is still found to be dirty. It returns zero if the page was successfully
|
it is still found to be dirty. It returns zero if the page was successfully
|
||||||
cleaned, or an error value if not. Note that in order to prevent the page
|
cleaned, or an error value if not. Note that in order to prevent the page
|
||||||
getting mapped back in and redirtied, it needs to be kept locked
|
getting mapped back in and redirtied, it needs to be kept locked
|
||||||
across the entire operation.
|
across the entire operation.
|
||||||
|
|
||||||
Note: currently almost all instances of address_space methods are
|
|
||||||
using BKL for internal serialization and that's one of the worst sources
|
|
||||||
of contention. Normally they are calling library functions (in fs/buffer.c)
|
|
||||||
and pass foo_get_block() as a callback (on local block-based filesystems,
|
|
||||||
indeed). BKL is not needed for library stuff and is usually taken by
|
|
||||||
foo_get_block(). It's an overkill, since block bitmaps can be protected by
|
|
||||||
internal fs locking and real critical areas are much smaller than the areas
|
|
||||||
filesystems protect now.
|
|
||||||
|
|
||||||
----------------------- file_lock_operations ------------------------------
|
----------------------- file_lock_operations ------------------------------
|
||||||
prototypes:
|
prototypes:
|
||||||
void (*fl_insert)(struct file_lock *); /* lock insertion callback */
|
|
||||||
void (*fl_remove)(struct file_lock *); /* lock removal callback */
|
|
||||||
void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
|
void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
|
||||||
void (*fl_release_private)(struct file_lock *);
|
void (*fl_release_private)(struct file_lock *);
|
||||||
|
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
BKL may block
|
file_lock_lock may block
|
||||||
fl_insert: yes no
|
fl_copy_lock: yes no
|
||||||
fl_remove: yes no
|
fl_release_private: maybe no
|
||||||
fl_copy_lock: yes no
|
|
||||||
fl_release_private: yes yes
|
|
||||||
|
|
||||||
----------------------- lock_manager_operations ---------------------------
|
----------------------- lock_manager_operations ---------------------------
|
||||||
prototypes:
|
prototypes:
|
||||||
int (*fl_compare_owner)(struct file_lock *, struct file_lock *);
|
int (*fl_compare_owner)(struct file_lock *, struct file_lock *);
|
||||||
void (*fl_notify)(struct file_lock *); /* unblock callback */
|
void (*fl_notify)(struct file_lock *); /* unblock callback */
|
||||||
|
int (*fl_grant)(struct file_lock *, struct file_lock *, int);
|
||||||
void (*fl_release_private)(struct file_lock *);
|
void (*fl_release_private)(struct file_lock *);
|
||||||
void (*fl_break)(struct file_lock *); /* break_lease callback */
|
void (*fl_break)(struct file_lock *); /* break_lease callback */
|
||||||
|
int (*fl_mylease)(struct file_lock *, struct file_lock *);
|
||||||
|
int (*fl_change)(struct file_lock **, int);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
BKL may block
|
file_lock_lock may block
|
||||||
fl_compare_owner: yes no
|
fl_compare_owner: yes no
|
||||||
fl_notify: yes no
|
fl_notify: yes no
|
||||||
fl_release_private: yes yes
|
fl_grant: no no
|
||||||
fl_break: yes no
|
fl_release_private: maybe no
|
||||||
|
fl_break: yes no
|
||||||
|
fl_mylease: yes no
|
||||||
|
fl_change yes no
|
||||||
|
|
||||||
Currently only NFSD and NLM provide instances of this class. None of the
|
|
||||||
them block. If you have out-of-tree instances - please, show up. Locking
|
|
||||||
in that area will change.
|
|
||||||
--------------------------- buffer_head -----------------------------------
|
--------------------------- buffer_head -----------------------------------
|
||||||
prototypes:
|
prototypes:
|
||||||
void (*b_end_io)(struct buffer_head *bh, int uptodate);
|
void (*b_end_io)(struct buffer_head *bh, int uptodate);
|
||||||
|
@ -359,17 +380,17 @@ prototypes:
|
||||||
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
|
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
BKL bd_mutex
|
bd_mutex
|
||||||
open: no yes
|
open: yes
|
||||||
release: no yes
|
release: yes
|
||||||
ioctl: no no
|
ioctl: no
|
||||||
compat_ioctl: no no
|
compat_ioctl: no
|
||||||
direct_access: no no
|
direct_access: no
|
||||||
media_changed: no no
|
media_changed: no
|
||||||
unlock_native_capacity: no no
|
unlock_native_capacity: no
|
||||||
revalidate_disk: no no
|
revalidate_disk: no
|
||||||
getgeo: no no
|
getgeo: no
|
||||||
swap_slot_free_notify: no no (see below)
|
swap_slot_free_notify: no (see below)
|
||||||
|
|
||||||
media_changed, unlock_native_capacity and revalidate_disk are called only from
|
media_changed, unlock_native_capacity and revalidate_disk are called only from
|
||||||
check_disk_change().
|
check_disk_change().
|
||||||
|
@ -408,34 +429,21 @@ prototypes:
|
||||||
unsigned long (*get_unmapped_area)(struct file *, unsigned long,
|
unsigned long (*get_unmapped_area)(struct file *, unsigned long,
|
||||||
unsigned long, unsigned long, unsigned long);
|
unsigned long, unsigned long, unsigned long);
|
||||||
int (*check_flags)(int);
|
int (*check_flags)(int);
|
||||||
|
int (*flock) (struct file *, int, struct file_lock *);
|
||||||
|
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *,
|
||||||
|
size_t, unsigned int);
|
||||||
|
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *,
|
||||||
|
size_t, unsigned int);
|
||||||
|
int (*setlease)(struct file *, long, struct file_lock **);
|
||||||
};
|
};
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
All may block.
|
All may block except for ->setlease.
|
||||||
BKL
|
No VFS locks held on entry except for ->fsync and ->setlease.
|
||||||
llseek: no (see below)
|
|
||||||
read: no
|
->fsync() has i_mutex on inode.
|
||||||
aio_read: no
|
|
||||||
write: no
|
->setlease has the file_list_lock held and must not sleep.
|
||||||
aio_write: no
|
|
||||||
readdir: no
|
|
||||||
poll: no
|
|
||||||
unlocked_ioctl: no
|
|
||||||
compat_ioctl: no
|
|
||||||
mmap: no
|
|
||||||
open: no
|
|
||||||
flush: no
|
|
||||||
release: no
|
|
||||||
fsync: no (see below)
|
|
||||||
aio_fsync: no
|
|
||||||
fasync: no
|
|
||||||
lock: yes
|
|
||||||
readv: no
|
|
||||||
writev: no
|
|
||||||
sendfile: no
|
|
||||||
sendpage: no
|
|
||||||
get_unmapped_area: no
|
|
||||||
check_flags: no
|
|
||||||
|
|
||||||
->llseek() locking has moved from llseek to the individual llseek
|
->llseek() locking has moved from llseek to the individual llseek
|
||||||
implementations. If your fs is not using generic_file_llseek, you
|
implementations. If your fs is not using generic_file_llseek, you
|
||||||
|
@ -445,17 +453,10 @@ mutex or just to use i_size_read() instead.
|
||||||
Note: this does not protect the file->f_pos against concurrent modifications
|
Note: this does not protect the file->f_pos against concurrent modifications
|
||||||
since this is something the userspace has to take care about.
|
since this is something the userspace has to take care about.
|
||||||
|
|
||||||
Note: ext2_release() was *the* source of contention on fs-intensive
|
->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags.
|
||||||
loads and dropping BKL on ->release() helps to get rid of that (we still
|
Most instances call fasync_helper(), which does that maintenance, so it's
|
||||||
grab BKL for cases when we close a file that had been opened r/w, but that
|
not normally something one needs to worry about. Return values > 0 will be
|
||||||
can and should be done using the internal locking with smaller critical areas).
|
mapped to zero in the VFS layer.
|
||||||
Current worst offender is ext2_get_block()...
|
|
||||||
|
|
||||||
->fasync() is called without BKL protection, and is responsible for
|
|
||||||
maintaining the FASYNC bit in filp->f_flags. Most instances call
|
|
||||||
fasync_helper(), which does that maintenance, so it's not normally
|
|
||||||
something one needs to worry about. Return values > 0 will be mapped to
|
|
||||||
zero in the VFS layer.
|
|
||||||
|
|
||||||
->readdir() and ->ioctl() on directories must be changed. Ideally we would
|
->readdir() and ->ioctl() on directories must be changed. Ideally we would
|
||||||
move ->readdir() to inode_operations and use a separate method for directory
|
move ->readdir() to inode_operations and use a separate method for directory
|
||||||
|
@ -466,8 +467,6 @@ components. And there are other reasons why the current interface is a mess...
|
||||||
->read on directories probably must go away - we should just enforce -EISDIR
|
->read on directories probably must go away - we should just enforce -EISDIR
|
||||||
in sys_read() and friends.
|
in sys_read() and friends.
|
||||||
|
|
||||||
->fsync() has i_mutex on inode.
|
|
||||||
|
|
||||||
--------------------------- dquot_operations -------------------------------
|
--------------------------- dquot_operations -------------------------------
|
||||||
prototypes:
|
prototypes:
|
||||||
int (*write_dquot) (struct dquot *);
|
int (*write_dquot) (struct dquot *);
|
||||||
|
@ -502,12 +501,12 @@ prototypes:
|
||||||
int (*access)(struct vm_area_struct *, unsigned long, void*, int, int);
|
int (*access)(struct vm_area_struct *, unsigned long, void*, int, int);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
BKL mmap_sem PageLocked(page)
|
mmap_sem PageLocked(page)
|
||||||
open: no yes
|
open: yes
|
||||||
close: no yes
|
close: yes
|
||||||
fault: no yes can return with page locked
|
fault: yes can return with page locked
|
||||||
page_mkwrite: no yes can return with page locked
|
page_mkwrite: yes can return with page locked
|
||||||
access: no yes
|
access: yes
|
||||||
|
|
||||||
->fault() is called when a previously not present pte is about
|
->fault() is called when a previously not present pte is about
|
||||||
to be faulted in. The filesystem must find and return the page associated
|
to be faulted in. The filesystem must find and return the page associated
|
||||||
|
@ -534,6 +533,3 @@ VM_IO | VM_PFNMAP VMAs.
|
||||||
|
|
||||||
(if you break something or notice that it is broken and do not fix it yourself
|
(if you break something or notice that it is broken and do not fix it yourself
|
||||||
- at least put it here)
|
- at least put it here)
|
||||||
|
|
||||||
ipc/shm.c::shm_delete() - may need BKL.
|
|
||||||
->read() and ->write() in many drivers are (probably) missing BKL.
|
|
||||||
|
|
|
@ -1,174 +0,0 @@
|
||||||
RCU-based dcache locking model
|
|
||||||
==============================
|
|
||||||
|
|
||||||
On many workloads, the most common operation on dcache is to look up a
|
|
||||||
dentry, given a parent dentry and the name of the child. Typically,
|
|
||||||
for every open(), stat() etc., the dentry corresponding to the
|
|
||||||
pathname will be looked up by walking the tree starting with the first
|
|
||||||
component of the pathname and using that dentry along with the next
|
|
||||||
component to look up the next level and so on. Since it is a frequent
|
|
||||||
operation for workloads like multiuser environments and web servers,
|
|
||||||
it is important to optimize this path.
|
|
||||||
|
|
||||||
Prior to 2.5.10, dcache_lock was acquired in d_lookup and thus in
|
|
||||||
every component during path look-up. Since 2.5.10 onwards, fast-walk
|
|
||||||
algorithm changed this by holding the dcache_lock at the beginning and
|
|
||||||
walking as many cached path component dentries as possible. This
|
|
||||||
significantly decreases the number of acquisition of
|
|
||||||
dcache_lock. However it also increases the lock hold time
|
|
||||||
significantly and affects performance in large SMP machines. Since
|
|
||||||
2.5.62 kernel, dcache has been using a new locking model that uses RCU
|
|
||||||
to make dcache look-up lock-free.
|
|
||||||
|
|
||||||
The current dcache locking model is not very different from the
|
|
||||||
existing dcache locking model. Prior to 2.5.62 kernel, dcache_lock
|
|
||||||
protected the hash chain, d_child, d_alias, d_lru lists as well as
|
|
||||||
d_inode and several other things like mount look-up. RCU-based changes
|
|
||||||
affect only the way the hash chain is protected. For everything else
|
|
||||||
the dcache_lock must be taken for both traversing as well as
|
|
||||||
updating. The hash chain updates too take the dcache_lock. The
|
|
||||||
significant change is the way d_lookup traverses the hash chain, it
|
|
||||||
doesn't acquire the dcache_lock for this and rely on RCU to ensure
|
|
||||||
that the dentry has not been *freed*.
|
|
||||||
|
|
||||||
|
|
||||||
Dcache locking details
|
|
||||||
======================
|
|
||||||
|
|
||||||
For many multi-user workloads, open() and stat() on files are very
|
|
||||||
frequently occurring operations. Both involve walking of path names to
|
|
||||||
find the dentry corresponding to the concerned file. In 2.4 kernel,
|
|
||||||
dcache_lock was held during look-up of each path component. Contention
|
|
||||||
and cache-line bouncing of this global lock caused significant
|
|
||||||
scalability problems. With the introduction of RCU in Linux kernel,
|
|
||||||
this was worked around by making the look-up of path components during
|
|
||||||
path walking lock-free.
|
|
||||||
|
|
||||||
|
|
||||||
Safe lock-free look-up of dcache hash table
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
Dcache is a complex data structure with the hash table entries also
|
|
||||||
linked together in other lists. In 2.4 kernel, dcache_lock protected
|
|
||||||
all the lists. We applied RCU only on hash chain walking. The rest of
|
|
||||||
the lists are still protected by dcache_lock. Some of the important
|
|
||||||
changes are :
|
|
||||||
|
|
||||||
1. The deletion from hash chain is done using hlist_del_rcu() macro
|
|
||||||
which doesn't initialize next pointer of the deleted dentry and
|
|
||||||
this allows us to walk safely lock-free while a deletion is
|
|
||||||
happening.
|
|
||||||
|
|
||||||
2. Insertion of a dentry into the hash table is done using
|
|
||||||
hlist_add_head_rcu() which take care of ordering the writes - the
|
|
||||||
writes to the dentry must be visible before the dentry is
|
|
||||||
inserted. This works in conjunction with hlist_for_each_rcu(),
|
|
||||||
which has since been replaced by hlist_for_each_entry_rcu(), while
|
|
||||||
walking the hash chain. The only requirement is that all
|
|
||||||
initialization to the dentry must be done before
|
|
||||||
hlist_add_head_rcu() since we don't have dcache_lock protection
|
|
||||||
while traversing the hash chain. This isn't different from the
|
|
||||||
existing code.
|
|
||||||
|
|
||||||
3. The dentry looked up without holding dcache_lock by cannot be
|
|
||||||
returned for walking if it is unhashed. It then may have a NULL
|
|
||||||
d_inode or other bogosity since RCU doesn't protect the other
|
|
||||||
fields in the dentry. We therefore use a flag DCACHE_UNHASHED to
|
|
||||||
indicate unhashed dentries and use this in conjunction with a
|
|
||||||
per-dentry lock (d_lock). Once looked up without the dcache_lock,
|
|
||||||
we acquire the per-dentry lock (d_lock) and check if the dentry is
|
|
||||||
unhashed. If so, the look-up is failed. If not, the reference count
|
|
||||||
of the dentry is increased and the dentry is returned.
|
|
||||||
|
|
||||||
4. Once a dentry is looked up, it must be ensured during the path walk
|
|
||||||
for that component it doesn't go away. In pre-2.5.10 code, this was
|
|
||||||
done holding a reference to the dentry. dcache_rcu does the same.
|
|
||||||
In some sense, dcache_rcu path walking looks like the pre-2.5.10
|
|
||||||
version.
|
|
||||||
|
|
||||||
5. All dentry hash chain updates must take the dcache_lock as well as
|
|
||||||
the per-dentry lock in that order. dput() does this to ensure that
|
|
||||||
a dentry that has just been looked up in another CPU doesn't get
|
|
||||||
deleted before dget() can be done on it.
|
|
||||||
|
|
||||||
6. There are several ways to do reference counting of RCU protected
|
|
||||||
objects. One such example is in ipv4 route cache where deferred
|
|
||||||
freeing (using call_rcu()) is done as soon as the reference count
|
|
||||||
goes to zero. This cannot be done in the case of dentries because
|
|
||||||
tearing down of dentries require blocking (dentry_iput()) which
|
|
||||||
isn't supported from RCU callbacks. Instead, tearing down of
|
|
||||||
dentries happen synchronously in dput(), but actual freeing happens
|
|
||||||
later when RCU grace period is over. This allows safe lock-free
|
|
||||||
walking of the hash chains, but a matched dentry may have been
|
|
||||||
partially torn down. The checking of DCACHE_UNHASHED flag with
|
|
||||||
d_lock held detects such dentries and prevents them from being
|
|
||||||
returned from look-up.
|
|
||||||
|
|
||||||
|
|
||||||
Maintaining POSIX rename semantics
|
|
||||||
==================================
|
|
||||||
|
|
||||||
Since look-up of dentries is lock-free, it can race against a
|
|
||||||
concurrent rename operation. For example, during rename of file A to
|
|
||||||
B, look-up of either A or B must succeed. So, if look-up of B happens
|
|
||||||
after A has been removed from the hash chain but not added to the new
|
|
||||||
hash chain, it may fail. Also, a comparison while the name is being
|
|
||||||
written concurrently by a rename may result in false positive matches
|
|
||||||
violating rename semantics. Issues related to race with rename are
|
|
||||||
handled as described below :
|
|
||||||
|
|
||||||
1. Look-up can be done in two ways - d_lookup() which is safe from
|
|
||||||
simultaneous renames and __d_lookup() which is not. If
|
|
||||||
__d_lookup() fails, it must be followed up by a d_lookup() to
|
|
||||||
correctly determine whether a dentry is in the hash table or
|
|
||||||
not. d_lookup() protects look-ups using a sequence lock
|
|
||||||
(rename_lock).
|
|
||||||
|
|
||||||
2. The name associated with a dentry (d_name) may be changed if a
|
|
||||||
rename is allowed to happen simultaneously. To avoid memcmp() in
|
|
||||||
__d_lookup() go out of bounds due to a rename and false positive
|
|
||||||
comparison, the name comparison is done while holding the
|
|
||||||
per-dentry lock. This prevents concurrent renames during this
|
|
||||||
operation.
|
|
||||||
|
|
||||||
3. Hash table walking during look-up may move to a different bucket as
|
|
||||||
the current dentry is moved to a different bucket due to rename.
|
|
||||||
But we use hlists in dcache hash table and they are
|
|
||||||
null-terminated. So, even if a dentry moves to a different bucket,
|
|
||||||
hash chain walk will terminate. [with a list_head list, it may not
|
|
||||||
since termination is when the list_head in the original bucket is
|
|
||||||
reached]. Since we redo the d_parent check and compare name while
|
|
||||||
holding d_lock, lock-free look-up will not race against d_move().
|
|
||||||
|
|
||||||
4. There can be a theoretical race when a dentry keeps coming back to
|
|
||||||
original bucket due to double moves. Due to this look-up may
|
|
||||||
consider that it has never moved and can end up in a infinite loop.
|
|
||||||
But this is not any worse that theoretical livelocks we already
|
|
||||||
have in the kernel.
|
|
||||||
|
|
||||||
|
|
||||||
Important guidelines for filesystem developers related to dcache_rcu
|
|
||||||
====================================================================
|
|
||||||
|
|
||||||
1. Existing dcache interfaces (pre-2.5.62) exported to filesystem
|
|
||||||
don't change. Only dcache internal implementation changes. However
|
|
||||||
filesystems *must not* delete from the dentry hash chains directly
|
|
||||||
using the list macros like allowed earlier. They must use dcache
|
|
||||||
APIs like d_drop() or __d_drop() depending on the situation.
|
|
||||||
|
|
||||||
2. d_flags is now protected by a per-dentry lock (d_lock). All access
|
|
||||||
to d_flags must be protected by it.
|
|
||||||
|
|
||||||
3. For a hashed dentry, checking of d_count needs to be protected by
|
|
||||||
d_lock.
|
|
||||||
|
|
||||||
|
|
||||||
Papers and other documentation on dcache locking
|
|
||||||
================================================
|
|
||||||
|
|
||||||
1. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124).
|
|
||||||
|
|
||||||
2. http://lse.sourceforge.net/locking/dcache/dcache.html
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,382 @@
|
||||||
|
Path walking and name lookup locking
|
||||||
|
====================================
|
||||||
|
|
||||||
|
Path resolution is the finding a dentry corresponding to a path name string, by
|
||||||
|
performing a path walk. Typically, for every open(), stat() etc., the path name
|
||||||
|
will be resolved. Paths are resolved by walking the namespace tree, starting
|
||||||
|
with the first component of the pathname (eg. root or cwd) with a known dentry,
|
||||||
|
then finding the child of that dentry, which is named the next component in the
|
||||||
|
path string. Then repeating the lookup from the child dentry and finding its
|
||||||
|
child with the next element, and so on.
|
||||||
|
|
||||||
|
Since it is a frequent operation for workloads like multiuser environments and
|
||||||
|
web servers, it is important to optimize this code.
|
||||||
|
|
||||||
|
Path walking synchronisation history:
|
||||||
|
Prior to 2.5.10, dcache_lock was acquired in d_lookup (dcache hash lookup) and
|
||||||
|
thus in every component during path look-up. Since 2.5.10 onwards, fast-walk
|
||||||
|
algorithm changed this by holding the dcache_lock at the beginning and walking
|
||||||
|
as many cached path component dentries as possible. This significantly
|
||||||
|
decreases the number of acquisition of dcache_lock. However it also increases
|
||||||
|
the lock hold time significantly and affects performance in large SMP machines.
|
||||||
|
Since 2.5.62 kernel, dcache has been using a new locking model that uses RCU to
|
||||||
|
make dcache look-up lock-free.
|
||||||
|
|
||||||
|
All the above algorithms required taking a lock and reference count on the
|
||||||
|
dentry that was looked up, so that may be used as the basis for walking the
|
||||||
|
next path element. This is inefficient and unscalable. It is inefficient
|
||||||
|
because of the locks and atomic operations required for every dentry element
|
||||||
|
slows things down. It is not scalable because many parallel applications that
|
||||||
|
are path-walk intensive tend to do path lookups starting from a common dentry
|
||||||
|
(usually, the root "/" or current working directory). So contention on these
|
||||||
|
common path elements causes lock and cacheline queueing.
|
||||||
|
|
||||||
|
Since 2.6.38, RCU is used to make a significant part of the entire path walk
|
||||||
|
(including dcache look-up) completely "store-free" (so, no locks, atomics, or
|
||||||
|
even stores into cachelines of common dentries). This is known as "rcu-walk"
|
||||||
|
path walking.
|
||||||
|
|
||||||
|
Path walking overview
|
||||||
|
=====================
|
||||||
|
|
||||||
|
A name string specifies a start (root directory, cwd, fd-relative) and a
|
||||||
|
sequence of elements (directory entry names), which together refer to a path in
|
||||||
|
the namespace. A path is represented as a (dentry, vfsmount) tuple. The name
|
||||||
|
elements are sub-strings, seperated by '/'.
|
||||||
|
|
||||||
|
Name lookups will want to find a particular path that a name string refers to
|
||||||
|
(usually the final element, or parent of final element). This is done by taking
|
||||||
|
the path given by the name's starting point (which we know in advance -- eg.
|
||||||
|
current->fs->cwd or current->fs->root) as the first parent of the lookup. Then
|
||||||
|
iteratively for each subsequent name element, look up the child of the current
|
||||||
|
parent with the given name and if it is not the desired entry, make it the
|
||||||
|
parent for the next lookup.
|
||||||
|
|
||||||
|
A parent, of course, must be a directory, and we must have appropriate
|
||||||
|
permissions on the parent inode to be able to walk into it.
|
||||||
|
|
||||||
|
Turning the child into a parent for the next lookup requires more checks and
|
||||||
|
procedures. Symlinks essentially substitute the symlink name for the target
|
||||||
|
name in the name string, and require some recursive path walking. Mount points
|
||||||
|
must be followed into (thus changing the vfsmount that subsequent path elements
|
||||||
|
refer to), switching from the mount point path to the root of the particular
|
||||||
|
mounted vfsmount. These behaviours are variously modified depending on the
|
||||||
|
exact path walking flags.
|
||||||
|
|
||||||
|
Path walking then must, broadly, do several particular things:
|
||||||
|
- find the start point of the walk;
|
||||||
|
- perform permissions and validity checks on inodes;
|
||||||
|
- perform dcache hash name lookups on (parent, name element) tuples;
|
||||||
|
- traverse mount points;
|
||||||
|
- traverse symlinks;
|
||||||
|
- lookup and create missing parts of the path on demand.
|
||||||
|
|
||||||
|
Safe store-free look-up of dcache hash table
|
||||||
|
============================================
|
||||||
|
|
||||||
|
Dcache name lookup
|
||||||
|
------------------
|
||||||
|
In order to lookup a dcache (parent, name) tuple, we take a hash on the tuple
|
||||||
|
and use that to select a bucket in the dcache-hash table. The list of entries
|
||||||
|
in that bucket is then walked, and we do a full comparison of each entry
|
||||||
|
against our (parent, name) tuple.
|
||||||
|
|
||||||
|
The hash lists are RCU protected, so list walking is not serialised with
|
||||||
|
concurrent updates (insertion, deletion from the hash). This is a standard RCU
|
||||||
|
list application with the exception of renames, which will be covered below.
|
||||||
|
|
||||||
|
Parent and name members of a dentry, as well as its membership in the dcache
|
||||||
|
hash, and its inode are protected by the per-dentry d_lock spinlock. A
|
||||||
|
reference is taken on the dentry (while the fields are verified under d_lock),
|
||||||
|
and this stabilises its d_inode pointer and actual inode. This gives a stable
|
||||||
|
point to perform the next step of our path walk against.
|
||||||
|
|
||||||
|
These members are also protected by d_seq seqlock, although this offers
|
||||||
|
read-only protection and no durability of results, so care must be taken when
|
||||||
|
using d_seq for synchronisation (see seqcount based lookups, below).
|
||||||
|
|
||||||
|
Renames
|
||||||
|
-------
|
||||||
|
Back to the rename case. In usual RCU protected lists, the only operations that
|
||||||
|
will happen to an object is insertion, and then eventually removal from the
|
||||||
|
list. The object will not be reused until an RCU grace period is complete.
|
||||||
|
This ensures the RCU list traversal primitives can run over the object without
|
||||||
|
problems (see RCU documentation for how this works).
|
||||||
|
|
||||||
|
However when a dentry is renamed, its hash value can change, requiring it to be
|
||||||
|
moved to a new hash list. Allocating and inserting a new alias would be
|
||||||
|
expensive and also problematic for directory dentries. Latency would be far to
|
||||||
|
high to wait for a grace period after removing the dentry and before inserting
|
||||||
|
it in the new hash bucket. So what is done is to insert the dentry into the
|
||||||
|
new list immediately.
|
||||||
|
|
||||||
|
However, when the dentry's list pointers are updated to point to objects in the
|
||||||
|
new list before waiting for a grace period, this can result in a concurrent RCU
|
||||||
|
lookup of the old list veering off into the new (incorrect) list and missing
|
||||||
|
the remaining dentries on the list.
|
||||||
|
|
||||||
|
There is no fundamental problem with walking down the wrong list, because the
|
||||||
|
dentry comparisons will never match. However it is fatal to miss a matching
|
||||||
|
dentry. So a seqlock is used to detect when a rename has occurred, and so the
|
||||||
|
lookup can be retried.
|
||||||
|
|
||||||
|
1 2 3
|
||||||
|
+---+ +---+ +---+
|
||||||
|
hlist-->| N-+->| N-+->| N-+->
|
||||||
|
head <--+-P |<-+-P |<-+-P |
|
||||||
|
+---+ +---+ +---+
|
||||||
|
|
||||||
|
Rename of dentry 2 may require it deleted from the above list, and inserted
|
||||||
|
into a new list. Deleting 2 gives the following list.
|
||||||
|
|
||||||
|
1 3
|
||||||
|
+---+ +---+ (don't worry, the longer pointers do not
|
||||||
|
hlist-->| N-+-------->| N-+-> impose a measurable performance overhead
|
||||||
|
head <--+-P |<--------+-P | on modern CPUs)
|
||||||
|
+---+ +---+
|
||||||
|
^ 2 ^
|
||||||
|
| +---+ |
|
||||||
|
| | N-+----+
|
||||||
|
+----+-P |
|
||||||
|
+---+
|
||||||
|
|
||||||
|
This is a standard RCU-list deletion, which leaves the deleted object's
|
||||||
|
pointers intact, so a concurrent list walker that is currently looking at
|
||||||
|
object 2 will correctly continue to object 3 when it is time to traverse the
|
||||||
|
next object.
|
||||||
|
|
||||||
|
However, when inserting object 2 onto a new list, we end up with this:
|
||||||
|
|
||||||
|
1 3
|
||||||
|
+---+ +---+
|
||||||
|
hlist-->| N-+-------->| N-+->
|
||||||
|
head <--+-P |<--------+-P |
|
||||||
|
+---+ +---+
|
||||||
|
2
|
||||||
|
+---+
|
||||||
|
| N-+---->
|
||||||
|
<----+-P |
|
||||||
|
+---+
|
||||||
|
|
||||||
|
Because we didn't wait for a grace period, there may be a concurrent lookup
|
||||||
|
still at 2. Now when it follows 2's 'next' pointer, it will walk off into
|
||||||
|
another list without ever having checked object 3.
|
||||||
|
|
||||||
|
A related, but distinctly different, issue is that of rename atomicity versus
|
||||||
|
lookup operations. If a file is renamed from 'A' to 'B', a lookup must only
|
||||||
|
find either 'A' or 'B'. So if a lookup of 'A' returns NULL, a subsequent lookup
|
||||||
|
of 'B' must succeed (note the reverse is not true).
|
||||||
|
|
||||||
|
Between deleting the dentry from the old hash list, and inserting it on the new
|
||||||
|
hash list, a lookup may find neither 'A' nor 'B' matching the dentry. The same
|
||||||
|
rename seqlock is also used to cover this race in much the same way, by
|
||||||
|
retrying a negative lookup result if a rename was in progress.
|
||||||
|
|
||||||
|
Seqcount based lookups
|
||||||
|
----------------------
|
||||||
|
In refcount based dcache lookups, d_lock is used to serialise access to
|
||||||
|
the dentry, stabilising it while comparing its name and parent and then
|
||||||
|
taking a reference count (the reference count then gives a stable place to
|
||||||
|
start the next part of the path walk from).
|
||||||
|
|
||||||
|
As explained above, we would like to do path walking without taking locks or
|
||||||
|
reference counts on intermediate dentries along the path. To do this, a per
|
||||||
|
dentry seqlock (d_seq) is used to take a "coherent snapshot" of what the dentry
|
||||||
|
looks like (its name, parent, and inode). That snapshot is then used to start
|
||||||
|
the next part of the path walk. When loading the coherent snapshot under d_seq,
|
||||||
|
care must be taken to load the members up-front, and use those pointers rather
|
||||||
|
than reloading from the dentry later on (otherwise we'd have interesting things
|
||||||
|
like d_inode going NULL underneath us, if the name was unlinked).
|
||||||
|
|
||||||
|
Also important is to avoid performing any destructive operations (pretty much:
|
||||||
|
no non-atomic stores to shared data), and to recheck the seqcount when we are
|
||||||
|
"done" with the operation. Retry or abort if the seqcount does not match.
|
||||||
|
Avoiding destructive or changing operations means we can easily unwind from
|
||||||
|
failure.
|
||||||
|
|
||||||
|
What this means is that a caller, provided they are holding RCU lock to
|
||||||
|
protect the dentry object from disappearing, can perform a seqcount based
|
||||||
|
lookup which does not increment the refcount on the dentry or write to
|
||||||
|
it in any way. This returned dentry can be used for subsequent operations,
|
||||||
|
provided that d_seq is rechecked after that operation is complete.
|
||||||
|
|
||||||
|
Inodes are also rcu freed, so the seqcount lookup dentry's inode may also be
|
||||||
|
queried for permissions.
|
||||||
|
|
||||||
|
With this two parts of the puzzle, we can do path lookups without taking
|
||||||
|
locks or refcounts on dentry elements.
|
||||||
|
|
||||||
|
RCU-walk path walking design
|
||||||
|
============================
|
||||||
|
|
||||||
|
Path walking code now has two distinct modes, ref-walk and rcu-walk. ref-walk
|
||||||
|
is the traditional[*] way of performing dcache lookups using d_lock to
|
||||||
|
serialise concurrent modifications to the dentry and take a reference count on
|
||||||
|
it. ref-walk is simple and obvious, and may sleep, take locks, etc while path
|
||||||
|
walking is operating on each dentry. rcu-walk uses seqcount based dentry
|
||||||
|
lookups, and can perform lookup of intermediate elements without any stores to
|
||||||
|
shared data in the dentry or inode. rcu-walk can not be applied to all cases,
|
||||||
|
eg. if the filesystem must sleep or perform non trivial operations, rcu-walk
|
||||||
|
must be switched to ref-walk mode.
|
||||||
|
|
||||||
|
[*] RCU is still used for the dentry hash lookup in ref-walk, but not the full
|
||||||
|
path walk.
|
||||||
|
|
||||||
|
Where ref-walk uses a stable, refcounted ``parent'' to walk the remaining
|
||||||
|
path string, rcu-walk uses a d_seq protected snapshot. When looking up a
|
||||||
|
child of this parent snapshot, we open d_seq critical section on the child
|
||||||
|
before closing d_seq critical section on the parent. This gives an interlocking
|
||||||
|
ladder of snapshots to walk down.
|
||||||
|
|
||||||
|
|
||||||
|
proc 101
|
||||||
|
/----------------\
|
||||||
|
/ comm: "vi" \
|
||||||
|
/ fs.root: dentry0 \
|
||||||
|
\ fs.cwd: dentry2 /
|
||||||
|
\ /
|
||||||
|
\----------------/
|
||||||
|
|
||||||
|
So when vi wants to open("/home/npiggin/test.c", O_RDWR), then it will
|
||||||
|
start from current->fs->root, which is a pinned dentry. Alternatively,
|
||||||
|
"./test.c" would start from cwd; both names refer to the same path in
|
||||||
|
the context of proc101.
|
||||||
|
|
||||||
|
dentry 0
|
||||||
|
+---------------------+ rcu-walk begins here, we note d_seq, check the
|
||||||
|
| name: "/" | inode's permission, and then look up the next
|
||||||
|
| inode: 10 | path element which is "home"...
|
||||||
|
| children:"home", ...|
|
||||||
|
+---------------------+
|
||||||
|
|
|
||||||
|
dentry 1 V
|
||||||
|
+---------------------+ ... which brings us here. We find dentry1 via
|
||||||
|
| name: "home" | hash lookup, then note d_seq and compare name
|
||||||
|
| inode: 678 | string and parent pointer. When we have a match,
|
||||||
|
| children:"npiggin" | we now recheck the d_seq of dentry0. Then we
|
||||||
|
+---------------------+ check inode and look up the next element.
|
||||||
|
|
|
||||||
|
dentry2 V
|
||||||
|
+---------------------+ Note: if dentry0 is now modified, lookup is
|
||||||
|
| name: "npiggin" | not necessarily invalid, so we need only keep a
|
||||||
|
| inode: 543 | parent for d_seq verification, and grandparents
|
||||||
|
| children:"a.c", ... | can be forgotten.
|
||||||
|
+---------------------+
|
||||||
|
|
|
||||||
|
dentry3 V
|
||||||
|
+---------------------+ At this point we have our destination dentry.
|
||||||
|
| name: "a.c" | We now take its d_lock, verify d_seq of this
|
||||||
|
| inode: 14221 | dentry. If that checks out, we can increment
|
||||||
|
| children:NULL | its refcount because we're holding d_lock.
|
||||||
|
+---------------------+
|
||||||
|
|
||||||
|
Taking a refcount on a dentry from rcu-walk mode, by taking its d_lock,
|
||||||
|
re-checking its d_seq, and then incrementing its refcount is called
|
||||||
|
"dropping rcu" or dropping from rcu-walk into ref-walk mode.
|
||||||
|
|
||||||
|
It is, in some sense, a bit of a house of cards. If the seqcount check of the
|
||||||
|
parent snapshot fails, the house comes down, because we had closed the d_seq
|
||||||
|
section on the grandparent, so we have nothing left to stand on. In that case,
|
||||||
|
the path walk must be fully restarted (which we do in ref-walk mode, to avoid
|
||||||
|
live locks). It is costly to have a full restart, but fortunately they are
|
||||||
|
quite rare.
|
||||||
|
|
||||||
|
When we reach a point where sleeping is required, or a filesystem callout
|
||||||
|
requires ref-walk, then instead of restarting the walk, we attempt to drop rcu
|
||||||
|
at the last known good dentry we have. Avoiding a full restart in ref-walk in
|
||||||
|
these cases is fundamental for performance and scalability because blocking
|
||||||
|
operations such as creates and unlinks are not uncommon.
|
||||||
|
|
||||||
|
The detailed design for rcu-walk is like this:
|
||||||
|
* LOOKUP_RCU is set in nd->flags, which distinguishes rcu-walk from ref-walk.
|
||||||
|
* Take the RCU lock for the entire path walk, starting with the acquiring
|
||||||
|
of the starting path (eg. root/cwd/fd-path). So now dentry refcounts are
|
||||||
|
not required for dentry persistence.
|
||||||
|
* synchronize_rcu is called when unregistering a filesystem, so we can
|
||||||
|
access d_ops and i_ops during rcu-walk.
|
||||||
|
* Similarly take the vfsmount lock for the entire path walk. So now mnt
|
||||||
|
refcounts are not required for persistence. Also we are free to perform mount
|
||||||
|
lookups, and to assume dentry mount points and mount roots are stable up and
|
||||||
|
down the path.
|
||||||
|
* Have a per-dentry seqlock to protect the dentry name, parent, and inode,
|
||||||
|
so we can load this tuple atomically, and also check whether any of its
|
||||||
|
members have changed.
|
||||||
|
* Dentry lookups (based on parent, candidate string tuple) recheck the parent
|
||||||
|
sequence after the child is found in case anything changed in the parent
|
||||||
|
during the path walk.
|
||||||
|
* inode is also RCU protected so we can load d_inode and use the inode for
|
||||||
|
limited things.
|
||||||
|
* i_mode, i_uid, i_gid can be tested for exec permissions during path walk.
|
||||||
|
* i_op can be loaded.
|
||||||
|
* When the destination dentry is reached, drop rcu there (ie. take d_lock,
|
||||||
|
verify d_seq, increment refcount).
|
||||||
|
* If seqlock verification fails anywhere along the path, do a full restart
|
||||||
|
of the path lookup in ref-walk mode. -ECHILD tends to be used (for want of
|
||||||
|
a better errno) to signal an rcu-walk failure.
|
||||||
|
|
||||||
|
The cases where rcu-walk cannot continue are:
|
||||||
|
* NULL dentry (ie. any uncached path element)
|
||||||
|
* Following links
|
||||||
|
|
||||||
|
It may be possible eventually to make following links rcu-walk aware.
|
||||||
|
|
||||||
|
Uncached path elements will always require dropping to ref-walk mode, at the
|
||||||
|
very least because i_mutex needs to be grabbed, and objects allocated.
|
||||||
|
|
||||||
|
Final note:
|
||||||
|
"store-free" path walking is not strictly store free. We take vfsmount lock
|
||||||
|
and refcounts (both of which can be made per-cpu), and we also store to the
|
||||||
|
stack (which is essentially CPU-local), and we also have to take locks and
|
||||||
|
refcount on final dentry.
|
||||||
|
|
||||||
|
The point is that shared data, where practically possible, is not locked
|
||||||
|
or stored into. The result is massive improvements in performance and
|
||||||
|
scalability of path resolution.
|
||||||
|
|
||||||
|
|
||||||
|
Interesting statistics
|
||||||
|
======================
|
||||||
|
|
||||||
|
The following table gives rcu lookup statistics for a few simple workloads
|
||||||
|
(2s12c24t Westmere, debian non-graphical system). Ungraceful are attempts to
|
||||||
|
drop rcu that fail due to d_seq failure and requiring the entire path lookup
|
||||||
|
again. Other cases are successful rcu-drops that are required before the final
|
||||||
|
element, nodentry for missing dentry, revalidate for filesystem revalidate
|
||||||
|
routine requiring rcu drop, permission for permission check requiring drop,
|
||||||
|
and link for symlink traversal requiring drop.
|
||||||
|
|
||||||
|
rcu-lookups restart nodentry link revalidate permission
|
||||||
|
bootup 47121 0 4624 1010 10283 7852
|
||||||
|
dbench 25386793 0 6778659(26.7%) 55 549 1156
|
||||||
|
kbuild 2696672 10 64442(2.3%) 108764(4.0%) 1 1590
|
||||||
|
git diff 39605 0 28 2 0 106
|
||||||
|
vfstest 24185492 4945 708725(2.9%) 1076136(4.4%) 0 2651
|
||||||
|
|
||||||
|
What this shows is that failed rcu-walk lookups, ie. ones that are restarted
|
||||||
|
entirely with ref-walk, are quite rare. Even the "vfstest" case which
|
||||||
|
specifically has concurrent renames/mkdir/rmdir/ creat/unlink/etc to excercise
|
||||||
|
such races is not showing a huge amount of restarts.
|
||||||
|
|
||||||
|
Dropping from rcu-walk to ref-walk mean that we have encountered a dentry where
|
||||||
|
the reference count needs to be taken for some reason. This is either because
|
||||||
|
we have reached the target of the path walk, or because we have encountered a
|
||||||
|
condition that can't be resolved in rcu-walk mode. Ideally, we drop rcu-walk
|
||||||
|
only when we have reached the target dentry, so the other statistics show where
|
||||||
|
this does not happen.
|
||||||
|
|
||||||
|
Note that a graceful drop from rcu-walk mode due to something such as the
|
||||||
|
dentry not existing (which can be common) is not necessarily a failure of
|
||||||
|
rcu-walk scheme, because some elements of the path may have been walked in
|
||||||
|
rcu-walk mode. The further we get from common path elements (such as cwd or
|
||||||
|
root), the less contended the dentry is likely to be. The closer we are to
|
||||||
|
common path elements, the more likely they will exist in dentry cache.
|
||||||
|
|
||||||
|
|
||||||
|
Papers and other documentation on dcache locking
|
||||||
|
================================================
|
||||||
|
|
||||||
|
1. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124).
|
||||||
|
|
||||||
|
2. http://lse.sourceforge.net/locking/dcache/dcache.html
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,6 @@ had ->revalidate()) add calls in ->follow_link()/->readlink().
|
||||||
->d_parent changes are not protected by BKL anymore. Read access is safe
|
->d_parent changes are not protected by BKL anymore. Read access is safe
|
||||||
if at least one of the following is true:
|
if at least one of the following is true:
|
||||||
* filesystem has no cross-directory rename()
|
* filesystem has no cross-directory rename()
|
||||||
* dcache_lock is held
|
|
||||||
* we know that parent had been locked (e.g. we are looking at
|
* we know that parent had been locked (e.g. we are looking at
|
||||||
->d_parent of ->lookup() argument).
|
->d_parent of ->lookup() argument).
|
||||||
* we are called from ->rename().
|
* we are called from ->rename().
|
||||||
|
@ -318,3 +317,71 @@ if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput(
|
||||||
may happen while the inode is in the middle of ->write_inode(); e.g. if you blindly
|
may happen while the inode is in the middle of ->write_inode(); e.g. if you blindly
|
||||||
free the on-disk inode, you may end up doing that while ->write_inode() is writing
|
free the on-disk inode, you may end up doing that while ->write_inode() is writing
|
||||||
to it.
|
to it.
|
||||||
|
|
||||||
|
---
|
||||||
|
[mandatory]
|
||||||
|
|
||||||
|
.d_delete() now only advises the dcache as to whether or not to cache
|
||||||
|
unreferenced dentries, and is now only called when the dentry refcount goes to
|
||||||
|
0. Even on 0 refcount transition, it must be able to tolerate being called 0,
|
||||||
|
1, or more times (eg. constant, idempotent).
|
||||||
|
|
||||||
|
---
|
||||||
|
[mandatory]
|
||||||
|
|
||||||
|
.d_compare() calling convention and locking rules are significantly
|
||||||
|
changed. Read updated documentation in Documentation/filesystems/vfs.txt (and
|
||||||
|
look at examples of other filesystems) for guidance.
|
||||||
|
|
||||||
|
---
|
||||||
|
[mandatory]
|
||||||
|
|
||||||
|
.d_hash() calling convention and locking rules are significantly
|
||||||
|
changed. Read updated documentation in Documentation/filesystems/vfs.txt (and
|
||||||
|
look at examples of other filesystems) for guidance.
|
||||||
|
|
||||||
|
---
|
||||||
|
[mandatory]
|
||||||
|
dcache_lock is gone, replaced by fine grained locks. See fs/dcache.c
|
||||||
|
for details of what locks to replace dcache_lock with in order to protect
|
||||||
|
particular things. Most of the time, a filesystem only needs ->d_lock, which
|
||||||
|
protects *all* the dcache state of a given dentry.
|
||||||
|
|
||||||
|
--
|
||||||
|
[mandatory]
|
||||||
|
|
||||||
|
Filesystems must RCU-free their inodes, if they can have been accessed
|
||||||
|
via rcu-walk path walk (basically, if the file can have had a path name in the
|
||||||
|
vfs namespace).
|
||||||
|
|
||||||
|
i_dentry and i_rcu share storage in a union, and the vfs expects
|
||||||
|
i_dentry to be reinitialized before it is freed, so an:
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&inode->i_dentry);
|
||||||
|
|
||||||
|
must be done in the RCU callback.
|
||||||
|
|
||||||
|
--
|
||||||
|
[recommended]
|
||||||
|
vfs now tries to do path walking in "rcu-walk mode", which avoids
|
||||||
|
atomic operations and scalability hazards on dentries and inodes (see
|
||||||
|
Documentation/filesystems/path-walk.txt). d_hash and d_compare changes (above)
|
||||||
|
are examples of the changes required to support this. For more complex
|
||||||
|
filesystem callbacks, the vfs drops out of rcu-walk mode before the fs call, so
|
||||||
|
no changes are required to the filesystem. However, this is costly and loses
|
||||||
|
the benefits of rcu-walk mode. We will begin to add filesystem callbacks that
|
||||||
|
are rcu-walk aware, shown below. Filesystems should take advantage of this
|
||||||
|
where possible.
|
||||||
|
|
||||||
|
--
|
||||||
|
[mandatory]
|
||||||
|
d_revalidate is a callback that is made on every path element (if
|
||||||
|
the filesystem provides it), which requires dropping out of rcu-walk mode. This
|
||||||
|
may now be called in rcu-walk mode (nd->flags & LOOKUP_RCU). -ECHILD should be
|
||||||
|
returned if the filesystem cannot handle rcu-walk. See
|
||||||
|
Documentation/filesystems/vfs.txt for more details.
|
||||||
|
|
||||||
|
permission and check_acl are inode permission checks that are called
|
||||||
|
on many or all directory inodes on the way down a path walk (to check for
|
||||||
|
exec permission). These must now be rcu-walk aware (flags & IPERM_RCU). See
|
||||||
|
Documentation/filesystems/vfs.txt for more details.
|
||||||
|
|
|
@ -1181,6 +1181,30 @@ Table 1-12: Files in /proc/fs/ext4/<devname>
|
||||||
mb_groups details of multiblock allocator buddy cache of free blocks
|
mb_groups details of multiblock allocator buddy cache of free blocks
|
||||||
..............................................................................
|
..............................................................................
|
||||||
|
|
||||||
|
2.0 /proc/consoles
|
||||||
|
------------------
|
||||||
|
Shows registered system console lines.
|
||||||
|
|
||||||
|
To see which character device lines are currently used for the system console
|
||||||
|
/dev/console, you may simply look into the file /proc/consoles:
|
||||||
|
|
||||||
|
> cat /proc/consoles
|
||||||
|
tty0 -WU (ECp) 4:7
|
||||||
|
ttyS0 -W- (Ep) 4:64
|
||||||
|
|
||||||
|
The columns are:
|
||||||
|
|
||||||
|
device name of the device
|
||||||
|
operations R = can do read operations
|
||||||
|
W = can do write operations
|
||||||
|
U = can do unblank
|
||||||
|
flags E = it is enabled
|
||||||
|
C = it is prefered console
|
||||||
|
B = it is primary boot console
|
||||||
|
p = it is used for printk buffer
|
||||||
|
b = it is not a TTY but a Braille device
|
||||||
|
a = it is safe to use when cpu is offline
|
||||||
|
major:minor major and minor number of the device separated by a colon
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
Summary
|
Summary
|
||||||
|
|
|
@ -325,7 +325,8 @@ struct inode_operations {
|
||||||
void * (*follow_link) (struct dentry *, struct nameidata *);
|
void * (*follow_link) (struct dentry *, struct nameidata *);
|
||||||
void (*put_link) (struct dentry *, struct nameidata *, void *);
|
void (*put_link) (struct dentry *, struct nameidata *, void *);
|
||||||
void (*truncate) (struct inode *);
|
void (*truncate) (struct inode *);
|
||||||
int (*permission) (struct inode *, int, struct nameidata *);
|
int (*permission) (struct inode *, int, unsigned int);
|
||||||
|
int (*check_acl)(struct inode *, int, unsigned int);
|
||||||
int (*setattr) (struct dentry *, struct iattr *);
|
int (*setattr) (struct dentry *, struct iattr *);
|
||||||
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
|
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
|
||||||
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
|
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
|
||||||
|
@ -414,6 +415,13 @@ otherwise noted.
|
||||||
permission: called by the VFS to check for access rights on a POSIX-like
|
permission: called by the VFS to check for access rights on a POSIX-like
|
||||||
filesystem.
|
filesystem.
|
||||||
|
|
||||||
|
May be called in rcu-walk mode (flags & IPERM_RCU). If in rcu-walk
|
||||||
|
mode, the filesystem must check the permission without blocking or
|
||||||
|
storing to the inode.
|
||||||
|
|
||||||
|
If a situation is encountered that rcu-walk cannot handle, return
|
||||||
|
-ECHILD and it will be called again in ref-walk mode.
|
||||||
|
|
||||||
setattr: called by the VFS to set attributes for a file. This method
|
setattr: called by the VFS to set attributes for a file. This method
|
||||||
is called by chmod(2) and related system calls.
|
is called by chmod(2) and related system calls.
|
||||||
|
|
||||||
|
@ -534,6 +542,7 @@ struct address_space_operations {
|
||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
int (*invalidatepage) (struct page *, unsigned long);
|
int (*invalidatepage) (struct page *, unsigned long);
|
||||||
int (*releasepage) (struct page *, int);
|
int (*releasepage) (struct page *, int);
|
||||||
|
void (*freepage)(struct page *);
|
||||||
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||||
loff_t offset, unsigned long nr_segs);
|
loff_t offset, unsigned long nr_segs);
|
||||||
struct page* (*get_xip_page)(struct address_space *, sector_t,
|
struct page* (*get_xip_page)(struct address_space *, sector_t,
|
||||||
|
@ -660,11 +669,10 @@ struct address_space_operations {
|
||||||
releasepage: releasepage is called on PagePrivate pages to indicate
|
releasepage: releasepage is called on PagePrivate pages to indicate
|
||||||
that the page should be freed if possible. ->releasepage
|
that the page should be freed if possible. ->releasepage
|
||||||
should remove any private data from the page and clear the
|
should remove any private data from the page and clear the
|
||||||
PagePrivate flag. It may also remove the page from the
|
PagePrivate flag. If releasepage() fails for some reason, it must
|
||||||
address_space. If this fails for some reason, it may indicate
|
indicate failure with a 0 return value.
|
||||||
failure with a 0 return value.
|
releasepage() is used in two distinct though related cases. The
|
||||||
This is used in two distinct though related cases. The first
|
first is when the VM finds a clean page with no active users and
|
||||||
is when the VM finds a clean page with no active users and
|
|
||||||
wants to make it a free page. If ->releasepage succeeds, the
|
wants to make it a free page. If ->releasepage succeeds, the
|
||||||
page will be removed from the address_space and become free.
|
page will be removed from the address_space and become free.
|
||||||
|
|
||||||
|
@ -679,6 +687,12 @@ struct address_space_operations {
|
||||||
need to ensure this. Possibly it can clear the PageUptodate
|
need to ensure this. Possibly it can clear the PageUptodate
|
||||||
bit if it cannot free private data yet.
|
bit if it cannot free private data yet.
|
||||||
|
|
||||||
|
freepage: freepage is called once the page is no longer visible in
|
||||||
|
the page cache in order to allow the cleanup of any private
|
||||||
|
data. Since it may be called by the memory reclaimer, it
|
||||||
|
should not assume that the original address_space mapping still
|
||||||
|
exists, and it should not block.
|
||||||
|
|
||||||
direct_IO: called by the generic read/write routines to perform
|
direct_IO: called by the generic read/write routines to perform
|
||||||
direct_IO - that is IO requests which bypass the page cache
|
direct_IO - that is IO requests which bypass the page cache
|
||||||
and transfer data directly between the storage and the
|
and transfer data directly between the storage and the
|
||||||
|
@ -841,9 +855,12 @@ defined:
|
||||||
|
|
||||||
struct dentry_operations {
|
struct dentry_operations {
|
||||||
int (*d_revalidate)(struct dentry *, struct nameidata *);
|
int (*d_revalidate)(struct dentry *, struct nameidata *);
|
||||||
int (*d_hash) (struct dentry *, struct qstr *);
|
int (*d_hash)(const struct dentry *, const struct inode *,
|
||||||
int (*d_compare) (struct dentry *, struct qstr *, struct qstr *);
|
struct qstr *);
|
||||||
int (*d_delete)(struct dentry *);
|
int (*d_compare)(const struct dentry *, const struct inode *,
|
||||||
|
const struct dentry *, const struct inode *,
|
||||||
|
unsigned int, const char *, const struct qstr *);
|
||||||
|
int (*d_delete)(const struct dentry *);
|
||||||
void (*d_release)(struct dentry *);
|
void (*d_release)(struct dentry *);
|
||||||
void (*d_iput)(struct dentry *, struct inode *);
|
void (*d_iput)(struct dentry *, struct inode *);
|
||||||
char *(*d_dname)(struct dentry *, char *, int);
|
char *(*d_dname)(struct dentry *, char *, int);
|
||||||
|
@ -854,13 +871,45 @@ struct dentry_operations {
|
||||||
dcache. Most filesystems leave this as NULL, because all their
|
dcache. Most filesystems leave this as NULL, because all their
|
||||||
dentries in the dcache are valid
|
dentries in the dcache are valid
|
||||||
|
|
||||||
d_hash: called when the VFS adds a dentry to the hash table
|
d_revalidate may be called in rcu-walk mode (nd->flags & LOOKUP_RCU).
|
||||||
|
If in rcu-walk mode, the filesystem must revalidate the dentry without
|
||||||
|
blocking or storing to the dentry, d_parent and d_inode should not be
|
||||||
|
used without care (because they can go NULL), instead nd->inode should
|
||||||
|
be used.
|
||||||
|
|
||||||
d_compare: called when a dentry should be compared with another
|
If a situation is encountered that rcu-walk cannot handle, return
|
||||||
|
-ECHILD and it will be called again in ref-walk mode.
|
||||||
|
|
||||||
d_delete: called when the last reference to a dentry is
|
d_hash: called when the VFS adds a dentry to the hash table. The first
|
||||||
deleted. This means no-one is using the dentry, however it is
|
dentry passed to d_hash is the parent directory that the name is
|
||||||
still valid and in the dcache
|
to be hashed into. The inode is the dentry's inode.
|
||||||
|
|
||||||
|
Same locking and synchronisation rules as d_compare regarding
|
||||||
|
what is safe to dereference etc.
|
||||||
|
|
||||||
|
d_compare: called to compare a dentry name with a given name. The first
|
||||||
|
dentry is the parent of the dentry to be compared, the second is
|
||||||
|
the parent's inode, then the dentry and inode (may be NULL) of the
|
||||||
|
child dentry. len and name string are properties of the dentry to be
|
||||||
|
compared. qstr is the name to compare it with.
|
||||||
|
|
||||||
|
Must be constant and idempotent, and should not take locks if
|
||||||
|
possible, and should not or store into the dentry or inodes.
|
||||||
|
Should not dereference pointers outside the dentry or inodes without
|
||||||
|
lots of care (eg. d_parent, d_inode, d_name should not be used).
|
||||||
|
|
||||||
|
However, our vfsmount is pinned, and RCU held, so the dentries and
|
||||||
|
inodes won't disappear, neither will our sb or filesystem module.
|
||||||
|
->i_sb and ->d_sb may be used.
|
||||||
|
|
||||||
|
It is a tricky calling convention because it needs to be called under
|
||||||
|
"rcu-walk", ie. without any locks or references on things.
|
||||||
|
|
||||||
|
d_delete: called when the last reference to a dentry is dropped and the
|
||||||
|
dcache is deciding whether or not to cache it. Return 1 to delete
|
||||||
|
immediately, or 0 to cache the dentry. Default is NULL which means to
|
||||||
|
always cache a reachable dentry. d_delete must be constant and
|
||||||
|
idempotent.
|
||||||
|
|
||||||
d_release: called when a dentry is really deallocated
|
d_release: called when a dentry is really deallocated
|
||||||
|
|
||||||
|
@ -904,14 +953,11 @@ manipulate dentries:
|
||||||
the usage count)
|
the usage count)
|
||||||
|
|
||||||
dput: close a handle for a dentry (decrements the usage count). If
|
dput: close a handle for a dentry (decrements the usage count). If
|
||||||
the usage count drops to 0, the "d_delete" method is called
|
the usage count drops to 0, and the dentry is still in its
|
||||||
and the dentry is placed on the unused list if the dentry is
|
parent's hash, the "d_delete" method is called to check whether
|
||||||
still in its parents hash list. Putting the dentry on the
|
it should be cached. If it should not be cached, or if the dentry
|
||||||
unused list just means that if the system needs some RAM, it
|
is not hashed, it is deleted. Otherwise cached dentries are put
|
||||||
goes through the unused list of dentries and deallocates them.
|
into an LRU list to be reclaimed on memory shortage.
|
||||||
If the dentry has already been unhashed and the usage count
|
|
||||||
drops to 0, in this case the dentry is deallocated after the
|
|
||||||
"d_delete" method is called
|
|
||||||
|
|
||||||
d_drop: this unhashes a dentry from its parents hash list. A
|
d_drop: this unhashes a dentry from its parents hash list. A
|
||||||
subsequent call to dput() will deallocate the dentry if its
|
subsequent call to dput() will deallocate the dentry if its
|
||||||
|
|
|
@ -0,0 +1,115 @@
|
||||||
|
Kernel driver for CMA3000-D0x
|
||||||
|
============================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* VTI CMA3000-D0x
|
||||||
|
Datasheet:
|
||||||
|
CMA3000-D0X Product Family Specification 8281000A.02.pdf
|
||||||
|
<http://www.vti.fi/en/>
|
||||||
|
|
||||||
|
Author: Hemanth V <hemanthv@ti.com>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
CMA3000 Tri-axis accelerometer supports Motion detect, Measurement and
|
||||||
|
Free fall modes.
|
||||||
|
|
||||||
|
Motion Detect Mode: Its the low power mode where interrupts are generated only
|
||||||
|
when motion exceeds the defined thresholds.
|
||||||
|
|
||||||
|
Measurement Mode: This mode is used to read the acceleration data on X,Y,Z
|
||||||
|
axis and supports 400, 100, 40 Hz sample frequency.
|
||||||
|
|
||||||
|
Free fall Mode: This mode is intended to save system resources.
|
||||||
|
|
||||||
|
Threshold values: Chip supports defining threshold values for above modes
|
||||||
|
which includes time and g value. Refer product specifications for more details.
|
||||||
|
|
||||||
|
CMA3000 chip supports mutually exclusive I2C and SPI interfaces for
|
||||||
|
communication, currently the driver supports I2C based communication only.
|
||||||
|
Initial configuration for bus mode is set in non volatile memory and can later
|
||||||
|
be modified through bus interface command.
|
||||||
|
|
||||||
|
Driver reports acceleration data through input subsystem. It generates ABS_MISC
|
||||||
|
event with value 1 when free fall is detected.
|
||||||
|
|
||||||
|
Platform data need to be configured for initial default values.
|
||||||
|
|
||||||
|
Platform Data
|
||||||
|
-------------
|
||||||
|
fuzz_x: Noise on X Axis
|
||||||
|
|
||||||
|
fuzz_y: Noise on Y Axis
|
||||||
|
|
||||||
|
fuzz_z: Noise on Z Axis
|
||||||
|
|
||||||
|
g_range: G range in milli g i.e 2000 or 8000
|
||||||
|
|
||||||
|
mode: Default Operating mode
|
||||||
|
|
||||||
|
mdthr: Motion detect g range threshold value
|
||||||
|
|
||||||
|
mdfftmr: Motion detect and free fall time threshold value
|
||||||
|
|
||||||
|
ffthr: Free fall g range threshold value
|
||||||
|
|
||||||
|
Input Interface
|
||||||
|
--------------
|
||||||
|
Input driver version is 1.0.0
|
||||||
|
Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
|
||||||
|
Input device name: "cma3000-accelerometer"
|
||||||
|
Supported events:
|
||||||
|
Event type 0 (Sync)
|
||||||
|
Event type 3 (Absolute)
|
||||||
|
Event code 0 (X)
|
||||||
|
Value 47
|
||||||
|
Min -8000
|
||||||
|
Max 8000
|
||||||
|
Fuzz 200
|
||||||
|
Event code 1 (Y)
|
||||||
|
Value -28
|
||||||
|
Min -8000
|
||||||
|
Max 8000
|
||||||
|
Fuzz 200
|
||||||
|
Event code 2 (Z)
|
||||||
|
Value 905
|
||||||
|
Min -8000
|
||||||
|
Max 8000
|
||||||
|
Fuzz 200
|
||||||
|
Event code 40 (Misc)
|
||||||
|
Value 0
|
||||||
|
Min 0
|
||||||
|
Max 1
|
||||||
|
Event type 4 (Misc)
|
||||||
|
|
||||||
|
|
||||||
|
Register/Platform parameters Description
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
mode:
|
||||||
|
0: power down mode
|
||||||
|
1: 100 Hz Measurement mode
|
||||||
|
2: 400 Hz Measurement mode
|
||||||
|
3: 40 Hz Measurement mode
|
||||||
|
4: Motion Detect mode (default)
|
||||||
|
5: 100 Hz Free fall mode
|
||||||
|
6: 40 Hz Free fall mode
|
||||||
|
7: Power off mode
|
||||||
|
|
||||||
|
grange:
|
||||||
|
2000: 2000 mg or 2G Range
|
||||||
|
8000: 8000 mg or 8G Range
|
||||||
|
|
||||||
|
mdthr:
|
||||||
|
X: X * 71mg (8G Range)
|
||||||
|
X: X * 18mg (2G Range)
|
||||||
|
|
||||||
|
mdfftmr:
|
||||||
|
X: (X & 0x70) * 100 ms (MDTMR)
|
||||||
|
(X & 0x0F) * 2.5 ms (FFTMR 400 Hz)
|
||||||
|
(X & 0x0F) * 10 ms (FFTMR 100 Hz)
|
||||||
|
|
||||||
|
ffthr:
|
||||||
|
X: (X >> 2) * 18mg (2G Range)
|
||||||
|
X: (X & 0x0F) * 71 mg (8G Range)
|
|
@ -1,6 +1,6 @@
|
||||||
Multi-touch (MT) Protocol
|
Multi-touch (MT) Protocol
|
||||||
-------------------------
|
-------------------------
|
||||||
Copyright (C) 2009 Henrik Rydberg <rydberg@euromail.se>
|
Copyright (C) 2009-2010 Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
|
@ -161,19 +161,24 @@ against the glass. The inner region will increase, and in general, the
|
||||||
ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR, which is always smaller than
|
ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR, which is always smaller than
|
||||||
unity, is related to the contact pressure. For pressure-based devices,
|
unity, is related to the contact pressure. For pressure-based devices,
|
||||||
ABS_MT_PRESSURE may be used to provide the pressure on the contact area
|
ABS_MT_PRESSURE may be used to provide the pressure on the contact area
|
||||||
instead.
|
instead. Devices capable of contact hovering can use ABS_MT_DISTANCE to
|
||||||
|
indicate the distance between the contact and the surface.
|
||||||
|
|
||||||
In addition to the MAJOR parameters, the oval shape of the contact can be
|
In addition to the MAJOR parameters, the oval shape of the contact can be
|
||||||
described by adding the MINOR parameters, such that MAJOR and MINOR are the
|
described by adding the MINOR parameters, such that MAJOR and MINOR are the
|
||||||
major and minor axis of an ellipse. Finally, the orientation of the oval
|
major and minor axis of an ellipse. Finally, the orientation of the oval
|
||||||
shape can be describe with the ORIENTATION parameter.
|
shape can be describe with the ORIENTATION parameter.
|
||||||
|
|
||||||
|
For type A devices, further specification of the touch shape is possible
|
||||||
|
via ABS_MT_BLOB_ID.
|
||||||
|
|
||||||
The ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a
|
The ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a
|
||||||
contact or a pen or something else. Devices with more granular information
|
finger or a pen or something else. Finally, the ABS_MT_TRACKING_ID event
|
||||||
may specify general shapes as blobs, i.e., as a sequence of rectangular
|
may be used to track identified contacts over time [5].
|
||||||
shapes grouped together by an ABS_MT_BLOB_ID. Finally, for the few devices
|
|
||||||
that currently support it, the ABS_MT_TRACKING_ID event may be used to
|
In the type B protocol, ABS_MT_TOOL_TYPE and ABS_MT_TRACKING_ID are
|
||||||
report contact tracking from hardware [5].
|
implicitly handled by input core; drivers should instead call
|
||||||
|
input_mt_report_slot_state().
|
||||||
|
|
||||||
|
|
||||||
Event Semantics
|
Event Semantics
|
||||||
|
@ -213,6 +218,12 @@ The pressure, in arbitrary units, on the contact area. May be used instead
|
||||||
of TOUCH and WIDTH for pressure-based devices or any device with a spatial
|
of TOUCH and WIDTH for pressure-based devices or any device with a spatial
|
||||||
signal intensity distribution.
|
signal intensity distribution.
|
||||||
|
|
||||||
|
ABS_MT_DISTANCE
|
||||||
|
|
||||||
|
The distance, in surface units, between the contact and the surface. Zero
|
||||||
|
distance means the contact is touching the surface. A positive number means
|
||||||
|
the contact is hovering above the surface.
|
||||||
|
|
||||||
ABS_MT_ORIENTATION
|
ABS_MT_ORIENTATION
|
||||||
|
|
||||||
The orientation of the ellipse. The value should describe a signed quarter
|
The orientation of the ellipse. The value should describe a signed quarter
|
||||||
|
@ -240,21 +251,24 @@ ABS_MT_TOOL_TYPE
|
||||||
The type of approaching tool. A lot of kernel drivers cannot distinguish
|
The type of approaching tool. A lot of kernel drivers cannot distinguish
|
||||||
between different tool types, such as a finger or a pen. In such cases, the
|
between different tool types, such as a finger or a pen. In such cases, the
|
||||||
event should be omitted. The protocol currently supports MT_TOOL_FINGER and
|
event should be omitted. The protocol currently supports MT_TOOL_FINGER and
|
||||||
MT_TOOL_PEN [2].
|
MT_TOOL_PEN [2]. For type B devices, this event is handled by input core;
|
||||||
|
drivers should instead use input_mt_report_slot_state().
|
||||||
|
|
||||||
ABS_MT_BLOB_ID
|
ABS_MT_BLOB_ID
|
||||||
|
|
||||||
The BLOB_ID groups several packets together into one arbitrarily shaped
|
The BLOB_ID groups several packets together into one arbitrarily shaped
|
||||||
contact. This is a low-level anonymous grouping for type A devices, and
|
contact. The sequence of points forms a polygon which defines the shape of
|
||||||
|
the contact. This is a low-level anonymous grouping for type A devices, and
|
||||||
should not be confused with the high-level trackingID [5]. Most type A
|
should not be confused with the high-level trackingID [5]. Most type A
|
||||||
devices do not have blob capability, so drivers can safely omit this event.
|
devices do not have blob capability, so drivers can safely omit this event.
|
||||||
|
|
||||||
ABS_MT_TRACKING_ID
|
ABS_MT_TRACKING_ID
|
||||||
|
|
||||||
The TRACKING_ID identifies an initiated contact throughout its life cycle
|
The TRACKING_ID identifies an initiated contact throughout its life cycle
|
||||||
[5]. This event is mandatory for type B devices. The value range of the
|
[5]. The value range of the TRACKING_ID should be large enough to ensure
|
||||||
TRACKING_ID should be large enough to ensure unique identification of a
|
unique identification of a contact maintained over an extended period of
|
||||||
contact maintained over an extended period of time.
|
time. For type B devices, this event is handled by input core; drivers
|
||||||
|
should instead use input_mt_report_slot_state().
|
||||||
|
|
||||||
|
|
||||||
Event Computation
|
Event Computation
|
||||||
|
@ -301,18 +315,19 @@ and with ORIENTATION, one can detect twisting of fingers.
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
|
|
||||||
In order to stay compatible with existing applications, the data
|
In order to stay compatible with existing applications, the data reported
|
||||||
reported in a finger packet must not be recognized as single-touch
|
in a finger packet must not be recognized as single-touch events.
|
||||||
events. In addition, all finger data must bypass input filtering,
|
|
||||||
since subsequent events of the same type refer to different fingers.
|
|
||||||
|
|
||||||
The first kernel driver to utilize the MT protocol is the bcm5974 driver,
|
For type A devices, all finger data bypasses input filtering, since
|
||||||
where examples can be found.
|
subsequent events of the same type refer to different fingers.
|
||||||
|
|
||||||
|
For example usage of the type A protocol, see the bcm5974 driver. For
|
||||||
|
example usage of the type B protocol, see the hid-egalax driver.
|
||||||
|
|
||||||
[1] With the extension ABS_MT_APPROACH_X and ABS_MT_APPROACH_Y, the
|
[1] With the extension ABS_MT_APPROACH_X and ABS_MT_APPROACH_Y, the
|
||||||
difference between the contact position and the approaching tool position
|
difference between the contact position and the approaching tool position
|
||||||
could be used to derive tilt.
|
could be used to derive tilt.
|
||||||
[2] The list can of course be extended.
|
[2] The list can of course be extended.
|
||||||
[3] Multitouch X driver project: http://bitmath.org/code/multitouch/.
|
[3] The mtdev project: http://bitmath.org/code/mtdev/.
|
||||||
[4] See the section on event computation.
|
[4] See the section on event computation.
|
||||||
[5] See the section on finger tracking.
|
[5] See the section on finger tracking.
|
||||||
|
|
|
@ -155,7 +155,6 @@ Code Seq#(hex) Include File Comments
|
||||||
'Q' all linux/soundcard.h
|
'Q' all linux/soundcard.h
|
||||||
'R' 00-1F linux/random.h conflict!
|
'R' 00-1F linux/random.h conflict!
|
||||||
'R' 01 linux/rfkill.h conflict!
|
'R' 01 linux/rfkill.h conflict!
|
||||||
'R' 01-0F media/rds.h conflict!
|
|
||||||
'R' C0-DF net/bluetooth/rfcomm.h
|
'R' C0-DF net/bluetooth/rfcomm.h
|
||||||
'S' all linux/cdrom.h conflict!
|
'S' all linux/cdrom.h conflict!
|
||||||
'S' 80-81 scsi/scsi_ioctl.h conflict!
|
'S' 80-81 scsi/scsi_ioctl.h conflict!
|
||||||
|
@ -194,7 +193,6 @@ Code Seq#(hex) Include File Comments
|
||||||
<http://lrcwww.epfl.ch/>
|
<http://lrcwww.epfl.ch/>
|
||||||
'b' 00-FF conflict! bit3 vme host bridge
|
'b' 00-FF conflict! bit3 vme host bridge
|
||||||
<mailto:natalia@nikhefk.nikhef.nl>
|
<mailto:natalia@nikhefk.nikhef.nl>
|
||||||
'b' 00-0F media/bt819.h conflict!
|
|
||||||
'c' all linux/cm4000_cs.h conflict!
|
'c' all linux/cm4000_cs.h conflict!
|
||||||
'c' 00-7F linux/comstats.h conflict!
|
'c' 00-7F linux/comstats.h conflict!
|
||||||
'c' 00-7F linux/coda.h conflict!
|
'c' 00-7F linux/coda.h conflict!
|
||||||
|
@ -260,14 +258,11 @@ Code Seq#(hex) Include File Comments
|
||||||
't' 80-8F linux/isdn_ppp.h
|
't' 80-8F linux/isdn_ppp.h
|
||||||
't' 90 linux/toshiba.h
|
't' 90 linux/toshiba.h
|
||||||
'u' 00-1F linux/smb_fs.h gone
|
'u' 00-1F linux/smb_fs.h gone
|
||||||
'v' all linux/videodev.h conflict!
|
|
||||||
'v' 00-1F linux/ext2_fs.h conflict!
|
'v' 00-1F linux/ext2_fs.h conflict!
|
||||||
'v' 00-1F linux/fs.h conflict!
|
'v' 00-1F linux/fs.h conflict!
|
||||||
'v' 00-0F linux/sonypi.h conflict!
|
'v' 00-0F linux/sonypi.h conflict!
|
||||||
'v' C0-CF drivers/media/video/ov511.h conflict!
|
|
||||||
'v' C0-DF media/pwc-ioctl.h conflict!
|
'v' C0-DF media/pwc-ioctl.h conflict!
|
||||||
'v' C0-FF linux/meye.h conflict!
|
'v' C0-FF linux/meye.h conflict!
|
||||||
'v' C0-CF drivers/media/video/zoran/zoran.h conflict!
|
|
||||||
'v' D0-DF drivers/media/video/cpia2/cpia2dev.h conflict!
|
'v' D0-DF drivers/media/video/cpia2/cpia2dev.h conflict!
|
||||||
'w' all CERN SCI driver
|
'w' all CERN SCI driver
|
||||||
'y' 00-1F packet based user level communications
|
'y' 00-1F packet based user level communications
|
||||||
|
@ -278,7 +273,6 @@ Code Seq#(hex) Include File Comments
|
||||||
<mailto:oe@port.de>
|
<mailto:oe@port.de>
|
||||||
'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict!
|
'z' 10-4F drivers/s390/crypto/zcrypt_api.h conflict!
|
||||||
0x80 00-1F linux/fb.h
|
0x80 00-1F linux/fb.h
|
||||||
0x88 00-3F media/ovcamchip.h
|
|
||||||
0x89 00-06 arch/x86/include/asm/sockios.h
|
0x89 00-06 arch/x86/include/asm/sockios.h
|
||||||
0x89 0B-DF linux/sockios.h
|
0x89 0B-DF linux/sockios.h
|
||||||
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
||||||
|
|
|
@ -537,7 +537,7 @@
|
||||||
Notes: Further information in
|
Notes: Further information in
|
||||||
http://www.oreilly.com/catalog/linuxdrive2/
|
http://www.oreilly.com/catalog/linuxdrive2/
|
||||||
|
|
||||||
* Title: "Linux Device Drivers, 3nd Edition"
|
* Title: "Linux Device Drivers, 3rd Edition"
|
||||||
Authors: Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman
|
Authors: Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman
|
||||||
Publisher: O'Reilly & Associates.
|
Publisher: O'Reilly & Associates.
|
||||||
Date: 2005.
|
Date: 2005.
|
||||||
|
@ -592,14 +592,6 @@
|
||||||
Pages: 600.
|
Pages: 600.
|
||||||
ISBN: 0-13-101908-2
|
ISBN: 0-13-101908-2
|
||||||
|
|
||||||
* Title: "The Design and Implementation of the 4.4 BSD UNIX
|
|
||||||
Operating System"
|
|
||||||
Author: Marshall Kirk McKusick, Keith Bostic, Michael J. Karels,
|
|
||||||
John S. Quarterman.
|
|
||||||
Publisher: Addison-Wesley.
|
|
||||||
Date: 1996.
|
|
||||||
ISBN: 0-201-54979-4
|
|
||||||
|
|
||||||
* Title: "Programming for the real world - POSIX.4"
|
* Title: "Programming for the real world - POSIX.4"
|
||||||
Author: Bill O. Gallmeister.
|
Author: Bill O. Gallmeister.
|
||||||
Publisher: O'Reilly & Associates, Inc..
|
Publisher: O'Reilly & Associates, Inc..
|
||||||
|
@ -610,28 +602,13 @@
|
||||||
POSIX. Good reference.
|
POSIX. Good reference.
|
||||||
|
|
||||||
* Title: "UNIX Systems for Modern Architectures: Symmetric
|
* Title: "UNIX Systems for Modern Architectures: Symmetric
|
||||||
Multiprocesssing and Caching for Kernel Programmers"
|
Multiprocessing and Caching for Kernel Programmers"
|
||||||
Author: Curt Schimmel.
|
Author: Curt Schimmel.
|
||||||
Publisher: Addison Wesley.
|
Publisher: Addison Wesley.
|
||||||
Date: June, 1994.
|
Date: June, 1994.
|
||||||
Pages: 432.
|
Pages: 432.
|
||||||
ISBN: 0-201-63338-8
|
ISBN: 0-201-63338-8
|
||||||
|
|
||||||
* Title: "The Design and Implementation of the 4.3 BSD UNIX
|
|
||||||
Operating System"
|
|
||||||
Author: Samuel J. Leffler, Marshall Kirk McKusick, Michael J.
|
|
||||||
Karels, John S. Quarterman.
|
|
||||||
Publisher: Addison-Wesley.
|
|
||||||
Date: 1989 (reprinted with corrections on October, 1990).
|
|
||||||
ISBN: 0-201-06196-1
|
|
||||||
|
|
||||||
* Title: "The Design of the UNIX Operating System"
|
|
||||||
Author: Maurice J. Bach.
|
|
||||||
Publisher: Prentice Hall.
|
|
||||||
Date: 1986.
|
|
||||||
Pages: 471.
|
|
||||||
ISBN: 0-13-201757-1
|
|
||||||
|
|
||||||
MISCELLANEOUS:
|
MISCELLANEOUS:
|
||||||
|
|
||||||
* Name: linux/Documentation
|
* Name: linux/Documentation
|
||||||
|
|
|
@ -1579,20 +1579,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
nmi_watchdog= [KNL,BUGS=X86] Debugging features for SMP kernels
|
nmi_watchdog= [KNL,BUGS=X86] Debugging features for SMP kernels
|
||||||
Format: [panic,][num]
|
Format: [panic,][num]
|
||||||
Valid num: 0,1,2
|
Valid num: 0
|
||||||
0 - turn nmi_watchdog off
|
0 - turn nmi_watchdog off
|
||||||
1 - use the IO-APIC timer for the NMI watchdog
|
|
||||||
2 - use the local APIC for the NMI watchdog using
|
|
||||||
a performance counter. Note: This will use one
|
|
||||||
performance counter and the local APIC's performance
|
|
||||||
vector.
|
|
||||||
When panic is specified, panic when an NMI watchdog
|
When panic is specified, panic when an NMI watchdog
|
||||||
timeout occurs.
|
timeout occurs.
|
||||||
This is useful when you use a panic=... timeout and
|
This is useful when you use a panic=... timeout and
|
||||||
need the box quickly up again.
|
need the box quickly up again.
|
||||||
Instead of 1 and 2 it is possible to use the following
|
|
||||||
symbolic names: lapic and ioapic
|
|
||||||
Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic
|
|
||||||
|
|
||||||
netpoll.carrier_timeout=
|
netpoll.carrier_timeout=
|
||||||
[NET] Specifies amount of time (in seconds) that
|
[NET] Specifies amount of time (in seconds) that
|
||||||
|
@ -1622,6 +1614,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
noapic [SMP,APIC] Tells the kernel to not make use of any
|
noapic [SMP,APIC] Tells the kernel to not make use of any
|
||||||
IOAPICs that may be present in the system.
|
IOAPICs that may be present in the system.
|
||||||
|
|
||||||
|
noautogroup Disable scheduler automatic task group creation.
|
||||||
|
|
||||||
nobats [PPC] Do not use BATs for mapping kernel lowmem
|
nobats [PPC] Do not use BATs for mapping kernel lowmem
|
||||||
on "Classic" PPC cores.
|
on "Classic" PPC cores.
|
||||||
|
|
||||||
|
@ -1759,7 +1753,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
nousb [USB] Disable the USB subsystem
|
nousb [USB] Disable the USB subsystem
|
||||||
|
|
||||||
nowatchdog [KNL] Disable the lockup detector.
|
nowatchdog [KNL] Disable the lockup detector (NMI watchdog).
|
||||||
|
|
||||||
nowb [ARM]
|
nowb [ARM]
|
||||||
|
|
||||||
|
@ -2175,11 +2169,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
reset_devices [KNL] Force drivers to reset the underlying device
|
reset_devices [KNL] Force drivers to reset the underlying device
|
||||||
during initialization.
|
during initialization.
|
||||||
|
|
||||||
resource_alloc_from_bottom
|
|
||||||
Allocate new resources from the beginning of available
|
|
||||||
space, not the end. If you need to use this, please
|
|
||||||
report a bug.
|
|
||||||
|
|
||||||
resume= [SWSUSP]
|
resume= [SWSUSP]
|
||||||
Specify the partition device for software suspend
|
Specify the partition device for software suspend
|
||||||
|
|
||||||
|
@ -2472,12 +2461,13 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
to facilitate early boot debugging.
|
to facilitate early boot debugging.
|
||||||
See also Documentation/trace/events.txt
|
See also Documentation/trace/events.txt
|
||||||
|
|
||||||
tsc= Disable clocksource-must-verify flag for TSC.
|
tsc= Disable clocksource stability checks for TSC.
|
||||||
Format: <string>
|
Format: <string>
|
||||||
[x86] reliable: mark tsc clocksource as reliable, this
|
[x86] reliable: mark tsc clocksource as reliable, this
|
||||||
disables clocksource verification at runtime.
|
disables clocksource verification at runtime, as well
|
||||||
Used to enable high-resolution timer mode on older
|
as the stability checks done at bootup. Used to enable
|
||||||
hardware, and in virtualized environment.
|
high-resolution timer mode on older hardware, and in
|
||||||
|
virtualized environment.
|
||||||
[x86] noirqtime: Do not use TSC to do irq accounting.
|
[x86] noirqtime: Do not use TSC to do irq accounting.
|
||||||
Used to run time disable IRQ_TIME_ACCOUNTING on any
|
Used to run time disable IRQ_TIME_ACCOUNTING on any
|
||||||
platforms where RDTSC is slow and this accounting
|
platforms where RDTSC is slow and this accounting
|
||||||
|
|
|
@ -0,0 +1,327 @@
|
||||||
|
Copyright (c) 2009-2010 QLogic Corporation
|
||||||
|
QLogic Linux qlcnic NIC Driver
|
||||||
|
|
||||||
|
This program includes a device driver for Linux 2.6 that may be
|
||||||
|
distributed with QLogic hardware specific firmware binary file.
|
||||||
|
You may modify and redistribute the device driver code under the
|
||||||
|
GNU General Public License (a copy of which is attached hereto as
|
||||||
|
Exhibit A) published by the Free Software Foundation (version 2).
|
||||||
|
|
||||||
|
You may redistribute the hardware specific firmware binary file
|
||||||
|
under the following terms:
|
||||||
|
|
||||||
|
1. Redistribution of source code (only if applicable),
|
||||||
|
must retain the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistribution in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The name of QLogic Corporation may not be used to
|
||||||
|
endorse or promote products derived from this software
|
||||||
|
without specific prior written permission
|
||||||
|
|
||||||
|
REGARDLESS OF WHAT LICENSING MECHANISM IS USED OR APPLICABLE,
|
||||||
|
THIS PROGRAM IS PROVIDED BY QLOGIC CORPORATION "AS IS'' AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
|
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
USER ACKNOWLEDGES AND AGREES THAT USE OF THIS PROGRAM WILL NOT
|
||||||
|
CREATE OR GIVE GROUNDS FOR A LICENSE BY IMPLICATION, ESTOPPEL, OR
|
||||||
|
OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS (PATENT, COPYRIGHT,
|
||||||
|
TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT) EMBODIED IN
|
||||||
|
ANY OTHER QLOGIC HARDWARE OR SOFTWARE EITHER SOLELY OR IN
|
||||||
|
COMBINATION WITH THIS PROGRAM.
|
||||||
|
|
||||||
|
|
||||||
|
EXHIBIT A
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
|
@ -0,0 +1,240 @@
|
||||||
|
[state: 21-11-2010]
|
||||||
|
|
||||||
|
BATMAN-ADV
|
||||||
|
----------
|
||||||
|
|
||||||
|
Batman advanced is a new approach to wireless networking which
|
||||||
|
does no longer operate on the IP basis. Unlike the batman daemon,
|
||||||
|
which exchanges information using UDP packets and sets routing
|
||||||
|
tables, batman-advanced operates on ISO/OSI Layer 2 only and uses
|
||||||
|
and routes (or better: bridges) Ethernet Frames. It emulates a
|
||||||
|
virtual network switch of all nodes participating. Therefore all
|
||||||
|
nodes appear to be link local, thus all higher operating proto-
|
||||||
|
cols won't be affected by any changes within the network. You can
|
||||||
|
run almost any protocol above batman advanced, prominent examples
|
||||||
|
are: IPv4, IPv6, DHCP, IPX.
|
||||||
|
|
||||||
|
Batman advanced was implemented as a Linux kernel driver to re-
|
||||||
|
duce the overhead to a minimum. It does not depend on any (other)
|
||||||
|
network driver, and can be used on wifi as well as ethernet lan,
|
||||||
|
vpn, etc ... (anything with ethernet-style layer 2).
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Load the batman-adv module into your kernel:
|
||||||
|
|
||||||
|
# insmod batman-adv.ko
|
||||||
|
|
||||||
|
The module is now waiting for activation. You must add some in-
|
||||||
|
terfaces on which batman can operate. After loading the module
|
||||||
|
batman advanced will scan your systems interfaces to search for
|
||||||
|
compatible interfaces. Once found, it will create subfolders in
|
||||||
|
the /sys directories of each supported interface, e.g.
|
||||||
|
|
||||||
|
# ls /sys/class/net/eth0/batman_adv/
|
||||||
|
# iface_status mesh_iface
|
||||||
|
|
||||||
|
If an interface does not have the "batman_adv" subfolder it prob-
|
||||||
|
ably is not supported. Not supported interfaces are: loopback,
|
||||||
|
non-ethernet and batman's own interfaces.
|
||||||
|
|
||||||
|
Note: After the module was loaded it will continuously watch for
|
||||||
|
new interfaces to verify the compatibility. There is no need to
|
||||||
|
reload the module if you plug your USB wifi adapter into your ma-
|
||||||
|
chine after batman advanced was initially loaded.
|
||||||
|
|
||||||
|
To activate a given interface simply write "bat0" into its
|
||||||
|
"mesh_iface" file inside the batman_adv subfolder:
|
||||||
|
|
||||||
|
# echo bat0 > /sys/class/net/eth0/batman_adv/mesh_iface
|
||||||
|
|
||||||
|
Repeat this step for all interfaces you wish to add. Now batman
|
||||||
|
starts using/broadcasting on this/these interface(s).
|
||||||
|
|
||||||
|
By reading the "iface_status" file you can check its status:
|
||||||
|
|
||||||
|
# cat /sys/class/net/eth0/batman_adv/iface_status
|
||||||
|
# active
|
||||||
|
|
||||||
|
To deactivate an interface you have to write "none" into its
|
||||||
|
"mesh_iface" file:
|
||||||
|
|
||||||
|
# echo none > /sys/class/net/eth0/batman_adv/mesh_iface
|
||||||
|
|
||||||
|
|
||||||
|
All mesh wide settings can be found in batman's own interface
|
||||||
|
folder:
|
||||||
|
|
||||||
|
# ls /sys/class/net/bat0/mesh/
|
||||||
|
# aggregated_ogms bonding fragmentation orig_interval
|
||||||
|
# vis_mode
|
||||||
|
|
||||||
|
|
||||||
|
There is a special folder for debugging informations:
|
||||||
|
|
||||||
|
# ls /sys/kernel/debug/batman_adv/bat0/
|
||||||
|
# originators socket transtable_global transtable_local
|
||||||
|
# vis_data
|
||||||
|
|
||||||
|
|
||||||
|
Some of the files contain all sort of status information regard-
|
||||||
|
ing the mesh network. For example, you can view the table of
|
||||||
|
originators (mesh participants) with:
|
||||||
|
|
||||||
|
# cat /sys/kernel/debug/batman_adv/bat0/originators
|
||||||
|
|
||||||
|
Other files allow to change batman's behaviour to better fit your
|
||||||
|
requirements. For instance, you can check the current originator
|
||||||
|
interval (value in milliseconds which determines how often batman
|
||||||
|
sends its broadcast packets):
|
||||||
|
|
||||||
|
# cat /sys/class/net/bat0/mesh/orig_interval
|
||||||
|
# 1000
|
||||||
|
|
||||||
|
and also change its value:
|
||||||
|
|
||||||
|
# echo 3000 > /sys/class/net/bat0/mesh/orig_interval
|
||||||
|
|
||||||
|
In very mobile scenarios, you might want to adjust the originator
|
||||||
|
interval to a lower value. This will make the mesh more respon-
|
||||||
|
sive to topology changes, but will also increase the overhead.
|
||||||
|
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
-----
|
||||||
|
|
||||||
|
To make use of your newly created mesh, batman advanced provides
|
||||||
|
a new interface "bat0" which you should use from this point on.
|
||||||
|
All interfaces added to batman advanced are not relevant any
|
||||||
|
longer because batman handles them for you. Basically, one "hands
|
||||||
|
over" the data by using the batman interface and batman will make
|
||||||
|
sure it reaches its destination.
|
||||||
|
|
||||||
|
The "bat0" interface can be used like any other regular inter-
|
||||||
|
face. It needs an IP address which can be either statically con-
|
||||||
|
figured or dynamically (by using DHCP or similar services):
|
||||||
|
|
||||||
|
# NodeA: ifconfig bat0 192.168.0.1
|
||||||
|
# NodeB: ifconfig bat0 192.168.0.2
|
||||||
|
# NodeB: ping 192.168.0.1
|
||||||
|
|
||||||
|
Note: In order to avoid problems remove all IP addresses previ-
|
||||||
|
ously assigned to interfaces now used by batman advanced, e.g.
|
||||||
|
|
||||||
|
# ifconfig eth0 0.0.0.0
|
||||||
|
|
||||||
|
|
||||||
|
VISUALIZATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
If you want topology visualization, at least one mesh node must
|
||||||
|
be configured as VIS-server:
|
||||||
|
|
||||||
|
# echo "server" > /sys/class/net/bat0/mesh/vis_mode
|
||||||
|
|
||||||
|
Each node is either configured as "server" or as "client" (de-
|
||||||
|
fault: "client"). Clients send their topology data to the server
|
||||||
|
next to them, and server synchronize with other servers. If there
|
||||||
|
is no server configured (default) within the mesh, no topology
|
||||||
|
information will be transmitted. With these "synchronizing
|
||||||
|
servers", there can be 1 or more vis servers sharing the same (or
|
||||||
|
at least very similar) data.
|
||||||
|
|
||||||
|
When configured as server, you can get a topology snapshot of
|
||||||
|
your mesh:
|
||||||
|
|
||||||
|
# cat /sys/kernel/debug/batman_adv/bat0/vis_data
|
||||||
|
|
||||||
|
This raw output is intended to be easily parsable and convertable
|
||||||
|
with other tools. Have a look at the batctl README if you want a
|
||||||
|
vis output in dot or json format for instance and how those out-
|
||||||
|
puts could then be visualised in an image.
|
||||||
|
|
||||||
|
The raw format consists of comma separated values per entry where
|
||||||
|
each entry is giving information about a certain source inter-
|
||||||
|
face. Each entry can/has to have the following values:
|
||||||
|
-> "mac" - mac address of an originator's source interface
|
||||||
|
(each line begins with it)
|
||||||
|
-> "TQ mac value" - src mac's link quality towards mac address
|
||||||
|
of a neighbor originator's interface which
|
||||||
|
is being used for routing
|
||||||
|
-> "HNA mac" - HNA announced by source mac
|
||||||
|
-> "PRIMARY" - this is a primary interface
|
||||||
|
-> "SEC mac" - secondary mac address of source
|
||||||
|
(requires preceding PRIMARY)
|
||||||
|
|
||||||
|
The TQ value has a range from 4 to 255 with 255 being the best.
|
||||||
|
The HNA entries are showing which hosts are connected to the mesh
|
||||||
|
via bat0 or being bridged into the mesh network. The PRIMARY/SEC
|
||||||
|
values are only applied on primary interfaces
|
||||||
|
|
||||||
|
|
||||||
|
LOGGING/DEBUGGING
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
All error messages, warnings and information messages are sent to
|
||||||
|
the kernel log. Depending on your operating system distribution
|
||||||
|
this can be read in one of a number of ways. Try using the com-
|
||||||
|
mands: dmesg, logread, or looking in the files /var/log/kern.log
|
||||||
|
or /var/log/syslog. All batman-adv messages are prefixed with
|
||||||
|
"batman-adv:" So to see just these messages try
|
||||||
|
|
||||||
|
# dmesg | grep batman-adv
|
||||||
|
|
||||||
|
When investigating problems with your mesh network it is some-
|
||||||
|
times necessary to see more detail debug messages. This must be
|
||||||
|
enabled when compiling the batman-adv module. When building bat-
|
||||||
|
man-adv as part of kernel, use "make menuconfig" and enable the
|
||||||
|
option "B.A.T.M.A.N. debugging".
|
||||||
|
|
||||||
|
Those additional debug messages can be accessed using a special
|
||||||
|
file in debugfs
|
||||||
|
|
||||||
|
# cat /sys/kernel/debug/batman_adv/bat0/log
|
||||||
|
|
||||||
|
The additional debug output is by default disabled. It can be en-
|
||||||
|
abled during run time. Following log_levels are defined:
|
||||||
|
|
||||||
|
0 - All debug output disabled
|
||||||
|
1 - Enable messages related to routing / flooding / broadcasting
|
||||||
|
2 - Enable route or hna added / changed / deleted
|
||||||
|
3 - Enable all messages
|
||||||
|
|
||||||
|
The debug output can be changed at runtime using the file
|
||||||
|
/sys/class/net/bat0/mesh/log_level. e.g.
|
||||||
|
|
||||||
|
# echo 2 > /sys/class/net/bat0/mesh/log_level
|
||||||
|
|
||||||
|
will enable debug messages for when routes or HNAs change.
|
||||||
|
|
||||||
|
|
||||||
|
BATCTL
|
||||||
|
------
|
||||||
|
|
||||||
|
As batman advanced operates on layer 2 all hosts participating in
|
||||||
|
the virtual switch are completely transparent for all protocols
|
||||||
|
above layer 2. Therefore the common diagnosis tools do not work
|
||||||
|
as expected. To overcome these problems batctl was created. At
|
||||||
|
the moment the batctl contains ping, traceroute, tcpdump and
|
||||||
|
interfaces to the kernel module settings.
|
||||||
|
|
||||||
|
For more information, please see the manpage (man batctl).
|
||||||
|
|
||||||
|
batctl is available on http://www.open-mesh.org/
|
||||||
|
|
||||||
|
|
||||||
|
CONTACT
|
||||||
|
-------
|
||||||
|
|
||||||
|
Please send us comments, experiences, questions, anything :)
|
||||||
|
|
||||||
|
IRC: #batman on irc.freenode.org
|
||||||
|
Mailing-list: b.a.t.m.a.n@b.a.t.m.a.n@lists.open-mesh.org
|
||||||
|
(optional subscription at
|
||||||
|
https://lists.open-mesh.org/mm/listinfo/b.a.t.m.a.n)
|
||||||
|
|
||||||
|
You can also contact the Authors:
|
||||||
|
|
||||||
|
Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
|
|
@ -47,6 +47,26 @@ http://linux-net.osdl.org/index.php/DCCP_Testing#Experimental_DCCP_source_tree
|
||||||
|
|
||||||
Socket options
|
Socket options
|
||||||
==============
|
==============
|
||||||
|
DCCP_SOCKOPT_QPOLICY_ID sets the dequeuing policy for outgoing packets. It takes
|
||||||
|
a policy ID as argument and can only be set before the connection (i.e. changes
|
||||||
|
during an established connection are not supported). Currently, two policies are
|
||||||
|
defined: the "simple" policy (DCCPQ_POLICY_SIMPLE), which does nothing special,
|
||||||
|
and a priority-based variant (DCCPQ_POLICY_PRIO). The latter allows to pass an
|
||||||
|
u32 priority value as ancillary data to sendmsg(), where higher numbers indicate
|
||||||
|
a higher packet priority (similar to SO_PRIORITY). This ancillary data needs to
|
||||||
|
be formatted using a cmsg(3) message header filled in as follows:
|
||||||
|
cmsg->cmsg_level = SOL_DCCP;
|
||||||
|
cmsg->cmsg_type = DCCP_SCM_PRIORITY;
|
||||||
|
cmsg->cmsg_len = CMSG_LEN(sizeof(uint32_t)); /* or CMSG_LEN(4) */
|
||||||
|
|
||||||
|
DCCP_SOCKOPT_QPOLICY_TXQLEN sets the maximum length of the output queue. A zero
|
||||||
|
value is always interpreted as unbounded queue length. If different from zero,
|
||||||
|
the interpretation of this parameter depends on the current dequeuing policy
|
||||||
|
(see above): the "simple" policy will enforce a fixed queue size by returning
|
||||||
|
EAGAIN, whereas the "prio" policy enforces a fixed queue length by dropping the
|
||||||
|
lowest-priority packet first. The default value for this parameter is
|
||||||
|
initialised from /proc/sys/net/dccp/default/tx_qlen.
|
||||||
|
|
||||||
DCCP_SOCKOPT_SERVICE sets the service. The specification mandates use of
|
DCCP_SOCKOPT_SERVICE sets the service. The specification mandates use of
|
||||||
service codes (RFC 4340, sec. 8.1.2); if this socket option is not set,
|
service codes (RFC 4340, sec. 8.1.2); if this socket option is not set,
|
||||||
the socket will fall back to 0 (which means that no meaningful service code
|
the socket will fall back to 0 (which means that no meaningful service code
|
||||||
|
|
|
@ -72,7 +72,7 @@ Tx Descriptors: Number of transmit descriptors. A transmit descriptor is a data
|
||||||
ethtool -G eth? tx n, where n is the number of desired tx descriptors.
|
ethtool -G eth? tx n, where n is the number of desired tx descriptors.
|
||||||
|
|
||||||
Speed/Duplex: The driver auto-negotiates the link speed and duplex settings by
|
Speed/Duplex: The driver auto-negotiates the link speed and duplex settings by
|
||||||
default. Ethtool can be used as follows to force speed/duplex.
|
default. The ethtool utility can be used as follows to force speed/duplex.
|
||||||
|
|
||||||
ethtool -s eth? autoneg off speed {10|100} duplex {full|half}
|
ethtool -s eth? autoneg off speed {10|100} duplex {full|half}
|
||||||
|
|
||||||
|
@ -126,30 +126,21 @@ Additional Configurations
|
||||||
-------
|
-------
|
||||||
|
|
||||||
The driver utilizes the ethtool interface for driver configuration and
|
The driver utilizes the ethtool interface for driver configuration and
|
||||||
diagnostics, as well as displaying statistical information. Ethtool
|
diagnostics, as well as displaying statistical information. The ethtool
|
||||||
version 1.6 or later is required for this functionality.
|
version 1.6 or later is required for this functionality.
|
||||||
|
|
||||||
The latest release of ethtool can be found from
|
The latest release of ethtool can be found from
|
||||||
http://sourceforge.net/projects/gkernel.
|
http://ftp.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
NOTE: Ethtool 1.6 only supports a limited set of ethtool options. Support
|
|
||||||
for a more complete ethtool feature set can be enabled by upgrading
|
|
||||||
ethtool to ethtool-1.8.1.
|
|
||||||
|
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN* (WoL)
|
||||||
---------------------------
|
---------------------------
|
||||||
WoL is provided through the Ethtool* utility. Ethtool is included with Red
|
WoL is provided through the ethtool* utility. For instructions on enabling
|
||||||
Hat* 8.0. For other Linux distributions, download and install Ethtool from
|
WoL with ethtool, refer to the ethtool man page.
|
||||||
the following website: http://sourceforge.net/projects/gkernel.
|
|
||||||
|
|
||||||
For instructions on enabling WoL with Ethtool, refer to the Ethtool man page.
|
|
||||||
|
|
||||||
WoL will be enabled on the system during the next shut down or reboot. For
|
WoL will be enabled on the system during the next shut down or reboot. For
|
||||||
this driver version, in order to enable WoL, the e100 driver must be
|
this driver version, in order to enable WoL, the e100 driver must be
|
||||||
loaded when shutting down or rebooting the system.
|
loaded when shutting down or rebooting the system.
|
||||||
|
|
||||||
|
|
||||||
NAPI
|
NAPI
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ InterruptThrottleRate
|
||||||
---------------------
|
---------------------
|
||||||
(not supported on Intel(R) 82542, 82543 or 82544-based adapters)
|
(not supported on Intel(R) 82542, 82543 or 82544-based adapters)
|
||||||
Valid Range: 0,1,3,4,100-100000 (0=off, 1=dynamic, 3=dynamic conservative,
|
Valid Range: 0,1,3,4,100-100000 (0=off, 1=dynamic, 3=dynamic conservative,
|
||||||
4=simplified balancing)
|
4=simplified balancing)
|
||||||
Default Value: 3
|
Default Value: 3
|
||||||
|
|
||||||
The driver can limit the amount of interrupts per second that the adapter
|
The driver can limit the amount of interrupts per second that the adapter
|
||||||
|
@ -124,8 +124,8 @@ InterruptThrottleRate is set to mode 1. In this mode, which operates
|
||||||
the same as mode 3, the InterruptThrottleRate will be increased stepwise to
|
the same as mode 3, the InterruptThrottleRate will be increased stepwise to
|
||||||
70000 for traffic in class "Lowest latency".
|
70000 for traffic in class "Lowest latency".
|
||||||
|
|
||||||
In simplified mode the interrupt rate is based on the ratio of Tx and
|
In simplified mode the interrupt rate is based on the ratio of TX and
|
||||||
Rx traffic. If the bytes per second rate is approximately equal, the
|
RX traffic. If the bytes per second rate is approximately equal, the
|
||||||
interrupt rate will drop as low as 2000 interrupts per second. If the
|
interrupt rate will drop as low as 2000 interrupts per second. If the
|
||||||
traffic is mostly transmit or mostly receive, the interrupt rate could
|
traffic is mostly transmit or mostly receive, the interrupt rate could
|
||||||
be as high as 8000.
|
be as high as 8000.
|
||||||
|
@ -245,7 +245,7 @@ NOTE: Depending on the available system resources, the request for a
|
||||||
TxDescriptorStep
|
TxDescriptorStep
|
||||||
----------------
|
----------------
|
||||||
Valid Range: 1 (use every Tx Descriptor)
|
Valid Range: 1 (use every Tx Descriptor)
|
||||||
4 (use every 4th Tx Descriptor)
|
4 (use every 4th Tx Descriptor)
|
||||||
|
|
||||||
Default Value: 1 (use every Tx Descriptor)
|
Default Value: 1 (use every Tx Descriptor)
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ Valid Range: 0-xxxxxxx (0=off)
|
||||||
Default Value: 256
|
Default Value: 256
|
||||||
Usage: insmod e1000.ko copybreak=128
|
Usage: insmod e1000.ko copybreak=128
|
||||||
|
|
||||||
Driver copies all packets below or equaling this size to a fresh Rx
|
Driver copies all packets below or equaling this size to a fresh RX
|
||||||
buffer before handing it up the stack.
|
buffer before handing it up the stack.
|
||||||
|
|
||||||
This parameter is different than other parameters, in that it is a
|
This parameter is different than other parameters, in that it is a
|
||||||
|
@ -431,15 +431,15 @@ Additional Configurations
|
||||||
Ethtool
|
Ethtool
|
||||||
-------
|
-------
|
||||||
The driver utilizes the ethtool interface for driver configuration and
|
The driver utilizes the ethtool interface for driver configuration and
|
||||||
diagnostics, as well as displaying statistical information. Ethtool
|
diagnostics, as well as displaying statistical information. The ethtool
|
||||||
version 1.6 or later is required for this functionality.
|
version 1.6 or later is required for this functionality.
|
||||||
|
|
||||||
The latest release of ethtool can be found from
|
The latest release of ethtool can be found from
|
||||||
http://sourceforge.net/projects/gkernel.
|
http://ftp.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN* (WoL)
|
||||||
---------------------------
|
---------------------------
|
||||||
WoL is configured through the Ethtool* utility.
|
WoL is configured through the ethtool* utility.
|
||||||
|
|
||||||
WoL will be enabled on the system during the next shut down or reboot.
|
WoL will be enabled on the system during the next shut down or reboot.
|
||||||
For this driver version, in order to enable WoL, the e1000 driver must be
|
For this driver version, in order to enable WoL, the e1000 driver must be
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Linux* Driver for Intel(R) Network Connection
|
Linux* Driver for Intel(R) Network Connection
|
||||||
===============================================================
|
=============================================
|
||||||
|
|
||||||
Intel Gigabit Linux driver.
|
Intel Gigabit Linux driver.
|
||||||
Copyright(c) 1999 - 2010 Intel Corporation.
|
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||||
|
@ -61,6 +61,12 @@ per second, even if more packets have come in. This reduces interrupt
|
||||||
load on the system and can lower CPU utilization under heavy load,
|
load on the system and can lower CPU utilization under heavy load,
|
||||||
but will increase latency as packets are not processed as quickly.
|
but will increase latency as packets are not processed as quickly.
|
||||||
|
|
||||||
|
The default behaviour of the driver previously assumed a static
|
||||||
|
InterruptThrottleRate value of 8000, providing a good fallback value for
|
||||||
|
all traffic types, but lacking in small packet performance and latency.
|
||||||
|
The hardware can handle many more small packets per second however, and
|
||||||
|
for this reason an adaptive interrupt moderation algorithm was implemented.
|
||||||
|
|
||||||
The driver has two adaptive modes (setting 1 or 3) in which
|
The driver has two adaptive modes (setting 1 or 3) in which
|
||||||
it dynamically adjusts the InterruptThrottleRate value based on the traffic
|
it dynamically adjusts the InterruptThrottleRate value based on the traffic
|
||||||
that it receives. After determining the type of incoming traffic in the last
|
that it receives. After determining the type of incoming traffic in the last
|
||||||
|
@ -86,8 +92,8 @@ InterruptThrottleRate is set to mode 1. In this mode, which operates
|
||||||
the same as mode 3, the InterruptThrottleRate will be increased stepwise to
|
the same as mode 3, the InterruptThrottleRate will be increased stepwise to
|
||||||
70000 for traffic in class "Lowest latency".
|
70000 for traffic in class "Lowest latency".
|
||||||
|
|
||||||
In simplified mode the interrupt rate is based on the ratio of Tx and
|
In simplified mode the interrupt rate is based on the ratio of TX and
|
||||||
Rx traffic. If the bytes per second rate is approximately equal the
|
RX traffic. If the bytes per second rate is approximately equal, the
|
||||||
interrupt rate will drop as low as 2000 interrupts per second. If the
|
interrupt rate will drop as low as 2000 interrupts per second. If the
|
||||||
traffic is mostly transmit or mostly receive, the interrupt rate could
|
traffic is mostly transmit or mostly receive, the interrupt rate could
|
||||||
be as high as 8000.
|
be as high as 8000.
|
||||||
|
@ -177,7 +183,7 @@ Copybreak
|
||||||
Valid Range: 0-xxxxxxx (0=off)
|
Valid Range: 0-xxxxxxx (0=off)
|
||||||
Default Value: 256
|
Default Value: 256
|
||||||
|
|
||||||
Driver copies all packets below or equaling this size to a fresh Rx
|
Driver copies all packets below or equaling this size to a fresh RX
|
||||||
buffer before handing it up the stack.
|
buffer before handing it up the stack.
|
||||||
|
|
||||||
This parameter is different than other parameters, in that it is a
|
This parameter is different than other parameters, in that it is a
|
||||||
|
@ -223,17 +229,17 @@ loading or enabling the driver, try disabling this feature.
|
||||||
|
|
||||||
WriteProtectNVM
|
WriteProtectNVM
|
||||||
---------------
|
---------------
|
||||||
Valid Range: 0-1
|
Valid Range: 0,1
|
||||||
Default Value: 1 (enabled)
|
Default Value: 1
|
||||||
|
|
||||||
Set the hardware to ignore all write/erase cycles to the GbE region in the
|
If set to 1, configure the hardware to ignore all write/erase cycles to the
|
||||||
ICHx NVM (non-volatile memory). This feature can be disabled by the
|
GbE region in the ICHx NVM (in order to prevent accidental corruption of the
|
||||||
WriteProtectNVM module parameter (enabled by default) only after a hardware
|
NVM). This feature can be disabled by setting the parameter to 0 during initial
|
||||||
reset, but the machine must be power cycled before trying to enable writes.
|
driver load.
|
||||||
|
NOTE: The machine must be power cycled (full off/on) when enabling NVM writes
|
||||||
Note: the kernel boot option iomem=relaxed may need to be set if the kernel
|
via setting the parameter to zero. Once the NVM has been locked (via the
|
||||||
config option CONFIG_STRICT_DEVMEM=y, if the root user wants to write the
|
parameter at 1 when the driver loads) it cannot be unlocked except via power
|
||||||
NVM from user space via ethtool.
|
cycle.
|
||||||
|
|
||||||
Additional Configurations
|
Additional Configurations
|
||||||
=========================
|
=========================
|
||||||
|
@ -259,32 +265,30 @@ Additional Configurations
|
||||||
- Some adapters limit Jumbo Frames sized packets to a maximum of
|
- Some adapters limit Jumbo Frames sized packets to a maximum of
|
||||||
4096 bytes and some adapters do not support Jumbo Frames.
|
4096 bytes and some adapters do not support Jumbo Frames.
|
||||||
|
|
||||||
|
|
||||||
Ethtool
|
Ethtool
|
||||||
-------
|
-------
|
||||||
The driver utilizes the ethtool interface for driver configuration and
|
The driver utilizes the ethtool interface for driver configuration and
|
||||||
diagnostics, as well as displaying statistical information. We
|
diagnostics, as well as displaying statistical information. We
|
||||||
strongly recommend downloading the latest version of Ethtool at:
|
strongly recommend downloading the latest version of ethtool at:
|
||||||
|
|
||||||
http://sourceforge.net/projects/gkernel.
|
http://ftp.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
Speed and Duplex
|
Speed and Duplex
|
||||||
----------------
|
----------------
|
||||||
Speed and Duplex are configured through the Ethtool* utility. For
|
Speed and Duplex are configured through the ethtool* utility. For
|
||||||
instructions, refer to the Ethtool man page.
|
instructions, refer to the ethtool man page.
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN* (WoL)
|
||||||
---------------------------
|
---------------------------
|
||||||
WoL is configured through the Ethtool* utility. For instructions on
|
WoL is configured through the ethtool* utility. For instructions on
|
||||||
enabling WoL with Ethtool, refer to the Ethtool man page.
|
enabling WoL with ethtool, refer to the ethtool man page.
|
||||||
|
|
||||||
WoL will be enabled on the system during the next shut down or reboot.
|
WoL will be enabled on the system during the next shut down or reboot.
|
||||||
For this driver version, in order to enable WoL, the e1000e driver must be
|
For this driver version, in order to enable WoL, the e1000e driver must be
|
||||||
loaded when shutting down or rebooting the system.
|
loaded when shutting down or rebooting the system.
|
||||||
|
|
||||||
In most cases Wake On LAN is only supported on port A for multiple port
|
In most cases Wake On LAN is only supported on port A for multiple port
|
||||||
adapters. To verify if a port supports Wake on LAN run ethtool eth<X>.
|
adapters. To verify if a port supports Wake on Lan run ethtool eth<X>.
|
||||||
|
|
||||||
|
|
||||||
Support
|
Support
|
||||||
=======
|
=======
|
||||||
|
|
|
@ -36,6 +36,7 @@ Default Value: 0
|
||||||
This parameter adds support for SR-IOV. It causes the driver to spawn up to
|
This parameter adds support for SR-IOV. It causes the driver to spawn up to
|
||||||
max_vfs worth of virtual function.
|
max_vfs worth of virtual function.
|
||||||
|
|
||||||
|
|
||||||
Additional Configurations
|
Additional Configurations
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
@ -60,15 +61,16 @@ Additional Configurations
|
||||||
Ethtool
|
Ethtool
|
||||||
-------
|
-------
|
||||||
The driver utilizes the ethtool interface for driver configuration and
|
The driver utilizes the ethtool interface for driver configuration and
|
||||||
diagnostics, as well as displaying statistical information.
|
diagnostics, as well as displaying statistical information. The latest
|
||||||
|
version of ethtool can be found at:
|
||||||
|
|
||||||
http://sourceforge.net/projects/gkernel.
|
http://ftp.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
Enabling Wake on LAN* (WoL)
|
Enabling Wake on LAN* (WoL)
|
||||||
---------------------------
|
---------------------------
|
||||||
WoL is configured through the Ethtool* utility.
|
WoL is configured through the ethtool* utility.
|
||||||
|
|
||||||
For instructions on enabling WoL with Ethtool, refer to the Ethtool man page.
|
For instructions on enabling WoL with ethtool, refer to the ethtool man page.
|
||||||
|
|
||||||
WoL will be enabled on the system during the next shut down or reboot.
|
WoL will be enabled on the system during the next shut down or reboot.
|
||||||
For this driver version, in order to enable WoL, the igb driver must be
|
For this driver version, in order to enable WoL, the igb driver must be
|
||||||
|
@ -91,31 +93,6 @@ Additional Configurations
|
||||||
REQUIREMENTS: MSI-X support is required for Multiqueue. If MSI-X is not
|
REQUIREMENTS: MSI-X support is required for Multiqueue. If MSI-X is not
|
||||||
found, the system will fallback to MSI or to Legacy interrupts.
|
found, the system will fallback to MSI or to Legacy interrupts.
|
||||||
|
|
||||||
LRO
|
|
||||||
---
|
|
||||||
Large Receive Offload (LRO) is a technique for increasing inbound throughput
|
|
||||||
of high-bandwidth network connections by reducing CPU overhead. It works by
|
|
||||||
aggregating multiple incoming packets from a single stream into a larger
|
|
||||||
buffer before they are passed higher up the networking stack, thus reducing
|
|
||||||
the number of packets that have to be processed. LRO combines multiple
|
|
||||||
Ethernet frames into a single receive in the stack, thereby potentially
|
|
||||||
decreasing CPU utilization for receives.
|
|
||||||
|
|
||||||
NOTE: You need to have inet_lro enabled via either the CONFIG_INET_LRO or
|
|
||||||
CONFIG_INET_LRO_MODULE kernel config option. Additionally, if
|
|
||||||
CONFIG_INET_LRO_MODULE is used, the inet_lro module needs to be loaded
|
|
||||||
before the igb driver.
|
|
||||||
|
|
||||||
You can verify that the driver is using LRO by looking at these counters in
|
|
||||||
Ethtool:
|
|
||||||
|
|
||||||
lro_aggregated - count of total packets that were combined
|
|
||||||
lro_flushed - counts the number of packets flushed out of LRO
|
|
||||||
lro_no_desc - counts the number of times an LRO descriptor was not available
|
|
||||||
for the LRO packet
|
|
||||||
|
|
||||||
NOTE: IPv6 and UDP are not supported by LRO.
|
|
||||||
|
|
||||||
Support
|
Support
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
|
|
@ -58,9 +58,11 @@ Additional Configurations
|
||||||
Ethtool
|
Ethtool
|
||||||
-------
|
-------
|
||||||
The driver utilizes the ethtool interface for driver configuration and
|
The driver utilizes the ethtool interface for driver configuration and
|
||||||
diagnostics, as well as displaying statistical information.
|
diagnostics, as well as displaying statistical information. The ethtool
|
||||||
|
version 3.0 or later is required for this functionality, although we
|
||||||
|
strongly recommend downloading the latest version at:
|
||||||
|
|
||||||
http://sourceforge.net/projects/gkernel.
|
http://ftp.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
Support
|
Support
|
||||||
=======
|
=======
|
||||||
|
|
|
@ -11,7 +11,9 @@ ip_forward - BOOLEAN
|
||||||
for routers)
|
for routers)
|
||||||
|
|
||||||
ip_default_ttl - INTEGER
|
ip_default_ttl - INTEGER
|
||||||
default 64
|
Default value of TTL field (Time To Live) for outgoing (but not
|
||||||
|
forwarded) IP packets. Should be between 1 and 255 inclusive.
|
||||||
|
Default: 64 (as recommended by RFC1700)
|
||||||
|
|
||||||
ip_no_pmtu_disc - BOOLEAN
|
ip_no_pmtu_disc - BOOLEAN
|
||||||
Disable Path MTU Discovery.
|
Disable Path MTU Discovery.
|
||||||
|
@ -144,6 +146,7 @@ tcp_adv_win_scale - INTEGER
|
||||||
Count buffering overhead as bytes/2^tcp_adv_win_scale
|
Count buffering overhead as bytes/2^tcp_adv_win_scale
|
||||||
(if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale),
|
(if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale),
|
||||||
if it is <= 0.
|
if it is <= 0.
|
||||||
|
Possible values are [-31, 31], inclusive.
|
||||||
Default: 2
|
Default: 2
|
||||||
|
|
||||||
tcp_allowed_congestion_control - STRING
|
tcp_allowed_congestion_control - STRING
|
||||||
|
@ -707,10 +710,28 @@ igmp_max_memberships - INTEGER
|
||||||
Change the maximum number of multicast groups we can subscribe to.
|
Change the maximum number of multicast groups we can subscribe to.
|
||||||
Default: 20
|
Default: 20
|
||||||
|
|
||||||
conf/interface/* changes special settings per interface (where "interface" is
|
Theoretical maximum value is bounded by having to send a membership
|
||||||
the name of your network interface)
|
report in a single datagram (i.e. the report can't span multiple
|
||||||
conf/all/* is special, changes the settings for all interfaces
|
datagrams, or risk confusing the switch and leaving groups you don't
|
||||||
|
intend to).
|
||||||
|
|
||||||
|
The number of supported groups 'M' is bounded by the number of group
|
||||||
|
report entries you can fit into a single datagram of 65535 bytes.
|
||||||
|
|
||||||
|
M = 65536-sizeof (ip header)/(sizeof(Group record))
|
||||||
|
|
||||||
|
Group records are variable length, with a minimum of 12 bytes.
|
||||||
|
So net.ipv4.igmp_max_memberships should not be set higher than:
|
||||||
|
|
||||||
|
(65536-24) / 12 = 5459
|
||||||
|
|
||||||
|
The value 5459 assumes no IP header options, so in practice
|
||||||
|
this number may be lower.
|
||||||
|
|
||||||
|
conf/interface/* changes special settings per interface (where
|
||||||
|
"interface" is the name of your network interface)
|
||||||
|
|
||||||
|
conf/all/* is special, changes the settings for all interfaces
|
||||||
|
|
||||||
log_martians - BOOLEAN
|
log_martians - BOOLEAN
|
||||||
Log packets with impossible addresses to kernel log.
|
Log packets with impossible addresses to kernel log.
|
||||||
|
|
|
@ -309,15 +309,15 @@ Additional Configurations
|
||||||
Ethtool
|
Ethtool
|
||||||
-------
|
-------
|
||||||
The driver utilizes the ethtool interface for driver configuration and
|
The driver utilizes the ethtool interface for driver configuration and
|
||||||
diagnostics, as well as displaying statistical information. Ethtool
|
diagnostics, as well as displaying statistical information. The ethtool
|
||||||
version 1.6 or later is required for this functionality.
|
version 1.6 or later is required for this functionality.
|
||||||
|
|
||||||
The latest release of ethtool can be found from
|
The latest release of ethtool can be found from
|
||||||
http://sourceforge.net/projects/gkernel
|
http://ftp.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
NOTE: Ethtool 1.6 only supports a limited set of ethtool options. Support
|
NOTE: The ethtool version 1.6 only supports a limited set of ethtool options.
|
||||||
for a more complete ethtool feature set can be enabled by upgrading
|
Support for a more complete ethtool feature set can be enabled by
|
||||||
to the latest version.
|
upgrading to the latest version.
|
||||||
|
|
||||||
|
|
||||||
NAPI
|
NAPI
|
||||||
|
|
|
@ -1,107 +1,126 @@
|
||||||
Linux Base Driver for 10 Gigabit PCI Express Intel(R) Network Connection
|
Linux Base Driver for 10 Gigabit PCI Express Intel(R) Network Connection
|
||||||
========================================================================
|
========================================================================
|
||||||
|
|
||||||
March 10, 2009
|
Intel Gigabit Linux driver.
|
||||||
|
Copyright(c) 1999 - 2010 Intel Corporation.
|
||||||
|
|
||||||
Contents
|
Contents
|
||||||
========
|
========
|
||||||
|
|
||||||
- In This Release
|
|
||||||
- Identifying Your Adapter
|
- Identifying Your Adapter
|
||||||
- Building and Installation
|
|
||||||
- Additional Configurations
|
- Additional Configurations
|
||||||
|
- Performance Tuning
|
||||||
|
- Known Issues
|
||||||
- Support
|
- Support
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
In This Release
|
|
||||||
===============
|
|
||||||
|
|
||||||
This file describes the ixgbe Linux Base Driver for the 10 Gigabit PCI
|
|
||||||
Express Intel(R) Network Connection. This driver includes support for
|
|
||||||
Itanium(R)2-based systems.
|
|
||||||
|
|
||||||
For questions related to hardware requirements, refer to the documentation
|
|
||||||
supplied with your 10 Gigabit adapter. All hardware requirements listed apply
|
|
||||||
to use with Linux.
|
|
||||||
|
|
||||||
The following features are available in this kernel:
|
|
||||||
- Native VLANs
|
|
||||||
- Channel Bonding (teaming)
|
|
||||||
- SNMP
|
|
||||||
- Generic Receive Offload
|
|
||||||
- Data Center Bridging
|
|
||||||
|
|
||||||
Channel Bonding documentation can be found in the Linux kernel source:
|
|
||||||
/Documentation/networking/bonding.txt
|
|
||||||
|
|
||||||
Ethtool, lspci, and ifconfig can be used to display device and driver
|
|
||||||
specific information.
|
|
||||||
|
|
||||||
|
|
||||||
Identifying Your Adapter
|
Identifying Your Adapter
|
||||||
========================
|
========================
|
||||||
|
|
||||||
This driver supports devices based on the 82598 controller and the 82599
|
The driver in this release is compatible with 82598 and 82599-based Intel
|
||||||
controller.
|
Network Connections.
|
||||||
|
|
||||||
For specific information on identifying which adapter you have, please visit:
|
For more information on how to identify your adapter, go to the Adapter &
|
||||||
|
Driver ID Guide at:
|
||||||
|
|
||||||
http://support.intel.com/support/network/sb/CS-008441.htm
|
http://support.intel.com/support/network/sb/CS-012904.htm
|
||||||
|
|
||||||
|
SFP+ Devices with Pluggable Optics
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
82599-BASED ADAPTERS
|
||||||
|
|
||||||
|
NOTES: If your 82599-based Intel(R) Network Adapter came with Intel optics, or
|
||||||
|
is an Intel(R) Ethernet Server Adapter X520-2, then it only supports Intel
|
||||||
|
optics and/or the direct attach cables listed below.
|
||||||
|
|
||||||
|
When 82599-based SFP+ devices are connected back to back, they should be set to
|
||||||
|
the same Speed setting via ethtool. Results may vary if you mix speed settings.
|
||||||
|
82598-based adapters support all passive direct attach cables that comply
|
||||||
|
with SFF-8431 v4.1 and SFF-8472 v10.4 specifications. Active direct attach
|
||||||
|
cables are not supported.
|
||||||
|
|
||||||
|
Supplier Type Part Numbers
|
||||||
|
|
||||||
|
SR Modules
|
||||||
|
Intel DUAL RATE 1G/10G SFP+ SR (bailed) FTLX8571D3BCV-IT
|
||||||
|
Intel DUAL RATE 1G/10G SFP+ SR (bailed) AFBR-703SDDZ-IN1
|
||||||
|
Intel DUAL RATE 1G/10G SFP+ SR (bailed) AFBR-703SDZ-IN2
|
||||||
|
LR Modules
|
||||||
|
Intel DUAL RATE 1G/10G SFP+ LR (bailed) FTLX1471D3BCV-IT
|
||||||
|
Intel DUAL RATE 1G/10G SFP+ LR (bailed) AFCT-701SDDZ-IN1
|
||||||
|
Intel DUAL RATE 1G/10G SFP+ LR (bailed) AFCT-701SDZ-IN2
|
||||||
|
|
||||||
|
The following is a list of 3rd party SFP+ modules and direct attach cables that
|
||||||
|
have received some testing. Not all modules are applicable to all devices.
|
||||||
|
|
||||||
|
Supplier Type Part Numbers
|
||||||
|
|
||||||
|
Finisar SFP+ SR bailed, 10g single rate FTLX8571D3BCL
|
||||||
|
Avago SFP+ SR bailed, 10g single rate AFBR-700SDZ
|
||||||
|
Finisar SFP+ LR bailed, 10g single rate FTLX1471D3BCL
|
||||||
|
|
||||||
|
Finisar DUAL RATE 1G/10G SFP+ SR (No Bail) FTLX8571D3QCV-IT
|
||||||
|
Avago DUAL RATE 1G/10G SFP+ SR (No Bail) AFBR-703SDZ-IN1
|
||||||
|
Finisar DUAL RATE 1G/10G SFP+ LR (No Bail) FTLX1471D3QCV-IT
|
||||||
|
Avago DUAL RATE 1G/10G SFP+ LR (No Bail) AFCT-701SDZ-IN1
|
||||||
|
Finistar 1000BASE-T SFP FCLF8522P2BTL
|
||||||
|
Avago 1000BASE-T SFP ABCU-5710RZ
|
||||||
|
|
||||||
|
82599-based adapters support all passive and active limiting direct attach
|
||||||
|
cables that comply with SFF-8431 v4.1 and SFF-8472 v10.4 specifications.
|
||||||
|
|
||||||
|
Laser turns off for SFP+ when ifconfig down
|
||||||
|
-------------------------------------------
|
||||||
|
"ifconfig down" turns off the laser for 82599-based SFP+ fiber adapters.
|
||||||
|
"ifconfig up" turns on the later.
|
||||||
|
|
||||||
|
|
||||||
Building and Installation
|
82598-BASED ADAPTERS
|
||||||
=========================
|
|
||||||
|
|
||||||
select m for "Intel(R) 10GbE PCI Express adapters support" located at:
|
NOTES for 82598-Based Adapters:
|
||||||
Location:
|
- Intel(R) Network Adapters that support removable optical modules only support
|
||||||
-> Device Drivers
|
their original module type (i.e., the Intel(R) 10 Gigabit SR Dual Port
|
||||||
-> Network device support (NETDEVICES [=y])
|
Express Module only supports SR optical modules). If you plug in a different
|
||||||
-> Ethernet (10000 Mbit) (NETDEV_10000 [=y])
|
type of module, the driver will not load.
|
||||||
|
- Hot Swapping/hot plugging optical modules is not supported.
|
||||||
|
- Only single speed, 10 gigabit modules are supported.
|
||||||
|
- LAN on Motherboard (LOMs) may support DA, SR, or LR modules. Other module
|
||||||
|
types are not supported. Please see your system documentation for details.
|
||||||
|
|
||||||
1. make modules & make modules_install
|
The following is a list of 3rd party SFP+ modules and direct attach cables that
|
||||||
|
have received some testing. Not all modules are applicable to all devices.
|
||||||
|
|
||||||
2. Load the module:
|
Supplier Type Part Numbers
|
||||||
|
|
||||||
# modprobe ixgbe
|
Finisar SFP+ SR bailed, 10g single rate FTLX8571D3BCL
|
||||||
|
Avago SFP+ SR bailed, 10g single rate AFBR-700SDZ
|
||||||
|
Finisar SFP+ LR bailed, 10g single rate FTLX1471D3BCL
|
||||||
|
|
||||||
The insmod command can be used if the full
|
82598-based adapters support all passive direct attach cables that comply
|
||||||
path to the driver module is specified. For example:
|
with SFF-8431 v4.1 and SFF-8472 v10.4 specifications. Active direct attach
|
||||||
|
cables are not supported.
|
||||||
|
|
||||||
insmod /lib/modules/<KERNEL VERSION>/kernel/drivers/net/ixgbe/ixgbe.ko
|
|
||||||
|
|
||||||
With 2.6 based kernels also make sure that older ixgbe drivers are
|
Flow Control
|
||||||
removed from the kernel, before loading the new module:
|
------------
|
||||||
|
Ethernet Flow Control (IEEE 802.3x) can be configured with ethtool to enable
|
||||||
|
receiving and transmitting pause frames for ixgbe. When TX is enabled, PAUSE
|
||||||
|
frames are generated when the receive packet buffer crosses a predefined
|
||||||
|
threshold. When rx is enabled, the transmit unit will halt for the time delay
|
||||||
|
specified when a PAUSE frame is received.
|
||||||
|
|
||||||
rmmod ixgbe; modprobe ixgbe
|
Flow Control is enabled by default. If you want to disable a flow control
|
||||||
|
capable link partner, use ethtool:
|
||||||
|
|
||||||
3. Assign an IP address to the interface by entering the following, where
|
ethtool -A eth? autoneg off RX off TX off
|
||||||
x is the interface number:
|
|
||||||
|
|
||||||
ifconfig ethx <IP_address>
|
|
||||||
|
|
||||||
4. Verify that the interface works. Enter the following, where <IP_address>
|
|
||||||
is the IP address for another machine on the same subnet as the interface
|
|
||||||
that is being tested:
|
|
||||||
|
|
||||||
ping <IP_address>
|
|
||||||
|
|
||||||
|
NOTE: For 82598 backplane cards entering 1 gig mode, flow control default
|
||||||
|
behavior is changed to off. Flow control in 1 gig mode on these devices can
|
||||||
|
lead to Tx hangs.
|
||||||
|
|
||||||
Additional Configurations
|
Additional Configurations
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
Viewing Link Messages
|
|
||||||
---------------------
|
|
||||||
Link messages will not be displayed to the console if the distribution is
|
|
||||||
restricting system messages. In order to see network driver link messages on
|
|
||||||
your console, set dmesg to eight by entering the following:
|
|
||||||
|
|
||||||
dmesg -n 8
|
|
||||||
|
|
||||||
NOTE: This setting is not saved across reboots.
|
|
||||||
|
|
||||||
|
|
||||||
Jumbo Frames
|
Jumbo Frames
|
||||||
------------
|
------------
|
||||||
The driver supports Jumbo Frames for all adapters. Jumbo Frames support is
|
The driver supports Jumbo Frames for all adapters. Jumbo Frames support is
|
||||||
|
@ -123,13 +142,8 @@ Additional Configurations
|
||||||
other protocols besides TCP. It's also safe to use with configurations that
|
other protocols besides TCP. It's also safe to use with configurations that
|
||||||
are problematic for LRO, namely bridging and iSCSI.
|
are problematic for LRO, namely bridging and iSCSI.
|
||||||
|
|
||||||
GRO is enabled by default in the driver. Future versions of ethtool will
|
|
||||||
support disabling and re-enabling GRO on the fly.
|
|
||||||
|
|
||||||
|
|
||||||
Data Center Bridging, aka DCB
|
Data Center Bridging, aka DCB
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
DCB is a configuration Quality of Service implementation in hardware.
|
DCB is a configuration Quality of Service implementation in hardware.
|
||||||
It uses the VLAN priority tag (802.1p) to filter traffic. That means
|
It uses the VLAN priority tag (802.1p) to filter traffic. That means
|
||||||
that there are 8 different priorities that traffic can be filtered into.
|
that there are 8 different priorities that traffic can be filtered into.
|
||||||
|
@ -163,24 +177,71 @@ Additional Configurations
|
||||||
|
|
||||||
http://e1000.sf.net
|
http://e1000.sf.net
|
||||||
|
|
||||||
|
|
||||||
Ethtool
|
Ethtool
|
||||||
-------
|
-------
|
||||||
The driver utilizes the ethtool interface for driver configuration and
|
The driver utilizes the ethtool interface for driver configuration and
|
||||||
diagnostics, as well as displaying statistical information. Ethtool
|
diagnostics, as well as displaying statistical information. The latest
|
||||||
version 3.0 or later is required for this functionality.
|
ethtool version is required for this functionality.
|
||||||
|
|
||||||
The latest release of ethtool can be found from
|
The latest release of ethtool can be found from
|
||||||
http://sourceforge.net/projects/gkernel.
|
http://ftp.kernel.org/pub/software/network/ethtool/
|
||||||
|
|
||||||
|
FCoE
|
||||||
NAPI
|
|
||||||
----
|
----
|
||||||
|
This release of the ixgbe driver contains new code to enable users to use
|
||||||
|
Fiber Channel over Ethernet (FCoE) and Data Center Bridging (DCB)
|
||||||
|
functionality that is supported by the 82598-based hardware. This code has
|
||||||
|
no default effect on the regular driver operation, and configuring DCB and
|
||||||
|
FCoE is outside the scope of this driver README. Refer to
|
||||||
|
http://www.open-fcoe.org/ for FCoE project information and contact
|
||||||
|
e1000-eedc@lists.sourceforge.net for DCB information.
|
||||||
|
|
||||||
NAPI (Rx polling mode) is supported in the ixgbe driver. NAPI is enabled
|
MAC and VLAN anti-spoofing feature
|
||||||
by default in the driver.
|
----------------------------------
|
||||||
|
When a malicious driver attempts to send a spoofed packet, it is dropped by
|
||||||
|
the hardware and not transmitted. An interrupt is sent to the PF driver
|
||||||
|
notifying it of the spoof attempt.
|
||||||
|
|
||||||
See www.cyberus.ca/~hadi/usenix-paper.tgz for more information on NAPI.
|
When a spoofed packet is detected the PF driver will send the following
|
||||||
|
message to the system log (displayed by the "dmesg" command):
|
||||||
|
|
||||||
|
Spoof event(s) detected on VF (n)
|
||||||
|
|
||||||
|
Where n=the VF that attempted to do the spoofing.
|
||||||
|
|
||||||
|
|
||||||
|
Performance Tuning
|
||||||
|
==================
|
||||||
|
|
||||||
|
An excellent article on performance tuning can be found at:
|
||||||
|
|
||||||
|
http://www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Mark_Wagner.pdf
|
||||||
|
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
============
|
||||||
|
|
||||||
|
Enabling SR-IOV in a 32-bit Microsoft* Windows* Server 2008 Guest OS using
|
||||||
|
Intel (R) 82576-based GbE or Intel (R) 82599-based 10GbE controller under KVM
|
||||||
|
-----------------------------------------------------------------------------
|
||||||
|
KVM Hypervisor/VMM supports direct assignment of a PCIe device to a VM. This
|
||||||
|
includes traditional PCIe devices, as well as SR-IOV-capable devices using
|
||||||
|
Intel 82576-based and 82599-based controllers.
|
||||||
|
|
||||||
|
While direct assignment of a PCIe device or an SR-IOV Virtual Function (VF)
|
||||||
|
to a Linux-based VM running 2.6.32 or later kernel works fine, there is a
|
||||||
|
known issue with Microsoft Windows Server 2008 VM that results in a "yellow
|
||||||
|
bang" error. This problem is within the KVM VMM itself, not the Intel driver,
|
||||||
|
or the SR-IOV logic of the VMM, but rather that KVM emulates an older CPU
|
||||||
|
model for the guests, and this older CPU model does not support MSI-X
|
||||||
|
interrupts, which is a requirement for Intel SR-IOV.
|
||||||
|
|
||||||
|
If you wish to use the Intel 82576 or 82599-based controllers in SR-IOV mode
|
||||||
|
with KVM and a Microsoft Windows Server 2008 guest try the following
|
||||||
|
workaround. The workaround is to tell KVM to emulate a different model of CPU
|
||||||
|
when using qemu to create the KVM guest:
|
||||||
|
|
||||||
|
"-cpu qemu64,model=13"
|
||||||
|
|
||||||
|
|
||||||
Support
|
Support
|
||||||
|
|
|
@ -35,10 +35,6 @@ Driver ID Guide at:
|
||||||
Known Issues/Troubleshooting
|
Known Issues/Troubleshooting
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Unloading Physical Function (PF) Driver Causes System Reboots When VM is
|
|
||||||
Running and VF is Loaded on the VM
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
Do not unload the PF driver (ixgbe) while VFs are assigned to guests.
|
|
||||||
|
|
||||||
Support
|
Support
|
||||||
=======
|
=======
|
||||||
|
|
|
@ -7,7 +7,7 @@ This is the driver for the MAC 10/100/1000 on-chip Ethernet controllers
|
||||||
(Synopsys IP blocks); it has been fully tested on STLinux platforms.
|
(Synopsys IP blocks); it has been fully tested on STLinux platforms.
|
||||||
|
|
||||||
Currently this network device driver is for all STM embedded MAC/GMAC
|
Currently this network device driver is for all STM embedded MAC/GMAC
|
||||||
(7xxx SoCs).
|
(7xxx SoCs). Other platforms start using it i.e. ARM SPEAr.
|
||||||
|
|
||||||
DWC Ether MAC 10/100/1000 Universal version 3.41a and DWC Ether MAC 10/100
|
DWC Ether MAC 10/100/1000 Universal version 3.41a and DWC Ether MAC 10/100
|
||||||
Universal version 4.0 have been used for developing the first code
|
Universal version 4.0 have been used for developing the first code
|
||||||
|
@ -95,9 +95,14 @@ Several information came from the platform; please refer to the
|
||||||
driver's Header file in include/linux directory.
|
driver's Header file in include/linux directory.
|
||||||
|
|
||||||
struct plat_stmmacenet_data {
|
struct plat_stmmacenet_data {
|
||||||
int bus_id;
|
int bus_id;
|
||||||
int pbl;
|
int pbl;
|
||||||
int has_gmac;
|
int clk_csr;
|
||||||
|
int has_gmac;
|
||||||
|
int enh_desc;
|
||||||
|
int tx_coe;
|
||||||
|
int bugged_jumbo;
|
||||||
|
int pmt;
|
||||||
void (*fix_mac_speed)(void *priv, unsigned int speed);
|
void (*fix_mac_speed)(void *priv, unsigned int speed);
|
||||||
void (*bus_setup)(unsigned long ioaddr);
|
void (*bus_setup)(unsigned long ioaddr);
|
||||||
#ifdef CONFIG_STM_DRIVERS
|
#ifdef CONFIG_STM_DRIVERS
|
||||||
|
@ -114,6 +119,12 @@ Where:
|
||||||
registers (on STM platforms);
|
registers (on STM platforms);
|
||||||
- has_gmac: GMAC core is on board (get it at run-time in the next step);
|
- has_gmac: GMAC core is on board (get it at run-time in the next step);
|
||||||
- bus_id: bus identifier.
|
- bus_id: bus identifier.
|
||||||
|
- tx_coe: core is able to perform the tx csum in HW.
|
||||||
|
- enh_desc: if sets the MAC will use the enhanced descriptor structure.
|
||||||
|
- clk_csr: CSR Clock range selection.
|
||||||
|
- bugged_jumbo: some HWs are not able to perform the csum in HW for
|
||||||
|
over-sized frames due to limited buffer sizes. Setting this
|
||||||
|
flag the csum will be done in SW on JUMBO frames.
|
||||||
|
|
||||||
struct plat_stmmacphy_data {
|
struct plat_stmmacphy_data {
|
||||||
int bus_id;
|
int bus_id;
|
||||||
|
@ -131,13 +142,28 @@ Where:
|
||||||
- interface: physical MII interface mode;
|
- interface: physical MII interface mode;
|
||||||
- phy_reset: hook to reset HW function.
|
- phy_reset: hook to reset HW function.
|
||||||
|
|
||||||
|
SOURCES:
|
||||||
|
- Kconfig
|
||||||
|
- Makefile
|
||||||
|
- stmmac_main.c: main network device driver;
|
||||||
|
- stmmac_mdio.c: mdio functions;
|
||||||
|
- stmmac_ethtool.c: ethtool support;
|
||||||
|
- stmmac_timer.[ch]: timer code used for mitigating the driver dma interrupts
|
||||||
|
Only tested on ST40 platforms based.
|
||||||
|
- stmmac.h: private driver structure;
|
||||||
|
- common.h: common definitions and VFTs;
|
||||||
|
- descs.h: descriptor structure definitions;
|
||||||
|
- dwmac1000_core.c: GMAC core functions;
|
||||||
|
- dwmac1000_dma.c: dma functions for the GMAC chip;
|
||||||
|
- dwmac1000.h: specific header file for the GMAC;
|
||||||
|
- dwmac100_core: MAC 100 core and dma code;
|
||||||
|
- dwmac100_dma.c: dma funtions for the MAC chip;
|
||||||
|
- dwmac1000.h: specific header file for the MAC;
|
||||||
|
- dwmac_lib.c: generic DMA functions shared among chips
|
||||||
|
- enh_desc.c: functions for handling enhanced descriptors
|
||||||
|
- norm_desc.c: functions for handling normal descriptors
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- Continue to make the driver more generic and suitable for other Synopsys
|
- XGMAC controller is not supported.
|
||||||
Ethernet controllers used on other architectures (i.e. ARM).
|
|
||||||
- 10G controllers are not supported.
|
|
||||||
- MAC uses Normal descriptors and GMAC uses enhanced ones.
|
|
||||||
This is a limit that should be reviewed. MAC could want to
|
|
||||||
use the enhanced structure.
|
|
||||||
- Checksumming: Rx/Tx csum is done in HW in case of GMAC only.
|
|
||||||
- Review the timer optimisation code to use an embedded device that seems to be
|
- Review the timer optimisation code to use an embedded device that seems to be
|
||||||
available in new chip generations.
|
available in new chip generations.
|
||||||
|
|
|
@ -379,8 +379,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
||||||
zero)
|
zero)
|
||||||
|
|
||||||
bool pm_runtime_suspended(struct device *dev);
|
bool pm_runtime_suspended(struct device *dev);
|
||||||
- return true if the device's runtime PM status is 'suspended', or false
|
- return true if the device's runtime PM status is 'suspended' and its
|
||||||
otherwise
|
'power.disable_depth' field is equal to zero, or false otherwise
|
||||||
|
|
||||||
void pm_runtime_allow(struct device *dev);
|
void pm_runtime_allow(struct device *dev);
|
||||||
- set the power.runtime_auto flag for the device and decrease its usage
|
- set the power.runtime_auto flag for the device and decrease its usage
|
||||||
|
|
|
@ -1,3 +1,25 @@
|
||||||
|
Release Date : Tues. Dec 14, 2010 17:00:00 PST 2010 -
|
||||||
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
|
Adam Radford
|
||||||
|
Current Version : 00.00.05.29-rc1
|
||||||
|
Old Version : 00.00.04.31-rc1
|
||||||
|
1. Rename megaraid_sas.c to megaraid_sas_base.c.
|
||||||
|
2. Update GPL headers.
|
||||||
|
3. Add MSI-X support and 'msix_disable' module parameter.
|
||||||
|
4. Use lowest memory bar (for SR-IOV VF support).
|
||||||
|
5. Add struct megasas_instance_temlate changes, and change all code to use
|
||||||
|
new instance entries:
|
||||||
|
|
||||||
|
irqreturn_t (*service_isr )(int irq, void *devp);
|
||||||
|
void (*tasklet)(unsigned long);
|
||||||
|
u32 (*init_adapter)(struct megasas_instance *);
|
||||||
|
u32 (*build_and_issue_cmd) (struct megasas_instance *,
|
||||||
|
struct scsi_cmnd *);
|
||||||
|
void (*issue_dcmd) (struct megasas_instance *instance,
|
||||||
|
struct megasas_cmd *cmd);
|
||||||
|
|
||||||
|
6. Add code to support MegaRAID 9265/9285 controllers device id (0x5b).
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
1 Release Date : Thur. May 03, 2010 09:12:45 PST 2009 -
|
1 Release Date : Thur. May 03, 2010 09:12:45 PST 2009 -
|
||||||
(emaild-id:megaraidlinux@lsi.com)
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
Bo Yang
|
Bo Yang
|
||||||
|
|
|
@ -1044,9 +1044,9 @@ Details:
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queuecommand - queue scsi command, invoke 'done' on completion
|
* queuecommand - queue scsi command, invoke scp->scsi_done on completion
|
||||||
|
* @shost: pointer to the scsi host object
|
||||||
* @scp: pointer to scsi command object
|
* @scp: pointer to scsi command object
|
||||||
* @done: function pointer to be invoked on completion
|
|
||||||
*
|
*
|
||||||
* Returns 0 on success.
|
* Returns 0 on success.
|
||||||
*
|
*
|
||||||
|
@ -1074,42 +1074,45 @@ Details:
|
||||||
*
|
*
|
||||||
* Other types of errors that are detected immediately may be
|
* Other types of errors that are detected immediately may be
|
||||||
* flagged by setting scp->result to an appropriate value,
|
* flagged by setting scp->result to an appropriate value,
|
||||||
* invoking the 'done' callback, and then returning 0 from this
|
* invoking the scp->scsi_done callback, and then returning 0
|
||||||
* function. If the command is not performed immediately (and the
|
* from this function. If the command is not performed
|
||||||
* LLD is starting (or will start) the given command) then this
|
* immediately (and the LLD is starting (or will start) the given
|
||||||
* function should place 0 in scp->result and return 0.
|
* command) then this function should place 0 in scp->result and
|
||||||
|
* return 0.
|
||||||
*
|
*
|
||||||
* Command ownership. If the driver returns zero, it owns the
|
* Command ownership. If the driver returns zero, it owns the
|
||||||
* command and must take responsibility for ensuring the 'done'
|
* command and must take responsibility for ensuring the
|
||||||
* callback is executed. Note: the driver may call done before
|
* scp->scsi_done callback is executed. Note: the driver may
|
||||||
* returning zero, but after it has called done, it may not
|
* call scp->scsi_done before returning zero, but after it has
|
||||||
* return any value other than zero. If the driver makes a
|
* called scp->scsi_done, it may not return any value other than
|
||||||
* non-zero return, it must not execute the command's done
|
* zero. If the driver makes a non-zero return, it must not
|
||||||
* callback at any time.
|
* execute the command's scsi_done callback at any time.
|
||||||
*
|
*
|
||||||
* Locks: struct Scsi_Host::host_lock held on entry (with "irqsave")
|
* Locks: up to and including 2.6.36, struct Scsi_Host::host_lock
|
||||||
* and is expected to be held on return.
|
* held on entry (with "irqsave") and is expected to be
|
||||||
|
* held on return. From 2.6.37 onwards, queuecommand is
|
||||||
|
* called without any locks held.
|
||||||
*
|
*
|
||||||
* Calling context: in interrupt (soft irq) or process context
|
* Calling context: in interrupt (soft irq) or process context
|
||||||
*
|
*
|
||||||
* Notes: This function should be relatively fast. Normally it will
|
* Notes: This function should be relatively fast. Normally it
|
||||||
* not wait for IO to complete. Hence the 'done' callback is invoked
|
* will not wait for IO to complete. Hence the scp->scsi_done
|
||||||
* (often directly from an interrupt service routine) some time after
|
* callback is invoked (often directly from an interrupt service
|
||||||
* this function has returned. In some cases (e.g. pseudo adapter
|
* routine) some time after this function has returned. In some
|
||||||
* drivers that manufacture the response to a SCSI INQUIRY)
|
* cases (e.g. pseudo adapter drivers that manufacture the
|
||||||
* the 'done' callback may be invoked before this function returns.
|
* response to a SCSI INQUIRY) the scp->scsi_done callback may be
|
||||||
* If the 'done' callback is not invoked within a certain period
|
* invoked before this function returns. If the scp->scsi_done
|
||||||
* the SCSI mid level will commence error processing.
|
* callback is not invoked within a certain period the SCSI mid
|
||||||
* If a status of CHECK CONDITION is placed in "result" when the
|
* level will commence error processing. If a status of CHECK
|
||||||
* 'done' callback is invoked, then the LLD driver should
|
* CONDITION is placed in "result" when the scp->scsi_done
|
||||||
* perform autosense and fill in the struct scsi_cmnd::sense_buffer
|
* callback is invoked, then the LLD driver should perform
|
||||||
|
* autosense and fill in the struct scsi_cmnd::sense_buffer
|
||||||
* array. The scsi_cmnd::sense_buffer array is zeroed prior to
|
* array. The scsi_cmnd::sense_buffer array is zeroed prior to
|
||||||
* the mid level queuing a command to an LLD.
|
* the mid level queuing a command to an LLD.
|
||||||
*
|
*
|
||||||
* Defined in: LLD
|
* Defined in: LLD
|
||||||
**/
|
**/
|
||||||
int queuecommand(struct scsi_cmnd * scp,
|
int queuecommand(struct Scsi_Host *shost, struct scsi_cmnd * scp)
|
||||||
void (*done)(struct scsi_cmnd *))
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -14,6 +14,8 @@ riscom8.txt
|
||||||
- notes on using the RISCom/8 multi-port serial driver.
|
- notes on using the RISCom/8 multi-port serial driver.
|
||||||
rocket.txt
|
rocket.txt
|
||||||
- info on the Comtrol RocketPort multiport serial driver.
|
- info on the Comtrol RocketPort multiport serial driver.
|
||||||
|
serial-rs485.txt
|
||||||
|
- info about RS485 structures and support in the kernel.
|
||||||
specialix.txt
|
specialix.txt
|
||||||
- info on hardware/driver for specialix IO8+ multiport serial card.
|
- info on hardware/driver for specialix IO8+ multiport serial card.
|
||||||
stallion.txt
|
stallion.txt
|
||||||
|
|
|
@ -0,0 +1,120 @@
|
||||||
|
RS485 SERIAL COMMUNICATIONS
|
||||||
|
|
||||||
|
1. INTRODUCTION
|
||||||
|
|
||||||
|
EIA-485, also known as TIA/EIA-485 or RS-485, is a standard defining the
|
||||||
|
electrical characteristics of drivers and receivers for use in balanced
|
||||||
|
digital multipoint systems.
|
||||||
|
This standard is widely used for communications in industrial automation
|
||||||
|
because it can be used effectively over long distances and in electrically
|
||||||
|
noisy environments.
|
||||||
|
|
||||||
|
2. HARDWARE-RELATED CONSIDERATIONS
|
||||||
|
|
||||||
|
Some CPUs/UARTs (e.g., Atmel AT91 or 16C950 UART) contain a built-in
|
||||||
|
half-duplex mode capable of automatically controlling line direction by
|
||||||
|
toggling RTS or DTR signals. That can be used to control external
|
||||||
|
half-duplex hardware like an RS485 transceiver or any RS232-connected
|
||||||
|
half-duplex devices like some modems.
|
||||||
|
|
||||||
|
For these microcontrollers, the Linux driver should be made capable of
|
||||||
|
working in both modes, and proper ioctls (see later) should be made
|
||||||
|
available at user-level to allow switching from one mode to the other, and
|
||||||
|
vice versa.
|
||||||
|
|
||||||
|
3. DATA STRUCTURES ALREADY AVAILABLE IN THE KERNEL
|
||||||
|
|
||||||
|
The Linux kernel provides the serial_rs485 structure (see [1]) to handle
|
||||||
|
RS485 communications. This data structure is used to set and configure RS485
|
||||||
|
parameters in the platform data and in ioctls.
|
||||||
|
|
||||||
|
Any driver for devices capable of working both as RS232 and RS485 should
|
||||||
|
provide at least the following ioctls:
|
||||||
|
|
||||||
|
- TIOCSRS485 (typically associated with number 0x542F). This ioctl is used
|
||||||
|
to enable/disable RS485 mode from user-space
|
||||||
|
|
||||||
|
- TIOCGRS485 (typically associated with number 0x542E). This ioctl is used
|
||||||
|
to get RS485 mode from kernel-space (i.e., driver) to user-space.
|
||||||
|
|
||||||
|
In other words, the serial driver should contain a code similar to the next
|
||||||
|
one:
|
||||||
|
|
||||||
|
static struct uart_ops atmel_pops = {
|
||||||
|
/* ... */
|
||||||
|
.ioctl = handle_ioctl,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int handle_ioctl(struct uart_port *port,
|
||||||
|
unsigned int cmd,
|
||||||
|
unsigned long arg)
|
||||||
|
{
|
||||||
|
struct serial_rs485 rs485conf;
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case TIOCSRS485:
|
||||||
|
if (copy_from_user(&rs485conf,
|
||||||
|
(struct serial_rs485 *) arg,
|
||||||
|
sizeof(rs485conf)))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
/* ... */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TIOCGRS485:
|
||||||
|
if (copy_to_user((struct serial_rs485 *) arg,
|
||||||
|
...,
|
||||||
|
sizeof(rs485conf)))
|
||||||
|
return -EFAULT;
|
||||||
|
/* ... */
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
4. USAGE FROM USER-LEVEL
|
||||||
|
|
||||||
|
From user-level, RS485 configuration can be get/set using the previous
|
||||||
|
ioctls. For instance, to set RS485 you can use the following code:
|
||||||
|
|
||||||
|
#include <linux/serial.h>
|
||||||
|
|
||||||
|
/* Driver-specific ioctls: */
|
||||||
|
#define TIOCGRS485 0x542E
|
||||||
|
#define TIOCSRS485 0x542F
|
||||||
|
|
||||||
|
/* Open your specific device (e.g., /dev/mydevice): */
|
||||||
|
int fd = open ("/dev/mydevice", O_RDWR);
|
||||||
|
if (fd < 0) {
|
||||||
|
/* Error handling. See errno. */
|
||||||
|
}
|
||||||
|
|
||||||
|
struct serial_rs485 rs485conf;
|
||||||
|
|
||||||
|
/* Set RS485 mode: */
|
||||||
|
rs485conf.flags |= SER_RS485_ENABLED;
|
||||||
|
|
||||||
|
/* Set rts delay before send, if needed: */
|
||||||
|
rs485conf.flags |= SER_RS485_RTS_BEFORE_SEND;
|
||||||
|
rs485conf.delay_rts_before_send = ...;
|
||||||
|
|
||||||
|
/* Set rts delay after send, if needed: */
|
||||||
|
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
|
||||||
|
rs485conf.delay_rts_after_send = ...;
|
||||||
|
|
||||||
|
if (ioctl (fd, TIOCSRS485, &rs485conf) < 0) {
|
||||||
|
/* Error handling. See errno. */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use read() and write() syscalls here... */
|
||||||
|
|
||||||
|
/* Close the device when finished: */
|
||||||
|
if (close (fd) < 0) {
|
||||||
|
/* Error handling. See errno. */
|
||||||
|
}
|
||||||
|
|
||||||
|
5. REFERENCES
|
||||||
|
|
||||||
|
[1] include/linux/serial.h
|
|
@ -19,7 +19,7 @@ Declaring PXA2xx Master Controllers
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
Typically a SPI master is defined in the arch/.../mach-*/board-*.c as a
|
Typically a SPI master is defined in the arch/.../mach-*/board-*.c as a
|
||||||
"platform device". The master configuration is passed to the driver via a table
|
"platform device". The master configuration is passed to the driver via a table
|
||||||
found in arch/arm/mach-pxa/include/mach/pxa2xx_spi.h:
|
found in include/linux/spi/pxa2xx_spi.h:
|
||||||
|
|
||||||
struct pxa2xx_spi_master {
|
struct pxa2xx_spi_master {
|
||||||
enum pxa_ssp_type ssp_type;
|
enum pxa_ssp_type ssp_type;
|
||||||
|
@ -94,7 +94,7 @@ using the "spi_board_info" structure found in "linux/spi/spi.h". See
|
||||||
|
|
||||||
Each slave device attached to the PXA must provide slave specific configuration
|
Each slave device attached to the PXA must provide slave specific configuration
|
||||||
information via the structure "pxa2xx_spi_chip" found in
|
information via the structure "pxa2xx_spi_chip" found in
|
||||||
"arch/arm/mach-pxa/include/mach/pxa2xx_spi.h". The pxa2xx_spi master controller driver
|
"include/linux/spi/pxa2xx_spi.h". The pxa2xx_spi master controller driver
|
||||||
will uses the configuration whenever the driver communicates with the slave
|
will uses the configuration whenever the driver communicates with the slave
|
||||||
device. All fields are optional.
|
device. All fields are optional.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
|
||||||
|
Subsystem Trace Points: power
|
||||||
|
|
||||||
|
The power tracing system captures events related to power transitions
|
||||||
|
within the kernel. Broadly speaking there are three major subheadings:
|
||||||
|
|
||||||
|
o Power state switch which reports events related to suspend (S-states),
|
||||||
|
cpuidle (C-states) and cpufreq (P-states)
|
||||||
|
o System clock related changes
|
||||||
|
o Power domains related changes and transitions
|
||||||
|
|
||||||
|
This document describes what each of the tracepoints is and why they
|
||||||
|
might be useful.
|
||||||
|
|
||||||
|
Cf. include/trace/events/power.h for the events definitions.
|
||||||
|
|
||||||
|
1. Power state switch events
|
||||||
|
============================
|
||||||
|
|
||||||
|
1.1 New trace API
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
A 'cpu' event class gathers the CPU-related events: cpuidle and
|
||||||
|
cpufreq.
|
||||||
|
|
||||||
|
cpu_idle "state=%lu cpu_id=%lu"
|
||||||
|
cpu_frequency "state=%lu cpu_id=%lu"
|
||||||
|
|
||||||
|
A suspend event is used to indicate the system going in and out of the
|
||||||
|
suspend mode:
|
||||||
|
|
||||||
|
machine_suspend "state=%lu"
|
||||||
|
|
||||||
|
|
||||||
|
Note: the value of '-1' or '4294967295' for state means an exit from the current state,
|
||||||
|
i.e. trace_cpu_idle(4, smp_processor_id()) means that the system
|
||||||
|
enters the idle state 4, while trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id())
|
||||||
|
means that the system exits the previous idle state.
|
||||||
|
|
||||||
|
The event which has 'state=4294967295' in the trace is very important to the user
|
||||||
|
space tools which are using it to detect the end of the current state, and so to
|
||||||
|
correctly draw the states diagrams and to calculate accurate statistics etc.
|
||||||
|
|
||||||
|
1.2 DEPRECATED trace API
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
A new Kconfig option CONFIG_EVENT_POWER_TRACING_DEPRECATED with the default value of
|
||||||
|
'y' has been created. This allows the legacy trace power API to be used conjointly
|
||||||
|
with the new trace API.
|
||||||
|
The Kconfig option, the old trace API (in include/trace/events/power.h) and the
|
||||||
|
old trace points will disappear in a future release (namely 2.6.41).
|
||||||
|
|
||||||
|
power_start "type=%lu state=%lu cpu_id=%lu"
|
||||||
|
power_frequency "type=%lu state=%lu cpu_id=%lu"
|
||||||
|
power_end "cpu_id=%lu"
|
||||||
|
|
||||||
|
The 'type' parameter takes one of those macros:
|
||||||
|
. POWER_NONE = 0,
|
||||||
|
. POWER_CSTATE = 1, /* C-State */
|
||||||
|
. POWER_PSTATE = 2, /* Fequency change or DVFS */
|
||||||
|
|
||||||
|
The 'state' parameter is set depending on the type:
|
||||||
|
. Target C-state for type=POWER_CSTATE,
|
||||||
|
. Target frequency for type=POWER_PSTATE,
|
||||||
|
|
||||||
|
power_end is used to indicate the exit of a state, corresponding to the latest
|
||||||
|
power_start event.
|
||||||
|
|
||||||
|
2. Clocks events
|
||||||
|
================
|
||||||
|
The clock events are used for clock enable/disable and for
|
||||||
|
clock rate change.
|
||||||
|
|
||||||
|
clock_enable "%s state=%lu cpu_id=%lu"
|
||||||
|
clock_disable "%s state=%lu cpu_id=%lu"
|
||||||
|
clock_set_rate "%s state=%lu cpu_id=%lu"
|
||||||
|
|
||||||
|
The first parameter gives the clock name (e.g. "gpio1_iclk").
|
||||||
|
The second parameter is '1' for enable, '0' for disable, the target
|
||||||
|
clock rate for set_rate.
|
||||||
|
|
||||||
|
3. Power domains events
|
||||||
|
=======================
|
||||||
|
The power domain events are used for power domains transitions
|
||||||
|
|
||||||
|
power_domain_target "%s state=%lu cpu_id=%lu"
|
||||||
|
|
||||||
|
The first parameter gives the power domain name (e.g. "mpu_pwrdm").
|
||||||
|
The second parameter is the power domain target state.
|
||||||
|
|
|
@ -373,9 +373,18 @@ EVENT_PROCESS:
|
||||||
print " $regex_lru_isolate/o\n";
|
print " $regex_lru_isolate/o\n";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
my $isolate_mode = $1;
|
||||||
my $nr_scanned = $4;
|
my $nr_scanned = $4;
|
||||||
my $nr_contig_dirty = $7;
|
my $nr_contig_dirty = $7;
|
||||||
$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned;
|
|
||||||
|
# To closer match vmstat scanning statistics, only count isolate_both
|
||||||
|
# and isolate_inactive as scanning. isolate_active is rotation
|
||||||
|
# isolate_inactive == 0
|
||||||
|
# isolate_active == 1
|
||||||
|
# isolate_both == 2
|
||||||
|
if ($isolate_mode != 1) {
|
||||||
|
$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned;
|
||||||
|
}
|
||||||
$perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty;
|
$perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty;
|
||||||
} elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") {
|
} elsif ($tracepoint eq "mm_vmscan_lru_shrink_inactive") {
|
||||||
$details = $5;
|
$details = $5;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Alan Stern <stern@rowland.harvard.edu>
|
Alan Stern <stern@rowland.harvard.edu>
|
||||||
|
|
||||||
December 11, 2009
|
October 28, 2010
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,9 +107,14 @@ allowed to issue dynamic suspends.
|
||||||
The user interface for controlling dynamic PM is located in the power/
|
The user interface for controlling dynamic PM is located in the power/
|
||||||
subdirectory of each USB device's sysfs directory, that is, in
|
subdirectory of each USB device's sysfs directory, that is, in
|
||||||
/sys/bus/usb/devices/.../power/ where "..." is the device's ID. The
|
/sys/bus/usb/devices/.../power/ where "..." is the device's ID. The
|
||||||
relevant attribute files are: wakeup, control, and autosuspend.
|
relevant attribute files are: wakeup, control, and
|
||||||
(There may also be a file named "level"; this file was deprecated
|
autosuspend_delay_ms. (There may also be a file named "level"; this
|
||||||
as of the 2.6.35 kernel and replaced by the "control" file.)
|
file was deprecated as of the 2.6.35 kernel and replaced by the
|
||||||
|
"control" file. In 2.6.38 the "autosuspend" file will be deprecated
|
||||||
|
and replaced by the "autosuspend_delay_ms" file. The only difference
|
||||||
|
is that the newer file expresses the delay in milliseconds whereas the
|
||||||
|
older file uses seconds. Confusingly, both files are present in 2.6.37
|
||||||
|
but only "autosuspend" works.)
|
||||||
|
|
||||||
power/wakeup
|
power/wakeup
|
||||||
|
|
||||||
|
@ -140,33 +145,36 @@ as of the 2.6.35 kernel and replaced by the "control" file.)
|
||||||
suspended and autoresume was not allowed. This
|
suspended and autoresume was not allowed. This
|
||||||
setting is no longer supported.)
|
setting is no longer supported.)
|
||||||
|
|
||||||
power/autosuspend
|
power/autosuspend_delay_ms
|
||||||
|
|
||||||
This file contains an integer value, which is the
|
This file contains an integer value, which is the
|
||||||
number of seconds the device should remain idle before
|
number of milliseconds the device should remain idle
|
||||||
the kernel will autosuspend it (the idle-delay time).
|
before the kernel will autosuspend it (the idle-delay
|
||||||
The default is 2. 0 means to autosuspend as soon as
|
time). The default is 2000. 0 means to autosuspend
|
||||||
the device becomes idle, and negative values mean
|
as soon as the device becomes idle, and negative
|
||||||
never to autosuspend. You can write a number to the
|
values mean never to autosuspend. You can write a
|
||||||
file to change the autosuspend idle-delay time.
|
number to the file to change the autosuspend
|
||||||
|
idle-delay time.
|
||||||
|
|
||||||
Writing "-1" to power/autosuspend and writing "on" to power/control do
|
Writing "-1" to power/autosuspend_delay_ms and writing "on" to
|
||||||
essentially the same thing -- they both prevent the device from being
|
power/control do essentially the same thing -- they both prevent the
|
||||||
autosuspended. Yes, this is a redundancy in the API.
|
device from being autosuspended. Yes, this is a redundancy in the
|
||||||
|
API.
|
||||||
|
|
||||||
(In 2.6.21 writing "0" to power/autosuspend would prevent the device
|
(In 2.6.21 writing "0" to power/autosuspend would prevent the device
|
||||||
from being autosuspended; the behavior was changed in 2.6.22. The
|
from being autosuspended; the behavior was changed in 2.6.22. The
|
||||||
power/autosuspend attribute did not exist prior to 2.6.21, and the
|
power/autosuspend attribute did not exist prior to 2.6.21, and the
|
||||||
power/level attribute did not exist prior to 2.6.22. power/control
|
power/level attribute did not exist prior to 2.6.22. power/control
|
||||||
was added in 2.6.34.)
|
was added in 2.6.34, and power/autosuspend_delay_ms was added in
|
||||||
|
2.6.37 but did not become functional until 2.6.38.)
|
||||||
|
|
||||||
|
|
||||||
Changing the default idle-delay time
|
Changing the default idle-delay time
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
The default autosuspend idle-delay time is controlled by a module
|
The default autosuspend idle-delay time (in seconds) is controlled by
|
||||||
parameter in usbcore. You can specify the value when usbcore is
|
a module parameter in usbcore. You can specify the value when usbcore
|
||||||
loaded. For example, to set it to 5 seconds instead of 2 you would
|
is loaded. For example, to set it to 5 seconds instead of 2 you would
|
||||||
do:
|
do:
|
||||||
|
|
||||||
modprobe usbcore autosuspend=5
|
modprobe usbcore autosuspend=5
|
||||||
|
@ -234,25 +242,23 @@ every device.
|
||||||
|
|
||||||
If a driver knows that its device has proper suspend/resume support,
|
If a driver knows that its device has proper suspend/resume support,
|
||||||
it can enable autosuspend all by itself. For example, the video
|
it can enable autosuspend all by itself. For example, the video
|
||||||
driver for a laptop's webcam might do this, since these devices are
|
driver for a laptop's webcam might do this (in recent kernels they
|
||||||
rarely used and so should normally be autosuspended.
|
do), since these devices are rarely used and so should normally be
|
||||||
|
autosuspended.
|
||||||
|
|
||||||
Sometimes it turns out that even when a device does work okay with
|
Sometimes it turns out that even when a device does work okay with
|
||||||
autosuspend there are still problems. For example, there are
|
autosuspend there are still problems. For example, the usbhid driver,
|
||||||
experimental patches adding autosuspend support to the usbhid driver,
|
which manages keyboards and mice, has autosuspend support. Tests with
|
||||||
which manages keyboards and mice, among other things. Tests with a
|
a number of keyboards show that typing on a suspended keyboard, while
|
||||||
number of keyboards showed that typing on a suspended keyboard, while
|
causing the keyboard to do a remote wakeup all right, will nonetheless
|
||||||
causing the keyboard to do a remote wakeup all right, would
|
frequently result in lost keystrokes. Tests with mice show that some
|
||||||
nonetheless frequently result in lost keystrokes. Tests with mice
|
of them will issue a remote-wakeup request in response to button
|
||||||
showed that some of them would issue a remote-wakeup request in
|
presses but not to motion, and some in response to neither.
|
||||||
response to button presses but not to motion, and some in response to
|
|
||||||
neither.
|
|
||||||
|
|
||||||
The kernel will not prevent you from enabling autosuspend on devices
|
The kernel will not prevent you from enabling autosuspend on devices
|
||||||
that can't handle it. It is even possible in theory to damage a
|
that can't handle it. It is even possible in theory to damage a
|
||||||
device by suspending it at the wrong time -- for example, suspending a
|
device by suspending it at the wrong time. (Highly unlikely, but
|
||||||
USB hard disk might cause it to spin down without parking the heads.
|
possible.) Take care.
|
||||||
(Highly unlikely, but possible.) Take care.
|
|
||||||
|
|
||||||
|
|
||||||
The driver interface for Power Management
|
The driver interface for Power Management
|
||||||
|
@ -336,10 +342,6 @@ autosuspend the interface's device. When the usage counter is = 0
|
||||||
then the interface is considered to be idle, and the kernel may
|
then the interface is considered to be idle, and the kernel may
|
||||||
autosuspend the device.
|
autosuspend the device.
|
||||||
|
|
||||||
(There is a similar usage counter field in struct usb_device,
|
|
||||||
associated with the device itself rather than any of its interfaces.
|
|
||||||
This counter is used only by the USB core.)
|
|
||||||
|
|
||||||
Drivers need not be concerned about balancing changes to the usage
|
Drivers need not be concerned about balancing changes to the usage
|
||||||
counter; the USB core will undo any remaining "get"s when a driver
|
counter; the USB core will undo any remaining "get"s when a driver
|
||||||
is unbound from its interface. As a corollary, drivers must not call
|
is unbound from its interface. As a corollary, drivers must not call
|
||||||
|
@ -409,11 +411,11 @@ during autosuspend. For example, there's not much point
|
||||||
autosuspending a keyboard if the user can't cause the keyboard to do a
|
autosuspending a keyboard if the user can't cause the keyboard to do a
|
||||||
remote wakeup by typing on it. If the driver sets
|
remote wakeup by typing on it. If the driver sets
|
||||||
intf->needs_remote_wakeup to 1, the kernel won't autosuspend the
|
intf->needs_remote_wakeup to 1, the kernel won't autosuspend the
|
||||||
device if remote wakeup isn't available or has been disabled through
|
device if remote wakeup isn't available. (If the device is already
|
||||||
the power/wakeup attribute. (If the device is already autosuspended,
|
autosuspended, though, setting this flag won't cause the kernel to
|
||||||
though, setting this flag won't cause the kernel to autoresume it.
|
autoresume it. Normally a driver would set this flag in its probe
|
||||||
Normally a driver would set this flag in its probe method, at which
|
method, at which time the device is guaranteed not to be
|
||||||
time the device is guaranteed not to be autosuspended.)
|
autosuspended.)
|
||||||
|
|
||||||
If a driver does its I/O asynchronously in interrupt context, it
|
If a driver does its I/O asynchronously in interrupt context, it
|
||||||
should call usb_autopm_get_interface_async() before starting output and
|
should call usb_autopm_get_interface_async() before starting output and
|
||||||
|
@ -422,20 +424,19 @@ it receives an input event, it should call
|
||||||
|
|
||||||
usb_mark_last_busy(struct usb_device *udev);
|
usb_mark_last_busy(struct usb_device *udev);
|
||||||
|
|
||||||
in the event handler. This sets udev->last_busy to the current time.
|
in the event handler. This tells the PM core that the device was just
|
||||||
udev->last_busy is the field used for idle-delay calculations;
|
busy and therefore the next autosuspend idle-delay expiration should
|
||||||
updating it will cause any pending autosuspend to be moved back. Most
|
be pushed back. Many of the usb_autopm_* routines also make this call,
|
||||||
of the usb_autopm_* routines will also set the last_busy field to the
|
so drivers need to worry only when interrupt-driven input arrives.
|
||||||
current time.
|
|
||||||
|
|
||||||
Asynchronous operation is always subject to races. For example, a
|
Asynchronous operation is always subject to races. For example, a
|
||||||
driver may call one of the usb_autopm_*_interface_async() routines at
|
driver may call the usb_autopm_get_interface_async() routine at a time
|
||||||
a time when the core has just finished deciding the device has been
|
when the core has just finished deciding the device has been idle for
|
||||||
idle for long enough but not yet gotten around to calling the driver's
|
long enough but not yet gotten around to calling the driver's suspend
|
||||||
suspend method. The suspend method must be responsible for
|
method. The suspend method must be responsible for synchronizing with
|
||||||
synchronizing with the output request routine and the URB completion
|
the I/O request routine and the URB completion handler; it should
|
||||||
handler; it should cause autosuspends to fail with -EBUSY if the
|
cause autosuspends to fail with -EBUSY if the driver needs to use the
|
||||||
driver needs to use the device.
|
device.
|
||||||
|
|
||||||
External suspend calls should never be allowed to fail in this way,
|
External suspend calls should never be allowed to fail in this way,
|
||||||
only autosuspend calls. The driver can tell them apart by checking
|
only autosuspend calls. The driver can tell them apart by checking
|
||||||
|
@ -472,7 +473,9 @@ Firstly, a device may already be autosuspended when a system suspend
|
||||||
occurs. Since system suspends are supposed to be as transparent as
|
occurs. Since system suspends are supposed to be as transparent as
|
||||||
possible, the device should remain suspended following the system
|
possible, the device should remain suspended following the system
|
||||||
resume. But this theory may not work out well in practice; over time
|
resume. But this theory may not work out well in practice; over time
|
||||||
the kernel's behavior in this regard has changed.
|
the kernel's behavior in this regard has changed. As of 2.6.37 the
|
||||||
|
policy is to resume all devices during a system resume and let them
|
||||||
|
handle their own runtime suspends afterward.
|
||||||
|
|
||||||
Secondly, a dynamic power-management event may occur as a system
|
Secondly, a dynamic power-management event may occur as a system
|
||||||
suspend is underway. The window for this is short, since system
|
suspend is underway. The window for this is short, since system
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800]
|
0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800]
|
||||||
1 -> Unknown EM2750/28xx video grabber (em2820/em2840) [eb1a:2710,eb1a:2820,eb1a:2821,eb1a:2860,eb1a:2861,eb1a:2862,eb1a:2863,eb1a:2870,eb1a:2881,eb1a:2883,eb1a:2868]
|
1 -> Unknown EM2750/28xx video grabber (em2820/em2840) [eb1a:2710,eb1a:2820,eb1a:2821,eb1a:2860,eb1a:2861,eb1a:2862,eb1a:2863,eb1a:2870,eb1a:2881,eb1a:2883,eb1a:2868,eb1a:2875]
|
||||||
2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036]
|
2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036]
|
||||||
3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208]
|
3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208]
|
||||||
4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200,2040:4201]
|
4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200,2040:4201]
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
8 -> Kworld USB2800 (em2800)
|
8 -> Kworld USB2800 (em2800)
|
||||||
9 -> Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker (em2820/em2840) [1b80:e302,1b80:e304,2304:0207,2304:021a]
|
9 -> Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker (em2820/em2840) [1b80:e302,1b80:e304,2304:0207,2304:021a]
|
||||||
10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500]
|
10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500]
|
||||||
11 -> Terratec Hybrid XS (em2880) [0ccd:0042]
|
11 -> Terratec Hybrid XS (em2880)
|
||||||
12 -> Kworld PVR TV 2800 RF (em2820/em2840)
|
12 -> Kworld PVR TV 2800 RF (em2820/em2840)
|
||||||
13 -> Terratec Prodigy XS (em2880) [0ccd:0047]
|
13 -> Terratec Prodigy XS (em2880) [0ccd:0047]
|
||||||
14 -> SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 (em2820/em2840)
|
14 -> SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 (em2820/em2840)
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
52 -> DNT DA2 Hybrid (em2881)
|
52 -> DNT DA2 Hybrid (em2881)
|
||||||
53 -> Pinnacle Hybrid Pro (em2881)
|
53 -> Pinnacle Hybrid Pro (em2881)
|
||||||
54 -> Kworld VS-DVB-T 323UR (em2882) [eb1a:e323]
|
54 -> Kworld VS-DVB-T 323UR (em2882) [eb1a:e323]
|
||||||
55 -> Terratec Hybrid XS (em2882) (em2882) [0ccd:005e]
|
55 -> Terratec Cinnergy Hybrid T USB XS (em2882) (em2882) [0ccd:005e,0ccd:0042]
|
||||||
56 -> Pinnacle Hybrid Pro (2) (em2882) [2304:0226]
|
56 -> Pinnacle Hybrid Pro (2) (em2882) [2304:0226]
|
||||||
57 -> Kworld PlusTV HD Hybrid 330 (em2883) [eb1a:a316]
|
57 -> Kworld PlusTV HD Hybrid 330 (em2883) [eb1a:a316]
|
||||||
58 -> Compro VideoMate ForYou/Stereo (em2820/em2840) [185b:2041]
|
58 -> Compro VideoMate ForYou/Stereo (em2820/em2840) [185b:2041]
|
||||||
|
|
|
@ -180,3 +180,5 @@
|
||||||
179 -> Beholder BeholdTV A7 [5ace:7090]
|
179 -> Beholder BeholdTV A7 [5ace:7090]
|
||||||
180 -> Avermedia PCI M733A [1461:4155,1461:4255]
|
180 -> Avermedia PCI M733A [1461:4155,1461:4255]
|
||||||
181 -> TechoTrend TT-budget T-3000 [13c2:2804]
|
181 -> TechoTrend TT-budget T-3000 [13c2:2804]
|
||||||
|
182 -> Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid [17de:b136]
|
||||||
|
183 -> Compro VideoMate Vista M1F [185b:c900]
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
# kbuild trick to avoid linker error. Can be omitted if a module is built.
|
|
||||||
obj- := dummy.o
|
|
||||||
|
|
||||||
# List of programs to build
|
|
||||||
hostprogs-y := v4lgrab
|
|
||||||
|
|
||||||
# Tell kbuild to always build the programs
|
|
||||||
always := $(hostprogs-y)
|
|
|
@ -1,191 +0,0 @@
|
||||||
This is a driver for the CPiA PPC2 driven parallel connected
|
|
||||||
Camera. For example the Creative WebcamII is CPiA driven.
|
|
||||||
|
|
||||||
) [1]Peter Pregler, Linz 2000, published under the [2]GNU GPL
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
USAGE:
|
|
||||||
|
|
||||||
General:
|
|
||||||
========
|
|
||||||
|
|
||||||
1) Make sure you have created the video devices (/dev/video*):
|
|
||||||
|
|
||||||
- if you have a recent MAKEDEV do a 'cd /dev;./MAKEDEV video'
|
|
||||||
- otherwise do a:
|
|
||||||
|
|
||||||
cd /dev
|
|
||||||
mknod video0 c 81 0
|
|
||||||
ln -s video0 video
|
|
||||||
|
|
||||||
2) Compile the kernel (see below for the list of options to use),
|
|
||||||
configure your parport and reboot.
|
|
||||||
|
|
||||||
3) If all worked well you should get messages similar
|
|
||||||
to the following (your versions may be different) on the console:
|
|
||||||
|
|
||||||
V4L-Driver for Vision CPiA based cameras v0.7.4
|
|
||||||
parport0: read2 timeout.
|
|
||||||
parport0: Multimedia device, VLSI Vision Ltd PPC2
|
|
||||||
Parallel port driver for Vision CPiA based camera
|
|
||||||
CPIA Version: 1.20 (2.0)
|
|
||||||
CPIA PnP-ID: 0553:0002:0100
|
|
||||||
VP-Version: 1.0 0100
|
|
||||||
1 camera(s) found
|
|
||||||
|
|
||||||
|
|
||||||
As modules:
|
|
||||||
===========
|
|
||||||
|
|
||||||
Make sure you have selected the following kernel options (you can
|
|
||||||
select all stuff as modules):
|
|
||||||
|
|
||||||
The cpia-stuff is in the section 'Character devices -> Video For Linux'.
|
|
||||||
|
|
||||||
CONFIG_PARPORT=m
|
|
||||||
CONFIG_PARPORT_PC=m
|
|
||||||
CONFIG_PARPORT_PC_FIFO=y
|
|
||||||
CONFIG_PARPORT_1284=y
|
|
||||||
CONFIG_VIDEO_DEV=m
|
|
||||||
CONFIG_VIDEO_CPIA=m
|
|
||||||
CONFIG_VIDEO_CPIA_PP=m
|
|
||||||
|
|
||||||
For autoloading of all those modules you need to tell module-init-tools
|
|
||||||
some stuff. Add the following line to your module-init-tools config-file
|
|
||||||
(e.g. /etc/modprobe.conf or wherever your distribution does store that
|
|
||||||
stuff):
|
|
||||||
|
|
||||||
options parport_pc io=0x378 irq=7 dma=3
|
|
||||||
alias char-major-81 cpia_pp
|
|
||||||
|
|
||||||
The first line tells the dma/irq channels to use. Those _must_ match
|
|
||||||
the settings of your BIOS. Do NOT simply use the values above. See
|
|
||||||
Documentation/parport.txt for more information about this. The second
|
|
||||||
line associates the video-device file with the driver. Of cause you
|
|
||||||
can also load the modules once upon boot (usually done in /etc/modules).
|
|
||||||
|
|
||||||
Linked into the kernel:
|
|
||||||
=======================
|
|
||||||
|
|
||||||
Make sure you have selected the following kernel options. Note that
|
|
||||||
you cannot compile the parport-stuff as modules and the cpia-driver
|
|
||||||
statically (the other way round is okay though).
|
|
||||||
|
|
||||||
The cpia-stuff is in the section 'Character devices -> Video For Linux'.
|
|
||||||
|
|
||||||
CONFIG_PARPORT=y
|
|
||||||
CONFIG_PARPORT_PC=y
|
|
||||||
CONFIG_PARPORT_PC_FIFO=y
|
|
||||||
CONFIG_PARPORT_1284=y
|
|
||||||
CONFIG_VIDEO_DEV=y
|
|
||||||
CONFIG_VIDEO_CPIA=y
|
|
||||||
CONFIG_VIDEO_CPIA_PP=y
|
|
||||||
|
|
||||||
To use DMA/irq you will need to tell the kernel upon boot time the
|
|
||||||
hardware configuration of the parport. You can give the boot-parameter
|
|
||||||
at the LILO-prompt or specify it in lilo.conf. I use the following
|
|
||||||
append-line in lilo.conf:
|
|
||||||
|
|
||||||
append="parport=0x378,7,3"
|
|
||||||
|
|
||||||
See Documentation/parport.txt for more information about the
|
|
||||||
configuration of the parport and the values given above. Do not simply
|
|
||||||
use the values given above.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
FEATURES:
|
|
||||||
|
|
||||||
- mmap/read v4l-interface (but no overlay)
|
|
||||||
- image formats: CIF/QCIF, SIF/QSIF, various others used by isabel;
|
|
||||||
note: all sizes except CIF/QCIF are implemented by clipping, i.e.
|
|
||||||
pixels are not uploaded from the camera
|
|
||||||
- palettes: VIDEO_PALETTE_GRAY, VIDEO_PALETTE_RGB565, VIDEO_PALETTE_RGB555,
|
|
||||||
VIDEO_PALETTE_RGB24, VIDEO_PALETTE_RGB32, VIDEO_PALETTE_YUYV,
|
|
||||||
VIDEO_PALETTE_UYVY, VIDEO_PALETTE_YUV422
|
|
||||||
- state information (color balance, exposure, ...) is preserved between
|
|
||||||
device opens
|
|
||||||
- complete control over camera via proc-interface (_all_ camera settings are
|
|
||||||
supported), there is also a python-gtk application available for this [3]
|
|
||||||
- works under SMP (but the driver is completely serialized and synchronous)
|
|
||||||
so you get no benefit from SMP, but at least it does not crash your box
|
|
||||||
- might work for non-Intel architecture, let us know about this
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
TESTED APPLICATIONS:
|
|
||||||
|
|
||||||
- a simple test application based on Xt is available at [3]
|
|
||||||
- another test-application based on gqcam-0.4 (uses GTK)
|
|
||||||
- gqcam-0.6 should work
|
|
||||||
- xawtv-3.x (also the webcam software)
|
|
||||||
- xawtv-2.46
|
|
||||||
- w3cam (cgi-interface and vidcat, e.g. you may try out 'vidcat |xv
|
|
||||||
-maxpect -root -quit +noresetroot -rmode 5 -')
|
|
||||||
- vic, the MBONE video conferencing tool (version 2.8ucl4-1)
|
|
||||||
- isabel 3R4beta (barely working, but AFAICT all the problems are on
|
|
||||||
their side)
|
|
||||||
- camserv-0.40
|
|
||||||
|
|
||||||
See [3] for pointers to v4l-applications.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
KNOWN PROBLEMS:
|
|
||||||
|
|
||||||
- some applications do not handle the image format correctly, you will
|
|
||||||
see strange horizontal stripes instead of a nice picture -> make sure
|
|
||||||
your application does use a supported image size or queries the driver
|
|
||||||
for the actually used size (reason behind this: the camera cannot
|
|
||||||
provide any image format, so if size NxM is requested the driver will
|
|
||||||
use a format to the closest fitting N1xM1, the application should now
|
|
||||||
query for this granted size, most applications do not).
|
|
||||||
- all the todo ;)
|
|
||||||
- if there is not enough light and the picture is too dark try to
|
|
||||||
adjust the SetSensorFPS setting, automatic frame rate adjustment
|
|
||||||
has its price
|
|
||||||
- do not try out isabel 3R4beta (built 135), you will be disappointed
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
TODO:
|
|
||||||
|
|
||||||
- multiple camera support (struct camera or something) - This should work,
|
|
||||||
but hasn't been tested yet.
|
|
||||||
- architecture independence?
|
|
||||||
- SMP-safe asynchronous mmap interface
|
|
||||||
- nibble mode for old parport interfaces
|
|
||||||
- streaming capture, this should give a performance gain
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
IMPLEMENTATION NOTES:
|
|
||||||
|
|
||||||
The camera can act in two modes, streaming or grabbing. Right now a
|
|
||||||
polling grab-scheme is used. Maybe interrupt driven streaming will be
|
|
||||||
used for a asynchronous mmap interface in the next major release of the
|
|
||||||
driver. This might give a better frame rate.
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
THANKS (in no particular order):
|
|
||||||
|
|
||||||
- Scott J. Bertin <sbertin@mindspring.com> for cleanups, the proc-filesystem
|
|
||||||
and much more
|
|
||||||
- Henry Bruce <whb@vvl.co.uk> for providing developers information about
|
|
||||||
the CPiA chip, I wish all companies would treat Linux as seriously
|
|
||||||
- Karoly Erdei <Karoly.Erdei@risc.uni-linz.ac.at> and RISC-Linz for being
|
|
||||||
my boss ;) resp. my employer and for providing me the hardware and
|
|
||||||
allow me to devote some working time to this project
|
|
||||||
- Manuel J. Petit de Gabriel <mpetit@dit.upm.es> for providing help
|
|
||||||
with Isabel (http://isabel.dit.upm.es/)
|
|
||||||
- Bas Huisman <bhuism@cs.utwente.nl> for writing the initial parport code
|
|
||||||
- Jarl Totland <Jarl.Totland@bdc.no> for setting up the mailing list
|
|
||||||
and maintaining the web-server[3]
|
|
||||||
- Chris Whiteford <Chris@informinteractive.com> for fixes related to the
|
|
||||||
1.02 firmware
|
|
||||||
- special kudos to all the tester whose machines crashed and/or
|
|
||||||
will crash. :)
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
REFERENCES
|
|
||||||
|
|
||||||
1. http://www.risc.uni-linz.ac.at/
|
|
||||||
mailto:Peter_Pregler@email.com
|
|
||||||
2. see the file COPYING in the top directory of the kernel tree
|
|
||||||
3. http://webcam.sourceforge.net/
|
|
|
@ -322,76 +322,11 @@ your IRQs and make sure the card has its own interrupts.
|
||||||
|
|
||||||
4. Programming interface
|
4. Programming interface
|
||||||
|
|
||||||
This driver conforms to video4linux and video4linux2, both can be used to
|
This driver conforms to video4linux2. Support for V4L1 and for the custom
|
||||||
use the driver. Since video4linux didn't provide adequate calls to fully
|
zoran ioctls has been removed in kernel 2.6.38.
|
||||||
use the cards' features, we've introduced several programming extensions,
|
|
||||||
which are currently officially accepted in the 2.4.x branch of the kernel.
|
|
||||||
These extensions are known as the v4l/mjpeg extensions. See zoran.h for
|
|
||||||
details (structs/ioctls).
|
|
||||||
|
|
||||||
Information - video4linux:
|
|
||||||
http://linux.bytesex.org/v4l2/API.html
|
|
||||||
Documentation/video4linux/API.html
|
|
||||||
/usr/include/linux/videodev.h
|
|
||||||
|
|
||||||
Information - video4linux/mjpeg extensions:
|
|
||||||
./zoran.h
|
|
||||||
(also see below)
|
|
||||||
|
|
||||||
Information - video4linux2:
|
|
||||||
http://linuxtv.org
|
|
||||||
http://v4l2spec.bytesex.org/
|
|
||||||
/usr/include/linux/videodev2.h
|
|
||||||
|
|
||||||
More information on the video4linux/mjpeg extensions, by Serguei
|
|
||||||
Miridonovi and Rainer Johanni:
|
|
||||||
--
|
|
||||||
The ioctls for that interface are as follows:
|
|
||||||
|
|
||||||
BUZIOC_G_PARAMS
|
|
||||||
BUZIOC_S_PARAMS
|
|
||||||
|
|
||||||
Get and set the parameters of the buz. The user should always do a
|
|
||||||
BUZIOC_G_PARAMS (with a struct buz_params) to obtain the default
|
|
||||||
settings, change what he likes and then make a BUZIOC_S_PARAMS call.
|
|
||||||
|
|
||||||
BUZIOC_REQBUFS
|
|
||||||
|
|
||||||
Before being able to capture/playback, the user has to request
|
|
||||||
the buffers he is wanting to use. Fill the structure
|
|
||||||
zoran_requestbuffers with the size (recommended: 256*1024) and
|
|
||||||
the number (recommended 32 up to 256). There are no such restrictions
|
|
||||||
as for the Video for Linux buffers, you should LEAVE SUFFICIENT
|
|
||||||
MEMORY for your system however, else strange things will happen ....
|
|
||||||
On return, the zoran_requestbuffers structure contains number and
|
|
||||||
size of the actually allocated buffers.
|
|
||||||
You should use these numbers for doing a mmap of the buffers
|
|
||||||
into the user space.
|
|
||||||
The BUZIOC_REQBUFS ioctl also makes it happen, that the next mmap
|
|
||||||
maps the MJPEG buffer instead of the V4L buffers.
|
|
||||||
|
|
||||||
BUZIOC_QBUF_CAPT
|
|
||||||
BUZIOC_QBUF_PLAY
|
|
||||||
|
|
||||||
Queue a buffer for capture or playback. The first call also starts
|
|
||||||
streaming capture. When streaming capture is going on, you may
|
|
||||||
only queue further buffers or issue syncs until streaming
|
|
||||||
capture is switched off again with a argument of -1 to
|
|
||||||
a BUZIOC_QBUF_CAPT/BUZIOC_QBUF_PLAY ioctl.
|
|
||||||
|
|
||||||
BUZIOC_SYNC
|
|
||||||
|
|
||||||
Issue this ioctl when all buffers are queued. This ioctl will
|
|
||||||
block until the first buffer becomes free for saving its
|
|
||||||
data to disk (after BUZIOC_QBUF_CAPT) or for reuse (after BUZIOC_QBUF_PLAY).
|
|
||||||
|
|
||||||
BUZIOC_G_STATUS
|
|
||||||
|
|
||||||
Get the status of the input lines (video source connected/norm).
|
|
||||||
|
|
||||||
For programming example, please, look at lavrec.c and lavplay.c code in
|
For programming example, please, look at lavrec.c and lavplay.c code in
|
||||||
lavtools-1.2p2 package (URL: http://www.cicese.mx/)
|
the MJPEG-tools (http://mjpeg.sf.net/).
|
||||||
and the 'examples' directory in the original Buz driver distribution.
|
|
||||||
|
|
||||||
Additional notes for software developers:
|
Additional notes for software developers:
|
||||||
|
|
||||||
|
@ -402,9 +337,6 @@ Additional notes for software developers:
|
||||||
standard is "more constant" for current country than geometry
|
standard is "more constant" for current country than geometry
|
||||||
settings of a variety of TV capture cards which may work in ITU or
|
settings of a variety of TV capture cards which may work in ITU or
|
||||||
square pixel format.
|
square pixel format.
|
||||||
--
|
|
||||||
Please note that lavplay/lavrec are also included in the MJPEG-tools
|
|
||||||
(http://mjpeg.sf.net/).
|
|
||||||
|
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
|
|
@ -464,10 +464,6 @@ Siemens
|
||||||
-------
|
-------
|
||||||
Multimedia eXtension Board (MXB) (SAA7146, SAA7111)
|
Multimedia eXtension Board (MXB) (SAA7146, SAA7111)
|
||||||
|
|
||||||
Stradis
|
|
||||||
-------
|
|
||||||
SDM275,SDM250,SDM026,SDM025 (SAA7146, IBMMPEG2): MPEG2 decoder only
|
|
||||||
|
|
||||||
Powercolor
|
Powercolor
|
||||||
----------
|
----------
|
||||||
MTV878
|
MTV878
|
||||||
|
|
|
@ -366,6 +366,7 @@ t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops
|
||||||
vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC
|
vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC
|
||||||
pac207 2001:f115 D-Link DSB-C120
|
pac207 2001:f115 D-Link DSB-C120
|
||||||
sq905c 2770:9050 Disney pix micro (CIF)
|
sq905c 2770:9050 Disney pix micro (CIF)
|
||||||
|
sq905c 2770:9051 Lego Bionicle
|
||||||
sq905c 2770:9052 Disney pix micro 2 (VGA)
|
sq905c 2770:9052 Disney pix micro 2 (VGA)
|
||||||
sq905c 2770:905c All 11 known cameras with this ID
|
sq905c 2770:905c All 11 known cameras with this ID
|
||||||
sq905 2770:9120 All 24 known cameras with this ID
|
sq905 2770:9120 All 24 known cameras with this ID
|
||||||
|
|
|
@ -45,8 +45,6 @@ module argument syntax (<param>=<value> when passing the option to the
|
||||||
module or meye.<param>=<value> on the kernel boot line when meye is
|
module or meye.<param>=<value> on the kernel boot line when meye is
|
||||||
statically linked into the kernel). Those options are:
|
statically linked into the kernel). Those options are:
|
||||||
|
|
||||||
forcev4l1: force use of V4L1 API instead of V4L2
|
|
||||||
|
|
||||||
gbuffers: number of capture buffers, default is 2 (32 max)
|
gbuffers: number of capture buffers, default is 2 (32 max)
|
||||||
|
|
||||||
gbufsize: size of each capture buffer, default is 614400
|
gbufsize: size of each capture buffer, default is 614400
|
||||||
|
@ -79,9 +77,8 @@ Usage:
|
||||||
Private API:
|
Private API:
|
||||||
------------
|
------------
|
||||||
|
|
||||||
The driver supports frame grabbing with the video4linux API
|
The driver supports frame grabbing with the video4linux API,
|
||||||
(either v4l1 or v4l2), so all video4linux tools (like xawtv)
|
so all video4linux tools (like xawtv) should work with this driver.
|
||||||
should work with this driver.
|
|
||||||
|
|
||||||
Besides the video4linux interface, the driver has a private interface
|
Besides the video4linux interface, the driver has a private interface
|
||||||
for accessing the Motion Eye extended parameters (camera sharpness,
|
for accessing the Motion Eye extended parameters (camera sharpness,
|
||||||
|
@ -123,7 +120,4 @@ Private API:
|
||||||
Bugs / Todo:
|
Bugs / Todo:
|
||||||
------------
|
------------
|
||||||
|
|
||||||
- the driver could be much cleaned up by removing the v4l1 support.
|
|
||||||
However, this means all v4l1-only applications will stop working.
|
|
||||||
|
|
||||||
- 'motioneye' still uses the meye private v4l1 API extensions.
|
- 'motioneye' still uses the meye private v4l1 API extensions.
|
||||||
|
|
|
@ -1,201 +0,0 @@
|
||||||
/* Simple Video4Linux image grabber. */
|
|
||||||
/*
|
|
||||||
* Video4Linux Driver Test/Example Framegrabbing Program
|
|
||||||
*
|
|
||||||
* Compile with:
|
|
||||||
* gcc -s -Wall -Wstrict-prototypes v4lgrab.c -o v4lgrab
|
|
||||||
* Use as:
|
|
||||||
* v4lgrab >image.ppm
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998-05-03, Phil Blundell <philb@gnu.org>
|
|
||||||
* Copied from http://www.tazenda.demon.co.uk/phil/vgrabber.c
|
|
||||||
* with minor modifications (Dave Forrest, drf5n@virginia.edu).
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* For some cameras you may need to pre-load libv4l to perform
|
|
||||||
* the necessary decompression, e.g.:
|
|
||||||
*
|
|
||||||
* export LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so
|
|
||||||
* ./v4lgrab >image.ppm
|
|
||||||
*
|
|
||||||
* see http://hansdegoede.livejournal.com/3636.html for details.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <linux/videodev.h>
|
|
||||||
|
|
||||||
#define VIDEO_DEV "/dev/video0"
|
|
||||||
|
|
||||||
/* Stole this from tvset.c */
|
|
||||||
|
|
||||||
#define READ_VIDEO_PIXEL(buf, format, depth, r, g, b) \
|
|
||||||
{ \
|
|
||||||
switch (format) \
|
|
||||||
{ \
|
|
||||||
case VIDEO_PALETTE_GREY: \
|
|
||||||
switch (depth) \
|
|
||||||
{ \
|
|
||||||
case 4: \
|
|
||||||
case 6: \
|
|
||||||
case 8: \
|
|
||||||
(r) = (g) = (b) = (*buf++ << 8);\
|
|
||||||
break; \
|
|
||||||
\
|
|
||||||
case 16: \
|
|
||||||
(r) = (g) = (b) = \
|
|
||||||
*((unsigned short *) buf); \
|
|
||||||
buf += 2; \
|
|
||||||
break; \
|
|
||||||
} \
|
|
||||||
break; \
|
|
||||||
\
|
|
||||||
\
|
|
||||||
case VIDEO_PALETTE_RGB565: \
|
|
||||||
{ \
|
|
||||||
unsigned short tmp = *(unsigned short *)buf; \
|
|
||||||
(r) = tmp&0xF800; \
|
|
||||||
(g) = (tmp<<5)&0xFC00; \
|
|
||||||
(b) = (tmp<<11)&0xF800; \
|
|
||||||
buf += 2; \
|
|
||||||
} \
|
|
||||||
break; \
|
|
||||||
\
|
|
||||||
case VIDEO_PALETTE_RGB555: \
|
|
||||||
(r) = (buf[0]&0xF8)<<8; \
|
|
||||||
(g) = ((buf[0] << 5 | buf[1] >> 3)&0xF8)<<8; \
|
|
||||||
(b) = ((buf[1] << 2 ) & 0xF8)<<8; \
|
|
||||||
buf += 2; \
|
|
||||||
break; \
|
|
||||||
\
|
|
||||||
case VIDEO_PALETTE_RGB24: \
|
|
||||||
(r) = buf[0] << 8; (g) = buf[1] << 8; \
|
|
||||||
(b) = buf[2] << 8; \
|
|
||||||
buf += 3; \
|
|
||||||
break; \
|
|
||||||
\
|
|
||||||
default: \
|
|
||||||
fprintf(stderr, \
|
|
||||||
"Format %d not yet supported\n", \
|
|
||||||
format); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
static int get_brightness_adj(unsigned char *image, long size, int *brightness) {
|
|
||||||
long i, tot = 0;
|
|
||||||
for (i=0;i<size*3;i++)
|
|
||||||
tot += image[i];
|
|
||||||
*brightness = (128 - tot/(size*3))/3;
|
|
||||||
return !((tot/(size*3)) >= 126 && (tot/(size*3)) <= 130);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char ** argv)
|
|
||||||
{
|
|
||||||
int fd = open(VIDEO_DEV, O_RDONLY), f;
|
|
||||||
struct video_capability cap;
|
|
||||||
struct video_window win;
|
|
||||||
struct video_picture vpic;
|
|
||||||
|
|
||||||
unsigned char *buffer, *src;
|
|
||||||
int bpp = 24, r = 0, g = 0, b = 0;
|
|
||||||
unsigned int i, src_depth = 16;
|
|
||||||
|
|
||||||
if (fd < 0) {
|
|
||||||
perror(VIDEO_DEV);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(fd, VIDIOCGCAP, &cap) < 0) {
|
|
||||||
perror("VIDIOGCAP");
|
|
||||||
fprintf(stderr, "(" VIDEO_DEV " not a video4linux device?)\n");
|
|
||||||
close(fd);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(fd, VIDIOCGWIN, &win) < 0) {
|
|
||||||
perror("VIDIOCGWIN");
|
|
||||||
close(fd);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(fd, VIDIOCGPICT, &vpic) < 0) {
|
|
||||||
perror("VIDIOCGPICT");
|
|
||||||
close(fd);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cap.type & VID_TYPE_MONOCHROME) {
|
|
||||||
vpic.depth=8;
|
|
||||||
vpic.palette=VIDEO_PALETTE_GREY; /* 8bit grey */
|
|
||||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
|
||||||
vpic.depth=6;
|
|
||||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
|
||||||
vpic.depth=4;
|
|
||||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
|
||||||
fprintf(stderr, "Unable to find a supported capture format.\n");
|
|
||||||
close(fd);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
vpic.depth=24;
|
|
||||||
vpic.palette=VIDEO_PALETTE_RGB24;
|
|
||||||
|
|
||||||
if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
|
|
||||||
vpic.palette=VIDEO_PALETTE_RGB565;
|
|
||||||
vpic.depth=16;
|
|
||||||
|
|
||||||
if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
|
|
||||||
vpic.palette=VIDEO_PALETTE_RGB555;
|
|
||||||
vpic.depth=15;
|
|
||||||
|
|
||||||
if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
|
|
||||||
fprintf(stderr, "Unable to find a supported capture format.\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer = malloc(win.width * win.height * bpp);
|
|
||||||
if (!buffer) {
|
|
||||||
fprintf(stderr, "Out of memory.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
int newbright;
|
|
||||||
read(fd, buffer, win.width * win.height * bpp);
|
|
||||||
f = get_brightness_adj(buffer, win.width * win.height, &newbright);
|
|
||||||
if (f) {
|
|
||||||
vpic.brightness += (newbright << 8);
|
|
||||||
if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
|
|
||||||
perror("VIDIOSPICT");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (f);
|
|
||||||
|
|
||||||
fprintf(stdout, "P6\n%d %d 255\n", win.width, win.height);
|
|
||||||
|
|
||||||
src = buffer;
|
|
||||||
|
|
||||||
for (i = 0; i < win.width * win.height; i++) {
|
|
||||||
READ_VIDEO_PIXEL(src, vpic.palette, src_depth, r, g, b);
|
|
||||||
fputc(r>>8, stdout);
|
|
||||||
fputc(g>>8, stdout);
|
|
||||||
fputc(b>>8, stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -247,8 +247,6 @@ calls. The relevant helper functions are:
|
||||||
int nonblocking);
|
int nonblocking);
|
||||||
int videobuf_streamon(struct videobuf_queue *q);
|
int videobuf_streamon(struct videobuf_queue *q);
|
||||||
int videobuf_streamoff(struct videobuf_queue *q);
|
int videobuf_streamoff(struct videobuf_queue *q);
|
||||||
int videobuf_cgmbuf(struct videobuf_queue *q, struct video_mbuf *mbuf,
|
|
||||||
int count);
|
|
||||||
|
|
||||||
So, for example, a VIDIOC_REQBUFS call turns into a call to the driver's
|
So, for example, a VIDIOC_REQBUFS call turns into a call to the driver's
|
||||||
vidioc_reqbufs() callback which, in turn, usually only needs to locate the
|
vidioc_reqbufs() callback which, in turn, usually only needs to locate the
|
||||||
|
@ -258,10 +256,7 @@ boilerplate in a lot of V4L2 drivers.
|
||||||
|
|
||||||
The vidioc_streamon() and vidioc_streamoff() functions will be a bit more
|
The vidioc_streamon() and vidioc_streamoff() functions will be a bit more
|
||||||
complex, of course, since they will also need to deal with starting and
|
complex, of course, since they will also need to deal with starting and
|
||||||
stopping the capture engine. videobuf_cgmbuf(), called from the driver's
|
stopping the capture engine.
|
||||||
vidiocgmbuf() function, only exists if the V4L1 compatibility module has
|
|
||||||
been selected with CONFIG_VIDEO_V4L1_COMPAT, so its use must be surrounded
|
|
||||||
with #ifdef directives.
|
|
||||||
|
|
||||||
Buffer allocation
|
Buffer allocation
|
||||||
|
|
||||||
|
|
|
@ -600,6 +600,7 @@ Protocol: 2.07+
|
||||||
0x00000001 lguest
|
0x00000001 lguest
|
||||||
0x00000002 Xen
|
0x00000002 Xen
|
||||||
0x00000003 Moorestown MID
|
0x00000003 Moorestown MID
|
||||||
|
0x00000004 CE4100 TV Platform
|
||||||
|
|
||||||
Field name: hardware_subarch_data
|
Field name: hardware_subarch_data
|
||||||
Type: write (subarch-dependent)
|
Type: write (subarch-dependent)
|
||||||
|
|
128
MAINTAINERS
128
MAINTAINERS
|
@ -166,9 +166,8 @@ F: drivers/serial/8250*
|
||||||
F: include/linux/serial_8250.h
|
F: include/linux/serial_8250.h
|
||||||
|
|
||||||
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
|
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
|
||||||
M: Paul Gortmaker <p_gortmaker@yahoo.com>
|
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Orphan / Obsolete
|
||||||
F: drivers/net/*8390*
|
F: drivers/net/*8390*
|
||||||
F: drivers/net/ax88796.c
|
F: drivers/net/ax88796.c
|
||||||
|
|
||||||
|
@ -405,7 +404,7 @@ S: Supported
|
||||||
F: drivers/usb/gadget/amd5536udc.*
|
F: drivers/usb/gadget/amd5536udc.*
|
||||||
|
|
||||||
AMD GEODE PROCESSOR/CHIPSET SUPPORT
|
AMD GEODE PROCESSOR/CHIPSET SUPPORT
|
||||||
P: Jordan Crouse
|
P: Andres Salomon <dilinger@queued.net>
|
||||||
L: linux-geode@lists.infradead.org (moderated for non-subscribers)
|
L: linux-geode@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
|
W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -559,14 +558,14 @@ W: http://maxim.org.za/at91_26.html
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/BCMRING ARM ARCHITECTURE
|
ARM/BCMRING ARM ARCHITECTURE
|
||||||
M: Leo Chen <leochen@broadcom.com>
|
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||||
M: Scott Branden <sbranden@broadcom.com>
|
M: Scott Branden <sbranden@broadcom.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-bcmring
|
F: arch/arm/mach-bcmring
|
||||||
|
|
||||||
ARM/BCMRING MTD NAND DRIVER
|
ARM/BCMRING MTD NAND DRIVER
|
||||||
M: Leo Chen <leochen@broadcom.com>
|
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||||
M: Scott Branden <sbranden@broadcom.com>
|
M: Scott Branden <sbranden@broadcom.com>
|
||||||
L: linux-mtd@lists.infradead.org
|
L: linux-mtd@lists.infradead.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -792,11 +791,14 @@ S: Maintained
|
||||||
|
|
||||||
ARM/NOMADIK ARCHITECTURE
|
ARM/NOMADIK ARCHITECTURE
|
||||||
M: Alessandro Rubini <rubini@unipv.it>
|
M: Alessandro Rubini <rubini@unipv.it>
|
||||||
|
M: Linus Walleij <linus.walleij@stericsson.com>
|
||||||
M: STEricsson <STEricsson_nomadik_linux@list.st.com>
|
M: STEricsson <STEricsson_nomadik_linux@list.st.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-nomadik/
|
F: arch/arm/mach-nomadik/
|
||||||
F: arch/arm/plat-nomadik/
|
F: arch/arm/plat-nomadik/
|
||||||
|
F: drivers/i2c/busses/i2c-nomadik.c
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
|
||||||
|
|
||||||
ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
|
ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
|
||||||
M: Nelson Castillo <arhuaco@freaks-unidos.net>
|
M: Nelson Castillo <arhuaco@freaks-unidos.net>
|
||||||
|
@ -815,7 +817,7 @@ F: drivers/mmc/host/msm_sdcc.c
|
||||||
F: drivers/mmc/host/msm_sdcc.h
|
F: drivers/mmc/host/msm_sdcc.h
|
||||||
F: drivers/serial/msm_serial.h
|
F: drivers/serial/msm_serial.h
|
||||||
F: drivers/serial/msm_serial.c
|
F: drivers/serial/msm_serial.c
|
||||||
T: git git://codeaurora.org/quic/kernel/dwalker/linux-msm.git
|
T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/TOSA MACHINE SUPPORT
|
ARM/TOSA MACHINE SUPPORT
|
||||||
|
@ -998,12 +1000,24 @@ F: drivers/i2c/busses/i2c-stu300.c
|
||||||
F: drivers/rtc/rtc-coh901331.c
|
F: drivers/rtc/rtc-coh901331.c
|
||||||
F: drivers/watchdog/coh901327_wdt.c
|
F: drivers/watchdog/coh901327_wdt.c
|
||||||
F: drivers/dma/coh901318*
|
F: drivers/dma/coh901318*
|
||||||
|
F: drivers/mfd/ab3100*
|
||||||
|
F: drivers/rtc/rtc-ab3100.c
|
||||||
|
F: drivers/rtc/rtc-coh901331.c
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
|
||||||
|
|
||||||
ARM/U8500 ARM ARCHITECTURE
|
ARM/Ux500 ARM ARCHITECTURE
|
||||||
M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
|
M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
|
||||||
|
M: Linus Walleij <linus.walleij@stericsson.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-ux500/
|
F: arch/arm/mach-ux500/
|
||||||
|
F: drivers/dma/ste_dma40*
|
||||||
|
F: drivers/mfd/ab3550*
|
||||||
|
F: drivers/mfd/abx500*
|
||||||
|
F: drivers/mfd/ab8500*
|
||||||
|
F: drivers/mfd/stmpe*
|
||||||
|
F: drivers/rtc/rtc-ab8500.c
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
|
||||||
|
|
||||||
ARM/VFP SUPPORT
|
ARM/VFP SUPPORT
|
||||||
M: Russell King <linux@arm.linux.org.uk>
|
M: Russell King <linux@arm.linux.org.uk>
|
||||||
|
@ -1080,6 +1094,12 @@ S: Supported
|
||||||
F: Documentation/aoe/
|
F: Documentation/aoe/
|
||||||
F: drivers/block/aoe/
|
F: drivers/block/aoe/
|
||||||
|
|
||||||
|
ATHEROS ATH GENERIC UTILITIES
|
||||||
|
M: "Luis R. Rodriguez" <lrodriguez@atheros.com>
|
||||||
|
L: linux-wireless@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/net/wireless/ath/*
|
||||||
|
|
||||||
ATHEROS ATH5K WIRELESS DRIVER
|
ATHEROS ATH5K WIRELESS DRIVER
|
||||||
M: Jiri Slaby <jirislaby@gmail.com>
|
M: Jiri Slaby <jirislaby@gmail.com>
|
||||||
M: Nick Kossifidis <mickflemm@gmail.com>
|
M: Nick Kossifidis <mickflemm@gmail.com>
|
||||||
|
@ -1258,6 +1278,15 @@ S: Maintained
|
||||||
F: drivers/video/backlight/
|
F: drivers/video/backlight/
|
||||||
F: include/linux/backlight.h
|
F: include/linux/backlight.h
|
||||||
|
|
||||||
|
BATMAN ADVANCED
|
||||||
|
M: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
M: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
|
||||||
|
M: Sven Eckelmann <sven@narfation.org>
|
||||||
|
L: b.a.t.m.a.n@lists.open-mesh.org
|
||||||
|
W: http://www.open-mesh.org/
|
||||||
|
S: Maintained
|
||||||
|
F: net/batman-adv/
|
||||||
|
|
||||||
BAYCOM/HDLCDRV DRIVERS FOR AX.25
|
BAYCOM/HDLCDRV DRIVERS FOR AX.25
|
||||||
M: Thomas Sailer <t.sailer@alumni.ethz.ch>
|
M: Thomas Sailer <t.sailer@alumni.ethz.ch>
|
||||||
L: linux-hams@vger.kernel.org
|
L: linux-hams@vger.kernel.org
|
||||||
|
@ -2060,7 +2089,7 @@ F: Documentation/blockdev/drbd/
|
||||||
|
|
||||||
DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
|
DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
|
||||||
M: Greg Kroah-Hartman <gregkh@suse.de>
|
M: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/kobject.txt
|
F: Documentation/kobject.txt
|
||||||
F: drivers/base/
|
F: drivers/base/
|
||||||
|
@ -2080,7 +2109,7 @@ F: include/drm/
|
||||||
|
|
||||||
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
|
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
|
||||||
M: Chris Wilson <chris@chris-wilson.co.uk>
|
M: Chris Wilson <chris@chris-wilson.co.uk>
|
||||||
L: intel-gfx@lists.freedesktop.org
|
L: intel-gfx@lists.freedesktop.org (subscribers-only)
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ickle/drm-intel.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ickle/drm-intel.git
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -2797,6 +2826,10 @@ M: Thomas Gleixner <tglx@linutronix.de>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/timers/
|
F: Documentation/timers/
|
||||||
F: kernel/hrtimer.c
|
F: kernel/hrtimer.c
|
||||||
|
F: kernel/time/clockevents.c
|
||||||
|
F: kernel/time/tick*.*
|
||||||
|
F: kernel/time/timer_*.c
|
||||||
|
F include/linux/clockevents.h
|
||||||
F: include/linux/hrtimer.h
|
F: include/linux/hrtimer.h
|
||||||
|
|
||||||
HIGH-SPEED SCC DRIVER FOR AX.25
|
HIGH-SPEED SCC DRIVER FOR AX.25
|
||||||
|
@ -3032,8 +3065,10 @@ F: drivers/input/
|
||||||
INPUT MULTITOUCH (MT) PROTOCOL
|
INPUT MULTITOUCH (MT) PROTOCOL
|
||||||
M: Henrik Rydberg <rydberg@euromail.se>
|
M: Henrik Rydberg <rydberg@euromail.se>
|
||||||
L: linux-input@vger.kernel.org
|
L: linux-input@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/input/multi-touch-protocol.txt
|
F: Documentation/input/multi-touch-protocol.txt
|
||||||
|
F: drivers/input/input-mt.c
|
||||||
K: \b(ABS|SYN)_MT_
|
K: \b(ABS|SYN)_MT_
|
||||||
|
|
||||||
INTEL IDLE DRIVER
|
INTEL IDLE DRIVER
|
||||||
|
@ -3120,6 +3155,8 @@ M: Alex Duyck <alexander.h.duyck@intel.com>
|
||||||
M: John Ronciak <john.ronciak@intel.com>
|
M: John Ronciak <john.ronciak@intel.com>
|
||||||
L: e1000-devel@lists.sourceforge.net
|
L: e1000-devel@lists.sourceforge.net
|
||||||
W: http://e1000.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
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/networking/e100.txt
|
F: Documentation/networking/e100.txt
|
||||||
F: Documentation/networking/e1000.txt
|
F: Documentation/networking/e1000.txt
|
||||||
|
@ -4064,9 +4101,8 @@ F: drivers/scsi/NCR_D700.*
|
||||||
|
|
||||||
NETEFFECT IWARP RNIC DRIVER (IW_NES)
|
NETEFFECT IWARP RNIC DRIVER (IW_NES)
|
||||||
M: Faisal Latif <faisal.latif@intel.com>
|
M: Faisal Latif <faisal.latif@intel.com>
|
||||||
M: Chien Tung <chien.tin.tung@intel.com>
|
|
||||||
L: linux-rdma@vger.kernel.org
|
L: linux-rdma@vger.kernel.org
|
||||||
W: http://www.neteffect.com
|
W: http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/infiniband/hw/nes/
|
F: drivers/infiniband/hw/nes/
|
||||||
|
|
||||||
|
@ -4329,6 +4365,20 @@ M: Deepak Saxena <dsaxena@plexity.net>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/char/hw_random/omap-rng.c
|
F: drivers/char/hw_random/omap-rng.c
|
||||||
|
|
||||||
|
OMAP HWMOD SUPPORT
|
||||||
|
M: Benoît Cousson <b-cousson@ti.com>
|
||||||
|
M: Paul Walmsley <paul@pwsan.com>
|
||||||
|
L: linux-omap@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm/mach-omap2/omap_hwmod.c
|
||||||
|
F: arch/arm/plat-omap/include/plat/omap_hwmod.h
|
||||||
|
|
||||||
|
OMAP HWMOD DATA FOR OMAP4-BASED DEVICES
|
||||||
|
M: Benoît Cousson <b-cousson@ti.com>
|
||||||
|
L: linux-omap@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm/mach-omap2/omap_hwmod_44xx_data.c
|
||||||
|
|
||||||
OMAP USB SUPPORT
|
OMAP USB SUPPORT
|
||||||
M: Felipe Balbi <balbi@ti.com>
|
M: Felipe Balbi <balbi@ti.com>
|
||||||
M: David Brownell <dbrownell@users.sourceforge.net>
|
M: David Brownell <dbrownell@users.sourceforge.net>
|
||||||
|
@ -4591,7 +4641,7 @@ F: drivers/pcmcia/
|
||||||
F: include/pcmcia/
|
F: include/pcmcia/
|
||||||
|
|
||||||
PCNET32 NETWORK DRIVER
|
PCNET32 NETWORK DRIVER
|
||||||
M: Don Fry <pcnet32@verizon.net>
|
M: Don Fry <pcnet32@frontier.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/pcnet32.c
|
F: drivers/net/pcnet32.c
|
||||||
|
@ -4603,6 +4653,16 @@ S: Maintained
|
||||||
F: crypto/pcrypt.c
|
F: crypto/pcrypt.c
|
||||||
F: include/crypto/pcrypt.h
|
F: include/crypto/pcrypt.h
|
||||||
|
|
||||||
|
PER-CPU MEMORY ALLOCATOR
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
M: Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git
|
||||||
|
S: Maintained
|
||||||
|
F: include/linux/percpu*.h
|
||||||
|
F: mm/percpu*.c
|
||||||
|
F: arch/*/include/asm/percpu.h
|
||||||
|
|
||||||
PER-TASK DELAY ACCOUNTING
|
PER-TASK DELAY ACCOUNTING
|
||||||
M: Balbir Singh <balbir@linux.vnet.ibm.com>
|
M: Balbir Singh <balbir@linux.vnet.ibm.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -4613,7 +4673,7 @@ PERFORMANCE EVENTS SUBSYSTEM
|
||||||
M: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
M: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||||
M: Paul Mackerras <paulus@samba.org>
|
M: Paul Mackerras <paulus@samba.org>
|
||||||
M: Ingo Molnar <mingo@elte.hu>
|
M: Ingo Molnar <mingo@elte.hu>
|
||||||
M: Arnaldo Carvalho de Melo <acme@redhat.com>
|
M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: kernel/perf_event*.c
|
F: kernel/perf_event*.c
|
||||||
F: include/linux/perf_event.h
|
F: include/linux/perf_event.h
|
||||||
|
@ -5038,7 +5098,7 @@ L: linux-wireless@vger.kernel.org
|
||||||
W: http://linuxwireless.org/
|
W: http://linuxwireless.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/wireless/rtl818x/rtl8180*
|
F: drivers/net/wireless/rtl818x/rtl8180/
|
||||||
|
|
||||||
RTL8187 WIRELESS DRIVER
|
RTL8187 WIRELESS DRIVER
|
||||||
M: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
|
M: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
|
||||||
|
@ -5048,7 +5108,17 @@ L: linux-wireless@vger.kernel.org
|
||||||
W: http://linuxwireless.org/
|
W: http://linuxwireless.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/wireless/rtl818x/rtl8187*
|
F: drivers/net/wireless/rtl818x/rtl8187/
|
||||||
|
|
||||||
|
RTL8192CE WIRELESS DRIVER
|
||||||
|
M: Larry Finger <Larry.Finger@lwfinger.net>
|
||||||
|
M: Chaoming Li <chaoming_li@realsil.com.cn>
|
||||||
|
L: linux-wireless@vger.kernel.org
|
||||||
|
W: http://linuxwireless.org/
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/net/wireless/rtlwifi/
|
||||||
|
F: drivers/net/wireless/rtlwifi/rtl8192ce/
|
||||||
|
|
||||||
S3 SAVAGE FRAMEBUFFER DRIVER
|
S3 SAVAGE FRAMEBUFFER DRIVER
|
||||||
M: Antonino Daplas <adaplas@gmail.com>
|
M: Antonino Daplas <adaplas@gmail.com>
|
||||||
|
@ -5128,6 +5198,18 @@ L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: sound/soc/s3c24xx
|
F: sound/soc/s3c24xx
|
||||||
|
|
||||||
|
TIMEKEEPING, NTP
|
||||||
|
M: John Stultz <johnstul@us.ibm.com>
|
||||||
|
M: Thomas Gleixner <tglx@linutronix.de>
|
||||||
|
S: Supported
|
||||||
|
F: include/linux/clocksource.h
|
||||||
|
F: include/linux/time.h
|
||||||
|
F: include/linux/timex.h
|
||||||
|
F: include/linux/timekeeping.h
|
||||||
|
F: kernel/time/clocksource.c
|
||||||
|
F: kernel/time/time*.c
|
||||||
|
F: kernel/time/ntp.c
|
||||||
|
|
||||||
TLG2300 VIDEO4LINUX-2 DRIVER
|
TLG2300 VIDEO4LINUX-2 DRIVER
|
||||||
M: Huang Shijie <shijie8@gmail.com>
|
M: Huang Shijie <shijie8@gmail.com>
|
||||||
M: Kang Yong <kangyong@telegent.com>
|
M: Kang Yong <kangyong@telegent.com>
|
||||||
|
@ -5698,12 +5780,6 @@ M: Ion Badulescu <ionut@badula.org>
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: drivers/net/starfire*
|
F: drivers/net/starfire*
|
||||||
|
|
||||||
STRADIS MPEG-2 DECODER DRIVER
|
|
||||||
M: Nathan Laredo <laredo@gnu.org>
|
|
||||||
W: http://www.stradis.com/
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/media/video/stradis.c
|
|
||||||
|
|
||||||
SUN3/3X
|
SUN3/3X
|
||||||
M: Sam Creasey <sammy@sammy.net>
|
M: Sam Creasey <sammy@sammy.net>
|
||||||
W: http://sammy.net/sun3/
|
W: http://sammy.net/sun3/
|
||||||
|
@ -5934,7 +6010,6 @@ F: include/linux/tty.h
|
||||||
|
|
||||||
TULIP NETWORK DRIVERS
|
TULIP NETWORK DRIVERS
|
||||||
M: Grant Grundler <grundler@parisc-linux.org>
|
M: Grant Grundler <grundler@parisc-linux.org>
|
||||||
M: Kyle McMartin <kyle@mcmartin.ca>
|
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/tulip/
|
F: drivers/net/tulip/
|
||||||
|
@ -6586,6 +6661,15 @@ F: include/linux/mfd/wm8400*
|
||||||
F: include/sound/wm????.h
|
F: include/sound/wm????.h
|
||||||
F: sound/soc/codecs/wm*
|
F: sound/soc/codecs/wm*
|
||||||
|
|
||||||
|
WORKQUEUE
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git
|
||||||
|
S: Maintained
|
||||||
|
F: include/linux/workqueue.h
|
||||||
|
F: kernel/workqueue.c
|
||||||
|
F: Documentation/workqueue.txt
|
||||||
|
|
||||||
X.25 NETWORK LAYER
|
X.25 NETWORK LAYER
|
||||||
M: Andrew Hendry <andrew.hendry@gmail.com>
|
M: Andrew Hendry <andrew.hendry@gmail.com>
|
||||||
L: linux-x25@vger.kernel.org
|
L: linux-x25@vger.kernel.org
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 37
|
SUBLEVEL = 37
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION =
|
||||||
NAME = Flesh-Eating Bats with Fangs
|
NAME = Flesh-Eating Bats with Fangs
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -175,4 +175,7 @@ config HAVE_PERF_EVENTS_NMI
|
||||||
config HAVE_ARCH_JUMP_LABEL
|
config HAVE_ARCH_JUMP_LABEL
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config HAVE_ARCH_MUTEX_CPU_RELAX
|
||||||
|
bool
|
||||||
|
|
||||||
source "kernel/gcov/Kconfig"
|
source "kernel/gcov/Kconfig"
|
||||||
|
|
|
@ -92,6 +92,7 @@
|
||||||
#define TIOCGSID 0x5429 /* Return the session ID of FD */
|
#define TIOCGSID 0x5429 /* Return the session ID of FD */
|
||||||
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
|
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
|
||||||
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
|
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
|
||||||
|
#define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
|
||||||
#define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
|
#define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
|
||||||
|
|
||||||
#define TIOCSERCONFIG 0x5453
|
#define TIOCSERCONFIG 0x5453
|
||||||
|
|
|
@ -1,10 +1,4 @@
|
||||||
#ifndef __ASM_ALPHA_PERF_EVENT_H
|
#ifndef __ASM_ALPHA_PERF_EVENT_H
|
||||||
#define __ASM_ALPHA_PERF_EVENT_H
|
#define __ASM_ALPHA_PERF_EVENT_H
|
||||||
|
|
||||||
#ifdef CONFIG_PERF_EVENTS
|
|
||||||
extern void init_hw_perf_events(void);
|
|
||||||
#else
|
|
||||||
static inline void init_hw_perf_events(void) { }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __ASM_ALPHA_PERF_EVENT_H */
|
#endif /* __ASM_ALPHA_PERF_EVENT_H */
|
||||||
|
|
|
@ -112,8 +112,6 @@ init_IRQ(void)
|
||||||
wrent(entInt, 0);
|
wrent(entInt, 0);
|
||||||
|
|
||||||
alpha_mv.init_irq();
|
alpha_mv.init_irq();
|
||||||
|
|
||||||
init_hw_perf_events();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
|
||||||
#include <asm/hwrpb.h>
|
#include <asm/hwrpb.h>
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
|
@ -863,13 +864,13 @@ static void alpha_perf_event_irq_handler(unsigned long la_ptr,
|
||||||
/*
|
/*
|
||||||
* Init call to initialise performance events at kernel startup.
|
* Init call to initialise performance events at kernel startup.
|
||||||
*/
|
*/
|
||||||
void __init init_hw_perf_events(void)
|
int __init init_hw_perf_events(void)
|
||||||
{
|
{
|
||||||
pr_info("Performance events: ");
|
pr_info("Performance events: ");
|
||||||
|
|
||||||
if (!supported_cpu()) {
|
if (!supported_cpu()) {
|
||||||
pr_cont("No support for your CPU.\n");
|
pr_cont("No support for your CPU.\n");
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_cont("Supported CPU type!\n");
|
pr_cont("Supported CPU type!\n");
|
||||||
|
@ -881,6 +882,8 @@ void __init init_hw_perf_events(void)
|
||||||
/* And set up PMU specification */
|
/* And set up PMU specification */
|
||||||
alpha_pmu = &ev67_pmu;
|
alpha_pmu = &ev67_pmu;
|
||||||
|
|
||||||
perf_pmu_register(&pmu);
|
perf_pmu_register(&pmu, "cpu", PERF_TYPE_RAW);
|
||||||
}
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
early_initcall(init_hw_perf_events);
|
||||||
|
|
142
arch/arm/Kconfig
142
arch/arm/Kconfig
|
@ -2,6 +2,7 @@ config ARM
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
select HAVE_AOUT
|
select HAVE_AOUT
|
||||||
|
select HAVE_DMA_API_DEBUG
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_MEMBLOCK
|
select HAVE_MEMBLOCK
|
||||||
select RTC_LIB
|
select RTC_LIB
|
||||||
|
@ -9,11 +10,12 @@ config ARM
|
||||||
select GENERIC_ATOMIC64 if (!CPU_32v6K || !AEABI)
|
select GENERIC_ATOMIC64 if (!CPU_32v6K || !AEABI)
|
||||||
select HAVE_OPROFILE if (HAVE_PERF_EVENTS)
|
select HAVE_OPROFILE if (HAVE_PERF_EVENTS)
|
||||||
select HAVE_ARCH_KGDB
|
select HAVE_ARCH_KGDB
|
||||||
select HAVE_KPROBES if (!XIP_KERNEL)
|
select HAVE_KPROBES if (!XIP_KERNEL && !THUMB2_KERNEL)
|
||||||
select HAVE_KRETPROBES if (HAVE_KPROBES)
|
select HAVE_KRETPROBES if (HAVE_KPROBES)
|
||||||
select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
|
select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
|
||||||
select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
|
select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
|
||||||
select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL)
|
select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL)
|
||||||
|
select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
|
||||||
select HAVE_GENERIC_DMA_COHERENT
|
select HAVE_GENERIC_DMA_COHERENT
|
||||||
select HAVE_KERNEL_GZIP
|
select HAVE_KERNEL_GZIP
|
||||||
select HAVE_KERNEL_LZO
|
select HAVE_KERNEL_LZO
|
||||||
|
@ -23,6 +25,7 @@ config ARM
|
||||||
select PERF_USE_VMALLOC
|
select PERF_USE_VMALLOC
|
||||||
select HAVE_REGS_AND_STACK_ACCESS_API
|
select HAVE_REGS_AND_STACK_ACCESS_API
|
||||||
select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7))
|
select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7))
|
||||||
|
select HAVE_C_RECORDMCOUNT
|
||||||
help
|
help
|
||||||
The ARM series is a line of low-power-consumption RISC chip designs
|
The ARM series is a line of low-power-consumption RISC chip designs
|
||||||
licensed by ARM Ltd and targeted at embedded applications and
|
licensed by ARM Ltd and targeted at embedded applications and
|
||||||
|
@ -34,9 +37,15 @@ config ARM
|
||||||
config HAVE_PWM
|
config HAVE_PWM
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config MIGHT_HAVE_PCI
|
||||||
|
bool
|
||||||
|
|
||||||
config SYS_SUPPORTS_APM_EMULATION
|
config SYS_SUPPORTS_APM_EMULATION
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config HAVE_SCHED_CLOCK
|
||||||
|
bool
|
||||||
|
|
||||||
config GENERIC_GPIO
|
config GENERIC_GPIO
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
@ -221,7 +230,7 @@ config ARCH_INTEGRATOR
|
||||||
bool "ARM Ltd. Integrator family"
|
bool "ARM Ltd. Integrator family"
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARCH_HAS_CPUFREQ
|
select ARCH_HAS_CPUFREQ
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select ICST
|
select ICST
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select PLAT_VERSATILE
|
select PLAT_VERSATILE
|
||||||
|
@ -231,7 +240,8 @@ config ARCH_INTEGRATOR
|
||||||
config ARCH_REALVIEW
|
config ARCH_REALVIEW
|
||||||
bool "ARM Ltd. RealView family"
|
bool "ARM Ltd. RealView family"
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select ICST
|
select ICST
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
|
@ -245,7 +255,8 @@ config ARCH_VERSATILE
|
||||||
bool "ARM Ltd. Versatile family"
|
bool "ARM Ltd. Versatile family"
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_VIC
|
select ARM_VIC
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select ICST
|
select ICST
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
|
@ -259,9 +270,10 @@ config ARCH_VEXPRESS
|
||||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_TIMER_SP804
|
select ARM_TIMER_SP804
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select ICST
|
select ICST
|
||||||
select PLAT_VERSATILE
|
select PLAT_VERSATILE
|
||||||
help
|
help
|
||||||
|
@ -280,7 +292,7 @@ config ARCH_BCMRING
|
||||||
depends on MMU
|
depends on MMU
|
||||||
select CPU_V6
|
select CPU_V6
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
help
|
help
|
||||||
|
@ -298,6 +310,7 @@ config ARCH_CNS3XXX
|
||||||
select CPU_V6
|
select CPU_V6
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select ARM_GIC
|
select ARM_GIC
|
||||||
|
select MIGHT_HAVE_PCI
|
||||||
select PCI_DOMAINS if PCI
|
select PCI_DOMAINS if PCI
|
||||||
help
|
help
|
||||||
Support for Cavium Networks CNS3XXX platform.
|
Support for Cavium Networks CNS3XXX platform.
|
||||||
|
@ -327,7 +340,7 @@ config ARCH_EP93XX
|
||||||
select CPU_ARM920T
|
select CPU_ARM920T
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_VIC
|
select ARM_VIC
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
|
@ -347,14 +360,22 @@ config ARCH_MXC
|
||||||
bool "Freescale MXC/iMX-based"
|
bool "Freescale MXC/iMX-based"
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
help
|
help
|
||||||
Support for Freescale MXC/iMX-based family of processors
|
Support for Freescale MXC/iMX-based family of processors
|
||||||
|
|
||||||
|
config ARCH_MXS
|
||||||
|
bool "Freescale MXS-based"
|
||||||
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select COMMON_CLKDEV
|
||||||
|
help
|
||||||
|
Support for Freescale MXS-based family of processors
|
||||||
|
|
||||||
config ARCH_STMP3XXX
|
config ARCH_STMP3XXX
|
||||||
bool "Freescale STMP3xxx"
|
bool "Freescale STMP3xxx"
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select USB_ARCH_HAS_EHCI
|
select USB_ARCH_HAS_EHCI
|
||||||
|
@ -433,6 +454,8 @@ config ARCH_IXP4XX
|
||||||
select CPU_XSCALE
|
select CPU_XSCALE
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
|
select MIGHT_HAVE_PCI
|
||||||
select DMABOUNCE if PCI
|
select DMABOUNCE if PCI
|
||||||
help
|
help
|
||||||
Support for Intel's IXP4XX (XScale) family of processors.
|
Support for Intel's IXP4XX (XScale) family of processors.
|
||||||
|
@ -472,7 +495,7 @@ config ARCH_LPC32XX
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select USB_ARCH_HAS_OHCI
|
select USB_ARCH_HAS_OHCI
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
help
|
help
|
||||||
|
@ -506,8 +529,9 @@ config ARCH_MMP
|
||||||
bool "Marvell PXA168/910/MMP2"
|
bool "Marvell PXA168/910/MMP2"
|
||||||
depends on MMU
|
depends on MMU
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select TICK_ONESHOT
|
select TICK_ONESHOT
|
||||||
select PLAT_PXA
|
select PLAT_PXA
|
||||||
select SPARSE_IRQ
|
select SPARSE_IRQ
|
||||||
|
@ -539,7 +563,7 @@ config ARCH_W90X900
|
||||||
bool "Nuvoton W90X900 CPU"
|
bool "Nuvoton W90X900 CPU"
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
help
|
help
|
||||||
Support for Nuvoton (Winbond logic dept.) ARM9 processor,
|
Support for Nuvoton (Winbond logic dept.) ARM9 processor,
|
||||||
|
@ -553,18 +577,19 @@ config ARCH_W90X900
|
||||||
config ARCH_NUC93X
|
config ARCH_NUC93X
|
||||||
bool "Nuvoton NUC93X CPU"
|
bool "Nuvoton NUC93X CPU"
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
help
|
help
|
||||||
Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a
|
Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a
|
||||||
low-power and high performance MPEG-4/JPEG multimedia controller chip.
|
low-power and high performance MPEG-4/JPEG multimedia controller chip.
|
||||||
|
|
||||||
config ARCH_TEGRA
|
config ARCH_TEGRA
|
||||||
bool "NVIDIA Tegra"
|
bool "NVIDIA Tegra"
|
||||||
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select COMMON_CLKDEV
|
select HAVE_SCHED_CLOCK
|
||||||
select ARCH_HAS_BARRIERS if CACHE_L2X0
|
select ARCH_HAS_BARRIERS if CACHE_L2X0
|
||||||
select ARCH_HAS_CPUFREQ
|
select ARCH_HAS_CPUFREQ
|
||||||
help
|
help
|
||||||
|
@ -574,7 +599,7 @@ config ARCH_TEGRA
|
||||||
config ARCH_PNX4008
|
config ARCH_PNX4008
|
||||||
bool "Philips Nexperia PNX4008 Mobile"
|
bool "Philips Nexperia PNX4008 Mobile"
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
help
|
help
|
||||||
This enables support for Philips PNX4008 mobile platform.
|
This enables support for Philips PNX4008 mobile platform.
|
||||||
|
@ -584,9 +609,10 @@ config ARCH_PXA
|
||||||
depends on MMU
|
depends on MMU
|
||||||
select ARCH_MTD_XIP
|
select ARCH_MTD_XIP
|
||||||
select ARCH_HAS_CPUFREQ
|
select ARCH_HAS_CPUFREQ
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select TICK_ONESHOT
|
select TICK_ONESHOT
|
||||||
select PLAT_PXA
|
select PLAT_PXA
|
||||||
select SPARSE_IRQ
|
select SPARSE_IRQ
|
||||||
|
@ -606,9 +632,15 @@ config ARCH_MSM
|
||||||
(clock and power control, etc).
|
(clock and power control, etc).
|
||||||
|
|
||||||
config ARCH_SHMOBILE
|
config ARCH_SHMOBILE
|
||||||
bool "Renesas SH-Mobile"
|
bool "Renesas SH-Mobile / R-Mobile"
|
||||||
|
select HAVE_CLK
|
||||||
|
select CLKDEV_LOOKUP
|
||||||
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select NO_IOPORT
|
||||||
|
select SPARSE_IRQ
|
||||||
|
select MULTI_IRQ_HANDLER
|
||||||
help
|
help
|
||||||
Support for Renesas's SH-Mobile ARM platforms
|
Support for Renesas's SH-Mobile and R-Mobile ARM platforms.
|
||||||
|
|
||||||
config ARCH_RPC
|
config ARCH_RPC
|
||||||
bool "RiscPC"
|
bool "RiscPC"
|
||||||
|
@ -635,6 +667,7 @@ config ARCH_SA1100
|
||||||
select CPU_FREQ
|
select CPU_FREQ
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select TICK_ONESHOT
|
select TICK_ONESHOT
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
help
|
help
|
||||||
|
@ -761,7 +794,7 @@ config ARCH_TCC_926
|
||||||
bool "Telechips TCC ARM926-based systems"
|
bool "Telechips TCC ARM926-based systems"
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
help
|
help
|
||||||
Support for Telechips TCC ARM926-based systems.
|
Support for Telechips TCC ARM926-based systems.
|
||||||
|
@ -781,11 +814,12 @@ config ARCH_U300
|
||||||
bool "ST-Ericsson U300 Series"
|
bool "ST-Ericsson U300 Series"
|
||||||
depends on MMU
|
depends on MMU
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select HAVE_TCM
|
select HAVE_TCM
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_VIC
|
select ARM_VIC
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
help
|
help
|
||||||
Support for ST-Ericsson U300 series mobile platforms.
|
Support for ST-Ericsson U300 series mobile platforms.
|
||||||
|
@ -795,8 +829,9 @@ config ARCH_U8500
|
||||||
select CPU_V7
|
select CPU_V7
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select ARCH_HAS_CPUFREQ
|
||||||
help
|
help
|
||||||
Support for ST-Ericsson's Ux500 architecture
|
Support for ST-Ericsson's Ux500 architecture
|
||||||
|
|
||||||
|
@ -805,7 +840,7 @@ config ARCH_NOMADIK
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_VIC
|
select ARM_VIC
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
help
|
help
|
||||||
|
@ -817,7 +852,7 @@ config ARCH_DAVINCI
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select ZONE_DMA
|
select ZONE_DMA
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_ALLOCATOR
|
select GENERIC_ALLOCATOR
|
||||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||||
help
|
help
|
||||||
|
@ -829,6 +864,7 @@ config ARCH_OMAP
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select ARCH_HAS_CPUFREQ
|
select ARCH_HAS_CPUFREQ
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||||
help
|
help
|
||||||
Support for TI's OMAP platform (OMAP1/2/3/4).
|
Support for TI's OMAP platform (OMAP1/2/3/4).
|
||||||
|
@ -837,7 +873,7 @@ config PLAT_SPEAR
|
||||||
bool "ST SPEAr"
|
bool "ST SPEAr"
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select COMMON_CLKDEV
|
select CLKDEV_LOOKUP
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
help
|
help
|
||||||
|
@ -902,6 +938,8 @@ source "arch/arm/mach-mv78xx0/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/plat-mxc/Kconfig"
|
source "arch/arm/plat-mxc/Kconfig"
|
||||||
|
|
||||||
|
source "arch/arm/mach-mxs/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-netx/Kconfig"
|
source "arch/arm/mach-netx/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-nomadik/Kconfig"
|
source "arch/arm/mach-nomadik/Kconfig"
|
||||||
|
@ -982,9 +1020,11 @@ config ARCH_ACORN
|
||||||
config PLAT_IOP
|
config PLAT_IOP
|
||||||
bool
|
bool
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
|
|
||||||
config PLAT_ORION
|
config PLAT_ORION
|
||||||
bool
|
bool
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
|
|
||||||
config PLAT_PXA
|
config PLAT_PXA
|
||||||
bool
|
bool
|
||||||
|
@ -999,8 +1039,8 @@ source arch/arm/mm/Kconfig
|
||||||
|
|
||||||
config IWMMXT
|
config IWMMXT
|
||||||
bool "Enable iWMMXt support"
|
bool "Enable iWMMXt support"
|
||||||
depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK
|
depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4
|
||||||
default y if PXA27x || PXA3xx || ARCH_MMP
|
default y if PXA27x || PXA3xx || PXA95x || ARCH_MMP
|
||||||
help
|
help
|
||||||
Enable support for iWMMXt context switching at run time if
|
Enable support for iWMMXt context switching at run time if
|
||||||
running on a CPU that supports it.
|
running on a CPU that supports it.
|
||||||
|
@ -1017,6 +1057,11 @@ config CPU_HAS_PMU
|
||||||
default y
|
default y
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config MULTI_IRQ_HANDLER
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
Allow each machine to specify it's own IRQ handler at run time.
|
||||||
|
|
||||||
if !MMU
|
if !MMU
|
||||||
source "arch/arm/Kconfig-nommu"
|
source "arch/arm/Kconfig-nommu"
|
||||||
endif
|
endif
|
||||||
|
@ -1164,7 +1209,7 @@ config ISA_DMA_API
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config PCI
|
config PCI
|
||||||
bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE || ARCH_CNS3XXX
|
bool "PCI support" if MIGHT_HAVE_PCI
|
||||||
help
|
help
|
||||||
Find out whether you have a PCI motherboard. PCI is the name of a
|
Find out whether you have a PCI motherboard. PCI is the name of a
|
||||||
bus system, i.e. the way the CPU talks to the other stuff inside
|
bus system, i.e. the way the CPU talks to the other stuff inside
|
||||||
|
@ -1175,6 +1220,12 @@ config PCI_DOMAINS
|
||||||
bool
|
bool
|
||||||
depends on PCI
|
depends on PCI
|
||||||
|
|
||||||
|
config PCI_NANOENGINE
|
||||||
|
bool "BSE nanoEngine PCI support"
|
||||||
|
depends on SA1100_NANOENGINE
|
||||||
|
help
|
||||||
|
Enable PCI on the BSE nanoEngine board.
|
||||||
|
|
||||||
config PCI_SYSCALL
|
config PCI_SYSCALL
|
||||||
def_bool PCI
|
def_bool PCI
|
||||||
|
|
||||||
|
@ -1205,10 +1256,11 @@ config SMP
|
||||||
depends on EXPERIMENTAL
|
depends on EXPERIMENTAL
|
||||||
depends on GENERIC_CLOCKEVENTS
|
depends on GENERIC_CLOCKEVENTS
|
||||||
depends on REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP || \
|
depends on REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP || \
|
||||||
MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
|
MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
|
||||||
ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4
|
ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || \
|
||||||
|
ARCH_MSM_SCORPIONMP || ARCH_SHMOBILE
|
||||||
select USE_GENERIC_SMP_HELPERS
|
select USE_GENERIC_SMP_HELPERS
|
||||||
select HAVE_ARM_SCU
|
select HAVE_ARM_SCU if !ARCH_MSM_SCORPIONMP
|
||||||
help
|
help
|
||||||
This enables support for systems with more than one CPU. If you have
|
This enables support for systems with more than one CPU. If you have
|
||||||
a system with only one CPU, like most personal computers, say N. If
|
a system with only one CPU, like most personal computers, say N. If
|
||||||
|
@ -1229,7 +1281,7 @@ config SMP
|
||||||
config SMP_ON_UP
|
config SMP_ON_UP
|
||||||
bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
|
bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL
|
depends on EXPERIMENTAL
|
||||||
depends on SMP && !XIP && !THUMB2_KERNEL
|
depends on SMP && !XIP
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
SMP kernels contain instructions which fail on non-SMP processors.
|
SMP kernels contain instructions which fail on non-SMP processors.
|
||||||
|
@ -1248,6 +1300,7 @@ config HAVE_ARM_SCU
|
||||||
config HAVE_ARM_TWD
|
config HAVE_ARM_TWD
|
||||||
bool
|
bool
|
||||||
depends on SMP
|
depends on SMP
|
||||||
|
select TICK_ONESHOT
|
||||||
help
|
help
|
||||||
This options enables support for the ARM timer and watchdog unit
|
This options enables support for the ARM timer and watchdog unit
|
||||||
|
|
||||||
|
@ -1283,6 +1336,7 @@ config NR_CPUS
|
||||||
config HOTPLUG_CPU
|
config HOTPLUG_CPU
|
||||||
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
|
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
|
||||||
depends on SMP && HOTPLUG && EXPERIMENTAL
|
depends on SMP && HOTPLUG && EXPERIMENTAL
|
||||||
|
depends on !ARCH_MSM
|
||||||
help
|
help
|
||||||
Say Y here to experiment with turning CPUs off and on. CPUs
|
Say Y here to experiment with turning CPUs off and on. CPUs
|
||||||
can be controlled through /sys/devices/system/cpu.
|
can be controlled through /sys/devices/system/cpu.
|
||||||
|
@ -1291,7 +1345,7 @@ config LOCAL_TIMERS
|
||||||
bool "Use local timer interrupts"
|
bool "Use local timer interrupts"
|
||||||
depends on SMP
|
depends on SMP
|
||||||
default y
|
default y
|
||||||
select HAVE_ARM_TWD
|
select HAVE_ARM_TWD if !ARCH_MSM_SCORPIONMP
|
||||||
help
|
help
|
||||||
Enable support for local timers on SMP platforms, rather then the
|
Enable support for local timers on SMP platforms, rather then the
|
||||||
legacy IPI broadcast method. Local timers allows the system
|
legacy IPI broadcast method. Local timers allows the system
|
||||||
|
@ -1310,8 +1364,8 @@ config HZ
|
||||||
default 100
|
default 100
|
||||||
|
|
||||||
config THUMB2_KERNEL
|
config THUMB2_KERNEL
|
||||||
bool "Compile the kernel in Thumb-2 mode"
|
bool "Compile the kernel in Thumb-2 mode (EXPERIMENTAL)"
|
||||||
depends on CPU_V7 && EXPERIMENTAL
|
depends on CPU_V7 && !CPU_V6 && EXPERIMENTAL
|
||||||
select AEABI
|
select AEABI
|
||||||
select ARM_ASM_UNIFIED
|
select ARM_ASM_UNIFIED
|
||||||
help
|
help
|
||||||
|
@ -1524,6 +1578,7 @@ config SECCOMP
|
||||||
|
|
||||||
config CC_STACKPROTECTOR
|
config CC_STACKPROTECTOR
|
||||||
bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
|
bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
|
||||||
|
depends on EXPERIMENTAL
|
||||||
help
|
help
|
||||||
This option turns on the -fstack-protector GCC feature. This
|
This option turns on the -fstack-protector GCC feature. This
|
||||||
feature puts, at the beginning of functions, a canary value on
|
feature puts, at the beginning of functions, a canary value on
|
||||||
|
@ -1650,6 +1705,19 @@ config ATAGS_PROC
|
||||||
Should the atags used to boot the kernel be exported in an "atags"
|
Should the atags used to boot the kernel be exported in an "atags"
|
||||||
file in procfs. Useful with kexec.
|
file in procfs. Useful with kexec.
|
||||||
|
|
||||||
|
config CRASH_DUMP
|
||||||
|
bool "Build kdump crash kernel (EXPERIMENTAL)"
|
||||||
|
depends on EXPERIMENTAL
|
||||||
|
help
|
||||||
|
Generate crash dump after being started by kexec. This should
|
||||||
|
be normally only set in special crash dump kernels which are
|
||||||
|
loaded in the main kernel with kexec-tools into a specially
|
||||||
|
reserved region and then later executed after a crash by
|
||||||
|
kdump/kexec. The crash dump kernel must be compiled to a
|
||||||
|
memory address not used by the main kernel
|
||||||
|
|
||||||
|
For more details see Documentation/kdump/kdump.txt
|
||||||
|
|
||||||
config AUTO_ZRELADDR
|
config AUTO_ZRELADDR
|
||||||
bool "Auto calculation of the decompressed kernel image address"
|
bool "Auto calculation of the decompressed kernel image address"
|
||||||
depends on !ZBOOT_ROM && !ARCH_U300
|
depends on !ZBOOT_ROM && !ARCH_U300
|
||||||
|
@ -1707,7 +1775,7 @@ config CPU_FREQ_S3C
|
||||||
Internal configuration node for common cpufreq on Samsung SoC
|
Internal configuration node for common cpufreq on Samsung SoC
|
||||||
|
|
||||||
config CPU_FREQ_S3C24XX
|
config CPU_FREQ_S3C24XX
|
||||||
bool "CPUfreq driver for Samsung S3C24XX series CPUs"
|
bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
|
||||||
depends on ARCH_S3C2410 && CPU_FREQ && EXPERIMENTAL
|
depends on ARCH_S3C2410 && CPU_FREQ && EXPERIMENTAL
|
||||||
select CPU_FREQ_S3C
|
select CPU_FREQ_S3C
|
||||||
help
|
help
|
||||||
|
@ -1719,7 +1787,7 @@ config CPU_FREQ_S3C24XX
|
||||||
If in doubt, say N.
|
If in doubt, say N.
|
||||||
|
|
||||||
config CPU_FREQ_S3C24XX_PLL
|
config CPU_FREQ_S3C24XX_PLL
|
||||||
bool "Support CPUfreq changing of PLL frequency"
|
bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)"
|
||||||
depends on CPU_FREQ_S3C24XX && EXPERIMENTAL
|
depends on CPU_FREQ_S3C24XX && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
Compile in support for changing the PLL frequency from the
|
Compile in support for changing the PLL frequency from the
|
||||||
|
@ -1759,7 +1827,7 @@ comment "At least one emulation must be selected"
|
||||||
|
|
||||||
config FPE_NWFPE
|
config FPE_NWFPE
|
||||||
bool "NWFPE math emulation"
|
bool "NWFPE math emulation"
|
||||||
depends on !AEABI || OABI_COMPAT
|
depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL
|
||||||
---help---
|
---help---
|
||||||
Say Y to include the NWFPE floating point emulator in the kernel.
|
Say Y to include the NWFPE floating point emulator in the kernel.
|
||||||
This is necessary to run most binaries. Linux does not currently
|
This is necessary to run most binaries. Linux does not currently
|
||||||
|
|
|
@ -23,7 +23,7 @@ config STRICT_DEVMEM
|
||||||
config FRAME_POINTER
|
config FRAME_POINTER
|
||||||
bool
|
bool
|
||||||
depends on !THUMB2_KERNEL
|
depends on !THUMB2_KERNEL
|
||||||
default y if !ARM_UNWIND
|
default y if !ARM_UNWIND || FUNCTION_GRAPH_TRACER
|
||||||
help
|
help
|
||||||
If you say N here, the resulting kernel will be slightly smaller and
|
If you say N here, the resulting kernel will be slightly smaller and
|
||||||
faster. However, if neither FRAME_POINTER nor ARM_UNWIND are enabled,
|
faster. However, if neither FRAME_POINTER nor ARM_UNWIND are enabled,
|
||||||
|
@ -31,7 +31,7 @@ config FRAME_POINTER
|
||||||
reported is severely limited.
|
reported is severely limited.
|
||||||
|
|
||||||
config ARM_UNWIND
|
config ARM_UNWIND
|
||||||
bool "Enable stack unwinding support"
|
bool "Enable stack unwinding support (EXPERIMENTAL)"
|
||||||
depends on AEABI && EXPERIMENTAL
|
depends on AEABI && EXPERIMENTAL
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
|
|
|
@ -154,10 +154,11 @@ machine-$(CONFIG_ARCH_MSM) := msm
|
||||||
machine-$(CONFIG_ARCH_MV78XX0) := mv78xx0
|
machine-$(CONFIG_ARCH_MV78XX0) := mv78xx0
|
||||||
machine-$(CONFIG_ARCH_MX1) := imx
|
machine-$(CONFIG_ARCH_MX1) := imx
|
||||||
machine-$(CONFIG_ARCH_MX2) := imx
|
machine-$(CONFIG_ARCH_MX2) := imx
|
||||||
machine-$(CONFIG_ARCH_MX25) := mx25
|
machine-$(CONFIG_ARCH_MX25) := imx
|
||||||
machine-$(CONFIG_ARCH_MX3) := mx3
|
machine-$(CONFIG_ARCH_MX3) := mx3
|
||||||
machine-$(CONFIG_ARCH_MX5) := mx5
|
machine-$(CONFIG_ARCH_MX5) := mx5
|
||||||
machine-$(CONFIG_ARCH_MXC91231) := mxc91231
|
machine-$(CONFIG_ARCH_MXC91231) := mxc91231
|
||||||
|
machine-$(CONFIG_ARCH_MXS) := mxs
|
||||||
machine-$(CONFIG_ARCH_NETX) := netx
|
machine-$(CONFIG_ARCH_NETX) := netx
|
||||||
machine-$(CONFIG_ARCH_NOMADIK) := nomadik
|
machine-$(CONFIG_ARCH_NOMADIK) := nomadik
|
||||||
machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx
|
machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx
|
||||||
|
|
|
@ -70,12 +70,7 @@ else
|
||||||
$(obj)/uImage: LOADADDR=$(ZRELADDR)
|
$(obj)/uImage: LOADADDR=$(ZRELADDR)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
|
||||||
# Set bit 0 to 1 so that "mov pc, rx" switches to Thumb-2 mode
|
|
||||||
$(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed -e "s/.$$/1/")
|
|
||||||
else
|
|
||||||
$(obj)/uImage: STARTADDR=$(LOADADDR)
|
$(obj)/uImage: STARTADDR=$(LOADADDR)
|
||||||
endif
|
|
||||||
|
|
||||||
$(obj)/uImage: $(obj)/zImage FORCE
|
$(obj)/uImage: $(obj)/zImage FORCE
|
||||||
$(call if_changed,uimage)
|
$(call if_changed,uimage)
|
||||||
|
|
|
@ -73,6 +73,8 @@ move: ldmia r4!, {r7 - r10} @ move 32-bytes at a time
|
||||||
|
|
||||||
.size _start, . - _start
|
.size _start, . - _start
|
||||||
|
|
||||||
|
.align
|
||||||
|
|
||||||
.type data,#object
|
.type data,#object
|
||||||
data: .word initrd_start @ source initrd address
|
data: .word initrd_start @ source initrd address
|
||||||
.word initrd_phys @ destination initrd address
|
.word initrd_phys @ destination initrd address
|
||||||
|
|
|
@ -45,6 +45,10 @@ else
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_SHMOBILE),y)
|
||||||
|
OBJS += head-shmobile.o
|
||||||
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# We now have a PIC decompressor implementation. Decompressors running
|
# We now have a PIC decompressor implementation. Decompressors running
|
||||||
# from RAM should not define ZTEXTADDR. Decompressors running directly
|
# from RAM should not define ZTEXTADDR. Decompressors running directly
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* The head-file for SH-Mobile ARM platforms
|
||||||
|
*
|
||||||
|
* Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||||
|
* Simon Horman <horms@verge.net.au>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_ZBOOT_ROM
|
||||||
|
|
||||||
|
.section ".start", "ax"
|
||||||
|
|
||||||
|
/* load board-specific initialization code */
|
||||||
|
#include <mach/zboot.h>
|
||||||
|
|
||||||
|
b 1f
|
||||||
|
__atags:@ tag #1
|
||||||
|
.long 12 @ tag->hdr.size = tag_size(tag_core);
|
||||||
|
.long 0x54410001 @ tag->hdr.tag = ATAG_CORE;
|
||||||
|
.long 0 @ tag->u.core.flags = 0;
|
||||||
|
.long 0 @ tag->u.core.pagesize = 0;
|
||||||
|
.long 0 @ tag->u.core.rootdev = 0;
|
||||||
|
@ tag #2
|
||||||
|
.long 8 @ tag->hdr.size = tag_size(tag_mem32);
|
||||||
|
.long 0x54410002 @ tag->hdr.tag = ATAG_MEM;
|
||||||
|
.long CONFIG_MEMORY_SIZE @ tag->u.mem.size = CONFIG_MEMORY_SIZE;
|
||||||
|
.long CONFIG_MEMORY_START @ @ tag->u.mem.start = CONFIG_MEMORY_START;
|
||||||
|
@ tag #3
|
||||||
|
.long 0 @ tag->hdr.size = 0
|
||||||
|
.long 0 @ tag->hdr.tag = ATAG_NONE;
|
||||||
|
1:
|
||||||
|
|
||||||
|
/* Set board ID necessary for boot */
|
||||||
|
ldr r7, 1f @ Set machine type register
|
||||||
|
adr r8, __atags @ Set atag register
|
||||||
|
b 2f
|
||||||
|
|
||||||
|
1 : .long MACH_TYPE
|
||||||
|
2 :
|
||||||
|
|
||||||
|
#endif /* CONFIG_ZBOOT_ROM */
|
|
@ -125,9 +125,13 @@ wait: mrc p14, 0, pc, c0, c1, 0
|
||||||
* sort out different calling conventions
|
* sort out different calling conventions
|
||||||
*/
|
*/
|
||||||
.align
|
.align
|
||||||
|
.arm @ Always enter in ARM state
|
||||||
start:
|
start:
|
||||||
.type start,#function
|
.type start,#function
|
||||||
.rept 8
|
THUMB( adr r12, BSYM(1f) )
|
||||||
|
THUMB( bx r12 )
|
||||||
|
THUMB( .rept 6 )
|
||||||
|
ARM( .rept 8 )
|
||||||
mov r0, r0
|
mov r0, r0
|
||||||
.endr
|
.endr
|
||||||
|
|
||||||
|
@ -135,6 +139,7 @@ start:
|
||||||
.word 0x016f2818 @ Magic numbers to help the loader
|
.word 0x016f2818 @ Magic numbers to help the loader
|
||||||
.word start @ absolute load/run zImage address
|
.word start @ absolute load/run zImage address
|
||||||
.word _edata @ zImage end address
|
.word _edata @ zImage end address
|
||||||
|
THUMB( .thumb )
|
||||||
1: mov r7, r1 @ save architecture ID
|
1: mov r7, r1 @ save architecture ID
|
||||||
mov r8, r2 @ save atags pointer
|
mov r8, r2 @ save atags pointer
|
||||||
|
|
||||||
|
@ -174,7 +179,8 @@ not_angel:
|
||||||
ldr sp, [r0, #28]
|
ldr sp, [r0, #28]
|
||||||
#ifdef CONFIG_AUTO_ZRELADDR
|
#ifdef CONFIG_AUTO_ZRELADDR
|
||||||
@ determine final kernel image address
|
@ determine final kernel image address
|
||||||
and r4, pc, #0xf8000000
|
mov r4, pc
|
||||||
|
and r4, r4, #0xf8000000
|
||||||
add r4, r4, #TEXT_OFFSET
|
add r4, r4, #TEXT_OFFSET
|
||||||
#else
|
#else
|
||||||
ldr r4, =zreladdr
|
ldr r4, =zreladdr
|
||||||
|
@ -445,7 +451,8 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
|
||||||
*/
|
*/
|
||||||
mov r1, #0x1e
|
mov r1, #0x1e
|
||||||
orr r1, r1, #3 << 10
|
orr r1, r1, #3 << 10
|
||||||
mov r2, pc, lsr #20
|
mov r2, pc
|
||||||
|
mov r2, r2, lsr #20
|
||||||
orr r1, r1, r2, lsl #20
|
orr r1, r1, r2, lsl #20
|
||||||
add r0, r3, r2, lsl #2
|
add r0, r3, r2, lsl #2
|
||||||
str r1, [r0], #4
|
str r1, [r0], #4
|
||||||
|
|
|
@ -37,7 +37,3 @@ config SHARP_PARAM
|
||||||
|
|
||||||
config SHARP_SCOOP
|
config SHARP_SCOOP
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config COMMON_CLKDEV
|
|
||||||
bool
|
|
||||||
select HAVE_CLK
|
|
||||||
|
|
|
@ -17,3 +17,4 @@ obj-$(CONFIG_ARCH_IXP2000) += uengine.o
|
||||||
obj-$(CONFIG_ARCH_IXP23XX) += uengine.o
|
obj-$(CONFIG_ARCH_IXP23XX) += uengine.o
|
||||||
obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o
|
obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o
|
||||||
obj-$(CONFIG_COMMON_CLKDEV) += clkdev.o
|
obj-$(CONFIG_COMMON_CLKDEV) += clkdev.o
|
||||||
|
obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o
|
||||||
|
|
|
@ -328,7 +328,7 @@ static inline void unmap_single(struct device *dev, dma_addr_t dma_addr,
|
||||||
* substitute the safe buffer for the unsafe one.
|
* substitute the safe buffer for the unsafe one.
|
||||||
* (basically move the buffer from an unsafe area to a safe one)
|
* (basically move the buffer from an unsafe area to a safe one)
|
||||||
*/
|
*/
|
||||||
dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
dma_addr_t __dma_map_single(struct device *dev, void *ptr, size_t size,
|
||||||
enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
||||||
|
@ -338,7 +338,7 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
||||||
|
|
||||||
return map_single(dev, ptr, size, dir);
|
return map_single(dev, ptr, size, dir);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dma_map_single);
|
EXPORT_SYMBOL(__dma_map_single);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* see if a mapped address was really a "safe" buffer and if so, copy
|
* see if a mapped address was really a "safe" buffer and if so, copy
|
||||||
|
@ -346,7 +346,7 @@ EXPORT_SYMBOL(dma_map_single);
|
||||||
* the safe buffer. (basically return things back to the way they
|
* the safe buffer. (basically return things back to the way they
|
||||||
* should be)
|
* should be)
|
||||||
*/
|
*/
|
||||||
void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
void __dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
||||||
enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
||||||
|
@ -354,9 +354,9 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
||||||
|
|
||||||
unmap_single(dev, dma_addr, size, dir);
|
unmap_single(dev, dma_addr, size, dir);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dma_unmap_single);
|
EXPORT_SYMBOL(__dma_unmap_single);
|
||||||
|
|
||||||
dma_addr_t dma_map_page(struct device *dev, struct page *page,
|
dma_addr_t __dma_map_page(struct device *dev, struct page *page,
|
||||||
unsigned long offset, size_t size, enum dma_data_direction dir)
|
unsigned long offset, size_t size, enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
dev_dbg(dev, "%s(page=%p,off=%#lx,size=%zx,dir=%x)\n",
|
dev_dbg(dev, "%s(page=%p,off=%#lx,size=%zx,dir=%x)\n",
|
||||||
|
@ -372,7 +372,7 @@ dma_addr_t dma_map_page(struct device *dev, struct page *page,
|
||||||
|
|
||||||
return map_single(dev, page_address(page) + offset, size, dir);
|
return map_single(dev, page_address(page) + offset, size, dir);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dma_map_page);
|
EXPORT_SYMBOL(__dma_map_page);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* see if a mapped address was really a "safe" buffer and if so, copy
|
* see if a mapped address was really a "safe" buffer and if so, copy
|
||||||
|
@ -380,7 +380,7 @@ EXPORT_SYMBOL(dma_map_page);
|
||||||
* the safe buffer. (basically return things back to the way they
|
* the safe buffer. (basically return things back to the way they
|
||||||
* should be)
|
* should be)
|
||||||
*/
|
*/
|
||||||
void dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size,
|
void __dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size,
|
||||||
enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
||||||
|
@ -388,7 +388,7 @@ void dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size,
|
||||||
|
|
||||||
unmap_single(dev, dma_addr, size, dir);
|
unmap_single(dev, dma_addr, size, dir);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dma_unmap_page);
|
EXPORT_SYMBOL(__dma_unmap_page);
|
||||||
|
|
||||||
int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr,
|
int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr,
|
||||||
unsigned long off, size_t sz, enum dma_data_direction dir)
|
unsigned long off, size_t sz, enum dma_data_direction dir)
|
||||||
|
|
|
@ -35,6 +35,9 @@
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(irq_controller_lock);
|
static DEFINE_SPINLOCK(irq_controller_lock);
|
||||||
|
|
||||||
|
/* Address of GIC 0 CPU interface */
|
||||||
|
void __iomem *gic_cpu_base_addr __read_mostly;
|
||||||
|
|
||||||
struct gic_chip_data {
|
struct gic_chip_data {
|
||||||
unsigned int irq_offset;
|
unsigned int irq_offset;
|
||||||
void __iomem *dist_base;
|
void __iomem *dist_base;
|
||||||
|
@ -45,7 +48,7 @@ struct gic_chip_data {
|
||||||
#define MAX_GIC_NR 1
|
#define MAX_GIC_NR 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct gic_chip_data gic_data[MAX_GIC_NR];
|
static struct gic_chip_data gic_data[MAX_GIC_NR] __read_mostly;
|
||||||
|
|
||||||
static inline void __iomem *gic_dist_base(unsigned int irq)
|
static inline void __iomem *gic_dist_base(unsigned int irq)
|
||||||
{
|
{
|
||||||
|
@ -146,9 +149,15 @@ static int gic_set_cpu(unsigned int irq, const struct cpumask *mask_val)
|
||||||
unsigned int shift = (irq % 4) * 8;
|
unsigned int shift = (irq % 4) * 8;
|
||||||
unsigned int cpu = cpumask_first(mask_val);
|
unsigned int cpu = cpumask_first(mask_val);
|
||||||
u32 val;
|
u32 val;
|
||||||
|
struct irq_desc *desc;
|
||||||
|
|
||||||
spin_lock(&irq_controller_lock);
|
spin_lock(&irq_controller_lock);
|
||||||
irq_desc[irq].node = cpu;
|
desc = irq_to_desc(irq);
|
||||||
|
if (desc == NULL) {
|
||||||
|
spin_unlock(&irq_controller_lock);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
desc->node = cpu;
|
||||||
val = readl(reg) & ~(0xff << shift);
|
val = readl(reg) & ~(0xff << shift);
|
||||||
val |= 1 << (cpu + shift);
|
val |= 1 << (cpu + shift);
|
||||||
writel(val, reg);
|
writel(val, reg);
|
||||||
|
@ -207,68 +216,65 @@ void __init gic_cascade_irq(unsigned int gic_nr, unsigned int irq)
|
||||||
set_irq_chained_handler(irq, gic_handle_cascade_irq);
|
set_irq_chained_handler(irq, gic_handle_cascade_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init gic_dist_init(unsigned int gic_nr, void __iomem *base,
|
static void __init gic_dist_init(struct gic_chip_data *gic,
|
||||||
unsigned int irq_start)
|
unsigned int irq_start)
|
||||||
{
|
{
|
||||||
unsigned int max_irq, i;
|
unsigned int gic_irqs, irq_limit, i;
|
||||||
|
void __iomem *base = gic->dist_base;
|
||||||
u32 cpumask = 1 << smp_processor_id();
|
u32 cpumask = 1 << smp_processor_id();
|
||||||
|
|
||||||
if (gic_nr >= MAX_GIC_NR)
|
|
||||||
BUG();
|
|
||||||
|
|
||||||
cpumask |= cpumask << 8;
|
cpumask |= cpumask << 8;
|
||||||
cpumask |= cpumask << 16;
|
cpumask |= cpumask << 16;
|
||||||
|
|
||||||
gic_data[gic_nr].dist_base = base;
|
|
||||||
gic_data[gic_nr].irq_offset = (irq_start - 1) & ~31;
|
|
||||||
|
|
||||||
writel(0, base + GIC_DIST_CTRL);
|
writel(0, base + GIC_DIST_CTRL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find out how many interrupts are supported.
|
* Find out how many interrupts are supported.
|
||||||
*/
|
|
||||||
max_irq = readl(base + GIC_DIST_CTR) & 0x1f;
|
|
||||||
max_irq = (max_irq + 1) * 32;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The GIC only supports up to 1020 interrupt sources.
|
* The GIC only supports up to 1020 interrupt sources.
|
||||||
* Limit this to either the architected maximum, or the
|
|
||||||
* platform maximum.
|
|
||||||
*/
|
*/
|
||||||
if (max_irq > max(1020, NR_IRQS))
|
gic_irqs = readl(base + GIC_DIST_CTR) & 0x1f;
|
||||||
max_irq = max(1020, NR_IRQS);
|
gic_irqs = (gic_irqs + 1) * 32;
|
||||||
|
if (gic_irqs > 1020)
|
||||||
|
gic_irqs = 1020;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set all global interrupts to be level triggered, active low.
|
* Set all global interrupts to be level triggered, active low.
|
||||||
*/
|
*/
|
||||||
for (i = 32; i < max_irq; i += 16)
|
for (i = 32; i < gic_irqs; i += 16)
|
||||||
writel(0, base + GIC_DIST_CONFIG + i * 4 / 16);
|
writel(0, base + GIC_DIST_CONFIG + i * 4 / 16);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set all global interrupts to this CPU only.
|
* Set all global interrupts to this CPU only.
|
||||||
*/
|
*/
|
||||||
for (i = 32; i < max_irq; i += 4)
|
for (i = 32; i < gic_irqs; i += 4)
|
||||||
writel(cpumask, base + GIC_DIST_TARGET + i * 4 / 4);
|
writel(cpumask, base + GIC_DIST_TARGET + i * 4 / 4);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set priority on all global interrupts.
|
* Set priority on all global interrupts.
|
||||||
*/
|
*/
|
||||||
for (i = 32; i < max_irq; i += 4)
|
for (i = 32; i < gic_irqs; i += 4)
|
||||||
writel(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4);
|
writel(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable all interrupts. Leave the PPI and SGIs alone
|
* Disable all interrupts. Leave the PPI and SGIs alone
|
||||||
* as these enables are banked registers.
|
* as these enables are banked registers.
|
||||||
*/
|
*/
|
||||||
for (i = 32; i < max_irq; i += 32)
|
for (i = 32; i < gic_irqs; i += 32)
|
||||||
writel(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32);
|
writel(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Limit number of interrupts registered to the platform maximum
|
||||||
|
*/
|
||||||
|
irq_limit = gic->irq_offset + gic_irqs;
|
||||||
|
if (WARN_ON(irq_limit > NR_IRQS))
|
||||||
|
irq_limit = NR_IRQS;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup the Linux IRQ subsystem.
|
* Setup the Linux IRQ subsystem.
|
||||||
*/
|
*/
|
||||||
for (i = irq_start; i < gic_data[gic_nr].irq_offset + max_irq; i++) {
|
for (i = irq_start; i < irq_limit; i++) {
|
||||||
set_irq_chip(i, &gic_chip);
|
set_irq_chip(i, &gic_chip);
|
||||||
set_irq_chip_data(i, &gic_data[gic_nr]);
|
set_irq_chip_data(i, gic);
|
||||||
set_irq_handler(i, handle_level_irq);
|
set_irq_handler(i, handle_level_irq);
|
||||||
set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
|
set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
|
||||||
}
|
}
|
||||||
|
@ -276,19 +282,12 @@ void __init gic_dist_init(unsigned int gic_nr, void __iomem *base,
|
||||||
writel(1, base + GIC_DIST_CTRL);
|
writel(1, base + GIC_DIST_CTRL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base)
|
static void __cpuinit gic_cpu_init(struct gic_chip_data *gic)
|
||||||
{
|
{
|
||||||
void __iomem *dist_base;
|
void __iomem *dist_base = gic->dist_base;
|
||||||
|
void __iomem *base = gic->cpu_base;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (gic_nr >= MAX_GIC_NR)
|
|
||||||
BUG();
|
|
||||||
|
|
||||||
dist_base = gic_data[gic_nr].dist_base;
|
|
||||||
BUG_ON(!dist_base);
|
|
||||||
|
|
||||||
gic_data[gic_nr].cpu_base = base;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Deal with the banked PPI and SGI interrupts - disable all
|
* Deal with the banked PPI and SGI interrupts - disable all
|
||||||
* PPI interrupts, ensure all SGI interrupts are enabled.
|
* PPI interrupts, ensure all SGI interrupts are enabled.
|
||||||
|
@ -306,6 +305,42 @@ void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base)
|
||||||
writel(1, base + GIC_CPU_CTRL);
|
writel(1, base + GIC_CPU_CTRL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __init gic_init(unsigned int gic_nr, unsigned int irq_start,
|
||||||
|
void __iomem *dist_base, void __iomem *cpu_base)
|
||||||
|
{
|
||||||
|
struct gic_chip_data *gic;
|
||||||
|
|
||||||
|
BUG_ON(gic_nr >= MAX_GIC_NR);
|
||||||
|
|
||||||
|
gic = &gic_data[gic_nr];
|
||||||
|
gic->dist_base = dist_base;
|
||||||
|
gic->cpu_base = cpu_base;
|
||||||
|
gic->irq_offset = (irq_start - 1) & ~31;
|
||||||
|
|
||||||
|
if (gic_nr == 0)
|
||||||
|
gic_cpu_base_addr = cpu_base;
|
||||||
|
|
||||||
|
gic_dist_init(gic, irq_start);
|
||||||
|
gic_cpu_init(gic);
|
||||||
|
}
|
||||||
|
|
||||||
|
void __cpuinit gic_secondary_init(unsigned int gic_nr)
|
||||||
|
{
|
||||||
|
BUG_ON(gic_nr >= MAX_GIC_NR);
|
||||||
|
|
||||||
|
gic_cpu_init(&gic_data[gic_nr]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void __cpuinit gic_enable_ppi(unsigned int irq)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
local_irq_save(flags);
|
||||||
|
irq_to_desc(irq)->status |= IRQ_NOPROBE;
|
||||||
|
gic_unmask_irq(irq);
|
||||||
|
local_irq_restore(flags);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
|
void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
|
||||||
{
|
{
|
||||||
|
|
|
@ -352,3 +352,4 @@ struct pci_bus * __init it8152_pci_scan_bus(int nr, struct pci_sys_data *sys)
|
||||||
return pci_scan_bus(nr, &it8152_ops, sys);
|
return pci_scan_bus(nr, &it8152_ops, sys);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(dma_set_coherent_mask);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* linux/arch/arm/plat-versatile/timer-sp.c
|
* linux/arch/arm/common/timer-sp.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 1999 - 2003 ARM Limited
|
* Copyright (C) 1999 - 2003 ARM Limited
|
||||||
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
* Copyright (C) 2000 Deep Blue Solutions Ltd
|
||||||
|
@ -26,8 +26,6 @@
|
||||||
|
|
||||||
#include <asm/hardware/arm_timer.h>
|
#include <asm/hardware/arm_timer.h>
|
||||||
|
|
||||||
#include <plat/timer-sp.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These timers are currently always setup to be clocked at 1MHz.
|
* These timers are currently always setup to be clocked at 1MHz.
|
||||||
*/
|
*/
|
||||||
|
@ -46,7 +44,6 @@ static struct clocksource clocksource_sp804 = {
|
||||||
.rating = 200,
|
.rating = 200,
|
||||||
.read = sp804_read,
|
.read = sp804_read,
|
||||||
.mask = CLOCKSOURCE_MASK(32),
|
.mask = CLOCKSOURCE_MASK(32),
|
||||||
.shift = 20,
|
|
||||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -63,8 +60,7 @@ void __init sp804_clocksource_init(void __iomem *base)
|
||||||
writel(TIMER_CTRL_32BIT | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC,
|
writel(TIMER_CTRL_32BIT | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC,
|
||||||
clksrc_base + TIMER_CTRL);
|
clksrc_base + TIMER_CTRL);
|
||||||
|
|
||||||
cs->mult = clocksource_khz2mult(TIMER_FREQ_KHZ, cs->shift);
|
clocksource_register_khz(cs, TIMER_FREQ_KHZ);
|
||||||
clocksource_register(cs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
CONFIG_EXPERIMENTAL=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
CONFIG_IKCONFIG=y
|
||||||
|
CONFIG_IKCONFIG_PROC=y
|
||||||
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
|
CONFIG_NAMESPACES=y
|
||||||
|
# CONFIG_UTS_NS is not set
|
||||||
|
# CONFIG_IPC_NS is not set
|
||||||
|
# CONFIG_USER_NS is not set
|
||||||
|
# CONFIG_PID_NS is not set
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
CONFIG_EMBEDDED=y
|
||||||
|
CONFIG_SLAB=y
|
||||||
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
|
# CONFIG_IOSCHED_DEADLINE is not set
|
||||||
|
# CONFIG_IOSCHED_CFQ is not set
|
||||||
|
CONFIG_ARCH_SHMOBILE=y
|
||||||
|
CONFIG_ARCH_SH73A0=y
|
||||||
|
CONFIG_MACH_AG5EVM=y
|
||||||
|
CONFIG_MEMORY_SIZE=0x10000000
|
||||||
|
CONFIG_CPU_BPREDICT_DISABLE=y
|
||||||
|
CONFIG_ARM_ERRATA_430973=y
|
||||||
|
CONFIG_ARM_ERRATA_458693=y
|
||||||
|
CONFIG_NO_HZ=y
|
||||||
|
CONFIG_AEABI=y
|
||||||
|
# CONFIG_OABI_COMPAT is not set
|
||||||
|
CONFIG_HIGHMEM=y
|
||||||
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
|
CONFIG_CMDLINE="console=tty0 console=ttySC2,115200 earlyprintk=sh-sci.2,115200 ignore_loglevel"
|
||||||
|
CONFIG_CMDLINE_FORCE=y
|
||||||
|
CONFIG_KEXEC=y
|
||||||
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
|
CONFIG_PM=y
|
||||||
|
# CONFIG_SUSPEND is not set
|
||||||
|
CONFIG_PM_RUNTIME=y
|
||||||
|
CONFIG_NET=y
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_INET=y
|
||||||
|
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||||
|
# CONFIG_INET_LRO is not set
|
||||||
|
# CONFIG_INET_DIAG is not set
|
||||||
|
# CONFIG_IPV6 is not set
|
||||||
|
# CONFIG_WIRELESS is not set
|
||||||
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
# CONFIG_BLK_DEV is not set
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_NET_ETHERNET=y
|
||||||
|
CONFIG_SMSC911X=y
|
||||||
|
# CONFIG_NETDEV_1000 is not set
|
||||||
|
# CONFIG_NETDEV_10000 is not set
|
||||||
|
# CONFIG_WLAN is not set
|
||||||
|
CONFIG_INPUT_SPARSEKMAP=y
|
||||||
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
|
CONFIG_INPUT_EVDEV=y
|
||||||
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
CONFIG_SERIAL_SH_SCI=y
|
||||||
|
CONFIG_SERIAL_SH_SCI_NR_UARTS=9
|
||||||
|
CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||||
|
# CONFIG_LEGACY_PTYS is not set
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
|
CONFIG_I2C=y
|
||||||
|
CONFIG_I2C_SH_MOBILE=y
|
||||||
|
# CONFIG_HWMON is not set
|
||||||
|
# CONFIG_MFD_SUPPORT is not set
|
||||||
|
CONFIG_FB=y
|
||||||
|
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||||
|
# CONFIG_HID_SUPPORT is not set
|
||||||
|
# CONFIG_USB_SUPPORT is not set
|
||||||
|
# CONFIG_DNOTIFY is not set
|
||||||
|
# CONFIG_INOTIFY_USER is not set
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
# CONFIG_MISC_FILESYSTEMS is not set
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
|
# CONFIG_FTRACE is not set
|
|
@ -1,121 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
# CONFIG_SWAP is not set
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_TREE_PREEMPT_RCU=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_EMBEDDED=y
|
|
||||||
# CONFIG_KALLSYMS is not set
|
|
||||||
CONFIG_SLAB=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
|
||||||
# CONFIG_LBDAF is not set
|
|
||||||
CONFIG_ARCH_OMAP=y
|
|
||||||
CONFIG_ARCH_OMAP1=y
|
|
||||||
CONFIG_OMAP_MBOX_FWK=m
|
|
||||||
CONFIG_MACH_AMS_DELTA=y
|
|
||||||
CONFIG_OMAP_ARM_150MHZ=y
|
|
||||||
# CONFIG_OMAP_ARM_60MHZ is not set
|
|
||||||
CONFIG_PREEMPT=y
|
|
||||||
CONFIG_AEABI=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 root=/dev/ram0 initrd=0x11c00000,4M"
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_PM=y
|
|
||||||
# CONFIG_SUSPEND is not set
|
|
||||||
CONFIG_PM_RUNTIME=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_MULTICAST=y
|
|
||||||
CONFIG_IPV6=y
|
|
||||||
# CONFIG_FW_LOADER is not set
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_NAND=y
|
|
||||||
CONFIG_MTD_NAND_AMS_DELTA=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
|
||||||
CONFIG_SCSI=y
|
|
||||||
CONFIG_BLK_DEV_SD=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_USB_CATC=y
|
|
||||||
CONFIG_USB_KAWETH=y
|
|
||||||
CONFIG_USB_PEGASUS=y
|
|
||||||
CONFIG_USB_RTL8150=y
|
|
||||||
CONFIG_USB_USBNET=y
|
|
||||||
CONFIG_PPP=y
|
|
||||||
CONFIG_PPP_MULTILINK=y
|
|
||||||
CONFIG_INPUT_EVDEV=y
|
|
||||||
CONFIG_KEYBOARD_OMAP=y
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
CONFIG_SERIAL_8250=y
|
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
|
||||||
# CONFIG_LEGACY_PTYS is not set
|
|
||||||
CONFIG_HW_RANDOM=y
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_I2C_OMAP=y
|
|
||||||
CONFIG_GPIO_SYSFS=y
|
|
||||||
# CONFIG_HWMON is not set
|
|
||||||
CONFIG_FB=y
|
|
||||||
CONFIG_FIRMWARE_EDID=y
|
|
||||||
CONFIG_FB_OMAP=y
|
|
||||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
|
||||||
CONFIG_LCD_CLASS_DEVICE=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
|
||||||
CONFIG_FONTS=y
|
|
||||||
CONFIG_FONT_6x11=y
|
|
||||||
CONFIG_LOGO=y
|
|
||||||
# CONFIG_LOGO_LINUX_MONO is not set
|
|
||||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
|
||||||
CONFIG_SOUND=y
|
|
||||||
CONFIG_SND=y
|
|
||||||
CONFIG_SND_MIXER_OSS=y
|
|
||||||
CONFIG_SND_PCM_OSS=y
|
|
||||||
CONFIG_SND_SOC=y
|
|
||||||
CONFIG_SND_OMAP_SOC=y
|
|
||||||
CONFIG_SND_OMAP_SOC_AMS_DELTA=y
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
|
||||||
CONFIG_USB_MON=y
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_STORAGE=y
|
|
||||||
CONFIG_NEW_LEDS=y
|
|
||||||
CONFIG_LEDS_CLASS=y
|
|
||||||
CONFIG_LEDS_AMS_DELTA=y
|
|
||||||
CONFIG_LEDS_TRIGGERS=y
|
|
||||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
|
||||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
|
||||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
CONFIG_RTC_DRV_OMAP=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_EXT3_FS=y
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_AUTOFS_FS=y
|
|
||||||
CONFIG_AUTOFS4_FS=y
|
|
||||||
CONFIG_MSDOS_FS=y
|
|
||||||
CONFIG_VFAT_FS=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_JFFS2_FS=y
|
|
||||||
CONFIG_JFFS2_SUMMARY=y
|
|
||||||
CONFIG_NFS_FS=y
|
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
|
||||||
CONFIG_NLS_CODEPAGE_437=y
|
|
||||||
CONFIG_NLS_CODEPAGE_850=y
|
|
||||||
CONFIG_NLS_CODEPAGE_852=y
|
|
||||||
CONFIG_NLS_ISO8859_1=y
|
|
||||||
CONFIG_NLS_ISO8859_2=y
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
|
|
@ -0,0 +1,341 @@
|
||||||
|
CONFIG_EXPERIMENTAL=y
|
||||||
|
# CONFIG_LOCALVERSION_AUTO is not set
|
||||||
|
# CONFIG_SWAP is not set
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
CONFIG_IKCONFIG=y
|
||||||
|
CONFIG_IKCONFIG_PROC=y
|
||||||
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
|
CONFIG_MODULES=y
|
||||||
|
CONFIG_MODULE_FORCE_LOAD=y
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
CONFIG_MODVERSIONS=y
|
||||||
|
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||||
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
|
# CONFIG_IOSCHED_CFQ is not set
|
||||||
|
CONFIG_ARCH_AT91=y
|
||||||
|
CONFIG_MACH_ONEARM=y
|
||||||
|
CONFIG_ARCH_AT91RM9200DK=y
|
||||||
|
CONFIG_MACH_AT91RM9200EK=y
|
||||||
|
CONFIG_MACH_CSB337=y
|
||||||
|
CONFIG_MACH_CSB637=y
|
||||||
|
CONFIG_MACH_CARMEVA=y
|
||||||
|
CONFIG_MACH_ATEB9200=y
|
||||||
|
CONFIG_MACH_KB9200=y
|
||||||
|
CONFIG_MACH_PICOTUX2XX=y
|
||||||
|
CONFIG_MACH_KAFA=y
|
||||||
|
CONFIG_MACH_ECBAT91=y
|
||||||
|
CONFIG_MACH_YL9200=y
|
||||||
|
CONFIG_MACH_CPUAT91=y
|
||||||
|
CONFIG_MACH_ECO920=y
|
||||||
|
CONFIG_MTD_AT91_DATAFLASH_CARD=y
|
||||||
|
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
||||||
|
CONFIG_AT91_TIMER_HZ=100
|
||||||
|
# CONFIG_ARM_THUMB is not set
|
||||||
|
CONFIG_PCCARD=y
|
||||||
|
CONFIG_AT91_CF=y
|
||||||
|
CONFIG_NO_HZ=y
|
||||||
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
CONFIG_PREEMPT=y
|
||||||
|
CONFIG_AEABI=y
|
||||||
|
CONFIG_LEDS=y
|
||||||
|
CONFIG_LEDS_CPU=y
|
||||||
|
CONFIG_ZBOOT_ROM_TEXT=0x10000000
|
||||||
|
CONFIG_ZBOOT_ROM_BSS=0x20040000
|
||||||
|
CONFIG_KEXEC=y
|
||||||
|
CONFIG_FPE_NWFPE=y
|
||||||
|
CONFIG_BINFMT_MISC=y
|
||||||
|
CONFIG_NET=y
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_XFRM_USER=m
|
||||||
|
CONFIG_INET=y
|
||||||
|
CONFIG_IP_MULTICAST=y
|
||||||
|
CONFIG_IP_PNP=y
|
||||||
|
CONFIG_IP_PNP_DHCP=y
|
||||||
|
CONFIG_IP_PNP_BOOTP=y
|
||||||
|
CONFIG_NET_IPIP=m
|
||||||
|
CONFIG_NET_IPGRE=m
|
||||||
|
CONFIG_INET_AH=m
|
||||||
|
CONFIG_INET_ESP=m
|
||||||
|
CONFIG_INET_IPCOMP=m
|
||||||
|
CONFIG_INET_XFRM_MODE_TRANSPORT=m
|
||||||
|
CONFIG_INET_XFRM_MODE_TUNNEL=m
|
||||||
|
CONFIG_INET_XFRM_MODE_BEET=m
|
||||||
|
CONFIG_IPV6_PRIVACY=y
|
||||||
|
CONFIG_IPV6_ROUTER_PREF=y
|
||||||
|
CONFIG_IPV6_ROUTE_INFO=y
|
||||||
|
CONFIG_INET6_AH=m
|
||||||
|
CONFIG_INET6_ESP=m
|
||||||
|
CONFIG_INET6_IPCOMP=m
|
||||||
|
CONFIG_IPV6_MIP6=m
|
||||||
|
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
|
||||||
|
CONFIG_IPV6_TUNNEL=m
|
||||||
|
CONFIG_BRIDGE=m
|
||||||
|
CONFIG_VLAN_8021Q=m
|
||||||
|
CONFIG_BT=m
|
||||||
|
CONFIG_BT_L2CAP=m
|
||||||
|
CONFIG_BT_SCO=m
|
||||||
|
CONFIG_BT_RFCOMM=m
|
||||||
|
CONFIG_BT_RFCOMM_TTY=y
|
||||||
|
CONFIG_BT_BNEP=m
|
||||||
|
CONFIG_BT_BNEP_MC_FILTER=y
|
||||||
|
CONFIG_BT_BNEP_PROTO_FILTER=y
|
||||||
|
CONFIG_BT_HIDP=m
|
||||||
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_MTD=y
|
||||||
|
CONFIG_MTD_CONCAT=y
|
||||||
|
CONFIG_MTD_PARTITIONS=y
|
||||||
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
|
CONFIG_MTD_AFS_PARTS=y
|
||||||
|
CONFIG_MTD_CHAR=y
|
||||||
|
CONFIG_MTD_BLOCK=y
|
||||||
|
CONFIG_MTD_CFI=y
|
||||||
|
CONFIG_MTD_JEDECPROBE=y
|
||||||
|
CONFIG_MTD_CFI_INTELEXT=y
|
||||||
|
CONFIG_MTD_CFI_AMDSTD=y
|
||||||
|
CONFIG_MTD_COMPLEX_MAPPINGS=y
|
||||||
|
CONFIG_MTD_PHYSMAP=y
|
||||||
|
CONFIG_MTD_PLATRAM=y
|
||||||
|
CONFIG_MTD_DATAFLASH=y
|
||||||
|
CONFIG_MTD_NAND=y
|
||||||
|
CONFIG_MTD_NAND_ATMEL=y
|
||||||
|
CONFIG_MTD_NAND_PLATFORM=y
|
||||||
|
CONFIG_MTD_UBI=y
|
||||||
|
CONFIG_MTD_UBI_GLUEBI=y
|
||||||
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
|
CONFIG_BLK_DEV_NBD=y
|
||||||
|
CONFIG_BLK_DEV_RAM=y
|
||||||
|
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||||
|
CONFIG_ATMEL_TCLIB=y
|
||||||
|
CONFIG_EEPROM_LEGACY=m
|
||||||
|
CONFIG_SCSI=y
|
||||||
|
CONFIG_BLK_DEV_SD=y
|
||||||
|
CONFIG_BLK_DEV_SR=m
|
||||||
|
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||||
|
CONFIG_CHR_DEV_SG=m
|
||||||
|
CONFIG_SCSI_MULTI_LUN=y
|
||||||
|
# CONFIG_SCSI_LOWLEVEL is not set
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_TUN=m
|
||||||
|
CONFIG_PHYLIB=y
|
||||||
|
CONFIG_DAVICOM_PHY=y
|
||||||
|
CONFIG_SMSC_PHY=y
|
||||||
|
CONFIG_MICREL_PHY=y
|
||||||
|
CONFIG_NET_ETHERNET=y
|
||||||
|
CONFIG_ARM_AT91_ETHER=y
|
||||||
|
# CONFIG_NETDEV_1000 is not set
|
||||||
|
# CONFIG_NETDEV_10000 is not set
|
||||||
|
CONFIG_USB_CATC=m
|
||||||
|
CONFIG_USB_KAWETH=m
|
||||||
|
CONFIG_USB_PEGASUS=m
|
||||||
|
CONFIG_USB_RTL8150=m
|
||||||
|
CONFIG_USB_USBNET=m
|
||||||
|
CONFIG_USB_NET_DM9601=m
|
||||||
|
CONFIG_USB_NET_GL620A=m
|
||||||
|
CONFIG_USB_NET_PLUSB=m
|
||||||
|
CONFIG_USB_NET_RNDIS_HOST=m
|
||||||
|
CONFIG_USB_ALI_M5632=y
|
||||||
|
CONFIG_USB_AN2720=y
|
||||||
|
CONFIG_USB_EPSON2888=y
|
||||||
|
CONFIG_PPP=y
|
||||||
|
CONFIG_PPP_MULTILINK=y
|
||||||
|
CONFIG_PPP_FILTER=y
|
||||||
|
CONFIG_PPP_ASYNC=y
|
||||||
|
CONFIG_PPP_DEFLATE=y
|
||||||
|
CONFIG_PPP_BSDCOMP=y
|
||||||
|
CONFIG_PPP_MPPE=m
|
||||||
|
CONFIG_PPPOE=m
|
||||||
|
CONFIG_SLIP=m
|
||||||
|
CONFIG_SLIP_COMPRESSED=y
|
||||||
|
CONFIG_SLIP_SMART=y
|
||||||
|
CONFIG_SLIP_MODE_SLIP6=y
|
||||||
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
|
||||||
|
CONFIG_INPUT_EVDEV=y
|
||||||
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
CONFIG_INPUT_TOUCHSCREEN=y
|
||||||
|
CONFIG_SERIAL_ATMEL=y
|
||||||
|
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
||||||
|
CONFIG_LEGACY_PTY_COUNT=32
|
||||||
|
CONFIG_HW_RANDOM=y
|
||||||
|
CONFIG_I2C=y
|
||||||
|
CONFIG_I2C_CHARDEV=y
|
||||||
|
CONFIG_I2C_GPIO=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_SPI_ATMEL=y
|
||||||
|
CONFIG_SPI_BITBANG=y
|
||||||
|
CONFIG_GPIO_SYSFS=y
|
||||||
|
CONFIG_HWMON=m
|
||||||
|
CONFIG_SENSORS_ADM1021=m
|
||||||
|
CONFIG_SENSORS_ADM1025=m
|
||||||
|
CONFIG_SENSORS_ADM1026=m
|
||||||
|
CONFIG_SENSORS_ADM1029=m
|
||||||
|
CONFIG_SENSORS_ADM1031=m
|
||||||
|
CONFIG_SENSORS_ADM9240=m
|
||||||
|
CONFIG_SENSORS_DS1621=m
|
||||||
|
CONFIG_SENSORS_GL518SM=m
|
||||||
|
CONFIG_SENSORS_GL520SM=m
|
||||||
|
CONFIG_SENSORS_IT87=m
|
||||||
|
CONFIG_SENSORS_LM63=m
|
||||||
|
CONFIG_SENSORS_LM73=m
|
||||||
|
CONFIG_SENSORS_LM75=m
|
||||||
|
CONFIG_SENSORS_LM77=m
|
||||||
|
CONFIG_SENSORS_LM78=m
|
||||||
|
CONFIG_SENSORS_LM80=m
|
||||||
|
CONFIG_SENSORS_LM83=m
|
||||||
|
CONFIG_SENSORS_LM85=m
|
||||||
|
CONFIG_SENSORS_LM87=m
|
||||||
|
CONFIG_SENSORS_LM90=m
|
||||||
|
CONFIG_SENSORS_LM92=m
|
||||||
|
CONFIG_SENSORS_MAX1619=m
|
||||||
|
CONFIG_SENSORS_PCF8591=m
|
||||||
|
CONFIG_SENSORS_SMSC47B397=m
|
||||||
|
CONFIG_SENSORS_W83781D=m
|
||||||
|
CONFIG_SENSORS_W83791D=m
|
||||||
|
CONFIG_SENSORS_W83792D=m
|
||||||
|
CONFIG_SENSORS_W83793=m
|
||||||
|
CONFIG_SENSORS_W83L785TS=m
|
||||||
|
CONFIG_WATCHDOG=y
|
||||||
|
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||||
|
CONFIG_AT91RM9200_WATCHDOG=y
|
||||||
|
CONFIG_FB=y
|
||||||
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
|
CONFIG_FB_TILEBLITTING=y
|
||||||
|
CONFIG_FB_S1D13XXX=y
|
||||||
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
|
CONFIG_LCD_CLASS_DEVICE=y
|
||||||
|
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
|
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||||
|
CONFIG_DISPLAY_SUPPORT=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
CONFIG_FONTS=y
|
||||||
|
CONFIG_FONT_MINI_4x6=y
|
||||||
|
CONFIG_LOGO=y
|
||||||
|
# CONFIG_LOGO_LINUX_MONO is not set
|
||||||
|
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||||
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_DEVICEFS=y
|
||||||
|
# CONFIG_USB_DEVICE_CLASS is not set
|
||||||
|
CONFIG_USB_MON=y
|
||||||
|
CONFIG_USB_OHCI_HCD=y
|
||||||
|
CONFIG_USB_ACM=m
|
||||||
|
CONFIG_USB_PRINTER=m
|
||||||
|
CONFIG_USB_STORAGE=y
|
||||||
|
CONFIG_USB_SERIAL=y
|
||||||
|
CONFIG_USB_SERIAL_CONSOLE=y
|
||||||
|
CONFIG_USB_SERIAL_GENERIC=y
|
||||||
|
CONFIG_USB_SERIAL_FTDI_SIO=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_MPR=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA28=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA19=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
|
||||||
|
CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
||||||
|
CONFIG_USB_SERIAL_MCT_U232=y
|
||||||
|
CONFIG_USB_SERIAL_PL2303=y
|
||||||
|
CONFIG_USB_GADGET=y
|
||||||
|
CONFIG_USB_ETH=m
|
||||||
|
CONFIG_USB_MASS_STORAGE=m
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_MMC_AT91=y
|
||||||
|
CONFIG_NEW_LEDS=y
|
||||||
|
CONFIG_LEDS_CLASS=y
|
||||||
|
CONFIG_LEDS_GPIO=y
|
||||||
|
CONFIG_LEDS_TRIGGERS=y
|
||||||
|
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||||
|
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||||
|
CONFIG_LEDS_TRIGGER_GPIO=y
|
||||||
|
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||||
|
CONFIG_RTC_CLASS=y
|
||||||
|
# CONFIG_RTC_HCTOSYS is not set
|
||||||
|
CONFIG_RTC_DRV_DS1307=y
|
||||||
|
CONFIG_RTC_DRV_PCF8563=y
|
||||||
|
CONFIG_RTC_DRV_AT91RM9200=y
|
||||||
|
CONFIG_EXT2_FS=y
|
||||||
|
CONFIG_EXT2_FS_XATTR=y
|
||||||
|
CONFIG_EXT3_FS=y
|
||||||
|
# CONFIG_EXT3_FS_XATTR is not set
|
||||||
|
CONFIG_REISERFS_FS=y
|
||||||
|
CONFIG_AUTOFS4_FS=y
|
||||||
|
CONFIG_ISO9660_FS=y
|
||||||
|
CONFIG_JOLIET=y
|
||||||
|
CONFIG_ZISOFS=y
|
||||||
|
CONFIG_UDF_FS=y
|
||||||
|
CONFIG_MSDOS_FS=y
|
||||||
|
CONFIG_VFAT_FS=y
|
||||||
|
CONFIG_NTFS_FS=m
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
CONFIG_CONFIGFS_FS=y
|
||||||
|
CONFIG_JFFS2_FS=y
|
||||||
|
CONFIG_JFFS2_SUMMARY=y
|
||||||
|
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
|
||||||
|
CONFIG_JFFS2_LZO=y
|
||||||
|
CONFIG_JFFS2_RUBIN=y
|
||||||
|
CONFIG_CRAMFS=y
|
||||||
|
CONFIG_MINIX_FS=y
|
||||||
|
CONFIG_NFS_FS=y
|
||||||
|
CONFIG_NFS_V3=y
|
||||||
|
CONFIG_NFS_V3_ACL=y
|
||||||
|
CONFIG_NFS_V4=y
|
||||||
|
CONFIG_ROOT_NFS=y
|
||||||
|
CONFIG_NFSD=y
|
||||||
|
CONFIG_SMB_FS=m
|
||||||
|
CONFIG_CIFS=m
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
|
CONFIG_MAC_PARTITION=y
|
||||||
|
CONFIG_NLS_CODEPAGE_437=y
|
||||||
|
CONFIG_NLS_CODEPAGE_737=m
|
||||||
|
CONFIG_NLS_CODEPAGE_775=m
|
||||||
|
CONFIG_NLS_CODEPAGE_850=m
|
||||||
|
CONFIG_NLS_CODEPAGE_852=m
|
||||||
|
CONFIG_NLS_CODEPAGE_855=m
|
||||||
|
CONFIG_NLS_CODEPAGE_857=m
|
||||||
|
CONFIG_NLS_CODEPAGE_860=m
|
||||||
|
CONFIG_NLS_CODEPAGE_861=m
|
||||||
|
CONFIG_NLS_CODEPAGE_862=m
|
||||||
|
CONFIG_NLS_CODEPAGE_863=m
|
||||||
|
CONFIG_NLS_CODEPAGE_864=m
|
||||||
|
CONFIG_NLS_CODEPAGE_865=m
|
||||||
|
CONFIG_NLS_CODEPAGE_866=m
|
||||||
|
CONFIG_NLS_CODEPAGE_869=m
|
||||||
|
CONFIG_NLS_CODEPAGE_936=m
|
||||||
|
CONFIG_NLS_CODEPAGE_950=m
|
||||||
|
CONFIG_NLS_CODEPAGE_932=m
|
||||||
|
CONFIG_NLS_CODEPAGE_949=m
|
||||||
|
CONFIG_NLS_CODEPAGE_874=m
|
||||||
|
CONFIG_NLS_ISO8859_8=m
|
||||||
|
CONFIG_NLS_CODEPAGE_1250=m
|
||||||
|
CONFIG_NLS_CODEPAGE_1251=m
|
||||||
|
CONFIG_NLS_ASCII=m
|
||||||
|
CONFIG_NLS_ISO8859_1=y
|
||||||
|
CONFIG_NLS_ISO8859_2=m
|
||||||
|
CONFIG_NLS_ISO8859_3=m
|
||||||
|
CONFIG_NLS_ISO8859_4=m
|
||||||
|
CONFIG_NLS_ISO8859_5=m
|
||||||
|
CONFIG_NLS_ISO8859_6=m
|
||||||
|
CONFIG_NLS_ISO8859_7=m
|
||||||
|
CONFIG_NLS_ISO8859_9=m
|
||||||
|
CONFIG_NLS_ISO8859_13=m
|
||||||
|
CONFIG_NLS_ISO8859_14=m
|
||||||
|
CONFIG_NLS_ISO8859_15=m
|
||||||
|
CONFIG_NLS_KOI8_R=m
|
||||||
|
CONFIG_NLS_KOI8_U=m
|
||||||
|
CONFIG_NLS_UTF8=y
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_DEBUG_FS=y
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
|
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||||
|
# CONFIG_FTRACE is not set
|
||||||
|
CONFIG_CRYPTO_PCBC=y
|
||||||
|
CONFIG_CRYPTO_SHA1=y
|
|
@ -1,72 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
# CONFIG_SWAP is not set
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
# CONFIG_IOSCHED_DEADLINE is not set
|
|
||||||
# CONFIG_IOSCHED_CFQ is not set
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_ARCH_AT91RM9200DK=y
|
|
||||||
CONFIG_MACH_ECO920=y
|
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
|
||||||
# CONFIG_ARM_THUMB is not set
|
|
||||||
CONFIG_PCCARD=y
|
|
||||||
CONFIG_AT91_CF=y
|
|
||||||
CONFIG_LEDS=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw"
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
CONFIG_IP_PNP_BOOTP=y
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_CFI=y
|
|
||||||
CONFIG_MTD_JEDECPROBE=y
|
|
||||||
CONFIG_MTD_CFI_AMDSTD=y
|
|
||||||
CONFIG_MTD_PHYSMAP=y
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
# CONFIG_SERIO is not set
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_I2C_GPIO=y
|
|
||||||
CONFIG_WATCHDOG=y
|
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
|
||||||
CONFIG_AT91RM9200_WATCHDOG=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
# CONFIG_USB_HID is not set
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEBUG=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
CONFIG_USB_MON=y
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_MMC=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
CONFIG_RTC_DRV_AT91RM9200=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_CRAMFS=y
|
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_DEBUG_USER=y
|
|
||||||
CONFIG_DEBUG_LL=y
|
|
|
@ -1,73 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
# CONFIG_LOCALVERSION_AUTO is not set
|
|
||||||
# CONFIG_SWAP is not set
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
# CONFIG_IOSCHED_DEADLINE is not set
|
|
||||||
# CONFIG_IOSCHED_CFQ is not set
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_MACH_AT91RM9200EK=y
|
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
|
||||||
# CONFIG_ARM_THUMB is not set
|
|
||||||
CONFIG_LEDS=y
|
|
||||||
CONFIG_LEDS_CPU=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw"
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
CONFIG_IP_PNP_BOOTP=y
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_CFI=y
|
|
||||||
CONFIG_MTD_JEDECPROBE=y
|
|
||||||
CONFIG_MTD_CFI_AMDSTD=y
|
|
||||||
CONFIG_MTD_PHYSMAP=y
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
# CONFIG_SERIO is not set
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_I2C_GPIO=y
|
|
||||||
CONFIG_WATCHDOG=y
|
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
|
||||||
CONFIG_AT91RM9200_WATCHDOG=y
|
|
||||||
CONFIG_FB=y
|
|
||||||
CONFIG_FB_S1D13XXX=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
# CONFIG_USB_HID is not set
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEBUG=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
CONFIG_USB_MON=y
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_MMC=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
CONFIG_RTC_DRV_AT91RM9200=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_CRAMFS=y
|
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_DEBUG_USER=y
|
|
||||||
CONFIG_DEBUG_LL=y
|
|
|
@ -1,131 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_EMBEDDED=y
|
|
||||||
CONFIG_SLAB=y
|
|
||||||
CONFIG_PROFILING=y
|
|
||||||
CONFIG_OPROFILE=m
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_MACH_ATEB9200=y
|
|
||||||
CONFIG_PCCARD=m
|
|
||||||
CONFIG_AT91_CF=m
|
|
||||||
CONFIG_PREEMPT=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_PM=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_NET_KEY=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_BRIDGE=m
|
|
||||||
CONFIG_VLAN_8021Q=m
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK_RO=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=m
|
|
||||||
CONFIG_BLK_DEV_NBD=m
|
|
||||||
CONFIG_SCSI=m
|
|
||||||
CONFIG_BLK_DEV_SD=m
|
|
||||||
CONFIG_BLK_DEV_SR=m
|
|
||||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
|
||||||
CONFIG_CHR_DEV_SG=m
|
|
||||||
CONFIG_SCSI_MULTI_LUN=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_DUMMY=m
|
|
||||||
CONFIG_TUN=m
|
|
||||||
CONFIG_PHYLIB=y
|
|
||||||
CONFIG_DAVICOM_PHY=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
CONFIG_USB_USBNET=y
|
|
||||||
CONFIG_USB_NET_GL620A=y
|
|
||||||
CONFIG_USB_NET_PLUSB=y
|
|
||||||
CONFIG_USB_NET_RNDIS_HOST=y
|
|
||||||
CONFIG_USB_ALI_M5632=y
|
|
||||||
CONFIG_USB_AN2720=y
|
|
||||||
CONFIG_USB_EPSON2888=y
|
|
||||||
CONFIG_PPP=m
|
|
||||||
CONFIG_PPP_ASYNC=m
|
|
||||||
CONFIG_PPP_SYNC_TTY=m
|
|
||||||
CONFIG_PPP_DEFLATE=m
|
|
||||||
CONFIG_PPP_BSDCOMP=m
|
|
||||||
CONFIG_PPPOE=m
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
CONFIG_I2C=m
|
|
||||||
CONFIG_I2C_CHARDEV=m
|
|
||||||
CONFIG_I2C_GPIO=m
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
CONFIG_SOUND=y
|
|
||||||
CONFIG_USB_HID=m
|
|
||||||
CONFIG_HID_PID=y
|
|
||||||
CONFIG_USB_HIDDEV=y
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
CONFIG_USB_MON=y
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_ACM=m
|
|
||||||
CONFIG_USB_PRINTER=m
|
|
||||||
CONFIG_USB_STORAGE=m
|
|
||||||
CONFIG_USB_STORAGE_DATAFAB=m
|
|
||||||
CONFIG_USB_STORAGE_FREECOM=m
|
|
||||||
CONFIG_USB_STORAGE_USBAT=m
|
|
||||||
CONFIG_USB_STORAGE_SDDR09=m
|
|
||||||
CONFIG_USB_STORAGE_SDDR55=m
|
|
||||||
CONFIG_USB_STORAGE_JUMPSHOT=m
|
|
||||||
CONFIG_USB_SERIAL=m
|
|
||||||
CONFIG_USB_SERIAL_GENERIC=y
|
|
||||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
|
||||||
CONFIG_USB_SERIAL_PL2303=m
|
|
||||||
CONFIG_USB_GADGET=m
|
|
||||||
CONFIG_USB_ETH=m
|
|
||||||
CONFIG_USB_GADGETFS=m
|
|
||||||
CONFIG_USB_FILE_STORAGE=m
|
|
||||||
CONFIG_USB_G_SERIAL=m
|
|
||||||
CONFIG_MMC=m
|
|
||||||
CONFIG_MMC_DEBUG=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
# CONFIG_RTC_HCTOSYS is not set
|
|
||||||
CONFIG_RTC_DRV_AT91RM9200=y
|
|
||||||
CONFIG_EXT2_FS=m
|
|
||||||
CONFIG_EXT3_FS=m
|
|
||||||
CONFIG_REISERFS_FS=m
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_ISO9660_FS=m
|
|
||||||
CONFIG_JOLIET=y
|
|
||||||
CONFIG_ZISOFS=y
|
|
||||||
CONFIG_UDF_FS=m
|
|
||||||
CONFIG_MSDOS_FS=m
|
|
||||||
CONFIG_VFAT_FS=m
|
|
||||||
CONFIG_NTFS_FS=m
|
|
||||||
CONFIG_NTFS_RW=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_CRAMFS=y
|
|
||||||
CONFIG_NFS_FS=m
|
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_NFS_V3_ACL=y
|
|
||||||
CONFIG_NFS_V4=y
|
|
||||||
CONFIG_NFSD=m
|
|
||||||
CONFIG_NFSD_V4=y
|
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
|
||||||
CONFIG_MAC_PARTITION=y
|
|
||||||
CONFIG_BSD_DISKLABEL=y
|
|
||||||
CONFIG_MINIX_SUBPARTITION=y
|
|
||||||
CONFIG_SOLARIS_X86_PARTITION=y
|
|
||||||
CONFIG_UNIXWARE_DISKLABEL=y
|
|
||||||
CONFIG_NLS_CODEPAGE_932=m
|
|
||||||
CONFIG_NLS_ASCII=m
|
|
||||||
CONFIG_NLS_ISO8859_15=m
|
|
||||||
CONFIG_NLS_UTF8=m
|
|
||||||
CONFIG_CRYPTO_MD5=y
|
|
||||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
|
||||||
CONFIG_CRYPTO_ARC4=m
|
|
||||||
CONFIG_CRC16=m
|
|
||||||
CONFIG_LIBCRC32C=m
|
|
|
@ -1,47 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_EMBEDDED=y
|
|
||||||
# CONFIG_HOTPLUG is not set
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_MACH_CARMEVA=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_MULTICAST=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
# CONFIG_INPUT_MOUSEDEV is not set
|
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
CONFIG_SERIO=m
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
CONFIG_MMC=m
|
|
||||||
CONFIG_MMC_DEBUG=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_EXT2_FS_XATTR=y
|
|
||||||
# CONFIG_DNOTIFY is not set
|
|
||||||
CONFIG_JFFS2_FS=y
|
|
||||||
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
|
|
||||||
CONFIG_NFS_FS=y
|
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_NFS_V4=y
|
|
||||||
CONFIG_ROOT_NFS=y
|
|
||||||
CONFIG_NFSD=y
|
|
|
@ -1,112 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
# CONFIG_LOCALVERSION_AUTO is not set
|
|
||||||
# CONFIG_SWAP is not set
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
|
||||||
# CONFIG_IOSCHED_CFQ is not set
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_MACH_CPUAT91=y
|
|
||||||
CONFIG_AT91_TIMER_HZ=100
|
|
||||||
# CONFIG_ARM_THUMB is not set
|
|
||||||
CONFIG_PREEMPT=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
|
||||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
|
||||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_CFI=y
|
|
||||||
CONFIG_MTD_CFI_INTELEXT=y
|
|
||||||
CONFIG_MTD_PHYSMAP=y
|
|
||||||
CONFIG_MTD_PLATRAM=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
|
||||||
CONFIG_BLK_DEV_NBD=y
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
# CONFIG_MISC_DEVICES is not set
|
|
||||||
CONFIG_SCSI=y
|
|
||||||
CONFIG_BLK_DEV_SD=y
|
|
||||||
CONFIG_SCSI_MULTI_LUN=y
|
|
||||||
# CONFIG_SCSI_LOWLEVEL is not set
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_PHYLIB=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
# CONFIG_NETDEV_1000 is not set
|
|
||||||
# CONFIG_NETDEV_10000 is not set
|
|
||||||
CONFIG_PPP=y
|
|
||||||
CONFIG_PPP_ASYNC=y
|
|
||||||
CONFIG_PPP_DEFLATE=y
|
|
||||||
CONFIG_PPP_BSDCOMP=y
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
# CONFIG_SERIO is not set
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
CONFIG_LEGACY_PTY_COUNT=32
|
|
||||||
# CONFIG_HW_RANDOM is not set
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_I2C_GPIO=y
|
|
||||||
CONFIG_GPIO_SYSFS=y
|
|
||||||
# CONFIG_HWMON is not set
|
|
||||||
CONFIG_WATCHDOG=y
|
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
|
||||||
CONFIG_AT91RM9200_WATCHDOG=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
# CONFIG_HID_SUPPORT is not set
|
|
||||||
CONFIG_USB=y
|
|
||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_STORAGE=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_USB_ETH=m
|
|
||||||
CONFIG_MMC=y
|
|
||||||
CONFIG_MMC_AT91=m
|
|
||||||
CONFIG_NEW_LEDS=y
|
|
||||||
CONFIG_LEDS_CLASS=y
|
|
||||||
CONFIG_LEDS_GPIO=y
|
|
||||||
CONFIG_LEDS_TRIGGERS=y
|
|
||||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
|
||||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
|
||||||
CONFIG_LEDS_TRIGGER_GPIO=y
|
|
||||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
# CONFIG_RTC_HCTOSYS is not set
|
|
||||||
CONFIG_RTC_DRV_DS1307=y
|
|
||||||
CONFIG_RTC_DRV_PCF8563=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_EXT3_FS=y
|
|
||||||
# CONFIG_EXT3_FS_XATTR is not set
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_AUTOFS4_FS=y
|
|
||||||
CONFIG_MSDOS_FS=y
|
|
||||||
CONFIG_VFAT_FS=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_JFFS2_FS=y
|
|
||||||
CONFIG_JFFS2_SUMMARY=y
|
|
||||||
CONFIG_CRAMFS=y
|
|
||||||
CONFIG_MINIX_FS=y
|
|
||||||
CONFIG_NFS_FS=y
|
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_ROOT_NFS=y
|
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
|
||||||
CONFIG_NLS_CODEPAGE_437=y
|
|
||||||
CONFIG_NLS_ISO8859_1=y
|
|
||||||
CONFIG_NLS_UTF8=y
|
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
|
|
@ -1,104 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
# CONFIG_SWAP is not set
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_MACH_CSB337=y
|
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
|
||||||
# CONFIG_ARM_THUMB is not set
|
|
||||||
CONFIG_PCCARD=y
|
|
||||||
CONFIG_AT91_CF=y
|
|
||||||
CONFIG_LEDS=y
|
|
||||||
CONFIG_LEDS_CPU=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,3145728 root=/dev/ram0 rw"
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
CONFIG_IP_PNP_DHCP=y
|
|
||||||
CONFIG_IP_PNP_BOOTP=y
|
|
||||||
# CONFIG_INET_LRO is not set
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_CFI=y
|
|
||||||
CONFIG_MTD_CFI_INTELEXT=y
|
|
||||||
CONFIG_MTD_PHYSMAP=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
|
||||||
CONFIG_ATMEL_SSC=y
|
|
||||||
CONFIG_SCSI=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
# CONFIG_SERIO is not set
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
# CONFIG_HW_RANDOM is not set
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_I2C_GPIO=y
|
|
||||||
# CONFIG_HWMON is not set
|
|
||||||
CONFIG_WATCHDOG=y
|
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
|
||||||
CONFIG_AT91RM9200_WATCHDOG=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
# CONFIG_USB_HID is not set
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEBUG=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
CONFIG_USB_MON=y
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_STORAGE=y
|
|
||||||
CONFIG_USB_SERIAL=y
|
|
||||||
CONFIG_USB_SERIAL_CONSOLE=y
|
|
||||||
CONFIG_USB_SERIAL_GENERIC=y
|
|
||||||
CONFIG_USB_SERIAL_FTDI_SIO=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_MPR=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
|
||||||
CONFIG_USB_SERIAL_MCT_U232=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_MMC=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
|
|
||||||
# CONFIG_RTC_INTF_SYSFS is not set
|
|
||||||
CONFIG_RTC_DRV_DS1307=y
|
|
||||||
CONFIG_RTC_DRV_AT91RM9200=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_CRAMFS=y
|
|
||||||
CONFIG_NFS_FS=y
|
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_NFS_V4=y
|
|
||||||
CONFIG_ROOT_NFS=y
|
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_DEBUG_USER=y
|
|
||||||
CONFIG_DEBUG_LL=y
|
|
|
@ -1,98 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
# CONFIG_SWAP is not set
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_MACH_CSB637=y
|
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
|
||||||
# CONFIG_ARM_THUMB is not set
|
|
||||||
CONFIG_PCCARD=y
|
|
||||||
CONFIG_AT91_CF=y
|
|
||||||
CONFIG_LEDS=y
|
|
||||||
CONFIG_LEDS_CPU=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_CMDLINE="mem=32M console=ttyS0,38400 initrd=0x20410000,3145728 root=/dev/ram0 rw"
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
CONFIG_IP_PNP_DHCP=y
|
|
||||||
CONFIG_IP_PNP_BOOTP=y
|
|
||||||
# CONFIG_INET_LRO is not set
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_CFI=y
|
|
||||||
CONFIG_MTD_CFI_INTELEXT=y
|
|
||||||
CONFIG_MTD_PHYSMAP=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
|
||||||
CONFIG_SCSI=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
# CONFIG_SERIO is not set
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_WATCHDOG=y
|
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
|
||||||
CONFIG_AT91RM9200_WATCHDOG=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
# CONFIG_USB_HID is not set
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEBUG=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
CONFIG_USB_MON=y
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_STORAGE=y
|
|
||||||
CONFIG_USB_SERIAL=y
|
|
||||||
CONFIG_USB_SERIAL_CONSOLE=y
|
|
||||||
CONFIG_USB_SERIAL_GENERIC=y
|
|
||||||
CONFIG_USB_SERIAL_FTDI_SIO=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_MPR=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
|
|
||||||
CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
|
||||||
CONFIG_USB_SERIAL_MCT_U232=y
|
|
||||||
CONFIG_NEW_LEDS=y
|
|
||||||
CONFIG_LEDS_CLASS=y
|
|
||||||
CONFIG_LEDS_GPIO=y
|
|
||||||
CONFIG_LEDS_TRIGGERS=y
|
|
||||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_CRAMFS=y
|
|
||||||
CONFIG_NFS_FS=y
|
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_NFS_V4=y
|
|
||||||
CONFIG_ROOT_NFS=y
|
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_DEBUG_USER=y
|
|
||||||
CONFIG_DEBUG_LL=y
|
|
|
@ -1,99 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_IKCONFIG=y
|
|
||||||
CONFIG_IKCONFIG_PROC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
|
||||||
CONFIG_SLAB=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
# CONFIG_IOSCHED_DEADLINE is not set
|
|
||||||
# CONFIG_IOSCHED_CFQ is not set
|
|
||||||
CONFIG_ARCH_AT91=y
|
|
||||||
CONFIG_MACH_ECBAT91=y
|
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
|
||||||
CONFIG_PCCARD=y
|
|
||||||
CONFIG_AT91_CF=y
|
|
||||||
CONFIG_PREEMPT=y
|
|
||||||
CONFIG_LEDS=y
|
|
||||||
CONFIG_LEDS_CPU=y
|
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_CMDLINE="rootfstype=reiserfs root=/dev/mmcblk0p1 console=ttyS0,115200n8 rootdelay=1"
|
|
||||||
CONFIG_FPE_NWFPE=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
CONFIG_IP_PNP_DHCP=y
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_CFG80211=y
|
|
||||||
CONFIG_MAC80211=y
|
|
||||||
# CONFIG_STANDALONE is not set
|
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
|
||||||
CONFIG_MTD_AFS_PARTS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_DATAFLASH=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
|
||||||
CONFIG_SCSI=y
|
|
||||||
CONFIG_BLK_DEV_SD=y
|
|
||||||
CONFIG_CHR_DEV_SG=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
|
||||||
# CONFIG_NETDEV_1000 is not set
|
|
||||||
# CONFIG_NETDEV_10000 is not set
|
|
||||||
CONFIG_PPP=y
|
|
||||||
CONFIG_PPP_MULTILINK=y
|
|
||||||
CONFIG_PPP_FILTER=y
|
|
||||||
CONFIG_PPP_ASYNC=y
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
# CONFIG_SERIO is not set
|
|
||||||
CONFIG_SERIAL_ATMEL=y
|
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
|
||||||
CONFIG_HW_RANDOM=y
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_SPI=y
|
|
||||||
CONFIG_SPI_BITBANG=y
|
|
||||||
CONFIG_WATCHDOG=y
|
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
# CONFIG_USB_HID is not set
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_PRINTER=y
|
|
||||||
CONFIG_USB_STORAGE=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_MMC=y
|
|
||||||
CONFIG_MMC_DEBUG=y
|
|
||||||
CONFIG_MMC_AT91=m
|
|
||||||
CONFIG_NEW_LEDS=y
|
|
||||||
CONFIG_LEDS_CLASS=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
# CONFIG_RTC_HCTOSYS is not set
|
|
||||||
CONFIG_RTC_DRV_AT91RM9200=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_EXT3_FS=y
|
|
||||||
CONFIG_REISERFS_FS=y
|
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_CONFIGFS_FS=y
|
|
||||||
CONFIG_CRAMFS=y
|
|
||||||
CONFIG_NFS_FS=y
|
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_NFS_V3_ACL=y
|
|
||||||
CONFIG_NFS_V4=y
|
|
||||||
CONFIG_ROOT_NFS=y
|
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
|
||||||
CONFIG_DEBUG_USER=y
|
|
||||||
CONFIG_CRYPTO_PCBC=y
|
|
||||||
CONFIG_CRYPTO_SHA1=y
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue