Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: arch/sh/kernel/vmlinux.lds.S
This commit is contained in:
		
				commit
				
					
						ea88023b34
					
				
			
		
					 3897 changed files with 316200 additions and 138946 deletions
				
			
		
							
								
								
									
										2
									
								
								CREDITS
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								CREDITS
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -2800,7 +2800,7 @@ D: Starter of Linux1394 effort
 | 
			
		|||
S: ask per mail for current address
 | 
			
		||||
 | 
			
		||||
N: Nicolas Pitre
 | 
			
		||||
E: nico@cam.org
 | 
			
		||||
E: nico@fluxnic.net
 | 
			
		||||
D: StrongARM SA1100 support integrator & hacker
 | 
			
		||||
D: Xscale PXA architecture
 | 
			
		||||
D: unified SMC 91C9x/91C11x ethernet driver (smc91x)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,6 +82,8 @@ block/
 | 
			
		|||
	- info on the Block I/O (BIO) layer.
 | 
			
		||||
blockdev/
 | 
			
		||||
	- info on block devices & drivers
 | 
			
		||||
btmrvl.txt
 | 
			
		||||
	- info on Marvell Bluetooth driver usage.
 | 
			
		||||
cachetlb.txt
 | 
			
		||||
	- describes the cache/TLB flushing interfaces Linux uses.
 | 
			
		||||
cdrom/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -743,3 +743,80 @@ Revised:
 | 
			
		|||
	RCU, realtime RCU, sleepable RCU, performance.
 | 
			
		||||
"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@article{PaulEMcKenney2008RCUOSR
 | 
			
		||||
,author="Paul E. McKenney and Jonathan Walpole"
 | 
			
		||||
,title="Introducing technology into the {Linux} kernel: a case study"
 | 
			
		||||
,Year="2008"
 | 
			
		||||
,journal="SIGOPS Oper. Syst. Rev."
 | 
			
		||||
,volume="42"
 | 
			
		||||
,number="5"
 | 
			
		||||
,pages="4--17"
 | 
			
		||||
,issn="0163-5980"
 | 
			
		||||
,doi={http://doi.acm.org/10.1145/1400097.1400099}
 | 
			
		||||
,publisher="ACM"
 | 
			
		||||
,address="New York, NY, USA"
 | 
			
		||||
,annotation={
 | 
			
		||||
	Linux changed RCU to a far greater degree than RCU has changed Linux.
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@unpublished{PaulEMcKenney2008HierarchicalRCU
 | 
			
		||||
,Author="Paul E. McKenney"
 | 
			
		||||
,Title="Hierarchical {RCU}"
 | 
			
		||||
,month="November"
 | 
			
		||||
,day="3"
 | 
			
		||||
,year="2008"
 | 
			
		||||
,note="Available:
 | 
			
		||||
\url{http://lwn.net/Articles/305782/}
 | 
			
		||||
[Viewed November 6, 2008]"
 | 
			
		||||
,annotation="
 | 
			
		||||
	RCU with combining-tree-based grace-period detection,
 | 
			
		||||
	permitting it to handle thousands of CPUs.
 | 
			
		||||
"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@conference{PaulEMcKenney2009MaliciousURCU
 | 
			
		||||
,Author="Paul E. McKenney"
 | 
			
		||||
,Title="Using a Malicious User-Level {RCU} to Torture {RCU}-Based Algorithms"
 | 
			
		||||
,Booktitle="linux.conf.au 2009"
 | 
			
		||||
,month="January"
 | 
			
		||||
,year="2009"
 | 
			
		||||
,address="Hobart, Australia"
 | 
			
		||||
,note="Available:
 | 
			
		||||
\url{http://www.rdrop.com/users/paulmck/RCU/urcutorture.2009.01.22a.pdf}
 | 
			
		||||
[Viewed February 2, 2009]"
 | 
			
		||||
,annotation="
 | 
			
		||||
	Realtime RCU and torture-testing RCU uses.
 | 
			
		||||
"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@unpublished{MathieuDesnoyers2009URCU
 | 
			
		||||
,Author="Mathieu Desnoyers"
 | 
			
		||||
,Title="[{RFC} git tree] Userspace {RCU} (urcu) for {Linux}"
 | 
			
		||||
,month="February"
 | 
			
		||||
,day="5"
 | 
			
		||||
,year="2009"
 | 
			
		||||
,note="Available:
 | 
			
		||||
\url{http://lkml.org/lkml/2009/2/5/572}
 | 
			
		||||
\url{git://lttng.org/userspace-rcu.git}
 | 
			
		||||
[Viewed February 20, 2009]"
 | 
			
		||||
,annotation="
 | 
			
		||||
	Mathieu Desnoyers's user-space RCU implementation.
 | 
			
		||||
	git://lttng.org/userspace-rcu.git
 | 
			
		||||
"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@unpublished{PaulEMcKenney2009BloatWatchRCU
 | 
			
		||||
,Author="Paul E. McKenney"
 | 
			
		||||
,Title="{RCU}: The {Bloatwatch} Edition"
 | 
			
		||||
,month="March"
 | 
			
		||||
,day="17"
 | 
			
		||||
,year="2009"
 | 
			
		||||
,note="Available:
 | 
			
		||||
\url{http://lwn.net/Articles/323929/}
 | 
			
		||||
[Viewed March 20, 2009]"
 | 
			
		||||
,annotation="
 | 
			
		||||
	Uniprocessor assumptions allow simplified RCU implementation.
 | 
			
		||||
"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,14 +2,13 @@ RCU on Uniprocessor Systems
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
A common misconception is that, on UP systems, the call_rcu() primitive
 | 
			
		||||
may immediately invoke its function, and that the synchronize_rcu()
 | 
			
		||||
primitive may return immediately.  The basis of this misconception
 | 
			
		||||
may immediately invoke its function.  The basis of this misconception
 | 
			
		||||
is that since there is only one CPU, it should not be necessary to
 | 
			
		||||
wait for anything else to get done, since there are no other CPUs for
 | 
			
		||||
anything else to be happening on.  Although this approach will -sort- -of-
 | 
			
		||||
work a surprising amount of the time, it is a very bad idea in general.
 | 
			
		||||
This document presents three examples that demonstrate exactly how bad an
 | 
			
		||||
idea this is.
 | 
			
		||||
This document presents three examples that demonstrate exactly how bad
 | 
			
		||||
an idea this is.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Example 1: softirq Suicide
 | 
			
		||||
| 
						 | 
				
			
			@ -82,11 +81,18 @@ Quick Quiz #2: What locking restriction must RCU callbacks respect?
 | 
			
		|||
 | 
			
		||||
Summary
 | 
			
		||||
 | 
			
		||||
Permitting call_rcu() to immediately invoke its arguments or permitting
 | 
			
		||||
synchronize_rcu() to immediately return breaks RCU, even on a UP system.
 | 
			
		||||
So do not do it!  Even on a UP system, the RCU infrastructure -must-
 | 
			
		||||
respect grace periods, and -must- invoke callbacks from a known environment
 | 
			
		||||
in which no locks are held.
 | 
			
		||||
Permitting call_rcu() to immediately invoke its arguments breaks RCU,
 | 
			
		||||
even on a UP system.  So do not do it!  Even on a UP system, the RCU
 | 
			
		||||
infrastructure -must- respect grace periods, and -must- invoke callbacks
 | 
			
		||||
from a known environment in which no locks are held.
 | 
			
		||||
 | 
			
		||||
It -is- safe for synchronize_sched() and synchronize_rcu_bh() to return
 | 
			
		||||
immediately on an UP system.  It is also safe for synchronize_rcu()
 | 
			
		||||
to return immediately on UP systems, except when running preemptable
 | 
			
		||||
RCU.
 | 
			
		||||
 | 
			
		||||
Quick Quiz #3: Why can't synchronize_rcu() return immediately on
 | 
			
		||||
	UP systems running preemptable RCU?
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Answer to Quick Quiz #1:
 | 
			
		||||
| 
						 | 
				
			
			@ -117,3 +123,13 @@ Answer to Quick Quiz #2:
 | 
			
		|||
	callbacks acquire locks directly.  However, a great many RCU
 | 
			
		||||
	callbacks do acquire locks -indirectly-, for example, via
 | 
			
		||||
	the kfree() primitive.
 | 
			
		||||
 | 
			
		||||
Answer to Quick Quiz #3:
 | 
			
		||||
	Why can't synchronize_rcu() return immediately on UP systems
 | 
			
		||||
	running preemptable RCU?
 | 
			
		||||
 | 
			
		||||
	Because some other task might have been preempted in the middle
 | 
			
		||||
	of an RCU read-side critical section.  If synchronize_rcu()
 | 
			
		||||
	simply immediately returned, it would prematurely signal the
 | 
			
		||||
	end of the grace period, which would come as a nasty shock to
 | 
			
		||||
	that other thread when it started running again.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,10 @@ over a rather long period of time, but improvements are always welcome!
 | 
			
		|||
	structure is updated more than about 10% of the time, then
 | 
			
		||||
	you should strongly consider some other approach, unless
 | 
			
		||||
	detailed performance measurements show that RCU is nonetheless
 | 
			
		||||
	the right tool for the job.
 | 
			
		||||
	the right tool for the job.  Yes, you might think of RCU
 | 
			
		||||
	as simply cutting overhead off of the readers and imposing it
 | 
			
		||||
	on the writers.  That is exactly why normal uses of RCU will
 | 
			
		||||
	do much more reading than updating.
 | 
			
		||||
 | 
			
		||||
	Another exception is where performance is not an issue, and RCU
 | 
			
		||||
	provides a simpler implementation.  An example of this situation
 | 
			
		||||
| 
						 | 
				
			
			@ -240,10 +243,11 @@ over a rather long period of time, but improvements are always welcome!
 | 
			
		|||
	instead need to use synchronize_irq() or synchronize_sched().
 | 
			
		||||
 | 
			
		||||
12.	Any lock acquired by an RCU callback must be acquired elsewhere
 | 
			
		||||
	with irq disabled, e.g., via spin_lock_irqsave().  Failing to
 | 
			
		||||
	disable irq on a given acquisition of that lock will result in
 | 
			
		||||
	deadlock as soon as the RCU callback happens to interrupt that
 | 
			
		||||
	acquisition's critical section.
 | 
			
		||||
	with softirq disabled, e.g., via spin_lock_irqsave(),
 | 
			
		||||
	spin_lock_bh(), etc.  Failing to disable irq on a given
 | 
			
		||||
	acquisition of that lock will result in deadlock as soon as the
 | 
			
		||||
	RCU callback happens to interrupt that acquisition's critical
 | 
			
		||||
	section.
 | 
			
		||||
 | 
			
		||||
13.	RCU callbacks can be and are executed in parallel.  In many cases,
 | 
			
		||||
	the callback code simply wrappers around kfree(), so that this
 | 
			
		||||
| 
						 | 
				
			
			@ -310,3 +314,9 @@ over a rather long period of time, but improvements are always welcome!
 | 
			
		|||
	Because these primitives only wait for pre-existing readers,
 | 
			
		||||
	it is the caller's responsibility to guarantee safety to
 | 
			
		||||
	any subsequent readers.
 | 
			
		||||
 | 
			
		||||
16.	The various RCU read-side primitives do -not- contain memory
 | 
			
		||||
	barriers.  The CPU (and in some cases, the compiler) is free
 | 
			
		||||
	to reorder code into and out of RCU read-side critical sections.
 | 
			
		||||
	It is the responsibility of the RCU update-side primitives to
 | 
			
		||||
	deal with this.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ o	How can the updater tell when a grace period has completed
 | 
			
		|||
	executed in user mode, or executed in the idle loop, we can
 | 
			
		||||
	safely free up that item.
 | 
			
		||||
 | 
			
		||||
	Preemptible variants of RCU (CONFIG_PREEMPT_RCU) get the
 | 
			
		||||
	Preemptible variants of RCU (CONFIG_TREE_PREEMPT_RCU) get the
 | 
			
		||||
	same effect, but require that the readers manipulate CPU-local
 | 
			
		||||
	counters.  These counters allow limited types of blocking
 | 
			
		||||
	within RCU read-side critical sections.  SRCU also uses
 | 
			
		||||
| 
						 | 
				
			
			@ -79,10 +79,10 @@ o	I hear that RCU is patented?  What is with that?
 | 
			
		|||
o	I hear that RCU needs work in order to support realtime kernels?
 | 
			
		||||
 | 
			
		||||
	This work is largely completed.  Realtime-friendly RCU can be
 | 
			
		||||
	enabled via the CONFIG_PREEMPT_RCU kernel configuration parameter.
 | 
			
		||||
	However, work is in progress for enabling priority boosting of
 | 
			
		||||
	preempted RCU read-side critical sections.  This is needed if you
 | 
			
		||||
	have CPU-bound realtime threads.
 | 
			
		||||
	enabled via the CONFIG_TREE_PREEMPT_RCU kernel configuration
 | 
			
		||||
	parameter.  However, work is in progress for enabling priority
 | 
			
		||||
	boosting of preempted RCU read-side critical sections.	This is
 | 
			
		||||
	needed if you have CPU-bound realtime threads.
 | 
			
		||||
 | 
			
		||||
o	Where can I find more information on RCU?
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,6 +170,13 @@ module invokes call_rcu() from timers, you will need to first cancel all
 | 
			
		|||
the timers, and only then invoke rcu_barrier() to wait for any remaining
 | 
			
		||||
RCU callbacks to complete.
 | 
			
		||||
 | 
			
		||||
Of course, if you module uses call_rcu_bh(), you will need to invoke
 | 
			
		||||
rcu_barrier_bh() before unloading.  Similarly, if your module uses
 | 
			
		||||
call_rcu_sched(), you will need to invoke rcu_barrier_sched() before
 | 
			
		||||
unloading.  If your module uses call_rcu(), call_rcu_bh(), -and-
 | 
			
		||||
call_rcu_sched(), then you will need to invoke each of rcu_barrier(),
 | 
			
		||||
rcu_barrier_bh(), and rcu_barrier_sched().
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Implementing rcu_barrier()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,8 +76,10 @@ torture_type	The type of RCU to test: "rcu" for the rcu_read_lock() API,
 | 
			
		|||
		"rcu_sync" for rcu_read_lock() with synchronous reclamation,
 | 
			
		||||
		"rcu_bh" for the rcu_read_lock_bh() API, "rcu_bh_sync" for
 | 
			
		||||
		rcu_read_lock_bh() with synchronous reclamation, "srcu" for
 | 
			
		||||
		the "srcu_read_lock()" API, and "sched" for the use of
 | 
			
		||||
		preempt_disable() together with synchronize_sched().
 | 
			
		||||
		the "srcu_read_lock()" API, "sched" for the use of
 | 
			
		||||
		preempt_disable() together with synchronize_sched(),
 | 
			
		||||
		and "sched_expedited" for the use of preempt_disable()
 | 
			
		||||
		with synchronize_sched_expedited().
 | 
			
		||||
 | 
			
		||||
verbose		Enable debug printk()s.  Default is disabled.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -162,6 +164,23 @@ of the "old" and "current" counters for the corresponding CPU.  The
 | 
			
		|||
"idx" value maps the "old" and "current" values to the underlying array,
 | 
			
		||||
and is useful for debugging.
 | 
			
		||||
 | 
			
		||||
Similarly, sched_expedited RCU provides the following:
 | 
			
		||||
 | 
			
		||||
	sched_expedited-torture: rtc: d0000000016c1880 ver: 1090796 tfle: 0 rta: 1090796 rtaf: 0 rtf: 1090787 rtmbe: 0 nt: 27713319
 | 
			
		||||
	sched_expedited-torture: Reader Pipe:  12660320201 95875 0 0 0 0 0 0 0 0 0
 | 
			
		||||
	sched_expedited-torture: Reader Batch:  12660424885 0 0 0 0 0 0 0 0 0 0
 | 
			
		||||
	sched_expedited-torture: Free-Block Circulation:  1090795 1090795 1090794 1090793 1090792 1090791 1090790 1090789 1090788 1090787 0
 | 
			
		||||
	state: -1 / 0:0 3:0 4:0
 | 
			
		||||
 | 
			
		||||
As before, the first four lines are similar to those for RCU.
 | 
			
		||||
The last line shows the task-migration state.  The first number is
 | 
			
		||||
-1 if synchronize_sched_expedited() is idle, -2 if in the process of
 | 
			
		||||
posting wakeups to the migration kthreads, and N when waiting on CPU N.
 | 
			
		||||
Each of the colon-separated fields following the "/" is a CPU:state pair.
 | 
			
		||||
Valid states are "0" for idle, "1" for waiting for quiescent state,
 | 
			
		||||
"2" for passed through quiescent state, and "3" when a race with a
 | 
			
		||||
CPU-hotplug event forces use of the synchronize_sched() primitive.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
USAGE
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -191,8 +191,7 @@ rcu/rcuhier (which displays the struct rcu_node hierarchy).
 | 
			
		|||
 | 
			
		||||
The output of "cat rcu/rcudata" looks as follows:
 | 
			
		||||
 | 
			
		||||
rcu:
 | 
			
		||||
rcu:
 | 
			
		||||
rcu_sched:
 | 
			
		||||
  0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10
 | 
			
		||||
  1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10
 | 
			
		||||
  2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10
 | 
			
		||||
| 
						 | 
				
			
			@ -306,7 +305,7 @@ comma-separated-variable spreadsheet format.
 | 
			
		|||
 | 
			
		||||
The output of "cat rcu/rcugp" looks as follows:
 | 
			
		||||
 | 
			
		||||
rcu: completed=33062  gpnum=33063
 | 
			
		||||
rcu_sched: completed=33062  gpnum=33063
 | 
			
		||||
rcu_bh: completed=464  gpnum=464
 | 
			
		||||
 | 
			
		||||
Again, this output is for both "rcu" and "rcu_bh".  The fields are
 | 
			
		||||
| 
						 | 
				
			
			@ -413,7 +412,7 @@ o	Each element of the form "1/1 0:127 ^0" represents one struct
 | 
			
		|||
 | 
			
		||||
The output of "cat rcu/rcu_pending" looks as follows:
 | 
			
		||||
 | 
			
		||||
rcu:
 | 
			
		||||
rcu_sched:
 | 
			
		||||
  0 np=255892 qsp=53936 cbr=0 cng=14417 gpc=10033 gps=24320 nf=6445 nn=146741
 | 
			
		||||
  1 np=261224 qsp=54638 cbr=0 cng=25723 gpc=16310 gps=2849 nf=5912 nn=155792
 | 
			
		||||
  2 np=237496 qsp=49664 cbr=0 cng=2762 gpc=45478 gps=1762 nf=1201 nn=136629
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,10 +136,10 @@ rcu_read_lock()
 | 
			
		|||
	Used by a reader to inform the reclaimer that the reader is
 | 
			
		||||
	entering an RCU read-side critical section.  It is illegal
 | 
			
		||||
	to block while in an RCU read-side critical section, though
 | 
			
		||||
	kernels built with CONFIG_PREEMPT_RCU can preempt RCU read-side
 | 
			
		||||
	critical sections.  Any RCU-protected data structure accessed
 | 
			
		||||
	during an RCU read-side critical section is guaranteed to remain
 | 
			
		||||
	unreclaimed for the full duration of that critical section.
 | 
			
		||||
	kernels built with CONFIG_TREE_PREEMPT_RCU can preempt RCU
 | 
			
		||||
	read-side critical sections.  Any RCU-protected data structure
 | 
			
		||||
	accessed during an RCU read-side critical section is guaranteed to
 | 
			
		||||
	remain unreclaimed for the full duration of that critical section.
 | 
			
		||||
	Reference counts may be used in conjunction with RCU to maintain
 | 
			
		||||
	longer-term references to data structures.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -785,6 +785,7 @@ RCU pointer/list traversal:
 | 
			
		|||
	rcu_dereference
 | 
			
		||||
	list_for_each_entry_rcu
 | 
			
		||||
	hlist_for_each_entry_rcu
 | 
			
		||||
	hlist_nulls_for_each_entry_rcu
 | 
			
		||||
 | 
			
		||||
	list_for_each_continue_rcu	(to be deprecated in favor of new
 | 
			
		||||
					 list_for_each_entry_continue_rcu)
 | 
			
		||||
| 
						 | 
				
			
			@ -807,19 +808,23 @@ RCU:	Critical sections	Grace period		Barrier
 | 
			
		|||
 | 
			
		||||
	rcu_read_lock		synchronize_net		rcu_barrier
 | 
			
		||||
	rcu_read_unlock		synchronize_rcu
 | 
			
		||||
				synchronize_rcu_expedited
 | 
			
		||||
				call_rcu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bh:	Critical sections	Grace period		Barrier
 | 
			
		||||
 | 
			
		||||
	rcu_read_lock_bh	call_rcu_bh		rcu_barrier_bh
 | 
			
		||||
	rcu_read_unlock_bh
 | 
			
		||||
	rcu_read_unlock_bh	synchronize_rcu_bh
 | 
			
		||||
				synchronize_rcu_bh_expedited
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sched:	Critical sections	Grace period		Barrier
 | 
			
		||||
 | 
			
		||||
	[preempt_disable]	synchronize_sched	rcu_barrier_sched
 | 
			
		||||
	[and friends]		call_rcu_sched
 | 
			
		||||
	rcu_read_lock_sched	synchronize_sched	rcu_barrier_sched
 | 
			
		||||
	rcu_read_unlock_sched	call_rcu_sched
 | 
			
		||||
	[preempt_disable]	synchronize_sched_expedited
 | 
			
		||||
	[and friends]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SRCU:	Critical sections	Grace period		Barrier
 | 
			
		||||
| 
						 | 
				
			
			@ -827,6 +832,9 @@ SRCU:	Critical sections	Grace period		Barrier
 | 
			
		|||
	srcu_read_lock		synchronize_srcu	N/A
 | 
			
		||||
	srcu_read_unlock
 | 
			
		||||
 | 
			
		||||
SRCU:	Initialization/cleanup
 | 
			
		||||
	init_srcu_struct
 | 
			
		||||
	cleanup_srcu_struct
 | 
			
		||||
 | 
			
		||||
See the comment headers in the source code (or the docbook generated
 | 
			
		||||
from them) for more information.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,4 +40,4 @@ Notes:
 | 
			
		|||
  mode, the timing is off so the image is corrupted.  This will be
 | 
			
		||||
  fixed soon.
 | 
			
		||||
 | 
			
		||||
Any contribution can be sent to nico@cam.org and will be greatly welcome!
 | 
			
		||||
Any contribution can be sent to nico@fluxnic.net and will be greatly welcome!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -240,7 +240,7 @@ Then, rebooting the Assabet is just a matter of waiting for the login prompt.
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
Nicolas Pitre
 | 
			
		||||
nico@cam.org
 | 
			
		||||
nico@fluxnic.net
 | 
			
		||||
June 12, 2001
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ little modifications.
 | 
			
		|||
 | 
			
		||||
Any contribution is welcome.
 | 
			
		||||
 | 
			
		||||
Please send patches to nico@cam.org
 | 
			
		||||
Please send patches to nico@fluxnic.net
 | 
			
		||||
 | 
			
		||||
Have Fun !
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ For more details, contact Applied Data Systems or see
 | 
			
		|||
http://www.applieddata.net/products.html
 | 
			
		||||
 | 
			
		||||
The original Linux support for this product has been provided by 
 | 
			
		||||
Nicolas Pitre <nico@cam.org>. Continued development work by
 | 
			
		||||
Nicolas Pitre <nico@fluxnic.net>. Continued development work by
 | 
			
		||||
Woojung Huh <whuh@applieddata.net>
 | 
			
		||||
 | 
			
		||||
It's currently possible to mount a root filesystem via NFS providing a
 | 
			
		||||
| 
						 | 
				
			
			@ -94,5 +94,5 @@ Notes:
 | 
			
		|||
  mode, the timing is off so the image is corrupted.  This will be
 | 
			
		||||
  fixed soon.
 | 
			
		||||
 | 
			
		||||
Any contribution can be sent to nico@cam.org and will be greatly welcome!
 | 
			
		||||
Any contribution can be sent to nico@fluxnic.net and will be greatly welcome!
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ For more details, contact Applied Data Systems or see
 | 
			
		|||
http://www.applieddata.net/products.html
 | 
			
		||||
 | 
			
		||||
The original Linux support for this product has been provided by
 | 
			
		||||
Nicolas Pitre <nico@cam.org>. Continued development work by
 | 
			
		||||
Nicolas Pitre <nico@fluxnic.net>. Continued development work by
 | 
			
		||||
Woojung Huh <whuh@applieddata.net>
 | 
			
		||||
 | 
			
		||||
Use 'make graphicsmaster_config' before any 'make config'.
 | 
			
		||||
| 
						 | 
				
			
			@ -50,4 +50,4 @@ Notes:
 | 
			
		|||
  mode, the timing is off so the image is corrupted.  This will be
 | 
			
		||||
  fixed soon.
 | 
			
		||||
 | 
			
		||||
Any contribution can be sent to nico@cam.org and will be greatly welcome!
 | 
			
		||||
Any contribution can be sent to nico@fluxnic.net and will be greatly welcome!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ Of course Victor is using Linux as its main operating system.
 | 
			
		|||
The Victor implementation for Linux is maintained by Nicolas Pitre:
 | 
			
		||||
 | 
			
		||||
	nico@visuaide.com
 | 
			
		||||
	nico@cam.org
 | 
			
		||||
	nico@fluxnic.net
 | 
			
		||||
 | 
			
		||||
For any comments, please feel free to contact me through the above
 | 
			
		||||
addresses.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										75
									
								
								Documentation/arm/Samsung-S3C24XX/CPUfreq.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								Documentation/arm/Samsung-S3C24XX/CPUfreq.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
		S3C24XX CPUfreq support
 | 
			
		||||
		=======================
 | 
			
		||||
 | 
			
		||||
Introduction
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
 The S3C24XX series support a number of power saving systems, such as
 | 
			
		||||
 the ability to change the core, memory and peripheral operating
 | 
			
		||||
 frequencies. The core control is exported via the CPUFreq driver
 | 
			
		||||
 which has a number of different manual or automatic controls over the
 | 
			
		||||
 rate the core is running at.
 | 
			
		||||
 | 
			
		||||
 There are two forms of the driver depending on the specific CPU and
 | 
			
		||||
 how the clocks are arranged. The first implementation used as single
 | 
			
		||||
 PLL to feed the ARM, memory and peripherals via a series of dividers
 | 
			
		||||
 and muxes and this is the implementation that is documented here. A
 | 
			
		||||
 newer version where there is a seperate PLL and clock divider for the
 | 
			
		||||
 ARM core is available as a seperate driver.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Layout
 | 
			
		||||
------
 | 
			
		||||
 | 
			
		||||
 The code core manages the CPU specific drivers, any data that they
 | 
			
		||||
 need to register and the interface to the generic drivers/cpufreq
 | 
			
		||||
 system. Each CPU registers a driver to control the PLL, clock dividers
 | 
			
		||||
 and anything else associated with it. Any board that wants to use this
 | 
			
		||||
 framework needs to supply at least basic details of what is required.
 | 
			
		||||
 | 
			
		||||
 The core registers with drivers/cpufreq at init time if all the data
 | 
			
		||||
 necessary has been supplied.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CPU support
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
 The support for each CPU depends on the facilities provided by the
 | 
			
		||||
 SoC and the driver as each device has different PLL and clock chains
 | 
			
		||||
 associated with it.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Slow Mode
 | 
			
		||||
---------
 | 
			
		||||
 | 
			
		||||
 The SLOW mode where the PLL is turned off altogether and the
 | 
			
		||||
 system is fed by the external crystal input is currently not
 | 
			
		||||
 supported.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sysfs
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
 The core code exports extra information via sysfs in the directory
 | 
			
		||||
 devices/system/cpu/cpu0/arch-freq.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Board Support
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
 Each board that wants to use the cpufreq code must register some basic
 | 
			
		||||
 information with the core driver to provide information about what the
 | 
			
		||||
 board requires and any restrictions being placed on it.
 | 
			
		||||
 | 
			
		||||
 The board needs to supply information about whether it needs the IO bank
 | 
			
		||||
 timings changing, any maximum frequency limits and information about the
 | 
			
		||||
 SDRAM refresh rate.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Document Author
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Ben Dooks, Copyright 2009 Simtec Electronics
 | 
			
		||||
Licensed under GPLv2
 | 
			
		||||
							
								
								
									
										119
									
								
								Documentation/btmrvl.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								Documentation/btmrvl.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,119 @@
 | 
			
		|||
=======================================================================
 | 
			
		||||
		README for btmrvl driver
 | 
			
		||||
=======================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
All commands are used via debugfs interface.
 | 
			
		||||
 | 
			
		||||
=====================
 | 
			
		||||
Set/get driver configurations:
 | 
			
		||||
 | 
			
		||||
Path:	/debug/btmrvl/config/
 | 
			
		||||
 | 
			
		||||
gpiogap=[n]
 | 
			
		||||
hscfgcmd
 | 
			
		||||
	These commands are used to configure the host sleep parameters.
 | 
			
		||||
	bit 8:0  -- Gap
 | 
			
		||||
	bit 16:8 -- GPIO
 | 
			
		||||
 | 
			
		||||
	where GPIO is the pin number of GPIO used to wake up the host.
 | 
			
		||||
	It could be any valid GPIO pin# (e.g. 0-7) or 0xff (SDIO interface
 | 
			
		||||
	wakeup will be used instead).
 | 
			
		||||
 | 
			
		||||
	where Gap is the gap in milli seconds between wakeup signal and
 | 
			
		||||
	wakeup event, or 0xff for special host sleep setting.
 | 
			
		||||
 | 
			
		||||
	Usage:
 | 
			
		||||
		# Use SDIO interface to wake up the host and set GAP to 0x80:
 | 
			
		||||
		echo 0xff80 > /debug/btmrvl/config/gpiogap
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/hscfgcmd
 | 
			
		||||
 | 
			
		||||
		# Use GPIO pin #3 to wake up the host and set GAP to 0xff:
 | 
			
		||||
		echo 0x03ff >  /debug/btmrvl/config/gpiogap
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/hscfgcmd
 | 
			
		||||
 | 
			
		||||
psmode=[n]
 | 
			
		||||
pscmd
 | 
			
		||||
	These commands are used to enable/disable auto sleep mode
 | 
			
		||||
 | 
			
		||||
	where the option is:
 | 
			
		||||
			1 	-- Enable auto sleep mode
 | 
			
		||||
			0 	-- Disable auto sleep mode
 | 
			
		||||
 | 
			
		||||
	Usage:
 | 
			
		||||
		# Enable auto sleep mode
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/psmode
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/pscmd
 | 
			
		||||
 | 
			
		||||
		# Disable auto sleep mode
 | 
			
		||||
		echo 0 > /debug/btmrvl/config/psmode
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/pscmd
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
hsmode=[n]
 | 
			
		||||
hscmd
 | 
			
		||||
	These commands are used to enable host sleep or wake up firmware
 | 
			
		||||
 | 
			
		||||
	where the option is:
 | 
			
		||||
			1	-- Enable host sleep
 | 
			
		||||
			0	-- Wake up firmware
 | 
			
		||||
 | 
			
		||||
	Usage:
 | 
			
		||||
		# Enable host sleep
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/hsmode
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/hscmd
 | 
			
		||||
 | 
			
		||||
		# Wake up firmware
 | 
			
		||||
		echo 0 > /debug/btmrvl/config/hsmode
 | 
			
		||||
		echo 1 > /debug/btmrvl/config/hscmd
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
======================
 | 
			
		||||
Get driver status:
 | 
			
		||||
 | 
			
		||||
Path:	/debug/btmrvl/status/
 | 
			
		||||
 | 
			
		||||
Usage:
 | 
			
		||||
	cat /debug/btmrvl/status/<args>
 | 
			
		||||
 | 
			
		||||
where the args are:
 | 
			
		||||
 | 
			
		||||
curpsmode
 | 
			
		||||
	This command displays current auto sleep status.
 | 
			
		||||
 | 
			
		||||
psstate
 | 
			
		||||
	This command display the power save state.
 | 
			
		||||
 | 
			
		||||
hsstate
 | 
			
		||||
	This command display the host sleep state.
 | 
			
		||||
 | 
			
		||||
txdnldrdy
 | 
			
		||||
	This command displays the value of Tx download ready flag.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
Use hcitool to issue raw hci command, refer to hcitool manual
 | 
			
		||||
 | 
			
		||||
	Usage: Hcitool cmd <ogf> <ocf> [Parameters]
 | 
			
		||||
 | 
			
		||||
	Interface Control Command
 | 
			
		||||
	hcitool cmd 0x3f 0x5b 0xf5 0x01 0x00    --Enable All interface
 | 
			
		||||
	hcitool cmd 0x3f 0x5b 0xf5 0x01 0x01    --Enable Wlan interface
 | 
			
		||||
	hcitool cmd 0x3f 0x5b 0xf5 0x01 0x02    --Enable BT interface
 | 
			
		||||
	hcitool cmd 0x3f 0x5b 0xf5 0x00 0x00    --Disable All interface
 | 
			
		||||
	hcitool cmd 0x3f 0x5b 0xf5 0x00 0x01    --Disable Wlan interface
 | 
			
		||||
	hcitool cmd 0x3f 0x5b 0xf5 0x00 0x02    --Disable BT interface
 | 
			
		||||
 | 
			
		||||
=======================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SD8688 firmware:
 | 
			
		||||
 | 
			
		||||
/lib/firmware/sd8688_helper.bin
 | 
			
		||||
/lib/firmware/sd8688.bin
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The images can be downloaded from:
 | 
			
		||||
 | 
			
		||||
git.infradead.org/users/dwmw2/linux-firmware.git/libertas/
 | 
			
		||||
| 
						 | 
				
			
			@ -9,3 +9,8 @@ hostprogs-y := ucon
 | 
			
		|||
always := $(hostprogs-y)
 | 
			
		||||
 | 
			
		||||
HOSTCFLAGS_ucon.o += -I$(objtree)/usr/include
 | 
			
		||||
 | 
			
		||||
all: modules
 | 
			
		||||
 | 
			
		||||
modules clean:
 | 
			
		||||
	$(MAKE) -C ../.. SUBDIRS=$(PWD) $@
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,8 @@
 | 
			
		|||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define pr_fmt(fmt) "cn_test: " fmt
 | 
			
		||||
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/moduleparam.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,18 +29,17 @@
 | 
			
		|||
 | 
			
		||||
#include <linux/connector.h>
 | 
			
		||||
 | 
			
		||||
static struct cb_id cn_test_id = { 0x123, 0x456 };
 | 
			
		||||
static struct cb_id cn_test_id = { CN_NETLINK_USERS + 3, 0x456 };
 | 
			
		||||
static char cn_test_name[] = "cn_test";
 | 
			
		||||
static struct sock *nls;
 | 
			
		||||
static struct timer_list cn_test_timer;
 | 
			
		||||
 | 
			
		||||
void cn_test_callback(void *data)
 | 
			
		||||
static void cn_test_callback(struct cn_msg *msg)
 | 
			
		||||
{
 | 
			
		||||
	struct cn_msg *msg = (struct cn_msg *)data;
 | 
			
		||||
 | 
			
		||||
	printk("%s: %lu: idx=%x, val=%x, seq=%u, ack=%u, len=%d: %s.\n",
 | 
			
		||||
	pr_info("%s: %lu: idx=%x, val=%x, seq=%u, ack=%u, len=%d: %s.\n",
 | 
			
		||||
	        __func__, jiffies, msg->id.idx, msg->id.val,
 | 
			
		||||
	       msg->seq, msg->ack, msg->len, (char *)msg->data);
 | 
			
		||||
	        msg->seq, msg->ack, msg->len,
 | 
			
		||||
	        msg->len ? (char *)msg->data : "");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -63,9 +64,7 @@ static int cn_test_want_notify(void)
 | 
			
		|||
 | 
			
		||||
	skb = alloc_skb(size, GFP_ATOMIC);
 | 
			
		||||
	if (!skb) {
 | 
			
		||||
		printk(KERN_ERR "Failed to allocate new skb with size=%u.\n",
 | 
			
		||||
		       size);
 | 
			
		||||
 | 
			
		||||
		pr_err("failed to allocate new skb with size=%u\n", size);
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -114,12 +113,12 @@ static int cn_test_want_notify(void)
 | 
			
		|||
	//netlink_broadcast(nls, skb, 0, ctl->group, GFP_ATOMIC);
 | 
			
		||||
	netlink_unicast(nls, skb, 0, 0);
 | 
			
		||||
 | 
			
		||||
	printk(KERN_INFO "Request was sent. Group=0x%x.\n", ctl->group);
 | 
			
		||||
	pr_info("request was sent: group=0x%x\n", ctl->group);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
nlmsg_failure:
 | 
			
		||||
	printk(KERN_ERR "Failed to send %u.%u\n", msg->seq, msg->ack);
 | 
			
		||||
	pr_err("failed to send %u.%u\n", msg->seq, msg->ack);
 | 
			
		||||
	kfree_skb(skb);
 | 
			
		||||
	return -EINVAL;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -131,6 +130,8 @@ static void cn_test_timer_func(unsigned long __data)
 | 
			
		|||
	struct cn_msg *m;
 | 
			
		||||
	char data[32];
 | 
			
		||||
 | 
			
		||||
	pr_debug("%s: timer fired with data %lu\n", __func__, __data);
 | 
			
		||||
 | 
			
		||||
	m = kzalloc(sizeof(*m) + sizeof(data), GFP_ATOMIC);
 | 
			
		||||
	if (m) {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +151,7 @@ static void cn_test_timer_func(unsigned long __data)
 | 
			
		|||
 | 
			
		||||
	cn_test_timer_counter++;
 | 
			
		||||
 | 
			
		||||
	mod_timer(&cn_test_timer, jiffies + HZ);
 | 
			
		||||
	mod_timer(&cn_test_timer, jiffies + msecs_to_jiffies(1000));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int cn_test_init(void)
 | 
			
		||||
| 
						 | 
				
			
			@ -168,8 +169,10 @@ static int cn_test_init(void)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	setup_timer(&cn_test_timer, cn_test_timer_func, 0);
 | 
			
		||||
	cn_test_timer.expires = jiffies + HZ;
 | 
			
		||||
	add_timer(&cn_test_timer);
 | 
			
		||||
	mod_timer(&cn_test_timer, jiffies + msecs_to_jiffies(1000));
 | 
			
		||||
 | 
			
		||||
	pr_info("initialized with id={%u.%u}\n",
 | 
			
		||||
		cn_test_id.idx, cn_test_id.val);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,10 +5,10 @@ Kernel Connector.
 | 
			
		|||
Kernel connector - new netlink based userspace <-> kernel space easy
 | 
			
		||||
to use communication module.
 | 
			
		||||
 | 
			
		||||
Connector driver adds possibility to connect various agents using
 | 
			
		||||
netlink based network.  One must register callback and
 | 
			
		||||
identifier. When driver receives special netlink message with
 | 
			
		||||
appropriate identifier, appropriate callback will be called.
 | 
			
		||||
The Connector driver makes it easy to connect various agents using a
 | 
			
		||||
netlink based network.  One must register a callback and an identifier.
 | 
			
		||||
When the driver receives a special netlink message with the appropriate
 | 
			
		||||
identifier, the appropriate callback will be called.
 | 
			
		||||
 | 
			
		||||
From the userspace point of view it's quite straightforward:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,10 +17,10 @@ From the userspace point of view it's quite straightforward:
 | 
			
		|||
	send();
 | 
			
		||||
	recv();
 | 
			
		||||
 | 
			
		||||
But if kernelspace want to use full power of such connections, driver
 | 
			
		||||
writer must create special sockets, must know about struct sk_buff
 | 
			
		||||
handling...  Connector allows any kernelspace agents to use netlink
 | 
			
		||||
based networking for inter-process communication in a significantly
 | 
			
		||||
But if kernelspace wants to use the full power of such connections, the
 | 
			
		||||
driver writer must create special sockets, must know about struct sk_buff
 | 
			
		||||
handling, etc...  The Connector driver allows any kernelspace agents to use
 | 
			
		||||
netlink based networking for inter-process communication in a significantly
 | 
			
		||||
easier way:
 | 
			
		||||
 | 
			
		||||
int cn_add_callback(struct cb_id *id, char *name, void (*callback) (void *));
 | 
			
		||||
| 
						 | 
				
			
			@ -32,10 +32,10 @@ struct cb_id
 | 
			
		|||
	__u32			val;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
idx and val are unique identifiers which must be registered in
 | 
			
		||||
connector.h for in-kernel usage.  void (*callback) (void *) - is a
 | 
			
		||||
callback function which will be called when message with above idx.val
 | 
			
		||||
will be received by connector core.  Argument for that function must
 | 
			
		||||
idx and val are unique identifiers which must be registered in the
 | 
			
		||||
connector.h header for in-kernel usage.  void (*callback) (void *) is a
 | 
			
		||||
callback function which will be called when a message with above idx.val
 | 
			
		||||
is received by the connector core.  The argument for that function must
 | 
			
		||||
be dereferenced to struct cn_msg *.
 | 
			
		||||
 | 
			
		||||
struct cn_msg
 | 
			
		||||
| 
						 | 
				
			
			@ -55,92 +55,95 @@ Connector interfaces.
 | 
			
		|||
 | 
			
		||||
int cn_add_callback(struct cb_id *id, char *name, void (*callback) (void *));
 | 
			
		||||
 | 
			
		||||
Registers new callback with connector core.
 | 
			
		||||
 Registers new callback with connector core.
 | 
			
		||||
 | 
			
		||||
struct cb_id *id 		- unique connector's user identifier.
 | 
			
		||||
 struct cb_id *id		- unique connector's user identifier.
 | 
			
		||||
				  It must be registered in connector.h for legal in-kernel users.
 | 
			
		||||
char *name 			- connector's callback symbolic name.
 | 
			
		||||
void (*callback) (void *)	- connector's callback.
 | 
			
		||||
 char *name			- connector's callback symbolic name.
 | 
			
		||||
 void (*callback) (void *)	- connector's callback.
 | 
			
		||||
				  Argument must be dereferenced to struct cn_msg *.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void cn_del_callback(struct cb_id *id);
 | 
			
		||||
 | 
			
		||||
Unregisters new callback with connector core.
 | 
			
		||||
 Unregisters new callback with connector core.
 | 
			
		||||
 | 
			
		||||
 struct cb_id *id		- unique connector's user identifier.
 | 
			
		||||
 | 
			
		||||
struct cb_id *id 		- unique connector's user identifier.
 | 
			
		||||
 | 
			
		||||
int cn_netlink_send(struct cn_msg *msg, u32 __groups, int gfp_mask);
 | 
			
		||||
 | 
			
		||||
Sends message to the specified groups.  It can be safely called from
 | 
			
		||||
softirq context, but may silently fail under strong memory pressure.
 | 
			
		||||
If there are no listeners for given group -ESRCH can be returned.
 | 
			
		||||
 Sends message to the specified groups.  It can be safely called from
 | 
			
		||||
 softirq context, but may silently fail under strong memory pressure.
 | 
			
		||||
 If there are no listeners for given group -ESRCH can be returned.
 | 
			
		||||
 | 
			
		||||
struct cn_msg *			- message header(with attached data).
 | 
			
		||||
u32 __group			- destination group.
 | 
			
		||||
 struct cn_msg *		- message header(with attached data).
 | 
			
		||||
 u32 __group			- destination group.
 | 
			
		||||
				  If __group is zero, then appropriate group will
 | 
			
		||||
				  be searched through all registered connector users,
 | 
			
		||||
				  and message will be delivered to the group which was
 | 
			
		||||
				  created for user with the same ID as in msg.
 | 
			
		||||
				  If __group is not zero, then message will be delivered
 | 
			
		||||
				  to the specified group.
 | 
			
		||||
int gfp_mask			- GFP mask.
 | 
			
		||||
 int gfp_mask			- GFP mask.
 | 
			
		||||
 | 
			
		||||
Note: When registering new callback user, connector core assigns
 | 
			
		||||
netlink group to the user which is equal to it's id.idx.
 | 
			
		||||
 Note: When registering new callback user, connector core assigns
 | 
			
		||||
 netlink group to the user which is equal to it's id.idx.
 | 
			
		||||
 | 
			
		||||
/*****************************************/
 | 
			
		||||
Protocol description.
 | 
			
		||||
/*****************************************/
 | 
			
		||||
 | 
			
		||||
Current offers transport layer with fixed header.  Recommended
 | 
			
		||||
protocol which uses such header is following:
 | 
			
		||||
The current framework offers a transport layer with fixed headers.  The
 | 
			
		||||
recommended protocol which uses such a header is as following:
 | 
			
		||||
 | 
			
		||||
msg->seq and msg->ack are used to determine message genealogy.  When
 | 
			
		||||
someone sends message it puts there locally unique sequence and random
 | 
			
		||||
acknowledge numbers.  Sequence number may be copied into
 | 
			
		||||
someone sends a message, they use a locally unique sequence and random
 | 
			
		||||
acknowledge number.  The sequence number may be copied into
 | 
			
		||||
nlmsghdr->nlmsg_seq too.
 | 
			
		||||
 | 
			
		||||
Sequence number is incremented with each message to be sent.
 | 
			
		||||
The sequence number is incremented with each message sent.
 | 
			
		||||
 | 
			
		||||
If we expect reply to our message, then sequence number in received
 | 
			
		||||
message MUST be the same as in original message, and acknowledge
 | 
			
		||||
number MUST be the same + 1.
 | 
			
		||||
If you expect a reply to the message, then the sequence number in the
 | 
			
		||||
received message MUST be the same as in the original message, and the
 | 
			
		||||
acknowledge number MUST be the same + 1.
 | 
			
		||||
 | 
			
		||||
If we receive message and it's sequence number is not equal to one we
 | 
			
		||||
are expecting, then it is new message.  If we receive message and it's
 | 
			
		||||
sequence number is the same as one we are expecting, but it's
 | 
			
		||||
acknowledge is not equal acknowledge number in original message + 1,
 | 
			
		||||
then it is new message.
 | 
			
		||||
If we receive a message and its sequence number is not equal to one we
 | 
			
		||||
are expecting, then it is a new message.  If we receive a message and
 | 
			
		||||
its sequence number is the same as one we are expecting, but its
 | 
			
		||||
acknowledge is not equal to the acknowledge number in the original
 | 
			
		||||
message + 1, then it is a new message.
 | 
			
		||||
 | 
			
		||||
Obviously, protocol header contains above id.
 | 
			
		||||
Obviously, the protocol header contains the above id.
 | 
			
		||||
 | 
			
		||||
connector allows event notification in the following form: kernel
 | 
			
		||||
The connector allows event notification in the following form: kernel
 | 
			
		||||
driver or userspace process can ask connector to notify it when
 | 
			
		||||
selected id's will be turned on or off(registered or unregistered it's
 | 
			
		||||
callback). It is done by sending special command to connector
 | 
			
		||||
driver(it also registers itself with id={-1, -1}).
 | 
			
		||||
selected ids will be turned on or off (registered or unregistered its
 | 
			
		||||
callback).  It is done by sending a special command to the connector
 | 
			
		||||
driver (it also registers itself with id={-1, -1}).
 | 
			
		||||
 | 
			
		||||
As example of usage Documentation/connector now contains cn_test.c -
 | 
			
		||||
testing module which uses connector to request notification and to
 | 
			
		||||
send messages.
 | 
			
		||||
As example of this usage can be found in the cn_test.c module which
 | 
			
		||||
uses the connector to request notification and to send messages.
 | 
			
		||||
 | 
			
		||||
/*****************************************/
 | 
			
		||||
Reliability.
 | 
			
		||||
/*****************************************/
 | 
			
		||||
 | 
			
		||||
Netlink itself is not reliable protocol, that means that messages can
 | 
			
		||||
Netlink itself is not a reliable protocol.  That means that messages can
 | 
			
		||||
be lost due to memory pressure or process' receiving queue overflowed,
 | 
			
		||||
so caller is warned must be prepared. That is why struct cn_msg [main
 | 
			
		||||
connector's message header] contains u32 seq and u32 ack fields.
 | 
			
		||||
so caller is warned that it must be prepared.  That is why the struct
 | 
			
		||||
cn_msg [main connector's message header] contains u32 seq and u32 ack
 | 
			
		||||
fields.
 | 
			
		||||
 | 
			
		||||
/*****************************************/
 | 
			
		||||
Userspace usage.
 | 
			
		||||
/*****************************************/
 | 
			
		||||
 | 
			
		||||
2.6.14 has a new netlink socket implementation, which by default does not
 | 
			
		||||
allow to send data to netlink groups other than 1.
 | 
			
		||||
So, if to use netlink socket (for example using connector) 
 | 
			
		||||
with different group number userspace application must subscribe to 
 | 
			
		||||
that group. It can be achieved by following pseudocode:
 | 
			
		||||
allow people to send data to netlink groups other than 1.
 | 
			
		||||
So, if you wish to use a netlink socket (for example using connector)
 | 
			
		||||
with a different group number, the userspace application must subscribe to
 | 
			
		||||
that group first.  It can be achieved by the following pseudocode:
 | 
			
		||||
 | 
			
		||||
s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -160,8 +163,8 @@ if (bind(s, (struct sockaddr *)&l_local, sizeof(struct sockaddr_nl)) == -1) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
Where 270 above is SOL_NETLINK, and 1 is a NETLINK_ADD_MEMBERSHIP socket
 | 
			
		||||
option. To drop multicast subscription one should call above socket option
 | 
			
		||||
with NETLINK_DROP_MEMBERSHIP parameter which is defined as 0.
 | 
			
		||||
option.  To drop a multicast subscription, one should call the above socket
 | 
			
		||||
option with the NETLINK_DROP_MEMBERSHIP parameter which is defined as 0.
 | 
			
		||||
 | 
			
		||||
2.6.14 netlink code only allows to select a group which is less or equal to
 | 
			
		||||
the maximum group number, which is used at netlink_kernel_create() time.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,18 +30,24 @@
 | 
			
		|||
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <getopt.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/connector.h>
 | 
			
		||||
 | 
			
		||||
#define DEBUG
 | 
			
		||||
#define NETLINK_CONNECTOR 	11
 | 
			
		||||
 | 
			
		||||
/* Hopefully your userspace connector.h matches this kernel */
 | 
			
		||||
#define CN_TEST_IDX		CN_NETLINK_USERS + 3
 | 
			
		||||
#define CN_TEST_VAL		0x456
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
#define ulog(f, a...) fprintf(stdout, f, ##a)
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -83,6 +89,25 @@ static int netlink_send(int s, struct cn_msg *msg)
 | 
			
		|||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage(void)
 | 
			
		||||
{
 | 
			
		||||
	printf(
 | 
			
		||||
		"Usage: ucon [options] [output file]\n"
 | 
			
		||||
		"\n"
 | 
			
		||||
		"\t-h\tthis help screen\n"
 | 
			
		||||
		"\t-s\tsend buffers to the test module\n"
 | 
			
		||||
		"\n"
 | 
			
		||||
		"The default behavior of ucon is to subscribe to the test module\n"
 | 
			
		||||
		"and wait for state messages.  Any ones received are dumped to the\n"
 | 
			
		||||
		"specified output file (or stdout).  The test module is assumed to\n"
 | 
			
		||||
		"have an id of {%u.%u}\n"
 | 
			
		||||
		"\n"
 | 
			
		||||
		"If you get no output, then verify the cn_test module id matches\n"
 | 
			
		||||
		"the expected id above.\n"
 | 
			
		||||
		, CN_TEST_IDX, CN_TEST_VAL
 | 
			
		||||
	);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
	int s;
 | 
			
		||||
| 
						 | 
				
			
			@ -94,17 +119,34 @@ int main(int argc, char *argv[])
 | 
			
		|||
	FILE *out;
 | 
			
		||||
	time_t tm;
 | 
			
		||||
	struct pollfd pfd;
 | 
			
		||||
	bool send_msgs = false;
 | 
			
		||||
 | 
			
		||||
	if (argc < 2)
 | 
			
		||||
		out = stdout;
 | 
			
		||||
	else {
 | 
			
		||||
		out = fopen(argv[1], "a+");
 | 
			
		||||
	while ((s = getopt(argc, argv, "hs")) != -1) {
 | 
			
		||||
		switch (s) {
 | 
			
		||||
		case 's':
 | 
			
		||||
			send_msgs = true;
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 'h':
 | 
			
		||||
			usage();
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			/* getopt() outputs an error for us */
 | 
			
		||||
			usage();
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (argc != optind) {
 | 
			
		||||
		out = fopen(argv[optind], "a+");
 | 
			
		||||
		if (!out) {
 | 
			
		||||
			ulog("Unable to open %s for writing: %s\n",
 | 
			
		||||
				argv[1], strerror(errno));
 | 
			
		||||
			out = stdout;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	} else
 | 
			
		||||
		out = stdout;
 | 
			
		||||
 | 
			
		||||
	memset(buf, 0, sizeof(buf));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -115,9 +157,11 @@ int main(int argc, char *argv[])
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	l_local.nl_family = AF_NETLINK;
 | 
			
		||||
	l_local.nl_groups = 0x123; /* bitmask of requested groups */
 | 
			
		||||
	l_local.nl_groups = -1; /* bitmask of requested groups */
 | 
			
		||||
	l_local.nl_pid = 0;
 | 
			
		||||
 | 
			
		||||
	ulog("subscribing to %u.%u\n", CN_TEST_IDX, CN_TEST_VAL);
 | 
			
		||||
 | 
			
		||||
	if (bind(s, (struct sockaddr *)&l_local, sizeof(struct sockaddr_nl)) == -1) {
 | 
			
		||||
		perror("bind");
 | 
			
		||||
		close(s);
 | 
			
		||||
| 
						 | 
				
			
			@ -130,15 +174,15 @@ int main(int argc, char *argv[])
 | 
			
		|||
		setsockopt(s, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &on, sizeof(on));
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	if (0) {
 | 
			
		||||
	if (send_msgs) {
 | 
			
		||||
		int i, j;
 | 
			
		||||
 | 
			
		||||
		memset(buf, 0, sizeof(buf));
 | 
			
		||||
 | 
			
		||||
		data = (struct cn_msg *)buf;
 | 
			
		||||
 | 
			
		||||
		data->id.idx = 0x123;
 | 
			
		||||
		data->id.val = 0x456;
 | 
			
		||||
		data->id.idx = CN_TEST_IDX;
 | 
			
		||||
		data->id.val = CN_TEST_VAL;
 | 
			
		||||
		data->seq = seq++;
 | 
			
		||||
		data->ack = 0;
 | 
			
		||||
		data->len = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,35 @@ be removed from this file.
 | 
			
		|||
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
What:	PRISM54
 | 
			
		||||
When:	2.6.34
 | 
			
		||||
 | 
			
		||||
Why:	prism54 FullMAC PCI / Cardbus devices used to be supported only by the
 | 
			
		||||
	prism54 wireless driver. After Intersil stopped selling these
 | 
			
		||||
	devices in preference for the newer more flexible SoftMAC devices
 | 
			
		||||
	a SoftMAC device driver was required and prism54 did not support
 | 
			
		||||
	them. The p54pci driver now exists and has been present in the kernel for
 | 
			
		||||
	a while. This driver supports both SoftMAC devices and FullMAC devices.
 | 
			
		||||
	The main difference between these devices was the amount of memory which
 | 
			
		||||
	could be used for the firmware. The SoftMAC devices support a smaller
 | 
			
		||||
	amount of memory. Because of this the SoftMAC firmware fits into FullMAC
 | 
			
		||||
	devices's memory. p54pci supports not only PCI / Cardbus but also USB
 | 
			
		||||
	and SPI. Since p54pci supports all devices prism54 supports
 | 
			
		||||
	you will have a conflict. I'm not quite sure how distributions are
 | 
			
		||||
	handling this conflict right now. prism54 was kept around due to
 | 
			
		||||
	claims users may experience issues when using the SoftMAC driver.
 | 
			
		||||
	Time has passed users have not reported issues. If you use prism54
 | 
			
		||||
	and for whatever reason you cannot use p54pci please let us know!
 | 
			
		||||
	E-mail us at: linux-wireless@vger.kernel.org
 | 
			
		||||
 | 
			
		||||
	For more information see the p54 wiki page:
 | 
			
		||||
 | 
			
		||||
	http://wireless.kernel.org/en/users/Drivers/p54
 | 
			
		||||
 | 
			
		||||
Who:	Luis R. Rodriguez <lrodriguez@atheros.com>
 | 
			
		||||
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
What:	IRQF_SAMPLE_RANDOM
 | 
			
		||||
Check:	IRQF_SAMPLE_RANDOM
 | 
			
		||||
When:	July 2009
 | 
			
		||||
| 
						 | 
				
			
			@ -206,24 +235,6 @@ Who:	Len Brown <len.brown@intel.com>
 | 
			
		|||
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
What: libata spindown skipping and warning
 | 
			
		||||
When: Dec 2008
 | 
			
		||||
Why:  Some halt(8) implementations synchronize caches for and spin
 | 
			
		||||
      down libata disks because libata didn't use to spin down disk on
 | 
			
		||||
      system halt (only synchronized caches).
 | 
			
		||||
      Spin down on system halt is now implemented.  sysfs node
 | 
			
		||||
      /sys/class/scsi_disk/h:c:i:l/manage_start_stop is present if
 | 
			
		||||
      spin down support is available.
 | 
			
		||||
      Because issuing spin down command to an already spun down disk
 | 
			
		||||
      makes some disks spin up just to spin down again, libata tracks
 | 
			
		||||
      device spindown status to skip the extra spindown command and
 | 
			
		||||
      warn about it.
 | 
			
		||||
      This is to give userspace tools the time to get updated and will
 | 
			
		||||
      be removed after userspace is reasonably updated.
 | 
			
		||||
Who:  Tejun Heo <htejun@gmail.com>
 | 
			
		||||
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
What:	i386/x86_64 bzImage symlinks
 | 
			
		||||
When:	April 2010
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -235,31 +246,6 @@ Who:	Thomas Gleixner <tglx@linutronix.de>
 | 
			
		|||
---------------------------
 | 
			
		||||
 | 
			
		||||
What (Why):
 | 
			
		||||
	- include/linux/netfilter_ipv4/ipt_TOS.h ipt_tos.h header files
 | 
			
		||||
	  (superseded by xt_TOS/xt_tos target & match)
 | 
			
		||||
 | 
			
		||||
	- "forwarding" header files like ipt_mac.h in
 | 
			
		||||
	  include/linux/netfilter_ipv4/ and include/linux/netfilter_ipv6/
 | 
			
		||||
 | 
			
		||||
	- xt_CONNMARK match revision 0
 | 
			
		||||
	  (superseded by xt_CONNMARK match revision 1)
 | 
			
		||||
 | 
			
		||||
	- xt_MARK target revisions 0 and 1
 | 
			
		||||
	  (superseded by xt_MARK match revision 2)
 | 
			
		||||
 | 
			
		||||
	- xt_connmark match revision 0
 | 
			
		||||
	  (superseded by xt_connmark match revision 1)
 | 
			
		||||
 | 
			
		||||
	- xt_conntrack match revision 0
 | 
			
		||||
	  (superseded by xt_conntrack match revision 1)
 | 
			
		||||
 | 
			
		||||
	- xt_iprange match revision 0,
 | 
			
		||||
	  include/linux/netfilter_ipv4/ipt_iprange.h
 | 
			
		||||
	  (superseded by xt_iprange match revision 1)
 | 
			
		||||
 | 
			
		||||
	- xt_mark match revision 0
 | 
			
		||||
	  (superseded by xt_mark match revision 1)
 | 
			
		||||
 | 
			
		||||
	- xt_recent: the old ipt_recent proc dir
 | 
			
		||||
	  (superseded by /proc/net/xt_recent)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -394,15 +380,6 @@ Who:	Thomas Gleixner <tglx@linutronix.de>
 | 
			
		|||
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
What:	obsolete generic irq defines and typedefs
 | 
			
		||||
When:	2.6.30
 | 
			
		||||
Why:	The defines and typedefs (hw_interrupt_type, no_irq_type, irq_desc_t)
 | 
			
		||||
	have been kept around for migration reasons. After more than two years
 | 
			
		||||
	it's time to remove them finally
 | 
			
		||||
Who:	Thomas Gleixner <tglx@linutronix.de>
 | 
			
		||||
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
What:	fakephp and associated sysfs files in /sys/bus/pci/slots/
 | 
			
		||||
When:	2011
 | 
			
		||||
Why:	In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
 | 
			
		||||
| 
						 | 
				
			
			@ -468,3 +445,27 @@ Why:	cpu_policy_rwsem has a new cleaner definition making it local to
 | 
			
		|||
	cpufreq core and contained inside cpufreq.c. Other dependent
 | 
			
		||||
	drivers should not use it in order to safely avoid lockdep issues.
 | 
			
		||||
Who:	Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
 | 
			
		||||
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
What:	sound-slot/service-* module aliases and related clutters in
 | 
			
		||||
	sound/sound_core.c
 | 
			
		||||
When:	August 2010
 | 
			
		||||
Why:	OSS sound_core grabs all legacy minors (0-255) of SOUND_MAJOR
 | 
			
		||||
	(14) and requests modules using custom sound-slot/service-*
 | 
			
		||||
	module aliases.  The only benefit of doing this is allowing
 | 
			
		||||
	use of custom module aliases which might as well be considered
 | 
			
		||||
	a bug at this point.  This preemptive claiming prevents
 | 
			
		||||
	alternative OSS implementations.
 | 
			
		||||
 | 
			
		||||
	Till the feature is removed, the kernel will be requesting
 | 
			
		||||
	both sound-slot/service-* and the standard char-major-* module
 | 
			
		||||
	aliases and allow turning off the pre-claiming selectively via
 | 
			
		||||
	CONFIG_SOUND_OSS_CORE_PRECLAIM and soundcore.preclaim_oss
 | 
			
		||||
	kernel parameter.
 | 
			
		||||
 | 
			
		||||
	After the transition phase is complete, both the custom module
 | 
			
		||||
	aliases and switches to disable it will go away.  This removal
 | 
			
		||||
	will also allow making ALSA OSS emulation independent of
 | 
			
		||||
	sound_core.  The dependency will be broken then too.
 | 
			
		||||
Who:	Tejun Heo <tj@kernel.org>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										100
									
								
								Documentation/filesystems/gfs2-uevents.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								Documentation/filesystems/gfs2-uevents.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,100 @@
 | 
			
		|||
                              uevents and GFS2
 | 
			
		||||
                             ==================
 | 
			
		||||
 | 
			
		||||
During the lifetime of a GFS2 mount, a number of uevents are generated.
 | 
			
		||||
This document explains what the events are and what they are used
 | 
			
		||||
for (by gfs_controld in gfs2-utils).
 | 
			
		||||
 | 
			
		||||
A list of GFS2 uevents
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
1. ADD
 | 
			
		||||
 | 
			
		||||
The ADD event occurs at mount time. It will always be the first
 | 
			
		||||
uevent generated by the newly created filesystem. If the mount
 | 
			
		||||
is successful, an ONLINE uevent will follow.  If it is not successful
 | 
			
		||||
then a REMOVE uevent will follow.
 | 
			
		||||
 | 
			
		||||
The ADD uevent has two environment variables: SPECTATOR=[0|1]
 | 
			
		||||
and RDONLY=[0|1] that specify the spectator status (a read-only mount
 | 
			
		||||
with no journal assigned), and read-only (with journal assigned) status
 | 
			
		||||
of the filesystem respectively.
 | 
			
		||||
 | 
			
		||||
2. ONLINE
 | 
			
		||||
 | 
			
		||||
The ONLINE uevent is generated after a successful mount or remount. It
 | 
			
		||||
has the same environment variables as the ADD uevent. The ONLINE
 | 
			
		||||
uevent, along with the two environment variables for spectator and
 | 
			
		||||
RDONLY are a relatively recent addition (2.6.32-rc+) and will not
 | 
			
		||||
be generated by older kernels.
 | 
			
		||||
 | 
			
		||||
3. CHANGE
 | 
			
		||||
 | 
			
		||||
The CHANGE uevent is used in two places. One is when reporting the
 | 
			
		||||
successful mount of the filesystem by the first node (FIRSTMOUNT=Done).
 | 
			
		||||
This is used as a signal by gfs_controld that it is then ok for other
 | 
			
		||||
nodes in the cluster to mount the filesystem.
 | 
			
		||||
 | 
			
		||||
The other CHANGE uevent is used to inform of the completion
 | 
			
		||||
of journal recovery for one of the filesystems journals. It has
 | 
			
		||||
two environment variables, JID= which specifies the journal id which
 | 
			
		||||
has just been recovered, and RECOVERY=[Done|Failed] to indicate the
 | 
			
		||||
success (or otherwise) of the operation. These uevents are generated
 | 
			
		||||
for every journal recovered, whether it is during the initial mount
 | 
			
		||||
process or as the result of gfs_controld requesting a specific journal
 | 
			
		||||
recovery via the /sys/fs/gfs2/<fsname>/lock_module/recovery file.
 | 
			
		||||
 | 
			
		||||
Because the CHANGE uevent was used (in early versions of gfs_controld)
 | 
			
		||||
without checking the environment variables to discover the state, we
 | 
			
		||||
cannot add any more functions to it without running the risk of
 | 
			
		||||
someone using an older version of the user tools and breaking their
 | 
			
		||||
cluster. For this reason the ONLINE uevent was used when adding a new
 | 
			
		||||
uevent for a successful mount or remount.
 | 
			
		||||
 | 
			
		||||
4. OFFLINE
 | 
			
		||||
 | 
			
		||||
The OFFLINE uevent is only generated due to filesystem errors and is used
 | 
			
		||||
as part of the "withdraw" mechanism. Currently this doesn't give any
 | 
			
		||||
information about what the error is, which is something that needs to
 | 
			
		||||
be fixed.
 | 
			
		||||
 | 
			
		||||
5. REMOVE
 | 
			
		||||
 | 
			
		||||
The REMOVE uevent is generated at the end of an unsuccessful mount
 | 
			
		||||
or at the end of a umount of the filesystem. All REMOVE uevents will
 | 
			
		||||
have been preceeded by at least an ADD uevent for the same fileystem,
 | 
			
		||||
and unlike the other uevents is generated automatically by the kernel's
 | 
			
		||||
kobject subsystem.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Information common to all GFS2 uevents (uevent environment variables)
 | 
			
		||||
----------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
1. LOCKTABLE=
 | 
			
		||||
 | 
			
		||||
The LOCKTABLE is a string, as supplied on the mount command
 | 
			
		||||
line (locktable=) or via fstab. It is used as a filesystem label
 | 
			
		||||
as well as providing the information for a lock_dlm mount to be
 | 
			
		||||
able to join the cluster.
 | 
			
		||||
 | 
			
		||||
2. LOCKPROTO=
 | 
			
		||||
 | 
			
		||||
The LOCKPROTO is a string, and its value depends on what is set
 | 
			
		||||
on the mount command line, or via fstab. It will be either
 | 
			
		||||
lock_nolock or lock_dlm. In the future other lock managers
 | 
			
		||||
may be supported.
 | 
			
		||||
 | 
			
		||||
3. JOURNALID=
 | 
			
		||||
 | 
			
		||||
If a journal is in use by the filesystem (journals are not
 | 
			
		||||
assigned for spectator mounts) then this will give the
 | 
			
		||||
numeric journal id in all GFS2 uevents.
 | 
			
		||||
 | 
			
		||||
4. UUID=
 | 
			
		||||
 | 
			
		||||
With recent versions of gfs2-utils, mkfs.gfs2 writes a UUID
 | 
			
		||||
into the filesystem superblock. If it exists, this will
 | 
			
		||||
be included in every uevent relating to the filesystem.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										98
									
								
								Documentation/filesystems/nfs.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								Documentation/filesystems/nfs.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,98 @@
 | 
			
		|||
 | 
			
		||||
The NFS client
 | 
			
		||||
==============
 | 
			
		||||
 | 
			
		||||
The NFS version 2 protocol was first documented in RFC1094 (March 1989).
 | 
			
		||||
Since then two more major releases of NFS have been published, with NFSv3
 | 
			
		||||
being documented in RFC1813 (June 1995), and NFSv4 in RFC3530 (April
 | 
			
		||||
2003).
 | 
			
		||||
 | 
			
		||||
The Linux NFS client currently supports all the above published versions,
 | 
			
		||||
and work is in progress on adding support for minor version 1 of the NFSv4
 | 
			
		||||
protocol.
 | 
			
		||||
 | 
			
		||||
The purpose of this document is to provide information on some of the
 | 
			
		||||
upcall interfaces that are used in order to provide the NFS client with
 | 
			
		||||
some of the information that it requires in order to fully comply with
 | 
			
		||||
the NFS spec.
 | 
			
		||||
 | 
			
		||||
The DNS resolver
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
NFSv4 allows for one server to refer the NFS client to data that has been
 | 
			
		||||
migrated onto another server by means of the special "fs_locations"
 | 
			
		||||
attribute. See
 | 
			
		||||
	http://tools.ietf.org/html/rfc3530#section-6
 | 
			
		||||
and
 | 
			
		||||
	http://tools.ietf.org/html/draft-ietf-nfsv4-referrals-00
 | 
			
		||||
 | 
			
		||||
The fs_locations information can take the form of either an ip address and
 | 
			
		||||
a path, or a DNS hostname and a path. The latter requires the NFS client to
 | 
			
		||||
do a DNS lookup in order to mount the new volume, and hence the need for an
 | 
			
		||||
upcall to allow userland to provide this service.
 | 
			
		||||
 | 
			
		||||
Assuming that the user has the 'rpc_pipefs' filesystem mounted in the usual
 | 
			
		||||
/var/lib/nfs/rpc_pipefs, the upcall consists of the following steps:
 | 
			
		||||
 | 
			
		||||
   (1) The process checks the dns_resolve cache to see if it contains a
 | 
			
		||||
       valid entry. If so, it returns that entry and exits.
 | 
			
		||||
 | 
			
		||||
   (2) If no valid entry exists, the helper script '/sbin/nfs_cache_getent'
 | 
			
		||||
       (may be changed using the 'nfs.cache_getent' kernel boot parameter)
 | 
			
		||||
       is run, with two arguments:
 | 
			
		||||
		- the cache name, "dns_resolve"
 | 
			
		||||
		- the hostname to resolve
 | 
			
		||||
 | 
			
		||||
   (3) After looking up the corresponding ip address, the helper script
 | 
			
		||||
       writes the result into the rpc_pipefs pseudo-file
 | 
			
		||||
       '/var/lib/nfs/rpc_pipefs/cache/dns_resolve/channel'
 | 
			
		||||
       in the following (text) format:
 | 
			
		||||
 | 
			
		||||
		"<ip address> <hostname> <ttl>\n"
 | 
			
		||||
 | 
			
		||||
       Where <ip address> is in the usual IPv4 (123.456.78.90) or IPv6
 | 
			
		||||
       (ffee:ddcc:bbaa:9988:7766:5544:3322:1100, ffee::1100, ...) format.
 | 
			
		||||
       <hostname> is identical to the second argument of the helper
 | 
			
		||||
       script, and <ttl> is the 'time to live' of this cache entry (in
 | 
			
		||||
       units of seconds).
 | 
			
		||||
 | 
			
		||||
       Note: If <ip address> is invalid, say the string "0", then a negative
 | 
			
		||||
       entry is created, which will cause the kernel to treat the hostname
 | 
			
		||||
       as having no valid DNS translation.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
A basic sample /sbin/nfs_cache_getent
 | 
			
		||||
=====================================
 | 
			
		||||
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
ttl=600
 | 
			
		||||
#
 | 
			
		||||
cut=/usr/bin/cut
 | 
			
		||||
getent=/usr/bin/getent
 | 
			
		||||
rpc_pipefs=/var/lib/nfs/rpc_pipefs
 | 
			
		||||
#
 | 
			
		||||
die()
 | 
			
		||||
{
 | 
			
		||||
	echo "Usage: $0 cache_name entry_name"
 | 
			
		||||
	exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[ $# -lt 2 ] && die
 | 
			
		||||
cachename="$1"
 | 
			
		||||
cache_path=${rpc_pipefs}/cache/${cachename}/channel
 | 
			
		||||
 | 
			
		||||
case "${cachename}" in
 | 
			
		||||
	dns_resolve)
 | 
			
		||||
		name="$2"
 | 
			
		||||
		result="$(${getent} hosts ${name} | ${cut} -f1 -d\ )"
 | 
			
		||||
		[ -z "${result}" ] && result="0"
 | 
			
		||||
		;;
 | 
			
		||||
	*)
 | 
			
		||||
		die
 | 
			
		||||
		;;
 | 
			
		||||
esac
 | 
			
		||||
echo "${result} ${name} ${ttl}" >${cache_path}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ better to do. The file is seekable, in that one can do something like the
 | 
			
		|||
following:
 | 
			
		||||
 | 
			
		||||
    dd if=/proc/sequence of=out1 count=1
 | 
			
		||||
    dd if=/proc/sequence skip=1 out=out2 count=1
 | 
			
		||||
    dd if=/proc/sequence skip=1 of=out2 count=1
 | 
			
		||||
 | 
			
		||||
Then concatenate the output files out1 and out2 and get the right
 | 
			
		||||
result. Yes, it is a thoroughly useless module, but the point is to show
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										99
									
								
								Documentation/flexible-arrays.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								Documentation/flexible-arrays.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,99 @@
 | 
			
		|||
Using flexible arrays in the kernel
 | 
			
		||||
Last updated for 2.6.31
 | 
			
		||||
Jonathan Corbet <corbet@lwn.net>
 | 
			
		||||
 | 
			
		||||
Large contiguous memory allocations can be unreliable in the Linux kernel.
 | 
			
		||||
Kernel programmers will sometimes respond to this problem by allocating
 | 
			
		||||
pages with vmalloc().  This solution not ideal, though.  On 32-bit systems,
 | 
			
		||||
memory from vmalloc() must be mapped into a relatively small address space;
 | 
			
		||||
it's easy to run out.  On SMP systems, the page table changes required by
 | 
			
		||||
vmalloc() allocations can require expensive cross-processor interrupts on
 | 
			
		||||
all CPUs.  And, on all systems, use of space in the vmalloc() range
 | 
			
		||||
increases pressure on the translation lookaside buffer (TLB), reducing the
 | 
			
		||||
performance of the system.
 | 
			
		||||
 | 
			
		||||
In many cases, the need for memory from vmalloc() can be eliminated by
 | 
			
		||||
piecing together an array from smaller parts; the flexible array library
 | 
			
		||||
exists to make this task easier.
 | 
			
		||||
 | 
			
		||||
A flexible array holds an arbitrary (within limits) number of fixed-sized
 | 
			
		||||
objects, accessed via an integer index.  Sparse arrays are handled
 | 
			
		||||
reasonably well.  Only single-page allocations are made, so memory
 | 
			
		||||
allocation failures should be relatively rare.  The down sides are that the
 | 
			
		||||
arrays cannot be indexed directly, individual object size cannot exceed the
 | 
			
		||||
system page size, and putting data into a flexible array requires a copy
 | 
			
		||||
operation.  It's also worth noting that flexible arrays do no internal
 | 
			
		||||
locking at all; if concurrent access to an array is possible, then the
 | 
			
		||||
caller must arrange for appropriate mutual exclusion.
 | 
			
		||||
 | 
			
		||||
The creation of a flexible array is done with:
 | 
			
		||||
 | 
			
		||||
    #include <linux/flex_array.h>
 | 
			
		||||
 | 
			
		||||
    struct flex_array *flex_array_alloc(int element_size,
 | 
			
		||||
					unsigned int total,
 | 
			
		||||
					gfp_t flags);
 | 
			
		||||
 | 
			
		||||
The individual object size is provided by element_size, while total is the
 | 
			
		||||
maximum number of objects which can be stored in the array.  The flags
 | 
			
		||||
argument is passed directly to the internal memory allocation calls.  With
 | 
			
		||||
the current code, using flags to ask for high memory is likely to lead to
 | 
			
		||||
notably unpleasant side effects.
 | 
			
		||||
 | 
			
		||||
Storing data into a flexible array is accomplished with a call to:
 | 
			
		||||
 | 
			
		||||
    int flex_array_put(struct flex_array *array, unsigned int element_nr,
 | 
			
		||||
    		       void *src, gfp_t flags);
 | 
			
		||||
 | 
			
		||||
This call will copy the data from src into the array, in the position
 | 
			
		||||
indicated by element_nr (which must be less than the maximum specified when
 | 
			
		||||
the array was created).  If any memory allocations must be performed, flags
 | 
			
		||||
will be used.  The return value is zero on success, a negative error code
 | 
			
		||||
otherwise.
 | 
			
		||||
 | 
			
		||||
There might possibly be a need to store data into a flexible array while
 | 
			
		||||
running in some sort of atomic context; in this situation, sleeping in the
 | 
			
		||||
memory allocator would be a bad thing.  That can be avoided by using
 | 
			
		||||
GFP_ATOMIC for the flags value, but, often, there is a better way.  The
 | 
			
		||||
trick is to ensure that any needed memory allocations are done before
 | 
			
		||||
entering atomic context, using:
 | 
			
		||||
 | 
			
		||||
    int flex_array_prealloc(struct flex_array *array, unsigned int start,
 | 
			
		||||
			    unsigned int end, gfp_t flags);
 | 
			
		||||
 | 
			
		||||
This function will ensure that memory for the elements indexed in the range
 | 
			
		||||
defined by start and end has been allocated.  Thereafter, a
 | 
			
		||||
flex_array_put() call on an element in that range is guaranteed not to
 | 
			
		||||
block.
 | 
			
		||||
 | 
			
		||||
Getting data back out of the array is done with:
 | 
			
		||||
 | 
			
		||||
    void *flex_array_get(struct flex_array *fa, unsigned int element_nr);
 | 
			
		||||
 | 
			
		||||
The return value is a pointer to the data element, or NULL if that
 | 
			
		||||
particular element has never been allocated.
 | 
			
		||||
 | 
			
		||||
Note that it is possible to get back a valid pointer for an element which
 | 
			
		||||
has never been stored in the array.  Memory for array elements is allocated
 | 
			
		||||
one page at a time; a single allocation could provide memory for several
 | 
			
		||||
adjacent elements.  The flexible array code does not know if a specific
 | 
			
		||||
element has been written; it only knows if the associated memory is
 | 
			
		||||
present.  So a flex_array_get() call on an element which was never stored
 | 
			
		||||
in the array has the potential to return a pointer to random data.  If the
 | 
			
		||||
caller does not have a separate way to know which elements were actually
 | 
			
		||||
stored, it might be wise, at least, to add GFP_ZERO to the flags argument
 | 
			
		||||
to ensure that all elements are zeroed.
 | 
			
		||||
 | 
			
		||||
There is no way to remove a single element from the array.  It is possible,
 | 
			
		||||
though, to remove all elements with a call to:
 | 
			
		||||
 | 
			
		||||
    void flex_array_free_parts(struct flex_array *array);
 | 
			
		||||
 | 
			
		||||
This call frees all elements, but leaves the array itself in place.
 | 
			
		||||
Freeing the entire array is done with:
 | 
			
		||||
 | 
			
		||||
    void flex_array_free(struct flex_array *array);
 | 
			
		||||
 | 
			
		||||
As of this writing, there are no users of flexible arrays in the mainline
 | 
			
		||||
kernel.  The functions described here are also not exported to modules;
 | 
			
		||||
that will probably be fixed when somebody comes up with a need for it.
 | 
			
		||||
							
								
								
									
										475
									
								
								Documentation/input/sentelic.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										475
									
								
								Documentation/input/sentelic.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,475 @@
 | 
			
		|||
Copyright (C) 2002-2008 Sentelic Corporation.
 | 
			
		||||
Last update: Oct-31-2008
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* Finger Sensing Pad Intellimouse Mode(scrolling wheel, 4th and 5th buttons)
 | 
			
		||||
==============================================================================
 | 
			
		||||
A) MSID 4: Scrolling wheel mode plus Forward page(4th button) and Backward
 | 
			
		||||
   page (5th button)
 | 
			
		||||
@1. Set sample rate to 200;
 | 
			
		||||
@2. Set sample rate to 200;
 | 
			
		||||
@3. Set sample rate to 80;
 | 
			
		||||
@4. Issuing the "Get device ID" command (0xF2) and waits for the response;
 | 
			
		||||
@5. FSP will respond 0x04.
 | 
			
		||||
 | 
			
		||||
Packet 1
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |Y|X|y|x|1|M|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 | | |B|F|W|W|W|W|
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7 => Y overflow
 | 
			
		||||
        Bit6 => X overflow
 | 
			
		||||
        Bit5 => Y sign bit
 | 
			
		||||
        Bit4 => X sign bit
 | 
			
		||||
        Bit3 => 1
 | 
			
		||||
        Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit1 => Right Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit0 => Left Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
Byte 2: X Movement(9-bit 2's complement integers)
 | 
			
		||||
Byte 3: Y Movement(9-bit 2's complement integers)
 | 
			
		||||
Byte 4: Bit3~Bit0 => the scrolling wheel's movement since the last data report.
 | 
			
		||||
                     valid values, -8 ~ +7
 | 
			
		||||
        Bit4 => 1 = 4th mouse button is pressed, Forward one page.
 | 
			
		||||
                0 = 4th mouse button is not pressed.
 | 
			
		||||
        Bit5 => 1 = 5th mouse button is pressed, Backward one page.
 | 
			
		||||
                0 = 5th mouse button is not pressed.
 | 
			
		||||
 | 
			
		||||
B) MSID 6: Horizontal and Vertical scrolling.
 | 
			
		||||
@ Set bit 1 in register 0x40 to 1
 | 
			
		||||
 | 
			
		||||
# FSP replaces scrolling wheel's movement as 4 bits to show horizontal and
 | 
			
		||||
  vertical scrolling.
 | 
			
		||||
 | 
			
		||||
Packet 1
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |Y|X|y|x|1|M|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 | | |B|F|l|r|u|d|
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7 => Y overflow
 | 
			
		||||
        Bit6 => X overflow
 | 
			
		||||
        Bit5 => Y sign bit
 | 
			
		||||
        Bit4 => X sign bit
 | 
			
		||||
        Bit3 => 1
 | 
			
		||||
        Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit1 => Right Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit0 => Left Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
Byte 2: X Movement(9-bit 2's complement integers)
 | 
			
		||||
Byte 3: Y Movement(9-bit 2's complement integers)
 | 
			
		||||
Byte 4: Bit0 => the Vertical scrolling movement downward.
 | 
			
		||||
	Bit1 => the Vertical scrolling movement upward.
 | 
			
		||||
	Bit2 => the Vertical scrolling movement rightward.
 | 
			
		||||
	Bit3 => the Vertical scrolling movement leftward.
 | 
			
		||||
        Bit4 => 1 = 4th mouse button is pressed, Forward one page.
 | 
			
		||||
                0 = 4th mouse button is not pressed.
 | 
			
		||||
        Bit5 => 1 = 5th mouse button is pressed, Backward one page.
 | 
			
		||||
                0 = 5th mouse button is not pressed.
 | 
			
		||||
 | 
			
		||||
C) MSID 7:
 | 
			
		||||
# FSP uses 2 packets(8 Bytes) data to represent Absolute Position
 | 
			
		||||
  so we have PACKET NUMBER to identify packets.
 | 
			
		||||
  If PACKET NUMBER is 0, the packet is Packet 1.
 | 
			
		||||
  If PACKET NUMBER is 1, the packet is Packet 2.
 | 
			
		||||
  Please count this number in program.
 | 
			
		||||
 | 
			
		||||
# MSID6 special packet will be enable at the same time when enable MSID 7.
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* Absolute position for STL3886-G0.
 | 
			
		||||
==============================================================================
 | 
			
		||||
@ Set bit 2 or 3 in register 0x40 to 1
 | 
			
		||||
@ Set bit 6 in register 0x40 to 1
 | 
			
		||||
 | 
			
		||||
Packet 1 (ABSOLUTE POSITION)
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |0|1|V|1|1|M|R|L|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |r|l|d|u|X|X|Y|Y|
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7~Bit6 => 00, Normal data packet
 | 
			
		||||
                  => 01, Absolute coordination packet
 | 
			
		||||
                  => 10, Notify packet
 | 
			
		||||
        Bit5 => valid bit
 | 
			
		||||
        Bit4 => 1
 | 
			
		||||
        Bit3 => 1
 | 
			
		||||
        Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit1 => Right Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit0 => Left Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
Byte 2: X coordinate (xpos[9:2])
 | 
			
		||||
Byte 3: Y coordinate (ypos[9:2])
 | 
			
		||||
Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
 | 
			
		||||
        Bit3~Bit2 => X coordinate (ypos[1:0])
 | 
			
		||||
        Bit4 => scroll up
 | 
			
		||||
        Bit5 => scroll down
 | 
			
		||||
        Bit6 => scroll left
 | 
			
		||||
        Bit7 => scroll right
 | 
			
		||||
 | 
			
		||||
Notify Packet for G0
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |1|0|0|1|1|M|R|L|  2  |C|C|C|C|C|C|C|C|  3 |M|M|M|M|M|M|M|M|  4 |0|0|0|0|0|0|0|0|
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7~Bit6 => 00, Normal data packet
 | 
			
		||||
                  => 01, Absolute coordination packet
 | 
			
		||||
                  => 10, Notify packet
 | 
			
		||||
        Bit5 => 0
 | 
			
		||||
        Bit4 => 1
 | 
			
		||||
        Bit3 => 1
 | 
			
		||||
        Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit1 => Right Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit0 => Left Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
Byte 2: Message Type => 0x5A (Enable/Disable status packet)
 | 
			
		||||
        Mode Type => 0xA5 (Normal/Icon mode status)
 | 
			
		||||
Byte 3: Message Type => 0x00 (Disabled)
 | 
			
		||||
                     => 0x01 (Enabled)
 | 
			
		||||
        Mode Type    => 0x00 (Normal)
 | 
			
		||||
                     => 0x01 (Icon)
 | 
			
		||||
Byte 4: Bit7~Bit0 => Don't Care
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* Absolute position for STL3888-A0.
 | 
			
		||||
==============================================================================
 | 
			
		||||
Packet 1 (ABSOLUTE POSITION)
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |0|1|V|A|1|L|0|1|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |x|x|y|y|X|X|Y|Y|
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7~Bit6 => 00, Normal data packet
 | 
			
		||||
                  => 01, Absolute coordination packet
 | 
			
		||||
                  => 10, Notify packet
 | 
			
		||||
        Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
 | 
			
		||||
                When both fingers are up, the last two reports have zero valid
 | 
			
		||||
                bit.
 | 
			
		||||
        Bit4 => arc
 | 
			
		||||
        Bit3 => 1
 | 
			
		||||
        Bit2 => Left Button, 1 is pressed, 0 is released.
 | 
			
		||||
        Bit1 => 0
 | 
			
		||||
        Bit0 => 1
 | 
			
		||||
Byte 2: X coordinate (xpos[9:2])
 | 
			
		||||
Byte 3: Y coordinate (ypos[9:2])
 | 
			
		||||
Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
 | 
			
		||||
        Bit3~Bit2 => X coordinate (ypos[1:0])
 | 
			
		||||
        Bit5~Bit4 => y1_g
 | 
			
		||||
        Bit7~Bit6 => x1_g
 | 
			
		||||
 | 
			
		||||
Packet 2 (ABSOLUTE POSITION)
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |0|1|V|A|1|R|1|0|  2  |X|X|X|X|X|X|X|X|  3 |Y|Y|Y|Y|Y|Y|Y|Y|  4 |x|x|y|y|X|X|Y|Y|
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7~Bit6 => 00, Normal data packet
 | 
			
		||||
                  => 01, Absolute coordinates packet
 | 
			
		||||
                  => 10, Notify packet
 | 
			
		||||
        Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
 | 
			
		||||
                When both fingers are up, the last two reports have zero valid
 | 
			
		||||
                bit.
 | 
			
		||||
        Bit4 => arc
 | 
			
		||||
        Bit3 => 1
 | 
			
		||||
        Bit2 => Right Button, 1 is pressed, 0 is released.
 | 
			
		||||
        Bit1 => 1
 | 
			
		||||
        Bit0 => 0
 | 
			
		||||
Byte 2: X coordinate (xpos[9:2])
 | 
			
		||||
Byte 3: Y coordinate (ypos[9:2])
 | 
			
		||||
Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
 | 
			
		||||
        Bit3~Bit2 => X coordinate (ypos[1:0])
 | 
			
		||||
        Bit5~Bit4 => y2_g
 | 
			
		||||
        Bit7~Bit6 => x2_g
 | 
			
		||||
 | 
			
		||||
Notify Packet for STL3888-A0
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |1|0|1|P|1|M|R|L|  2  |C|C|C|C|C|C|C|C|  3 |0|0|F|F|0|0|0|i|  4 |r|l|d|u|0|0|0|0|
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7~Bit6 => 00, Normal data packet
 | 
			
		||||
                  => 01, Absolute coordination packet
 | 
			
		||||
                  => 10, Notify packet
 | 
			
		||||
        Bit5 => 1
 | 
			
		||||
        Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
 | 
			
		||||
                0: left button is generated by the on-pad command
 | 
			
		||||
                1: left button is generated by the external button
 | 
			
		||||
        Bit3 => 1
 | 
			
		||||
        Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit1 => Right Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
        Bit0 => Left Button, 1 is pressed, 0 is not pressed.
 | 
			
		||||
Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)
 | 
			
		||||
Byte 3: Bit7~Bit6 => Don't care
 | 
			
		||||
        Bit5~Bit4 => Number of fingers
 | 
			
		||||
        Bit3~Bit1 => Reserved
 | 
			
		||||
        Bit0 => 1: enter gesture mode; 0: leaving gesture mode
 | 
			
		||||
Byte 4: Bit7 => scroll right button
 | 
			
		||||
        Bit6 => scroll left button
 | 
			
		||||
        Bit5 => scroll down button
 | 
			
		||||
        Bit4 => scroll up button
 | 
			
		||||
            * Note that if gesture and additional button (Bit4~Bit7)
 | 
			
		||||
	      happen at the same time, the button information will not
 | 
			
		||||
	      be sent.
 | 
			
		||||
        Bit3~Bit0 => Reserved
 | 
			
		||||
 | 
			
		||||
Sample sequence of Multi-finger, Multi-coordinate mode:
 | 
			
		||||
 | 
			
		||||
	notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
 | 
			
		||||
	abs pkt 2, ..., notify packet(valid bit == 0)
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* FSP Enable/Disable packet
 | 
			
		||||
==============================================================================
 | 
			
		||||
   Bit 7 6 5 4 3 2 1 0       7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0      7 6 5 4 3 2 1 0
 | 
			
		||||
BYTE  |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
 | 
			
		||||
  1   |Y|X|0|0|1|M|R|L|  2  |0|1|0|1|1|0|1|E|  3 | | | | | | | | |  4 | | | | | | | | |
 | 
			
		||||
      |---------------|     |---------------|    |---------------|    |---------------|
 | 
			
		||||
 | 
			
		||||
FSP will send out enable/disable packet when FSP receive PS/2 enable/disable
 | 
			
		||||
command. Host will receive the packet which Middle, Right, Left button will
 | 
			
		||||
be set. The packet only use byte 0 and byte 1 as a pattern of original packet.
 | 
			
		||||
Ignore the other bytes of the packet.
 | 
			
		||||
 | 
			
		||||
Byte 1: Bit7 => 0, Y overflow
 | 
			
		||||
        Bit6 => 0, X overflow
 | 
			
		||||
	Bit5 => 0, Y sign bit
 | 
			
		||||
        Bit4 => 0, X sign bit
 | 
			
		||||
	Bit3 => 1
 | 
			
		||||
	Bit2 => 1, Middle Button
 | 
			
		||||
        Bit1 => 1, Right Button
 | 
			
		||||
        Bit0 => 1, Left Button
 | 
			
		||||
Byte 2: Bit7~1 => (0101101b)
 | 
			
		||||
        Bit0 => 1 = Enable
 | 
			
		||||
		0 = Disable
 | 
			
		||||
Byte 3: Don't care
 | 
			
		||||
Byte 4: Don't care (MOUSE ID 3, 4)
 | 
			
		||||
Byte 5~8: Don't care (Absolute packet)
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* PS/2 Command Set
 | 
			
		||||
==============================================================================
 | 
			
		||||
 | 
			
		||||
FSP supports basic PS/2 commanding set and modes, refer to following URL for
 | 
			
		||||
details about PS/2 commands:
 | 
			
		||||
 | 
			
		||||
http://www.computer-engineering.org/index.php?title=PS/2_Mouse_Interface
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* Programming Sequence for Determining Packet Parsing Flow
 | 
			
		||||
==============================================================================
 | 
			
		||||
1. Identify FSP by reading device ID(0x00) and version(0x01) register
 | 
			
		||||
 | 
			
		||||
2. Determine number of buttons by reading status2 (0x0b) register
 | 
			
		||||
 | 
			
		||||
	buttons = reg[0x0b] & 0x30
 | 
			
		||||
 | 
			
		||||
	if buttons == 0x30 or buttons == 0x20:
 | 
			
		||||
		# two/four buttons
 | 
			
		||||
		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 | 
			
		||||
		section A for packet parsing detail(ignore byte 4, bit ~ 7)
 | 
			
		||||
	elif buttons == 0x10:
 | 
			
		||||
		# 6 buttons
 | 
			
		||||
		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 | 
			
		||||
		section B for packet parsing detail
 | 
			
		||||
	elif buttons == 0x00:
 | 
			
		||||
		# 6 buttons
 | 
			
		||||
		Refer to 'Finger Sensing Pad PS/2 Mouse Intellimouse'
 | 
			
		||||
		section A for packet parsing detail
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* Programming Sequence for Register Reading/Writing
 | 
			
		||||
==============================================================================
 | 
			
		||||
 | 
			
		||||
Register inversion requirement:
 | 
			
		||||
 | 
			
		||||
  Following values needed to be inverted(the '~' operator in C) before being
 | 
			
		||||
sent to FSP:
 | 
			
		||||
 | 
			
		||||
	0xe9, 0xee, 0xf2 and 0xff.
 | 
			
		||||
 | 
			
		||||
Register swapping requirement:
 | 
			
		||||
 | 
			
		||||
  Following values needed to have their higher 4 bits and lower 4 bits being
 | 
			
		||||
swapped before being sent to FSP:
 | 
			
		||||
 | 
			
		||||
	10, 20, 40, 60, 80, 100 and 200.
 | 
			
		||||
 | 
			
		||||
Register reading sequence:
 | 
			
		||||
 | 
			
		||||
	1. send 0xf3 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	2. send 0x66 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	3. send 0x88 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	4. send 0xf3 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	5. if the register address being to read is not required to be
 | 
			
		||||
	inverted(refer to the 'Register inversion requirement' section),
 | 
			
		||||
	goto step 6
 | 
			
		||||
 | 
			
		||||
	5a. send 0x68 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	5b. send the inverted register address to FSP and goto step 8;
 | 
			
		||||
 | 
			
		||||
	6. if the register address being to read is not required to be
 | 
			
		||||
	swapped(refer to the 'Register swapping requirement' section),
 | 
			
		||||
	goto step 7
 | 
			
		||||
 | 
			
		||||
	6a. send 0xcc PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	6b. send the swapped register address to FSP and goto step 8;
 | 
			
		||||
 | 
			
		||||
	7. send 0x66 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	7a. send the original register address to FSP and goto step 8;
 | 
			
		||||
 | 
			
		||||
	8. send 0xe9(status request) PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	9. the response read from FSP should be the requested register value.
 | 
			
		||||
 | 
			
		||||
Register writing sequence:
 | 
			
		||||
 | 
			
		||||
	1. send 0xf3 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	2. if the register address being to write is not required to be
 | 
			
		||||
	inverted(refer to the 'Register inversion requirement' section),
 | 
			
		||||
	goto step 3
 | 
			
		||||
 | 
			
		||||
	2a. send 0x74 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	2b. send the inverted register address to FSP and goto step 5;
 | 
			
		||||
 | 
			
		||||
	3. if the register address being to write is not required to be
 | 
			
		||||
	swapped(refer to the 'Register swapping requirement' section),
 | 
			
		||||
	goto step 4
 | 
			
		||||
 | 
			
		||||
	3a. send 0x77 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	3b. send the swapped register address to FSP and goto step 5;
 | 
			
		||||
 | 
			
		||||
	4. send 0x55 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	4a. send the register address to FSP and goto step 5;
 | 
			
		||||
 | 
			
		||||
	5. send 0xf3 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	6. if the register value being to write is not required to be
 | 
			
		||||
	inverted(refer to the 'Register inversion requirement' section),
 | 
			
		||||
	goto step 7
 | 
			
		||||
 | 
			
		||||
	6a. send 0x47 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	6b. send the inverted register value to FSP and goto step 9;
 | 
			
		||||
 | 
			
		||||
	7. if the register value being to write is not required to be
 | 
			
		||||
	swapped(refer to the 'Register swapping requirement' section),
 | 
			
		||||
	goto step 8
 | 
			
		||||
 | 
			
		||||
	7a. send 0x44 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	7b. send the swapped register value to FSP and goto step 9;
 | 
			
		||||
 | 
			
		||||
	8. send 0x33 PS/2 command to FSP;
 | 
			
		||||
 | 
			
		||||
	8a. send the register value to FSP;
 | 
			
		||||
 | 
			
		||||
	9. the register writing sequence is completed.
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
* Register Listing
 | 
			
		||||
==============================================================================
 | 
			
		||||
 | 
			
		||||
offset	width		default	r/w	name
 | 
			
		||||
0x00	bit7~bit0	0x01	RO	device ID
 | 
			
		||||
 | 
			
		||||
0x01	bit7~bit0	0xc0	RW	version ID
 | 
			
		||||
 | 
			
		||||
0x02	bit7~bit0	0x01	RO	vendor ID
 | 
			
		||||
 | 
			
		||||
0x03	bit7~bit0	0x01	RO	product ID
 | 
			
		||||
 | 
			
		||||
0x04	bit3~bit0	0x01	RW	revision ID
 | 
			
		||||
 | 
			
		||||
0x0b				RO	test mode status 1
 | 
			
		||||
	bit3		1	RO	0: rotate 180 degree, 1: no rotation
 | 
			
		||||
 | 
			
		||||
	bit5~bit4		RO	number of buttons
 | 
			
		||||
			11 => 2, lbtn/rbtn
 | 
			
		||||
			10 => 4, lbtn/rbtn/scru/scrd
 | 
			
		||||
			01 => 6, lbtn/rbtn/scru/scrd/scrl/scrr
 | 
			
		||||
			00 => 6, lbtn/rbtn/scru/scrd/fbtn/bbtn
 | 
			
		||||
 | 
			
		||||
0x0f				RW	register file page control
 | 
			
		||||
	bit0		0	RW	1 to enable page 1 register files
 | 
			
		||||
 | 
			
		||||
0x10				RW	system control 1
 | 
			
		||||
	bit0		1	RW	Reserved, must be 1
 | 
			
		||||
	bit1		0	RW	Reserved, must be 0
 | 
			
		||||
	bit4		1	RW	Reserved, must be 0
 | 
			
		||||
	bit5		0	RW	register clock gating enable
 | 
			
		||||
					0: read only, 1: read/write enable
 | 
			
		||||
	(Note that following registers does not require clock gating being
 | 
			
		||||
	enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e
 | 
			
		||||
	40 41 42 43.)
 | 
			
		||||
 | 
			
		||||
0x31				RW	on-pad command detection
 | 
			
		||||
	bit7		0	RW	on-pad command left button down tag
 | 
			
		||||
					enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
 | 
			
		||||
0x34				RW	on-pad command control 5
 | 
			
		||||
	bit4~bit0	0x05	RW	XLO in 0s/4/1, so 03h = 0010.1b = 2.5
 | 
			
		||||
	(Note that position unit is in 0.5 scanline)
 | 
			
		||||
 | 
			
		||||
	bit7		0	RW	on-pad tap zone enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
 | 
			
		||||
0x35				RW	on-pad command control 6
 | 
			
		||||
	bit4~bit0	0x1d	RW	XHI in 0s/4/1, so 19h = 1100.1b = 12.5
 | 
			
		||||
	(Note that position unit is in 0.5 scanline)
 | 
			
		||||
 | 
			
		||||
0x36				RW	on-pad command control 7
 | 
			
		||||
	bit4~bit0	0x04	RW	YLO in 0s/4/1, so 03h = 0010.1b = 2.5
 | 
			
		||||
	(Note that position unit is in 0.5 scanline)
 | 
			
		||||
 | 
			
		||||
0x37				RW	on-pad command control 8
 | 
			
		||||
	bit4~bit0	0x13	RW	YHI in 0s/4/1, so 11h = 1000.1b = 8.5
 | 
			
		||||
	(Note that position unit is in 0.5 scanline)
 | 
			
		||||
 | 
			
		||||
0x40				RW	system control 5
 | 
			
		||||
	bit1		0	RW	FSP Intellimouse mode enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
 | 
			
		||||
	bit2		0	RW	movement + abs. coordinate mode enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
	(Note that this function has the functionality of bit 1 even when
 | 
			
		||||
	bit 1 is not set. However, the format is different from that of bit 1.
 | 
			
		||||
	In addition, when bit 1 and bit 2 are set at the same time, bit 2 will
 | 
			
		||||
	override bit 1.)
 | 
			
		||||
 | 
			
		||||
	bit3		0	RW	abs. coordinate only mode enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
	(Note that this function has the functionality of bit 1 even when
 | 
			
		||||
	bit 1 is not set. However, the format is different from that of bit 1.
 | 
			
		||||
	In addition, when bit 1, bit 2 and bit 3 are set at the same time,
 | 
			
		||||
	bit 3 will override bit 1 and 2.)
 | 
			
		||||
 | 
			
		||||
	bit5		0	RW	auto switch enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
 | 
			
		||||
	bit6		0	RW	G0 abs. + notify packet format enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
	(Note that the absolute/relative coordinate output still depends on
 | 
			
		||||
	bit 2 and 3.  That is, if any of those bit is 1, host will receive
 | 
			
		||||
	absolute coordinates; otherwise, host only receives packets with
 | 
			
		||||
	relative coordinate.)
 | 
			
		||||
 | 
			
		||||
0x43				RW	on-pad control
 | 
			
		||||
	bit0		0	RW	on-pad control enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
	(Note that if this bit is cleared, bit 3/5 will be ineffective)
 | 
			
		||||
 | 
			
		||||
	bit3		0	RW	on-pad fix vertical scrolling enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
 | 
			
		||||
	bit5		0	RW	on-pad fix horizontal scrolling enable
 | 
			
		||||
					0: disable, 1: enable
 | 
			
		||||
							
								
								
									
										210
									
								
								Documentation/intel_txt.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								Documentation/intel_txt.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,210 @@
 | 
			
		|||
Intel(R) TXT Overview:
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
Intel's technology for safer computing, Intel(R) Trusted Execution
 | 
			
		||||
Technology (Intel(R) TXT), defines platform-level enhancements that
 | 
			
		||||
provide the building blocks for creating trusted platforms.
 | 
			
		||||
 | 
			
		||||
Intel TXT was formerly known by the code name LaGrande Technology (LT).
 | 
			
		||||
 | 
			
		||||
Intel TXT in Brief:
 | 
			
		||||
o  Provides dynamic root of trust for measurement (DRTM)
 | 
			
		||||
o  Data protection in case of improper shutdown
 | 
			
		||||
o  Measurement and verification of launched environment
 | 
			
		||||
 | 
			
		||||
Intel TXT is part of the vPro(TM) brand and is also available some
 | 
			
		||||
non-vPro systems.  It is currently available on desktop systems
 | 
			
		||||
based on the Q35, X38, Q45, and Q43 Express chipsets (e.g. Dell
 | 
			
		||||
Optiplex 755, HP dc7800, etc.) and mobile systems based on the GM45,
 | 
			
		||||
PM45, and GS45 Express chipsets.
 | 
			
		||||
 | 
			
		||||
For more information, see http://www.intel.com/technology/security/.
 | 
			
		||||
This site also has a link to the Intel TXT MLE Developers Manual,
 | 
			
		||||
which has been updated for the new released platforms.
 | 
			
		||||
 | 
			
		||||
Intel TXT has been presented at various events over the past few
 | 
			
		||||
years, some of which are:
 | 
			
		||||
      LinuxTAG 2008:
 | 
			
		||||
          http://www.linuxtag.org/2008/en/conf/events/vp-donnerstag/
 | 
			
		||||
          details.html?talkid=110
 | 
			
		||||
      TRUST2008:
 | 
			
		||||
          http://www.trust2008.eu/downloads/Keynote-Speakers/
 | 
			
		||||
          3_David-Grawrock_The-Front-Door-of-Trusted-Computing.pdf
 | 
			
		||||
      IDF 2008, Shanghai:
 | 
			
		||||
          http://inteldeveloperforum.com.edgesuite.net/shanghai_2008/
 | 
			
		||||
          aep/PROS003/index.html
 | 
			
		||||
      IDFs 2006, 2007 (I'm not sure if/where they are online)
 | 
			
		||||
 | 
			
		||||
Trusted Boot Project Overview:
 | 
			
		||||
=============================
 | 
			
		||||
 | 
			
		||||
Trusted Boot (tboot) is an open source, pre- kernel/VMM module that
 | 
			
		||||
uses Intel TXT to perform a measured and verified launch of an OS
 | 
			
		||||
kernel/VMM.
 | 
			
		||||
 | 
			
		||||
It is hosted on SourceForge at http://sourceforge.net/projects/tboot.
 | 
			
		||||
The mercurial source repo is available at http://www.bughost.org/
 | 
			
		||||
repos.hg/tboot.hg.
 | 
			
		||||
 | 
			
		||||
Tboot currently supports launching Xen (open source VMM/hypervisor
 | 
			
		||||
w/ TXT support since v3.2), and now Linux kernels.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Value Proposition for Linux or "Why should you care?"
 | 
			
		||||
=====================================================
 | 
			
		||||
 | 
			
		||||
While there are many products and technologies that attempt to
 | 
			
		||||
measure or protect the integrity of a running kernel, they all
 | 
			
		||||
assume the kernel is "good" to begin with.  The Integrity
 | 
			
		||||
Measurement Architecture (IMA) and Linux Integrity Module interface
 | 
			
		||||
are examples of such solutions.
 | 
			
		||||
 | 
			
		||||
To get trust in the initial kernel without using Intel TXT, a
 | 
			
		||||
static root of trust must be used.  This bases trust in BIOS
 | 
			
		||||
starting at system reset and requires measurement of all code
 | 
			
		||||
executed between system reset through the completion of the kernel
 | 
			
		||||
boot as well as data objects used by that code.  In the case of a
 | 
			
		||||
Linux kernel, this means all of BIOS, any option ROMs, the
 | 
			
		||||
bootloader and the boot config.  In practice, this is a lot of
 | 
			
		||||
code/data, much of which is subject to change from boot to boot
 | 
			
		||||
(e.g. changing NICs may change option ROMs).  Without reference
 | 
			
		||||
hashes, these measurement changes are difficult to assess or
 | 
			
		||||
confirm as benign.  This process also does not provide DMA
 | 
			
		||||
protection, memory configuration/alias checks and locks, crash
 | 
			
		||||
protection, or policy support.
 | 
			
		||||
 | 
			
		||||
By using the hardware-based root of trust that Intel TXT provides,
 | 
			
		||||
many of these issues can be mitigated.  Specifically: many
 | 
			
		||||
pre-launch components can be removed from the trust chain, DMA
 | 
			
		||||
protection is provided to all launched components, a large number
 | 
			
		||||
of platform configuration checks are performed and values locked,
 | 
			
		||||
protection is provided for any data in the event of an improper
 | 
			
		||||
shutdown, and there is support for policy-based execution/verification.
 | 
			
		||||
This provides a more stable measurement and a higher assurance of
 | 
			
		||||
system configuration and initial state than would be otherwise
 | 
			
		||||
possible.  Since the tboot project is open source, source code for
 | 
			
		||||
almost all parts of the trust chain is available (excepting SMM and
 | 
			
		||||
Intel-provided firmware).
 | 
			
		||||
 | 
			
		||||
How Does it Work?
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
o  Tboot is an executable that is launched by the bootloader as
 | 
			
		||||
   the "kernel" (the binary the bootloader executes).
 | 
			
		||||
o  It performs all of the work necessary to determine if the
 | 
			
		||||
   platform supports Intel TXT and, if so, executes the GETSEC[SENTER]
 | 
			
		||||
   processor instruction that initiates the dynamic root of trust.
 | 
			
		||||
   -  If tboot determines that the system does not support Intel TXT
 | 
			
		||||
      or is not configured correctly (e.g. the SINIT AC Module was
 | 
			
		||||
      incorrect), it will directly launch the kernel with no changes
 | 
			
		||||
      to any state.
 | 
			
		||||
   -  Tboot will output various information about its progress to the
 | 
			
		||||
      terminal, serial port, and/or an in-memory log; the output
 | 
			
		||||
      locations can be configured with a command line switch.
 | 
			
		||||
o  The GETSEC[SENTER] instruction will return control to tboot and
 | 
			
		||||
   tboot then verifies certain aspects of the environment (e.g. TPM NV
 | 
			
		||||
   lock, e820 table does not have invalid entries, etc.).
 | 
			
		||||
o  It will wake the APs from the special sleep state the GETSEC[SENTER]
 | 
			
		||||
   instruction had put them in and place them into a wait-for-SIPI
 | 
			
		||||
   state.
 | 
			
		||||
   -  Because the processors will not respond to an INIT or SIPI when
 | 
			
		||||
      in the TXT environment, it is necessary to create a small VT-x
 | 
			
		||||
      guest for the APs.  When they run in this guest, they will
 | 
			
		||||
      simply wait for the INIT-SIPI-SIPI sequence, which will cause
 | 
			
		||||
      VMEXITs, and then disable VT and jump to the SIPI vector.  This
 | 
			
		||||
      approach seemed like a better choice than having to insert
 | 
			
		||||
      special code into the kernel's MP wakeup sequence.
 | 
			
		||||
o  Tboot then applies an (optional) user-defined launch policy to
 | 
			
		||||
   verify the kernel and initrd.
 | 
			
		||||
   -  This policy is rooted in TPM NV and is described in the tboot
 | 
			
		||||
      project.  The tboot project also contains code for tools to
 | 
			
		||||
      create and provision the policy.
 | 
			
		||||
   -  Policies are completely under user control and if not present
 | 
			
		||||
      then any kernel will be launched.
 | 
			
		||||
   -  Policy action is flexible and can include halting on failures
 | 
			
		||||
      or simply logging them and continuing.
 | 
			
		||||
o  Tboot adjusts the e820 table provided by the bootloader to reserve
 | 
			
		||||
   its own location in memory as well as to reserve certain other
 | 
			
		||||
   TXT-related regions.
 | 
			
		||||
o  As part of it's launch, tboot DMA protects all of RAM (using the
 | 
			
		||||
   VT-d PMRs).  Thus, the kernel must be booted with 'intel_iommu=on'
 | 
			
		||||
   in order to remove this blanket protection and use VT-d's
 | 
			
		||||
   page-level protection.
 | 
			
		||||
o  Tboot will populate a shared page with some data about itself and
 | 
			
		||||
   pass this to the Linux kernel as it transfers control.
 | 
			
		||||
   -  The location of the shared page is passed via the boot_params
 | 
			
		||||
      struct as a physical address.
 | 
			
		||||
o  The kernel will look for the tboot shared page address and, if it
 | 
			
		||||
   exists, map it.
 | 
			
		||||
o  As one of the checks/protections provided by TXT, it makes a copy
 | 
			
		||||
   of the VT-d DMARs in a DMA-protected region of memory and verifies
 | 
			
		||||
   them for correctness.  The VT-d code will detect if the kernel was
 | 
			
		||||
   launched with tboot and use this copy instead of the one in the
 | 
			
		||||
   ACPI table.
 | 
			
		||||
o  At this point, tboot and TXT are out of the picture until a
 | 
			
		||||
   shutdown (S<n>)
 | 
			
		||||
o  In order to put a system into any of the sleep states after a TXT
 | 
			
		||||
   launch, TXT must first be exited.  This is to prevent attacks that
 | 
			
		||||
   attempt to crash the system to gain control on reboot and steal
 | 
			
		||||
   data left in memory.
 | 
			
		||||
   -  The kernel will perform all of its sleep preparation and
 | 
			
		||||
      populate the shared page with the ACPI data needed to put the
 | 
			
		||||
      platform in the desired sleep state.
 | 
			
		||||
   -  Then the kernel jumps into tboot via the vector specified in the
 | 
			
		||||
      shared page.
 | 
			
		||||
   -  Tboot will clean up the environment and disable TXT, then use the
 | 
			
		||||
      kernel-provided ACPI information to actually place the platform
 | 
			
		||||
      into the desired sleep state.
 | 
			
		||||
   -  In the case of S3, tboot will also register itself as the resume
 | 
			
		||||
      vector.  This is necessary because it must re-establish the
 | 
			
		||||
      measured environment upon resume.  Once the TXT environment
 | 
			
		||||
      has been restored, it will restore the TPM PCRs and then
 | 
			
		||||
      transfer control back to the kernel's S3 resume vector.
 | 
			
		||||
      In order to preserve system integrity across S3, the kernel
 | 
			
		||||
      provides tboot with a set of memory ranges (kernel
 | 
			
		||||
      code/data/bss, S3 resume code, and AP trampoline) that tboot
 | 
			
		||||
      will calculate a MAC (message authentication code) over and then
 | 
			
		||||
      seal with the TPM.  On resume and once the measured environment
 | 
			
		||||
      has been re-established, tboot will re-calculate the MAC and
 | 
			
		||||
      verify it against the sealed value.  Tboot's policy determines
 | 
			
		||||
      what happens if the verification fails.
 | 
			
		||||
 | 
			
		||||
That's pretty much it for TXT support.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Configuring the System:
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
This code works with 32bit, 32bit PAE, and 64bit (x86_64) kernels.
 | 
			
		||||
 | 
			
		||||
In BIOS, the user must enable:  TPM, TXT, VT-x, VT-d.  Not all BIOSes
 | 
			
		||||
allow these to be individually enabled/disabled and the screens in
 | 
			
		||||
which to find them are BIOS-specific.
 | 
			
		||||
 | 
			
		||||
grub.conf needs to be modified as follows:
 | 
			
		||||
        title Linux 2.6.29-tip w/ tboot
 | 
			
		||||
          root (hd0,0)
 | 
			
		||||
                kernel /tboot.gz logging=serial,vga,memory
 | 
			
		||||
                module /vmlinuz-2.6.29-tip intel_iommu=on ro
 | 
			
		||||
                       root=LABEL=/ rhgb console=ttyS0,115200 3
 | 
			
		||||
                module /initrd-2.6.29-tip.img
 | 
			
		||||
                module /Q35_SINIT_17.BIN
 | 
			
		||||
 | 
			
		||||
The kernel option for enabling Intel TXT support is found under the
 | 
			
		||||
Security top-level menu and is called "Enable Intel(R) Trusted
 | 
			
		||||
Execution Technology (TXT)".  It is marked as EXPERIMENTAL and
 | 
			
		||||
depends on the generic x86 support (to allow maximum flexibility in
 | 
			
		||||
kernel build options), since the tboot code will detect whether the
 | 
			
		||||
platform actually supports Intel TXT and thus whether any of the
 | 
			
		||||
kernel code is executed.
 | 
			
		||||
 | 
			
		||||
The Q35_SINIT_17.BIN file is what Intel TXT refers to as an
 | 
			
		||||
Authenticated Code Module.  It is specific to the chipset in the
 | 
			
		||||
system and can also be found on the Trusted Boot site.  It is an
 | 
			
		||||
(unencrypted) module signed by Intel that is used as part of the
 | 
			
		||||
DRTM process to verify and configure the system.  It is signed
 | 
			
		||||
because it operates at a higher privilege level in the system than
 | 
			
		||||
any other macrocode and its correct operation is critical to the
 | 
			
		||||
establishment of the DRTM.  The process for determining the correct
 | 
			
		||||
SINIT ACM for a system is documented in the SINIT-guide.txt file
 | 
			
		||||
that is on the tboot SourceForge site under the SINIT ACM downloads.
 | 
			
		||||
| 
						 | 
				
			
			@ -121,6 +121,7 @@ Code	Seq#	Include File		Comments
 | 
			
		|||
'c'	00-7F	linux/comstats.h	conflict!
 | 
			
		||||
'c'	00-7F	linux/coda.h		conflict!
 | 
			
		||||
'c'	80-9F	arch/s390/include/asm/chsc.h
 | 
			
		||||
'c'	A0-AF   arch/x86/include/asm/msr.h
 | 
			
		||||
'd'	00-FF	linux/char/drm/drm/h	conflict!
 | 
			
		||||
'd'	F0-FF	linux/digi1.h
 | 
			
		||||
'e'	all	linux/digi1.h		conflict!
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +193,7 @@ Code	Seq#	Include File		Comments
 | 
			
		|||
0xAD	00	Netfilter device	in development:
 | 
			
		||||
					<mailto:rusty@rustcorp.com.au>	
 | 
			
		||||
0xAE	all	linux/kvm.h		Kernel-based Virtual Machine
 | 
			
		||||
					<mailto:kvm-devel@lists.sourceforge.net>
 | 
			
		||||
					<mailto:kvm@vger.kernel.org>
 | 
			
		||||
0xB0	all	RATIO devices		in development:
 | 
			
		||||
					<mailto:vgo@ratio.de>
 | 
			
		||||
0xB1	00-1F	PPPoX			<mailto:mostrows@styx.uwaterloo.ca>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,6 +57,7 @@ parameter is applicable:
 | 
			
		|||
	ISAPNP	ISA PnP code is enabled.
 | 
			
		||||
	ISDN	Appropriate ISDN support is enabled.
 | 
			
		||||
	JOY	Appropriate joystick support is enabled.
 | 
			
		||||
	KVM	Kernel Virtual Machine support is enabled.
 | 
			
		||||
	LIBATA  Libata driver is enabled
 | 
			
		||||
	LP	Printer support is enabled.
 | 
			
		||||
	LOOP	Loopback device support is enabled.
 | 
			
		||||
| 
						 | 
				
			
			@ -1098,6 +1099,44 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
	kstack=N	[X86] Print N words from the kernel stack
 | 
			
		||||
			in oops dumps.
 | 
			
		||||
 | 
			
		||||
	kvm.ignore_msrs=[KVM] Ignore guest accesses to unhandled MSRs.
 | 
			
		||||
			Default is 0 (don't ignore, but inject #GP)
 | 
			
		||||
 | 
			
		||||
	kvm.oos_shadow=	[KVM] Disable out-of-sync shadow paging.
 | 
			
		||||
			Default is 1 (enabled)
 | 
			
		||||
 | 
			
		||||
	kvm-amd.nested=	[KVM,AMD] Allow nested virtualization in KVM/SVM.
 | 
			
		||||
			Default is 0 (off)
 | 
			
		||||
 | 
			
		||||
	kvm-amd.npt=	[KVM,AMD] Disable nested paging (virtualized MMU)
 | 
			
		||||
			for all guests.
 | 
			
		||||
			Default is 1 (enabled) if in 64bit or 32bit-PAE mode
 | 
			
		||||
 | 
			
		||||
	kvm-intel.bypass_guest_pf=
 | 
			
		||||
			[KVM,Intel] Disables bypassing of guest page faults
 | 
			
		||||
			on Intel chips. Default is 1 (enabled)
 | 
			
		||||
 | 
			
		||||
	kvm-intel.ept=	[KVM,Intel] Disable extended page tables
 | 
			
		||||
			(virtualized MMU) support on capable Intel chips.
 | 
			
		||||
			Default is 1 (enabled)
 | 
			
		||||
 | 
			
		||||
	kvm-intel.emulate_invalid_guest_state=
 | 
			
		||||
			[KVM,Intel] Enable emulation of invalid guest states
 | 
			
		||||
			Default is 0 (disabled)
 | 
			
		||||
 | 
			
		||||
	kvm-intel.flexpriority=
 | 
			
		||||
			[KVM,Intel] Disable FlexPriority feature (TPR shadow).
 | 
			
		||||
			Default is 1 (enabled)
 | 
			
		||||
 | 
			
		||||
	kvm-intel.unrestricted_guest=
 | 
			
		||||
			[KVM,Intel] Disable unrestricted guest feature
 | 
			
		||||
			(virtualized real and unpaged mode) on capable
 | 
			
		||||
			Intel chips. Default is 1 (enabled)
 | 
			
		||||
 | 
			
		||||
	kvm-intel.vpid=	[KVM,Intel] Disable Virtual Processor Identification
 | 
			
		||||
			feature (tagged TLBs) on capable Intel chips.
 | 
			
		||||
			Default is 1 (enabled)
 | 
			
		||||
 | 
			
		||||
	l2cr=		[PPC]
 | 
			
		||||
 | 
			
		||||
	l3cr=		[PPC]
 | 
			
		||||
| 
						 | 
				
			
			@ -1503,6 +1542,14 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
			[NFS] set the TCP port on which the NFSv4 callback
 | 
			
		||||
			channel should listen.
 | 
			
		||||
 | 
			
		||||
	nfs.cache_getent=
 | 
			
		||||
			[NFS] sets the pathname to the program which is used
 | 
			
		||||
			to update the NFS client cache entries.
 | 
			
		||||
 | 
			
		||||
	nfs.cache_getent_timeout=
 | 
			
		||||
			[NFS] sets the timeout after which an attempt to
 | 
			
		||||
			update a cache entry is deemed to have failed.
 | 
			
		||||
 | 
			
		||||
	nfs.idmap_cache_timeout=
 | 
			
		||||
			[NFS] set the maximum lifetime for idmapper cache
 | 
			
		||||
			entries.
 | 
			
		||||
| 
						 | 
				
			
			@ -1535,6 +1582,11 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
			symbolic names: lapic and ioapic
 | 
			
		||||
			Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic
 | 
			
		||||
 | 
			
		||||
	netpoll.carrier_timeout=
 | 
			
		||||
			[NET] Specifies amount of time (in seconds) that
 | 
			
		||||
			netpoll should wait for a carrier. By default netpoll
 | 
			
		||||
			waits 4 seconds.
 | 
			
		||||
 | 
			
		||||
	no387		[BUGS=X86-32] Tells the kernel to use the 387 maths
 | 
			
		||||
			emulation library even if a 387 maths coprocessor
 | 
			
		||||
			is present.
 | 
			
		||||
| 
						 | 
				
			
			@ -1919,11 +1971,12 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
			Format: { 0 | 1 }
 | 
			
		||||
			See arch/parisc/kernel/pdc_chassis.c
 | 
			
		||||
 | 
			
		||||
	percpu_alloc=	[X86] Select which percpu first chunk allocator to use.
 | 
			
		||||
			Allowed values are one of "lpage", "embed" and "4k".
 | 
			
		||||
			See comments in arch/x86/kernel/setup_percpu.c for
 | 
			
		||||
			details on each allocator.  This parameter is primarily
 | 
			
		||||
			for debugging and performance comparison.
 | 
			
		||||
	percpu_alloc=	Select which percpu first chunk allocator to use.
 | 
			
		||||
			Currently supported values are "embed" and "page".
 | 
			
		||||
			Archs may support subset or none of the	selections.
 | 
			
		||||
			See comments in mm/percpu.c for details on each
 | 
			
		||||
			allocator.  This parameter is primarily	for debugging
 | 
			
		||||
			and performance comparison.
 | 
			
		||||
 | 
			
		||||
	pf.		[PARIDE]
 | 
			
		||||
			See Documentation/blockdev/paride.txt.
 | 
			
		||||
| 
						 | 
				
			
			@ -2395,6 +2448,18 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
	stifb=		[HW]
 | 
			
		||||
			Format: bpp:<bpp1>[:<bpp2>[:<bpp3>...]]
 | 
			
		||||
 | 
			
		||||
	sunrpc.min_resvport=
 | 
			
		||||
	sunrpc.max_resvport=
 | 
			
		||||
			[NFS,SUNRPC]
 | 
			
		||||
			SunRPC servers often require that client requests
 | 
			
		||||
			originate from a privileged port (i.e. a port in the
 | 
			
		||||
			range 0 < portnr < 1024).
 | 
			
		||||
			An administrator who wishes to reserve some of these
 | 
			
		||||
			ports for other uses may adjust the range that the
 | 
			
		||||
			kernel's sunrpc client considers to be privileged
 | 
			
		||||
			using these two parameters to set the minimum and
 | 
			
		||||
			maximum port values.
 | 
			
		||||
 | 
			
		||||
	sunrpc.pool_mode=
 | 
			
		||||
			[NFS]
 | 
			
		||||
			Control how the NFS server code allocates CPUs to
 | 
			
		||||
| 
						 | 
				
			
			@ -2411,6 +2476,15 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
			pernode	    one pool for each NUMA node (equivalent
 | 
			
		||||
				    to global on non-NUMA machines)
 | 
			
		||||
 | 
			
		||||
	sunrpc.tcp_slot_table_entries=
 | 
			
		||||
	sunrpc.udp_slot_table_entries=
 | 
			
		||||
			[NFS,SUNRPC]
 | 
			
		||||
			Sets the upper limit on the number of simultaneous
 | 
			
		||||
			RPC calls that can be sent from the client to a
 | 
			
		||||
			server. Increasing these values may allow you to
 | 
			
		||||
			improve throughput, but will also increase the
 | 
			
		||||
			amount of memory reserved for use by the client.
 | 
			
		||||
 | 
			
		||||
	swiotlb=	[IA-64] Number of I/O TLB slabs
 | 
			
		||||
 | 
			
		||||
	switches=	[HW,M68k]
 | 
			
		||||
| 
						 | 
				
			
			@ -2480,6 +2554,11 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
	trace_buf_size=nn[KMG]
 | 
			
		||||
			[FTRACE] will set tracing buffer size.
 | 
			
		||||
 | 
			
		||||
	trace_event=[event-list]
 | 
			
		||||
			[FTRACE] Set and start specified trace events in order
 | 
			
		||||
			to facilitate early boot debugging.
 | 
			
		||||
			See also Documentation/trace/events.txt
 | 
			
		||||
 | 
			
		||||
	trix=		[HW,OSS] MediaTrix AudioTrix Pro
 | 
			
		||||
			Format:
 | 
			
		||||
			<io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ This document has the following sections:
 | 
			
		|||
	- Notes on accessing payload contents
 | 
			
		||||
	- Defining a key type
 | 
			
		||||
	- Request-key callback service
 | 
			
		||||
	- Key access filesystem
 | 
			
		||||
	- Garbage collection
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
============
 | 
			
		||||
| 
						 | 
				
			
			@ -113,6 +113,9 @@ Each key has a number of attributes:
 | 
			
		|||
 | 
			
		||||
     (*) Dead. The key's type was unregistered, and so the key is now useless.
 | 
			
		||||
 | 
			
		||||
Keys in the last three states are subject to garbage collection.  See the
 | 
			
		||||
section on "Garbage collection".
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
====================
 | 
			
		||||
KEY SERVICE OVERVIEW
 | 
			
		||||
| 
						 | 
				
			
			@ -754,6 +757,26 @@ The keyctl syscall functions are:
 | 
			
		|||
     successful.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 (*) Install the calling process's session keyring on its parent.
 | 
			
		||||
 | 
			
		||||
	long keyctl(KEYCTL_SESSION_TO_PARENT);
 | 
			
		||||
 | 
			
		||||
     This functions attempts to install the calling process's session keyring
 | 
			
		||||
     on to the calling process's parent, replacing the parent's current session
 | 
			
		||||
     keyring.
 | 
			
		||||
 | 
			
		||||
     The calling process must have the same ownership as its parent, the
 | 
			
		||||
     keyring must have the same ownership as the calling process, the calling
 | 
			
		||||
     process must have LINK permission on the keyring and the active LSM module
 | 
			
		||||
     mustn't deny permission, otherwise error EPERM will be returned.
 | 
			
		||||
 | 
			
		||||
     Error ENOMEM will be returned if there was insufficient memory to complete
 | 
			
		||||
     the operation, otherwise 0 will be returned to indicate success.
 | 
			
		||||
 | 
			
		||||
     The keyring will be replaced next time the parent process leaves the
 | 
			
		||||
     kernel and resumes executing userspace.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
===============
 | 
			
		||||
KERNEL SERVICES
 | 
			
		||||
===============
 | 
			
		||||
| 
						 | 
				
			
			@ -1231,3 +1254,17 @@ by executing:
 | 
			
		|||
 | 
			
		||||
In this case, the program isn't required to actually attach the key to a ring;
 | 
			
		||||
the rings are provided for reference.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
==================
 | 
			
		||||
GARBAGE COLLECTION
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
Dead keys (for which the type has been removed) will be automatically unlinked
 | 
			
		||||
from those keyrings that point to them and deleted as soon as possible by a
 | 
			
		||||
background garbage collector.
 | 
			
		||||
 | 
			
		||||
Similarly, revoked and expired keys will be garbage collected, but only after a
 | 
			
		||||
certain amount of time has passed.  This time is set as a number of seconds in:
 | 
			
		||||
 | 
			
		||||
	/proc/sys/kernel/keys/gc_delay
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,13 @@ To trigger an intermediate memory scan:
 | 
			
		|||
 | 
			
		||||
  # echo scan > /sys/kernel/debug/kmemleak
 | 
			
		||||
 | 
			
		||||
To clear the list of all current possible memory leaks:
 | 
			
		||||
 | 
			
		||||
  # echo clear > /sys/kernel/debug/kmemleak
 | 
			
		||||
 | 
			
		||||
New leaks will then come up upon reading /sys/kernel/debug/kmemleak
 | 
			
		||||
again.
 | 
			
		||||
 | 
			
		||||
Note that the orphan objects are listed in the order they were allocated
 | 
			
		||||
and one object at the beginning of the list may cause other subsequent
 | 
			
		||||
objects to be reported as orphan.
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +49,9 @@ Memory scanning parameters can be modified at run-time by writing to the
 | 
			
		|||
  scan=<secs>	- set the automatic memory scanning period in seconds
 | 
			
		||||
		  (default 600, 0 to stop the automatic scanning)
 | 
			
		||||
  scan		- trigger a memory scan
 | 
			
		||||
  clear		- clear list of current memory leak suspects, done by
 | 
			
		||||
		  marking all current reported unreferenced objects grey
 | 
			
		||||
  dump=<addr>	- dump information about the object found at <addr>
 | 
			
		||||
 | 
			
		||||
Kmemleak can also be disabled at boot-time by passing "kmemleak=off" on
 | 
			
		||||
the kernel command line.
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +96,27 @@ avoid this, kmemleak can also store the number of values pointing to an
 | 
			
		|||
address inside the block address range that need to be found so that the
 | 
			
		||||
block is not considered a leak. One example is __vmalloc().
 | 
			
		||||
 | 
			
		||||
Testing specific sections with kmemleak
 | 
			
		||||
---------------------------------------
 | 
			
		||||
 | 
			
		||||
Upon initial bootup your /sys/kernel/debug/kmemleak output page may be
 | 
			
		||||
quite extensive. This can also be the case if you have very buggy code
 | 
			
		||||
when doing development. To work around these situations you can use the
 | 
			
		||||
'clear' command to clear all reported unreferenced objects from the
 | 
			
		||||
/sys/kernel/debug/kmemleak output. By issuing a 'scan' after a 'clear'
 | 
			
		||||
you can find new unreferenced objects; this should help with testing
 | 
			
		||||
specific sections of code.
 | 
			
		||||
 | 
			
		||||
To test a critical section on demand with a clean kmemleak do:
 | 
			
		||||
 | 
			
		||||
  # echo clear > /sys/kernel/debug/kmemleak
 | 
			
		||||
  ... test your kernel or modules ...
 | 
			
		||||
  # echo scan > /sys/kernel/debug/kmemleak
 | 
			
		||||
 | 
			
		||||
Then as usual to get your report with:
 | 
			
		||||
 | 
			
		||||
  # cat /sys/kernel/debug/kmemleak
 | 
			
		||||
 | 
			
		||||
Kmemleak API
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										759
									
								
								Documentation/kvm/api.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										759
									
								
								Documentation/kvm/api.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,759 @@
 | 
			
		|||
The Definitive KVM (Kernel-based Virtual Machine) API Documentation
 | 
			
		||||
===================================================================
 | 
			
		||||
 | 
			
		||||
1. General description
 | 
			
		||||
 | 
			
		||||
The kvm API is a set of ioctls that are issued to control various aspects
 | 
			
		||||
of a virtual machine.  The ioctls belong to three classes
 | 
			
		||||
 | 
			
		||||
 - System ioctls: These query and set global attributes which affect the
 | 
			
		||||
   whole kvm subsystem.  In addition a system ioctl is used to create
 | 
			
		||||
   virtual machines
 | 
			
		||||
 | 
			
		||||
 - VM ioctls: These query and set attributes that affect an entire virtual
 | 
			
		||||
   machine, for example memory layout.  In addition a VM ioctl is used to
 | 
			
		||||
   create virtual cpus (vcpus).
 | 
			
		||||
 | 
			
		||||
   Only run VM ioctls from the same process (address space) that was used
 | 
			
		||||
   to create the VM.
 | 
			
		||||
 | 
			
		||||
 - vcpu ioctls: These query and set attributes that control the operation
 | 
			
		||||
   of a single virtual cpu.
 | 
			
		||||
 | 
			
		||||
   Only run vcpu ioctls from the same thread that was used to create the
 | 
			
		||||
   vcpu.
 | 
			
		||||
 | 
			
		||||
2. File descritpors
 | 
			
		||||
 | 
			
		||||
The kvm API is centered around file descriptors.  An initial
 | 
			
		||||
open("/dev/kvm") obtains a handle to the kvm subsystem; this handle
 | 
			
		||||
can be used to issue system ioctls.  A KVM_CREATE_VM ioctl on this
 | 
			
		||||
handle will create a VM file descripror which can be used to issue VM
 | 
			
		||||
ioctls.  A KVM_CREATE_VCPU ioctl on a VM fd will create a virtual cpu
 | 
			
		||||
and return a file descriptor pointing to it.  Finally, ioctls on a vcpu
 | 
			
		||||
fd can be used to control the vcpu, including the important task of
 | 
			
		||||
actually running guest code.
 | 
			
		||||
 | 
			
		||||
In general file descriptors can be migrated among processes by means
 | 
			
		||||
of fork() and the SCM_RIGHTS facility of unix domain socket.  These
 | 
			
		||||
kinds of tricks are explicitly not supported by kvm.  While they will
 | 
			
		||||
not cause harm to the host, their actual behavior is not guaranteed by
 | 
			
		||||
the API.  The only supported use is one virtual machine per process,
 | 
			
		||||
and one vcpu per thread.
 | 
			
		||||
 | 
			
		||||
3. Extensions
 | 
			
		||||
 | 
			
		||||
As of Linux 2.6.22, the KVM ABI has been stabilized: no backward
 | 
			
		||||
incompatible change are allowed.  However, there is an extension
 | 
			
		||||
facility that allows backward-compatible extensions to the API to be
 | 
			
		||||
queried and used.
 | 
			
		||||
 | 
			
		||||
The extension mechanism is not based on on the Linux version number.
 | 
			
		||||
Instead, kvm defines extension identifiers and a facility to query
 | 
			
		||||
whether a particular extension identifier is available.  If it is, a
 | 
			
		||||
set of ioctls is available for application use.
 | 
			
		||||
 | 
			
		||||
4. API description
 | 
			
		||||
 | 
			
		||||
This section describes ioctls that can be used to control kvm guests.
 | 
			
		||||
For each ioctl, the following information is provided along with a
 | 
			
		||||
description:
 | 
			
		||||
 | 
			
		||||
  Capability: which KVM extension provides this ioctl.  Can be 'basic',
 | 
			
		||||
      which means that is will be provided by any kernel that supports
 | 
			
		||||
      API version 12 (see section 4.1), or a KVM_CAP_xyz constant, which
 | 
			
		||||
      means availability needs to be checked with KVM_CHECK_EXTENSION
 | 
			
		||||
      (see section 4.4).
 | 
			
		||||
 | 
			
		||||
  Architectures: which instruction set architectures provide this ioctl.
 | 
			
		||||
      x86 includes both i386 and x86_64.
 | 
			
		||||
 | 
			
		||||
  Type: system, vm, or vcpu.
 | 
			
		||||
 | 
			
		||||
  Parameters: what parameters are accepted by the ioctl.
 | 
			
		||||
 | 
			
		||||
  Returns: the return value.  General error numbers (EBADF, ENOMEM, EINVAL)
 | 
			
		||||
      are not detailed, but errors with specific meanings are.
 | 
			
		||||
 | 
			
		||||
4.1 KVM_GET_API_VERSION
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: system ioctl
 | 
			
		||||
Parameters: none
 | 
			
		||||
Returns: the constant KVM_API_VERSION (=12)
 | 
			
		||||
 | 
			
		||||
This identifies the API version as the stable kvm API. It is not
 | 
			
		||||
expected that this number will change.  However, Linux 2.6.20 and
 | 
			
		||||
2.6.21 report earlier versions; these are not documented and not
 | 
			
		||||
supported.  Applications should refuse to run if KVM_GET_API_VERSION
 | 
			
		||||
returns a value other than 12.  If this check passes, all ioctls
 | 
			
		||||
described as 'basic' will be available.
 | 
			
		||||
 | 
			
		||||
4.2 KVM_CREATE_VM
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: system ioctl
 | 
			
		||||
Parameters: none
 | 
			
		||||
Returns: a VM fd that can be used to control the new virtual machine.
 | 
			
		||||
 | 
			
		||||
The new VM has no virtual cpus and no memory.  An mmap() of a VM fd
 | 
			
		||||
will access the virtual machine's physical address space; offset zero
 | 
			
		||||
corresponds to guest physical address zero.  Use of mmap() on a VM fd
 | 
			
		||||
is discouraged if userspace memory allocation (KVM_CAP_USER_MEMORY) is
 | 
			
		||||
available.
 | 
			
		||||
 | 
			
		||||
4.3 KVM_GET_MSR_INDEX_LIST
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: system
 | 
			
		||||
Parameters: struct kvm_msr_list (in/out)
 | 
			
		||||
Returns: 0 on success; -1 on error
 | 
			
		||||
Errors:
 | 
			
		||||
  E2BIG:     the msr index list is to be to fit in the array specified by
 | 
			
		||||
             the user.
 | 
			
		||||
 | 
			
		||||
struct kvm_msr_list {
 | 
			
		||||
	__u32 nmsrs; /* number of msrs in entries */
 | 
			
		||||
	__u32 indices[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
This ioctl returns the guest msrs that are supported.  The list varies
 | 
			
		||||
by kvm version and host processor, but does not change otherwise.  The
 | 
			
		||||
user fills in the size of the indices array in nmsrs, and in return
 | 
			
		||||
kvm adjusts nmsrs to reflect the actual number of msrs and fills in
 | 
			
		||||
the indices array with their numbers.
 | 
			
		||||
 | 
			
		||||
4.4 KVM_CHECK_EXTENSION
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: system ioctl
 | 
			
		||||
Parameters: extension identifier (KVM_CAP_*)
 | 
			
		||||
Returns: 0 if unsupported; 1 (or some other positive integer) if supported
 | 
			
		||||
 | 
			
		||||
The API allows the application to query about extensions to the core
 | 
			
		||||
kvm API.  Userspace passes an extension identifier (an integer) and
 | 
			
		||||
receives an integer that describes the extension availability.
 | 
			
		||||
Generally 0 means no and 1 means yes, but some extensions may report
 | 
			
		||||
additional information in the integer return value.
 | 
			
		||||
 | 
			
		||||
4.5 KVM_GET_VCPU_MMAP_SIZE
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: system ioctl
 | 
			
		||||
Parameters: none
 | 
			
		||||
Returns: size of vcpu mmap area, in bytes
 | 
			
		||||
 | 
			
		||||
The KVM_RUN ioctl (cf.) communicates with userspace via a shared
 | 
			
		||||
memory region.  This ioctl returns the size of that region.  See the
 | 
			
		||||
KVM_RUN documentation for details.
 | 
			
		||||
 | 
			
		||||
4.6 KVM_SET_MEMORY_REGION
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: struct kvm_memory_region (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
struct kvm_memory_region {
 | 
			
		||||
	__u32 slot;
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	__u64 guest_phys_addr;
 | 
			
		||||
	__u64 memory_size; /* bytes */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for kvm_memory_region::flags */
 | 
			
		||||
#define KVM_MEM_LOG_DIRTY_PAGES  1UL
 | 
			
		||||
 | 
			
		||||
This ioctl allows the user to create or modify a guest physical memory
 | 
			
		||||
slot.  When changing an existing slot, it may be moved in the guest
 | 
			
		||||
physical memory space, or its flags may be modified.  It may not be
 | 
			
		||||
resized.  Slots may not overlap.
 | 
			
		||||
 | 
			
		||||
The flags field supports just one flag, KVM_MEM_LOG_DIRTY_PAGES, which
 | 
			
		||||
instructs kvm to keep track of writes to memory within the slot.  See
 | 
			
		||||
the KVM_GET_DIRTY_LOG ioctl.
 | 
			
		||||
 | 
			
		||||
It is recommended to use the KVM_SET_USER_MEMORY_REGION ioctl instead
 | 
			
		||||
of this API, if available.  This newer API allows placing guest memory
 | 
			
		||||
at specified locations in the host address space, yielding better
 | 
			
		||||
control and easy access.
 | 
			
		||||
 | 
			
		||||
4.6 KVM_CREATE_VCPU
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: vcpu id (apic id on x86)
 | 
			
		||||
Returns: vcpu fd on success, -1 on error
 | 
			
		||||
 | 
			
		||||
This API adds a vcpu to a virtual machine.  The vcpu id is a small integer
 | 
			
		||||
in the range [0, max_vcpus).
 | 
			
		||||
 | 
			
		||||
4.7 KVM_GET_DIRTY_LOG (vm ioctl)
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: struct kvm_dirty_log (in/out)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_DIRTY_LOG */
 | 
			
		||||
struct kvm_dirty_log {
 | 
			
		||||
	__u32 slot;
 | 
			
		||||
	__u32 padding;
 | 
			
		||||
	union {
 | 
			
		||||
		void __user *dirty_bitmap; /* one bit per page */
 | 
			
		||||
		__u64 padding;
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Given a memory slot, return a bitmap containing any pages dirtied
 | 
			
		||||
since the last call to this ioctl.  Bit 0 is the first page in the
 | 
			
		||||
memory slot.  Ensure the entire structure is cleared to avoid padding
 | 
			
		||||
issues.
 | 
			
		||||
 | 
			
		||||
4.8 KVM_SET_MEMORY_ALIAS
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: struct kvm_memory_alias (in)
 | 
			
		||||
Returns: 0 (success), -1 (error)
 | 
			
		||||
 | 
			
		||||
struct kvm_memory_alias {
 | 
			
		||||
	__u32 slot;  /* this has a different namespace than memory slots */
 | 
			
		||||
	__u32 flags;
 | 
			
		||||
	__u64 guest_phys_addr;
 | 
			
		||||
	__u64 memory_size;
 | 
			
		||||
	__u64 target_phys_addr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Defines a guest physical address space region as an alias to another
 | 
			
		||||
region.  Useful for aliased address, for example the VGA low memory
 | 
			
		||||
window. Should not be used with userspace memory.
 | 
			
		||||
 | 
			
		||||
4.9 KVM_RUN
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: none
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
Errors:
 | 
			
		||||
  EINTR:     an unmasked signal is pending
 | 
			
		||||
 | 
			
		||||
This ioctl is used to run a guest virtual cpu.  While there are no
 | 
			
		||||
explicit parameters, there is an implicit parameter block that can be
 | 
			
		||||
obtained by mmap()ing the vcpu fd at offset 0, with the size given by
 | 
			
		||||
KVM_GET_VCPU_MMAP_SIZE.  The parameter block is formatted as a 'struct
 | 
			
		||||
kvm_run' (see below).
 | 
			
		||||
 | 
			
		||||
4.10 KVM_GET_REGS
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_regs (out)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Reads the general purpose registers from the vcpu.
 | 
			
		||||
 | 
			
		||||
/* x86 */
 | 
			
		||||
struct kvm_regs {
 | 
			
		||||
	/* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
 | 
			
		||||
	__u64 rax, rbx, rcx, rdx;
 | 
			
		||||
	__u64 rsi, rdi, rsp, rbp;
 | 
			
		||||
	__u64 r8,  r9,  r10, r11;
 | 
			
		||||
	__u64 r12, r13, r14, r15;
 | 
			
		||||
	__u64 rip, rflags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.11 KVM_SET_REGS
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: all
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_regs (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Writes the general purpose registers into the vcpu.
 | 
			
		||||
 | 
			
		||||
See KVM_GET_REGS for the data structure.
 | 
			
		||||
 | 
			
		||||
4.12 KVM_GET_SREGS
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_sregs (out)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Reads special registers from the vcpu.
 | 
			
		||||
 | 
			
		||||
/* x86 */
 | 
			
		||||
struct kvm_sregs {
 | 
			
		||||
	struct kvm_segment cs, ds, es, fs, gs, ss;
 | 
			
		||||
	struct kvm_segment tr, ldt;
 | 
			
		||||
	struct kvm_dtable gdt, idt;
 | 
			
		||||
	__u64 cr0, cr2, cr3, cr4, cr8;
 | 
			
		||||
	__u64 efer;
 | 
			
		||||
	__u64 apic_base;
 | 
			
		||||
	__u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
interrupt_bitmap is a bitmap of pending external interrupts.  At most
 | 
			
		||||
one bit may be set.  This interrupt has been acknowledged by the APIC
 | 
			
		||||
but not yet injected into the cpu core.
 | 
			
		||||
 | 
			
		||||
4.13 KVM_SET_SREGS
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_sregs (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Writes special registers into the vcpu.  See KVM_GET_SREGS for the
 | 
			
		||||
data structures.
 | 
			
		||||
 | 
			
		||||
4.14 KVM_TRANSLATE
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_translation (in/out)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Translates a virtual address according to the vcpu's current address
 | 
			
		||||
translation mode.
 | 
			
		||||
 | 
			
		||||
struct kvm_translation {
 | 
			
		||||
	/* in */
 | 
			
		||||
	__u64 linear_address;
 | 
			
		||||
 | 
			
		||||
	/* out */
 | 
			
		||||
	__u64 physical_address;
 | 
			
		||||
	__u8  valid;
 | 
			
		||||
	__u8  writeable;
 | 
			
		||||
	__u8  usermode;
 | 
			
		||||
	__u8  pad[5];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.15 KVM_INTERRUPT
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_interrupt (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Queues a hardware interrupt vector to be injected.  This is only
 | 
			
		||||
useful if in-kernel local APIC is not used.
 | 
			
		||||
 | 
			
		||||
/* for KVM_INTERRUPT */
 | 
			
		||||
struct kvm_interrupt {
 | 
			
		||||
	/* in */
 | 
			
		||||
	__u32 irq;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Note 'irq' is an interrupt vector, not an interrupt pin or line.
 | 
			
		||||
 | 
			
		||||
4.16 KVM_DEBUG_GUEST
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: none
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: none)
 | 
			
		||||
Returns: -1 on error
 | 
			
		||||
 | 
			
		||||
Support for this has been removed.  Use KVM_SET_GUEST_DEBUG instead.
 | 
			
		||||
 | 
			
		||||
4.17 KVM_GET_MSRS
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_msrs (in/out)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Reads model-specific registers from the vcpu.  Supported msr indices can
 | 
			
		||||
be obtained using KVM_GET_MSR_INDEX_LIST.
 | 
			
		||||
 | 
			
		||||
struct kvm_msrs {
 | 
			
		||||
	__u32 nmsrs; /* number of msrs in entries */
 | 
			
		||||
	__u32 pad;
 | 
			
		||||
 | 
			
		||||
	struct kvm_msr_entry entries[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvm_msr_entry {
 | 
			
		||||
	__u32 index;
 | 
			
		||||
	__u32 reserved;
 | 
			
		||||
	__u64 data;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Application code should set the 'nmsrs' member (which indicates the
 | 
			
		||||
size of the entries array) and the 'index' member of each array entry.
 | 
			
		||||
kvm will fill in the 'data' member.
 | 
			
		||||
 | 
			
		||||
4.18 KVM_SET_MSRS
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_msrs (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Writes model-specific registers to the vcpu.  See KVM_GET_MSRS for the
 | 
			
		||||
data structures.
 | 
			
		||||
 | 
			
		||||
Application code should set the 'nmsrs' member (which indicates the
 | 
			
		||||
size of the entries array), and the 'index' and 'data' members of each
 | 
			
		||||
array entry.
 | 
			
		||||
 | 
			
		||||
4.19 KVM_SET_CPUID
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_cpuid (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Defines the vcpu responses to the cpuid instruction.  Applications
 | 
			
		||||
should use the KVM_SET_CPUID2 ioctl if available.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct kvm_cpuid_entry {
 | 
			
		||||
	__u32 function;
 | 
			
		||||
	__u32 eax;
 | 
			
		||||
	__u32 ebx;
 | 
			
		||||
	__u32 ecx;
 | 
			
		||||
	__u32 edx;
 | 
			
		||||
	__u32 padding;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* for KVM_SET_CPUID */
 | 
			
		||||
struct kvm_cpuid {
 | 
			
		||||
	__u32 nent;
 | 
			
		||||
	__u32 padding;
 | 
			
		||||
	struct kvm_cpuid_entry entries[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.20 KVM_SET_SIGNAL_MASK
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_signal_mask (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Defines which signals are blocked during execution of KVM_RUN.  This
 | 
			
		||||
signal mask temporarily overrides the threads signal mask.  Any
 | 
			
		||||
unblocked signal received (except SIGKILL and SIGSTOP, which retain
 | 
			
		||||
their traditional behaviour) will cause KVM_RUN to return with -EINTR.
 | 
			
		||||
 | 
			
		||||
Note the signal will only be delivered if not blocked by the original
 | 
			
		||||
signal mask.
 | 
			
		||||
 | 
			
		||||
/* for KVM_SET_SIGNAL_MASK */
 | 
			
		||||
struct kvm_signal_mask {
 | 
			
		||||
	__u32 len;
 | 
			
		||||
	__u8  sigset[0];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.21 KVM_GET_FPU
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_fpu (out)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Reads the floating point state from the vcpu.
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_FPU and KVM_SET_FPU */
 | 
			
		||||
struct kvm_fpu {
 | 
			
		||||
	__u8  fpr[8][16];
 | 
			
		||||
	__u16 fcw;
 | 
			
		||||
	__u16 fsw;
 | 
			
		||||
	__u8  ftwx;  /* in fxsave format */
 | 
			
		||||
	__u8  pad1;
 | 
			
		||||
	__u16 last_opcode;
 | 
			
		||||
	__u64 last_ip;
 | 
			
		||||
	__u64 last_dp;
 | 
			
		||||
	__u8  xmm[16][16];
 | 
			
		||||
	__u32 mxcsr;
 | 
			
		||||
	__u32 pad2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.22 KVM_SET_FPU
 | 
			
		||||
 | 
			
		||||
Capability: basic
 | 
			
		||||
Architectures: x86
 | 
			
		||||
Type: vcpu ioctl
 | 
			
		||||
Parameters: struct kvm_fpu (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Writes the floating point state to the vcpu.
 | 
			
		||||
 | 
			
		||||
/* for KVM_GET_FPU and KVM_SET_FPU */
 | 
			
		||||
struct kvm_fpu {
 | 
			
		||||
	__u8  fpr[8][16];
 | 
			
		||||
	__u16 fcw;
 | 
			
		||||
	__u16 fsw;
 | 
			
		||||
	__u8  ftwx;  /* in fxsave format */
 | 
			
		||||
	__u8  pad1;
 | 
			
		||||
	__u16 last_opcode;
 | 
			
		||||
	__u64 last_ip;
 | 
			
		||||
	__u64 last_dp;
 | 
			
		||||
	__u8  xmm[16][16];
 | 
			
		||||
	__u32 mxcsr;
 | 
			
		||||
	__u32 pad2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.23 KVM_CREATE_IRQCHIP
 | 
			
		||||
 | 
			
		||||
Capability: KVM_CAP_IRQCHIP
 | 
			
		||||
Architectures: x86, ia64
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: none
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Creates an interrupt controller model in the kernel.  On x86, creates a virtual
 | 
			
		||||
ioapic, a virtual PIC (two PICs, nested), and sets up future vcpus to have a
 | 
			
		||||
local APIC.  IRQ routing for GSIs 0-15 is set to both PIC and IOAPIC; GSI 16-23
 | 
			
		||||
only go to the IOAPIC.  On ia64, a IOSAPIC is created.
 | 
			
		||||
 | 
			
		||||
4.24 KVM_IRQ_LINE
 | 
			
		||||
 | 
			
		||||
Capability: KVM_CAP_IRQCHIP
 | 
			
		||||
Architectures: x86, ia64
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: struct kvm_irq_level
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Sets the level of a GSI input to the interrupt controller model in the kernel.
 | 
			
		||||
Requires that an interrupt controller model has been previously created with
 | 
			
		||||
KVM_CREATE_IRQCHIP.  Note that edge-triggered interrupts require the level
 | 
			
		||||
to be set to 1 and then back to 0.
 | 
			
		||||
 | 
			
		||||
struct kvm_irq_level {
 | 
			
		||||
	union {
 | 
			
		||||
		__u32 irq;     /* GSI */
 | 
			
		||||
		__s32 status;  /* not used for KVM_IRQ_LEVEL */
 | 
			
		||||
	};
 | 
			
		||||
	__u32 level;           /* 0 or 1 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.25 KVM_GET_IRQCHIP
 | 
			
		||||
 | 
			
		||||
Capability: KVM_CAP_IRQCHIP
 | 
			
		||||
Architectures: x86, ia64
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: struct kvm_irqchip (in/out)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Reads the state of a kernel interrupt controller created with
 | 
			
		||||
KVM_CREATE_IRQCHIP into a buffer provided by the caller.
 | 
			
		||||
 | 
			
		||||
struct kvm_irqchip {
 | 
			
		||||
	__u32 chip_id;  /* 0 = PIC1, 1 = PIC2, 2 = IOAPIC */
 | 
			
		||||
	__u32 pad;
 | 
			
		||||
        union {
 | 
			
		||||
		char dummy[512];  /* reserving space */
 | 
			
		||||
		struct kvm_pic_state pic;
 | 
			
		||||
		struct kvm_ioapic_state ioapic;
 | 
			
		||||
	} chip;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
4.26 KVM_SET_IRQCHIP
 | 
			
		||||
 | 
			
		||||
Capability: KVM_CAP_IRQCHIP
 | 
			
		||||
Architectures: x86, ia64
 | 
			
		||||
Type: vm ioctl
 | 
			
		||||
Parameters: struct kvm_irqchip (in)
 | 
			
		||||
Returns: 0 on success, -1 on error
 | 
			
		||||
 | 
			
		||||
Sets the state of a kernel interrupt controller created with
 | 
			
		||||
KVM_CREATE_IRQCHIP from a buffer provided by the caller.
 | 
			
		||||
 | 
			
		||||
struct kvm_irqchip {
 | 
			
		||||
	__u32 chip_id;  /* 0 = PIC1, 1 = PIC2, 2 = IOAPIC */
 | 
			
		||||
	__u32 pad;
 | 
			
		||||
        union {
 | 
			
		||||
		char dummy[512];  /* reserving space */
 | 
			
		||||
		struct kvm_pic_state pic;
 | 
			
		||||
		struct kvm_ioapic_state ioapic;
 | 
			
		||||
	} chip;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
5. The kvm_run structure
 | 
			
		||||
 | 
			
		||||
Application code obtains a pointer to the kvm_run structure by
 | 
			
		||||
mmap()ing a vcpu fd.  From that point, application code can control
 | 
			
		||||
execution by changing fields in kvm_run prior to calling the KVM_RUN
 | 
			
		||||
ioctl, and obtain information about the reason KVM_RUN returned by
 | 
			
		||||
looking up structure members.
 | 
			
		||||
 | 
			
		||||
struct kvm_run {
 | 
			
		||||
	/* in */
 | 
			
		||||
	__u8 request_interrupt_window;
 | 
			
		||||
 | 
			
		||||
Request that KVM_RUN return when it becomes possible to inject external
 | 
			
		||||
interrupts into the guest.  Useful in conjunction with KVM_INTERRUPT.
 | 
			
		||||
 | 
			
		||||
	__u8 padding1[7];
 | 
			
		||||
 | 
			
		||||
	/* out */
 | 
			
		||||
	__u32 exit_reason;
 | 
			
		||||
 | 
			
		||||
When KVM_RUN has returned successfully (return value 0), this informs
 | 
			
		||||
application code why KVM_RUN has returned.  Allowable values for this
 | 
			
		||||
field are detailed below.
 | 
			
		||||
 | 
			
		||||
	__u8 ready_for_interrupt_injection;
 | 
			
		||||
 | 
			
		||||
If request_interrupt_window has been specified, this field indicates
 | 
			
		||||
an interrupt can be injected now with KVM_INTERRUPT.
 | 
			
		||||
 | 
			
		||||
	__u8 if_flag;
 | 
			
		||||
 | 
			
		||||
The value of the current interrupt flag.  Only valid if in-kernel
 | 
			
		||||
local APIC is not used.
 | 
			
		||||
 | 
			
		||||
	__u8 padding2[2];
 | 
			
		||||
 | 
			
		||||
	/* in (pre_kvm_run), out (post_kvm_run) */
 | 
			
		||||
	__u64 cr8;
 | 
			
		||||
 | 
			
		||||
The value of the cr8 register.  Only valid if in-kernel local APIC is
 | 
			
		||||
not used.  Both input and output.
 | 
			
		||||
 | 
			
		||||
	__u64 apic_base;
 | 
			
		||||
 | 
			
		||||
The value of the APIC BASE msr.  Only valid if in-kernel local
 | 
			
		||||
APIC is not used.  Both input and output.
 | 
			
		||||
 | 
			
		||||
	union {
 | 
			
		||||
		/* KVM_EXIT_UNKNOWN */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u64 hardware_exit_reason;
 | 
			
		||||
		} hw;
 | 
			
		||||
 | 
			
		||||
If exit_reason is KVM_EXIT_UNKNOWN, the vcpu has exited due to unknown
 | 
			
		||||
reasons.  Further architecture-specific information is available in
 | 
			
		||||
hardware_exit_reason.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_FAIL_ENTRY */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u64 hardware_entry_failure_reason;
 | 
			
		||||
		} fail_entry;
 | 
			
		||||
 | 
			
		||||
If exit_reason is KVM_EXIT_FAIL_ENTRY, the vcpu could not be run due
 | 
			
		||||
to unknown reasons.  Further architecture-specific information is
 | 
			
		||||
available in hardware_entry_failure_reason.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_EXCEPTION */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u32 exception;
 | 
			
		||||
			__u32 error_code;
 | 
			
		||||
		} ex;
 | 
			
		||||
 | 
			
		||||
Unused.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_IO */
 | 
			
		||||
		struct {
 | 
			
		||||
#define KVM_EXIT_IO_IN  0
 | 
			
		||||
#define KVM_EXIT_IO_OUT 1
 | 
			
		||||
			__u8 direction;
 | 
			
		||||
			__u8 size; /* bytes */
 | 
			
		||||
			__u16 port;
 | 
			
		||||
			__u32 count;
 | 
			
		||||
			__u64 data_offset; /* relative to kvm_run start */
 | 
			
		||||
		} io;
 | 
			
		||||
 | 
			
		||||
If exit_reason is KVM_EXIT_IO_IN or KVM_EXIT_IO_OUT, then the vcpu has
 | 
			
		||||
executed a port I/O instruction which could not be satisfied by kvm.
 | 
			
		||||
data_offset describes where the data is located (KVM_EXIT_IO_OUT) or
 | 
			
		||||
where kvm expects application code to place the data for the next
 | 
			
		||||
KVM_RUN invocation (KVM_EXIT_IO_IN).  Data format is a patcked array.
 | 
			
		||||
 | 
			
		||||
		struct {
 | 
			
		||||
			struct kvm_debug_exit_arch arch;
 | 
			
		||||
		} debug;
 | 
			
		||||
 | 
			
		||||
Unused.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_MMIO */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u64 phys_addr;
 | 
			
		||||
			__u8  data[8];
 | 
			
		||||
			__u32 len;
 | 
			
		||||
			__u8  is_write;
 | 
			
		||||
		} mmio;
 | 
			
		||||
 | 
			
		||||
If exit_reason is KVM_EXIT_MMIO or KVM_EXIT_IO_OUT, then the vcpu has
 | 
			
		||||
executed a memory-mapped I/O instruction which could not be satisfied
 | 
			
		||||
by kvm.  The 'data' member contains the written data if 'is_write' is
 | 
			
		||||
true, and should be filled by application code otherwise.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_HYPERCALL */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u64 nr;
 | 
			
		||||
			__u64 args[6];
 | 
			
		||||
			__u64 ret;
 | 
			
		||||
			__u32 longmode;
 | 
			
		||||
			__u32 pad;
 | 
			
		||||
		} hypercall;
 | 
			
		||||
 | 
			
		||||
Unused.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_TPR_ACCESS */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u64 rip;
 | 
			
		||||
			__u32 is_write;
 | 
			
		||||
			__u32 pad;
 | 
			
		||||
		} tpr_access;
 | 
			
		||||
 | 
			
		||||
To be documented (KVM_TPR_ACCESS_REPORTING).
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_S390_SIEIC */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u8 icptcode;
 | 
			
		||||
			__u64 mask; /* psw upper half */
 | 
			
		||||
			__u64 addr; /* psw lower half */
 | 
			
		||||
			__u16 ipa;
 | 
			
		||||
			__u32 ipb;
 | 
			
		||||
		} s390_sieic;
 | 
			
		||||
 | 
			
		||||
s390 specific.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_S390_RESET */
 | 
			
		||||
#define KVM_S390_RESET_POR       1
 | 
			
		||||
#define KVM_S390_RESET_CLEAR     2
 | 
			
		||||
#define KVM_S390_RESET_SUBSYSTEM 4
 | 
			
		||||
#define KVM_S390_RESET_CPU_INIT  8
 | 
			
		||||
#define KVM_S390_RESET_IPL       16
 | 
			
		||||
		__u64 s390_reset_flags;
 | 
			
		||||
 | 
			
		||||
s390 specific.
 | 
			
		||||
 | 
			
		||||
		/* KVM_EXIT_DCR */
 | 
			
		||||
		struct {
 | 
			
		||||
			__u32 dcrn;
 | 
			
		||||
			__u32 data;
 | 
			
		||||
			__u8  is_write;
 | 
			
		||||
		} dcr;
 | 
			
		||||
 | 
			
		||||
powerpc specific.
 | 
			
		||||
 | 
			
		||||
		/* Fix the size of the union. */
 | 
			
		||||
		char padding[256];
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +60,8 @@ framerelay.txt
 | 
			
		|||
	- info on using Frame Relay/Data Link Connection Identifier (DLCI).
 | 
			
		||||
generic_netlink.txt
 | 
			
		||||
	- info on Generic Netlink
 | 
			
		||||
ieee802154.txt
 | 
			
		||||
	- Linux IEEE 802.15.4 implementation, API and drivers
 | 
			
		||||
ip-sysctl.txt
 | 
			
		||||
	- /proc/sys/net/ipv4/* variables
 | 
			
		||||
ip_dynaddr.txt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ int sd = socket(PF_IEEE802154, SOCK_DGRAM, 0);
 | 
			
		|||
.....
 | 
			
		||||
 | 
			
		||||
The address family, socket addresses etc. are defined in the
 | 
			
		||||
include/net/ieee802154/af_ieee802154.h header or in the special header
 | 
			
		||||
include/net/af_ieee802154.h header or in the special header
 | 
			
		||||
in our userspace package (see either linux-zigbee sourceforge download page
 | 
			
		||||
or git tree at git://linux-zigbee.git.sourceforge.net/gitroot/linux-zigbee).
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ MLME - MAC Level Management
 | 
			
		|||
============================
 | 
			
		||||
 | 
			
		||||
Most of IEEE 802.15.4 MLME interfaces are directly mapped on netlink commands.
 | 
			
		||||
See the include/net/ieee802154/nl802154.h header. Our userspace tools package
 | 
			
		||||
See the include/net/nl802154.h header. Our userspace tools package
 | 
			
		||||
(see above) provides CLI configuration utility for radio interfaces and simple
 | 
			
		||||
coordinator for IEEE 802.15.4 networks as an example users of MLME protocol.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -54,10 +54,14 @@ Those types of devices require different approach to be hooked into Linux kernel
 | 
			
		|||
HardMAC
 | 
			
		||||
=======
 | 
			
		||||
 | 
			
		||||
See the header include/net/ieee802154/netdevice.h. You have to implement Linux
 | 
			
		||||
See the header include/net/ieee802154_netdev.h. You have to implement Linux
 | 
			
		||||
net_device, with .type = ARPHRD_IEEE802154. Data is exchanged with socket family
 | 
			
		||||
code via plain sk_buffs. The control block of sk_buffs will contain additional
 | 
			
		||||
info as described in the struct ieee802154_mac_cb.
 | 
			
		||||
code via plain sk_buffs. On skb reception skb->cb must contain additional
 | 
			
		||||
info as described in the struct ieee802154_mac_cb. During packet transmission
 | 
			
		||||
the skb->cb is used to provide additional data to device's header_ops->create
 | 
			
		||||
function. Be aware, that this data can be overriden later (when socket code
 | 
			
		||||
submits skb to qdisc), so if you need something from that cb later, you should
 | 
			
		||||
store info in the skb->data on your own.
 | 
			
		||||
 | 
			
		||||
To hook the MLME interface you have to populate the ml_priv field of your
 | 
			
		||||
net_device with a pointer to struct ieee802154_mlme_ops instance. All fields are
 | 
			
		||||
| 
						 | 
				
			
			@ -69,8 +73,8 @@ We provide an example of simple HardMAC driver at drivers/ieee802154/fakehard.c
 | 
			
		|||
SoftMAC
 | 
			
		||||
=======
 | 
			
		||||
 | 
			
		||||
We are going to provide intermediate layer impelementing IEEE 802.15.4 MAC
 | 
			
		||||
We are going to provide intermediate layer implementing IEEE 802.15.4 MAC
 | 
			
		||||
in software. This is currently WIP.
 | 
			
		||||
 | 
			
		||||
See header include/net/ieee802154/mac802154.h and several drivers in
 | 
			
		||||
drivers/ieee802154/
 | 
			
		||||
See header include/net/mac802154.h and several drivers in drivers/ieee802154/.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -311,9 +311,12 @@ tcp_no_metrics_save - BOOLEAN
 | 
			
		|||
	connections.
 | 
			
		||||
 | 
			
		||||
tcp_orphan_retries - INTEGER
 | 
			
		||||
	How may times to retry before killing TCP connection, closed
 | 
			
		||||
	by our side. Default value 7 corresponds to ~50sec-16min
 | 
			
		||||
	depending on RTO. If you machine is loaded WEB server,
 | 
			
		||||
	This value influences the timeout of a locally closed TCP connection,
 | 
			
		||||
	when RTO retransmissions remain unacknowledged.
 | 
			
		||||
	See tcp_retries2 for more details.
 | 
			
		||||
 | 
			
		||||
	The default value is 7.
 | 
			
		||||
	If your machine is a loaded WEB server,
 | 
			
		||||
	you should think about lowering this value, such sockets
 | 
			
		||||
	may consume significant resources. Cf. tcp_max_orphans.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -327,16 +330,28 @@ tcp_retrans_collapse - BOOLEAN
 | 
			
		|||
	certain TCP stacks.
 | 
			
		||||
 | 
			
		||||
tcp_retries1 - INTEGER
 | 
			
		||||
	How many times to retry before deciding that something is wrong
 | 
			
		||||
	and it is necessary to report this suspicion to network layer.
 | 
			
		||||
	Minimal RFC value is 3, it is default, which corresponds
 | 
			
		||||
	to ~3sec-8min depending on RTO.
 | 
			
		||||
	This value influences the time, after which TCP decides, that
 | 
			
		||||
	something is wrong due to unacknowledged RTO retransmissions,
 | 
			
		||||
	and reports this suspicion to the network layer.
 | 
			
		||||
	See tcp_retries2 for more details.
 | 
			
		||||
 | 
			
		||||
	RFC 1122 recommends at least 3 retransmissions, which is the
 | 
			
		||||
	default.
 | 
			
		||||
 | 
			
		||||
tcp_retries2 - INTEGER
 | 
			
		||||
	How may times to retry before killing alive TCP connection.
 | 
			
		||||
	RFC1122 says that the limit should be longer than 100 sec.
 | 
			
		||||
	It is too small number.	Default value 15 corresponds to ~13-30min
 | 
			
		||||
	depending on RTO.
 | 
			
		||||
	This value influences the timeout of an alive TCP connection,
 | 
			
		||||
	when RTO retransmissions remain unacknowledged.
 | 
			
		||||
	Given a value of N, a hypothetical TCP connection following
 | 
			
		||||
	exponential backoff with an initial RTO of TCP_RTO_MIN would
 | 
			
		||||
	retransmit N times before killing the connection at the (N+1)th RTO.
 | 
			
		||||
 | 
			
		||||
	The default value of 15 yields a hypothetical timeout of 924.6
 | 
			
		||||
	seconds and is a lower bound for the effective timeout.
 | 
			
		||||
	TCP will effectively time out at the first RTO which exceeds the
 | 
			
		||||
	hypothetical timeout.
 | 
			
		||||
 | 
			
		||||
	RFC 1122 recommends at least 100 seconds for the timeout,
 | 
			
		||||
	which corresponds to a value of at least 8.
 | 
			
		||||
 | 
			
		||||
tcp_rfc1337 - BOOLEAN
 | 
			
		||||
	If set, the TCP stack behaves conforming to RFC1337. If unset,
 | 
			
		||||
| 
						 | 
				
			
			@ -1282,6 +1297,16 @@ sctp_rmem - vector of 3 INTEGERs: min, default, max
 | 
			
		|||
sctp_wmem  - vector of 3 INTEGERs: min, default, max
 | 
			
		||||
	See tcp_wmem for a description.
 | 
			
		||||
 | 
			
		||||
addr_scope_policy - INTEGER
 | 
			
		||||
	Control IPv4 address scoping - draft-stewart-tsvwg-sctp-ipv4-00
 | 
			
		||||
 | 
			
		||||
	0   - Disable IPv4 address scoping
 | 
			
		||||
	1   - Enable IPv4 address scoping
 | 
			
		||||
	2   - Follow draft but allow IPv4 private addresses
 | 
			
		||||
	3   - Follow draft but allow IPv4 link local addresses
 | 
			
		||||
 | 
			
		||||
	Default: 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/proc/sys/net/core/*
 | 
			
		||||
dev_weight - INTEGER
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -495,6 +495,13 @@ and for each vararg a long value. So e.g. for a debug entry with a format
 | 
			
		|||
string plus two varargs one would need to allocate a (3 * sizeof(long)) 
 | 
			
		||||
byte data area in the debug_register() function.
 | 
			
		||||
 | 
			
		||||
IMPORTANT: Using "%s" in sprintf event functions is dangerous. You can only
 | 
			
		||||
use "%s" in the sprintf event functions, if the memory for the passed string is
 | 
			
		||||
available as long as the debug feature exists. The reason behind this is that
 | 
			
		||||
due to performance considerations only a pointer to the string is stored in
 | 
			
		||||
the debug feature. If you log a string that is freed afterwards, you will get
 | 
			
		||||
an OOPS when inspecting the debug feature, because then the debug feature will
 | 
			
		||||
access the already freed memory.
 | 
			
		||||
 | 
			
		||||
NOTE: If using the sprintf view do NOT use other event/exception functions
 | 
			
		||||
than the sprintf-event and -exception functions.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,12 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
 | 
			
		|||
    slots	- Reserve the slot index for the given driver.
 | 
			
		||||
		  This option takes multiple strings.		
 | 
			
		||||
		  See "Module Autoloading Support" section for details.
 | 
			
		||||
    debug	- Specifies the debug message level
 | 
			
		||||
		  (0 = disable debug prints, 1 = normal debug messages,
 | 
			
		||||
		   2 = verbose debug messages)
 | 
			
		||||
		  This option appears only when CONFIG_SND_DEBUG=y.
 | 
			
		||||
		  This option can be dynamically changed via sysfs
 | 
			
		||||
		  /sys/modules/snd/parameters/debug file.
 | 
			
		||||
  
 | 
			
		||||
  Module snd-pcm-oss
 | 
			
		||||
  ------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -513,6 +519,26 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
 | 
			
		|||
    or input, but you may use this module for any application which
 | 
			
		||||
    requires a sound card (like RealPlayer).
 | 
			
		||||
 | 
			
		||||
    pcm_devs       - Number of PCM devices assigned to each card
 | 
			
		||||
                     (default = 1, up to 4)
 | 
			
		||||
    pcm_substreams - Number of PCM substreams assigned to each PCM
 | 
			
		||||
                     (default = 8, up to 16)
 | 
			
		||||
    hrtimer        - Use hrtimer (=1, default) or system timer (=0)
 | 
			
		||||
    fake_buffer    - Fake buffer allocations (default = 1)
 | 
			
		||||
 | 
			
		||||
    When multiple PCM devices are created, snd-dummy gives different
 | 
			
		||||
    behavior to each PCM device:
 | 
			
		||||
      0 = interleaved with mmap support
 | 
			
		||||
      1 = non-interleaved with mmap support
 | 
			
		||||
      2 = interleaved without mmap 
 | 
			
		||||
      3 = non-interleaved without mmap
 | 
			
		||||
 | 
			
		||||
    As default, snd-dummy drivers doesn't allocate the real buffers
 | 
			
		||||
    but either ignores read/write or mmap a single dummy page to all
 | 
			
		||||
    buffer pages, in order to save the resouces.  If your apps need
 | 
			
		||||
    the read/ written buffer data to be consistent, pass fake_buffer=0
 | 
			
		||||
    option.
 | 
			
		||||
 | 
			
		||||
    The power-management is supported.
 | 
			
		||||
 | 
			
		||||
  Module snd-echo3g
 | 
			
		||||
| 
						 | 
				
			
			@ -768,6 +794,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
 | 
			
		|||
    bdl_pos_adj	- Specifies the DMA IRQ timing delay in samples.
 | 
			
		||||
		Passing -1 will make the driver to choose the appropriate
 | 
			
		||||
		value based on the controller chip.
 | 
			
		||||
    patch	- Specifies the early "patch" files to modify the HD-audio
 | 
			
		||||
    		setup before initializing the codecs.  This option is
 | 
			
		||||
		available only when CONFIG_SND_HDA_PATCH_LOADER=y is set.
 | 
			
		||||
		See HD-Audio.txt for details.
 | 
			
		||||
    
 | 
			
		||||
    [Single (global) options]
 | 
			
		||||
    single_cmd  - Use single immediate commands to communicate with
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,8 +114,8 @@ ALC662/663/272
 | 
			
		|||
  samsung-nc10	Samsung NC10 mini notebook
 | 
			
		||||
  auto		auto-config reading BIOS (default)
 | 
			
		||||
 | 
			
		||||
ALC882/885
 | 
			
		||||
==========
 | 
			
		||||
ALC882/883/885/888/889
 | 
			
		||||
======================
 | 
			
		||||
  3stack-dig	3-jack with SPDIF I/O
 | 
			
		||||
  6stack-dig	6-jack digital with SPDIF I/O
 | 
			
		||||
  arima		Arima W820Di1
 | 
			
		||||
| 
						 | 
				
			
			@ -127,12 +127,8 @@ ALC882/885
 | 
			
		|||
  mbp3		Macbook Pro rev3
 | 
			
		||||
  imac24	iMac 24'' with jack detection
 | 
			
		||||
  w2jc		ASUS W2JC
 | 
			
		||||
  auto		auto-config reading BIOS (default)
 | 
			
		||||
 | 
			
		||||
ALC883/888
 | 
			
		||||
==========
 | 
			
		||||
  3stack-dig	3-jack with SPDIF I/O
 | 
			
		||||
  6stack-dig	6-jack digital with SPDIF I/O
 | 
			
		||||
  3stack-2ch-dig	3-jack with SPDIF I/O (ALC883)
 | 
			
		||||
  alc883-6stack-dig	6-jack digital with SPDIF I/O (ALC883)
 | 
			
		||||
  3stack-6ch    3-jack 6-channel
 | 
			
		||||
  3stack-6ch-dig 3-jack 6-channel with SPDIF I/O
 | 
			
		||||
  6stack-dig-demo  6-jack digital for Intel demo board
 | 
			
		||||
| 
						 | 
				
			
			@ -140,6 +136,7 @@ ALC883/888
 | 
			
		|||
  acer-aspire	Acer Aspire 9810
 | 
			
		||||
  acer-aspire-4930g Acer Aspire 4930G
 | 
			
		||||
  acer-aspire-6530g Acer Aspire 6530G
 | 
			
		||||
  acer-aspire-7730g Acer Aspire 7730G
 | 
			
		||||
  acer-aspire-8930g Acer Aspire 8930G
 | 
			
		||||
  medion	Medion Laptops
 | 
			
		||||
  medion-md2	Medion MD2
 | 
			
		||||
| 
						 | 
				
			
			@ -155,10 +152,13 @@ ALC883/888
 | 
			
		|||
  3stack-hp	HP machines with 3stack (Lucknow, Samba boards)
 | 
			
		||||
  6stack-dell	Dell machines with 6stack (Inspiron 530)
 | 
			
		||||
  mitac		Mitac 8252D
 | 
			
		||||
  clevo-m540r	Clevo M540R (6ch + digital)
 | 
			
		||||
  clevo-m720	Clevo M720 laptop series
 | 
			
		||||
  fujitsu-pi2515 Fujitsu AMILO Pi2515
 | 
			
		||||
  fujitsu-xa3530 Fujitsu AMILO XA3530
 | 
			
		||||
  3stack-6ch-intel Intel DG33* boards
 | 
			
		||||
  intel-alc889a	Intel IbexPeak with ALC889A
 | 
			
		||||
  intel-x58	Intel DX58 with ALC889
 | 
			
		||||
  asus-p5q	ASUS P5Q-EM boards
 | 
			
		||||
  mb31		MacBook 3,1
 | 
			
		||||
  sony-vaio-tt  Sony VAIO TT
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +229,7 @@ AD1984
 | 
			
		|||
======
 | 
			
		||||
  basic		default configuration
 | 
			
		||||
  thinkpad	Lenovo Thinkpad T61/X61
 | 
			
		||||
  dell		Dell T3400
 | 
			
		||||
  dell_desktop	Dell T3400
 | 
			
		||||
 | 
			
		||||
AD1986A
 | 
			
		||||
=======
 | 
			
		||||
| 
						 | 
				
			
			@ -258,6 +258,7 @@ Conexant 5045
 | 
			
		|||
  laptop-micsense   Laptop with Mic sense (old model fujitsu)
 | 
			
		||||
  laptop-hpmicsense Laptop with HP and Mic senses
 | 
			
		||||
  benq		Benq R55E
 | 
			
		||||
  laptop-hp530	HP 530 laptop
 | 
			
		||||
  test		for testing/debugging purpose, almost all controls
 | 
			
		||||
		can be adjusted.  Appearing only when compiled with
 | 
			
		||||
		$CONFIG_SND_DEBUG=y
 | 
			
		||||
| 
						 | 
				
			
			@ -278,9 +279,16 @@ Conexant 5051
 | 
			
		|||
  hp-dv6736	HP dv6736
 | 
			
		||||
  lenovo-x200	Lenovo X200 laptop
 | 
			
		||||
 | 
			
		||||
Conexant 5066
 | 
			
		||||
=============
 | 
			
		||||
  laptop	Basic Laptop config (default)
 | 
			
		||||
  dell-laptop	Dell laptops
 | 
			
		||||
  olpc-xo-1_5	OLPC XO 1.5
 | 
			
		||||
 | 
			
		||||
STAC9200
 | 
			
		||||
========
 | 
			
		||||
  ref		Reference board
 | 
			
		||||
  oqo		OQO Model 2
 | 
			
		||||
  dell-d21	Dell (unknown)
 | 
			
		||||
  dell-d22	Dell (unknown)
 | 
			
		||||
  dell-d23	Dell (unknown)
 | 
			
		||||
| 
						 | 
				
			
			@ -368,10 +376,12 @@ STAC92HD73*
 | 
			
		|||
===========
 | 
			
		||||
  ref		Reference board
 | 
			
		||||
  no-jd		BIOS setup but without jack-detection
 | 
			
		||||
  intel		Intel DG45* mobos
 | 
			
		||||
  dell-m6-amic	Dell desktops/laptops with analog mics
 | 
			
		||||
  dell-m6-dmic	Dell desktops/laptops with digital mics
 | 
			
		||||
  dell-m6	Dell desktops/laptops with both type of mics
 | 
			
		||||
  dell-eq	Dell desktops/laptops
 | 
			
		||||
  alienware	Alienware M17x
 | 
			
		||||
  auto		BIOS setup (default)
 | 
			
		||||
 | 
			
		||||
STAC92HD83*
 | 
			
		||||
| 
						 | 
				
			
			@ -385,3 +395,8 @@ STAC9872
 | 
			
		|||
========
 | 
			
		||||
  vaio		VAIO laptop without SPDIF
 | 
			
		||||
  auto		BIOS setup (default)
 | 
			
		||||
 | 
			
		||||
Cirrus Logic CS4206/4207
 | 
			
		||||
========================
 | 
			
		||||
  mbp55		MacBook Pro 5,5
 | 
			
		||||
  auto		BIOS setup (default)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,6 +138,10 @@ override the BIOS setup or to provide more comprehensive features.
 | 
			
		|||
The driver checks PCI SSID and looks through the static configuration
 | 
			
		||||
table until any matching entry is found.  If you have a new machine,
 | 
			
		||||
you may see a message like below:
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
    hda_codec: ALC880: BIOS auto-probing.
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
Meanwhile, in the earlier versions, you would see a message like:
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
    hda_codec: Unknown model for ALC880, trying auto-probe from BIOS...
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -403,6 +407,66 @@ re-configure based on that state, run like below:
 | 
			
		|||
------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Early Patching
 | 
			
		||||
~~~~~~~~~~~~~~
 | 
			
		||||
When CONFIG_SND_HDA_PATCH_LOADER=y is set, you can pass a "patch" as a
 | 
			
		||||
firmware file for modifying the HD-audio setup before initializing the
 | 
			
		||||
codec.  This can work basically like the reconfiguration via sysfs in
 | 
			
		||||
the above, but it does it before the first codec configuration.
 | 
			
		||||
 | 
			
		||||
A patch file is a plain text file which looks like below:
 | 
			
		||||
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
  [codec]
 | 
			
		||||
  0x12345678 0xabcd1234 2
 | 
			
		||||
 | 
			
		||||
  [model]
 | 
			
		||||
  auto
 | 
			
		||||
 | 
			
		||||
  [pincfg]
 | 
			
		||||
  0x12 0x411111f0
 | 
			
		||||
 | 
			
		||||
  [verb]
 | 
			
		||||
  0x20 0x500 0x03
 | 
			
		||||
  0x20 0x400 0xff
 | 
			
		||||
 | 
			
		||||
  [hint]
 | 
			
		||||
  hp_detect = yes
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
The file needs to have a line `[codec]`.  The next line should contain
 | 
			
		||||
three numbers indicating the codec vendor-id (0x12345678 in the
 | 
			
		||||
example), the codec subsystem-id (0xabcd1234) and the address (2) of
 | 
			
		||||
the codec.  The rest patch entries are applied to this specified codec
 | 
			
		||||
until another codec entry is given.
 | 
			
		||||
 | 
			
		||||
The `[model]` line allows to change the model name of the each codec.
 | 
			
		||||
In the example above, it will be changed to model=auto.
 | 
			
		||||
Note that this overrides the module option.
 | 
			
		||||
 | 
			
		||||
After the `[pincfg]` line, the contents are parsed as the initial
 | 
			
		||||
default pin-configurations just like `user_pin_configs` sysfs above.
 | 
			
		||||
The values can be shown in user_pin_configs sysfs file, too.
 | 
			
		||||
 | 
			
		||||
Similarly, the lines after `[verb]` are parsed as `init_verbs`
 | 
			
		||||
sysfs entries, and the lines after `[hint]` are parsed as `hints`
 | 
			
		||||
sysfs entries, respectively.
 | 
			
		||||
 | 
			
		||||
The hd-audio driver reads the file via request_firmware().  Thus,
 | 
			
		||||
a patch file has to be located on the appropriate firmware path,
 | 
			
		||||
typically, /lib/firmware.  For example, when you pass the option
 | 
			
		||||
`patch=hda-init.fw`, the file /lib/firmware/hda-init-fw must be
 | 
			
		||||
present.
 | 
			
		||||
 | 
			
		||||
The patch module option is specific to each card instance, and you
 | 
			
		||||
need to give one file name for each instance, separated by commas.
 | 
			
		||||
For example, if you have two cards, one for an on-board analog and one 
 | 
			
		||||
for an HDMI video board, you may pass patch option like below:
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
    options snd-hda-intel patch=on-board-patch,hdmi-patch
 | 
			
		||||
------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Power-Saving
 | 
			
		||||
~~~~~~~~~~~~
 | 
			
		||||
The power-saving is a kind of auto-suspend of the device.  When the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ Currently, these files might (depending on your configuration)
 | 
			
		|||
show up in /proc/sys/kernel:
 | 
			
		||||
- acpi_video_flags
 | 
			
		||||
- acct
 | 
			
		||||
- callhome		     [ S390 only ]
 | 
			
		||||
- auto_msgmni
 | 
			
		||||
- core_pattern
 | 
			
		||||
- core_uses_pid
 | 
			
		||||
| 
						 | 
				
			
			@ -91,6 +92,21 @@ valid for 30 seconds.
 | 
			
		|||
 | 
			
		||||
==============================================================
 | 
			
		||||
 | 
			
		||||
callhome:
 | 
			
		||||
 | 
			
		||||
Controls the kernel's callhome behavior in case of a kernel panic.
 | 
			
		||||
 | 
			
		||||
The s390 hardware allows an operating system to send a notification
 | 
			
		||||
to a service organization (callhome) in case of an operating system panic.
 | 
			
		||||
 | 
			
		||||
When the value in this file is 0 (which is the default behavior)
 | 
			
		||||
nothing happens in case of a kernel panic. If this value is set to "1"
 | 
			
		||||
the complete kernel oops message is send to the IBM customer service
 | 
			
		||||
organization in case the mainframe the Linux operating system is running
 | 
			
		||||
on has a service contract with IBM.
 | 
			
		||||
 | 
			
		||||
==============================================================
 | 
			
		||||
 | 
			
		||||
core_pattern:
 | 
			
		||||
 | 
			
		||||
core_pattern is used to specify a core dumpfile pattern name.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,15 @@ When reading one of these enable files, there are four results:
 | 
			
		|||
 X - there is a mixture of events enabled and disabled
 | 
			
		||||
 ? - this file does not affect any event
 | 
			
		||||
 | 
			
		||||
2.3 Boot option
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
In order to facilitate early boot debugging, use boot option:
 | 
			
		||||
 | 
			
		||||
	trace_event=[event-list]
 | 
			
		||||
 | 
			
		||||
The format of this boot option is the same as described in section 2.1.
 | 
			
		||||
 | 
			
		||||
3. Defining an event-enabled tracepoint
 | 
			
		||||
=======================================
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,26 +85,19 @@ of ftrace. Here is a list of some of the key files:
 | 
			
		|||
	This file holds the output of the trace in a human
 | 
			
		||||
	readable format (described below).
 | 
			
		||||
 | 
			
		||||
  latency_trace:
 | 
			
		||||
 | 
			
		||||
	This file shows the same trace but the information
 | 
			
		||||
	is organized more to display possible latencies
 | 
			
		||||
	in the system (described below).
 | 
			
		||||
 | 
			
		||||
  trace_pipe:
 | 
			
		||||
 | 
			
		||||
	The output is the same as the "trace" file but this
 | 
			
		||||
	file is meant to be streamed with live tracing.
 | 
			
		||||
	Reads from this file will block until new data
 | 
			
		||||
	is retrieved. Unlike the "trace" and "latency_trace"
 | 
			
		||||
	files, this file is a consumer. This means reading
 | 
			
		||||
	from this file causes sequential reads to display
 | 
			
		||||
	more current data. Once data is read from this
 | 
			
		||||
	file, it is consumed, and will not be read
 | 
			
		||||
	again with a sequential read. The "trace" and
 | 
			
		||||
	"latency_trace" files are static, and if the
 | 
			
		||||
	tracer is not adding more data, they will display
 | 
			
		||||
	the same information every time they are read.
 | 
			
		||||
	Reads from this file will block until new data is
 | 
			
		||||
	retrieved.  Unlike the "trace" file, this file is a
 | 
			
		||||
	consumer. This means reading from this file causes
 | 
			
		||||
	sequential reads to display more current data. Once
 | 
			
		||||
	data is read from this file, it is consumed, and
 | 
			
		||||
	will not be read again with a sequential read. The
 | 
			
		||||
	"trace" file is static, and if the tracer is not
 | 
			
		||||
	adding more data,they will display the same
 | 
			
		||||
	information every time they are read.
 | 
			
		||||
 | 
			
		||||
  trace_options:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -117,10 +110,10 @@ of ftrace. Here is a list of some of the key files:
 | 
			
		|||
	Some of the tracers record the max latency.
 | 
			
		||||
	For example, the time interrupts are disabled.
 | 
			
		||||
	This time is saved in this file. The max trace
 | 
			
		||||
	will also be stored, and displayed by either
 | 
			
		||||
	"trace" or "latency_trace".  A new max trace will
 | 
			
		||||
	only be recorded if the latency is greater than
 | 
			
		||||
	the value in this file. (in microseconds)
 | 
			
		||||
	will also be stored, and displayed by "trace".
 | 
			
		||||
	A new max trace will only be recorded if the
 | 
			
		||||
	latency is greater than the value in this
 | 
			
		||||
	file. (in microseconds)
 | 
			
		||||
 | 
			
		||||
  buffer_size_kb:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +203,7 @@ Here is the list of current tracers that may be configured.
 | 
			
		|||
	the trace with the longest max latency.
 | 
			
		||||
	See tracing_max_latency. When a new max is recorded,
 | 
			
		||||
	it replaces the old trace. It is best to view this
 | 
			
		||||
	trace via the latency_trace file.
 | 
			
		||||
	trace with the latency-format option enabled.
 | 
			
		||||
 | 
			
		||||
  "preemptoff"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -307,8 +300,8 @@ the lowest priority thread (pid 0).
 | 
			
		|||
Latency trace format
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
For traces that display latency times, the latency_trace file
 | 
			
		||||
gives somewhat more information to see why a latency happened.
 | 
			
		||||
When the latency-format option is enabled, the trace file gives
 | 
			
		||||
somewhat more information to see why a latency happened.
 | 
			
		||||
Here is a typical trace.
 | 
			
		||||
 | 
			
		||||
# tracer: irqsoff
 | 
			
		||||
| 
						 | 
				
			
			@ -380,9 +373,10 @@ explains which is which.
 | 
			
		|||
 | 
			
		||||
The above is mostly meaningful for kernel developers.
 | 
			
		||||
 | 
			
		||||
  time: This differs from the trace file output. The trace file output
 | 
			
		||||
	includes an absolute timestamp. The timestamp used by the
 | 
			
		||||
	latency_trace file is relative to the start of the trace.
 | 
			
		||||
  time: When the latency-format option is enabled, the trace file
 | 
			
		||||
	output includes a timestamp relative to the start of the
 | 
			
		||||
	trace. This differs from the output when latency-format
 | 
			
		||||
	is disabled, which includes an absolute timestamp.
 | 
			
		||||
 | 
			
		||||
  delay: This is just to help catch your eye a bit better. And
 | 
			
		||||
	 needs to be fixed to be only relative to the same CPU.
 | 
			
		||||
| 
						 | 
				
			
			@ -440,7 +434,8 @@ Here are the available options:
 | 
			
		|||
  sym-addr:
 | 
			
		||||
   bash-4000  [01]  1477.606694: simple_strtoul <c0339346>
 | 
			
		||||
 | 
			
		||||
  verbose - This deals with the latency_trace file.
 | 
			
		||||
  verbose - This deals with the trace file when the
 | 
			
		||||
            latency-format option is enabled.
 | 
			
		||||
 | 
			
		||||
    bash  4000 1 0 00000000 00010a95 [58127d26] 1720.415ms \
 | 
			
		||||
    (+0.000ms): simple_strtoul (strict_strtoul)
 | 
			
		||||
| 
						 | 
				
			
			@ -472,7 +467,7 @@ Here are the available options:
 | 
			
		|||
		the app is no longer running
 | 
			
		||||
 | 
			
		||||
		The lookup is performed when you read
 | 
			
		||||
		trace,trace_pipe,latency_trace. Example:
 | 
			
		||||
		trace,trace_pipe. Example:
 | 
			
		||||
 | 
			
		||||
		a.out-1623  [000] 40874.465068: /root/a.out[+0x480] <-/root/a.out[+0
 | 
			
		||||
x494] <- /root/a.out[+0x4a8] <- /lib/libc-2.7.so[+0x1e1a6]
 | 
			
		||||
| 
						 | 
				
			
			@ -481,6 +476,11 @@ x494] <- /root/a.out[+0x4a8] <- /lib/libc-2.7.so[+0x1e1a6]
 | 
			
		|||
	       every scheduling event. Will add overhead if
 | 
			
		||||
	       there's a lot of tasks running at once.
 | 
			
		||||
 | 
			
		||||
  latency-format - This option changes the trace. When
 | 
			
		||||
                   it is enabled, the trace displays
 | 
			
		||||
                   additional information about the
 | 
			
		||||
                   latencies, as described in "Latency
 | 
			
		||||
                   trace format".
 | 
			
		||||
 | 
			
		||||
sched_switch
 | 
			
		||||
------------
 | 
			
		||||
| 
						 | 
				
			
			@ -596,12 +596,13 @@ To reset the maximum, echo 0 into tracing_max_latency. Here is
 | 
			
		|||
an example:
 | 
			
		||||
 | 
			
		||||
 # echo irqsoff > current_tracer
 | 
			
		||||
 # echo latency-format > trace_options
 | 
			
		||||
 # echo 0 > tracing_max_latency
 | 
			
		||||
 # echo 1 > tracing_enabled
 | 
			
		||||
 # ls -ltr
 | 
			
		||||
 [...]
 | 
			
		||||
 # echo 0 > tracing_enabled
 | 
			
		||||
 # cat latency_trace
 | 
			
		||||
 # cat trace
 | 
			
		||||
# tracer: irqsoff
 | 
			
		||||
#
 | 
			
		||||
irqsoff latency trace v1.1.5 on 2.6.26
 | 
			
		||||
| 
						 | 
				
			
			@ -703,12 +704,13 @@ which preemption was disabled. The control of preemptoff tracer
 | 
			
		|||
is much like the irqsoff tracer.
 | 
			
		||||
 | 
			
		||||
 # echo preemptoff > current_tracer
 | 
			
		||||
 # echo latency-format > trace_options
 | 
			
		||||
 # echo 0 > tracing_max_latency
 | 
			
		||||
 # echo 1 > tracing_enabled
 | 
			
		||||
 # ls -ltr
 | 
			
		||||
 [...]
 | 
			
		||||
 # echo 0 > tracing_enabled
 | 
			
		||||
 # cat latency_trace
 | 
			
		||||
 # cat trace
 | 
			
		||||
# tracer: preemptoff
 | 
			
		||||
#
 | 
			
		||||
preemptoff latency trace v1.1.5 on 2.6.26-rc8
 | 
			
		||||
| 
						 | 
				
			
			@ -850,12 +852,13 @@ Again, using this trace is much like the irqsoff and preemptoff
 | 
			
		|||
tracers.
 | 
			
		||||
 | 
			
		||||
 # echo preemptirqsoff > current_tracer
 | 
			
		||||
 # echo latency-format > trace_options
 | 
			
		||||
 # echo 0 > tracing_max_latency
 | 
			
		||||
 # echo 1 > tracing_enabled
 | 
			
		||||
 # ls -ltr
 | 
			
		||||
 [...]
 | 
			
		||||
 # echo 0 > tracing_enabled
 | 
			
		||||
 # cat latency_trace
 | 
			
		||||
 # cat trace
 | 
			
		||||
# tracer: preemptirqsoff
 | 
			
		||||
#
 | 
			
		||||
preemptirqsoff latency trace v1.1.5 on 2.6.26-rc8
 | 
			
		||||
| 
						 | 
				
			
			@ -1012,11 +1015,12 @@ Instead of performing an 'ls', we will run 'sleep 1' under
 | 
			
		|||
'chrt' which changes the priority of the task.
 | 
			
		||||
 | 
			
		||||
 # echo wakeup > current_tracer
 | 
			
		||||
 # echo latency-format > trace_options
 | 
			
		||||
 # echo 0 > tracing_max_latency
 | 
			
		||||
 # echo 1 > tracing_enabled
 | 
			
		||||
 # chrt -f 5 sleep 1
 | 
			
		||||
 # echo 0 > tracing_enabled
 | 
			
		||||
 # cat latency_trace
 | 
			
		||||
 # cat trace
 | 
			
		||||
# tracer: wakeup
 | 
			
		||||
#
 | 
			
		||||
wakeup latency trace v1.1.5 on 2.6.26-rc8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								Documentation/trace/function-graph-fold.vim
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								Documentation/trace/function-graph-fold.vim
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
" Enable folding for ftrace function_graph traces.
 | 
			
		||||
"
 | 
			
		||||
" To use, :source this file while viewing a function_graph trace, or use vim's
 | 
			
		||||
" -S option to load from the command-line together with a trace.  You can then
 | 
			
		||||
" use the usual vim fold commands, such as "za", to open and close nested
 | 
			
		||||
" functions.  While closed, a fold will show the total time taken for a call,
 | 
			
		||||
" as would normally appear on the line with the closing brace.  Folded
 | 
			
		||||
" functions will not include finish_task_switch(), so folding should remain
 | 
			
		||||
" relatively sane even through a context switch.
 | 
			
		||||
"
 | 
			
		||||
" Note that this will almost certainly only work well with a
 | 
			
		||||
" single-CPU trace (e.g. trace-cmd report --cpu 1).
 | 
			
		||||
 | 
			
		||||
function! FunctionGraphFoldExpr(lnum)
 | 
			
		||||
  let line = getline(a:lnum)
 | 
			
		||||
  if line[-1:] == '{'
 | 
			
		||||
    if line =~ 'finish_task_switch() {$'
 | 
			
		||||
      return '>1'
 | 
			
		||||
    endif
 | 
			
		||||
    return 'a1'
 | 
			
		||||
  elseif line[-1:] == '}'
 | 
			
		||||
    return 's1'
 | 
			
		||||
  else
 | 
			
		||||
    return '='
 | 
			
		||||
  endif
 | 
			
		||||
endfunction
 | 
			
		||||
 | 
			
		||||
function! FunctionGraphFoldText()
 | 
			
		||||
  let s = split(getline(v:foldstart), '|', 1)
 | 
			
		||||
  if getline(v:foldend+1) =~ 'finish_task_switch() {$'
 | 
			
		||||
    let s[2] = ' task switch  '
 | 
			
		||||
  else
 | 
			
		||||
    let e = split(getline(v:foldend), '|', 1)
 | 
			
		||||
    let s[2] = e[2]
 | 
			
		||||
  endif
 | 
			
		||||
  return join(s, '|')
 | 
			
		||||
endfunction
 | 
			
		||||
 | 
			
		||||
setlocal foldexpr=FunctionGraphFoldExpr(v:lnum)
 | 
			
		||||
setlocal foldtext=FunctionGraphFoldText()
 | 
			
		||||
setlocal foldcolumn=12
 | 
			
		||||
setlocal foldmethod=expr
 | 
			
		||||
							
								
								
									
										955
									
								
								Documentation/trace/ring-buffer-design.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										955
									
								
								Documentation/trace/ring-buffer-design.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,955 @@
 | 
			
		|||
		Lockless Ring Buffer Design
 | 
			
		||||
		===========================
 | 
			
		||||
 | 
			
		||||
Copyright 2009 Red Hat Inc.
 | 
			
		||||
   Author:   Steven Rostedt <srostedt@redhat.com>
 | 
			
		||||
  License:   The GNU Free Documentation License, Version 1.2
 | 
			
		||||
               (dual licensed under the GPL v2)
 | 
			
		||||
Reviewers:   Mathieu Desnoyers, Huang Ying, Hidetoshi Seto,
 | 
			
		||||
	     and Frederic Weisbecker.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Written for: 2.6.31
 | 
			
		||||
 | 
			
		||||
Terminology used in this Document
 | 
			
		||||
---------------------------------
 | 
			
		||||
 | 
			
		||||
tail - where new writes happen in the ring buffer.
 | 
			
		||||
 | 
			
		||||
head - where new reads happen in the ring buffer.
 | 
			
		||||
 | 
			
		||||
producer - the task that writes into the ring buffer (same as writer)
 | 
			
		||||
 | 
			
		||||
writer - same as producer
 | 
			
		||||
 | 
			
		||||
consumer - the task that reads from the buffer (same as reader)
 | 
			
		||||
 | 
			
		||||
reader - same as consumer.
 | 
			
		||||
 | 
			
		||||
reader_page - A page outside the ring buffer used solely (for the most part)
 | 
			
		||||
    by the reader.
 | 
			
		||||
 | 
			
		||||
head_page - a pointer to the page that the reader will use next
 | 
			
		||||
 | 
			
		||||
tail_page - a pointer to the page that will be written to next
 | 
			
		||||
 | 
			
		||||
commit_page - a pointer to the page with the last finished non nested write.
 | 
			
		||||
 | 
			
		||||
cmpxchg - hardware assisted atomic transaction that performs the following:
 | 
			
		||||
 | 
			
		||||
   A = B iff previous A == C
 | 
			
		||||
 | 
			
		||||
   R = cmpxchg(A, C, B) is saying that we replace A with B if and only if
 | 
			
		||||
      current A is equal to C, and we put the old (current) A into R
 | 
			
		||||
 | 
			
		||||
   R gets the previous A regardless if A is updated with B or not.
 | 
			
		||||
 | 
			
		||||
   To see if the update was successful a compare of R == C may be used.
 | 
			
		||||
 | 
			
		||||
The Generic Ring Buffer
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
The ring buffer can be used in either an overwrite mode or in
 | 
			
		||||
producer/consumer mode.
 | 
			
		||||
 | 
			
		||||
Producer/consumer mode is where the producer were to fill up the
 | 
			
		||||
buffer before the consumer could free up anything, the producer
 | 
			
		||||
will stop writing to the buffer. This will lose most recent events.
 | 
			
		||||
 | 
			
		||||
Overwrite mode is where the produce were to fill up the buffer
 | 
			
		||||
before the consumer could free up anything, the producer will
 | 
			
		||||
overwrite the older data. This will lose the oldest events.
 | 
			
		||||
 | 
			
		||||
No two writers can write at the same time (on the same per cpu buffer),
 | 
			
		||||
but a writer may interrupt another writer, but it must finish writing
 | 
			
		||||
before the previous writer may continue. This is very important to the
 | 
			
		||||
algorithm. The writers act like a "stack". The way interrupts works
 | 
			
		||||
enforces this behavior.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  writer1 start
 | 
			
		||||
     <preempted> writer2 start
 | 
			
		||||
         <preempted> writer3 start
 | 
			
		||||
                     writer3 finishes
 | 
			
		||||
                 writer2 finishes
 | 
			
		||||
  writer1 finishes
 | 
			
		||||
 | 
			
		||||
This is very much like a writer being preempted by an interrupt and
 | 
			
		||||
the interrupt doing a write as well.
 | 
			
		||||
 | 
			
		||||
Readers can happen at any time. But no two readers may run at the
 | 
			
		||||
same time, nor can a reader preempt/interrupt another reader. A reader
 | 
			
		||||
can not preempt/interrupt a writer, but it may read/consume from the
 | 
			
		||||
buffer at the same time as a writer is writing, but the reader must be
 | 
			
		||||
on another processor to do so. A reader may read on its own processor
 | 
			
		||||
and can be preempted by a writer.
 | 
			
		||||
 | 
			
		||||
A writer can preempt a reader, but a reader can not preempt a writer.
 | 
			
		||||
But a reader can read the buffer at the same time (on another processor)
 | 
			
		||||
as a writer.
 | 
			
		||||
 | 
			
		||||
The ring buffer is made up of a list of pages held together by a link list.
 | 
			
		||||
 | 
			
		||||
At initialization a reader page is allocated for the reader that is not
 | 
			
		||||
part of the ring buffer.
 | 
			
		||||
 | 
			
		||||
The head_page, tail_page and commit_page are all initialized to point
 | 
			
		||||
to the same page.
 | 
			
		||||
 | 
			
		||||
The reader page is initialized to have its next pointer pointing to
 | 
			
		||||
the head page, and its previous pointer pointing to a page before
 | 
			
		||||
the head page.
 | 
			
		||||
 | 
			
		||||
The reader has its own page to use. At start up time, this page is
 | 
			
		||||
allocated but is not attached to the list. When the reader wants
 | 
			
		||||
to read from the buffer, if its page is empty (like it is on start up)
 | 
			
		||||
it will swap its page with the head_page. The old reader page will
 | 
			
		||||
become part of the ring buffer and the head_page will be removed.
 | 
			
		||||
The page after the inserted page (old reader_page) will become the
 | 
			
		||||
new head page.
 | 
			
		||||
 | 
			
		||||
Once the new page is given to the reader, the reader could do what
 | 
			
		||||
it wants with it, as long as a writer has left that page.
 | 
			
		||||
 | 
			
		||||
A sample of how the reader page is swapped: Note this does not
 | 
			
		||||
show the head page in the buffer, it is for demonstrating a swap
 | 
			
		||||
only.
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |reader|          RING BUFFER
 | 
			
		||||
  |page  |
 | 
			
		||||
  +------+
 | 
			
		||||
                  +---+   +---+   +---+
 | 
			
		||||
                  |   |-->|   |-->|   |
 | 
			
		||||
                  |   |<--|   |<--|   |
 | 
			
		||||
                  +---+   +---+   +---+
 | 
			
		||||
                   ^ |             ^ |
 | 
			
		||||
                   | +-------------+ |
 | 
			
		||||
                   +-----------------+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |reader|          RING BUFFER
 | 
			
		||||
  |page  |-------------------+
 | 
			
		||||
  +------+                   v
 | 
			
		||||
    |             +---+   +---+   +---+
 | 
			
		||||
    |             |   |-->|   |-->|   |
 | 
			
		||||
    |             |   |<--|   |<--|   |<-+
 | 
			
		||||
    |             +---+   +---+   +---+  |
 | 
			
		||||
    |              ^ |             ^ |   |
 | 
			
		||||
    |              | +-------------+ |   |
 | 
			
		||||
    |              +-----------------+   |
 | 
			
		||||
    +------------------------------------+
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |reader|          RING BUFFER
 | 
			
		||||
  |page  |-------------------+
 | 
			
		||||
  +------+ <---------------+ v
 | 
			
		||||
    |  ^          +---+   +---+   +---+
 | 
			
		||||
    |  |          |   |-->|   |-->|   |
 | 
			
		||||
    |  |          |   |   |   |<--|   |<-+
 | 
			
		||||
    |  |          +---+   +---+   +---+  |
 | 
			
		||||
    |  |             |             ^ |   |
 | 
			
		||||
    |  |             +-------------+ |   |
 | 
			
		||||
    |  +-----------------------------+   |
 | 
			
		||||
    +------------------------------------+
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |buffer|          RING BUFFER
 | 
			
		||||
  |page  |-------------------+
 | 
			
		||||
  +------+ <---------------+ v
 | 
			
		||||
    |  ^          +---+   +---+   +---+
 | 
			
		||||
    |  |          |   |   |   |-->|   |
 | 
			
		||||
    |  |  New     |   |   |   |<--|   |<-+
 | 
			
		||||
    |  | Reader   +---+   +---+   +---+  |
 | 
			
		||||
    |  |  page ----^                 |   |
 | 
			
		||||
    |  |                             |   |
 | 
			
		||||
    |  +-----------------------------+   |
 | 
			
		||||
    +------------------------------------+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
It is possible that the page swapped is the commit page and the tail page,
 | 
			
		||||
if what is in the ring buffer is less than what is held in a buffer page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          reader page    commit page   tail page
 | 
			
		||||
              |              |             |
 | 
			
		||||
              v              |             |
 | 
			
		||||
             +---+           |             |
 | 
			
		||||
             |   |<----------+             |
 | 
			
		||||
             |   |<------------------------+
 | 
			
		||||
             |   |------+
 | 
			
		||||
             +---+      |
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
This case is still valid for this algorithm.
 | 
			
		||||
When the writer leaves the page, it simply goes into the ring buffer
 | 
			
		||||
since the reader page still points to the next location in the ring
 | 
			
		||||
buffer.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The main pointers:
 | 
			
		||||
 | 
			
		||||
  reader page - The page used solely by the reader and is not part
 | 
			
		||||
                of the ring buffer (may be swapped in)
 | 
			
		||||
 | 
			
		||||
  head page - the next page in the ring buffer that will be swapped
 | 
			
		||||
              with the reader page.
 | 
			
		||||
 | 
			
		||||
  tail page - the page where the next write will take place.
 | 
			
		||||
 | 
			
		||||
  commit page - the page that last finished a write.
 | 
			
		||||
 | 
			
		||||
The commit page only is updated by the outer most writer in the
 | 
			
		||||
writer stack. A writer that preempts another writer will not move the
 | 
			
		||||
commit page.
 | 
			
		||||
 | 
			
		||||
When data is written into the ring buffer, a position is reserved
 | 
			
		||||
in the ring buffer and passed back to the writer. When the writer
 | 
			
		||||
is finished writing data into that position, it commits the write.
 | 
			
		||||
 | 
			
		||||
Another write (or a read) may take place at anytime during this
 | 
			
		||||
transaction. If another write happens it must finish before continuing
 | 
			
		||||
with the previous write.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   Write reserve:
 | 
			
		||||
 | 
			
		||||
       Buffer page
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+  <--- given back to writer (current commit)
 | 
			
		||||
      |reserved |
 | 
			
		||||
      +---------+ <--- tail pointer
 | 
			
		||||
      | empty   |
 | 
			
		||||
      +---------+
 | 
			
		||||
 | 
			
		||||
   Write commit:
 | 
			
		||||
 | 
			
		||||
       Buffer page
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+  <--- next positon for write (current commit)
 | 
			
		||||
      | empty   |
 | 
			
		||||
      +---------+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 If a write happens after the first reserve:
 | 
			
		||||
 | 
			
		||||
       Buffer page
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+  <-- current commit
 | 
			
		||||
      |reserved |
 | 
			
		||||
      +---------+  <--- given back to second writer
 | 
			
		||||
      |reserved |
 | 
			
		||||
      +---------+ <--- tail pointer
 | 
			
		||||
 | 
			
		||||
  After second writer commits:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
       Buffer page
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+  <--(last full commit)
 | 
			
		||||
      |reserved |
 | 
			
		||||
      +---------+
 | 
			
		||||
      |pending  |
 | 
			
		||||
      |commit   |
 | 
			
		||||
      +---------+ <--- tail pointer
 | 
			
		||||
 | 
			
		||||
  When the first writer commits:
 | 
			
		||||
 | 
			
		||||
       Buffer page
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+
 | 
			
		||||
      |written  |
 | 
			
		||||
      +---------+  <--(last full commit and tail pointer)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The commit pointer points to the last write location that was
 | 
			
		||||
committed without preempting another write. When a write that
 | 
			
		||||
preempted another write is committed, it only becomes a pending commit
 | 
			
		||||
and will not be a full commit till all writes have been committed.
 | 
			
		||||
 | 
			
		||||
The commit page points to the page that has the last full commit.
 | 
			
		||||
The tail page points to the page with the last write (before
 | 
			
		||||
committing).
 | 
			
		||||
 | 
			
		||||
The tail page is always equal to or after the commit page. It may
 | 
			
		||||
be several pages ahead. If the tail page catches up to the commit
 | 
			
		||||
page then no more writes may take place (regardless of the mode
 | 
			
		||||
of the ring buffer: overwrite and produce/consumer).
 | 
			
		||||
 | 
			
		||||
The order of pages are:
 | 
			
		||||
 | 
			
		||||
 head page
 | 
			
		||||
 commit page
 | 
			
		||||
 tail page
 | 
			
		||||
 | 
			
		||||
Possible scenario:
 | 
			
		||||
                             tail page
 | 
			
		||||
  head page         commit page  |
 | 
			
		||||
      |                 |        |
 | 
			
		||||
      v                 v        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
There is a special case that the head page is after either the commit page
 | 
			
		||||
and possibly the tail page. That is when the commit (and tail) page has been
 | 
			
		||||
swapped with the reader page. This is because the head page is always
 | 
			
		||||
part of the ring buffer, but the reader page is not. When ever there
 | 
			
		||||
has been less than a full page that has been committed inside the ring buffer,
 | 
			
		||||
and a reader swaps out a page, it will be swapping out the commit page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          reader page    commit page   tail page
 | 
			
		||||
              |              |             |
 | 
			
		||||
              v              |             |
 | 
			
		||||
             +---+           |             |
 | 
			
		||||
             |   |<----------+             |
 | 
			
		||||
             |   |<------------------------+
 | 
			
		||||
             |   |------+
 | 
			
		||||
             +---+      |
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
                        ^
 | 
			
		||||
                        |
 | 
			
		||||
                    head page
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
In this case, the head page will not move when the tail and commit
 | 
			
		||||
move back into the ring buffer.
 | 
			
		||||
 | 
			
		||||
The reader can not swap a page into the ring buffer if the commit page
 | 
			
		||||
is still on that page. If the read meets the last commit (real commit
 | 
			
		||||
not pending or reserved), then there is nothing more to read.
 | 
			
		||||
The buffer is considered empty until another full commit finishes.
 | 
			
		||||
 | 
			
		||||
When the tail meets the head page, if the buffer is in overwrite mode,
 | 
			
		||||
the head page will be pushed ahead one. If the buffer is in producer/consumer
 | 
			
		||||
mode, the write will fail.
 | 
			
		||||
 | 
			
		||||
Overwrite mode:
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
                        ^
 | 
			
		||||
                        |
 | 
			
		||||
                    head page
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
                                 ^
 | 
			
		||||
                                 |
 | 
			
		||||
                             head page
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
                                 ^
 | 
			
		||||
                                 |
 | 
			
		||||
                             head page
 | 
			
		||||
 | 
			
		||||
Note, the reader page will still point to the previous head page.
 | 
			
		||||
But when a swap takes place, it will use the most recent head page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Making the Ring Buffer Lockless:
 | 
			
		||||
--------------------------------
 | 
			
		||||
 | 
			
		||||
The main idea behind the lockless algorithm is to combine the moving
 | 
			
		||||
of the head_page pointer with the swapping of pages with the reader.
 | 
			
		||||
State flags are placed inside the pointer to the page. To do this,
 | 
			
		||||
each page must be aligned in memory by 4 bytes. This will allow the 2
 | 
			
		||||
least significant bits of the address to be used as flags. Since
 | 
			
		||||
they will always be zero for the address. To get the address,
 | 
			
		||||
simply mask out the flags.
 | 
			
		||||
 | 
			
		||||
  MASK = ~3
 | 
			
		||||
 | 
			
		||||
  address & MASK
 | 
			
		||||
 | 
			
		||||
Two flags will be kept by these two bits:
 | 
			
		||||
 | 
			
		||||
   HEADER - the page being pointed to is a head page
 | 
			
		||||
 | 
			
		||||
   UPDATE - the page being pointed to is being updated by a writer
 | 
			
		||||
          and was or is about to be a head page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          reader page
 | 
			
		||||
              |
 | 
			
		||||
              v
 | 
			
		||||
             +---+
 | 
			
		||||
             |   |------+
 | 
			
		||||
             +---+      |
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-H->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The above pointer "-H->" would have the HEADER flag set. That is
 | 
			
		||||
the next page is the next page to be swapped out by the reader.
 | 
			
		||||
This pointer means the next page is the head page.
 | 
			
		||||
 | 
			
		||||
When the tail page meets the head pointer, it will use cmpxchg to
 | 
			
		||||
change the pointer to the UPDATE state:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-H->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
"-U->" represents a pointer in the UPDATE state.
 | 
			
		||||
 | 
			
		||||
Any access to the reader will need to take some sort of lock to serialize
 | 
			
		||||
the readers. But the writers will never take a lock to write to the
 | 
			
		||||
ring buffer. This means we only need to worry about a single reader,
 | 
			
		||||
and writes only preempt in "stack" formation.
 | 
			
		||||
 | 
			
		||||
When the reader tries to swap the page with the ring buffer, it
 | 
			
		||||
will also use cmpxchg. If the flag bit in the pointer to the
 | 
			
		||||
head page does not have the HEADER flag set, the compare will fail
 | 
			
		||||
and the reader will need to look for the new head page and try again.
 | 
			
		||||
Note, the flag UPDATE and HEADER are never set at the same time.
 | 
			
		||||
 | 
			
		||||
The reader swaps the reader page as follows:
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |reader|          RING BUFFER
 | 
			
		||||
  |page  |
 | 
			
		||||
  +------+
 | 
			
		||||
                  +---+    +---+    +---+
 | 
			
		||||
                  |   |--->|   |--->|   |
 | 
			
		||||
                  |   |<---|   |<---|   |
 | 
			
		||||
                  +---+    +---+    +---+
 | 
			
		||||
                   ^ |               ^ |
 | 
			
		||||
                   | +---------------+ |
 | 
			
		||||
                   +-----H-------------+
 | 
			
		||||
 | 
			
		||||
The reader sets the reader page next pointer as HEADER to the page after
 | 
			
		||||
the head page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |reader|          RING BUFFER
 | 
			
		||||
  |page  |-------H-----------+
 | 
			
		||||
  +------+                   v
 | 
			
		||||
    |             +---+    +---+    +---+
 | 
			
		||||
    |             |   |--->|   |--->|   |
 | 
			
		||||
    |             |   |<---|   |<---|   |<-+
 | 
			
		||||
    |             +---+    +---+    +---+  |
 | 
			
		||||
    |              ^ |               ^ |   |
 | 
			
		||||
    |              | +---------------+ |   |
 | 
			
		||||
    |              +-----H-------------+   |
 | 
			
		||||
    +--------------------------------------+
 | 
			
		||||
 | 
			
		||||
It does a cmpxchg with the pointer to the previous head page to make it
 | 
			
		||||
point to the reader page. Note that the new pointer does not have the HEADER
 | 
			
		||||
flag set.  This action atomically moves the head page forward.
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |reader|          RING BUFFER
 | 
			
		||||
  |page  |-------H-----------+
 | 
			
		||||
  +------+                   v
 | 
			
		||||
    |  ^          +---+   +---+   +---+
 | 
			
		||||
    |  |          |   |-->|   |-->|   |
 | 
			
		||||
    |  |          |   |<--|   |<--|   |<-+
 | 
			
		||||
    |  |          +---+   +---+   +---+  |
 | 
			
		||||
    |  |             |             ^ |   |
 | 
			
		||||
    |  |             +-------------+ |   |
 | 
			
		||||
    |  +-----------------------------+   |
 | 
			
		||||
    +------------------------------------+
 | 
			
		||||
 | 
			
		||||
After the new head page is set, the previous pointer of the head page is
 | 
			
		||||
updated to the reader page.
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |reader|          RING BUFFER
 | 
			
		||||
  |page  |-------H-----------+
 | 
			
		||||
  +------+ <---------------+ v
 | 
			
		||||
    |  ^          +---+   +---+   +---+
 | 
			
		||||
    |  |          |   |-->|   |-->|   |
 | 
			
		||||
    |  |          |   |   |   |<--|   |<-+
 | 
			
		||||
    |  |          +---+   +---+   +---+  |
 | 
			
		||||
    |  |             |             ^ |   |
 | 
			
		||||
    |  |             +-------------+ |   |
 | 
			
		||||
    |  +-----------------------------+   |
 | 
			
		||||
    +------------------------------------+
 | 
			
		||||
 | 
			
		||||
  +------+
 | 
			
		||||
  |buffer|          RING BUFFER
 | 
			
		||||
  |page  |-------H-----------+  <--- New head page
 | 
			
		||||
  +------+ <---------------+ v
 | 
			
		||||
    |  ^          +---+   +---+   +---+
 | 
			
		||||
    |  |          |   |   |   |-->|   |
 | 
			
		||||
    |  |  New     |   |   |   |<--|   |<-+
 | 
			
		||||
    |  | Reader   +---+   +---+   +---+  |
 | 
			
		||||
    |  |  page ----^                 |   |
 | 
			
		||||
    |  |                             |   |
 | 
			
		||||
    |  +-----------------------------+   |
 | 
			
		||||
    +------------------------------------+
 | 
			
		||||
 | 
			
		||||
Another important point. The page that the reader page points back to
 | 
			
		||||
by its previous pointer (the one that now points to the new head page)
 | 
			
		||||
never points back to the reader page. That is because the reader page is
 | 
			
		||||
not part of the ring buffer. Traversing the ring buffer via the next pointers
 | 
			
		||||
will always stay in the ring buffer. Traversing the ring buffer via the
 | 
			
		||||
prev pointers may not.
 | 
			
		||||
 | 
			
		||||
Note, the way to determine a reader page is simply by examining the previous
 | 
			
		||||
pointer of the page. If the next pointer of the previous page does not
 | 
			
		||||
point back to the original page, then the original page is a reader page:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
             +--------+
 | 
			
		||||
             | reader |  next   +----+
 | 
			
		||||
             |  page  |-------->|    |<====== (buffer page)
 | 
			
		||||
             +--------+         +----+
 | 
			
		||||
                 |                | ^
 | 
			
		||||
                 |                v | next
 | 
			
		||||
            prev |              +----+
 | 
			
		||||
                 +------------->|    |
 | 
			
		||||
                                +----+
 | 
			
		||||
 | 
			
		||||
The way the head page moves forward:
 | 
			
		||||
 | 
			
		||||
When the tail page meets the head page and the buffer is in overwrite mode
 | 
			
		||||
and more writes take place, the head page must be moved forward before the
 | 
			
		||||
writer may move the tail page. The way this is done is that the writer
 | 
			
		||||
performs a cmpxchg to convert the pointer to the head page from the HEADER
 | 
			
		||||
flag to have the UPDATE flag set. Once this is done, the reader will
 | 
			
		||||
not be able to swap the head page from the buffer, nor will it be able to
 | 
			
		||||
move the head page, until the writer is finished with the move.
 | 
			
		||||
 | 
			
		||||
This eliminates any races that the reader can have on the writer. The reader
 | 
			
		||||
must spin, and this is why the reader can not preempt the writer.
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-H->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
The following page will be made into the new head page.
 | 
			
		||||
 | 
			
		||||
           tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
After the new head page has been set, we can set the old head page
 | 
			
		||||
pointer back to NORMAL.
 | 
			
		||||
 | 
			
		||||
           tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
After the head page has been moved, the tail page may now move forward.
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The above are the trivial updates. Now for the more complex scenarios.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
As stated before, if enough writes preempt the first write, the
 | 
			
		||||
tail page may make it all the way around the buffer and meet the commit
 | 
			
		||||
page. At this time, we must start dropping writes (usually with some kind
 | 
			
		||||
of warning to the user). But what happens if the commit was still on the
 | 
			
		||||
reader page? The commit page is not part of the ring buffer. The tail page
 | 
			
		||||
must account for this.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          reader page    commit page
 | 
			
		||||
              |              |
 | 
			
		||||
              v              |
 | 
			
		||||
             +---+           |
 | 
			
		||||
             |   |<----------+
 | 
			
		||||
             |   |
 | 
			
		||||
             |   |------+
 | 
			
		||||
             +---+      |
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-H->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
               ^
 | 
			
		||||
               |
 | 
			
		||||
           tail page
 | 
			
		||||
 | 
			
		||||
If the tail page were to simply push the head page forward, the commit when
 | 
			
		||||
leaving the reader page would not be pointing to the correct page.
 | 
			
		||||
 | 
			
		||||
The solution to this is to test if the commit page is on the reader page
 | 
			
		||||
before pushing the head page. If it is, then it can be assumed that the
 | 
			
		||||
tail page wrapped the buffer, and we must drop new writes.
 | 
			
		||||
 | 
			
		||||
This is not a race condition, because the commit page can only be moved
 | 
			
		||||
by the outter most writer (the writer that was preempted).
 | 
			
		||||
This means that the commit will not move while a writer is moving the
 | 
			
		||||
tail page. The reader can not swap the reader page if it is also being
 | 
			
		||||
used as the commit page. The reader can simply check that the commit
 | 
			
		||||
is off the reader page. Once the commit page leaves the reader page
 | 
			
		||||
it will never go back on it unless a reader does another swap with the
 | 
			
		||||
buffer page that is also the commit page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Nested writes
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
In the pushing forward of the tail page we must first push forward
 | 
			
		||||
the head page if the head page is the next page. If the head page
 | 
			
		||||
is not the next page, the tail page is simply updated with a cmpxchg.
 | 
			
		||||
 | 
			
		||||
Only writers move the tail page. This must be done atomically to protect
 | 
			
		||||
against nested writers.
 | 
			
		||||
 | 
			
		||||
  temp_page = tail_page
 | 
			
		||||
  next_page = temp_page->next
 | 
			
		||||
  cmpxchg(tail_page, temp_page, next_page)
 | 
			
		||||
 | 
			
		||||
The above will update the tail page if it is still pointing to the expected
 | 
			
		||||
page. If this fails, a nested write pushed it forward, the the current write
 | 
			
		||||
does not need to push it.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
           temp page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
Nested write comes in and moves the tail page forward:
 | 
			
		||||
 | 
			
		||||
                    tail page (moved by nested writer)
 | 
			
		||||
            temp page   |
 | 
			
		||||
               |        |
 | 
			
		||||
               v        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
The above would fail the cmpxchg, but since the tail page has already
 | 
			
		||||
been moved forward, the writer will just try again to reserve storage
 | 
			
		||||
on the new tail page.
 | 
			
		||||
 | 
			
		||||
But the moving of the head page is a bit more complex.
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-H->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
The write converts the head page pointer to UPDATE.
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
But if a nested writer preempts here. It will see that the next
 | 
			
		||||
page is a head page, but it is also nested. It will detect that
 | 
			
		||||
it is nested and will save that information. The detection is the
 | 
			
		||||
fact that it sees the UPDATE flag instead of a HEADER or NORMAL
 | 
			
		||||
pointer.
 | 
			
		||||
 | 
			
		||||
The nested writer will set the new head page pointer.
 | 
			
		||||
 | 
			
		||||
           tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
But it will not reset the update back to normal. Only the writer
 | 
			
		||||
that converted a pointer from HEAD to UPDATE will convert it back
 | 
			
		||||
to NORMAL.
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
After the nested writer finishes, the outer most writer will convert
 | 
			
		||||
the UPDATE pointer to NORMAL.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
It can be even more complex if several nested writes came in and moved
 | 
			
		||||
the tail page ahead several pages:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(first writer)
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-H->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
The write converts the head page pointer to UPDATE.
 | 
			
		||||
 | 
			
		||||
            tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
Next writer comes in, and sees the update and sets up the new
 | 
			
		||||
head page.
 | 
			
		||||
 | 
			
		||||
(second writer)
 | 
			
		||||
 | 
			
		||||
           tail page
 | 
			
		||||
               |
 | 
			
		||||
               v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
The nested writer moves the tail page forward. But does not set the old
 | 
			
		||||
update page to NORMAL because it is not the outer most writer.
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-H->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
Another writer preempts and sees the page after the tail page is a head page.
 | 
			
		||||
It changes it from HEAD to UPDATE.
 | 
			
		||||
 | 
			
		||||
(third writer)
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-U->|   |--->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
The writer will move the head page forward:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(third writer)
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-U->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
But now that the third writer did change the HEAD flag to UPDATE it
 | 
			
		||||
will convert it to normal:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(third writer)
 | 
			
		||||
 | 
			
		||||
                    tail page
 | 
			
		||||
                        |
 | 
			
		||||
                        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Then it will move the tail page, and return back to the second writer.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(second writer)
 | 
			
		||||
 | 
			
		||||
                             tail page
 | 
			
		||||
                                 |
 | 
			
		||||
                                 v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
The second writer will fail to move the tail page because it was already
 | 
			
		||||
moved, so it will try again and add its data to the new tail page.
 | 
			
		||||
It will return to the first writer.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(first writer)
 | 
			
		||||
 | 
			
		||||
                             tail page
 | 
			
		||||
                                 |
 | 
			
		||||
                                 v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
The first writer can not know atomically test if the tail page moved
 | 
			
		||||
while it updates the HEAD page. It will then update the head page to
 | 
			
		||||
what it thinks is the new head page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(first writer)
 | 
			
		||||
 | 
			
		||||
                             tail page
 | 
			
		||||
                                 |
 | 
			
		||||
                                 v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-H->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
Since the cmpxchg returns the old value of the pointer the first writer
 | 
			
		||||
will see it succeeded in updating the pointer from NORMAL to HEAD.
 | 
			
		||||
But as we can see, this is not good enough. It must also check to see
 | 
			
		||||
if the tail page is either where it use to be or on the next page:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(first writer)
 | 
			
		||||
 | 
			
		||||
               A        B    tail page
 | 
			
		||||
               |        |        |
 | 
			
		||||
               v        v        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |-H->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
If tail page != A and tail page does not equal B, then it must reset the
 | 
			
		||||
pointer back to NORMAL. The fact that it only needs to worry about
 | 
			
		||||
nested writers, it only needs to check this after setting the HEAD page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(first writer)
 | 
			
		||||
 | 
			
		||||
               A        B    tail page
 | 
			
		||||
               |        |        |
 | 
			
		||||
               v        v        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |-U->|   |--->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
Now the writer can update the head page. This is also why the head page must
 | 
			
		||||
remain in UPDATE and only reset by the outer most writer. This prevents
 | 
			
		||||
the reader from seeing the incorrect head page.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(first writer)
 | 
			
		||||
 | 
			
		||||
               A        B    tail page
 | 
			
		||||
               |        |        |
 | 
			
		||||
               v        v        v
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
<---|   |--->|   |--->|   |--->|   |-H->
 | 
			
		||||
--->|   |<---|   |<---|   |<---|   |<---
 | 
			
		||||
    +---+    +---+    +---+    +---+
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -21,3 +21,5 @@
 | 
			
		|||
 20 -> Hauppauge WinTV-HVR1255                             [0070:2251]
 | 
			
		||||
 21 -> Hauppauge WinTV-HVR1210                             [0070:2291,0070:2295]
 | 
			
		||||
 22 -> Mygica X8506 DMB-TH                                 [14f1:8651]
 | 
			
		||||
 23 -> Magic-Pro ProHDTV Extreme 2                         [14f1:8657]
 | 
			
		||||
 24 -> Hauppauge WinTV-HVR1850                             [0070:8541]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,3 +80,4 @@
 | 
			
		|||
 79 -> Terratec Cinergy HT PCI MKII                        [153b:1177]
 | 
			
		||||
 80 -> Hauppauge WinTV-IR Only                             [0070:9290]
 | 
			
		||||
 81 -> Leadtek WinFast DTV1800 Hybrid                      [107d:6654]
 | 
			
		||||
 82 -> WinFast DTV2000 H rev. J                            [107d:6f2b]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@
 | 
			
		|||
  6 -> Terratec Cinergy 200 USB                 (em2800)
 | 
			
		||||
  7 -> Leadtek Winfast USB II                   (em2800)        [0413:6023]
 | 
			
		||||
  8 -> Kworld USB2800                           (em2800)
 | 
			
		||||
  9 -> Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker (em2820/em2840) [1b80:e302,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]
 | 
			
		||||
 11 -> Terratec Hybrid XS                       (em2880)        [0ccd:0042]
 | 
			
		||||
 12 -> Kworld PVR TV 2800 RF                    (em2820/em2840)
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
 34 -> Terratec Cinergy A Hybrid XS             (em2860)        [0ccd:004f]
 | 
			
		||||
 35 -> Typhoon DVD Maker                        (em2860)
 | 
			
		||||
 36 -> NetGMBH Cam                              (em2860)
 | 
			
		||||
 37 -> Gadmei UTV330                            (em2860)
 | 
			
		||||
 37 -> Gadmei UTV330                            (em2860)        [eb1a:50a6]
 | 
			
		||||
 38 -> Yakumo MovieMixer                        (em2861)
 | 
			
		||||
 39 -> KWorld PVRTV 300U                        (em2861)        [eb1a:e300]
 | 
			
		||||
 40 -> Plextor ConvertX PX-TV100U               (em2861)        [093b:a005]
 | 
			
		||||
| 
						 | 
				
			
			@ -67,3 +67,4 @@
 | 
			
		|||
 69 -> KWorld ATSC 315U HDTV TV Box             (em2882)        [eb1a:a313]
 | 
			
		||||
 70 -> Evga inDtube                             (em2882)
 | 
			
		||||
 71 -> Silvercrest Webcam 1.3mpix               (em2820/em2840)
 | 
			
		||||
 72 -> Gadmei UTV330+                           (em2861)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -167,3 +167,7 @@
 | 
			
		|||
166 -> Beholder BeholdTV 607 RDS                [5ace:6073]
 | 
			
		||||
167 -> Beholder BeholdTV 609 RDS                [5ace:6092]
 | 
			
		||||
168 -> Beholder BeholdTV 609 RDS                [5ace:6093]
 | 
			
		||||
169 -> Compro VideoMate S350/S300               [185b:c900]
 | 
			
		||||
170 -> AverMedia AverTV Studio 505              [1461:a115]
 | 
			
		||||
171 -> Beholder BeholdTV X7                     [5ace:7595]
 | 
			
		||||
172 -> RoverMedia TV Link Pro FM                [19d1:0138]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,3 +78,4 @@ tuner=77 - TCL tuner MF02GIP-5N-E
 | 
			
		|||
tuner=78 - Philips FMD1216MEX MK3 Hybrid Tuner
 | 
			
		||||
tuner=79 - Philips PAL/SECAM multi (FM1216 MK5)
 | 
			
		||||
tuner=80 - Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough
 | 
			
		||||
tuner=81 - Partsnic (Daewoo) PTI-5NF05
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,8 +18,8 @@ Table of Contents
 | 
			
		|||
 | 
			
		||||
1.0 Introduction
 | 
			
		||||
 | 
			
		||||
  The file ../drivers/char/c-qcam.c is a device driver for the
 | 
			
		||||
Logitech (nee Connectix) parallel port interface color CCD camera.
 | 
			
		||||
  The file ../../drivers/media/video/c-qcam.c is a device driver for
 | 
			
		||||
the Logitech (nee Connectix) parallel port interface color CCD camera.
 | 
			
		||||
This is a fairly inexpensive device for capturing images.  Logitech
 | 
			
		||||
does not currently provide information for developers, but many people
 | 
			
		||||
have engineered several solutions for non-Microsoft use of the Color
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,6 +140,7 @@ spca500		04fc:7333	PalmPixDC85
 | 
			
		|||
sunplus		04fc:ffff	Pure DigitalDakota
 | 
			
		||||
spca501		0506:00df	3Com HomeConnect Lite
 | 
			
		||||
sunplus		052b:1513	Megapix V4
 | 
			
		||||
sunplus		052b:1803	MegaImage VI
 | 
			
		||||
tv8532		0545:808b	Veo Stingray
 | 
			
		||||
tv8532		0545:8333	Veo Stingray
 | 
			
		||||
sunplus		0546:3155	Polaroid PDC3070
 | 
			
		||||
| 
						 | 
				
			
			@ -182,6 +183,7 @@ ov534		06f8:3002	Hercules Blog Webcam
 | 
			
		|||
ov534		06f8:3003	Hercules Dualpix HD Weblog
 | 
			
		||||
sonixj		06f8:3004	Hercules Classic Silver
 | 
			
		||||
sonixj		06f8:3008	Hercules Deluxe Optical Glass
 | 
			
		||||
pac7311		06f8:3009	Hercules Classic Link
 | 
			
		||||
spca508		0733:0110	ViewQuest VQ110
 | 
			
		||||
spca508		0130:0130	Clone Digital Webcam 11043
 | 
			
		||||
spca501		0733:0401	Intel Create and Share
 | 
			
		||||
| 
						 | 
				
			
			@ -235,8 +237,10 @@ pac7311		093a:2621	PAC731x
 | 
			
		|||
pac7311		093a:2622	Genius Eye 312
 | 
			
		||||
pac7311		093a:2624	PAC7302
 | 
			
		||||
pac7311		093a:2626	Labtec 2200
 | 
			
		||||
pac7311		093a:2629	Genious iSlim 300
 | 
			
		||||
pac7311		093a:262a	Webcam 300k
 | 
			
		||||
pac7311		093a:262c	Philips SPC 230 NC
 | 
			
		||||
jeilinj		0979:0280	Sakar 57379
 | 
			
		||||
zc3xx		0ac8:0302	Z-star Vimicro zc0302
 | 
			
		||||
vc032x		0ac8:0321	Vimicro generic vc0321
 | 
			
		||||
vc032x		0ac8:0323	Vimicro Vc0323
 | 
			
		||||
| 
						 | 
				
			
			@ -247,6 +251,7 @@ zc3xx		0ac8:305b	Z-star Vimicro zc0305b
 | 
			
		|||
zc3xx		0ac8:307b	Ldlc VC302+Ov7620
 | 
			
		||||
vc032x		0ac8:c001	Sony embedded vimicro
 | 
			
		||||
vc032x		0ac8:c002	Sony embedded vimicro
 | 
			
		||||
vc032x		0ac8:c301	Samsung Q1 Ultra Premium
 | 
			
		||||
spca508		0af9:0010	Hama USB Sightcam 100
 | 
			
		||||
spca508		0af9:0011	Hama USB Sightcam 100
 | 
			
		||||
sonixb		0c45:6001	Genius VideoCAM NB
 | 
			
		||||
| 
						 | 
				
			
			@ -284,6 +289,7 @@ sonixj		0c45:613a	Microdia Sonix PC Camera
 | 
			
		|||
sonixj		0c45:613b	Surfer SN-206
 | 
			
		||||
sonixj		0c45:613c	Sonix Pccam168
 | 
			
		||||
sonixj		0c45:6143	Sonix Pccam168
 | 
			
		||||
sonixj		0c45:6148	Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
 | 
			
		||||
sn9c20x		0c45:6240	PC Camera (SN9C201 + MT9M001)
 | 
			
		||||
sn9c20x		0c45:6242	PC Camera (SN9C201 + MT9M111)
 | 
			
		||||
sn9c20x		0c45:6248	PC Camera (SN9C201 + OV9655)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										176
									
								
								Documentation/video4linux/si4713.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								Documentation/video4linux/si4713.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,176 @@
 | 
			
		|||
Driver for I2C radios for the Silicon Labs Si4713 FM Radio Transmitters
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2009 Nokia Corporation
 | 
			
		||||
Contact: Eduardo Valentin <eduardo.valentin@nokia.com>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Information about the Device
 | 
			
		||||
============================
 | 
			
		||||
This chip is a Silicon Labs product. It is a I2C device, currently on 0x63 address.
 | 
			
		||||
Basically, it has transmission and signal noise level measurement features.
 | 
			
		||||
 | 
			
		||||
The Si4713 integrates transmit functions for FM broadcast stereo transmission.
 | 
			
		||||
The chip also allows integrated receive power scanning to identify low signal
 | 
			
		||||
power FM channels.
 | 
			
		||||
 | 
			
		||||
The chip is programmed using commands and responses. There are also several
 | 
			
		||||
properties which can change the behavior of this chip.
 | 
			
		||||
 | 
			
		||||
Users must comply with local regulations on radio frequency (RF) transmission.
 | 
			
		||||
 | 
			
		||||
Device driver description
 | 
			
		||||
=========================
 | 
			
		||||
There are two modules to handle this device. One is a I2C device driver
 | 
			
		||||
and the other is a platform driver.
 | 
			
		||||
 | 
			
		||||
The I2C device driver exports a v4l2-subdev interface to the kernel.
 | 
			
		||||
All properties can also be accessed by v4l2 extended controls interface, by
 | 
			
		||||
using the v4l2-subdev calls (g_ext_ctrls, s_ext_ctrls).
 | 
			
		||||
 | 
			
		||||
The platform device driver exports a v4l2 radio device interface to user land.
 | 
			
		||||
So, it uses the I2C device driver as a sub device in order to send the user
 | 
			
		||||
commands to the actual device. Basically it is a wrapper to the I2C device driver.
 | 
			
		||||
 | 
			
		||||
Applications can use v4l2 radio API to specify frequency of operation, mute state,
 | 
			
		||||
etc. But mostly of its properties will be present in the extended controls.
 | 
			
		||||
 | 
			
		||||
When the v4l2 mute property is set to 1 (true), the driver will turn the chip off.
 | 
			
		||||
 | 
			
		||||
Properties description
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
The properties can be accessed using v4l2 extended controls.
 | 
			
		||||
Here is an output from v4l2-ctl util:
 | 
			
		||||
/ # v4l2-ctl -d /dev/radio0 --all -L
 | 
			
		||||
Driver Info:
 | 
			
		||||
	Driver name   : radio-si4713
 | 
			
		||||
	Card type     : Silicon Labs Si4713 Modulator
 | 
			
		||||
	Bus info      :
 | 
			
		||||
	Driver version: 0
 | 
			
		||||
	Capabilities  : 0x00080800
 | 
			
		||||
		RDS Output
 | 
			
		||||
		Modulator
 | 
			
		||||
Audio output: 0 (FM Modulator Audio Out)
 | 
			
		||||
Frequency: 1408000 (88.000000 MHz)
 | 
			
		||||
Video Standard = 0x00000000
 | 
			
		||||
Modulator:
 | 
			
		||||
	Name                 : FM Modulator
 | 
			
		||||
	Capabilities         : 62.5 Hz stereo rds
 | 
			
		||||
	Frequency range      : 76.0 MHz - 108.0 MHz
 | 
			
		||||
	Subchannel modulation: stereo+rds
 | 
			
		||||
 | 
			
		||||
User Controls
 | 
			
		||||
 | 
			
		||||
			   mute (bool) : default=1 value=0
 | 
			
		||||
 | 
			
		||||
FM Radio Modulator Controls
 | 
			
		||||
 | 
			
		||||
	   rds_signal_deviation (int)  : min=0 max=90000 step=10 default=200 value=200 flags=slider
 | 
			
		||||
		 rds_program_id (int)  : min=0 max=65535 step=1 default=0 value=0
 | 
			
		||||
	       rds_program_type (int)  : min=0 max=31 step=1 default=0 value=0
 | 
			
		||||
		    rds_ps_name (str)  : min=0 max=96 step=8 value='si4713  '
 | 
			
		||||
		 rds_radio_text (str)  : min=0 max=384 step=32 value=''
 | 
			
		||||
  audio_limiter_feature_enabled (bool) : default=1 value=1
 | 
			
		||||
     audio_limiter_release_time (int)  : min=250 max=102390 step=50 default=5010 value=5010 flags=slider
 | 
			
		||||
	audio_limiter_deviation (int)  : min=0 max=90000 step=10 default=66250 value=66250 flags=slider
 | 
			
		||||
audio_compression_feature_enabl (bool) : default=1 value=1
 | 
			
		||||
	 audio_compression_gain (int)  : min=0 max=20 step=1 default=15 value=15 flags=slider
 | 
			
		||||
    audio_compression_threshold (int)  : min=-40 max=0 step=1 default=-40 value=-40 flags=slider
 | 
			
		||||
  audio_compression_attack_time (int)  : min=0 max=5000 step=500 default=0 value=0 flags=slider
 | 
			
		||||
 audio_compression_release_time (int)  : min=100000 max=1000000 step=100000 default=1000000 value=1000000 flags=slider
 | 
			
		||||
     pilot_tone_feature_enabled (bool) : default=1 value=1
 | 
			
		||||
	   pilot_tone_deviation (int)  : min=0 max=90000 step=10 default=6750 value=6750 flags=slider
 | 
			
		||||
	   pilot_tone_frequency (int)  : min=0 max=19000 step=1 default=19000 value=19000 flags=slider
 | 
			
		||||
	  pre_emphasis_settings (menu) : min=0 max=2 default=1 value=1
 | 
			
		||||
	       tune_power_level (int)  : min=0 max=120 step=1 default=88 value=88 flags=slider
 | 
			
		||||
	 tune_antenna_capacitor (int)  : min=0 max=191 step=1 default=0 value=110 flags=slider
 | 
			
		||||
/ #
 | 
			
		||||
 | 
			
		||||
Here is a summary of them:
 | 
			
		||||
 | 
			
		||||
* Pilot is an audible tone sent by the device.
 | 
			
		||||
 | 
			
		||||
pilot_frequency - Configures the frequency of the stereo pilot tone.
 | 
			
		||||
pilot_deviation - Configures pilot tone frequency deviation level.
 | 
			
		||||
pilot_enabled - Enables or disables the pilot tone feature.
 | 
			
		||||
 | 
			
		||||
* The si4713 device is capable of applying audio compression to the transmitted signal.
 | 
			
		||||
 | 
			
		||||
acomp_enabled - Enables or disables the audio dynamic range control feature.
 | 
			
		||||
acomp_gain - Sets the gain for audio dynamic range control.
 | 
			
		||||
acomp_threshold - Sets the threshold level for audio dynamic range control.
 | 
			
		||||
acomp_attack_time - Sets the attack time for audio dynamic range control.
 | 
			
		||||
acomp_release_time - Sets the release time for audio dynamic range control.
 | 
			
		||||
 | 
			
		||||
* Limiter setups audio deviation limiter feature. Once a over deviation occurs,
 | 
			
		||||
it is possible to adjust the front-end gain of the audio input and always
 | 
			
		||||
prevent over deviation.
 | 
			
		||||
 | 
			
		||||
limiter_enabled - Enables or disables the limiter feature.
 | 
			
		||||
limiter_deviation - Configures audio frequency deviation level.
 | 
			
		||||
limiter_release_time - Sets the limiter release time.
 | 
			
		||||
 | 
			
		||||
* Tuning power
 | 
			
		||||
 | 
			
		||||
power_level - Sets the output power level for signal transmission.
 | 
			
		||||
antenna_capacitor - This selects the value of antenna tuning capacitor manually
 | 
			
		||||
or automatically if set to zero.
 | 
			
		||||
 | 
			
		||||
* RDS related
 | 
			
		||||
 | 
			
		||||
rds_ps_name - Sets the RDS ps name field for transmission.
 | 
			
		||||
rds_radio_text - Sets the RDS radio text for transmission.
 | 
			
		||||
rds_pi - Sets the RDS PI field for transmission.
 | 
			
		||||
rds_pty - Sets the RDS PTY field for transmission.
 | 
			
		||||
 | 
			
		||||
* Region related
 | 
			
		||||
 | 
			
		||||
preemphasis - sets the preemphasis to be applied for transmission.
 | 
			
		||||
 | 
			
		||||
RNL
 | 
			
		||||
===
 | 
			
		||||
 | 
			
		||||
This device also has an interface to measure received noise level. To do that, you should
 | 
			
		||||
ioctl the device node. Here is an code of example:
 | 
			
		||||
 | 
			
		||||
int main (int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
	struct si4713_rnl rnl;
 | 
			
		||||
	int fd = open("/dev/radio0", O_RDWR);
 | 
			
		||||
	int rval;
 | 
			
		||||
 | 
			
		||||
	if (argc < 2)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	if (fd < 0)
 | 
			
		||||
		return fd;
 | 
			
		||||
 | 
			
		||||
	sscanf(argv[1], "%d", &rnl.frequency);
 | 
			
		||||
 | 
			
		||||
	rval = ioctl(fd, SI4713_IOC_MEASURE_RNL, &rnl);
 | 
			
		||||
	if (rval < 0)
 | 
			
		||||
		return rval;
 | 
			
		||||
 | 
			
		||||
	printf("received noise level: %d\n", rnl.rnl);
 | 
			
		||||
 | 
			
		||||
	close(fd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under
 | 
			
		||||
include/media/si4713.h.
 | 
			
		||||
 | 
			
		||||
Stereo/Mono and RDS subchannels
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
The device can also be configured using the available sub channels for
 | 
			
		||||
transmission. To do that use S/G_MODULATOR ioctl and configure txsubchans properly.
 | 
			
		||||
Refer to v4l2-spec for proper use of this ioctl.
 | 
			
		||||
 | 
			
		||||
Testing
 | 
			
		||||
=======
 | 
			
		||||
Testing is usually done with v4l2-ctl utility for managing FM tuner cards.
 | 
			
		||||
The tool can be found in v4l-dvb repository under v4l2-apps/util directory.
 | 
			
		||||
 | 
			
		||||
Example for setting rds ps name:
 | 
			
		||||
# v4l2-ctl -d /dev/radio0 --set-ctrl=rds_ps_name="Dummy"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +41,8 @@ Possible debug options are
 | 
			
		|||
	P		Poisoning (object and padding)
 | 
			
		||||
	U		User tracking (free and alloc)
 | 
			
		||||
	T		Trace (please only use on single slabs)
 | 
			
		||||
	O		Switch debugging off for caches that would have
 | 
			
		||||
			caused higher minimum slab orders
 | 
			
		||||
	-		Switch all debugging off (useful if the kernel is
 | 
			
		||||
			configured with CONFIG_SLUB_DEBUG_ON)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -59,6 +61,14 @@ to the dentry cache with
 | 
			
		|||
 | 
			
		||||
	slub_debug=F,dentry
 | 
			
		||||
 | 
			
		||||
Debugging options may require the minimum possible slab order to increase as
 | 
			
		||||
a result of storing the metadata (for example, caches with PAGE_SIZE object
 | 
			
		||||
sizes).  This has a higher liklihood of resulting in slab allocation errors
 | 
			
		||||
in low memory situations or if there's high fragmentation of memory.  To
 | 
			
		||||
switch off debugging for such caches by default, use
 | 
			
		||||
 | 
			
		||||
	slub_debug=O
 | 
			
		||||
 | 
			
		||||
In case you forgot to enable debugging on the kernel command line: It is
 | 
			
		||||
possible to enable debugging manually when the kernel is up. Look at the
 | 
			
		||||
contents of:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ Offset	Proto	Name		Meaning
 | 
			
		|||
000/040	ALL	screen_info	Text mode or frame buffer information
 | 
			
		||||
				(struct screen_info)
 | 
			
		||||
040/014	ALL	apm_bios_info	APM BIOS information (struct apm_bios_info)
 | 
			
		||||
058/008	ALL	tboot_addr      Physical address of tboot shared page
 | 
			
		||||
060/010	ALL	ist_info	Intel SpeedStep (IST) BIOS support information
 | 
			
		||||
				(struct ist_info)
 | 
			
		||||
080/010	ALL	hd0_info	hd0 disk parameter, OBSOLETE!!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										115
									
								
								MAINTAINERS
									
										
									
									
									
								
							
							
						
						
									
										115
									
								
								MAINTAINERS
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -439,7 +439,7 @@ F:	drivers/hwmon/ams/
 | 
			
		|||
AMSO1100 RNIC DRIVER
 | 
			
		||||
M:	Tom Tucker <tom@opengridcomputing.com>
 | 
			
		||||
M:	Steve Wise <swise@opengridcomputing.com>
 | 
			
		||||
L:	general@lists.openfabrics.org
 | 
			
		||||
L:	linux-rdma@vger.kernel.org
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	drivers/infiniband/hw/amso1100/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -534,10 +534,30 @@ L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 | 
			
		|||
W:	http://maxim.org.za/at91_26.html
 | 
			
		||||
S:	Maintained
 | 
			
		||||
 | 
			
		||||
ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
 | 
			
		||||
M:	Lennert Buytenhek <kernel@wantstofly.org>
 | 
			
		||||
ARM/BCMRING ARM ARCHITECTURE
 | 
			
		||||
M:	Leo Chen <leochen@broadcom.com>
 | 
			
		||||
M:	Scott Branden <sbranden@broadcom.com>
 | 
			
		||||
L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	arch/arm/mach-bcmring
 | 
			
		||||
 | 
			
		||||
ARM/BCMRING MTD NAND DRIVER
 | 
			
		||||
M:	Leo Chen <leochen@broadcom.com>
 | 
			
		||||
M:	Scott Branden <sbranden@broadcom.com>
 | 
			
		||||
L:	linux-mtd@lists.infradead.org
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	drivers/mtd/nand/bcm_umi_nand.c
 | 
			
		||||
F:	drivers/mtd/nand/bcm_umi_bch.c
 | 
			
		||||
F:	drivers/mtd/nand/bcm_umi_hamming.c
 | 
			
		||||
F:	drivers/mtd/nand/nand_bcm_umi.h
 | 
			
		||||
 | 
			
		||||
ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
 | 
			
		||||
M:	Hartley Sweeten <hsweeten@visionengravers.com>
 | 
			
		||||
M:	Ryan Mallon <ryan@bluewatersys.com>
 | 
			
		||||
L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	arch/arm/mach-ep93xx/
 | 
			
		||||
F:	arch/arm/mach-ep93xx/include/mach/
 | 
			
		||||
 | 
			
		||||
ARM/CIRRUS LOGIC EDB9315A MACHINE SUPPORT
 | 
			
		||||
M:	Lennert Buytenhek <kernel@wantstofly.org>
 | 
			
		||||
| 
						 | 
				
			
			@ -685,6 +705,18 @@ ARM/MAGICIAN MACHINE SUPPORT
 | 
			
		|||
M:	Philipp Zabel <philipp.zabel@gmail.com>
 | 
			
		||||
S:	Maintained
 | 
			
		||||
 | 
			
		||||
ARM/Marvell Loki/Kirkwood/MV78xx0/Orion SOC support
 | 
			
		||||
M:	Lennert Buytenhek <buytenh@marvell.com>
 | 
			
		||||
M:	Nicolas Pitre <nico@marvell.com>
 | 
			
		||||
L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 | 
			
		||||
T:	git git://git.marvell.com/orion
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	arch/arm/mach-loki/
 | 
			
		||||
F:	arch/arm/mach-kirkwood/
 | 
			
		||||
F:	arch/arm/mach-mv78xx0/
 | 
			
		||||
F:	arch/arm/mach-orion5x/
 | 
			
		||||
F:	arch/arm/plat-orion/
 | 
			
		||||
 | 
			
		||||
ARM/MIOA701 MACHINE SUPPORT
 | 
			
		||||
M:	Robert Jarzmik <robert.jarzmik@free.fr>
 | 
			
		||||
L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
 | 
			
		||||
| 
						 | 
				
			
			@ -876,6 +908,7 @@ M:	"Luis R. Rodriguez" <lrodriguez@atheros.com>
 | 
			
		|||
M:	Bob Copeland <me@bobcopeland.com>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
L:	ath5k-devel@lists.ath5k.org
 | 
			
		||||
W:	http://wireless.kernel.org/en/users/Drivers/ath5k
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	drivers/net/wireless/ath/ath5k/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -887,6 +920,7 @@ M:	Vasanthakumar Thiagarajan <vasanth@atheros.com>
 | 
			
		|||
M:	Senthil Balasubramanian <senthilkumar@atheros.com>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
L:	ath9k-devel@lists.ath9k.org
 | 
			
		||||
W:	http://wireless.kernel.org/en/users/Drivers/ath9k
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/net/wireless/ath/ath9k/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1494,7 +1528,7 @@ F:	drivers/net/cxgb3/
 | 
			
		|||
 | 
			
		||||
CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
 | 
			
		||||
M:	Steve Wise <swise@chelsio.com>
 | 
			
		||||
L:	general@lists.openfabrics.org
 | 
			
		||||
L:	linux-rdma@vger.kernel.org
 | 
			
		||||
W:	http://www.openfabrics.org
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/infiniband/hw/cxgb3/
 | 
			
		||||
| 
						 | 
				
			
			@ -1868,7 +1902,7 @@ F:	fs/efs/
 | 
			
		|||
EHCA (IBM GX bus InfiniBand adapter) DRIVER
 | 
			
		||||
M:	Hoang-Nam Nguyen <hnguyen@de.ibm.com>
 | 
			
		||||
M:	Christoph Raisch <raisch@de.ibm.com>
 | 
			
		||||
L:	general@lists.openfabrics.org
 | 
			
		||||
L:	linux-rdma@vger.kernel.org
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/infiniband/hw/ehca/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2552,7 +2586,7 @@ INFINIBAND SUBSYSTEM
 | 
			
		|||
M:	Roland Dreier <rolandd@cisco.com>
 | 
			
		||||
M:	Sean Hefty <sean.hefty@intel.com>
 | 
			
		||||
M:	Hal Rosenstock <hal.rosenstock@gmail.com>
 | 
			
		||||
L:	general@lists.openfabrics.org (moderated for non-subscribers)
 | 
			
		||||
L:	linux-rdma@vger.kernel.org
 | 
			
		||||
W:	http://www.openib.org/
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git
 | 
			
		||||
S:	Supported
 | 
			
		||||
| 
						 | 
				
			
			@ -2660,25 +2694,21 @@ F:	drivers/net/ixgbe/
 | 
			
		|||
 | 
			
		||||
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
 | 
			
		||||
M:	Zhu Yi <yi.zhu@intel.com>
 | 
			
		||||
M:	James Ketrenos <jketreno@linux.intel.com>
 | 
			
		||||
M:	Reinette Chatre <reinette.chatre@intel.com>
 | 
			
		||||
M:	Intel Linux Wireless <ilw@linux.intel.com>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
L:	ipw2100-devel@lists.sourceforge.net
 | 
			
		||||
W:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
 | 
			
		||||
W:	http://ipw2100.sourceforge.net
 | 
			
		||||
S:	Supported
 | 
			
		||||
S:	Odd Fixes
 | 
			
		||||
F:	Documentation/networking/README.ipw2100
 | 
			
		||||
F:	drivers/net/wireless/ipw2x00/ipw2100.*
 | 
			
		||||
 | 
			
		||||
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
 | 
			
		||||
M:	Zhu Yi <yi.zhu@intel.com>
 | 
			
		||||
M:	James Ketrenos <jketreno@linux.intel.com>
 | 
			
		||||
M:	Reinette Chatre <reinette.chatre@intel.com>
 | 
			
		||||
M:	Intel Linux Wireless <ilw@linux.intel.com>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
L:	ipw2100-devel@lists.sourceforge.net
 | 
			
		||||
W:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
 | 
			
		||||
W:	http://ipw2200.sourceforge.net
 | 
			
		||||
S:	Supported
 | 
			
		||||
S:	Odd Fixes
 | 
			
		||||
F:	Documentation/networking/README.ipw2200
 | 
			
		||||
F:	drivers/net/wireless/ipw2x00/ipw2200.*
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2695,8 +2725,8 @@ F:	include/linux/wimax/i2400m.h
 | 
			
		|||
INTEL WIRELESS WIFI LINK (iwlwifi)
 | 
			
		||||
M:	Zhu Yi <yi.zhu@intel.com>
 | 
			
		||||
M:	Reinette Chatre <reinette.chatre@intel.com>
 | 
			
		||||
M:	Intel Linux Wireless <ilw@linux.intel.com>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
L:	ipw3945-devel@lists.sourceforge.net
 | 
			
		||||
W:	http://intellinuxwireless.org
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
 | 
			
		||||
S:	Supported
 | 
			
		||||
| 
						 | 
				
			
			@ -2729,7 +2759,7 @@ F:	drivers/net/ipg.c
 | 
			
		|||
 | 
			
		||||
IPATH DRIVER
 | 
			
		||||
M:	Ralph Campbell <infinipath@qlogic.com>
 | 
			
		||||
L:	general@lists.openfabrics.org
 | 
			
		||||
L:	linux-rdma@vger.kernel.org
 | 
			
		||||
T:	git git://git.qlogic.com/ipath-linux-2.6
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/infiniband/hw/ipath/
 | 
			
		||||
| 
						 | 
				
			
			@ -2928,6 +2958,7 @@ F:	include/linux/sunrpc/
 | 
			
		|||
 | 
			
		||||
KERNEL VIRTUAL MACHINE (KVM)
 | 
			
		||||
M:	Avi Kivity <avi@redhat.com>
 | 
			
		||||
M:	Marcelo Tosatti <mtosatti@redhat.com>
 | 
			
		||||
L:	kvm@vger.kernel.org
 | 
			
		||||
W:	http://kvm.qumranet.com
 | 
			
		||||
S:	Supported
 | 
			
		||||
| 
						 | 
				
			
			@ -3279,8 +3310,14 @@ S:	Supported
 | 
			
		|||
F:	drivers/net/mv643xx_eth.*
 | 
			
		||||
F:	include/linux/mv643xx.h
 | 
			
		||||
 | 
			
		||||
MARVELL MWL8K WIRELESS DRIVER
 | 
			
		||||
M:	Lennert Buytenhek <buytenh@marvell.com>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/net/wireless/mwl8k.c
 | 
			
		||||
 | 
			
		||||
MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
 | 
			
		||||
M:	Nicolas Pitre <nico@cam.org>
 | 
			
		||||
M:	Nicolas Pitre <nico@fluxnic.net>
 | 
			
		||||
S:	Maintained
 | 
			
		||||
 | 
			
		||||
MARVELL YUKON / SYSKONNECT DRIVER
 | 
			
		||||
| 
						 | 
				
			
			@ -3485,7 +3522,7 @@ F:	drivers/scsi/NCR_D700.*
 | 
			
		|||
NETEFFECT IWARP RNIC DRIVER (IW_NES)
 | 
			
		||||
M:	Faisal Latif <faisal.latif@intel.com>
 | 
			
		||||
M:	Chien Tung <chien.tin.tung@intel.com>
 | 
			
		||||
L:	general@lists.openfabrics.org
 | 
			
		||||
L:	linux-rdma@vger.kernel.org
 | 
			
		||||
W:	http://www.neteffect.com
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/infiniband/hw/nes/
 | 
			
		||||
| 
						 | 
				
			
			@ -3591,9 +3628,12 @@ M:	"John W. Linville" <linville@tuxdriver.com>
 | 
			
		|||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	net/mac80211/
 | 
			
		||||
F:	net/rfkill/
 | 
			
		||||
F:	net/wireless/
 | 
			
		||||
F:	include/net/ieee80211*
 | 
			
		||||
F:	include/linux/wireless.h
 | 
			
		||||
F:	drivers/net/wireless/
 | 
			
		||||
 | 
			
		||||
NETWORKING DRIVERS
 | 
			
		||||
L:	netdev@vger.kernel.org
 | 
			
		||||
| 
						 | 
				
			
			@ -3969,6 +4009,14 @@ S:	Maintained
 | 
			
		|||
F:	drivers/block/pktcdvd.c
 | 
			
		||||
F:	include/linux/pktcdvd.h
 | 
			
		||||
 | 
			
		||||
PMC SIERRA MaxRAID DRIVER
 | 
			
		||||
P:	Anil Ravindranath
 | 
			
		||||
M:	anil_ravindranath@pmc-sierra.com
 | 
			
		||||
L:	linux-scsi@vger.kernel.org
 | 
			
		||||
W:	http://www.pmc-sierra.com/
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/scsi/pmcraid.*
 | 
			
		||||
 | 
			
		||||
POSIX CLOCKS and TIMERS
 | 
			
		||||
M:	Thomas Gleixner <tglx@linutronix.de>
 | 
			
		||||
S:	Supported
 | 
			
		||||
| 
						 | 
				
			
			@ -4299,7 +4347,7 @@ 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/rtl818*
 | 
			
		||||
F:	drivers/net/wireless/rtl818x/rtl8180*
 | 
			
		||||
 | 
			
		||||
RTL8187 WIRELESS DRIVER
 | 
			
		||||
M:	Herton Ronaldo Krzesinski <herton@mandriva.com.br>
 | 
			
		||||
| 
						 | 
				
			
			@ -4407,7 +4455,7 @@ F:	drivers/scsi/sg.c
 | 
			
		|||
F:	include/scsi/sg.h
 | 
			
		||||
 | 
			
		||||
SCSI SUBSYSTEM
 | 
			
		||||
M:	"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
 | 
			
		||||
M:	"James E.J. Bottomley" <James.Bottomley@suse.de>
 | 
			
		||||
L:	linux-scsi@vger.kernel.org
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
 | 
			
		||||
| 
						 | 
				
			
			@ -4526,9 +4574,10 @@ S:	Supported
 | 
			
		|||
F:	drivers/net/benet/
 | 
			
		||||
 | 
			
		||||
SFC NETWORK DRIVER
 | 
			
		||||
P:	Steve Hodgson
 | 
			
		||||
P:	Ben Hutchings
 | 
			
		||||
M:	Robert Stonehouse <linux-net-drivers@solarflare.com>
 | 
			
		||||
M:	Solarflare linux maintainers <linux-net-drivers@solarflare.com>
 | 
			
		||||
M:	Steve Hodgson <shodgson@solarflare.com>
 | 
			
		||||
M:	Ben Hutchings <bhutchings@solarflare.com>
 | 
			
		||||
L:	netdev@vger.kernel.org
 | 
			
		||||
S:	Supported
 | 
			
		||||
F:	drivers/net/sfc/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4640,7 +4689,7 @@ F:	include/linux/sl?b*.h
 | 
			
		|||
F:	mm/sl?b.c
 | 
			
		||||
 | 
			
		||||
SMC91x ETHERNET DRIVER
 | 
			
		||||
M:	Nicolas Pitre <nico@cam.org>
 | 
			
		||||
M:	Nicolas Pitre <nico@fluxnic.net>
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	drivers/net/smc91x.*
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5578,6 +5627,24 @@ M:	Miloslav Trmac <mitr@volny.cz>
 | 
			
		|||
S:	Maintained
 | 
			
		||||
F:	drivers/input/misc/wistron_btns.c
 | 
			
		||||
 | 
			
		||||
WL1251 WIRELESS DRIVER
 | 
			
		||||
P:	Kalle Valo
 | 
			
		||||
M:	kalle.valo@nokia.com
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
W:	http://wireless.kernel.org
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	drivers/net/wireless/wl12xx/*
 | 
			
		||||
X:	drivers/net/wireless/wl12xx/wl1271*
 | 
			
		||||
 | 
			
		||||
WL1271 WIRELESS DRIVER
 | 
			
		||||
M:	Luciano Coelho <luciano.coelho@nokia.com>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
W:	http://wireless.kernel.org
 | 
			
		||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
 | 
			
		||||
S:	Maintained
 | 
			
		||||
F:	drivers/net/wireless/wl12xx/wl1271*
 | 
			
		||||
 | 
			
		||||
WL3501 WIRELESS PCMCIA CARD DRIVER
 | 
			
		||||
M:	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
 | 
			
		||||
L:	linux-wireless@vger.kernel.org
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
VERSION = 2
 | 
			
		||||
PATCHLEVEL = 6
 | 
			
		||||
SUBLEVEL = 31
 | 
			
		||||
EXTRAVERSION = -rc9
 | 
			
		||||
EXTRAVERSION =
 | 
			
		||||
NAME = Man-Eating Seals of Antiquity
 | 
			
		||||
 | 
			
		||||
# *DOCUMENTATION*
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +325,7 @@ CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
 | 
			
		|||
MODFLAGS	= -DMODULE
 | 
			
		||||
CFLAGS_MODULE   = $(MODFLAGS)
 | 
			
		||||
AFLAGS_MODULE   = $(MODFLAGS)
 | 
			
		||||
LDFLAGS_MODULE  =
 | 
			
		||||
LDFLAGS_MODULE  = -T $(srctree)/scripts/module-common.lds
 | 
			
		||||
CFLAGS_KERNEL	=
 | 
			
		||||
AFLAGS_KERNEL	=
 | 
			
		||||
CFLAGS_GCOV	= -fprofile-arcs -ftest-coverage
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								arch/Kconfig
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								arch/Kconfig
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -30,6 +30,18 @@ config OPROFILE_IBS
 | 
			
		|||
 | 
			
		||||
	  If unsure, say N.
 | 
			
		||||
 | 
			
		||||
config OPROFILE_EVENT_MULTIPLEX
 | 
			
		||||
	bool "OProfile multiplexing support (EXPERIMENTAL)"
 | 
			
		||||
	default n
 | 
			
		||||
	depends on OPROFILE && X86
 | 
			
		||||
	help
 | 
			
		||||
	  The number of hardware counters is limited. The multiplexing
 | 
			
		||||
	  feature enables OProfile to gather more events than counters
 | 
			
		||||
	  are provided by the hardware. This is realized by switching
 | 
			
		||||
	  between events at an user specified time interval.
 | 
			
		||||
 | 
			
		||||
	  If unsure, say N.
 | 
			
		||||
 | 
			
		||||
config HAVE_OPROFILE
 | 
			
		||||
	bool
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,10 +9,6 @@
 | 
			
		|||
#define unmap_page_from_agp(page) 
 | 
			
		||||
#define flush_agp_cache() mb()
 | 
			
		||||
 | 
			
		||||
/* Convert a physical address to an address suitable for the GART. */
 | 
			
		||||
#define phys_to_gart(x) (x)
 | 
			
		||||
#define gart_to_phys(x) (x)
 | 
			
		||||
 | 
			
		||||
/* GATT allocation. Returns/accepts GATT kernel virtual address. */
 | 
			
		||||
#define alloc_gatt_pages(order)		\
 | 
			
		||||
	((char *)__get_free_pages(GFP_KERNEL, (order)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,102 +1,18 @@
 | 
			
		|||
#ifndef __ALPHA_PERCPU_H
 | 
			
		||||
#define __ALPHA_PERCPU_H
 | 
			
		||||
 | 
			
		||||
#include <linux/compiler.h>
 | 
			
		||||
#include <linux/threads.h>
 | 
			
		||||
#include <linux/percpu-defs.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Determine the real variable name from the name visible in the
 | 
			
		||||
 * kernel sources.
 | 
			
		||||
 */
 | 
			
		||||
#define per_cpu_var(var) per_cpu__##var
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_SMP
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * per_cpu_offset() is the offset that has to be added to a
 | 
			
		||||
 * percpu variable to get to the instance for a certain processor.
 | 
			
		||||
 */
 | 
			
		||||
extern unsigned long __per_cpu_offset[NR_CPUS];
 | 
			
		||||
 | 
			
		||||
#define per_cpu_offset(x) (__per_cpu_offset[x])
 | 
			
		||||
 | 
			
		||||
#define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
 | 
			
		||||
#ifdef CONFIG_DEBUG_PREEMPT
 | 
			
		||||
#define my_cpu_offset per_cpu_offset(smp_processor_id())
 | 
			
		||||
#else
 | 
			
		||||
#define my_cpu_offset __my_cpu_offset
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef MODULE
 | 
			
		||||
#define SHIFT_PERCPU_PTR(var, offset) RELOC_HIDE(&per_cpu_var(var), (offset))
 | 
			
		||||
#define PER_CPU_DEF_ATTRIBUTES
 | 
			
		||||
#else
 | 
			
		||||
/*
 | 
			
		||||
 * To calculate addresses of locally defined variables, GCC uses 32-bit
 | 
			
		||||
 * displacement from the GP. Which doesn't work for per cpu variables in
 | 
			
		||||
 * modules, as an offset to the kernel per cpu area is way above 4G.
 | 
			
		||||
 * To calculate addresses of locally defined variables, GCC uses
 | 
			
		||||
 * 32-bit displacement from the GP. Which doesn't work for per cpu
 | 
			
		||||
 * variables in modules, as an offset to the kernel per cpu area is
 | 
			
		||||
 * way above 4G.
 | 
			
		||||
 *
 | 
			
		||||
 * This forces allocation of a GOT entry for per cpu variable using
 | 
			
		||||
 * ldq instruction with a 'literal' relocation.
 | 
			
		||||
 * Always use weak definitions for percpu variables in modules.
 | 
			
		||||
 */
 | 
			
		||||
#define SHIFT_PERCPU_PTR(var, offset) ({		\
 | 
			
		||||
	extern int simple_identifier_##var(void);	\
 | 
			
		||||
	unsigned long __ptr, tmp_gp;			\
 | 
			
		||||
	asm (  "br	%1, 1f		  	      \n\
 | 
			
		||||
	1:	ldgp	%1, 0(%1)	    	      \n\
 | 
			
		||||
		ldq %0, per_cpu__" #var"(%1)\t!literal"		\
 | 
			
		||||
		: "=&r"(__ptr), "=&r"(tmp_gp));		\
 | 
			
		||||
	(typeof(&per_cpu_var(var)))(__ptr + (offset)); })
 | 
			
		||||
 | 
			
		||||
#define PER_CPU_DEF_ATTRIBUTES	__used
 | 
			
		||||
 | 
			
		||||
#endif /* MODULE */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * A percpu variable may point to a discarded regions. The following are
 | 
			
		||||
 * established ways to produce a usable pointer from the percpu variable
 | 
			
		||||
 * offset.
 | 
			
		||||
 */
 | 
			
		||||
#define per_cpu(var, cpu) \
 | 
			
		||||
	(*SHIFT_PERCPU_PTR(var, per_cpu_offset(cpu)))
 | 
			
		||||
#define __get_cpu_var(var) \
 | 
			
		||||
	(*SHIFT_PERCPU_PTR(var, my_cpu_offset))
 | 
			
		||||
#define __raw_get_cpu_var(var) \
 | 
			
		||||
	(*SHIFT_PERCPU_PTR(var, __my_cpu_offset))
 | 
			
		||||
 | 
			
		||||
#else /* ! SMP */
 | 
			
		||||
 | 
			
		||||
#define per_cpu(var, cpu)		(*((void)(cpu), &per_cpu_var(var)))
 | 
			
		||||
#define __get_cpu_var(var)		per_cpu_var(var)
 | 
			
		||||
#define __raw_get_cpu_var(var)		per_cpu_var(var)
 | 
			
		||||
 | 
			
		||||
#define PER_CPU_DEF_ATTRIBUTES
 | 
			
		||||
 | 
			
		||||
#endif /* SMP */
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_SMP
 | 
			
		||||
#define PER_CPU_BASE_SECTION ".data.percpu"
 | 
			
		||||
#else
 | 
			
		||||
#define PER_CPU_BASE_SECTION ".data"
 | 
			
		||||
#if defined(MODULE) && defined(CONFIG_SMP)
 | 
			
		||||
#define ARCH_NEEDS_WEAK_PER_CPU
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_SMP
 | 
			
		||||
 | 
			
		||||
#ifdef MODULE
 | 
			
		||||
#define PER_CPU_SHARED_ALIGNED_SECTION ""
 | 
			
		||||
#else
 | 
			
		||||
#define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned"
 | 
			
		||||
#endif
 | 
			
		||||
#define PER_CPU_FIRST_SECTION ".first"
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define PER_CPU_SHARED_ALIGNED_SECTION ""
 | 
			
		||||
#define PER_CPU_FIRST_SECTION ""
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define PER_CPU_ATTRIBUTES
 | 
			
		||||
#include <asm-generic/percpu.h>
 | 
			
		||||
 | 
			
		||||
#endif /* __ALPHA_PERCPU_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,8 @@
 | 
			
		|||
#define	SO_RCVTIMEO	0x1012
 | 
			
		||||
#define	SO_SNDTIMEO	0x1013
 | 
			
		||||
#define SO_ACCEPTCONN	0x1014
 | 
			
		||||
#define SO_PROTOCOL	0x1028
 | 
			
		||||
#define SO_DOMAIN	0x1029
 | 
			
		||||
 | 
			
		||||
/* linux-specific, might as well be the same as on i386 */
 | 
			
		||||
#define SO_NO_CHECK	11
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,6 +75,7 @@ register struct thread_info *__current_thread_info __asm__("$8");
 | 
			
		|||
#define TIF_UAC_SIGBUS		7
 | 
			
		||||
#define TIF_MEMDIE		8
 | 
			
		||||
#define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal */
 | 
			
		||||
#define TIF_NOTIFY_RESUME	10	/* callback before returning to user */
 | 
			
		||||
#define TIF_FREEZE		16	/* is freezing for suspend */
 | 
			
		||||
 | 
			
		||||
#define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
 | 
			
		||||
| 
						 | 
				
			
			@ -82,10 +83,12 @@ register struct thread_info *__current_thread_info __asm__("$8");
 | 
			
		|||
#define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 | 
			
		||||
#define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
 | 
			
		||||
#define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
 | 
			
		||||
#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 | 
			
		||||
#define _TIF_FREEZE		(1<<TIF_FREEZE)
 | 
			
		||||
 | 
			
		||||
/* Work to do on interrupt/exception return.  */
 | 
			
		||||
#define _TIF_WORK_MASK		(_TIF_SIGPENDING | _TIF_NEED_RESCHED)
 | 
			
		||||
#define _TIF_WORK_MASK		(_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
 | 
			
		||||
				 _TIF_NOTIFY_RESUME)
 | 
			
		||||
 | 
			
		||||
/* Work to do on any return to userspace.  */
 | 
			
		||||
#define _TIF_ALLWORK_MASK	(_TIF_WORK_MASK		\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
#define _ALPHA_TLBFLUSH_H
 | 
			
		||||
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <asm/compiler.h>
 | 
			
		||||
#include <asm/pgalloc.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@
 | 
			
		|||
#include <linux/binfmts.h>
 | 
			
		||||
#include <linux/bitops.h>
 | 
			
		||||
#include <linux/syscalls.h>
 | 
			
		||||
#include <linux/tracehook.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/uaccess.h>
 | 
			
		||||
#include <asm/sigcontext.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -683,4 +684,11 @@ do_notify_resume(struct pt_regs *regs, struct switch_stack *sw,
 | 
			
		|||
{
 | 
			
		||||
	if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
 | 
			
		||||
		do_signal(regs, sw, r0, r19);
 | 
			
		||||
 | 
			
		||||
	if (thread_info_flags & _TIF_NOTIFY_RESUME) {
 | 
			
		||||
		clear_thread_flag(TIF_NOTIFY_RESUME);
 | 
			
		||||
		tracehook_notify_resume(regs);
 | 
			
		||||
		if (current->replacement_session_keyring)
 | 
			
		||||
			key_replace_session_keyring();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,13 +134,6 @@ SECTIONS
 | 
			
		|||
	__bss_stop = .;
 | 
			
		||||
	_end = .;
 | 
			
		||||
 | 
			
		||||
	/* Sections to be discarded */
 | 
			
		||||
	/DISCARD/ : {
 | 
			
		||||
		EXIT_TEXT
 | 
			
		||||
		EXIT_DATA
 | 
			
		||||
		*(.exitcall.exit)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.mdebug 0 : {
 | 
			
		||||
		*(.mdebug)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -150,4 +143,6 @@ SECTIONS
 | 
			
		|||
 | 
			
		||||
	STABS_DEBUG
 | 
			
		||||
	DWARF_DEBUG
 | 
			
		||||
 | 
			
		||||
	DISCARDS
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										264
									
								
								arch/arm/Kconfig
									
										
									
									
									
								
							
							
						
						
									
										264
									
								
								arch/arm/Kconfig
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -46,10 +46,6 @@ config GENERIC_CLOCKEVENTS_BROADCAST
 | 
			
		|||
	depends on GENERIC_CLOCKEVENTS
 | 
			
		||||
	default y if SMP && !LOCAL_TIMERS
 | 
			
		||||
 | 
			
		||||
config MMU
 | 
			
		||||
	bool
 | 
			
		||||
	default y
 | 
			
		||||
 | 
			
		||||
config NO_IOPORT
 | 
			
		||||
	bool
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -126,6 +122,13 @@ config ARCH_HAS_ILOG2_U32
 | 
			
		|||
config ARCH_HAS_ILOG2_U64
 | 
			
		||||
	bool
 | 
			
		||||
 | 
			
		||||
config ARCH_HAS_CPUFREQ
 | 
			
		||||
	bool
 | 
			
		||||
	help
 | 
			
		||||
	  Internal node to signify that the ARCH has CPUFREQ support
 | 
			
		||||
	  and that the relevant menu configurations are displayed for
 | 
			
		||||
	  it.
 | 
			
		||||
 | 
			
		||||
config GENERIC_HWEIGHT
 | 
			
		||||
	bool
 | 
			
		||||
	default y
 | 
			
		||||
| 
						 | 
				
			
			@ -188,6 +191,13 @@ source "kernel/Kconfig.freezer"
 | 
			
		|||
 | 
			
		||||
menu "System Type"
 | 
			
		||||
 | 
			
		||||
config MMU
 | 
			
		||||
	bool "MMU-based Paged Memory Management Support"
 | 
			
		||||
	default y
 | 
			
		||||
	help
 | 
			
		||||
	  Select if you want MMU-based virtualised addressing space
 | 
			
		||||
	  support by paged memory management. If unsure, say 'Y'.
 | 
			
		||||
 | 
			
		||||
choice
 | 
			
		||||
	prompt "ARM system type"
 | 
			
		||||
	default ARCH_VERSATILE
 | 
			
		||||
| 
						 | 
				
			
			@ -203,6 +213,7 @@ config ARCH_AAEC2000
 | 
			
		|||
config ARCH_INTEGRATOR
 | 
			
		||||
	bool "ARM Ltd. Integrator family"
 | 
			
		||||
	select ARM_AMBA
 | 
			
		||||
	select ARCH_HAS_CPUFREQ
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	select COMMON_CLKDEV
 | 
			
		||||
	select ICST525
 | 
			
		||||
| 
						 | 
				
			
			@ -217,6 +228,7 @@ config ARCH_REALVIEW
 | 
			
		|||
	select ICST307
 | 
			
		||||
	select GENERIC_TIME
 | 
			
		||||
	select GENERIC_CLOCKEVENTS
 | 
			
		||||
	select ARCH_WANT_OPTIONAL_GPIOLIB
 | 
			
		||||
	help
 | 
			
		||||
	  This enables support for ARM Ltd RealView boards.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -229,6 +241,7 @@ config ARCH_VERSATILE
 | 
			
		|||
	select ICST307
 | 
			
		||||
	select GENERIC_TIME
 | 
			
		||||
	select GENERIC_CLOCKEVENTS
 | 
			
		||||
	select ARCH_WANT_OPTIONAL_GPIOLIB
 | 
			
		||||
	help
 | 
			
		||||
	  This enables support for ARM Ltd Versatile board.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -327,6 +340,20 @@ config ARCH_H720X
 | 
			
		|||
	help
 | 
			
		||||
	  This enables support for systems based on the Hynix HMS720x
 | 
			
		||||
 | 
			
		||||
config ARCH_NOMADIK
 | 
			
		||||
	bool "STMicroelectronics Nomadik"
 | 
			
		||||
	select ARM_AMBA
 | 
			
		||||
	select ARM_VIC
 | 
			
		||||
	select CPU_ARM926T
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	select COMMON_CLKDEV
 | 
			
		||||
	select GENERIC_TIME
 | 
			
		||||
	select GENERIC_CLOCKEVENTS
 | 
			
		||||
	select GENERIC_GPIO
 | 
			
		||||
	select ARCH_REQUIRE_GPIOLIB
 | 
			
		||||
	help
 | 
			
		||||
	  Support for the Nomadik platform by ST-Ericsson
 | 
			
		||||
 | 
			
		||||
config ARCH_IOP13XX
 | 
			
		||||
	bool "IOP13xx-based"
 | 
			
		||||
	depends on MMU
 | 
			
		||||
| 
						 | 
				
			
			@ -493,10 +520,18 @@ config ARCH_W90X900
 | 
			
		|||
	select CPU_ARM926T
 | 
			
		||||
	select ARCH_REQUIRE_GPIOLIB
 | 
			
		||||
	select GENERIC_GPIO
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	select COMMON_CLKDEV
 | 
			
		||||
	select GENERIC_TIME
 | 
			
		||||
	select GENERIC_CLOCKEVENTS
 | 
			
		||||
	help
 | 
			
		||||
		Support for Nuvoton (Winbond logic dept.) ARM9 processor,You
 | 
			
		||||
		can login www.mcuos.com or www.nuvoton.com to know more.
 | 
			
		||||
	  Support for Nuvoton (Winbond logic dept.) ARM9 processor,
 | 
			
		||||
	  At present, the w90x900 has been renamed nuc900, regarding
 | 
			
		||||
	  the ARM series product line, you can login the following
 | 
			
		||||
	  link address to know more.
 | 
			
		||||
 | 
			
		||||
	  <http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/
 | 
			
		||||
		ConsumerElectronicsIC/ARMMicrocontroller/ARMMicrocontroller>
 | 
			
		||||
 | 
			
		||||
config ARCH_PNX4008
 | 
			
		||||
	bool "Philips Nexperia PNX4008 Mobile"
 | 
			
		||||
| 
						 | 
				
			
			@ -509,6 +544,7 @@ config ARCH_PXA
 | 
			
		|||
	bool "PXA2xx/PXA3xx-based"
 | 
			
		||||
	depends on MMU
 | 
			
		||||
	select ARCH_MTD_XIP
 | 
			
		||||
	select ARCH_HAS_CPUFREQ
 | 
			
		||||
	select GENERIC_GPIO
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	select COMMON_CLKDEV
 | 
			
		||||
| 
						 | 
				
			
			@ -551,6 +587,7 @@ config ARCH_SA1100
 | 
			
		|||
	select ISA
 | 
			
		||||
	select ARCH_SPARSEMEM_ENABLE
 | 
			
		||||
	select ARCH_MTD_XIP
 | 
			
		||||
	select ARCH_HAS_CPUFREQ
 | 
			
		||||
	select GENERIC_GPIO
 | 
			
		||||
	select GENERIC_TIME
 | 
			
		||||
	select GENERIC_CLOCKEVENTS
 | 
			
		||||
| 
						 | 
				
			
			@ -563,6 +600,7 @@ config ARCH_SA1100
 | 
			
		|||
config ARCH_S3C2410
 | 
			
		||||
	bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443"
 | 
			
		||||
	select GENERIC_GPIO
 | 
			
		||||
	select ARCH_HAS_CPUFREQ
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	help
 | 
			
		||||
	  Samsung S3C2410X CPU based systems, such as the Simtec Electronics
 | 
			
		||||
| 
						 | 
				
			
			@ -573,9 +611,18 @@ config ARCH_S3C64XX
 | 
			
		|||
	bool "Samsung S3C64XX"
 | 
			
		||||
	select GENERIC_GPIO
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	select ARCH_HAS_CPUFREQ
 | 
			
		||||
	help
 | 
			
		||||
	  Samsung S3C64XX series based systems
 | 
			
		||||
 | 
			
		||||
config ARCH_S5PC1XX
 | 
			
		||||
	bool "Samsung S5PC1XX"
 | 
			
		||||
	select GENERIC_GPIO
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	select CPU_V7
 | 
			
		||||
	help
 | 
			
		||||
	  Samsung S5PC1XX series based systems
 | 
			
		||||
 | 
			
		||||
config ARCH_SHARK
 | 
			
		||||
	bool "Shark"
 | 
			
		||||
	select CPU_SA110
 | 
			
		||||
| 
						 | 
				
			
			@ -632,11 +679,24 @@ config ARCH_OMAP
 | 
			
		|||
	select GENERIC_GPIO
 | 
			
		||||
	select HAVE_CLK
 | 
			
		||||
	select ARCH_REQUIRE_GPIOLIB
 | 
			
		||||
	select ARCH_HAS_CPUFREQ
 | 
			
		||||
	select GENERIC_TIME
 | 
			
		||||
	select GENERIC_CLOCKEVENTS
 | 
			
		||||
	help
 | 
			
		||||
	  Support for TI's OMAP platform (OMAP1 and OMAP2).
 | 
			
		||||
 | 
			
		||||
config ARCH_BCMRING
 | 
			
		||||
	bool "Broadcom BCMRING"
 | 
			
		||||
	depends on MMU
 | 
			
		||||
	select CPU_V6
 | 
			
		||||
	select ARM_AMBA
 | 
			
		||||
	select COMMON_CLKDEV
 | 
			
		||||
	select GENERIC_TIME
 | 
			
		||||
	select GENERIC_CLOCKEVENTS
 | 
			
		||||
	select ARCH_WANT_OPTIONAL_GPIOLIB
 | 
			
		||||
	help
 | 
			
		||||
	  Support for Broadcom's BCMRing platform.
 | 
			
		||||
 | 
			
		||||
endchoice
 | 
			
		||||
 | 
			
		||||
source "arch/arm/mach-clps711x/Kconfig"
 | 
			
		||||
| 
						 | 
				
			
			@ -685,6 +745,7 @@ source "arch/arm/mach-kirkwood/Kconfig"
 | 
			
		|||
source "arch/arm/plat-s3c24xx/Kconfig"
 | 
			
		||||
source "arch/arm/plat-s3c64xx/Kconfig"
 | 
			
		||||
source "arch/arm/plat-s3c/Kconfig"
 | 
			
		||||
source "arch/arm/plat-s5pc1xx/Kconfig"
 | 
			
		||||
 | 
			
		||||
if ARCH_S3C2410
 | 
			
		||||
source "arch/arm/mach-s3c2400/Kconfig"
 | 
			
		||||
| 
						 | 
				
			
			@ -702,6 +763,10 @@ endif
 | 
			
		|||
 | 
			
		||||
source "arch/arm/plat-stmp3xxx/Kconfig"
 | 
			
		||||
 | 
			
		||||
if ARCH_S5PC1XX
 | 
			
		||||
source "arch/arm/mach-s5pc100/Kconfig"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
source "arch/arm/mach-lh7a40x/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "arch/arm/mach-h720x/Kconfig"
 | 
			
		||||
| 
						 | 
				
			
			@ -716,6 +781,8 @@ source "arch/arm/mach-at91/Kconfig"
 | 
			
		|||
 | 
			
		||||
source "arch/arm/plat-mxc/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "arch/arm/mach-nomadik/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "arch/arm/mach-netx/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "arch/arm/mach-ns9xxx/Kconfig"
 | 
			
		||||
| 
						 | 
				
			
			@ -730,6 +797,8 @@ source "arch/arm/mach-u300/Kconfig"
 | 
			
		|||
 | 
			
		||||
source "arch/arm/mach-w90x900/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "arch/arm/mach-bcmring/Kconfig"
 | 
			
		||||
 | 
			
		||||
# Definitions to make life easier
 | 
			
		||||
config ARCH_ACORN
 | 
			
		||||
	bool
 | 
			
		||||
| 
						 | 
				
			
			@ -962,18 +1031,7 @@ config LOCAL_TIMERS
 | 
			
		|||
	  accounting to be spread across the timer interval, preventing a
 | 
			
		||||
	  "thundering herd" at every timer tick.
 | 
			
		||||
 | 
			
		||||
config PREEMPT
 | 
			
		||||
	bool "Preemptible Kernel (EXPERIMENTAL)"
 | 
			
		||||
	depends on EXPERIMENTAL
 | 
			
		||||
	help
 | 
			
		||||
	  This option reduces the latency of the kernel when reacting to
 | 
			
		||||
	  real-time or interactive events by allowing a low priority process to
 | 
			
		||||
	  be preempted even if it is in kernel mode executing a system call.
 | 
			
		||||
	  This allows applications to run more reliably even when the system is
 | 
			
		||||
	  under load.
 | 
			
		||||
 | 
			
		||||
	  Say Y here if you are building a kernel for a desktop, embedded
 | 
			
		||||
	  or real-time system.  Say N if you are unsure.
 | 
			
		||||
source kernel/Kconfig.preempt
 | 
			
		||||
 | 
			
		||||
config HZ
 | 
			
		||||
	int
 | 
			
		||||
| 
						 | 
				
			
			@ -983,6 +1041,21 @@ config HZ
 | 
			
		|||
	default AT91_TIMER_HZ if ARCH_AT91
 | 
			
		||||
	default 100
 | 
			
		||||
 | 
			
		||||
config THUMB2_KERNEL
 | 
			
		||||
	bool "Compile the kernel in Thumb-2 mode"
 | 
			
		||||
	depends on CPU_V7 && EXPERIMENTAL
 | 
			
		||||
	select AEABI
 | 
			
		||||
	select ARM_ASM_UNIFIED
 | 
			
		||||
	help
 | 
			
		||||
	  By enabling this option, the kernel will be compiled in
 | 
			
		||||
	  Thumb-2 mode. A compiler/assembler that understand the unified
 | 
			
		||||
	  ARM-Thumb syntax is needed.
 | 
			
		||||
 | 
			
		||||
	  If unsure, say N.
 | 
			
		||||
 | 
			
		||||
config ARM_ASM_UNIFIED
 | 
			
		||||
	bool
 | 
			
		||||
 | 
			
		||||
config AEABI
 | 
			
		||||
	bool "Use the ARM EABI to compile the kernel"
 | 
			
		||||
	help
 | 
			
		||||
| 
						 | 
				
			
			@ -1054,6 +1127,11 @@ config HIGHMEM
 | 
			
		|||
 | 
			
		||||
	  If unsure, say n.
 | 
			
		||||
 | 
			
		||||
config HIGHPTE
 | 
			
		||||
	bool "Allocate 2nd-level pagetables from highmem"
 | 
			
		||||
	depends on HIGHMEM
 | 
			
		||||
	depends on !OUTER_CACHE
 | 
			
		||||
 | 
			
		||||
source "mm/Kconfig"
 | 
			
		||||
 | 
			
		||||
config LEDS
 | 
			
		||||
| 
						 | 
				
			
			@ -1241,7 +1319,7 @@ endmenu
 | 
			
		|||
 | 
			
		||||
menu "CPU Power Management"
 | 
			
		||||
 | 
			
		||||
if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA || ARCH_S3C64XX)
 | 
			
		||||
if ARCH_HAS_CPUFREQ
 | 
			
		||||
 | 
			
		||||
source "drivers/cpufreq/Kconfig"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1276,6 +1354,52 @@ config CPU_FREQ_S3C64XX
 | 
			
		|||
	bool "CPUfreq support for Samsung S3C64XX CPUs"
 | 
			
		||||
	depends on CPU_FREQ && CPU_S3C6410
 | 
			
		||||
 | 
			
		||||
config CPU_FREQ_S3C
 | 
			
		||||
	bool
 | 
			
		||||
	help
 | 
			
		||||
	  Internal configuration node for common cpufreq on Samsung SoC
 | 
			
		||||
 | 
			
		||||
config CPU_FREQ_S3C24XX
 | 
			
		||||
	bool "CPUfreq driver for Samsung S3C24XX series CPUs"
 | 
			
		||||
	depends on ARCH_S3C2410 && CPU_FREQ && EXPERIMENTAL
 | 
			
		||||
	select CPU_FREQ_S3C
 | 
			
		||||
	help
 | 
			
		||||
	  This enables the CPUfreq driver for the Samsung S3C24XX family
 | 
			
		||||
	  of CPUs.
 | 
			
		||||
 | 
			
		||||
	  For details, take a look at <file:Documentation/cpu-freq>.
 | 
			
		||||
 | 
			
		||||
	  If in doubt, say N.
 | 
			
		||||
 | 
			
		||||
config CPU_FREQ_S3C24XX_PLL
 | 
			
		||||
	bool "Support CPUfreq changing of PLL frequency"
 | 
			
		||||
	depends on CPU_FREQ_S3C24XX && EXPERIMENTAL
 | 
			
		||||
	help
 | 
			
		||||
	  Compile in support for changing the PLL frequency from the
 | 
			
		||||
	  S3C24XX series CPUfreq driver. The PLL takes time to settle
 | 
			
		||||
	  after a frequency change, so by default it is not enabled.
 | 
			
		||||
 | 
			
		||||
	  This also means that the PLL tables for the selected CPU(s) will
 | 
			
		||||
	  be built which may increase the size of the kernel image.
 | 
			
		||||
 | 
			
		||||
config CPU_FREQ_S3C24XX_DEBUG
 | 
			
		||||
	bool "Debug CPUfreq Samsung driver core"
 | 
			
		||||
	depends on CPU_FREQ_S3C24XX
 | 
			
		||||
	help
 | 
			
		||||
	  Enable s3c_freq_dbg for the Samsung S3C CPUfreq core
 | 
			
		||||
 | 
			
		||||
config CPU_FREQ_S3C24XX_IODEBUG
 | 
			
		||||
	bool "Debug CPUfreq Samsung driver IO timing"
 | 
			
		||||
	depends on CPU_FREQ_S3C24XX
 | 
			
		||||
	help
 | 
			
		||||
	  Enable s3c_freq_iodbg for the Samsung S3C CPUfreq core
 | 
			
		||||
 | 
			
		||||
config CPU_FREQ_S3C24XX_DEBUGFS
 | 
			
		||||
	bool "Export debugfs for CPUFreq"
 | 
			
		||||
	depends on CPU_FREQ_S3C24XX && DEBUG_FS
 | 
			
		||||
	help
 | 
			
		||||
	  Export status information via debugfs.
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
source "drivers/cpuidle/Kconfig"
 | 
			
		||||
| 
						 | 
				
			
			@ -1377,107 +1501,7 @@ endmenu
 | 
			
		|||
 | 
			
		||||
source "net/Kconfig"
 | 
			
		||||
 | 
			
		||||
menu "Device Drivers"
 | 
			
		||||
 | 
			
		||||
source "drivers/base/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/connector/Kconfig"
 | 
			
		||||
 | 
			
		||||
if ALIGNMENT_TRAP || !CPU_CP15_MMU
 | 
			
		||||
source "drivers/mtd/Kconfig"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
source "drivers/parport/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/pnp/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/block/Kconfig"
 | 
			
		||||
 | 
			
		||||
# misc before ide - BLK_DEV_SGIIOC4 depends on SGI_IOC4
 | 
			
		||||
 | 
			
		||||
source "drivers/misc/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/ide/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/scsi/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/ata/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/md/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/message/fusion/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/ieee1394/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/message/i2o/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/net/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/isdn/Kconfig"
 | 
			
		||||
 | 
			
		||||
# input before char - char/joystick depends on it. As does USB.
 | 
			
		||||
 | 
			
		||||
source "drivers/input/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/char/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/i2c/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/spi/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/gpio/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/w1/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/power/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/hwmon/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/thermal/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/watchdog/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/ssb/Kconfig"
 | 
			
		||||
 | 
			
		||||
#source "drivers/l3/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/mfd/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/media/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/video/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "sound/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/hid/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/usb/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/uwb/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/mmc/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/memstick/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/accessibility/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/leds/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/rtc/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/dma/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/dca/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/auxdisplay/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/regulator/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/uio/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/staging/Kconfig"
 | 
			
		||||
 | 
			
		||||
endmenu
 | 
			
		||||
source "drivers/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "fs/Kconfig"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ source "lib/Kconfig.debug"
 | 
			
		|||
# n, but then RMK will have to kill you ;).
 | 
			
		||||
config FRAME_POINTER
 | 
			
		||||
	bool
 | 
			
		||||
	depends on !THUMB2_KERNEL
 | 
			
		||||
	default y if !ARM_UNWIND
 | 
			
		||||
	help
 | 
			
		||||
	  If you say N here, the resulting kernel will be slightly smaller and
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,9 +93,16 @@ ifeq ($(CONFIG_ARM_UNWIND),y)
 | 
			
		|||
CFLAGS_ABI	+=-funwind-tables
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_THUMB2_KERNEL),y)
 | 
			
		||||
AFLAGS_AUTOIT	:=$(call as-option,-Wa$(comma)-mimplicit-it=thumb,-Wa$(comma)-mauto-it)
 | 
			
		||||
AFLAGS_NOWARN	:=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
 | 
			
		||||
CFLAGS_THUMB2	:=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
 | 
			
		||||
AFLAGS_THUMB2	:=$(CFLAGS_THUMB2) -Wa$(comma)-mthumb
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Need -Uarm for gcc < 3.x
 | 
			
		||||
KBUILD_CFLAGS	+=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
 | 
			
		||||
KBUILD_AFLAGS	+=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
 | 
			
		||||
KBUILD_CFLAGS	+=$(CFLAGS_ABI) $(CFLAGS_THUMB2) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
 | 
			
		||||
KBUILD_AFLAGS	+=$(CFLAGS_ABI) $(AFLAGS_THUMB2) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
 | 
			
		||||
 | 
			
		||||
CHECKFLAGS	+= -D__arm__
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -112,6 +119,7 @@ endif
 | 
			
		|||
# by CONFIG_* macro name.
 | 
			
		||||
machine-$(CONFIG_ARCH_AAEC2000)		:= aaec2000
 | 
			
		||||
machine-$(CONFIG_ARCH_AT91)		:= at91
 | 
			
		||||
machine-$(CONFIG_ARCH_BCMRING)		:= bcmring
 | 
			
		||||
machine-$(CONFIG_ARCH_CLPS711X)		:= clps711x
 | 
			
		||||
machine-$(CONFIG_ARCH_DAVINCI)		:= davinci
 | 
			
		||||
machine-$(CONFIG_ARCH_EBSA110)		:= ebsa110
 | 
			
		||||
| 
						 | 
				
			
			@ -135,8 +143,10 @@ machine-$(CONFIG_ARCH_MSM)		:= msm
 | 
			
		|||
machine-$(CONFIG_ARCH_MV78XX0)		:= mv78xx0
 | 
			
		||||
machine-$(CONFIG_ARCH_MX1)		:= mx1
 | 
			
		||||
machine-$(CONFIG_ARCH_MX2)		:= mx2
 | 
			
		||||
machine-$(CONFIG_ARCH_MX25)		:= mx25
 | 
			
		||||
machine-$(CONFIG_ARCH_MX3)		:= mx3
 | 
			
		||||
machine-$(CONFIG_ARCH_NETX)		:= netx
 | 
			
		||||
machine-$(CONFIG_ARCH_NOMADIK)		:= nomadik
 | 
			
		||||
machine-$(CONFIG_ARCH_NS9XXX)		:= ns9xxx
 | 
			
		||||
machine-$(CONFIG_ARCH_OMAP1)		:= omap1
 | 
			
		||||
machine-$(CONFIG_ARCH_OMAP2)		:= omap2
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +160,7 @@ machine-$(CONFIG_ARCH_RPC)		:= rpc
 | 
			
		|||
machine-$(CONFIG_ARCH_S3C2410)		:= s3c2410 s3c2400 s3c2412 s3c2440 s3c2442 s3c2443
 | 
			
		||||
machine-$(CONFIG_ARCH_S3C24A0)		:= s3c24a0
 | 
			
		||||
machine-$(CONFIG_ARCH_S3C64XX)		:= s3c6400 s3c6410
 | 
			
		||||
machine-$(CONFIG_ARCH_S5PC1XX)		:= s5pc100
 | 
			
		||||
machine-$(CONFIG_ARCH_SA1100)		:= sa1100
 | 
			
		||||
machine-$(CONFIG_ARCH_SHARK)		:= shark
 | 
			
		||||
machine-$(CONFIG_ARCH_STMP378X)		:= stmp378x
 | 
			
		||||
| 
						 | 
				
			
			@ -158,6 +169,7 @@ machine-$(CONFIG_ARCH_U300)		:= u300
 | 
			
		|||
machine-$(CONFIG_ARCH_VERSATILE)	:= versatile
 | 
			
		||||
machine-$(CONFIG_ARCH_W90X900)		:= w90x900
 | 
			
		||||
machine-$(CONFIG_FOOTBRIDGE)		:= footbridge
 | 
			
		||||
machine-$(CONFIG_ARCH_MXC91231)		:= mxc91231
 | 
			
		||||
 | 
			
		||||
# Platform directory name.  This list is sorted alphanumerically
 | 
			
		||||
# by CONFIG_* macro name.
 | 
			
		||||
| 
						 | 
				
			
			@ -168,6 +180,7 @@ plat-$(CONFIG_PLAT_ORION)	:= orion
 | 
			
		|||
plat-$(CONFIG_PLAT_PXA)		:= pxa
 | 
			
		||||
plat-$(CONFIG_PLAT_S3C24XX)	:= s3c24xx s3c
 | 
			
		||||
plat-$(CONFIG_PLAT_S3C64XX)	:= s3c64xx s3c
 | 
			
		||||
plat-$(CONFIG_PLAT_S5PC1XX)	:= s5pc1xx s3c
 | 
			
		||||
plat-$(CONFIG_ARCH_STMP3XXX)	:= stmp3xxx
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_ARCH_EBSA110),y)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ endif
 | 
			
		|||
 | 
			
		||||
quiet_cmd_uimage = UIMAGE  $@
 | 
			
		||||
      cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
 | 
			
		||||
		   -C none -a $(LOADADDR) -e $(LOADADDR) \
 | 
			
		||||
		   -C none -a $(LOADADDR) -e $(STARTADDR) \
 | 
			
		||||
		   -n 'Linux-$(KERNELRELEASE)' -d $< $@
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_ZBOOT_ROM),y)
 | 
			
		||||
| 
						 | 
				
			
			@ -70,6 +70,13 @@ else
 | 
			
		|||
$(obj)/uImage: LOADADDR=$(ZRELADDR)
 | 
			
		||||
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)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(obj)/uImage:	$(obj)/zImage FORCE
 | 
			
		||||
	$(call if_changed,uimage)
 | 
			
		||||
	@echo '  Image $@ is ready'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/* 
 | 
			
		||||
 * linux/arch/arm/boot/compressed/head-sa1100.S
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (C) 1999 Nicolas Pitre <nico@cam.org>
 | 
			
		||||
 * Copyright (C) 1999 Nicolas Pitre <nico@fluxnic.net>
 | 
			
		||||
 * 
 | 
			
		||||
 * SA1100 specific tweaks.  This is merged into head.S by the linker.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,7 +140,8 @@ start:
 | 
			
		|||
		tst	r2, #3			@ not user?
 | 
			
		||||
		bne	not_angel
 | 
			
		||||
		mov	r0, #0x17		@ angel_SWIreason_EnterSVC
 | 
			
		||||
		swi	0x123456		@ angel_SWI_ARM
 | 
			
		||||
 ARM(		swi	0x123456	)	@ angel_SWI_ARM
 | 
			
		||||
 THUMB(		svc	0xab		)	@ angel_SWI_THUMB
 | 
			
		||||
not_angel:
 | 
			
		||||
		mrs	r2, cpsr		@ turn off interrupts to
 | 
			
		||||
		orr	r2, r2, #0xc0		@ prevent angel from running
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +162,9 @@ not_angel:
 | 
			
		|||
 | 
			
		||||
		.text
 | 
			
		||||
		adr	r0, LC0
 | 
			
		||||
		ldmia	r0, {r1, r2, r3, r4, r5, r6, ip, sp}
 | 
			
		||||
 ARM(		ldmia	r0, {r1, r2, r3, r4, r5, r6, ip, sp}	)
 | 
			
		||||
 THUMB(		ldmia	r0, {r1, r2, r3, r4, r5, r6, ip}	)
 | 
			
		||||
 THUMB(		ldr	sp, [r0, #28]				)
 | 
			
		||||
		subs	r0, r0, r1		@ calculate the delta offset
 | 
			
		||||
 | 
			
		||||
						@ if delta is zero, we are
 | 
			
		||||
| 
						 | 
				
			
			@ -263,22 +266,25 @@ not_relocated:	mov	r0, #0
 | 
			
		|||
 * r6     = processor ID
 | 
			
		||||
 * r7     = architecture ID
 | 
			
		||||
 * r8     = atags pointer
 | 
			
		||||
 * r9-r14 = corrupted
 | 
			
		||||
 * r9-r12,r14 = corrupted
 | 
			
		||||
 */
 | 
			
		||||
		add	r1, r5, r0		@ end of decompressed kernel
 | 
			
		||||
		adr	r2, reloc_start
 | 
			
		||||
		ldr	r3, LC1
 | 
			
		||||
		add	r3, r2, r3
 | 
			
		||||
1:		ldmia	r2!, {r9 - r14}		@ copy relocation code
 | 
			
		||||
		stmia	r1!, {r9 - r14}
 | 
			
		||||
		ldmia	r2!, {r9 - r14}
 | 
			
		||||
		stmia	r1!, {r9 - r14}
 | 
			
		||||
1:		ldmia	r2!, {r9 - r12, r14}	@ copy relocation code
 | 
			
		||||
		stmia	r1!, {r9 - r12, r14}
 | 
			
		||||
		ldmia	r2!, {r9 - r12, r14}
 | 
			
		||||
		stmia	r1!, {r9 - r12, r14}
 | 
			
		||||
		cmp	r2, r3
 | 
			
		||||
		blo	1b
 | 
			
		||||
		add	sp, r1, #128		@ relocate the stack
 | 
			
		||||
		mov	sp, r1
 | 
			
		||||
		add	sp, sp, #128		@ relocate the stack
 | 
			
		||||
 | 
			
		||||
		bl	cache_clean_flush
 | 
			
		||||
		add	pc, r5, r0		@ call relocation code
 | 
			
		||||
 ARM(		add	pc, r5, r0		) @ call relocation code
 | 
			
		||||
 THUMB(		add	r12, r5, r0		)
 | 
			
		||||
 THUMB(		mov	pc, r12			) @ call relocation code
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * We're not in danger of overwriting ourselves.  Do this the simple way.
 | 
			
		||||
| 
						 | 
				
			
			@ -291,6 +297,7 @@ wont_overwrite:	mov	r0, r4
 | 
			
		|||
		bl	decompress_kernel
 | 
			
		||||
		b	call_kernel
 | 
			
		||||
 | 
			
		||||
		.align	2
 | 
			
		||||
		.type	LC0, #object
 | 
			
		||||
LC0:		.word	LC0			@ r1
 | 
			
		||||
		.word	__bss_start		@ r2
 | 
			
		||||
| 
						 | 
				
			
			@ -431,6 +438,7 @@ ENDPROC(__setup_mmu)
 | 
			
		|||
 | 
			
		||||
__armv4_mmu_cache_on:
 | 
			
		||||
		mov	r12, lr
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
		bl	__setup_mmu
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
		mcr	p15, 0, r0, c7, c10, 4	@ drain write buffer
 | 
			
		||||
| 
						 | 
				
			
			@ -444,10 +452,12 @@ __armv4_mmu_cache_on:
 | 
			
		|||
		bl	__common_mmu_cache_on
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
		mcr	p15, 0, r0, c8, c7, 0	@ flush I,D TLBs
 | 
			
		||||
#endif
 | 
			
		||||
		mov	pc, r12
 | 
			
		||||
 | 
			
		||||
__armv7_mmu_cache_on:
 | 
			
		||||
		mov	r12, lr
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
		mrc	p15, 0, r11, c0, c1, 4	@ read ID_MMFR0
 | 
			
		||||
		tst	r11, #0xf		@ VMSA
 | 
			
		||||
		blne	__setup_mmu
 | 
			
		||||
| 
						 | 
				
			
			@ -455,9 +465,11 @@ __armv7_mmu_cache_on:
 | 
			
		|||
		mcr	p15, 0, r0, c7, c10, 4	@ drain write buffer
 | 
			
		||||
		tst	r11, #0xf		@ VMSA
 | 
			
		||||
		mcrne	p15, 0, r0, c8, c7, 0	@ flush I,D TLBs
 | 
			
		||||
#endif
 | 
			
		||||
		mrc	p15, 0, r0, c1, c0, 0	@ read control reg
 | 
			
		||||
		orr	r0, r0, #0x5000		@ I-cache enable, RR cache replacement
 | 
			
		||||
		orr	r0, r0, #0x003c		@ write buffer
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
#ifdef CONFIG_CPU_ENDIAN_BE8
 | 
			
		||||
		orr	r0, r0, #1 << 25	@ big-endian page tables
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -465,6 +477,7 @@ __armv7_mmu_cache_on:
 | 
			
		|||
		movne	r1, #-1
 | 
			
		||||
		mcrne	p15, 0, r3, c2, c0, 0	@ load page table pointer
 | 
			
		||||
		mcrne	p15, 0, r1, c3, c0, 0	@ load domain access control
 | 
			
		||||
#endif
 | 
			
		||||
		mcr	p15, 0, r0, c1, c0, 0	@ load control register
 | 
			
		||||
		mrc	p15, 0, r0, c1, c0, 0	@ and read it back
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
| 
						 | 
				
			
			@ -498,6 +511,7 @@ __arm6_mmu_cache_on:
 | 
			
		|||
		mov	pc, r12
 | 
			
		||||
 | 
			
		||||
__common_mmu_cache_on:
 | 
			
		||||
#ifndef CONFIG_THUMB2_KERNEL
 | 
			
		||||
#ifndef DEBUG
 | 
			
		||||
		orr	r0, r0, #0x000d		@ Write buffer, mmu
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -509,6 +523,7 @@ __common_mmu_cache_on:
 | 
			
		|||
1:		mcr	p15, 0, r0, c1, c0, 0	@ load control register
 | 
			
		||||
		mrc	p15, 0, r0, c1, c0, 0	@ and read it back to
 | 
			
		||||
		sub	pc, lr, r0, lsr #32	@ properly flush pipeline
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * All code following this line is relocatable.  It is relocated by
 | 
			
		||||
| 
						 | 
				
			
			@ -522,7 +537,7 @@ __common_mmu_cache_on:
 | 
			
		|||
 * r6     = processor ID
 | 
			
		||||
 * r7     = architecture ID
 | 
			
		||||
 * r8     = atags pointer
 | 
			
		||||
 * r9-r14 = corrupted
 | 
			
		||||
 * r9-r12,r14 = corrupted
 | 
			
		||||
 */
 | 
			
		||||
		.align	5
 | 
			
		||||
reloc_start:	add	r9, r5, r0
 | 
			
		||||
| 
						 | 
				
			
			@ -531,13 +546,14 @@ reloc_start:	add	r9, r5, r0
 | 
			
		|||
		mov	r1, r4
 | 
			
		||||
1:
 | 
			
		||||
		.rept	4
 | 
			
		||||
		ldmia	r5!, {r0, r2, r3, r10 - r14}	@ relocate kernel
 | 
			
		||||
		stmia	r1!, {r0, r2, r3, r10 - r14}
 | 
			
		||||
		ldmia	r5!, {r0, r2, r3, r10 - r12, r14}	@ relocate kernel
 | 
			
		||||
		stmia	r1!, {r0, r2, r3, r10 - r12, r14}
 | 
			
		||||
		.endr
 | 
			
		||||
 | 
			
		||||
		cmp	r5, r9
 | 
			
		||||
		blo	1b
 | 
			
		||||
		add	sp, r1, #128		@ relocate the stack
 | 
			
		||||
		mov	sp, r1
 | 
			
		||||
		add	sp, sp, #128		@ relocate the stack
 | 
			
		||||
		debug_reloc_end
 | 
			
		||||
 | 
			
		||||
call_kernel:	bl	cache_clean_flush
 | 
			
		||||
| 
						 | 
				
			
			@ -571,7 +587,9 @@ call_cache_fn:	adr	r12, proc_types
 | 
			
		|||
		ldr	r2, [r12, #4]		@ get mask
 | 
			
		||||
		eor	r1, r1, r6		@ (real ^ match)
 | 
			
		||||
		tst	r1, r2			@       & mask
 | 
			
		||||
		addeq	pc, r12, r3		@ call cache function
 | 
			
		||||
 ARM(		addeq	pc, r12, r3		) @ call cache function
 | 
			
		||||
 THUMB(		addeq	r12, r3			)
 | 
			
		||||
 THUMB(		moveq	pc, r12			) @ call cache function
 | 
			
		||||
		add	r12, r12, #4*5
 | 
			
		||||
		b	1b
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -589,13 +607,15 @@ call_cache_fn:	adr	r12, proc_types
 | 
			
		|||
 * methods.  Writeback caches _must_ have the flush method
 | 
			
		||||
 * defined.
 | 
			
		||||
 */
 | 
			
		||||
		.align	2
 | 
			
		||||
		.type	proc_types,#object
 | 
			
		||||
proc_types:
 | 
			
		||||
		.word	0x41560600		@ ARM6/610
 | 
			
		||||
		.word	0xffffffe0
 | 
			
		||||
		b	__arm6_mmu_cache_off	@ works, but slow
 | 
			
		||||
		b	__arm6_mmu_cache_off
 | 
			
		||||
		W(b)	__arm6_mmu_cache_off	@ works, but slow
 | 
			
		||||
		W(b)	__arm6_mmu_cache_off
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
@		b	__arm6_mmu_cache_on		@ untested
 | 
			
		||||
@		b	__arm6_mmu_cache_off
 | 
			
		||||
@		b	__armv3_mmu_cache_flush
 | 
			
		||||
| 
						 | 
				
			
			@ -603,76 +623,84 @@ proc_types:
 | 
			
		|||
		.word	0x00000000		@ old ARM ID
 | 
			
		||||
		.word	0x0000f000
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
 | 
			
		||||
		.word	0x41007000		@ ARM7/710
 | 
			
		||||
		.word	0xfff8fe00
 | 
			
		||||
		b	__arm7_mmu_cache_off
 | 
			
		||||
		b	__arm7_mmu_cache_off
 | 
			
		||||
		W(b)	__arm7_mmu_cache_off
 | 
			
		||||
		W(b)	__arm7_mmu_cache_off
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
 | 
			
		||||
		.word	0x41807200		@ ARM720T (writethrough)
 | 
			
		||||
		.word	0xffffff00
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
 | 
			
		||||
		.word	0x41007400		@ ARM74x
 | 
			
		||||
		.word	0xff00ff00
 | 
			
		||||
		b	__armv3_mpu_cache_on
 | 
			
		||||
		b	__armv3_mpu_cache_off
 | 
			
		||||
		b	__armv3_mpu_cache_flush
 | 
			
		||||
		W(b)	__armv3_mpu_cache_on
 | 
			
		||||
		W(b)	__armv3_mpu_cache_off
 | 
			
		||||
		W(b)	__armv3_mpu_cache_flush
 | 
			
		||||
		
 | 
			
		||||
		.word	0x41009400		@ ARM94x
 | 
			
		||||
		.word	0xff00ff00
 | 
			
		||||
		b	__armv4_mpu_cache_on
 | 
			
		||||
		b	__armv4_mpu_cache_off
 | 
			
		||||
		b	__armv4_mpu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mpu_cache_on
 | 
			
		||||
		W(b)	__armv4_mpu_cache_off
 | 
			
		||||
		W(b)	__armv4_mpu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x00007000		@ ARM7 IDs
 | 
			
		||||
		.word	0x0000f000
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
 | 
			
		||||
		@ Everything from here on will be the new ID system.
 | 
			
		||||
 | 
			
		||||
		.word	0x4401a100		@ sa110 / sa1100
 | 
			
		||||
		.word	0xffffffe0
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x6901b110		@ sa1110
 | 
			
		||||
		.word	0xfffffff0
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x56056930
 | 
			
		||||
		.word	0xff0ffff0		@ PXA935
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x56158000		@ PXA168
 | 
			
		||||
		.word	0xfffff000
 | 
			
		||||
		b __armv4_mmu_cache_on
 | 
			
		||||
		b __armv4_mmu_cache_off
 | 
			
		||||
		b __armv5tej_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv5tej_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x56056930
 | 
			
		||||
		.word	0xff0ffff0		@ PXA935
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x56050000		@ Feroceon
 | 
			
		||||
		.word	0xff0f0000
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv5tej_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv5tej_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_CPU_FEROCEON_OLD_ID
 | 
			
		||||
		/* this conflicts with the standard ARMv5TE entry */
 | 
			
		||||
| 
						 | 
				
			
			@ -685,47 +713,50 @@ proc_types:
 | 
			
		|||
 | 
			
		||||
		.word	0x66015261		@ FA526
 | 
			
		||||
		.word	0xff01fff1
 | 
			
		||||
		b	__fa526_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__fa526_cache_flush
 | 
			
		||||
		W(b)	__fa526_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__fa526_cache_flush
 | 
			
		||||
 | 
			
		||||
		@ These match on the architecture ID
 | 
			
		||||
 | 
			
		||||
		.word	0x00020000		@ ARMv4T
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x00050000		@ ARMv5TE
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv4_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x00060000		@ ARMv5TEJ
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv5tej_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv4_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x0007b000		@ ARMv6
 | 
			
		||||
		.word	0x000ff000
 | 
			
		||||
		b	__armv4_mmu_cache_on
 | 
			
		||||
		b	__armv4_mmu_cache_off
 | 
			
		||||
		b	__armv6_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv4_mmu_cache_on
 | 
			
		||||
		W(b)	__armv4_mmu_cache_off
 | 
			
		||||
		W(b)	__armv6_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0x000f0000		@ new CPU Id
 | 
			
		||||
		.word	0x000f0000
 | 
			
		||||
		b	__armv7_mmu_cache_on
 | 
			
		||||
		b	__armv7_mmu_cache_off
 | 
			
		||||
		b	__armv7_mmu_cache_flush
 | 
			
		||||
		W(b)	__armv7_mmu_cache_on
 | 
			
		||||
		W(b)	__armv7_mmu_cache_off
 | 
			
		||||
		W(b)	__armv7_mmu_cache_flush
 | 
			
		||||
 | 
			
		||||
		.word	0			@ unrecognised type
 | 
			
		||||
		.word	0
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 THUMB(		nop				)
 | 
			
		||||
 | 
			
		||||
		.size	proc_types, . - proc_types
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -760,22 +791,30 @@ __armv3_mpu_cache_off:
 | 
			
		|||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
__armv4_mmu_cache_off:
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
		mrc	p15, 0, r0, c1, c0
 | 
			
		||||
		bic	r0, r0, #0x000d
 | 
			
		||||
		mcr	p15, 0, r0, c1, c0	@ turn MMU and cache off
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
		mcr	p15, 0, r0, c7, c7	@ invalidate whole cache v4
 | 
			
		||||
		mcr	p15, 0, r0, c8, c7	@ invalidate whole TLB v4
 | 
			
		||||
#endif
 | 
			
		||||
		mov	pc, lr
 | 
			
		||||
 | 
			
		||||
__armv7_mmu_cache_off:
 | 
			
		||||
		mrc	p15, 0, r0, c1, c0
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
		bic	r0, r0, #0x000d
 | 
			
		||||
#else
 | 
			
		||||
		bic	r0, r0, #0x000c
 | 
			
		||||
#endif
 | 
			
		||||
		mcr	p15, 0, r0, c1, c0	@ turn MMU and cache off
 | 
			
		||||
		mov	r12, lr
 | 
			
		||||
		bl	__armv7_mmu_cache_flush
 | 
			
		||||
		mov	r0, #0
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
		mcr	p15, 0, r0, c8, c7, 0	@ invalidate whole TLB
 | 
			
		||||
#endif
 | 
			
		||||
		mcr	p15, 0, r0, c7, c5, 6	@ invalidate BTC
 | 
			
		||||
		mcr	p15, 0, r0, c7, c10, 4	@ DSB
 | 
			
		||||
		mcr	p15, 0, r0, c7, c5, 4	@ ISB
 | 
			
		||||
| 
						 | 
				
			
			@ -852,7 +891,7 @@ __armv7_mmu_cache_flush:
 | 
			
		|||
		b	iflush
 | 
			
		||||
hierarchical:
 | 
			
		||||
		mcr	p15, 0, r10, c7, c10, 5	@ DMB
 | 
			
		||||
		stmfd	sp!, {r0-r5, r7, r9, r11}
 | 
			
		||||
		stmfd	sp!, {r0-r7, r9-r11}
 | 
			
		||||
		mrc	p15, 1, r0, c0, c0, 1	@ read clidr
 | 
			
		||||
		ands	r3, r0, #0x7000000	@ extract loc from clidr
 | 
			
		||||
		mov	r3, r3, lsr #23		@ left align loc bit field
 | 
			
		||||
| 
						 | 
				
			
			@ -877,8 +916,12 @@ loop1:
 | 
			
		|||
loop2:
 | 
			
		||||
		mov	r9, r4			@ create working copy of max way size
 | 
			
		||||
loop3:
 | 
			
		||||
		orr	r11, r10, r9, lsl r5	@ factor way and cache number into r11
 | 
			
		||||
		orr	r11, r11, r7, lsl r2	@ factor index number into r11
 | 
			
		||||
 ARM(		orr	r11, r10, r9, lsl r5	) @ factor way and cache number into r11
 | 
			
		||||
 ARM(		orr	r11, r11, r7, lsl r2	) @ factor index number into r11
 | 
			
		||||
 THUMB(		lsl	r6, r9, r5		)
 | 
			
		||||
 THUMB(		orr	r11, r10, r6		) @ factor way and cache number into r11
 | 
			
		||||
 THUMB(		lsl	r6, r7, r2		)
 | 
			
		||||
 THUMB(		orr	r11, r11, r6		) @ factor index number into r11
 | 
			
		||||
		mcr	p15, 0, r11, c7, c14, 2	@ clean & invalidate by set/way
 | 
			
		||||
		subs	r9, r9, #1		@ decrement the way
 | 
			
		||||
		bge	loop3
 | 
			
		||||
| 
						 | 
				
			
			@ -889,7 +932,7 @@ skip:
 | 
			
		|||
		cmp	r3, r10
 | 
			
		||||
		bgt	loop1
 | 
			
		||||
finished:
 | 
			
		||||
		ldmfd	sp!, {r0-r5, r7, r9, r11}
 | 
			
		||||
		ldmfd	sp!, {r0-r7, r9-r11}
 | 
			
		||||
		mov	r10, #0			@ swith back to cache level 0
 | 
			
		||||
		mcr	p15, 2, r10, c0, c0, 0	@ select current cache level in cssr
 | 
			
		||||
iflush:
 | 
			
		||||
| 
						 | 
				
			
			@ -923,9 +966,13 @@ __armv4_mmu_cache_flush:
 | 
			
		|||
		mov	r11, #8
 | 
			
		||||
		mov	r11, r11, lsl r3	@ cache line size in bytes
 | 
			
		||||
no_cache_id:
 | 
			
		||||
		bic	r1, pc, #63		@ align to longest cache line
 | 
			
		||||
		mov	r1, pc
 | 
			
		||||
		bic	r1, r1, #63		@ align to longest cache line
 | 
			
		||||
		add	r2, r1, r2
 | 
			
		||||
1:		ldr	r3, [r1], r11		@ s/w flush D cache
 | 
			
		||||
1:
 | 
			
		||||
 ARM(		ldr	r3, [r1], r11		) @ s/w flush D cache
 | 
			
		||||
 THUMB(		ldr     r3, [r1]		) @ s/w flush D cache
 | 
			
		||||
 THUMB(		add     r1, r1, r11		)
 | 
			
		||||
		teq	r1, r2
 | 
			
		||||
		bne	1b
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -945,6 +992,7 @@ __armv3_mpu_cache_flush:
 | 
			
		|||
 * memory, which again must be relocatable.
 | 
			
		||||
 */
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
		.align	2
 | 
			
		||||
		.type	phexbuf,#object
 | 
			
		||||
phexbuf:	.space	12
 | 
			
		||||
		.size	phexbuf, . - phexbuf
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,10 +22,20 @@
 | 
			
		|||
#include <linux/list.h>
 | 
			
		||||
#include <linux/io.h>
 | 
			
		||||
#include <linux/sysdev.h>
 | 
			
		||||
#include <linux/amba/bus.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/mach/irq.h>
 | 
			
		||||
#include <asm/hardware/vic.h>
 | 
			
		||||
 | 
			
		||||
static void vic_ack_irq(unsigned int irq)
 | 
			
		||||
{
 | 
			
		||||
	void __iomem *base = get_irq_chip_data(irq);
 | 
			
		||||
	irq &= 31;
 | 
			
		||||
	writel(1 << irq, base + VIC_INT_ENABLE_CLEAR);
 | 
			
		||||
	/* moreover, clear the soft-triggered, in case it was the reason */
 | 
			
		||||
	writel(1 << irq, base + VIC_INT_SOFT_CLEAR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void vic_mask_irq(unsigned int irq)
 | 
			
		||||
{
 | 
			
		||||
	void __iomem *base = get_irq_chip_data(irq);
 | 
			
		||||
| 
						 | 
				
			
			@ -253,12 +263,16 @@ static inline void vic_pm_register(void __iomem *base, unsigned int irq, u32 arg
 | 
			
		|||
 | 
			
		||||
static struct irq_chip vic_chip = {
 | 
			
		||||
	.name	= "VIC",
 | 
			
		||||
	.ack	= vic_mask_irq,
 | 
			
		||||
	.ack	= vic_ack_irq,
 | 
			
		||||
	.mask	= vic_mask_irq,
 | 
			
		||||
	.unmask	= vic_unmask_irq,
 | 
			
		||||
	.set_wake = vic_set_wake,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* The PL190 cell from ARM has been modified by ST, so handle both here */
 | 
			
		||||
static void vik_init_st(void __iomem *base, unsigned int irq_start,
 | 
			
		||||
			 u32 vic_sources);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * vic_init - initialise a vectored interrupt controller
 | 
			
		||||
 * @base: iomem base address
 | 
			
		||||
| 
						 | 
				
			
			@ -270,6 +284,28 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
 | 
			
		|||
		     u32 vic_sources, u32 resume_sources)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
	u32 cellid = 0;
 | 
			
		||||
	enum amba_vendor vendor;
 | 
			
		||||
 | 
			
		||||
	/* Identify which VIC cell this one is, by reading the ID */
 | 
			
		||||
	for (i = 0; i < 4; i++) {
 | 
			
		||||
		u32 addr = ((u32)base & PAGE_MASK) + 0xfe0 + (i * 4);
 | 
			
		||||
		cellid |= (readl(addr) & 0xff) << (8 * i);
 | 
			
		||||
	}
 | 
			
		||||
	vendor = (cellid >> 12) & 0xff;
 | 
			
		||||
	printk(KERN_INFO "VIC @%p: id 0x%08x, vendor 0x%02x\n",
 | 
			
		||||
	       base, cellid, vendor);
 | 
			
		||||
 | 
			
		||||
	switch(vendor) {
 | 
			
		||||
	case AMBA_VENDOR_ST:
 | 
			
		||||
		vik_init_st(base, irq_start, vic_sources);
 | 
			
		||||
		return;
 | 
			
		||||
	default:
 | 
			
		||||
		printk(KERN_WARNING "VIC: unknown vendor, continuing anyways\n");
 | 
			
		||||
		/* fall through */
 | 
			
		||||
	case AMBA_VENDOR_ARM:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Disable all interrupts initially. */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -306,3 +342,60 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
 | 
			
		|||
 | 
			
		||||
	vic_pm_register(base, irq_start, resume_sources);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The PL190 cell from ARM has been modified by ST to handle 64 interrupts.
 | 
			
		||||
 * The original cell has 32 interrupts, while the modified one has 64,
 | 
			
		||||
 * replocating two blocks 0x00..0x1f in 0x20..0x3f. In that case
 | 
			
		||||
 * the probe function is called twice, with base set to offset 000
 | 
			
		||||
 *  and 020 within the page. We call this "second block".
 | 
			
		||||
 */
 | 
			
		||||
static void __init vik_init_st(void __iomem *base, unsigned int irq_start,
 | 
			
		||||
				u32 vic_sources)
 | 
			
		||||
{
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
	int vic_2nd_block = ((unsigned long)base & ~PAGE_MASK) != 0;
 | 
			
		||||
 | 
			
		||||
	/* Disable all interrupts initially. */
 | 
			
		||||
 | 
			
		||||
	writel(0, base + VIC_INT_SELECT);
 | 
			
		||||
	writel(0, base + VIC_INT_ENABLE);
 | 
			
		||||
	writel(~0, base + VIC_INT_ENABLE_CLEAR);
 | 
			
		||||
	writel(0, base + VIC_IRQ_STATUS);
 | 
			
		||||
	writel(0, base + VIC_ITCR);
 | 
			
		||||
	writel(~0, base + VIC_INT_SOFT_CLEAR);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Make sure we clear all existing interrupts. The vector registers
 | 
			
		||||
	 * in this cell are after the second block of general registers,
 | 
			
		||||
	 * so we can address them using standard offsets, but only from
 | 
			
		||||
	 * the second base address, which is 0x20 in the page
 | 
			
		||||
	 */
 | 
			
		||||
	if (vic_2nd_block) {
 | 
			
		||||
		writel(0, base + VIC_PL190_VECT_ADDR);
 | 
			
		||||
		for (i = 0; i < 19; i++) {
 | 
			
		||||
			unsigned int value;
 | 
			
		||||
 | 
			
		||||
			value = readl(base + VIC_PL190_VECT_ADDR);
 | 
			
		||||
			writel(value, base + VIC_PL190_VECT_ADDR);
 | 
			
		||||
		}
 | 
			
		||||
		/* ST has 16 vectors as well, but we don't enable them by now */
 | 
			
		||||
		for (i = 0; i < 16; i++) {
 | 
			
		||||
			void __iomem *reg = base + VIC_VECT_CNTL0 + (i * 4);
 | 
			
		||||
			writel(0, reg);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		writel(32, base + VIC_PL190_DEF_VECT_ADDR);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < 32; i++) {
 | 
			
		||||
		if (vic_sources & (1 << i)) {
 | 
			
		||||
			unsigned int irq = irq_start + i;
 | 
			
		||||
 | 
			
		||||
			set_irq_chip(irq, &vic_chip);
 | 
			
		||||
			set_irq_chip_data(irq, base);
 | 
			
		||||
			set_irq_handler(irq, handle_level_irq);
 | 
			
		||||
			set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										725
									
								
								arch/arm/configs/bcmring_defconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										725
									
								
								arch/arm/configs/bcmring_defconfig
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,725 @@
 | 
			
		|||
#
 | 
			
		||||
# Automatically generated make config: don't edit
 | 
			
		||||
# Linux kernel version: 2.6.31-rc3
 | 
			
		||||
# Fri Jul 17 12:07:28 2009
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ARM=y
 | 
			
		||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
 | 
			
		||||
CONFIG_GENERIC_TIME=y
 | 
			
		||||
CONFIG_GENERIC_CLOCKEVENTS=y
 | 
			
		||||
CONFIG_MMU=y
 | 
			
		||||
CONFIG_GENERIC_HARDIRQS=y
 | 
			
		||||
CONFIG_STACKTRACE_SUPPORT=y
 | 
			
		||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
 | 
			
		||||
CONFIG_LOCKDEP_SUPPORT=y
 | 
			
		||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 | 
			
		||||
CONFIG_HARDIRQS_SW_RESEND=y
 | 
			
		||||
CONFIG_GENERIC_IRQ_PROBE=y
 | 
			
		||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
 | 
			
		||||
CONFIG_GENERIC_HWEIGHT=y
 | 
			
		||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
 | 
			
		||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
 | 
			
		||||
CONFIG_VECTORS_BASE=0xffff0000
 | 
			
		||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 | 
			
		||||
CONFIG_CONSTRUCTORS=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# General setup
 | 
			
		||||
#
 | 
			
		||||
CONFIG_EXPERIMENTAL=y
 | 
			
		||||
CONFIG_BROKEN_ON_SMP=y
 | 
			
		||||
CONFIG_LOCK_KERNEL=y
 | 
			
		||||
CONFIG_INIT_ENV_ARG_LIMIT=32
 | 
			
		||||
CONFIG_LOCALVERSION=""
 | 
			
		||||
# CONFIG_LOCALVERSION_AUTO is not set
 | 
			
		||||
# CONFIG_SWAP is not set
 | 
			
		||||
CONFIG_SYSVIPC=y
 | 
			
		||||
CONFIG_SYSVIPC_SYSCTL=y
 | 
			
		||||
# CONFIG_POSIX_MQUEUE is not set
 | 
			
		||||
# CONFIG_BSD_PROCESS_ACCT is not set
 | 
			
		||||
# CONFIG_TASKSTATS is not set
 | 
			
		||||
# CONFIG_AUDIT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# RCU Subsystem
 | 
			
		||||
#
 | 
			
		||||
CONFIG_CLASSIC_RCU=y
 | 
			
		||||
# CONFIG_TREE_RCU is not set
 | 
			
		||||
# CONFIG_PREEMPT_RCU is not set
 | 
			
		||||
# CONFIG_TREE_RCU_TRACE is not set
 | 
			
		||||
# CONFIG_PREEMPT_RCU_TRACE is not set
 | 
			
		||||
# CONFIG_IKCONFIG is not set
 | 
			
		||||
CONFIG_LOG_BUF_SHIFT=17
 | 
			
		||||
# CONFIG_GROUP_SCHED is not set
 | 
			
		||||
# CONFIG_CGROUPS is not set
 | 
			
		||||
# CONFIG_SYSFS_DEPRECATED_V2 is not set
 | 
			
		||||
# CONFIG_RELAY is not set
 | 
			
		||||
# CONFIG_NAMESPACES is not set
 | 
			
		||||
# CONFIG_BLK_DEV_INITRD is not set
 | 
			
		||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 | 
			
		||||
CONFIG_SYSCTL=y
 | 
			
		||||
CONFIG_EMBEDDED=y
 | 
			
		||||
CONFIG_UID16=y
 | 
			
		||||
CONFIG_SYSCTL_SYSCALL=y
 | 
			
		||||
CONFIG_KALLSYMS=y
 | 
			
		||||
CONFIG_KALLSYMS_EXTRA_PASS=y
 | 
			
		||||
# CONFIG_HOTPLUG is not set
 | 
			
		||||
CONFIG_PRINTK=y
 | 
			
		||||
CONFIG_BUG=y
 | 
			
		||||
# CONFIG_ELF_CORE is not set
 | 
			
		||||
CONFIG_BASE_FULL=y
 | 
			
		||||
CONFIG_FUTEX=y
 | 
			
		||||
# CONFIG_EPOLL is not set
 | 
			
		||||
# CONFIG_SIGNALFD is not set
 | 
			
		||||
# CONFIG_TIMERFD is not set
 | 
			
		||||
# CONFIG_EVENTFD is not set
 | 
			
		||||
CONFIG_SHMEM=y
 | 
			
		||||
# CONFIG_AIO is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Performance Counters
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_VM_EVENT_COUNTERS is not set
 | 
			
		||||
# CONFIG_SLUB_DEBUG is not set
 | 
			
		||||
# CONFIG_STRIP_ASM_SYMS is not set
 | 
			
		||||
# CONFIG_COMPAT_BRK is not set
 | 
			
		||||
# CONFIG_SLAB is not set
 | 
			
		||||
CONFIG_SLUB=y
 | 
			
		||||
# CONFIG_SLOB is not set
 | 
			
		||||
# CONFIG_PROFILING is not set
 | 
			
		||||
# CONFIG_MARKERS is not set
 | 
			
		||||
CONFIG_HAVE_OPROFILE=y
 | 
			
		||||
# CONFIG_KPROBES is not set
 | 
			
		||||
CONFIG_HAVE_KPROBES=y
 | 
			
		||||
CONFIG_HAVE_KRETPROBES=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# GCOV-based kernel profiling
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SLOW_WORK is not set
 | 
			
		||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
 | 
			
		||||
CONFIG_RT_MUTEXES=y
 | 
			
		||||
CONFIG_BASE_SMALL=0
 | 
			
		||||
CONFIG_MODULES=y
 | 
			
		||||
# CONFIG_MODULE_FORCE_LOAD is not set
 | 
			
		||||
CONFIG_MODULE_UNLOAD=y
 | 
			
		||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
 | 
			
		||||
# CONFIG_MODVERSIONS is not set
 | 
			
		||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
 | 
			
		||||
CONFIG_BLOCK=y
 | 
			
		||||
CONFIG_LBDAF=y
 | 
			
		||||
# CONFIG_BLK_DEV_BSG is not set
 | 
			
		||||
# CONFIG_BLK_DEV_INTEGRITY is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# IO Schedulers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_IOSCHED_NOOP=y
 | 
			
		||||
# CONFIG_IOSCHED_AS is not set
 | 
			
		||||
# CONFIG_IOSCHED_DEADLINE is not set
 | 
			
		||||
# CONFIG_IOSCHED_CFQ is not set
 | 
			
		||||
# CONFIG_DEFAULT_AS is not set
 | 
			
		||||
# CONFIG_DEFAULT_DEADLINE is not set
 | 
			
		||||
# CONFIG_DEFAULT_CFQ is not set
 | 
			
		||||
CONFIG_DEFAULT_NOOP=y
 | 
			
		||||
CONFIG_DEFAULT_IOSCHED="noop"
 | 
			
		||||
# CONFIG_FREEZER is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# System Type
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_ARCH_AAEC2000 is not set
 | 
			
		||||
# CONFIG_ARCH_INTEGRATOR is not set
 | 
			
		||||
# CONFIG_ARCH_REALVIEW is not set
 | 
			
		||||
# CONFIG_ARCH_VERSATILE is not set
 | 
			
		||||
# CONFIG_ARCH_AT91 is not set
 | 
			
		||||
# CONFIG_ARCH_CLPS711X is not set
 | 
			
		||||
# CONFIG_ARCH_GEMINI is not set
 | 
			
		||||
# CONFIG_ARCH_EBSA110 is not set
 | 
			
		||||
# CONFIG_ARCH_EP93XX is not set
 | 
			
		||||
# CONFIG_ARCH_FOOTBRIDGE is not set
 | 
			
		||||
# CONFIG_ARCH_MXC is not set
 | 
			
		||||
# CONFIG_ARCH_STMP3XXX is not set
 | 
			
		||||
# CONFIG_ARCH_NETX is not set
 | 
			
		||||
# CONFIG_ARCH_H720X is not set
 | 
			
		||||
# CONFIG_ARCH_IOP13XX is not set
 | 
			
		||||
# CONFIG_ARCH_IOP32X is not set
 | 
			
		||||
# CONFIG_ARCH_IOP33X is not set
 | 
			
		||||
# CONFIG_ARCH_IXP23XX is not set
 | 
			
		||||
# CONFIG_ARCH_IXP2000 is not set
 | 
			
		||||
# CONFIG_ARCH_IXP4XX is not set
 | 
			
		||||
# CONFIG_ARCH_L7200 is not set
 | 
			
		||||
# CONFIG_ARCH_KIRKWOOD is not set
 | 
			
		||||
# CONFIG_ARCH_LOKI is not set
 | 
			
		||||
# CONFIG_ARCH_MV78XX0 is not set
 | 
			
		||||
# CONFIG_ARCH_ORION5X is not set
 | 
			
		||||
# CONFIG_ARCH_MMP is not set
 | 
			
		||||
# CONFIG_ARCH_KS8695 is not set
 | 
			
		||||
# CONFIG_ARCH_NS9XXX is not set
 | 
			
		||||
# CONFIG_ARCH_W90X900 is not set
 | 
			
		||||
# CONFIG_ARCH_PNX4008 is not set
 | 
			
		||||
# CONFIG_ARCH_PXA is not set
 | 
			
		||||
# CONFIG_ARCH_MSM is not set
 | 
			
		||||
# CONFIG_ARCH_RPC is not set
 | 
			
		||||
# CONFIG_ARCH_SA1100 is not set
 | 
			
		||||
# CONFIG_ARCH_S3C2410 is not set
 | 
			
		||||
# CONFIG_ARCH_S3C64XX is not set
 | 
			
		||||
# CONFIG_ARCH_SHARK is not set
 | 
			
		||||
# CONFIG_ARCH_LH7A40X is not set
 | 
			
		||||
# CONFIG_ARCH_U300 is not set
 | 
			
		||||
# CONFIG_ARCH_DAVINCI is not set
 | 
			
		||||
# CONFIG_ARCH_OMAP is not set
 | 
			
		||||
CONFIG_ARCH_BCMRING=y
 | 
			
		||||
# CONFIG_ARCH_FPGA11107 is not set
 | 
			
		||||
CONFIG_ARCH_BCM11107=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# BCMRING Options
 | 
			
		||||
#
 | 
			
		||||
CONFIG_BCM_ZRELADDR=0x8000
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Processor Type
 | 
			
		||||
#
 | 
			
		||||
CONFIG_CPU_32=y
 | 
			
		||||
CONFIG_CPU_V6=y
 | 
			
		||||
CONFIG_CPU_32v6K=y
 | 
			
		||||
CONFIG_CPU_32v6=y
 | 
			
		||||
CONFIG_CPU_ABRT_EV6=y
 | 
			
		||||
CONFIG_CPU_PABRT_NOIFAR=y
 | 
			
		||||
CONFIG_CPU_CACHE_V6=y
 | 
			
		||||
CONFIG_CPU_CACHE_VIPT=y
 | 
			
		||||
CONFIG_CPU_COPY_V6=y
 | 
			
		||||
CONFIG_CPU_TLB_V6=y
 | 
			
		||||
CONFIG_CPU_HAS_ASID=y
 | 
			
		||||
CONFIG_CPU_CP15=y
 | 
			
		||||
CONFIG_CPU_CP15_MMU=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Processor Features
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ARM_THUMB=y
 | 
			
		||||
# CONFIG_CPU_ICACHE_DISABLE is not set
 | 
			
		||||
# CONFIG_CPU_DCACHE_DISABLE is not set
 | 
			
		||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
 | 
			
		||||
# CONFIG_ARM_ERRATA_411920 is not set
 | 
			
		||||
CONFIG_COMMON_CLKDEV=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Bus support
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ARM_AMBA=y
 | 
			
		||||
# CONFIG_PCI_SYSCALL is not set
 | 
			
		||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Kernel Features
 | 
			
		||||
#
 | 
			
		||||
CONFIG_TICK_ONESHOT=y
 | 
			
		||||
CONFIG_NO_HZ=y
 | 
			
		||||
# CONFIG_HIGH_RES_TIMERS is not set
 | 
			
		||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
 | 
			
		||||
CONFIG_VMSPLIT_3G=y
 | 
			
		||||
# CONFIG_VMSPLIT_2G is not set
 | 
			
		||||
# CONFIG_VMSPLIT_1G is not set
 | 
			
		||||
CONFIG_PAGE_OFFSET=0xC0000000
 | 
			
		||||
CONFIG_PREEMPT=y
 | 
			
		||||
CONFIG_HZ=100
 | 
			
		||||
CONFIG_AEABI=y
 | 
			
		||||
# CONFIG_OABI_COMPAT is not set
 | 
			
		||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
 | 
			
		||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
 | 
			
		||||
# CONFIG_HIGHMEM is not set
 | 
			
		||||
CONFIG_SELECT_MEMORY_MODEL=y
 | 
			
		||||
CONFIG_FLATMEM_MANUAL=y
 | 
			
		||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
 | 
			
		||||
# CONFIG_SPARSEMEM_MANUAL is not set
 | 
			
		||||
CONFIG_FLATMEM=y
 | 
			
		||||
CONFIG_FLAT_NODE_MEM_MAP=y
 | 
			
		||||
CONFIG_PAGEFLAGS_EXTENDED=y
 | 
			
		||||
CONFIG_SPLIT_PTLOCK_CPUS=4
 | 
			
		||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
 | 
			
		||||
CONFIG_ZONE_DMA_FLAG=0
 | 
			
		||||
CONFIG_VIRT_TO_BUS=y
 | 
			
		||||
CONFIG_HAVE_MLOCK=y
 | 
			
		||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
 | 
			
		||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
 | 
			
		||||
CONFIG_ALIGNMENT_TRAP=y
 | 
			
		||||
CONFIG_UACCESS_WITH_MEMCPY=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Boot options
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ZBOOT_ROM_TEXT=0x0e000000
 | 
			
		||||
CONFIG_ZBOOT_ROM_BSS=0x0ea00000
 | 
			
		||||
CONFIG_ZBOOT_ROM=y
 | 
			
		||||
CONFIG_CMDLINE=""
 | 
			
		||||
# CONFIG_KEXEC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# CPU Power Management
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_CPU_IDLE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Floating point emulation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# At least one emulation must be selected
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_VFP is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Userspace binary formats
 | 
			
		||||
#
 | 
			
		||||
CONFIG_BINFMT_ELF=y
 | 
			
		||||
CONFIG_HAVE_AOUT=y
 | 
			
		||||
# CONFIG_BINFMT_AOUT is not set
 | 
			
		||||
# CONFIG_BINFMT_MISC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Power management options
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PM is not set
 | 
			
		||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
 | 
			
		||||
CONFIG_NET=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Networking options
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PACKET is not set
 | 
			
		||||
# CONFIG_UNIX is not set
 | 
			
		||||
# CONFIG_NET_KEY is not set
 | 
			
		||||
# CONFIG_INET is not set
 | 
			
		||||
# CONFIG_NETWORK_SECMARK is not set
 | 
			
		||||
# CONFIG_NETFILTER is not set
 | 
			
		||||
# CONFIG_ATM is not set
 | 
			
		||||
# CONFIG_BRIDGE is not set
 | 
			
		||||
# CONFIG_NET_DSA is not set
 | 
			
		||||
# CONFIG_VLAN_8021Q is not set
 | 
			
		||||
# CONFIG_DECNET is not set
 | 
			
		||||
# CONFIG_LLC2 is not set
 | 
			
		||||
# CONFIG_IPX is not set
 | 
			
		||||
# CONFIG_ATALK is not set
 | 
			
		||||
# CONFIG_X25 is not set
 | 
			
		||||
# CONFIG_LAPB is not set
 | 
			
		||||
# CONFIG_WAN_ROUTER is not set
 | 
			
		||||
# CONFIG_PHONET is not set
 | 
			
		||||
# CONFIG_IEEE802154 is not set
 | 
			
		||||
# CONFIG_NET_SCHED is not set
 | 
			
		||||
# CONFIG_DCB is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Network testing
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_NET_PKTGEN is not set
 | 
			
		||||
# CONFIG_HAMRADIO is not set
 | 
			
		||||
# CONFIG_CAN is not set
 | 
			
		||||
# CONFIG_IRDA is not set
 | 
			
		||||
# CONFIG_BT is not set
 | 
			
		||||
# CONFIG_WIRELESS is not set
 | 
			
		||||
# CONFIG_WIMAX is not set
 | 
			
		||||
# CONFIG_RFKILL is not set
 | 
			
		||||
# CONFIG_NET_9P is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Device Drivers
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Generic Driver Options
 | 
			
		||||
#
 | 
			
		||||
CONFIG_STANDALONE=y
 | 
			
		||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
 | 
			
		||||
# CONFIG_SYS_HYPERVISOR is not set
 | 
			
		||||
# CONFIG_CONNECTOR is not set
 | 
			
		||||
CONFIG_MTD=y
 | 
			
		||||
# CONFIG_MTD_DEBUG is not set
 | 
			
		||||
CONFIG_MTD_CONCAT=y
 | 
			
		||||
CONFIG_MTD_PARTITIONS=y
 | 
			
		||||
# CONFIG_MTD_TESTS is not set
 | 
			
		||||
# CONFIG_MTD_REDBOOT_PARTS is not set
 | 
			
		||||
CONFIG_MTD_CMDLINE_PARTS=y
 | 
			
		||||
# CONFIG_MTD_AFS_PARTS is not set
 | 
			
		||||
# CONFIG_MTD_AR7_PARTS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# User Modules And Translation Layers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_MTD_CHAR=y
 | 
			
		||||
CONFIG_MTD_BLKDEVS=y
 | 
			
		||||
CONFIG_MTD_BLOCK=y
 | 
			
		||||
# CONFIG_FTL is not set
 | 
			
		||||
# CONFIG_NFTL is not set
 | 
			
		||||
# CONFIG_INFTL is not set
 | 
			
		||||
# CONFIG_RFD_FTL is not set
 | 
			
		||||
# CONFIG_SSFDC is not set
 | 
			
		||||
# CONFIG_MTD_OOPS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# RAM/ROM/Flash chip drivers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_MTD_CFI=y
 | 
			
		||||
# CONFIG_MTD_JEDECPROBE is not set
 | 
			
		||||
CONFIG_MTD_GEN_PROBE=y
 | 
			
		||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
 | 
			
		||||
CONFIG_MTD_CFI_NOSWAP=y
 | 
			
		||||
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
 | 
			
		||||
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
 | 
			
		||||
CONFIG_MTD_CFI_GEOMETRY=y
 | 
			
		||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
 | 
			
		||||
CONFIG_MTD_MAP_BANK_WIDTH_2=y
 | 
			
		||||
CONFIG_MTD_MAP_BANK_WIDTH_4=y
 | 
			
		||||
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
 | 
			
		||||
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
 | 
			
		||||
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
 | 
			
		||||
CONFIG_MTD_CFI_I1=y
 | 
			
		||||
# CONFIG_MTD_CFI_I2 is not set
 | 
			
		||||
# CONFIG_MTD_CFI_I4 is not set
 | 
			
		||||
# CONFIG_MTD_CFI_I8 is not set
 | 
			
		||||
# CONFIG_MTD_OTP is not set
 | 
			
		||||
# CONFIG_MTD_CFI_INTELEXT is not set
 | 
			
		||||
# CONFIG_MTD_CFI_AMDSTD is not set
 | 
			
		||||
# CONFIG_MTD_CFI_STAA is not set
 | 
			
		||||
CONFIG_MTD_CFI_UTIL=y
 | 
			
		||||
# CONFIG_MTD_RAM is not set
 | 
			
		||||
# CONFIG_MTD_ROM is not set
 | 
			
		||||
# CONFIG_MTD_ABSENT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Mapping drivers for chip access
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
 | 
			
		||||
# CONFIG_MTD_PHYSMAP is not set
 | 
			
		||||
# CONFIG_MTD_ARM_INTEGRATOR is not set
 | 
			
		||||
# CONFIG_MTD_PLATRAM is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Self-contained MTD device drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MTD_SLRAM is not set
 | 
			
		||||
# CONFIG_MTD_PHRAM is not set
 | 
			
		||||
# CONFIG_MTD_MTDRAM is not set
 | 
			
		||||
# CONFIG_MTD_BLOCK2MTD is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Disk-On-Chip Device Drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MTD_DOC2000 is not set
 | 
			
		||||
# CONFIG_MTD_DOC2001 is not set
 | 
			
		||||
# CONFIG_MTD_DOC2001PLUS is not set
 | 
			
		||||
CONFIG_MTD_NAND=y
 | 
			
		||||
CONFIG_MTD_NAND_VERIFY_WRITE=y
 | 
			
		||||
# CONFIG_MTD_NAND_ECC_SMC is not set
 | 
			
		||||
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
 | 
			
		||||
CONFIG_MTD_NAND_IDS=y
 | 
			
		||||
CONFIG_MTD_NAND_BCM_UMI=y
 | 
			
		||||
CONFIG_MTD_NAND_BCM_UMI_HWCS=y
 | 
			
		||||
# CONFIG_MTD_NAND_DISKONCHIP is not set
 | 
			
		||||
# CONFIG_MTD_NAND_NANDSIM is not set
 | 
			
		||||
# CONFIG_MTD_NAND_PLATFORM is not set
 | 
			
		||||
# CONFIG_MTD_ONENAND is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# LPDDR flash memory drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MTD_LPDDR is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# UBI - Unsorted block images
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MTD_UBI is not set
 | 
			
		||||
# CONFIG_PARPORT is not set
 | 
			
		||||
CONFIG_BLK_DEV=y
 | 
			
		||||
# CONFIG_BLK_DEV_COW_COMMON is not set
 | 
			
		||||
# CONFIG_BLK_DEV_LOOP is not set
 | 
			
		||||
# CONFIG_BLK_DEV_NBD is not set
 | 
			
		||||
# CONFIG_BLK_DEV_RAM is not set
 | 
			
		||||
# CONFIG_CDROM_PKTCDVD is not set
 | 
			
		||||
# CONFIG_ATA_OVER_ETH is not set
 | 
			
		||||
# CONFIG_MISC_DEVICES is not set
 | 
			
		||||
CONFIG_HAVE_IDE=y
 | 
			
		||||
# CONFIG_IDE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# SCSI device support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_RAID_ATTRS is not set
 | 
			
		||||
# CONFIG_SCSI is not set
 | 
			
		||||
# CONFIG_SCSI_DMA is not set
 | 
			
		||||
# CONFIG_SCSI_NETLINK is not set
 | 
			
		||||
# CONFIG_ATA is not set
 | 
			
		||||
# CONFIG_MD is not set
 | 
			
		||||
# CONFIG_NETDEVICES is not set
 | 
			
		||||
# CONFIG_ISDN is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Input device support
 | 
			
		||||
#
 | 
			
		||||
CONFIG_INPUT=y
 | 
			
		||||
# CONFIG_INPUT_FF_MEMLESS is not set
 | 
			
		||||
# CONFIG_INPUT_POLLDEV is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Userland interfaces
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_INPUT_MOUSEDEV is not set
 | 
			
		||||
# CONFIG_INPUT_JOYDEV is not set
 | 
			
		||||
# CONFIG_INPUT_EVDEV is not set
 | 
			
		||||
# CONFIG_INPUT_EVBUG is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Input Device Drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_INPUT_KEYBOARD is not set
 | 
			
		||||
# CONFIG_INPUT_MOUSE is not set
 | 
			
		||||
# CONFIG_INPUT_JOYSTICK is not set
 | 
			
		||||
# CONFIG_INPUT_TABLET is not set
 | 
			
		||||
# CONFIG_INPUT_TOUCHSCREEN is not set
 | 
			
		||||
# CONFIG_INPUT_MISC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Hardware I/O ports
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SERIO is not set
 | 
			
		||||
# CONFIG_GAMEPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Character devices
 | 
			
		||||
#
 | 
			
		||||
CONFIG_VT=y
 | 
			
		||||
# CONFIG_CONSOLE_TRANSLATIONS is not set
 | 
			
		||||
CONFIG_VT_CONSOLE=y
 | 
			
		||||
CONFIG_HW_CONSOLE=y
 | 
			
		||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
 | 
			
		||||
# CONFIG_DEVKMEM is not set
 | 
			
		||||
# CONFIG_SERIAL_NONSTANDARD is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Serial drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SERIAL_8250 is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Non-8250 serial port support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SERIAL_AMBA_PL010 is not set
 | 
			
		||||
CONFIG_SERIAL_AMBA_PL011=y
 | 
			
		||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
 | 
			
		||||
CONFIG_SERIAL_CORE=y
 | 
			
		||||
CONFIG_SERIAL_CORE_CONSOLE=y
 | 
			
		||||
CONFIG_UNIX98_PTYS=y
 | 
			
		||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 | 
			
		||||
CONFIG_LEGACY_PTYS=y
 | 
			
		||||
CONFIG_LEGACY_PTY_COUNT=64
 | 
			
		||||
# CONFIG_IPMI_HANDLER is not set
 | 
			
		||||
# CONFIG_HW_RANDOM is not set
 | 
			
		||||
# CONFIG_R3964 is not set
 | 
			
		||||
# CONFIG_RAW_DRIVER is not set
 | 
			
		||||
# CONFIG_TCG_TPM is not set
 | 
			
		||||
# CONFIG_I2C is not set
 | 
			
		||||
# CONFIG_SPI is not set
 | 
			
		||||
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
 | 
			
		||||
# CONFIG_GPIOLIB is not set
 | 
			
		||||
# CONFIG_W1 is not set
 | 
			
		||||
# CONFIG_POWER_SUPPLY is not set
 | 
			
		||||
# CONFIG_HWMON is not set
 | 
			
		||||
# CONFIG_THERMAL is not set
 | 
			
		||||
# CONFIG_THERMAL_HWMON is not set
 | 
			
		||||
# CONFIG_WATCHDOG is not set
 | 
			
		||||
CONFIG_SSB_POSSIBLE=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Sonics Silicon Backplane
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SSB is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Multifunction device drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MFD_CORE is not set
 | 
			
		||||
# CONFIG_MFD_SM501 is not set
 | 
			
		||||
# CONFIG_HTC_PASIC3 is not set
 | 
			
		||||
# CONFIG_MFD_TMIO is not set
 | 
			
		||||
# CONFIG_MEDIA_SUPPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Graphics support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_VGASTATE is not set
 | 
			
		||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
 | 
			
		||||
# CONFIG_FB is not set
 | 
			
		||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Display device support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_DISPLAY_SUPPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Console display driver support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_VGA_CONSOLE is not set
 | 
			
		||||
CONFIG_DUMMY_CONSOLE=y
 | 
			
		||||
# CONFIG_SOUND is not set
 | 
			
		||||
# CONFIG_HID_SUPPORT is not set
 | 
			
		||||
# CONFIG_USB_SUPPORT is not set
 | 
			
		||||
# CONFIG_MMC is not set
 | 
			
		||||
# CONFIG_MEMSTICK is not set
 | 
			
		||||
# CONFIG_ACCESSIBILITY is not set
 | 
			
		||||
# CONFIG_NEW_LEDS is not set
 | 
			
		||||
CONFIG_RTC_LIB=y
 | 
			
		||||
# CONFIG_RTC_CLASS is not set
 | 
			
		||||
# CONFIG_DMADEVICES is not set
 | 
			
		||||
# CONFIG_AUXDISPLAY is not set
 | 
			
		||||
# CONFIG_REGULATOR is not set
 | 
			
		||||
# CONFIG_UIO is not set
 | 
			
		||||
# CONFIG_STAGING is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# File systems
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_EXT2_FS is not set
 | 
			
		||||
# CONFIG_EXT3_FS is not set
 | 
			
		||||
# CONFIG_EXT4_FS is not set
 | 
			
		||||
# CONFIG_REISERFS_FS is not set
 | 
			
		||||
# CONFIG_JFS_FS is not set
 | 
			
		||||
CONFIG_FS_POSIX_ACL=y
 | 
			
		||||
# CONFIG_XFS_FS is not set
 | 
			
		||||
# CONFIG_GFS2_FS is not set
 | 
			
		||||
# CONFIG_OCFS2_FS is not set
 | 
			
		||||
# CONFIG_BTRFS_FS is not set
 | 
			
		||||
# CONFIG_FILE_LOCKING is not set
 | 
			
		||||
# CONFIG_FSNOTIFY is not set
 | 
			
		||||
# CONFIG_INOTIFY is not set
 | 
			
		||||
# CONFIG_QUOTA is not set
 | 
			
		||||
# CONFIG_AUTOFS_FS is not set
 | 
			
		||||
# CONFIG_AUTOFS4_FS is not set
 | 
			
		||||
# CONFIG_FUSE_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Caches
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_FSCACHE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# CD-ROM/DVD Filesystems
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_ISO9660_FS is not set
 | 
			
		||||
# CONFIG_UDF_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# DOS/FAT/NT Filesystems
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MSDOS_FS is not set
 | 
			
		||||
# CONFIG_VFAT_FS is not set
 | 
			
		||||
# CONFIG_NTFS_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Pseudo filesystems
 | 
			
		||||
#
 | 
			
		||||
CONFIG_PROC_FS=y
 | 
			
		||||
CONFIG_PROC_SYSCTL=y
 | 
			
		||||
# CONFIG_PROC_PAGE_MONITOR is not set
 | 
			
		||||
CONFIG_SYSFS=y
 | 
			
		||||
CONFIG_TMPFS=y
 | 
			
		||||
# CONFIG_TMPFS_POSIX_ACL is not set
 | 
			
		||||
# CONFIG_HUGETLB_PAGE is not set
 | 
			
		||||
# CONFIG_CONFIGFS_FS is not set
 | 
			
		||||
CONFIG_MISC_FILESYSTEMS=y
 | 
			
		||||
# CONFIG_ADFS_FS is not set
 | 
			
		||||
# CONFIG_AFFS_FS is not set
 | 
			
		||||
# CONFIG_HFS_FS is not set
 | 
			
		||||
# CONFIG_HFSPLUS_FS is not set
 | 
			
		||||
# CONFIG_BEFS_FS is not set
 | 
			
		||||
# CONFIG_BFS_FS is not set
 | 
			
		||||
# CONFIG_EFS_FS is not set
 | 
			
		||||
CONFIG_JFFS2_FS=y
 | 
			
		||||
CONFIG_JFFS2_FS_DEBUG=0
 | 
			
		||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
 | 
			
		||||
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
 | 
			
		||||
CONFIG_JFFS2_SUMMARY=y
 | 
			
		||||
CONFIG_JFFS2_FS_XATTR=y
 | 
			
		||||
CONFIG_JFFS2_FS_POSIX_ACL=y
 | 
			
		||||
# CONFIG_JFFS2_FS_SECURITY is not set
 | 
			
		||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
 | 
			
		||||
CONFIG_JFFS2_ZLIB=y
 | 
			
		||||
# CONFIG_JFFS2_LZO is not set
 | 
			
		||||
CONFIG_JFFS2_RTIME=y
 | 
			
		||||
# CONFIG_JFFS2_RUBIN is not set
 | 
			
		||||
# CONFIG_CRAMFS is not set
 | 
			
		||||
# CONFIG_SQUASHFS is not set
 | 
			
		||||
# CONFIG_VXFS_FS is not set
 | 
			
		||||
# CONFIG_MINIX_FS is not set
 | 
			
		||||
# CONFIG_OMFS_FS is not set
 | 
			
		||||
# CONFIG_HPFS_FS is not set
 | 
			
		||||
# CONFIG_QNX4FS_FS is not set
 | 
			
		||||
# CONFIG_ROMFS_FS is not set
 | 
			
		||||
# CONFIG_SYSV_FS is not set
 | 
			
		||||
# CONFIG_UFS_FS is not set
 | 
			
		||||
# CONFIG_NILFS2_FS is not set
 | 
			
		||||
# CONFIG_NETWORK_FILESYSTEMS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Partition Types
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PARTITION_ADVANCED is not set
 | 
			
		||||
CONFIG_MSDOS_PARTITION=y
 | 
			
		||||
# CONFIG_NLS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Kernel hacking
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PRINTK_TIME is not set
 | 
			
		||||
# CONFIG_ENABLE_WARN_DEPRECATED is not set
 | 
			
		||||
CONFIG_ENABLE_MUST_CHECK=y
 | 
			
		||||
CONFIG_FRAME_WARN=1024
 | 
			
		||||
CONFIG_MAGIC_SYSRQ=y
 | 
			
		||||
# CONFIG_UNUSED_SYMBOLS is not set
 | 
			
		||||
# CONFIG_DEBUG_FS is not set
 | 
			
		||||
CONFIG_HEADERS_CHECK=y
 | 
			
		||||
# CONFIG_DEBUG_KERNEL is not set
 | 
			
		||||
# CONFIG_DEBUG_BUGVERBOSE is not set
 | 
			
		||||
# CONFIG_DEBUG_MEMORY_INIT is not set
 | 
			
		||||
CONFIG_FRAME_POINTER=y
 | 
			
		||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
 | 
			
		||||
# CONFIG_LATENCYTOP is not set
 | 
			
		||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
 | 
			
		||||
CONFIG_HAVE_FUNCTION_TRACER=y
 | 
			
		||||
CONFIG_TRACING_SUPPORT=y
 | 
			
		||||
# CONFIG_FTRACE is not set
 | 
			
		||||
# CONFIG_BUILD_DOCSRC is not set
 | 
			
		||||
# CONFIG_SAMPLES is not set
 | 
			
		||||
CONFIG_HAVE_ARCH_KGDB=y
 | 
			
		||||
# CONFIG_ARM_UNWIND is not set
 | 
			
		||||
# CONFIG_DEBUG_USER is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Security options
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_KEYS is not set
 | 
			
		||||
# CONFIG_SECURITY is not set
 | 
			
		||||
# CONFIG_SECURITYFS is not set
 | 
			
		||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 | 
			
		||||
# CONFIG_CRYPTO is not set
 | 
			
		||||
# CONFIG_BINARY_PRINTF is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Library routines
 | 
			
		||||
#
 | 
			
		||||
CONFIG_BITREVERSE=y
 | 
			
		||||
CONFIG_GENERIC_FIND_LAST_BIT=y
 | 
			
		||||
# CONFIG_CRC_CCITT is not set
 | 
			
		||||
# CONFIG_CRC16 is not set
 | 
			
		||||
# CONFIG_CRC_T10DIF is not set
 | 
			
		||||
# CONFIG_CRC_ITU_T is not set
 | 
			
		||||
CONFIG_CRC32=y
 | 
			
		||||
# CONFIG_CRC7 is not set
 | 
			
		||||
# CONFIG_LIBCRC32C is not set
 | 
			
		||||
CONFIG_ZLIB_INFLATE=y
 | 
			
		||||
CONFIG_ZLIB_DEFLATE=y
 | 
			
		||||
CONFIG_HAS_IOMEM=y
 | 
			
		||||
CONFIG_HAS_IOPORT=y
 | 
			
		||||
CONFIG_HAS_DMA=y
 | 
			
		||||
CONFIG_NLATTR=y
 | 
			
		||||
							
								
								
									
										1338
									
								
								arch/arm/configs/cpu9260_defconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1338
									
								
								arch/arm/configs/cpu9260_defconfig
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1328
									
								
								arch/arm/configs/cpu9g20_defconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1328
									
								
								arch/arm/configs/cpu9g20_defconfig
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1316
									
								
								arch/arm/configs/cpuat91_defconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1316
									
								
								arch/arm/configs/cpuat91_defconfig
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#
 | 
			
		||||
# Automatically generated make config: don't edit
 | 
			
		||||
# Linux kernel version: 2.6.27-rc6
 | 
			
		||||
# Tue Sep 16 18:56:58 2008
 | 
			
		||||
# Linux kernel version: 2.6.31-rc6
 | 
			
		||||
# Fri Aug 21 15:41:39 2009
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ARM=y
 | 
			
		||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +9,6 @@ CONFIG_GENERIC_GPIO=y
 | 
			
		|||
CONFIG_GENERIC_TIME=y
 | 
			
		||||
CONFIG_GENERIC_CLOCKEVENTS=y
 | 
			
		||||
CONFIG_MMU=y
 | 
			
		||||
# CONFIG_NO_IOPORT is not set
 | 
			
		||||
CONFIG_GENERIC_HARDIRQS=y
 | 
			
		||||
CONFIG_STACKTRACE_SUPPORT=y
 | 
			
		||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -18,16 +17,14 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 | 
			
		|||
CONFIG_HARDIRQS_SW_RESEND=y
 | 
			
		||||
CONFIG_GENERIC_IRQ_PROBE=y
 | 
			
		||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
 | 
			
		||||
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
 | 
			
		||||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
 | 
			
		||||
CONFIG_GENERIC_HWEIGHT=y
 | 
			
		||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
 | 
			
		||||
CONFIG_ARCH_SUPPORTS_AOUT=y
 | 
			
		||||
CONFIG_ZONE_DMA=y
 | 
			
		||||
CONFIG_ARCH_MTD_XIP=y
 | 
			
		||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
 | 
			
		||||
CONFIG_VECTORS_BASE=0xffff0000
 | 
			
		||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 | 
			
		||||
CONFIG_CONSTRUCTORS=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# General setup
 | 
			
		||||
| 
						 | 
				
			
			@ -44,10 +41,19 @@ CONFIG_SYSVIPC_SYSCTL=y
 | 
			
		|||
# CONFIG_BSD_PROCESS_ACCT is not set
 | 
			
		||||
# CONFIG_TASKSTATS is not set
 | 
			
		||||
# CONFIG_AUDIT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# RCU Subsystem
 | 
			
		||||
#
 | 
			
		||||
CONFIG_CLASSIC_RCU=y
 | 
			
		||||
# CONFIG_TREE_RCU is not set
 | 
			
		||||
# CONFIG_PREEMPT_RCU is not set
 | 
			
		||||
# CONFIG_TREE_RCU_TRACE is not set
 | 
			
		||||
# CONFIG_PREEMPT_RCU_TRACE is not set
 | 
			
		||||
# CONFIG_IKCONFIG is not set
 | 
			
		||||
CONFIG_LOG_BUF_SHIFT=14
 | 
			
		||||
# CONFIG_CGROUPS is not set
 | 
			
		||||
# CONFIG_GROUP_SCHED is not set
 | 
			
		||||
# CONFIG_CGROUPS is not set
 | 
			
		||||
CONFIG_SYSFS_DEPRECATED=y
 | 
			
		||||
CONFIG_SYSFS_DEPRECATED_V2=y
 | 
			
		||||
# CONFIG_RELAY is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -56,9 +62,11 @@ CONFIG_NAMESPACES=y
 | 
			
		|||
# CONFIG_IPC_NS is not set
 | 
			
		||||
# CONFIG_USER_NS is not set
 | 
			
		||||
# CONFIG_PID_NS is not set
 | 
			
		||||
# CONFIG_NET_NS is not set
 | 
			
		||||
# CONFIG_BLK_DEV_INITRD is not set
 | 
			
		||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 | 
			
		||||
CONFIG_SYSCTL=y
 | 
			
		||||
CONFIG_ANON_INODES=y
 | 
			
		||||
# CONFIG_EMBEDDED is not set
 | 
			
		||||
CONFIG_UID16=y
 | 
			
		||||
CONFIG_SYSCTL_SYSCALL=y
 | 
			
		||||
| 
						 | 
				
			
			@ -69,17 +77,22 @@ CONFIG_HOTPLUG=y
 | 
			
		|||
CONFIG_PRINTK=y
 | 
			
		||||
CONFIG_BUG=y
 | 
			
		||||
CONFIG_ELF_CORE=y
 | 
			
		||||
CONFIG_COMPAT_BRK=y
 | 
			
		||||
CONFIG_BASE_FULL=y
 | 
			
		||||
CONFIG_FUTEX=y
 | 
			
		||||
CONFIG_ANON_INODES=y
 | 
			
		||||
CONFIG_EPOLL=y
 | 
			
		||||
CONFIG_SIGNALFD=y
 | 
			
		||||
CONFIG_TIMERFD=y
 | 
			
		||||
CONFIG_EVENTFD=y
 | 
			
		||||
CONFIG_SHMEM=y
 | 
			
		||||
CONFIG_AIO=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Performance Counters
 | 
			
		||||
#
 | 
			
		||||
CONFIG_VM_EVENT_COUNTERS=y
 | 
			
		||||
CONFIG_SLUB_DEBUG=y
 | 
			
		||||
# CONFIG_STRIP_ASM_SYMS is not set
 | 
			
		||||
CONFIG_COMPAT_BRK=y
 | 
			
		||||
# CONFIG_SLAB is not set
 | 
			
		||||
CONFIG_SLUB=y
 | 
			
		||||
# CONFIG_SLOB is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -87,30 +100,25 @@ CONFIG_SLUB=y
 | 
			
		|||
# CONFIG_MARKERS is not set
 | 
			
		||||
CONFIG_HAVE_OPROFILE=y
 | 
			
		||||
# CONFIG_KPROBES is not set
 | 
			
		||||
# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
 | 
			
		||||
# CONFIG_HAVE_IOREMAP_PROT is not set
 | 
			
		||||
CONFIG_HAVE_KPROBES=y
 | 
			
		||||
CONFIG_HAVE_KRETPROBES=y
 | 
			
		||||
# CONFIG_HAVE_ARCH_TRACEHOOK is not set
 | 
			
		||||
# CONFIG_HAVE_DMA_ATTRS is not set
 | 
			
		||||
# CONFIG_USE_GENERIC_SMP_HELPERS is not set
 | 
			
		||||
CONFIG_HAVE_CLK=y
 | 
			
		||||
CONFIG_PROC_PAGE_MONITOR=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# GCOV-based kernel profiling
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SLOW_WORK is not set
 | 
			
		||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
 | 
			
		||||
CONFIG_SLABINFO=y
 | 
			
		||||
CONFIG_RT_MUTEXES=y
 | 
			
		||||
# CONFIG_TINY_SHMEM is not set
 | 
			
		||||
CONFIG_BASE_SMALL=0
 | 
			
		||||
CONFIG_MODULES=y
 | 
			
		||||
# CONFIG_MODULE_FORCE_LOAD is not set
 | 
			
		||||
# CONFIG_MODULE_UNLOAD is not set
 | 
			
		||||
# CONFIG_MODVERSIONS is not set
 | 
			
		||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
 | 
			
		||||
CONFIG_KMOD=y
 | 
			
		||||
CONFIG_BLOCK=y
 | 
			
		||||
# CONFIG_LBD is not set
 | 
			
		||||
# CONFIG_BLK_DEV_IO_TRACE is not set
 | 
			
		||||
# CONFIG_LSF is not set
 | 
			
		||||
CONFIG_LBDAF=y
 | 
			
		||||
# CONFIG_BLK_DEV_BSG is not set
 | 
			
		||||
# CONFIG_BLK_DEV_INTEGRITY is not set
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +134,7 @@ CONFIG_IOSCHED_CFQ=y
 | 
			
		|||
CONFIG_DEFAULT_CFQ=y
 | 
			
		||||
# CONFIG_DEFAULT_NOOP is not set
 | 
			
		||||
CONFIG_DEFAULT_IOSCHED="cfq"
 | 
			
		||||
CONFIG_CLASSIC_RCU=y
 | 
			
		||||
CONFIG_FREEZER=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# System Type
 | 
			
		||||
| 
						 | 
				
			
			@ -136,14 +144,15 @@ CONFIG_CLASSIC_RCU=y
 | 
			
		|||
# CONFIG_ARCH_REALVIEW is not set
 | 
			
		||||
# CONFIG_ARCH_VERSATILE is not set
 | 
			
		||||
# CONFIG_ARCH_AT91 is not set
 | 
			
		||||
# CONFIG_ARCH_CLPS7500 is not set
 | 
			
		||||
# CONFIG_ARCH_CLPS711X is not set
 | 
			
		||||
# CONFIG_ARCH_GEMINI is not set
 | 
			
		||||
# CONFIG_ARCH_EBSA110 is not set
 | 
			
		||||
# CONFIG_ARCH_EP93XX is not set
 | 
			
		||||
# CONFIG_ARCH_FOOTBRIDGE is not set
 | 
			
		||||
# CONFIG_ARCH_MXC is not set
 | 
			
		||||
# CONFIG_ARCH_STMP3XXX is not set
 | 
			
		||||
# CONFIG_ARCH_NETX is not set
 | 
			
		||||
# CONFIG_ARCH_H720X is not set
 | 
			
		||||
# CONFIG_ARCH_IMX is not set
 | 
			
		||||
# CONFIG_ARCH_IOP13XX is not set
 | 
			
		||||
# CONFIG_ARCH_IOP32X is not set
 | 
			
		||||
# CONFIG_ARCH_IOP33X is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -152,23 +161,25 @@ CONFIG_CLASSIC_RCU=y
 | 
			
		|||
# CONFIG_ARCH_IXP4XX is not set
 | 
			
		||||
# CONFIG_ARCH_L7200 is not set
 | 
			
		||||
# CONFIG_ARCH_KIRKWOOD is not set
 | 
			
		||||
# CONFIG_ARCH_KS8695 is not set
 | 
			
		||||
# CONFIG_ARCH_NS9XXX is not set
 | 
			
		||||
# CONFIG_ARCH_LOKI is not set
 | 
			
		||||
# CONFIG_ARCH_MV78XX0 is not set
 | 
			
		||||
# CONFIG_ARCH_MXC is not set
 | 
			
		||||
# CONFIG_ARCH_ORION5X is not set
 | 
			
		||||
# CONFIG_ARCH_MMP is not set
 | 
			
		||||
# CONFIG_ARCH_KS8695 is not set
 | 
			
		||||
# CONFIG_ARCH_NS9XXX is not set
 | 
			
		||||
# CONFIG_ARCH_W90X900 is not set
 | 
			
		||||
# CONFIG_ARCH_PNX4008 is not set
 | 
			
		||||
# CONFIG_ARCH_PXA is not set
 | 
			
		||||
# CONFIG_ARCH_MSM is not set
 | 
			
		||||
# CONFIG_ARCH_RPC is not set
 | 
			
		||||
CONFIG_ARCH_SA1100=y
 | 
			
		||||
# CONFIG_ARCH_S3C2410 is not set
 | 
			
		||||
# CONFIG_ARCH_S3C64XX is not set
 | 
			
		||||
# CONFIG_ARCH_SHARK is not set
 | 
			
		||||
# CONFIG_ARCH_LH7A40X is not set
 | 
			
		||||
# CONFIG_ARCH_U300 is not set
 | 
			
		||||
# CONFIG_ARCH_DAVINCI is not set
 | 
			
		||||
# CONFIG_ARCH_OMAP is not set
 | 
			
		||||
# CONFIG_ARCH_MSM7X00A is not set
 | 
			
		||||
CONFIG_DMABOUNCE=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# SA11x0 Implementations
 | 
			
		||||
| 
						 | 
				
			
			@ -188,14 +199,6 @@ CONFIG_SA1100_JORNADA720_SSP=y
 | 
			
		|||
# CONFIG_SA1100_SIMPAD is not set
 | 
			
		||||
CONFIG_SA1100_SSP=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Boot options
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Power management
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Processor Type
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -215,8 +218,8 @@ CONFIG_CPU_CP15_MMU=y
 | 
			
		|||
#
 | 
			
		||||
# CONFIG_CPU_ICACHE_DISABLE is not set
 | 
			
		||||
# CONFIG_CPU_DCACHE_DISABLE is not set
 | 
			
		||||
# CONFIG_OUTER_CACHE is not set
 | 
			
		||||
CONFIG_SA1111=y
 | 
			
		||||
CONFIG_DMABOUNCE=y
 | 
			
		||||
CONFIG_FORCE_MAX_ZONEORDER=9
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -246,30 +249,36 @@ CONFIG_TICK_ONESHOT=y
 | 
			
		|||
# CONFIG_NO_HZ is not set
 | 
			
		||||
# CONFIG_HIGH_RES_TIMERS is not set
 | 
			
		||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
 | 
			
		||||
CONFIG_VMSPLIT_3G=y
 | 
			
		||||
# CONFIG_VMSPLIT_2G is not set
 | 
			
		||||
# CONFIG_VMSPLIT_1G is not set
 | 
			
		||||
CONFIG_PAGE_OFFSET=0xC0000000
 | 
			
		||||
# CONFIG_PREEMPT is not set
 | 
			
		||||
CONFIG_HZ=100
 | 
			
		||||
# CONFIG_AEABI is not set
 | 
			
		||||
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
 | 
			
		||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
 | 
			
		||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
 | 
			
		||||
CONFIG_NODES_SHIFT=2
 | 
			
		||||
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
 | 
			
		||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
 | 
			
		||||
# CONFIG_HIGHMEM is not set
 | 
			
		||||
CONFIG_SELECT_MEMORY_MODEL=y
 | 
			
		||||
# CONFIG_FLATMEM_MANUAL is not set
 | 
			
		||||
CONFIG_DISCONTIGMEM_MANUAL=y
 | 
			
		||||
# CONFIG_SPARSEMEM_MANUAL is not set
 | 
			
		||||
CONFIG_DISCONTIGMEM=y
 | 
			
		||||
CONFIG_FLAT_NODE_MEM_MAP=y
 | 
			
		||||
CONFIG_NEED_MULTIPLE_NODES=y
 | 
			
		||||
# CONFIG_SPARSEMEM_STATIC is not set
 | 
			
		||||
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
 | 
			
		||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
 | 
			
		||||
CONFIG_SPARSEMEM_MANUAL=y
 | 
			
		||||
CONFIG_SPARSEMEM=y
 | 
			
		||||
CONFIG_HAVE_MEMORY_PRESENT=y
 | 
			
		||||
CONFIG_SPARSEMEM_EXTREME=y
 | 
			
		||||
CONFIG_PAGEFLAGS_EXTENDED=y
 | 
			
		||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
 | 
			
		||||
# CONFIG_RESOURCES_64BIT is not set
 | 
			
		||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
 | 
			
		||||
CONFIG_ZONE_DMA_FLAG=1
 | 
			
		||||
CONFIG_BOUNCE=y
 | 
			
		||||
CONFIG_VIRT_TO_BUS=y
 | 
			
		||||
CONFIG_HAVE_MLOCK=y
 | 
			
		||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
 | 
			
		||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
 | 
			
		||||
# CONFIG_LEDS is not set
 | 
			
		||||
CONFIG_ALIGNMENT_TRAP=y
 | 
			
		||||
# CONFIG_UACCESS_WITH_MEMCPY is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Boot options
 | 
			
		||||
| 
						 | 
				
			
			@ -281,9 +290,10 @@ CONFIG_CMDLINE=""
 | 
			
		|||
# CONFIG_KEXEC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# CPU Frequency scaling
 | 
			
		||||
# CPU Power Management
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_CPU_FREQ is not set
 | 
			
		||||
# CONFIG_CPU_IDLE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Floating point emulation
 | 
			
		||||
| 
						 | 
				
			
			@ -294,12 +304,14 @@ CONFIG_CMDLINE=""
 | 
			
		|||
#
 | 
			
		||||
CONFIG_FPE_NWFPE=y
 | 
			
		||||
# CONFIG_FPE_NWFPE_XP is not set
 | 
			
		||||
CONFIG_FPE_FASTFPE=y
 | 
			
		||||
# CONFIG_FPE_FASTFPE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Userspace binary formats
 | 
			
		||||
#
 | 
			
		||||
CONFIG_BINFMT_ELF=y
 | 
			
		||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
 | 
			
		||||
CONFIG_HAVE_AOUT=y
 | 
			
		||||
CONFIG_BINFMT_AOUT=y
 | 
			
		||||
# CONFIG_BINFMT_MISC is not set
 | 
			
		||||
# CONFIG_ARTHUR is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -353,7 +365,6 @@ CONFIG_INET_TCP_DIAG=y
 | 
			
		|||
CONFIG_TCP_CONG_CUBIC=y
 | 
			
		||||
CONFIG_DEFAULT_TCP_CONG="cubic"
 | 
			
		||||
# CONFIG_TCP_MD5SIG is not set
 | 
			
		||||
# CONFIG_IP_VS is not set
 | 
			
		||||
# CONFIG_IPV6 is not set
 | 
			
		||||
# CONFIG_NETWORK_SECMARK is not set
 | 
			
		||||
CONFIG_NETFILTER=y
 | 
			
		||||
| 
						 | 
				
			
			@ -367,10 +378,12 @@ CONFIG_NETFILTER_ADVANCED=y
 | 
			
		|||
# CONFIG_NETFILTER_NETLINK_LOG is not set
 | 
			
		||||
# CONFIG_NF_CONNTRACK is not set
 | 
			
		||||
# CONFIG_NETFILTER_XTABLES is not set
 | 
			
		||||
# CONFIG_IP_VS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# IP: Netfilter Configuration
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_NF_DEFRAG_IPV4 is not set
 | 
			
		||||
# CONFIG_IP_NF_QUEUE is not set
 | 
			
		||||
# CONFIG_IP_NF_IPTABLES is not set
 | 
			
		||||
# CONFIG_IP_NF_ARPTABLES is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -379,6 +392,7 @@ CONFIG_NETFILTER_ADVANCED=y
 | 
			
		|||
# CONFIG_TIPC is not set
 | 
			
		||||
# CONFIG_ATM is not set
 | 
			
		||||
# CONFIG_BRIDGE is not set
 | 
			
		||||
# CONFIG_NET_DSA is not set
 | 
			
		||||
# CONFIG_VLAN_8021Q is not set
 | 
			
		||||
# CONFIG_DECNET is not set
 | 
			
		||||
# CONFIG_LLC2 is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -388,7 +402,10 @@ CONFIG_NETFILTER_ADVANCED=y
 | 
			
		|||
# CONFIG_LAPB is not set
 | 
			
		||||
# CONFIG_ECONET is not set
 | 
			
		||||
# CONFIG_WAN_ROUTER is not set
 | 
			
		||||
# CONFIG_PHONET is not set
 | 
			
		||||
# CONFIG_IEEE802154 is not set
 | 
			
		||||
# CONFIG_NET_SCHED is not set
 | 
			
		||||
# CONFIG_DCB is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Network testing
 | 
			
		||||
| 
						 | 
				
			
			@ -431,14 +448,17 @@ CONFIG_IRCOMM=m
 | 
			
		|||
CONFIG_SA1100_FIR=m
 | 
			
		||||
# CONFIG_BT is not set
 | 
			
		||||
# CONFIG_AF_RXRPC is not set
 | 
			
		||||
CONFIG_WIRELESS=y
 | 
			
		||||
# CONFIG_CFG80211 is not set
 | 
			
		||||
# CONFIG_WIRELESS_OLD_REGULATORY is not set
 | 
			
		||||
# CONFIG_WIRELESS_EXT is not set
 | 
			
		||||
# CONFIG_LIB80211 is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Wireless
 | 
			
		||||
# CFG80211 needs to be enabled for MAC80211
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_CFG80211 is not set
 | 
			
		||||
# CONFIG_WIRELESS_EXT is not set
 | 
			
		||||
# CONFIG_MAC80211 is not set
 | 
			
		||||
# CONFIG_IEEE80211 is not set
 | 
			
		||||
CONFIG_MAC80211_DEFAULT_PS_VALUE=0
 | 
			
		||||
# CONFIG_WIMAX is not set
 | 
			
		||||
# CONFIG_RFKILL is not set
 | 
			
		||||
# CONFIG_NET_9P is not set
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -464,29 +484,34 @@ CONFIG_EXTRA_FIRMWARE=""
 | 
			
		|||
# CONFIG_PNP is not set
 | 
			
		||||
CONFIG_BLK_DEV=y
 | 
			
		||||
# CONFIG_BLK_DEV_COW_COMMON is not set
 | 
			
		||||
CONFIG_BLK_DEV_LOOP=m
 | 
			
		||||
CONFIG_BLK_DEV_LOOP=y
 | 
			
		||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
 | 
			
		||||
CONFIG_BLK_DEV_NBD=m
 | 
			
		||||
CONFIG_BLK_DEV_NBD=y
 | 
			
		||||
# CONFIG_BLK_DEV_RAM is not set
 | 
			
		||||
# CONFIG_CDROM_PKTCDVD is not set
 | 
			
		||||
# CONFIG_ATA_OVER_ETH is not set
 | 
			
		||||
# CONFIG_MG_DISK is not set
 | 
			
		||||
CONFIG_MISC_DEVICES=y
 | 
			
		||||
# CONFIG_EEPROM_93CX6 is not set
 | 
			
		||||
# CONFIG_ENCLOSURE_SERVICES is not set
 | 
			
		||||
# CONFIG_C2PORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# EEPROM support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_EEPROM_93CX6 is not set
 | 
			
		||||
CONFIG_HAVE_IDE=y
 | 
			
		||||
CONFIG_IDE=y
 | 
			
		||||
CONFIG_BLK_DEV_IDE=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Please see Documentation/ide/ide.txt for help/info on IDE drives
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_BLK_DEV_IDE_SATA is not set
 | 
			
		||||
CONFIG_BLK_DEV_IDEDISK=y
 | 
			
		||||
# CONFIG_IDEDISK_MULTI_MODE is not set
 | 
			
		||||
CONFIG_IDE_GD=y
 | 
			
		||||
CONFIG_IDE_GD_ATA=y
 | 
			
		||||
# CONFIG_IDE_GD_ATAPI is not set
 | 
			
		||||
CONFIG_BLK_DEV_IDECS=y
 | 
			
		||||
# CONFIG_BLK_DEV_IDECD is not set
 | 
			
		||||
# CONFIG_BLK_DEV_IDETAPE is not set
 | 
			
		||||
# CONFIG_BLK_DEV_IDEFLOPPY is not set
 | 
			
		||||
# CONFIG_IDE_TASK_IOCTL is not set
 | 
			
		||||
CONFIG_IDE_PROC_FS=y
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -513,8 +538,34 @@ CONFIG_DUMMY=y
 | 
			
		|||
# CONFIG_TUN is not set
 | 
			
		||||
# CONFIG_VETH is not set
 | 
			
		||||
# CONFIG_ARCNET is not set
 | 
			
		||||
# CONFIG_NET_ETHERNET is not set
 | 
			
		||||
CONFIG_MII=m
 | 
			
		||||
# CONFIG_PHYLIB is not set
 | 
			
		||||
CONFIG_NET_ETHERNET=y
 | 
			
		||||
# CONFIG_MII is not set
 | 
			
		||||
# CONFIG_AX88796 is not set
 | 
			
		||||
# CONFIG_NET_VENDOR_3COM is not set
 | 
			
		||||
# CONFIG_NET_VENDOR_SMC is not set
 | 
			
		||||
# CONFIG_SMC91X is not set
 | 
			
		||||
# CONFIG_DM9000 is not set
 | 
			
		||||
# CONFIG_ETHOC is not set
 | 
			
		||||
# CONFIG_SMC911X is not set
 | 
			
		||||
# CONFIG_SMSC911X is not set
 | 
			
		||||
# CONFIG_NET_VENDOR_RACAL is not set
 | 
			
		||||
# CONFIG_DNET is not set
 | 
			
		||||
# CONFIG_AT1700 is not set
 | 
			
		||||
# CONFIG_DEPCA is not set
 | 
			
		||||
# CONFIG_HP100 is not set
 | 
			
		||||
# CONFIG_NET_ISA is not set
 | 
			
		||||
# CONFIG_IBM_NEW_EMAC_ZMII is not set
 | 
			
		||||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
 | 
			
		||||
# CONFIG_IBM_NEW_EMAC_TAH is not set
 | 
			
		||||
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
 | 
			
		||||
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
 | 
			
		||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
 | 
			
		||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 | 
			
		||||
# CONFIG_NET_PCI is not set
 | 
			
		||||
# CONFIG_B44 is not set
 | 
			
		||||
# CONFIG_CS89x0 is not set
 | 
			
		||||
# CONFIG_KS8842 is not set
 | 
			
		||||
# CONFIG_NETDEV_1000 is not set
 | 
			
		||||
# CONFIG_NETDEV_10000 is not set
 | 
			
		||||
# CONFIG_TR is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -523,17 +574,27 @@ CONFIG_MII=m
 | 
			
		|||
# Wireless LAN
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_WLAN_PRE80211 is not set
 | 
			
		||||
# CONFIG_WLAN_80211 is not set
 | 
			
		||||
# CONFIG_IWLWIFI_LEDS is not set
 | 
			
		||||
CONFIG_WLAN_80211=y
 | 
			
		||||
# CONFIG_PCMCIA_RAYCS is not set
 | 
			
		||||
# CONFIG_LIBERTAS is not set
 | 
			
		||||
# CONFIG_ATMEL is not set
 | 
			
		||||
# CONFIG_AIRO_CS is not set
 | 
			
		||||
# CONFIG_PCMCIA_WL3501 is not set
 | 
			
		||||
# CONFIG_HOSTAP is not set
 | 
			
		||||
# CONFIG_HERMES is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_NET_PCMCIA=y
 | 
			
		||||
CONFIG_PCMCIA_3C589=m
 | 
			
		||||
CONFIG_PCMCIA_3C574=m
 | 
			
		||||
CONFIG_PCMCIA_FMVJ18X=m
 | 
			
		||||
CONFIG_PCMCIA_PCNET=m
 | 
			
		||||
CONFIG_PCMCIA_NMCLAN=m
 | 
			
		||||
CONFIG_PCMCIA_SMC91C92=m
 | 
			
		||||
CONFIG_PCMCIA_XIRC2PS=m
 | 
			
		||||
CONFIG_PCMCIA_AXNET=m
 | 
			
		||||
# CONFIG_PCMCIA_3C589 is not set
 | 
			
		||||
# CONFIG_PCMCIA_3C574 is not set
 | 
			
		||||
# CONFIG_PCMCIA_FMVJ18X is not set
 | 
			
		||||
# CONFIG_PCMCIA_PCNET is not set
 | 
			
		||||
# CONFIG_PCMCIA_NMCLAN is not set
 | 
			
		||||
# CONFIG_PCMCIA_SMC91C92 is not set
 | 
			
		||||
# CONFIG_PCMCIA_XIRC2PS is not set
 | 
			
		||||
# CONFIG_PCMCIA_AXNET is not set
 | 
			
		||||
# CONFIG_WAN is not set
 | 
			
		||||
# CONFIG_PPP is not set
 | 
			
		||||
# CONFIG_SLIP is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -565,20 +626,23 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
 | 
			
		|||
#
 | 
			
		||||
CONFIG_INPUT_KEYBOARD=y
 | 
			
		||||
# CONFIG_KEYBOARD_ATKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_SUNKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_LKKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_XTKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_GPIO is not set
 | 
			
		||||
# CONFIG_KEYBOARD_MATRIX is not set
 | 
			
		||||
CONFIG_KEYBOARD_HP7XX=y
 | 
			
		||||
# CONFIG_KEYBOARD_NEWTON is not set
 | 
			
		||||
# CONFIG_KEYBOARD_STOWAWAY is not set
 | 
			
		||||
CONFIG_KEYBOARD_HP7XX=y
 | 
			
		||||
# CONFIG_KEYBOARD_GPIO is not set
 | 
			
		||||
# CONFIG_KEYBOARD_SUNKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_XTKBD is not set
 | 
			
		||||
# CONFIG_INPUT_MOUSE is not set
 | 
			
		||||
# CONFIG_INPUT_JOYSTICK is not set
 | 
			
		||||
# CONFIG_INPUT_TABLET is not set
 | 
			
		||||
CONFIG_INPUT_TOUCHSCREEN=y
 | 
			
		||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_ELO is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_MTOUCH is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_INEXIO is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_MK712 is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -587,8 +651,8 @@ CONFIG_TOUCHSCREEN_HP7XX=y
 | 
			
		|||
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_UCB1400 is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
 | 
			
		||||
# CONFIG_TOUCHSCREEN_W90X900 is not set
 | 
			
		||||
# CONFIG_INPUT_MISC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -624,11 +688,12 @@ CONFIG_SERIAL_SA1100_CONSOLE=y
 | 
			
		|||
CONFIG_SERIAL_CORE=y
 | 
			
		||||
CONFIG_SERIAL_CORE_CONSOLE=y
 | 
			
		||||
CONFIG_UNIX98_PTYS=y
 | 
			
		||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 | 
			
		||||
CONFIG_LEGACY_PTYS=y
 | 
			
		||||
CONFIG_LEGACY_PTY_COUNT=32
 | 
			
		||||
# CONFIG_IPMI_HANDLER is not set
 | 
			
		||||
CONFIG_HW_RANDOM=m
 | 
			
		||||
# CONFIG_NVRAM is not set
 | 
			
		||||
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
 | 
			
		||||
# CONFIG_DTLK is not set
 | 
			
		||||
# CONFIG_R3964 is not set
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -649,6 +714,10 @@ CONFIG_GPIOLIB=y
 | 
			
		|||
# CONFIG_DEBUG_GPIO is not set
 | 
			
		||||
# CONFIG_GPIO_SYSFS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Memory mapped GPIO expanders:
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# I2C GPIO expanders:
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -663,12 +732,14 @@ CONFIG_GPIOLIB=y
 | 
			
		|||
# CONFIG_W1 is not set
 | 
			
		||||
# CONFIG_POWER_SUPPLY is not set
 | 
			
		||||
# CONFIG_HWMON is not set
 | 
			
		||||
# CONFIG_THERMAL is not set
 | 
			
		||||
# CONFIG_THERMAL_HWMON is not set
 | 
			
		||||
# CONFIG_WATCHDOG is not set
 | 
			
		||||
CONFIG_SSB_POSSIBLE=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Sonics Silicon Backplane
 | 
			
		||||
#
 | 
			
		||||
CONFIG_SSB_POSSIBLE=y
 | 
			
		||||
# CONFIG_SSB is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -676,6 +747,7 @@ CONFIG_SSB_POSSIBLE=y
 | 
			
		|||
#
 | 
			
		||||
# CONFIG_MFD_CORE is not set
 | 
			
		||||
# CONFIG_MFD_SM501 is not set
 | 
			
		||||
# CONFIG_MFD_ASIC3 is not set
 | 
			
		||||
# CONFIG_HTC_EGPIO is not set
 | 
			
		||||
# CONFIG_HTC_PASIC3 is not set
 | 
			
		||||
# CONFIG_MFD_TMIO is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -687,22 +759,7 @@ CONFIG_SSB_POSSIBLE=y
 | 
			
		|||
# Multimedia Capabilities Port drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MCP_SA11X0 is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Multimedia devices
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Multimedia core support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_VIDEO_DEV is not set
 | 
			
		||||
# CONFIG_DVB_CORE is not set
 | 
			
		||||
# CONFIG_VIDEO_MEDIA is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Multimedia drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_DAB is not set
 | 
			
		||||
# CONFIG_MEDIA_SUPPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Graphics support
 | 
			
		||||
| 
						 | 
				
			
			@ -712,6 +769,7 @@ CONFIG_SSB_POSSIBLE=y
 | 
			
		|||
CONFIG_FB=y
 | 
			
		||||
# CONFIG_FIRMWARE_EDID is not set
 | 
			
		||||
# CONFIG_FB_DDC is not set
 | 
			
		||||
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
 | 
			
		||||
CONFIG_FB_CFB_FILLRECT=y
 | 
			
		||||
CONFIG_FB_CFB_COPYAREA=y
 | 
			
		||||
CONFIG_FB_CFB_IMAGEBLIT=y
 | 
			
		||||
| 
						 | 
				
			
			@ -733,7 +791,17 @@ CONFIG_FB_CFB_IMAGEBLIT=y
 | 
			
		|||
# CONFIG_FB_SA1100 is not set
 | 
			
		||||
CONFIG_FB_S1D13XXX=y
 | 
			
		||||
# CONFIG_FB_VIRTUAL is not set
 | 
			
		||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
 | 
			
		||||
# CONFIG_FB_METRONOME is not set
 | 
			
		||||
# CONFIG_FB_MB862XX is not set
 | 
			
		||||
# CONFIG_FB_BROADSHEET is not set
 | 
			
		||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
 | 
			
		||||
CONFIG_LCD_CLASS_DEVICE=y
 | 
			
		||||
# CONFIG_LCD_ILI9320 is not set
 | 
			
		||||
# CONFIG_LCD_PLATFORM is not set
 | 
			
		||||
CONFIG_LCD_HP700=y
 | 
			
		||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
 | 
			
		||||
# CONFIG_BACKLIGHT_GENERIC is not set
 | 
			
		||||
CONFIG_BACKLIGHT_HP700=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Display device support
 | 
			
		||||
| 
						 | 
				
			
			@ -757,6 +825,8 @@ CONFIG_FONT_8x16=y
 | 
			
		|||
# CONFIG_HID_SUPPORT is not set
 | 
			
		||||
# CONFIG_USB_SUPPORT is not set
 | 
			
		||||
# CONFIG_MMC is not set
 | 
			
		||||
# CONFIG_MEMSTICK is not set
 | 
			
		||||
# CONFIG_ACCESSIBILITY is not set
 | 
			
		||||
# CONFIG_NEW_LEDS is not set
 | 
			
		||||
CONFIG_RTC_LIB=y
 | 
			
		||||
CONFIG_RTC_CLASS=y
 | 
			
		||||
| 
						 | 
				
			
			@ -781,12 +851,15 @@ CONFIG_RTC_INTF_DEV=y
 | 
			
		|||
# Platform RTC drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_RTC_DRV_CMOS is not set
 | 
			
		||||
# CONFIG_RTC_DRV_DS1286 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_DS1511 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_DS1553 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_DS1742 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_STK17TA8 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_M48T86 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_M48T35 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_M48T59 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_BQ4802 is not set
 | 
			
		||||
# CONFIG_RTC_DRV_V3020 is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -794,15 +867,10 @@ CONFIG_RTC_INTF_DEV=y
 | 
			
		|||
#
 | 
			
		||||
CONFIG_RTC_DRV_SA1100=y
 | 
			
		||||
# CONFIG_DMADEVICES is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Voltage and Current regulators
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_AUXDISPLAY is not set
 | 
			
		||||
# CONFIG_REGULATOR is not set
 | 
			
		||||
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
 | 
			
		||||
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
 | 
			
		||||
# CONFIG_REGULATOR_BQ24022 is not set
 | 
			
		||||
# CONFIG_UIO is not set
 | 
			
		||||
# CONFIG_STAGING is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# File systems
 | 
			
		||||
| 
						 | 
				
			
			@ -811,12 +879,16 @@ CONFIG_EXT2_FS=y
 | 
			
		|||
# CONFIG_EXT2_FS_XATTR is not set
 | 
			
		||||
# CONFIG_EXT2_FS_XIP is not set
 | 
			
		||||
# CONFIG_EXT3_FS is not set
 | 
			
		||||
# CONFIG_EXT4DEV_FS is not set
 | 
			
		||||
# CONFIG_EXT4_FS is not set
 | 
			
		||||
# CONFIG_REISERFS_FS is not set
 | 
			
		||||
# CONFIG_JFS_FS is not set
 | 
			
		||||
# CONFIG_FS_POSIX_ACL is not set
 | 
			
		||||
# CONFIG_XFS_FS is not set
 | 
			
		||||
# CONFIG_GFS2_FS is not set
 | 
			
		||||
# CONFIG_OCFS2_FS is not set
 | 
			
		||||
# CONFIG_BTRFS_FS is not set
 | 
			
		||||
CONFIG_FILE_LOCKING=y
 | 
			
		||||
CONFIG_FSNOTIFY=y
 | 
			
		||||
CONFIG_DNOTIFY=y
 | 
			
		||||
CONFIG_INOTIFY=y
 | 
			
		||||
CONFIG_INOTIFY_USER=y
 | 
			
		||||
| 
						 | 
				
			
			@ -825,6 +897,11 @@ CONFIG_INOTIFY_USER=y
 | 
			
		|||
# CONFIG_AUTOFS4_FS is not set
 | 
			
		||||
# CONFIG_FUSE_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Caches
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_FSCACHE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# CD-ROM/DVD Filesystems
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -846,14 +923,12 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 | 
			
		|||
#
 | 
			
		||||
CONFIG_PROC_FS=y
 | 
			
		||||
CONFIG_PROC_SYSCTL=y
 | 
			
		||||
CONFIG_PROC_PAGE_MONITOR=y
 | 
			
		||||
CONFIG_SYSFS=y
 | 
			
		||||
# CONFIG_TMPFS is not set
 | 
			
		||||
# CONFIG_HUGETLB_PAGE is not set
 | 
			
		||||
# CONFIG_CONFIGFS_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Miscellaneous filesystems
 | 
			
		||||
#
 | 
			
		||||
CONFIG_MISC_FILESYSTEMS=y
 | 
			
		||||
# CONFIG_ADFS_FS is not set
 | 
			
		||||
# CONFIG_AFFS_FS is not set
 | 
			
		||||
# CONFIG_HFS_FS is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -862,6 +937,7 @@ CONFIG_SYSFS=y
 | 
			
		|||
# CONFIG_BFS_FS is not set
 | 
			
		||||
# CONFIG_EFS_FS is not set
 | 
			
		||||
# CONFIG_CRAMFS is not set
 | 
			
		||||
# CONFIG_SQUASHFS is not set
 | 
			
		||||
# CONFIG_VXFS_FS is not set
 | 
			
		||||
# CONFIG_MINIX_FS is not set
 | 
			
		||||
# CONFIG_OMFS_FS is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -870,6 +946,7 @@ CONFIG_SYSFS=y
 | 
			
		|||
# CONFIG_ROMFS_FS is not set
 | 
			
		||||
# CONFIG_SYSV_FS is not set
 | 
			
		||||
# CONFIG_UFS_FS is not set
 | 
			
		||||
# CONFIG_NILFS2_FS is not set
 | 
			
		||||
# CONFIG_NETWORK_FILESYSTEMS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -935,12 +1012,16 @@ CONFIG_DEBUG_KERNEL=y
 | 
			
		|||
CONFIG_DETECT_SOFTLOCKUP=y
 | 
			
		||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
 | 
			
		||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 | 
			
		||||
CONFIG_DETECT_HUNG_TASK=y
 | 
			
		||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
 | 
			
		||||
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
 | 
			
		||||
CONFIG_SCHED_DEBUG=y
 | 
			
		||||
# CONFIG_SCHEDSTATS is not set
 | 
			
		||||
# CONFIG_TIMER_STATS is not set
 | 
			
		||||
# CONFIG_DEBUG_OBJECTS is not set
 | 
			
		||||
# CONFIG_SLUB_DEBUG_ON is not set
 | 
			
		||||
# CONFIG_SLUB_STATS is not set
 | 
			
		||||
# CONFIG_DEBUG_KMEMLEAK is not set
 | 
			
		||||
# CONFIG_DEBUG_RT_MUTEXES is not set
 | 
			
		||||
# CONFIG_RT_MUTEX_TESTER is not set
 | 
			
		||||
# CONFIG_DEBUG_SPINLOCK is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -958,19 +1039,20 @@ CONFIG_DEBUG_BUGVERBOSE=y
 | 
			
		|||
CONFIG_DEBUG_MEMORY_INIT=y
 | 
			
		||||
# CONFIG_DEBUG_LIST is not set
 | 
			
		||||
# CONFIG_DEBUG_SG is not set
 | 
			
		||||
# CONFIG_DEBUG_NOTIFIERS is not set
 | 
			
		||||
CONFIG_FRAME_POINTER=y
 | 
			
		||||
# CONFIG_BOOT_PRINTK_DELAY is not set
 | 
			
		||||
# CONFIG_RCU_TORTURE_TEST is not set
 | 
			
		||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
 | 
			
		||||
# CONFIG_BACKTRACE_SELF_TEST is not set
 | 
			
		||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 | 
			
		||||
# CONFIG_FAULT_INJECTION is not set
 | 
			
		||||
# CONFIG_LATENCYTOP is not set
 | 
			
		||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
 | 
			
		||||
CONFIG_HAVE_FTRACE=y
 | 
			
		||||
CONFIG_HAVE_DYNAMIC_FTRACE=y
 | 
			
		||||
# CONFIG_PAGE_POISONING is not set
 | 
			
		||||
CONFIG_HAVE_FUNCTION_TRACER=y
 | 
			
		||||
CONFIG_TRACING_SUPPORT=y
 | 
			
		||||
# CONFIG_FTRACE is not set
 | 
			
		||||
# CONFIG_IRQSOFF_TRACER is not set
 | 
			
		||||
# CONFIG_SCHED_TRACER is not set
 | 
			
		||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
 | 
			
		||||
# CONFIG_SAMPLES is not set
 | 
			
		||||
CONFIG_HAVE_ARCH_KGDB=y
 | 
			
		||||
# CONFIG_KGDB is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -985,13 +1067,16 @@ CONFIG_DEBUG_LL=y
 | 
			
		|||
#
 | 
			
		||||
# CONFIG_KEYS is not set
 | 
			
		||||
# CONFIG_SECURITY is not set
 | 
			
		||||
# CONFIG_SECURITYFS is not set
 | 
			
		||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 | 
			
		||||
CONFIG_CRYPTO=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Crypto core or helper
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_CRYPTO_FIPS is not set
 | 
			
		||||
# CONFIG_CRYPTO_MANAGER is not set
 | 
			
		||||
# CONFIG_CRYPTO_MANAGER2 is not set
 | 
			
		||||
# CONFIG_CRYPTO_GF128MUL is not set
 | 
			
		||||
# CONFIG_CRYPTO_NULL is not set
 | 
			
		||||
# CONFIG_CRYPTO_CRYPTD is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -1062,15 +1147,21 @@ CONFIG_CRYPTO=y
 | 
			
		|||
# Compression
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_CRYPTO_DEFLATE is not set
 | 
			
		||||
# CONFIG_CRYPTO_ZLIB is not set
 | 
			
		||||
# CONFIG_CRYPTO_LZO is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Random Number Generation
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
 | 
			
		||||
CONFIG_CRYPTO_HW=y
 | 
			
		||||
# CONFIG_BINARY_PRINTF is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Library routines
 | 
			
		||||
#
 | 
			
		||||
CONFIG_BITREVERSE=y
 | 
			
		||||
# CONFIG_GENERIC_FIND_FIRST_BIT is not set
 | 
			
		||||
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
 | 
			
		||||
CONFIG_GENERIC_FIND_LAST_BIT=y
 | 
			
		||||
CONFIG_CRC_CCITT=m
 | 
			
		||||
# CONFIG_CRC16 is not set
 | 
			
		||||
# CONFIG_CRC_T10DIF is not set
 | 
			
		||||
| 
						 | 
				
			
			@ -1078,7 +1169,7 @@ CONFIG_CRC_CCITT=m
 | 
			
		|||
CONFIG_CRC32=y
 | 
			
		||||
# CONFIG_CRC7 is not set
 | 
			
		||||
# CONFIG_LIBCRC32C is not set
 | 
			
		||||
CONFIG_PLIST=y
 | 
			
		||||
CONFIG_HAS_IOMEM=y
 | 
			
		||||
CONFIG_HAS_IOPORT=y
 | 
			
		||||
CONFIG_HAS_DMA=y
 | 
			
		||||
CONFIG_NLATTR=y
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1316
									
								
								arch/arm/configs/nhk8815_defconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1316
									
								
								arch/arm/configs/nhk8815_defconfig
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										892
									
								
								arch/arm/configs/s5pc100_defconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										892
									
								
								arch/arm/configs/s5pc100_defconfig
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,892 @@
 | 
			
		|||
#
 | 
			
		||||
# Automatically generated make config: don't edit
 | 
			
		||||
# Linux kernel version: 2.6.30
 | 
			
		||||
# Wed Jul  1 15:53:07 2009
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ARM=y
 | 
			
		||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
 | 
			
		||||
CONFIG_GENERIC_GPIO=y
 | 
			
		||||
CONFIG_MMU=y
 | 
			
		||||
CONFIG_NO_IOPORT=y
 | 
			
		||||
CONFIG_GENERIC_HARDIRQS=y
 | 
			
		||||
CONFIG_STACKTRACE_SUPPORT=y
 | 
			
		||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
 | 
			
		||||
CONFIG_LOCKDEP_SUPPORT=y
 | 
			
		||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 | 
			
		||||
CONFIG_HARDIRQS_SW_RESEND=y
 | 
			
		||||
CONFIG_GENERIC_IRQ_PROBE=y
 | 
			
		||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
 | 
			
		||||
CONFIG_GENERIC_HWEIGHT=y
 | 
			
		||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
 | 
			
		||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
 | 
			
		||||
CONFIG_VECTORS_BASE=0xffff0000
 | 
			
		||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 | 
			
		||||
CONFIG_CONSTRUCTORS=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# General setup
 | 
			
		||||
#
 | 
			
		||||
CONFIG_EXPERIMENTAL=y
 | 
			
		||||
CONFIG_BROKEN_ON_SMP=y
 | 
			
		||||
CONFIG_INIT_ENV_ARG_LIMIT=32
 | 
			
		||||
CONFIG_LOCALVERSION=""
 | 
			
		||||
CONFIG_LOCALVERSION_AUTO=y
 | 
			
		||||
CONFIG_SWAP=y
 | 
			
		||||
# CONFIG_SYSVIPC is not set
 | 
			
		||||
# CONFIG_BSD_PROCESS_ACCT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# RCU Subsystem
 | 
			
		||||
#
 | 
			
		||||
CONFIG_CLASSIC_RCU=y
 | 
			
		||||
# CONFIG_TREE_RCU is not set
 | 
			
		||||
# CONFIG_PREEMPT_RCU is not set
 | 
			
		||||
# CONFIG_TREE_RCU_TRACE is not set
 | 
			
		||||
# CONFIG_PREEMPT_RCU_TRACE is not set
 | 
			
		||||
# CONFIG_IKCONFIG is not set
 | 
			
		||||
CONFIG_LOG_BUF_SHIFT=17
 | 
			
		||||
# CONFIG_GROUP_SCHED is not set
 | 
			
		||||
# CONFIG_CGROUPS is not set
 | 
			
		||||
CONFIG_SYSFS_DEPRECATED=y
 | 
			
		||||
CONFIG_SYSFS_DEPRECATED_V2=y
 | 
			
		||||
# CONFIG_RELAY is not set
 | 
			
		||||
CONFIG_NAMESPACES=y
 | 
			
		||||
# CONFIG_UTS_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_RD_GZIP=y
 | 
			
		||||
CONFIG_RD_BZIP2=y
 | 
			
		||||
CONFIG_RD_LZMA=y
 | 
			
		||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 | 
			
		||||
CONFIG_SYSCTL=y
 | 
			
		||||
CONFIG_ANON_INODES=y
 | 
			
		||||
# CONFIG_EMBEDDED is not set
 | 
			
		||||
CONFIG_UID16=y
 | 
			
		||||
CONFIG_SYSCTL_SYSCALL=y
 | 
			
		||||
CONFIG_KALLSYMS=y
 | 
			
		||||
CONFIG_KALLSYMS_ALL=y
 | 
			
		||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
 | 
			
		||||
CONFIG_HOTPLUG=y
 | 
			
		||||
CONFIG_PRINTK=y
 | 
			
		||||
CONFIG_BUG=y
 | 
			
		||||
CONFIG_ELF_CORE=y
 | 
			
		||||
CONFIG_BASE_FULL=y
 | 
			
		||||
CONFIG_FUTEX=y
 | 
			
		||||
CONFIG_EPOLL=y
 | 
			
		||||
CONFIG_SIGNALFD=y
 | 
			
		||||
CONFIG_TIMERFD=y
 | 
			
		||||
CONFIG_EVENTFD=y
 | 
			
		||||
CONFIG_SHMEM=y
 | 
			
		||||
CONFIG_AIO=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Performance Counters
 | 
			
		||||
#
 | 
			
		||||
CONFIG_VM_EVENT_COUNTERS=y
 | 
			
		||||
CONFIG_SLUB_DEBUG=y
 | 
			
		||||
# CONFIG_STRIP_ASM_SYMS is not set
 | 
			
		||||
CONFIG_COMPAT_BRK=y
 | 
			
		||||
# CONFIG_SLAB is not set
 | 
			
		||||
CONFIG_SLUB=y
 | 
			
		||||
# CONFIG_SLOB is not set
 | 
			
		||||
# CONFIG_PROFILING is not set
 | 
			
		||||
# CONFIG_MARKERS is not set
 | 
			
		||||
CONFIG_HAVE_OPROFILE=y
 | 
			
		||||
# CONFIG_KPROBES is not set
 | 
			
		||||
CONFIG_HAVE_KPROBES=y
 | 
			
		||||
CONFIG_HAVE_KRETPROBES=y
 | 
			
		||||
CONFIG_HAVE_CLK=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# GCOV-based kernel profiling
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SLOW_WORK is not set
 | 
			
		||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
 | 
			
		||||
CONFIG_SLABINFO=y
 | 
			
		||||
CONFIG_RT_MUTEXES=y
 | 
			
		||||
CONFIG_BASE_SMALL=0
 | 
			
		||||
CONFIG_MODULES=y
 | 
			
		||||
# CONFIG_MODULE_FORCE_LOAD is not set
 | 
			
		||||
CONFIG_MODULE_UNLOAD=y
 | 
			
		||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
 | 
			
		||||
# CONFIG_MODVERSIONS is not set
 | 
			
		||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
 | 
			
		||||
CONFIG_BLOCK=y
 | 
			
		||||
CONFIG_LBDAF=y
 | 
			
		||||
# CONFIG_BLK_DEV_BSG is not set
 | 
			
		||||
# CONFIG_BLK_DEV_INTEGRITY is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# IO Schedulers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_IOSCHED_NOOP=y
 | 
			
		||||
CONFIG_IOSCHED_AS=y
 | 
			
		||||
CONFIG_IOSCHED_DEADLINE=y
 | 
			
		||||
CONFIG_IOSCHED_CFQ=y
 | 
			
		||||
# CONFIG_DEFAULT_AS is not set
 | 
			
		||||
# CONFIG_DEFAULT_DEADLINE is not set
 | 
			
		||||
CONFIG_DEFAULT_CFQ=y
 | 
			
		||||
# CONFIG_DEFAULT_NOOP is not set
 | 
			
		||||
CONFIG_DEFAULT_IOSCHED="cfq"
 | 
			
		||||
# CONFIG_FREEZER is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# System Type
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_ARCH_AAEC2000 is not set
 | 
			
		||||
# CONFIG_ARCH_INTEGRATOR is not set
 | 
			
		||||
# CONFIG_ARCH_REALVIEW is not set
 | 
			
		||||
# CONFIG_ARCH_VERSATILE is not set
 | 
			
		||||
# CONFIG_ARCH_AT91 is not set
 | 
			
		||||
# CONFIG_ARCH_CLPS711X is not set
 | 
			
		||||
# CONFIG_ARCH_GEMINI is not set
 | 
			
		||||
# CONFIG_ARCH_EBSA110 is not set
 | 
			
		||||
# CONFIG_ARCH_EP93XX is not set
 | 
			
		||||
# CONFIG_ARCH_FOOTBRIDGE is not set
 | 
			
		||||
# CONFIG_ARCH_MXC is not set
 | 
			
		||||
# CONFIG_ARCH_STMP3XXX is not set
 | 
			
		||||
# CONFIG_ARCH_NETX is not set
 | 
			
		||||
# CONFIG_ARCH_H720X is not set
 | 
			
		||||
# CONFIG_ARCH_IOP13XX is not set
 | 
			
		||||
# CONFIG_ARCH_IOP32X is not set
 | 
			
		||||
# CONFIG_ARCH_IOP33X is not set
 | 
			
		||||
# CONFIG_ARCH_IXP23XX is not set
 | 
			
		||||
# CONFIG_ARCH_IXP2000 is not set
 | 
			
		||||
# CONFIG_ARCH_IXP4XX is not set
 | 
			
		||||
# CONFIG_ARCH_L7200 is not set
 | 
			
		||||
# CONFIG_ARCH_KIRKWOOD is not set
 | 
			
		||||
# CONFIG_ARCH_LOKI is not set
 | 
			
		||||
# CONFIG_ARCH_MV78XX0 is not set
 | 
			
		||||
# CONFIG_ARCH_ORION5X is not set
 | 
			
		||||
# CONFIG_ARCH_MMP is not set
 | 
			
		||||
# CONFIG_ARCH_KS8695 is not set
 | 
			
		||||
# CONFIG_ARCH_NS9XXX is not set
 | 
			
		||||
# CONFIG_ARCH_W90X900 is not set
 | 
			
		||||
# CONFIG_ARCH_PNX4008 is not set
 | 
			
		||||
# CONFIG_ARCH_PXA is not set
 | 
			
		||||
# CONFIG_ARCH_MSM is not set
 | 
			
		||||
# CONFIG_ARCH_RPC is not set
 | 
			
		||||
# CONFIG_ARCH_SA1100 is not set
 | 
			
		||||
# CONFIG_ARCH_S3C2410 is not set
 | 
			
		||||
# CONFIG_ARCH_S3C64XX is not set
 | 
			
		||||
CONFIG_ARCH_S5PC1XX=y
 | 
			
		||||
# CONFIG_ARCH_SHARK is not set
 | 
			
		||||
# CONFIG_ARCH_LH7A40X is not set
 | 
			
		||||
# CONFIG_ARCH_U300 is not set
 | 
			
		||||
# CONFIG_ARCH_DAVINCI is not set
 | 
			
		||||
# CONFIG_ARCH_OMAP is not set
 | 
			
		||||
CONFIG_PLAT_S3C=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Boot options
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_S3C_BOOT_ERROR_RESET is not set
 | 
			
		||||
CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Power management
 | 
			
		||||
#
 | 
			
		||||
CONFIG_S3C_LOWLEVEL_UART_PORT=0
 | 
			
		||||
CONFIG_S3C_GPIO_SPACE=0
 | 
			
		||||
CONFIG_S3C_GPIO_TRACK=y
 | 
			
		||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
 | 
			
		||||
CONFIG_PLAT_S5PC1XX=y
 | 
			
		||||
CONFIG_CPU_S5PC100_INIT=y
 | 
			
		||||
CONFIG_CPU_S5PC100_CLOCK=y
 | 
			
		||||
CONFIG_S5PC100_SETUP_I2C0=y
 | 
			
		||||
CONFIG_CPU_S5PC100=y
 | 
			
		||||
CONFIG_MACH_SMDKC100=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Processor Type
 | 
			
		||||
#
 | 
			
		||||
CONFIG_CPU_32=y
 | 
			
		||||
CONFIG_CPU_32v6K=y
 | 
			
		||||
CONFIG_CPU_V7=y
 | 
			
		||||
CONFIG_CPU_32v7=y
 | 
			
		||||
CONFIG_CPU_ABRT_EV7=y
 | 
			
		||||
CONFIG_CPU_PABRT_IFAR=y
 | 
			
		||||
CONFIG_CPU_CACHE_V7=y
 | 
			
		||||
CONFIG_CPU_CACHE_VIPT=y
 | 
			
		||||
CONFIG_CPU_COPY_V6=y
 | 
			
		||||
CONFIG_CPU_TLB_V7=y
 | 
			
		||||
CONFIG_CPU_HAS_ASID=y
 | 
			
		||||
CONFIG_CPU_CP15=y
 | 
			
		||||
CONFIG_CPU_CP15_MMU=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Processor Features
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ARM_THUMB=y
 | 
			
		||||
# CONFIG_ARM_THUMBEE is not set
 | 
			
		||||
# CONFIG_CPU_ICACHE_DISABLE is not set
 | 
			
		||||
# CONFIG_CPU_DCACHE_DISABLE is not set
 | 
			
		||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
 | 
			
		||||
CONFIG_HAS_TLS_REG=y
 | 
			
		||||
# CONFIG_ARM_ERRATA_430973 is not set
 | 
			
		||||
# CONFIG_ARM_ERRATA_458693 is not set
 | 
			
		||||
# CONFIG_ARM_ERRATA_460075 is not set
 | 
			
		||||
CONFIG_ARM_VIC=y
 | 
			
		||||
CONFIG_ARM_VIC_NR=2
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Bus support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PCI_SYSCALL is not set
 | 
			
		||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
 | 
			
		||||
# CONFIG_PCCARD is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Kernel Features
 | 
			
		||||
#
 | 
			
		||||
CONFIG_VMSPLIT_3G=y
 | 
			
		||||
# CONFIG_VMSPLIT_2G is not set
 | 
			
		||||
# CONFIG_VMSPLIT_1G is not set
 | 
			
		||||
CONFIG_PAGE_OFFSET=0xC0000000
 | 
			
		||||
# CONFIG_PREEMPT is not set
 | 
			
		||||
CONFIG_HZ=100
 | 
			
		||||
CONFIG_AEABI=y
 | 
			
		||||
CONFIG_OABI_COMPAT=y
 | 
			
		||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
 | 
			
		||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
 | 
			
		||||
# CONFIG_HIGHMEM is not set
 | 
			
		||||
CONFIG_SELECT_MEMORY_MODEL=y
 | 
			
		||||
CONFIG_FLATMEM_MANUAL=y
 | 
			
		||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
 | 
			
		||||
# CONFIG_SPARSEMEM_MANUAL is not set
 | 
			
		||||
CONFIG_FLATMEM=y
 | 
			
		||||
CONFIG_FLAT_NODE_MEM_MAP=y
 | 
			
		||||
CONFIG_PAGEFLAGS_EXTENDED=y
 | 
			
		||||
CONFIG_SPLIT_PTLOCK_CPUS=4
 | 
			
		||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
 | 
			
		||||
CONFIG_ZONE_DMA_FLAG=0
 | 
			
		||||
CONFIG_VIRT_TO_BUS=y
 | 
			
		||||
CONFIG_HAVE_MLOCK=y
 | 
			
		||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
 | 
			
		||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
 | 
			
		||||
CONFIG_ALIGNMENT_TRAP=y
 | 
			
		||||
# CONFIG_UACCESS_WITH_MEMCPY is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Boot options
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ZBOOT_ROM_TEXT=0
 | 
			
		||||
CONFIG_ZBOOT_ROM_BSS=0
 | 
			
		||||
CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc console=ttySAC2,115200 mem=128M"
 | 
			
		||||
# CONFIG_XIP_KERNEL is not set
 | 
			
		||||
# CONFIG_KEXEC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# CPU Power Management
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_CPU_IDLE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Floating point emulation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# At least one emulation must be selected
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_FPE_NWFPE is not set
 | 
			
		||||
# CONFIG_FPE_FASTFPE is not set
 | 
			
		||||
# CONFIG_VFP is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Userspace binary formats
 | 
			
		||||
#
 | 
			
		||||
CONFIG_BINFMT_ELF=y
 | 
			
		||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
 | 
			
		||||
CONFIG_HAVE_AOUT=y
 | 
			
		||||
# CONFIG_BINFMT_AOUT is not set
 | 
			
		||||
# CONFIG_BINFMT_MISC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Power management options
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PM is not set
 | 
			
		||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
 | 
			
		||||
# CONFIG_NET is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Device Drivers
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Generic Driver Options
 | 
			
		||||
#
 | 
			
		||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
			
		||||
CONFIG_STANDALONE=y
 | 
			
		||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
 | 
			
		||||
CONFIG_FW_LOADER=y
 | 
			
		||||
CONFIG_FIRMWARE_IN_KERNEL=y
 | 
			
		||||
CONFIG_EXTRA_FIRMWARE=""
 | 
			
		||||
# CONFIG_DEBUG_DRIVER is not set
 | 
			
		||||
# CONFIG_DEBUG_DEVRES is not set
 | 
			
		||||
# CONFIG_SYS_HYPERVISOR is not set
 | 
			
		||||
# CONFIG_MTD is not set
 | 
			
		||||
# CONFIG_PARPORT is not set
 | 
			
		||||
CONFIG_BLK_DEV=y
 | 
			
		||||
# CONFIG_BLK_DEV_COW_COMMON is not set
 | 
			
		||||
CONFIG_BLK_DEV_LOOP=y
 | 
			
		||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
 | 
			
		||||
CONFIG_BLK_DEV_RAM=y
 | 
			
		||||
CONFIG_BLK_DEV_RAM_COUNT=16
 | 
			
		||||
CONFIG_BLK_DEV_RAM_SIZE=8192
 | 
			
		||||
# CONFIG_BLK_DEV_XIP is not set
 | 
			
		||||
# CONFIG_CDROM_PKTCDVD is not set
 | 
			
		||||
# CONFIG_MG_DISK is not set
 | 
			
		||||
CONFIG_MISC_DEVICES=y
 | 
			
		||||
# CONFIG_ICS932S401 is not set
 | 
			
		||||
# CONFIG_ENCLOSURE_SERVICES is not set
 | 
			
		||||
# CONFIG_ISL29003 is not set
 | 
			
		||||
# CONFIG_C2PORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# EEPROM support
 | 
			
		||||
#
 | 
			
		||||
CONFIG_EEPROM_AT24=y
 | 
			
		||||
# CONFIG_EEPROM_LEGACY is not set
 | 
			
		||||
# CONFIG_EEPROM_MAX6875 is not set
 | 
			
		||||
# CONFIG_EEPROM_93CX6 is not set
 | 
			
		||||
CONFIG_HAVE_IDE=y
 | 
			
		||||
# CONFIG_IDE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# SCSI device support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_RAID_ATTRS is not set
 | 
			
		||||
# CONFIG_SCSI is not set
 | 
			
		||||
# CONFIG_SCSI_DMA is not set
 | 
			
		||||
# CONFIG_SCSI_NETLINK is not set
 | 
			
		||||
# CONFIG_ATA is not set
 | 
			
		||||
# CONFIG_MD is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Input device support
 | 
			
		||||
#
 | 
			
		||||
CONFIG_INPUT=y
 | 
			
		||||
# CONFIG_INPUT_FF_MEMLESS is not set
 | 
			
		||||
# CONFIG_INPUT_POLLDEV is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Userland interfaces
 | 
			
		||||
#
 | 
			
		||||
CONFIG_INPUT_MOUSEDEV=y
 | 
			
		||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
 | 
			
		||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 | 
			
		||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 | 
			
		||||
# CONFIG_INPUT_JOYDEV is not set
 | 
			
		||||
# CONFIG_INPUT_EVDEV is not set
 | 
			
		||||
# CONFIG_INPUT_EVBUG is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Input Device Drivers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_INPUT_KEYBOARD=y
 | 
			
		||||
CONFIG_KEYBOARD_ATKBD=y
 | 
			
		||||
# CONFIG_KEYBOARD_SUNKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_LKKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_XTKBD is not set
 | 
			
		||||
# CONFIG_KEYBOARD_NEWTON is not set
 | 
			
		||||
# CONFIG_KEYBOARD_STOWAWAY is not set
 | 
			
		||||
# CONFIG_KEYBOARD_GPIO is not set
 | 
			
		||||
CONFIG_INPUT_MOUSE=y
 | 
			
		||||
CONFIG_MOUSE_PS2=y
 | 
			
		||||
CONFIG_MOUSE_PS2_ALPS=y
 | 
			
		||||
CONFIG_MOUSE_PS2_LOGIPS2PP=y
 | 
			
		||||
CONFIG_MOUSE_PS2_SYNAPTICS=y
 | 
			
		||||
CONFIG_MOUSE_PS2_TRACKPOINT=y
 | 
			
		||||
# CONFIG_MOUSE_PS2_ELANTECH is not set
 | 
			
		||||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
 | 
			
		||||
# CONFIG_MOUSE_SERIAL is not set
 | 
			
		||||
# CONFIG_MOUSE_APPLETOUCH is not set
 | 
			
		||||
# CONFIG_MOUSE_BCM5974 is not set
 | 
			
		||||
# CONFIG_MOUSE_VSXXXAA is not set
 | 
			
		||||
# CONFIG_MOUSE_GPIO is not set
 | 
			
		||||
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
 | 
			
		||||
# CONFIG_INPUT_JOYSTICK is not set
 | 
			
		||||
# CONFIG_INPUT_TABLET is not set
 | 
			
		||||
# CONFIG_INPUT_TOUCHSCREEN is not set
 | 
			
		||||
# CONFIG_INPUT_MISC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Hardware I/O ports
 | 
			
		||||
#
 | 
			
		||||
CONFIG_SERIO=y
 | 
			
		||||
CONFIG_SERIO_SERPORT=y
 | 
			
		||||
CONFIG_SERIO_LIBPS2=y
 | 
			
		||||
# CONFIG_SERIO_RAW is not set
 | 
			
		||||
# CONFIG_GAMEPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Character devices
 | 
			
		||||
#
 | 
			
		||||
CONFIG_VT=y
 | 
			
		||||
CONFIG_CONSOLE_TRANSLATIONS=y
 | 
			
		||||
CONFIG_VT_CONSOLE=y
 | 
			
		||||
CONFIG_HW_CONSOLE=y
 | 
			
		||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
 | 
			
		||||
CONFIG_DEVKMEM=y
 | 
			
		||||
# CONFIG_SERIAL_NONSTANDARD is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Serial drivers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_SERIAL_8250=y
 | 
			
		||||
# CONFIG_SERIAL_8250_CONSOLE is not set
 | 
			
		||||
CONFIG_SERIAL_8250_NR_UARTS=4
 | 
			
		||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
 | 
			
		||||
# CONFIG_SERIAL_8250_EXTENDED is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Non-8250 serial port support
 | 
			
		||||
#
 | 
			
		||||
CONFIG_SERIAL_SAMSUNG=y
 | 
			
		||||
CONFIG_SERIAL_SAMSUNG_UARTS=3
 | 
			
		||||
# CONFIG_SERIAL_SAMSUNG_DEBUG is not set
 | 
			
		||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
 | 
			
		||||
CONFIG_SERIAL_CORE=y
 | 
			
		||||
CONFIG_SERIAL_CORE_CONSOLE=y
 | 
			
		||||
CONFIG_UNIX98_PTYS=y
 | 
			
		||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 | 
			
		||||
CONFIG_LEGACY_PTYS=y
 | 
			
		||||
CONFIG_LEGACY_PTY_COUNT=256
 | 
			
		||||
# CONFIG_IPMI_HANDLER is not set
 | 
			
		||||
CONFIG_HW_RANDOM=y
 | 
			
		||||
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
 | 
			
		||||
# CONFIG_R3964 is not set
 | 
			
		||||
# CONFIG_RAW_DRIVER is not set
 | 
			
		||||
# CONFIG_TCG_TPM is not set
 | 
			
		||||
CONFIG_I2C=y
 | 
			
		||||
CONFIG_I2C_BOARDINFO=y
 | 
			
		||||
CONFIG_I2C_CHARDEV=y
 | 
			
		||||
CONFIG_I2C_HELPER_AUTO=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# I2C Hardware Bus support
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# I2C system bus drivers (mostly embedded / system-on-chip)
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_I2C_GPIO is not set
 | 
			
		||||
# CONFIG_I2C_OCORES is not set
 | 
			
		||||
# CONFIG_I2C_SIMTEC is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# External I2C/SMBus adapter drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_I2C_PARPORT_LIGHT is not set
 | 
			
		||||
# CONFIG_I2C_TAOS_EVM is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Other I2C/SMBus bus drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_I2C_PCA_PLATFORM is not set
 | 
			
		||||
# CONFIG_I2C_STUB is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Miscellaneous I2C Chip support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_DS1682 is not set
 | 
			
		||||
# CONFIG_SENSORS_PCF8574 is not set
 | 
			
		||||
# CONFIG_PCF8575 is not set
 | 
			
		||||
# CONFIG_SENSORS_PCA9539 is not set
 | 
			
		||||
# CONFIG_SENSORS_TSL2550 is not set
 | 
			
		||||
# CONFIG_I2C_DEBUG_CORE is not set
 | 
			
		||||
# CONFIG_I2C_DEBUG_ALGO is not set
 | 
			
		||||
# CONFIG_I2C_DEBUG_BUS is not set
 | 
			
		||||
# CONFIG_I2C_DEBUG_CHIP is not set
 | 
			
		||||
# CONFIG_SPI is not set
 | 
			
		||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
 | 
			
		||||
CONFIG_GPIOLIB=y
 | 
			
		||||
# CONFIG_DEBUG_GPIO is not set
 | 
			
		||||
# CONFIG_GPIO_SYSFS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Memory mapped GPIO expanders:
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# I2C GPIO expanders:
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_GPIO_MAX732X is not set
 | 
			
		||||
# CONFIG_GPIO_PCA953X is not set
 | 
			
		||||
# CONFIG_GPIO_PCF857X is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# PCI GPIO expanders:
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# SPI GPIO expanders:
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_W1 is not set
 | 
			
		||||
# CONFIG_POWER_SUPPLY is not set
 | 
			
		||||
CONFIG_HWMON=y
 | 
			
		||||
# CONFIG_HWMON_VID is not set
 | 
			
		||||
# CONFIG_SENSORS_AD7414 is not set
 | 
			
		||||
# CONFIG_SENSORS_AD7418 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADM1021 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADM1025 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADM1026 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADM1029 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADM1031 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADM9240 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADT7462 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADT7470 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADT7473 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADT7475 is not set
 | 
			
		||||
# CONFIG_SENSORS_ATXP1 is not set
 | 
			
		||||
# CONFIG_SENSORS_DS1621 is not set
 | 
			
		||||
# CONFIG_SENSORS_F71805F is not set
 | 
			
		||||
# CONFIG_SENSORS_F71882FG is not set
 | 
			
		||||
# CONFIG_SENSORS_F75375S is not set
 | 
			
		||||
# CONFIG_SENSORS_G760A is not set
 | 
			
		||||
# CONFIG_SENSORS_GL518SM is not set
 | 
			
		||||
# CONFIG_SENSORS_GL520SM is not set
 | 
			
		||||
# CONFIG_SENSORS_IT87 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM63 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM75 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM77 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM78 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM80 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM83 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM85 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM87 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM90 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM92 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM93 is not set
 | 
			
		||||
# CONFIG_SENSORS_LTC4215 is not set
 | 
			
		||||
# CONFIG_SENSORS_LTC4245 is not set
 | 
			
		||||
# CONFIG_SENSORS_LM95241 is not set
 | 
			
		||||
# CONFIG_SENSORS_MAX1619 is not set
 | 
			
		||||
# CONFIG_SENSORS_MAX6650 is not set
 | 
			
		||||
# CONFIG_SENSORS_PC87360 is not set
 | 
			
		||||
# CONFIG_SENSORS_PC87427 is not set
 | 
			
		||||
# CONFIG_SENSORS_PCF8591 is not set
 | 
			
		||||
# CONFIG_SENSORS_SHT15 is not set
 | 
			
		||||
# CONFIG_SENSORS_DME1737 is not set
 | 
			
		||||
# CONFIG_SENSORS_SMSC47M1 is not set
 | 
			
		||||
# CONFIG_SENSORS_SMSC47M192 is not set
 | 
			
		||||
# CONFIG_SENSORS_SMSC47B397 is not set
 | 
			
		||||
# CONFIG_SENSORS_ADS7828 is not set
 | 
			
		||||
# CONFIG_SENSORS_THMC50 is not set
 | 
			
		||||
# CONFIG_SENSORS_TMP401 is not set
 | 
			
		||||
# CONFIG_SENSORS_VT1211 is not set
 | 
			
		||||
# CONFIG_SENSORS_W83781D is not set
 | 
			
		||||
# CONFIG_SENSORS_W83791D is not set
 | 
			
		||||
# CONFIG_SENSORS_W83792D is not set
 | 
			
		||||
# CONFIG_SENSORS_W83793 is not set
 | 
			
		||||
# CONFIG_SENSORS_W83L785TS is not set
 | 
			
		||||
# CONFIG_SENSORS_W83L786NG is not set
 | 
			
		||||
# CONFIG_SENSORS_W83627HF is not set
 | 
			
		||||
# CONFIG_SENSORS_W83627EHF is not set
 | 
			
		||||
# CONFIG_HWMON_DEBUG_CHIP is not set
 | 
			
		||||
# CONFIG_THERMAL is not set
 | 
			
		||||
# CONFIG_THERMAL_HWMON is not set
 | 
			
		||||
# CONFIG_WATCHDOG is not set
 | 
			
		||||
CONFIG_SSB_POSSIBLE=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Sonics Silicon Backplane
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_SSB is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Multifunction device drivers
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MFD_CORE is not set
 | 
			
		||||
# CONFIG_MFD_SM501 is not set
 | 
			
		||||
# CONFIG_MFD_ASIC3 is not set
 | 
			
		||||
# CONFIG_HTC_EGPIO is not set
 | 
			
		||||
# CONFIG_HTC_PASIC3 is not set
 | 
			
		||||
# CONFIG_TPS65010 is not set
 | 
			
		||||
# CONFIG_TWL4030_CORE is not set
 | 
			
		||||
# CONFIG_MFD_TMIO is not set
 | 
			
		||||
# CONFIG_MFD_T7L66XB is not set
 | 
			
		||||
# CONFIG_MFD_TC6387XB is not set
 | 
			
		||||
# CONFIG_MFD_TC6393XB is not set
 | 
			
		||||
# CONFIG_PMIC_DA903X is not set
 | 
			
		||||
# CONFIG_MFD_WM8400 is not set
 | 
			
		||||
# CONFIG_MFD_WM8350_I2C is not set
 | 
			
		||||
# CONFIG_MFD_PCF50633 is not set
 | 
			
		||||
# CONFIG_AB3100_CORE is not set
 | 
			
		||||
# CONFIG_MEDIA_SUPPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Graphics support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_VGASTATE is not set
 | 
			
		||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
 | 
			
		||||
# CONFIG_FB is not set
 | 
			
		||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Display device support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_DISPLAY_SUPPORT is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Console display driver support
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_VGA_CONSOLE is not set
 | 
			
		||||
CONFIG_DUMMY_CONSOLE=y
 | 
			
		||||
# CONFIG_SOUND is not set
 | 
			
		||||
CONFIG_HID_SUPPORT=y
 | 
			
		||||
CONFIG_HID=y
 | 
			
		||||
CONFIG_HID_DEBUG=y
 | 
			
		||||
# CONFIG_HIDRAW is not set
 | 
			
		||||
# CONFIG_HID_PID is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Special HID drivers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_USB_SUPPORT=y
 | 
			
		||||
CONFIG_USB_ARCH_HAS_HCD=y
 | 
			
		||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
 | 
			
		||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
 | 
			
		||||
# CONFIG_USB is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Enable Host or Gadget support to see Inventra options
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_USB_GADGET is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# OTG and related infrastructure
 | 
			
		||||
#
 | 
			
		||||
CONFIG_MMC=y
 | 
			
		||||
CONFIG_MMC_DEBUG=y
 | 
			
		||||
CONFIG_MMC_UNSAFE_RESUME=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# MMC/SD/SDIO Card Drivers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_MMC_BLOCK=y
 | 
			
		||||
CONFIG_MMC_BLOCK_BOUNCE=y
 | 
			
		||||
CONFIG_SDIO_UART=y
 | 
			
		||||
# CONFIG_MMC_TEST is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# MMC/SD/SDIO Host Controller Drivers
 | 
			
		||||
#
 | 
			
		||||
CONFIG_MMC_SDHCI=y
 | 
			
		||||
# CONFIG_MMC_SDHCI_PLTFM is not set
 | 
			
		||||
# CONFIG_MEMSTICK is not set
 | 
			
		||||
# CONFIG_ACCESSIBILITY is not set
 | 
			
		||||
# CONFIG_NEW_LEDS is not set
 | 
			
		||||
CONFIG_RTC_LIB=y
 | 
			
		||||
# CONFIG_RTC_CLASS is not set
 | 
			
		||||
# CONFIG_DMADEVICES is not set
 | 
			
		||||
# CONFIG_AUXDISPLAY is not set
 | 
			
		||||
# CONFIG_REGULATOR is not set
 | 
			
		||||
# CONFIG_UIO is not set
 | 
			
		||||
# CONFIG_STAGING is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# File systems
 | 
			
		||||
#
 | 
			
		||||
CONFIG_EXT2_FS=y
 | 
			
		||||
# CONFIG_EXT2_FS_XATTR is not set
 | 
			
		||||
# CONFIG_EXT2_FS_XIP is not set
 | 
			
		||||
CONFIG_EXT3_FS=y
 | 
			
		||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
 | 
			
		||||
CONFIG_EXT3_FS_XATTR=y
 | 
			
		||||
CONFIG_EXT3_FS_POSIX_ACL=y
 | 
			
		||||
CONFIG_EXT3_FS_SECURITY=y
 | 
			
		||||
# CONFIG_EXT4_FS is not set
 | 
			
		||||
CONFIG_JBD=y
 | 
			
		||||
CONFIG_FS_MBCACHE=y
 | 
			
		||||
# CONFIG_REISERFS_FS is not set
 | 
			
		||||
# CONFIG_JFS_FS is not set
 | 
			
		||||
CONFIG_FS_POSIX_ACL=y
 | 
			
		||||
# CONFIG_XFS_FS is not set
 | 
			
		||||
# CONFIG_GFS2_FS is not set
 | 
			
		||||
# CONFIG_BTRFS_FS is not set
 | 
			
		||||
CONFIG_FILE_LOCKING=y
 | 
			
		||||
CONFIG_FSNOTIFY=y
 | 
			
		||||
CONFIG_DNOTIFY=y
 | 
			
		||||
CONFIG_INOTIFY=y
 | 
			
		||||
CONFIG_INOTIFY_USER=y
 | 
			
		||||
# CONFIG_QUOTA is not set
 | 
			
		||||
# CONFIG_AUTOFS_FS is not set
 | 
			
		||||
# CONFIG_AUTOFS4_FS is not set
 | 
			
		||||
# CONFIG_FUSE_FS is not set
 | 
			
		||||
CONFIG_GENERIC_ACL=y
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Caches
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_FSCACHE is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# CD-ROM/DVD Filesystems
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_ISO9660_FS is not set
 | 
			
		||||
# CONFIG_UDF_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# DOS/FAT/NT Filesystems
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_MSDOS_FS is not set
 | 
			
		||||
# CONFIG_VFAT_FS is not set
 | 
			
		||||
# CONFIG_NTFS_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Pseudo filesystems
 | 
			
		||||
#
 | 
			
		||||
CONFIG_PROC_FS=y
 | 
			
		||||
CONFIG_PROC_SYSCTL=y
 | 
			
		||||
CONFIG_PROC_PAGE_MONITOR=y
 | 
			
		||||
CONFIG_SYSFS=y
 | 
			
		||||
CONFIG_TMPFS=y
 | 
			
		||||
CONFIG_TMPFS_POSIX_ACL=y
 | 
			
		||||
# CONFIG_HUGETLB_PAGE is not set
 | 
			
		||||
# CONFIG_CONFIGFS_FS is not set
 | 
			
		||||
CONFIG_MISC_FILESYSTEMS=y
 | 
			
		||||
# CONFIG_ADFS_FS is not set
 | 
			
		||||
# CONFIG_AFFS_FS is not set
 | 
			
		||||
# CONFIG_HFS_FS is not set
 | 
			
		||||
# CONFIG_HFSPLUS_FS is not set
 | 
			
		||||
# CONFIG_BEFS_FS is not set
 | 
			
		||||
# CONFIG_BFS_FS is not set
 | 
			
		||||
# CONFIG_EFS_FS is not set
 | 
			
		||||
CONFIG_CRAMFS=y
 | 
			
		||||
# CONFIG_SQUASHFS is not set
 | 
			
		||||
# CONFIG_VXFS_FS is not set
 | 
			
		||||
# CONFIG_MINIX_FS is not set
 | 
			
		||||
# CONFIG_OMFS_FS is not set
 | 
			
		||||
# CONFIG_HPFS_FS is not set
 | 
			
		||||
# CONFIG_QNX4FS_FS is not set
 | 
			
		||||
CONFIG_ROMFS_FS=y
 | 
			
		||||
CONFIG_ROMFS_BACKED_BY_BLOCK=y
 | 
			
		||||
# CONFIG_ROMFS_BACKED_BY_MTD is not set
 | 
			
		||||
# CONFIG_ROMFS_BACKED_BY_BOTH is not set
 | 
			
		||||
CONFIG_ROMFS_ON_BLOCK=y
 | 
			
		||||
# CONFIG_SYSV_FS is not set
 | 
			
		||||
# CONFIG_UFS_FS is not set
 | 
			
		||||
# CONFIG_NILFS2_FS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Partition Types
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PARTITION_ADVANCED is not set
 | 
			
		||||
CONFIG_MSDOS_PARTITION=y
 | 
			
		||||
# CONFIG_NLS is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Kernel hacking
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_PRINTK_TIME is not set
 | 
			
		||||
CONFIG_ENABLE_WARN_DEPRECATED=y
 | 
			
		||||
CONFIG_ENABLE_MUST_CHECK=y
 | 
			
		||||
CONFIG_FRAME_WARN=1024
 | 
			
		||||
CONFIG_MAGIC_SYSRQ=y
 | 
			
		||||
# CONFIG_UNUSED_SYMBOLS is not set
 | 
			
		||||
# CONFIG_DEBUG_FS is not set
 | 
			
		||||
# CONFIG_HEADERS_CHECK is not set
 | 
			
		||||
CONFIG_DEBUG_KERNEL=y
 | 
			
		||||
# CONFIG_DEBUG_SHIRQ is not set
 | 
			
		||||
CONFIG_DETECT_SOFTLOCKUP=y
 | 
			
		||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
 | 
			
		||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 | 
			
		||||
CONFIG_DETECT_HUNG_TASK=y
 | 
			
		||||
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
 | 
			
		||||
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
 | 
			
		||||
CONFIG_SCHED_DEBUG=y
 | 
			
		||||
# CONFIG_SCHEDSTATS is not set
 | 
			
		||||
# CONFIG_TIMER_STATS is not set
 | 
			
		||||
# CONFIG_DEBUG_OBJECTS is not set
 | 
			
		||||
# CONFIG_SLUB_DEBUG_ON is not set
 | 
			
		||||
# CONFIG_SLUB_STATS is not set
 | 
			
		||||
# CONFIG_DEBUG_KMEMLEAK is not set
 | 
			
		||||
CONFIG_DEBUG_RT_MUTEXES=y
 | 
			
		||||
CONFIG_DEBUG_PI_LIST=y
 | 
			
		||||
# CONFIG_RT_MUTEX_TESTER is not set
 | 
			
		||||
CONFIG_DEBUG_SPINLOCK=y
 | 
			
		||||
CONFIG_DEBUG_MUTEXES=y
 | 
			
		||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
 | 
			
		||||
# CONFIG_PROVE_LOCKING is not set
 | 
			
		||||
# CONFIG_LOCK_STAT is not set
 | 
			
		||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
 | 
			
		||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 | 
			
		||||
# CONFIG_DEBUG_KOBJECT is not set
 | 
			
		||||
CONFIG_DEBUG_BUGVERBOSE=y
 | 
			
		||||
CONFIG_DEBUG_INFO=y
 | 
			
		||||
# CONFIG_DEBUG_VM is not set
 | 
			
		||||
# CONFIG_DEBUG_WRITECOUNT is not set
 | 
			
		||||
CONFIG_DEBUG_MEMORY_INIT=y
 | 
			
		||||
# CONFIG_DEBUG_LIST is not set
 | 
			
		||||
# CONFIG_DEBUG_SG is not set
 | 
			
		||||
# CONFIG_DEBUG_NOTIFIERS is not set
 | 
			
		||||
# CONFIG_BOOT_PRINTK_DELAY is not set
 | 
			
		||||
# CONFIG_RCU_TORTURE_TEST is not set
 | 
			
		||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
 | 
			
		||||
# CONFIG_BACKTRACE_SELF_TEST is not set
 | 
			
		||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 | 
			
		||||
# CONFIG_FAULT_INJECTION is not set
 | 
			
		||||
# CONFIG_LATENCYTOP is not set
 | 
			
		||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
 | 
			
		||||
# CONFIG_PAGE_POISONING is not set
 | 
			
		||||
CONFIG_HAVE_FUNCTION_TRACER=y
 | 
			
		||||
CONFIG_TRACING_SUPPORT=y
 | 
			
		||||
CONFIG_FTRACE=y
 | 
			
		||||
# CONFIG_FUNCTION_TRACER is not set
 | 
			
		||||
# CONFIG_SCHED_TRACER is not set
 | 
			
		||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
 | 
			
		||||
# CONFIG_BOOT_TRACER is not set
 | 
			
		||||
CONFIG_BRANCH_PROFILE_NONE=y
 | 
			
		||||
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
 | 
			
		||||
# CONFIG_PROFILE_ALL_BRANCHES is not set
 | 
			
		||||
# CONFIG_STACK_TRACER is not set
 | 
			
		||||
# CONFIG_KMEMTRACE is not set
 | 
			
		||||
# CONFIG_WORKQUEUE_TRACER is not set
 | 
			
		||||
# CONFIG_BLK_DEV_IO_TRACE is not set
 | 
			
		||||
# CONFIG_SAMPLES is not set
 | 
			
		||||
CONFIG_HAVE_ARCH_KGDB=y
 | 
			
		||||
# CONFIG_KGDB is not set
 | 
			
		||||
CONFIG_ARM_UNWIND=y
 | 
			
		||||
CONFIG_DEBUG_USER=y
 | 
			
		||||
CONFIG_DEBUG_ERRORS=y
 | 
			
		||||
# CONFIG_DEBUG_STACK_USAGE is not set
 | 
			
		||||
CONFIG_DEBUG_LL=y
 | 
			
		||||
# CONFIG_DEBUG_ICEDCC is not set
 | 
			
		||||
CONFIG_DEBUG_S3C_PORT=y
 | 
			
		||||
CONFIG_DEBUG_S3C_UART=0
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Security options
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_KEYS is not set
 | 
			
		||||
# CONFIG_SECURITY is not set
 | 
			
		||||
# CONFIG_SECURITYFS is not set
 | 
			
		||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 | 
			
		||||
# CONFIG_CRYPTO is not set
 | 
			
		||||
# CONFIG_BINARY_PRINTF is not set
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Library routines
 | 
			
		||||
#
 | 
			
		||||
CONFIG_BITREVERSE=y
 | 
			
		||||
CONFIG_GENERIC_FIND_LAST_BIT=y
 | 
			
		||||
# CONFIG_CRC_CCITT is not set
 | 
			
		||||
# CONFIG_CRC16 is not set
 | 
			
		||||
# CONFIG_CRC_T10DIF is not set
 | 
			
		||||
# CONFIG_CRC_ITU_T is not set
 | 
			
		||||
CONFIG_CRC32=y
 | 
			
		||||
# CONFIG_CRC7 is not set
 | 
			
		||||
# CONFIG_LIBCRC32C is not set
 | 
			
		||||
CONFIG_ZLIB_INFLATE=y
 | 
			
		||||
CONFIG_DECOMPRESS_GZIP=y
 | 
			
		||||
CONFIG_DECOMPRESS_BZIP2=y
 | 
			
		||||
CONFIG_DECOMPRESS_LZMA=y
 | 
			
		||||
CONFIG_HAS_IOMEM=y
 | 
			
		||||
CONFIG_HAS_DMA=y
 | 
			
		||||
| 
						 | 
				
			
			@ -74,23 +74,56 @@
 | 
			
		|||
 * Enable and disable interrupts
 | 
			
		||||
 */
 | 
			
		||||
#if __LINUX_ARM_ARCH__ >= 6
 | 
			
		||||
	.macro	disable_irq
 | 
			
		||||
	.macro	disable_irq_notrace
 | 
			
		||||
	cpsid	i
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro	enable_irq
 | 
			
		||||
	.macro	enable_irq_notrace
 | 
			
		||||
	cpsie	i
 | 
			
		||||
	.endm
 | 
			
		||||
#else
 | 
			
		||||
	.macro	disable_irq
 | 
			
		||||
	.macro	disable_irq_notrace
 | 
			
		||||
	msr	cpsr_c, #PSR_I_BIT | SVC_MODE
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro	enable_irq
 | 
			
		||||
	.macro	enable_irq_notrace
 | 
			
		||||
	msr	cpsr_c, #SVC_MODE
 | 
			
		||||
	.endm
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	.macro asm_trace_hardirqs_off
 | 
			
		||||
#if defined(CONFIG_TRACE_IRQFLAGS)
 | 
			
		||||
	stmdb   sp!, {r0-r3, ip, lr}
 | 
			
		||||
	bl	trace_hardirqs_off
 | 
			
		||||
	ldmia	sp!, {r0-r3, ip, lr}
 | 
			
		||||
#endif
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro asm_trace_hardirqs_on_cond, cond
 | 
			
		||||
#if defined(CONFIG_TRACE_IRQFLAGS)
 | 
			
		||||
	/*
 | 
			
		||||
	 * actually the registers should be pushed and pop'd conditionally, but
 | 
			
		||||
	 * after bl the flags are certainly clobbered
 | 
			
		||||
	 */
 | 
			
		||||
	stmdb   sp!, {r0-r3, ip, lr}
 | 
			
		||||
	bl\cond	trace_hardirqs_on
 | 
			
		||||
	ldmia	sp!, {r0-r3, ip, lr}
 | 
			
		||||
#endif
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro asm_trace_hardirqs_on
 | 
			
		||||
	asm_trace_hardirqs_on_cond al
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro disable_irq
 | 
			
		||||
	disable_irq_notrace
 | 
			
		||||
	asm_trace_hardirqs_off
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro enable_irq
 | 
			
		||||
	asm_trace_hardirqs_on
 | 
			
		||||
	enable_irq_notrace
 | 
			
		||||
	.endm
 | 
			
		||||
/*
 | 
			
		||||
 * Save the current IRQ state and disable IRQs.  Note that this macro
 | 
			
		||||
 * assumes FIQs are enabled, and that the processor is in SVC mode.
 | 
			
		||||
| 
						 | 
				
			
			@ -104,10 +137,16 @@
 | 
			
		|||
 * Restore interrupt state previously stored in a register.  We don't
 | 
			
		||||
 * guarantee that this will preserve the flags.
 | 
			
		||||
 */
 | 
			
		||||
	.macro	restore_irqs, oldcpsr
 | 
			
		||||
	.macro	restore_irqs_notrace, oldcpsr
 | 
			
		||||
	msr	cpsr_c, \oldcpsr
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro restore_irqs, oldcpsr
 | 
			
		||||
	tst	\oldcpsr, #PSR_I_BIT
 | 
			
		||||
	asm_trace_hardirqs_on_cond eq
 | 
			
		||||
	restore_irqs_notrace \oldcpsr
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
#define USER(x...)				\
 | 
			
		||||
9999:	x;					\
 | 
			
		||||
	.section __ex_table,"a";		\
 | 
			
		||||
| 
						 | 
				
			
			@ -127,3 +166,87 @@
 | 
			
		|||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_THUMB2_KERNEL
 | 
			
		||||
	.macro	setmode, mode, reg
 | 
			
		||||
	mov	\reg, #\mode
 | 
			
		||||
	msr	cpsr_c, \reg
 | 
			
		||||
	.endm
 | 
			
		||||
#else
 | 
			
		||||
	.macro	setmode, mode, reg
 | 
			
		||||
	msr	cpsr_c, #\mode
 | 
			
		||||
	.endm
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * STRT/LDRT access macros with ARM and Thumb-2 variants
 | 
			
		||||
 */
 | 
			
		||||
#ifdef CONFIG_THUMB2_KERNEL
 | 
			
		||||
 | 
			
		||||
	.macro	usraccoff, instr, reg, ptr, inc, off, cond, abort
 | 
			
		||||
9999:
 | 
			
		||||
	.if	\inc == 1
 | 
			
		||||
	\instr\cond\()bt \reg, [\ptr, #\off]
 | 
			
		||||
	.elseif	\inc == 4
 | 
			
		||||
	\instr\cond\()t \reg, [\ptr, #\off]
 | 
			
		||||
	.else
 | 
			
		||||
	.error	"Unsupported inc macro argument"
 | 
			
		||||
	.endif
 | 
			
		||||
 | 
			
		||||
	.section __ex_table,"a"
 | 
			
		||||
	.align	3
 | 
			
		||||
	.long	9999b, \abort
 | 
			
		||||
	.previous
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro	usracc, instr, reg, ptr, inc, cond, rept, abort
 | 
			
		||||
	@ explicit IT instruction needed because of the label
 | 
			
		||||
	@ introduced by the USER macro
 | 
			
		||||
	.ifnc	\cond,al
 | 
			
		||||
	.if	\rept == 1
 | 
			
		||||
	itt	\cond
 | 
			
		||||
	.elseif	\rept == 2
 | 
			
		||||
	ittt	\cond
 | 
			
		||||
	.else
 | 
			
		||||
	.error	"Unsupported rept macro argument"
 | 
			
		||||
	.endif
 | 
			
		||||
	.endif
 | 
			
		||||
 | 
			
		||||
	@ Slightly optimised to avoid incrementing the pointer twice
 | 
			
		||||
	usraccoff \instr, \reg, \ptr, \inc, 0, \cond, \abort
 | 
			
		||||
	.if	\rept == 2
 | 
			
		||||
	usraccoff \instr, \reg, \ptr, \inc, 4, \cond, \abort
 | 
			
		||||
	.endif
 | 
			
		||||
 | 
			
		||||
	add\cond \ptr, #\rept * \inc
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
#else	/* !CONFIG_THUMB2_KERNEL */
 | 
			
		||||
 | 
			
		||||
	.macro	usracc, instr, reg, ptr, inc, cond, rept, abort
 | 
			
		||||
	.rept	\rept
 | 
			
		||||
9999:
 | 
			
		||||
	.if	\inc == 1
 | 
			
		||||
	\instr\cond\()bt \reg, [\ptr], #\inc
 | 
			
		||||
	.elseif	\inc == 4
 | 
			
		||||
	\instr\cond\()t \reg, [\ptr], #\inc
 | 
			
		||||
	.else
 | 
			
		||||
	.error	"Unsupported inc macro argument"
 | 
			
		||||
	.endif
 | 
			
		||||
 | 
			
		||||
	.section __ex_table,"a"
 | 
			
		||||
	.align	3
 | 
			
		||||
	.long	9999b, \abort
 | 
			
		||||
	.previous
 | 
			
		||||
	.endr
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_THUMB2_KERNEL */
 | 
			
		||||
 | 
			
		||||
	.macro	strusr, reg, ptr, inc, cond=al, rept=1, abort=9001f
 | 
			
		||||
	usracc	str, \reg, \ptr, \inc, \cond, \rept, \abort
 | 
			
		||||
	.endm
 | 
			
		||||
 | 
			
		||||
	.macro	ldrusr, reg, ptr, inc, cond=al, rept=1, abort=9001f
 | 
			
		||||
	usracc	ldr, \reg, \ptr, \inc, \cond, \rept, \abort
 | 
			
		||||
	.endm
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,6 +55,9 @@ typedef struct user_fp elf_fpregset_t;
 | 
			
		|||
#define R_ARM_MOVW_ABS_NC	43
 | 
			
		||||
#define R_ARM_MOVT_ABS		44
 | 
			
		||||
 | 
			
		||||
#define R_ARM_THM_CALL		10
 | 
			
		||||
#define R_ARM_THM_JUMP24	30
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These are used to set parameters in the core dumps.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,8 +7,43 @@
 | 
			
		|||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
extern void mcount(void);
 | 
			
		||||
extern void __gnu_mcount_nc(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
 | 
			
		||||
/*
 | 
			
		||||
 * return_address uses walk_stackframe to do it's work.  If both
 | 
			
		||||
 * CONFIG_FRAME_POINTER=y and CONFIG_ARM_UNWIND=y walk_stackframe uses unwind
 | 
			
		||||
 * information.  For this to work in the function tracer many functions would
 | 
			
		||||
 * have to be marked with __notrace.  So for now just depend on
 | 
			
		||||
 * !CONFIG_ARM_UNWIND.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void *return_address(unsigned int);
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
extern inline void *return_address(unsigned int level)
 | 
			
		||||
{
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define HAVE_ARCH_CALLER_ADDR
 | 
			
		||||
 | 
			
		||||
#define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
 | 
			
		||||
#define CALLER_ADDR1 ((unsigned long)return_address(1))
 | 
			
		||||
#define CALLER_ADDR2 ((unsigned long)return_address(2))
 | 
			
		||||
#define CALLER_ADDR3 ((unsigned long)return_address(3))
 | 
			
		||||
#define CALLER_ADDR4 ((unsigned long)return_address(4))
 | 
			
		||||
#define CALLER_ADDR5 ((unsigned long)return_address(5))
 | 
			
		||||
#define CALLER_ADDR6 ((unsigned long)return_address(6))
 | 
			
		||||
 | 
			
		||||
#endif /* ifndef __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_ARM_FTRACE */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -99,6 +99,7 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
 | 
			
		|||
	__asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n"
 | 
			
		||||
	"1:	ldrt	%0, [%3]\n"
 | 
			
		||||
	"	teq	%0, %1\n"
 | 
			
		||||
	"	it	eq	@ explicit IT needed for the 2b label\n"
 | 
			
		||||
	"2:	streqt	%2, [%3]\n"
 | 
			
		||||
	"3:\n"
 | 
			
		||||
	"	.section __ex_table,\"a\"\n"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,8 @@ struct mmc_platform_data {
 | 
			
		|||
	unsigned int ocr_mask;			/* available voltages */
 | 
			
		||||
	u32 (*translate_vdd)(struct device *, unsigned int);
 | 
			
		||||
	unsigned int (*status)(struct device *);
 | 
			
		||||
	int	gpio_wp;
 | 
			
		||||
	int	gpio_cd;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,7 +44,13 @@
 | 
			
		|||
 * The module space lives between the addresses given by TASK_SIZE
 | 
			
		||||
 * and PAGE_OFFSET - it must be within 32MB of the kernel text.
 | 
			
		||||
 */
 | 
			
		||||
#ifndef CONFIG_THUMB2_KERNEL
 | 
			
		||||
#define MODULES_VADDR		(PAGE_OFFSET - 16*1024*1024)
 | 
			
		||||
#else
 | 
			
		||||
/* smaller range for Thumb-2 symbols relocation (2^24)*/
 | 
			
		||||
#define MODULES_VADDR		(PAGE_OFFSET - 8*1024*1024)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if TASK_SIZE > MODULES_VADDR
 | 
			
		||||
#error Top of user space clashes with start of module space
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +218,6 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
 | 
			
		|||
 *
 | 
			
		||||
 *  page_to_pfn(page)	convert a struct page * to a PFN number
 | 
			
		||||
 *  pfn_to_page(pfn)	convert a _valid_ PFN number to struct page *
 | 
			
		||||
 *  pfn_valid(pfn)	indicates whether a PFN number is valid
 | 
			
		||||
 *
 | 
			
		||||
 *  virt_to_page(k)	convert a _valid_ virtual address to struct page *
 | 
			
		||||
 *  virt_addr_valid(k)	indicates whether a virtual address is valid
 | 
			
		||||
| 
						 | 
				
			
			@ -221,10 +226,6 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
 | 
			
		|||
 | 
			
		||||
#define ARCH_PFN_OFFSET		PHYS_PFN_OFFSET
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_SPARSEMEM
 | 
			
		||||
#define pfn_valid(pfn)		((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
 | 
			
		||||
#define virt_addr_valid(kaddr)	((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -241,18 +242,6 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
 | 
			
		|||
#define arch_pfn_to_nid(pfn)	PFN_TO_NID(pfn)
 | 
			
		||||
#define arch_local_page_offset(pfn, nid) LOCAL_MAP_NR((pfn) << PAGE_SHIFT)
 | 
			
		||||
 | 
			
		||||
#define pfn_valid(pfn)						\
 | 
			
		||||
	({							\
 | 
			
		||||
		unsigned int nid = PFN_TO_NID(pfn);		\
 | 
			
		||||
		int valid = nid < MAX_NUMNODES;			\
 | 
			
		||||
		if (valid) {					\
 | 
			
		||||
			pg_data_t *node = NODE_DATA(nid);	\
 | 
			
		||||
			valid = (pfn - node->node_start_pfn) <	\
 | 
			
		||||
				node->node_spanned_pages;	\
 | 
			
		||||
		}						\
 | 
			
		||||
		valid;						\
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
#define virt_to_page(kaddr)					\
 | 
			
		||||
	(ADDR_TO_MAPBASE(kaddr) + LOCAL_MAP_NR(kaddr))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,8 +62,10 @@ static inline void check_context(struct mm_struct *mm)
 | 
			
		|||
 | 
			
		||||
static inline void check_context(struct mm_struct *mm)
 | 
			
		||||
{
 | 
			
		||||
#ifdef CONFIG_MMU
 | 
			
		||||
	if (unlikely(mm->context.kvm_seq != init_mm.context.kvm_seq))
 | 
			
		||||
		__check_kvm_seq(mm);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define init_new_context(tsk,mm)	0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,4 @@ typedef unsigned long pgprot_t;
 | 
			
		|||
#define __pmd(x)        (x)
 | 
			
		||||
#define __pgprot(x)     (x)
 | 
			
		||||
 | 
			
		||||
extern unsigned long memory_start;
 | 
			
		||||
extern unsigned long memory_end;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -194,6 +194,10 @@ typedef unsigned long pgprot_t;
 | 
			
		|||
 | 
			
		||||
typedef struct page *pgtable_t;
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_SPARSEMEM
 | 
			
		||||
extern int pfn_valid(unsigned long);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <asm/memory.h>
 | 
			
		||||
 | 
			
		||||
#endif /* !__ASSEMBLY__ */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,8 @@ extern void free_pgd_slow(struct mm_struct *mm, pgd_t *pgd);
 | 
			
		|||
#define pgd_alloc(mm)			get_pgd_slow(mm)
 | 
			
		||||
#define pgd_free(mm, pgd)		free_pgd_slow(mm, pgd)
 | 
			
		||||
 | 
			
		||||
#define PGALLOC_GFP	(GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Allocate one PTE table.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +59,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
 | 
			
		|||
{
 | 
			
		||||
	pte_t *pte;
 | 
			
		||||
 | 
			
		||||
	pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
 | 
			
		||||
	pte = (pte_t *)__get_free_page(PGALLOC_GFP);
 | 
			
		||||
	if (pte) {
 | 
			
		||||
		clean_dcache_area(pte, sizeof(pte_t) * PTRS_PER_PTE);
 | 
			
		||||
		pte += PTRS_PER_PTE;
 | 
			
		||||
| 
						 | 
				
			
			@ -71,10 +73,16 @@ pte_alloc_one(struct mm_struct *mm, unsigned long addr)
 | 
			
		|||
{
 | 
			
		||||
	struct page *pte;
 | 
			
		||||
 | 
			
		||||
	pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
 | 
			
		||||
#ifdef CONFIG_HIGHPTE
 | 
			
		||||
	pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0);
 | 
			
		||||
#else
 | 
			
		||||
	pte = alloc_pages(PGALLOC_GFP, 0);
 | 
			
		||||
#endif
 | 
			
		||||
	if (pte) {
 | 
			
		||||
		if (!PageHighMem(pte)) {
 | 
			
		||||
			void *page = page_address(pte);
 | 
			
		||||
			clean_dcache_area(page, sizeof(pte_t) * PTRS_PER_PTE);
 | 
			
		||||
		}
 | 
			
		||||
		pgtable_page_ctor(pte);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,10 +162,8 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
 | 
			
		|||
 * entries are stored 1024 bytes below.
 | 
			
		||||
 */
 | 
			
		||||
#define L_PTE_PRESENT		(1 << 0)
 | 
			
		||||
#define L_PTE_FILE		(1 << 1)	/* only when !PRESENT */
 | 
			
		||||
#define L_PTE_YOUNG		(1 << 1)
 | 
			
		||||
#define L_PTE_BUFFERABLE	(1 << 2)	/* obsolete, matches PTE */
 | 
			
		||||
#define L_PTE_CACHEABLE		(1 << 3)	/* obsolete, matches PTE */
 | 
			
		||||
#define L_PTE_FILE		(1 << 2)	/* only when !PRESENT */
 | 
			
		||||
#define L_PTE_DIRTY		(1 << 6)
 | 
			
		||||
#define L_PTE_WRITE		(1 << 7)
 | 
			
		||||
#define L_PTE_USER		(1 << 8)
 | 
			
		||||
| 
						 | 
				
			
			@ -264,10 +262,19 @@ extern struct page *empty_zero_page;
 | 
			
		|||
#define pte_clear(mm,addr,ptep)	set_pte_ext(ptep, __pte(0), 0)
 | 
			
		||||
#define pte_page(pte)		(pfn_to_page(pte_pfn(pte)))
 | 
			
		||||
#define pte_offset_kernel(dir,addr)	(pmd_page_vaddr(*(dir)) + __pte_index(addr))
 | 
			
		||||
#define pte_offset_map(dir,addr)	(pmd_page_vaddr(*(dir)) + __pte_index(addr))
 | 
			
		||||
#define pte_offset_map_nested(dir,addr)	(pmd_page_vaddr(*(dir)) + __pte_index(addr))
 | 
			
		||||
#define pte_unmap(pte)		do { } while (0)
 | 
			
		||||
#define pte_unmap_nested(pte)	do { } while (0)
 | 
			
		||||
 | 
			
		||||
#define pte_offset_map(dir,addr)	(__pte_map(dir, KM_PTE0) + __pte_index(addr))
 | 
			
		||||
#define pte_offset_map_nested(dir,addr)	(__pte_map(dir, KM_PTE1) + __pte_index(addr))
 | 
			
		||||
#define pte_unmap(pte)			__pte_unmap(pte, KM_PTE0)
 | 
			
		||||
#define pte_unmap_nested(pte)		__pte_unmap(pte, KM_PTE1)
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_HIGHPTE
 | 
			
		||||
#define __pte_map(dir,km)	pmd_page_vaddr(*(dir))
 | 
			
		||||
#define __pte_unmap(pte,km)	do { } while (0)
 | 
			
		||||
#else
 | 
			
		||||
#define __pte_map(dir,km)	((pte_t *)kmap_atomic(pmd_page(*(dir)), km) + PTRS_PER_PTE)
 | 
			
		||||
#define __pte_unmap(pte,km)	kunmap_atomic((pte - PTRS_PER_PTE), km)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define set_pte_ext(ptep,pte,ext) cpu_set_pte_ext(ptep,pte,ext)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -381,13 +388,13 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
 | 
			
		|||
 *
 | 
			
		||||
 *   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | 
			
		||||
 *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | 
			
		||||
 *   <--------------- offset --------------------> <--- type --> 0 0
 | 
			
		||||
 *   <--------------- offset --------------------> <- type --> 0 0 0
 | 
			
		||||
 *
 | 
			
		||||
 * This gives us up to 127 swap files and 32GB per swap file.  Note that
 | 
			
		||||
 * This gives us up to 63 swap files and 32GB per swap file.  Note that
 | 
			
		||||
 * the offset field is always non-zero.
 | 
			
		||||
 */
 | 
			
		||||
#define __SWP_TYPE_SHIFT	2
 | 
			
		||||
#define __SWP_TYPE_BITS		7
 | 
			
		||||
#define __SWP_TYPE_SHIFT	3
 | 
			
		||||
#define __SWP_TYPE_BITS		6
 | 
			
		||||
#define __SWP_TYPE_MASK		((1 << __SWP_TYPE_BITS) - 1)
 | 
			
		||||
#define __SWP_OFFSET_SHIFT	(__SWP_TYPE_BITS + __SWP_TYPE_SHIFT)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -411,13 +418,13 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
 | 
			
		|||
 *
 | 
			
		||||
 *   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | 
			
		||||
 *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | 
			
		||||
 *   <------------------------ offset -------------------------> 1 0
 | 
			
		||||
 *   <----------------------- offset ------------------------> 1 0 0
 | 
			
		||||
 */
 | 
			
		||||
#define pte_file(pte)		(pte_val(pte) & L_PTE_FILE)
 | 
			
		||||
#define pte_to_pgoff(x)		(pte_val(x) >> 2)
 | 
			
		||||
#define pgoff_to_pte(x)		__pte(((x) << 2) | L_PTE_FILE)
 | 
			
		||||
#define pte_to_pgoff(x)		(pte_val(x) >> 3)
 | 
			
		||||
#define pgoff_to_pte(x)		__pte(((x) << 3) | L_PTE_FILE)
 | 
			
		||||
 | 
			
		||||
#define PTE_FILE_MAX_BITS	30
 | 
			
		||||
#define PTE_FILE_MAX_BITS	29
 | 
			
		||||
 | 
			
		||||
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
 | 
			
		||||
/* FIXME: this is not correct */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,6 +82,14 @@
 | 
			
		|||
#define PSR_ENDSTATE	0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
 * These are 'magic' values for PTRACE_PEEKUSR that return info about where a
 | 
			
		||||
 * process is located in memory.
 | 
			
		||||
 */
 | 
			
		||||
#define PT_TEXT_ADDR		0x10000
 | 
			
		||||
#define PT_DATA_ADDR		0x10004
 | 
			
		||||
#define PT_TEXT_END_ADDR	0x10008
 | 
			
		||||
 | 
			
		||||
#ifndef __ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,4 +57,7 @@
 | 
			
		|||
#define SO_TIMESTAMPING		37
 | 
			
		||||
#define SCM_TIMESTAMPING	SO_TIMESTAMPING
 | 
			
		||||
 | 
			
		||||
#define SO_PROTOCOL		38
 | 
			
		||||
#define SO_DOMAIN		39
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_SOCKET_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -130,23 +130,28 @@ extern void vfp_sync_state(struct thread_info *thread);
 | 
			
		|||
 *  TIF_SYSCALL_TRACE	- syscall trace active
 | 
			
		||||
 *  TIF_SIGPENDING	- signal pending
 | 
			
		||||
 *  TIF_NEED_RESCHED	- rescheduling necessary
 | 
			
		||||
 *  TIF_NOTIFY_RESUME	- callback before returning to user
 | 
			
		||||
 *  TIF_USEDFPU		- FPU was used by this task this quantum (SMP)
 | 
			
		||||
 *  TIF_POLLING_NRFLAG	- true if poll_idle() is polling TIF_NEED_RESCHED
 | 
			
		||||
 */
 | 
			
		||||
#define TIF_SIGPENDING		0
 | 
			
		||||
#define TIF_NEED_RESCHED	1
 | 
			
		||||
#define TIF_NOTIFY_RESUME	2	/* callback before returning to user */
 | 
			
		||||
#define TIF_SYSCALL_TRACE	8
 | 
			
		||||
#define TIF_POLLING_NRFLAG	16
 | 
			
		||||
#define TIF_USING_IWMMXT	17
 | 
			
		||||
#define TIF_MEMDIE		18
 | 
			
		||||
#define TIF_FREEZE		19
 | 
			
		||||
#define TIF_RESTORE_SIGMASK	20
 | 
			
		||||
 | 
			
		||||
#define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
 | 
			
		||||
#define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
 | 
			
		||||
#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME)
 | 
			
		||||
#define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
 | 
			
		||||
#define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)
 | 
			
		||||
#define _TIF_USING_IWMMXT	(1 << TIF_USING_IWMMXT)
 | 
			
		||||
#define _TIF_FREEZE		(1 << TIF_FREEZE)
 | 
			
		||||
#define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Change these and you break ASM code in entry-common.S
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@
 | 
			
		|||
#include <asm/memory.h>
 | 
			
		||||
#include <asm/domain.h>
 | 
			
		||||
#include <asm/system.h>
 | 
			
		||||
#include <asm/unified.h>
 | 
			
		||||
 | 
			
		||||
#define VERIFY_READ 0
 | 
			
		||||
#define VERIFY_WRITE 1
 | 
			
		||||
| 
						 | 
				
			
			@ -365,8 +366,10 @@ do {									\
 | 
			
		|||
 | 
			
		||||
#define __put_user_asm_dword(x,__pu_addr,err)			\
 | 
			
		||||
	__asm__ __volatile__(					\
 | 
			
		||||
	"1:	strt	" __reg_oper1 ", [%1], #4\n"		\
 | 
			
		||||
	"2:	strt	" __reg_oper0 ", [%1]\n"		\
 | 
			
		||||
 ARM(	"1:	strt	" __reg_oper1 ", [%1], #4\n"	)	\
 | 
			
		||||
 ARM(	"2:	strt	" __reg_oper0 ", [%1]\n"	)	\
 | 
			
		||||
 THUMB(	"1:	strt	" __reg_oper1 ", [%1]\n"	)	\
 | 
			
		||||
 THUMB(	"2:	strt	" __reg_oper0 ", [%1, #4]\n"	)	\
 | 
			
		||||
	"3:\n"							\
 | 
			
		||||
	"	.section .fixup,\"ax\"\n"			\
 | 
			
		||||
	"	.align	2\n"					\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										126
									
								
								arch/arm/include/asm/unified.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								arch/arm/include/asm/unified.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,126 @@
 | 
			
		|||
/*
 | 
			
		||||
 * include/asm-arm/unified.h - Unified Assembler Syntax helper macros
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2008 ARM Limited
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License version 2 as
 | 
			
		||||
 * published by the Free Software Foundation.
 | 
			
		||||
 *
 | 
			
		||||
 * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __ASM_UNIFIED_H
 | 
			
		||||
#define __ASM_UNIFIED_H
 | 
			
		||||
 | 
			
		||||
#if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
 | 
			
		||||
	.syntax unified
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_THUMB2_KERNEL
 | 
			
		||||
 | 
			
		||||
#if __GNUC__ < 4
 | 
			
		||||
#error Thumb-2 kernel requires gcc >= 4
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* The CPSR bit describing the instruction set (Thumb) */
 | 
			
		||||
#define PSR_ISETSTATE	PSR_T_BIT
 | 
			
		||||
 | 
			
		||||
#define ARM(x...)
 | 
			
		||||
#define THUMB(x...)	x
 | 
			
		||||
#define W(instr)	instr.w
 | 
			
		||||
#define BSYM(sym)	sym + 1
 | 
			
		||||
 | 
			
		||||
#else	/* !CONFIG_THUMB2_KERNEL */
 | 
			
		||||
 | 
			
		||||
/* The CPSR bit describing the instruction set (ARM) */
 | 
			
		||||
#define PSR_ISETSTATE	0
 | 
			
		||||
 | 
			
		||||
#define ARM(x...)	x
 | 
			
		||||
#define THUMB(x...)
 | 
			
		||||
#define W(instr)	instr
 | 
			
		||||
#define BSYM(sym)	sym
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_THUMB2_KERNEL */
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_ARM_ASM_UNIFIED
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * If the unified assembly syntax isn't used (in ARM mode), these
 | 
			
		||||
 * macros expand to an empty string
 | 
			
		||||
 */
 | 
			
		||||
#ifdef __ASSEMBLY__
 | 
			
		||||
	.macro	it, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	itt, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	ite, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	ittt, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	itte, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	itet, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	itee, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	itttt, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	ittte, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	ittet, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	ittee, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	itett, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	itete, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	iteet, cond
 | 
			
		||||
	.endm
 | 
			
		||||
	.macro	iteee, cond
 | 
			
		||||
	.endm
 | 
			
		||||
#else	/* !__ASSEMBLY__ */
 | 
			
		||||
__asm__(
 | 
			
		||||
"	.macro	it, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	itt, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	ite, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	ittt, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	itte, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	itet, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	itee, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	itttt, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	ittte, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	ittet, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	ittee, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	itett, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	itete, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	iteet, cond\n"
 | 
			
		||||
"	.endm\n"
 | 
			
		||||
"	.macro	iteee, cond\n"
 | 
			
		||||
"	.endm\n");
 | 
			
		||||
#endif	/* __ASSEMBLY__ */
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_ARM_ASM_UNIFIED */
 | 
			
		||||
 | 
			
		||||
#endif	/* !__ASM_UNIFIED_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -360,8 +360,8 @@
 | 
			
		|||
#define __NR_readlinkat			(__NR_SYSCALL_BASE+332)
 | 
			
		||||
#define __NR_fchmodat			(__NR_SYSCALL_BASE+333)
 | 
			
		||||
#define __NR_faccessat			(__NR_SYSCALL_BASE+334)
 | 
			
		||||
					/* 335 for pselect6 */
 | 
			
		||||
					/* 336 for ppoll */
 | 
			
		||||
#define __NR_pselect6			(__NR_SYSCALL_BASE+335)
 | 
			
		||||
#define __NR_ppoll			(__NR_SYSCALL_BASE+336)
 | 
			
		||||
#define __NR_unshare			(__NR_SYSCALL_BASE+337)
 | 
			
		||||
#define __NR_set_robust_list		(__NR_SYSCALL_BASE+338)
 | 
			
		||||
#define __NR_get_robust_list		(__NR_SYSCALL_BASE+339)
 | 
			
		||||
| 
						 | 
				
			
			@ -372,7 +372,7 @@
 | 
			
		|||
#define __NR_vmsplice			(__NR_SYSCALL_BASE+343)
 | 
			
		||||
#define __NR_move_pages			(__NR_SYSCALL_BASE+344)
 | 
			
		||||
#define __NR_getcpu			(__NR_SYSCALL_BASE+345)
 | 
			
		||||
					/* 346 for epoll_pwait */
 | 
			
		||||
#define __NR_epoll_pwait		(__NR_SYSCALL_BASE+346)
 | 
			
		||||
#define __NR_kexec_load			(__NR_SYSCALL_BASE+347)
 | 
			
		||||
#define __NR_utimensat			(__NR_SYSCALL_BASE+348)
 | 
			
		||||
#define __NR_signalfd			(__NR_SYSCALL_BASE+349)
 | 
			
		||||
| 
						 | 
				
			
			@ -432,6 +432,7 @@
 | 
			
		|||
#define __ARCH_WANT_SYS_SIGPENDING
 | 
			
		||||
#define __ARCH_WANT_SYS_SIGPROCMASK
 | 
			
		||||
#define __ARCH_WANT_SYS_RT_SIGACTION
 | 
			
		||||
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
 | 
			
		||||
 | 
			
		||||
#if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT)
 | 
			
		||||
#define __ARCH_WANT_SYS_TIME
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,10 +8,12 @@ ifdef CONFIG_DYNAMIC_FTRACE
 | 
			
		|||
CFLAGS_REMOVE_ftrace.o = -pg
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CFLAGS_REMOVE_return_address.o = -pg
 | 
			
		||||
 | 
			
		||||
# Object file lists.
 | 
			
		||||
 | 
			
		||||
obj-y		:= compat.o elf.o entry-armv.o entry-common.o irq.o \
 | 
			
		||||
		   process.o ptrace.o setup.o signal.o \
 | 
			
		||||
		   process.o ptrace.o return_address.o setup.o signal.o \
 | 
			
		||||
		   sys_arm.o stacktrace.o time.o traps.o
 | 
			
		||||
 | 
			
		||||
obj-$(CONFIG_ISA_DMA_API)	+= dma.o
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -186,4 +186,5 @@ EXPORT_SYMBOL(_find_next_bit_be);
 | 
			
		|||
 | 
			
		||||
#ifdef CONFIG_FUNCTION_TRACER
 | 
			
		||||
EXPORT_SYMBOL(mcount);
 | 
			
		||||
EXPORT_SYMBOL(__gnu_mcount_nc);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,7 @@
 | 
			
		|||
		CALL(sys_ni_syscall)		/* was sys_ssetmask */
 | 
			
		||||
/* 70 */	CALL(sys_setreuid16)
 | 
			
		||||
		CALL(sys_setregid16)
 | 
			
		||||
		CALL(sys_sigsuspend_wrapper)
 | 
			
		||||
		CALL(sys_sigsuspend)
 | 
			
		||||
		CALL(sys_sigpending)
 | 
			
		||||
		CALL(sys_sethostname)
 | 
			
		||||
/* 75 */	CALL(sys_setrlimit)
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +188,7 @@
 | 
			
		|||
		CALL(sys_rt_sigpending)
 | 
			
		||||
		CALL(sys_rt_sigtimedwait)
 | 
			
		||||
		CALL(sys_rt_sigqueueinfo)
 | 
			
		||||
		CALL(sys_rt_sigsuspend_wrapper)
 | 
			
		||||
		CALL(sys_rt_sigsuspend)
 | 
			
		||||
/* 180 */	CALL(ABI(sys_pread64, sys_oabi_pread64))
 | 
			
		||||
		CALL(ABI(sys_pwrite64, sys_oabi_pwrite64))
 | 
			
		||||
		CALL(sys_chown16)
 | 
			
		||||
| 
						 | 
				
			
			@ -344,8 +344,8 @@
 | 
			
		|||
		CALL(sys_readlinkat)
 | 
			
		||||
		CALL(sys_fchmodat)
 | 
			
		||||
		CALL(sys_faccessat)
 | 
			
		||||
/* 335 */	CALL(sys_ni_syscall)		/* eventually pselect6 */
 | 
			
		||||
		CALL(sys_ni_syscall)		/* eventually ppoll */
 | 
			
		||||
/* 335 */	CALL(sys_pselect6)
 | 
			
		||||
		CALL(sys_ppoll)
 | 
			
		||||
		CALL(sys_unshare)
 | 
			
		||||
		CALL(sys_set_robust_list)
 | 
			
		||||
		CALL(sys_get_robust_list)
 | 
			
		||||
| 
						 | 
				
			
			@ -355,7 +355,7 @@
 | 
			
		|||
		CALL(sys_vmsplice)
 | 
			
		||||
		CALL(sys_move_pages)
 | 
			
		||||
/* 345 */	CALL(sys_getcpu)
 | 
			
		||||
		CALL(sys_ni_syscall)		/* eventually epoll_pwait */
 | 
			
		||||
		CALL(sys_epoll_pwait)
 | 
			
		||||
		CALL(sys_kexec_load)
 | 
			
		||||
		CALL(sys_utimensat)
 | 
			
		||||
		CALL(sys_signalfd)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue