diff options
Diffstat (limited to 'Documentation')
48 files changed, 2027 insertions, 492 deletions
diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX index f7923a42e76..a82a113b4a4 100644 --- a/Documentation/00-INDEX +++ b/Documentation/00-INDEX | |||
@@ -25,8 +25,6 @@ DMA-API.txt | |||
25 | - DMA API, pci_ API & extensions for non-consistent memory machines. | 25 | - DMA API, pci_ API & extensions for non-consistent memory machines. |
26 | DMA-ISA-LPC.txt | 26 | DMA-ISA-LPC.txt |
27 | - How to do DMA with ISA (and LPC) devices. | 27 | - How to do DMA with ISA (and LPC) devices. |
28 | DMA-mapping.txt | ||
29 | - info for PCI drivers using DMA portably across all platforms. | ||
30 | DocBook/ | 28 | DocBook/ |
31 | - directory with DocBook templates etc. for kernel documentation. | 29 | - directory with DocBook templates etc. for kernel documentation. |
32 | HOWTO | 30 | HOWTO |
@@ -43,8 +41,6 @@ ManagementStyle | |||
43 | - how to (attempt to) manage kernel hackers. | 41 | - how to (attempt to) manage kernel hackers. |
44 | MSI-HOWTO.txt | 42 | MSI-HOWTO.txt |
45 | - the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ. | 43 | - the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ. |
46 | PCIEBUS-HOWTO.txt | ||
47 | - a guide describing the PCI Express Port Bus driver. | ||
48 | RCU/ | 44 | RCU/ |
49 | - directory with info on RCU (read-copy update). | 45 | - directory with info on RCU (read-copy update). |
50 | README.DAC960 | 46 | README.DAC960 |
@@ -285,12 +281,6 @@ parport.txt | |||
285 | - how to use the parallel-port driver. | 281 | - how to use the parallel-port driver. |
286 | parport-lowlevel.txt | 282 | parport-lowlevel.txt |
287 | - description and usage of the low level parallel port functions. | 283 | - description and usage of the low level parallel port functions. |
288 | pci-error-recovery.txt | ||
289 | - info on PCI error recovery. | ||
290 | pci.txt | ||
291 | - info on the PCI subsystem for device driver authors. | ||
292 | pcieaer-howto.txt | ||
293 | - the PCI Express Advanced Error Reporting Driver Guide HOWTO. | ||
294 | pcmcia/ | 284 | pcmcia/ |
295 | - info on the Linux PCMCIA driver. | 285 | - info on the Linux PCMCIA driver. |
296 | pi-futex.txt | 286 | pi-futex.txt |
diff --git a/Documentation/ABI/stable/sysfs-class-ubi b/Documentation/ABI/stable/sysfs-class-ubi new file mode 100644 index 00000000000..18d471d9fae --- /dev/null +++ b/Documentation/ABI/stable/sysfs-class-ubi | |||
@@ -0,0 +1,212 @@ | |||
1 | What: /sys/class/ubi/ | ||
2 | Date: July 2006 | ||
3 | KernelVersion: 2.6.22 | ||
4 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
5 | Description: | ||
6 | The ubi/ class sub-directory belongs to the UBI subsystem and | ||
7 | provides general UBI information, per-UBI device information | ||
8 | and per-UBI volume information. | ||
9 | |||
10 | What: /sys/class/ubi/version | ||
11 | Date: July 2006 | ||
12 | KernelVersion: 2.6.22 | ||
13 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
14 | Description: | ||
15 | This file contains version of the latest supported UBI on-media | ||
16 | format. Currently it is 1, and there is no plan to change this. | ||
17 | However, if in the future UBI needs on-flash format changes | ||
18 | which cannot be done in a compatible manner, a new format | ||
19 | version will be added. So this is a mechanism for possible | ||
20 | future backward-compatible (but forward-incompatible) | ||
21 | improvements. | ||
22 | |||
23 | What: /sys/class/ubiX/ | ||
24 | Date: July 2006 | ||
25 | KernelVersion: 2.6.22 | ||
26 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
27 | Description: | ||
28 | The /sys/class/ubi0, /sys/class/ubi1, etc directories describe | ||
29 | UBI devices (UBI device 0, 1, etc). They contain general UBI | ||
30 | device information and per UBI volume information (each UBI | ||
31 | device may have many UBI volumes) | ||
32 | |||
33 | What: /sys/class/ubi/ubiX/avail_eraseblocks | ||
34 | Date: July 2006 | ||
35 | KernelVersion: 2.6.22 | ||
36 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
37 | Description: | ||
38 | Amount of available logical eraseblock. For example, one may | ||
39 | create a new UBI volume which has this amount of logical | ||
40 | eraseblocks. | ||
41 | |||
42 | What: /sys/class/ubi/ubiX/bad_peb_count | ||
43 | Date: July 2006 | ||
44 | KernelVersion: 2.6.22 | ||
45 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
46 | Description: | ||
47 | Count of bad physical eraseblocks on the underlying MTD device. | ||
48 | |||
49 | What: /sys/class/ubi/ubiX/bgt_enabled | ||
50 | Date: July 2006 | ||
51 | KernelVersion: 2.6.22 | ||
52 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
53 | Description: | ||
54 | Contains ASCII "0\n" if the UBI background thread is disabled, | ||
55 | and ASCII "1\n" if it is enabled. | ||
56 | |||
57 | What: /sys/class/ubi/ubiX/dev | ||
58 | Date: July 2006 | ||
59 | KernelVersion: 2.6.22 | ||
60 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
61 | Description: | ||
62 | Major and minor numbers of the character device corresponding | ||
63 | to this UBI device (in <major>:<minor> format). | ||
64 | |||
65 | What: /sys/class/ubi/ubiX/eraseblock_size | ||
66 | Date: July 2006 | ||
67 | KernelVersion: 2.6.22 | ||
68 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
69 | Description: | ||
70 | Maximum logical eraseblock size this UBI device may provide. UBI | ||
71 | volumes may have smaller logical eraseblock size because of their | ||
72 | alignment. | ||
73 | |||
74 | What: /sys/class/ubi/ubiX/max_ec | ||
75 | Date: July 2006 | ||
76 | KernelVersion: 2.6.22 | ||
77 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
78 | Description: | ||
79 | Maximum physical eraseblock erase counter value. | ||
80 | |||
81 | What: /sys/class/ubi/ubiX/max_vol_count | ||
82 | Date: July 2006 | ||
83 | KernelVersion: 2.6.22 | ||
84 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
85 | Description: | ||
86 | Maximum number of volumes which this UBI device may have. | ||
87 | |||
88 | What: /sys/class/ubi/ubiX/min_io_size | ||
89 | Date: July 2006 | ||
90 | KernelVersion: 2.6.22 | ||
91 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
92 | Description: | ||
93 | Minimum input/output unit size. All the I/O may only be done | ||
94 | in fractions of the contained number. | ||
95 | |||
96 | What: /sys/class/ubi/ubiX/mtd_num | ||
97 | Date: January 2008 | ||
98 | KernelVersion: 2.6.25 | ||
99 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
100 | Description: | ||
101 | Number of the underlying MTD device. | ||
102 | |||
103 | What: /sys/class/ubi/ubiX/reserved_for_bad | ||
104 | Date: July 2006 | ||
105 | KernelVersion: 2.6.22 | ||
106 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
107 | Description: | ||
108 | Number of physical eraseblocks reserved for bad block handling. | ||
109 | |||
110 | What: /sys/class/ubi/ubiX/total_eraseblocks | ||
111 | Date: July 2006 | ||
112 | KernelVersion: 2.6.22 | ||
113 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
114 | Description: | ||
115 | Total number of good (not marked as bad) physical eraseblocks on | ||
116 | the underlying MTD device. | ||
117 | |||
118 | What: /sys/class/ubi/ubiX/volumes_count | ||
119 | Date: July 2006 | ||
120 | KernelVersion: 2.6.22 | ||
121 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
122 | Description: | ||
123 | Count of volumes on this UBI device. | ||
124 | |||
125 | What: /sys/class/ubi/ubiX/ubiX_Y/ | ||
126 | Date: July 2006 | ||
127 | KernelVersion: 2.6.22 | ||
128 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
129 | Description: | ||
130 | The /sys/class/ubi/ubiX/ubiX_0/, /sys/class/ubi/ubiX/ubiX_1/, | ||
131 | etc directories describe UBI volumes on UBI device X (volumes | ||
132 | 0, 1, etc). | ||
133 | |||
134 | What: /sys/class/ubi/ubiX/ubiX_Y/alignment | ||
135 | Date: July 2006 | ||
136 | KernelVersion: 2.6.22 | ||
137 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
138 | Description: | ||
139 | Volume alignment - the value the logical eraseblock size of | ||
140 | this volume has to be aligned on. For example, 2048 means that | ||
141 | logical eraseblock size is multiple of 2048. In other words, | ||
142 | volume logical eraseblock size is UBI device logical eraseblock | ||
143 | size aligned to the alignment value. | ||
144 | |||
145 | What: /sys/class/ubi/ubiX/ubiX_Y/corrupted | ||
146 | Date: July 2006 | ||
147 | KernelVersion: 2.6.22 | ||
148 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
149 | Description: | ||
150 | Contains ASCII "0\n" if the UBI volume is OK, and ASCII "1\n" | ||
151 | if it is corrupted (e.g., due to an interrupted volume update). | ||
152 | |||
153 | What: /sys/class/ubi/ubiX/ubiX_Y/data_bytes | ||
154 | Date: July 2006 | ||
155 | KernelVersion: 2.6.22 | ||
156 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
157 | Description: | ||
158 | The amount of data this volume contains. This value makes sense | ||
159 | only for static volumes, and for dynamic volume it equivalent | ||
160 | to the total volume size in bytes. | ||
161 | |||
162 | What: /sys/class/ubi/ubiX/ubiX_Y/dev | ||
163 | Date: July 2006 | ||
164 | KernelVersion: 2.6.22 | ||
165 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
166 | Description: | ||
167 | Major and minor numbers of the character device corresponding | ||
168 | to this UBI volume (in <major>:<minor> format). | ||
169 | |||
170 | What: /sys/class/ubi/ubiX/ubiX_Y/name | ||
171 | Date: July 2006 | ||
172 | KernelVersion: 2.6.22 | ||
173 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
174 | Description: | ||
175 | Volume name. | ||
176 | |||
177 | What: /sys/class/ubi/ubiX/ubiX_Y/reserved_ebs | ||
178 | Date: July 2006 | ||
179 | KernelVersion: 2.6.22 | ||
180 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
181 | Description: | ||
182 | Count of physical eraseblock reserved for this volume. | ||
183 | Equivalent to the volume size in logical eraseblocks. | ||
184 | |||
185 | What: /sys/class/ubi/ubiX/ubiX_Y/type | ||
186 | Date: July 2006 | ||
187 | KernelVersion: 2.6.22 | ||
188 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
189 | Description: | ||
190 | Volume type. Contains ASCII "dynamic\n" for dynamic volumes and | ||
191 | "static\n" for static volumes. | ||
192 | |||
193 | What: /sys/class/ubi/ubiX/ubiX_Y/upd_marker | ||
194 | Date: July 2006 | ||
195 | KernelVersion: 2.6.22 | ||
196 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
197 | Description: | ||
198 | Contains ASCII "0\n" if the update marker is not set for this | ||
199 | volume, and "1\n" if it is set. The update marker is set when | ||
200 | volume update starts, and cleaned when it ends. So the presence | ||
201 | of the update marker indicates that the volume is being updated | ||
202 | at the moment of the update was interrupted. The later may be | ||
203 | checked using the "corrupted" sysfs file. | ||
204 | |||
205 | What: /sys/class/ubi/ubiX/ubiX_Y/usable_eb_size | ||
206 | Date: July 2006 | ||
207 | KernelVersion: 2.6.22 | ||
208 | Contact: Artem Bityutskiy <dedekind@infradead.org> | ||
209 | Description: | ||
210 | Logical eraseblock size of this volume. Equivalent to logical | ||
211 | eraseblock size of the device aligned on the volume alignment | ||
212 | value. | ||
diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci new file mode 100644 index 00000000000..ceddcff4082 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-pci | |||
@@ -0,0 +1,11 @@ | |||
1 | What: /sys/bus/pci/devices/.../vpd | ||
2 | Date: February 2008 | ||
3 | Contact: Ben Hutchings <bhutchings@solarflare.com> | ||
4 | Description: | ||
5 | A file named vpd in a device directory will be a | ||
6 | binary file containing the Vital Product Data for the | ||
7 | device. It should follow the VPD format defined in | ||
8 | PCI Specification 2.1 or 2.2, but users should consider | ||
9 | that some devices may have malformatted data. If the | ||
10 | underlying VPD has a writable section then the | ||
11 | corresponding section of this file will be writable. | ||
diff --git a/Documentation/ABI/testing/sysfs-ibft b/Documentation/ABI/testing/sysfs-ibft new file mode 100644 index 00000000000..c2b7d1154be --- /dev/null +++ b/Documentation/ABI/testing/sysfs-ibft | |||
@@ -0,0 +1,23 @@ | |||
1 | What: /sys/firmware/ibft/initiator | ||
2 | Date: November 2007 | ||
3 | Contact: Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
4 | Description: The /sys/firmware/ibft/initiator directory will contain | ||
5 | files that expose the iSCSI Boot Firmware Table initiator data. | ||
6 | Usually this contains the Initiator name. | ||
7 | |||
8 | What: /sys/firmware/ibft/targetX | ||
9 | Date: November 2007 | ||
10 | Contact: Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
11 | Description: The /sys/firmware/ibft/targetX directory will contain | ||
12 | files that expose the iSCSI Boot Firmware Table target data. | ||
13 | Usually this contains the target's IP address, boot LUN, | ||
14 | target name, and what NIC it is associated with. It can also | ||
15 | contain the CHAP name (and password), the reverse CHAP | ||
16 | name (and password) | ||
17 | |||
18 | What: /sys/firmware/ibft/ethernetX | ||
19 | Date: November 2007 | ||
20 | Contact: Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
21 | Description: The /sys/firmware/ibft/ethernetX directory will contain | ||
22 | files that expose the iSCSI Boot Firmware Table NIC data. | ||
23 | This can this can the IP address, MAC, and gateway of the NIC. | ||
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index dc0f30c3e57..488dd4a4945 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -297,11 +297,6 @@ X!Earch/x86/kernel/mca_32.c | |||
297 | !Ikernel/acct.c | 297 | !Ikernel/acct.c |
298 | </chapter> | 298 | </chapter> |
299 | 299 | ||
300 | <chapter id="pmfuncs"> | ||
301 | <title>Power Management</title> | ||
302 | !Ekernel/power/pm.c | ||
303 | </chapter> | ||
304 | |||
305 | <chapter id="devdrivers"> | 300 | <chapter id="devdrivers"> |
306 | <title>Device drivers infrastructure</title> | 301 | <title>Device drivers infrastructure</title> |
307 | <sect1><title>Device Drivers Base</title> | 302 | <sect1><title>Device Drivers Base</title> |
diff --git a/Documentation/DocBook/kernel-locking.tmpl b/Documentation/DocBook/kernel-locking.tmpl index 2e9d6b41f03..77c42f40be5 100644 --- a/Documentation/DocBook/kernel-locking.tmpl +++ b/Documentation/DocBook/kernel-locking.tmpl | |||
@@ -241,7 +241,7 @@ | |||
241 | </para> | 241 | </para> |
242 | <para> | 242 | <para> |
243 | The third type is a semaphore | 243 | The third type is a semaphore |
244 | (<filename class="headerfile">include/asm/semaphore.h</filename>): it | 244 | (<filename class="headerfile">include/linux/semaphore.h</filename>): it |
245 | can have more than one holder at any time (the number decided at | 245 | can have more than one holder at any time (the number decided at |
246 | initialization time), although it is most commonly used as a | 246 | initialization time), although it is most commonly used as a |
247 | single-holder lock (a mutex). If you can't get a semaphore, your | 247 | single-holder lock (a mutex). If you can't get a semaphore, your |
@@ -290,7 +290,7 @@ | |||
290 | <para> | 290 | <para> |
291 | If you have a data structure which is only ever accessed from | 291 | If you have a data structure which is only ever accessed from |
292 | user context, then you can use a simple semaphore | 292 | user context, then you can use a simple semaphore |
293 | (<filename>linux/asm/semaphore.h</filename>) to protect it. This | 293 | (<filename>linux/linux/semaphore.h</filename>) to protect it. This |
294 | is the most trivial case: you initialize the semaphore to the number | 294 | is the most trivial case: you initialize the semaphore to the number |
295 | of resources available (usually 1), and call | 295 | of resources available (usually 1), and call |
296 | <function>down_interruptible()</function> to grab the semaphore, and | 296 | <function>down_interruptible()</function> to grab the semaphore, and |
@@ -854,7 +854,7 @@ The change is shown below, in standard patch format: the | |||
854 | }; | 854 | }; |
855 | 855 | ||
856 | -static DEFINE_MUTEX(cache_lock); | 856 | -static DEFINE_MUTEX(cache_lock); |
857 | +static spinlock_t cache_lock = SPIN_LOCK_UNLOCKED; | 857 | +static DEFINE_SPINLOCK(cache_lock); |
858 | static LIST_HEAD(cache); | 858 | static LIST_HEAD(cache); |
859 | static unsigned int cache_num = 0; | 859 | static unsigned int cache_num = 0; |
860 | #define MAX_CACHE_SIZE 10 | 860 | #define MAX_CACHE_SIZE 10 |
@@ -1238,7 +1238,7 @@ Here is the "lock-per-object" implementation: | |||
1238 | - int popularity; | 1238 | - int popularity; |
1239 | }; | 1239 | }; |
1240 | 1240 | ||
1241 | static spinlock_t cache_lock = SPIN_LOCK_UNLOCKED; | 1241 | static DEFINE_SPINLOCK(cache_lock); |
1242 | @@ -77,6 +84,7 @@ | 1242 | @@ -77,6 +84,7 @@ |
1243 | obj->id = id; | 1243 | obj->id = id; |
1244 | obj->popularity = 0; | 1244 | obj->popularity = 0; |
@@ -1656,7 +1656,7 @@ the amount of locking which needs to be done. | |||
1656 | #include <linux/slab.h> | 1656 | #include <linux/slab.h> |
1657 | #include <linux/string.h> | 1657 | #include <linux/string.h> |
1658 | +#include <linux/rcupdate.h> | 1658 | +#include <linux/rcupdate.h> |
1659 | #include <asm/semaphore.h> | 1659 | #include <linux/semaphore.h> |
1660 | #include <asm/errno.h> | 1660 | #include <asm/errno.h> |
1661 | 1661 | ||
1662 | struct object | 1662 | struct object |
diff --git a/Documentation/DocBook/writing_usb_driver.tmpl b/Documentation/DocBook/writing_usb_driver.tmpl index d4188d4ff53..eeff19ca831 100644 --- a/Documentation/DocBook/writing_usb_driver.tmpl +++ b/Documentation/DocBook/writing_usb_driver.tmpl | |||
@@ -100,8 +100,8 @@ | |||
100 | useful documents, at the USB home page (see Resources). An excellent | 100 | useful documents, at the USB home page (see Resources). An excellent |
101 | introduction to the Linux USB subsystem can be found at the USB Working | 101 | introduction to the Linux USB subsystem can be found at the USB Working |
102 | Devices List (see Resources). It explains how the Linux USB subsystem is | 102 | Devices List (see Resources). It explains how the Linux USB subsystem is |
103 | structured and introduces the reader to the concept of USB urbs, which | 103 | structured and introduces the reader to the concept of USB urbs |
104 | are essential to USB drivers. | 104 | (USB Request Blocks), which are essential to USB drivers. |
105 | </para> | 105 | </para> |
106 | <para> | 106 | <para> |
107 | The first thing a Linux USB driver needs to do is register itself with | 107 | The first thing a Linux USB driver needs to do is register itself with |
@@ -162,8 +162,8 @@ static int __init usb_skel_init(void) | |||
162 | module_init(usb_skel_init); | 162 | module_init(usb_skel_init); |
163 | </programlisting> | 163 | </programlisting> |
164 | <para> | 164 | <para> |
165 | When the driver is unloaded from the system, it needs to unregister | 165 | When the driver is unloaded from the system, it needs to deregister |
166 | itself with the USB subsystem. This is done with the usb_unregister | 166 | itself with the USB subsystem. This is done with the usb_deregister |
167 | function: | 167 | function: |
168 | </para> | 168 | </para> |
169 | <programlisting> | 169 | <programlisting> |
@@ -232,7 +232,7 @@ static int skel_probe(struct usb_interface *interface, | |||
232 | were passed to the USB subsystem will be called from a user program trying | 232 | were passed to the USB subsystem will be called from a user program trying |
233 | to talk to the device. The first function called will be open, as the | 233 | to talk to the device. The first function called will be open, as the |
234 | program tries to open the device for I/O. We increment our private usage | 234 | program tries to open the device for I/O. We increment our private usage |
235 | count and save off a pointer to our internal structure in the file | 235 | count and save a pointer to our internal structure in the file |
236 | structure. This is done so that future calls to file operations will | 236 | structure. This is done so that future calls to file operations will |
237 | enable the driver to determine which device the user is addressing. All | 237 | enable the driver to determine which device the user is addressing. All |
238 | of this is done with the following code: | 238 | of this is done with the following code: |
@@ -252,8 +252,8 @@ file->private_data = dev; | |||
252 | send to the device based on the size of the write urb it has created (this | 252 | send to the device based on the size of the write urb it has created (this |
253 | size depends on the size of the bulk out end point that the device has). | 253 | size depends on the size of the bulk out end point that the device has). |
254 | Then it copies the data from user space to kernel space, points the urb to | 254 | Then it copies the data from user space to kernel space, points the urb to |
255 | the data and submits the urb to the USB subsystem. This can be shown in | 255 | the data and submits the urb to the USB subsystem. This can be seen in |
256 | he following code: | 256 | the following code: |
257 | </para> | 257 | </para> |
258 | <programlisting> | 258 | <programlisting> |
259 | /* we can only write as much as 1 urb will hold */ | 259 | /* we can only write as much as 1 urb will hold */ |
diff --git a/Documentation/HOWTO b/Documentation/HOWTO index 54835610b3d..0291ade44c1 100644 --- a/Documentation/HOWTO +++ b/Documentation/HOWTO | |||
@@ -249,9 +249,11 @@ process is as follows: | |||
249 | release a new -rc kernel every week. | 249 | release a new -rc kernel every week. |
250 | - Process continues until the kernel is considered "ready", the | 250 | - Process continues until the kernel is considered "ready", the |
251 | process should last around 6 weeks. | 251 | process should last around 6 weeks. |
252 | - A list of known regressions present in each -rc release is | 252 | - Known regressions in each release are periodically posted to the |
253 | tracked at the following URI: | 253 | linux-kernel mailing list. The goal is to reduce the length of |
254 | http://kernelnewbies.org/known_regressions | 254 | that list to zero before declaring the kernel to be "ready," but, in |
255 | the real world, a small number of regressions often remain at | ||
256 | release time. | ||
255 | 257 | ||
256 | It is worth mentioning what Andrew Morton wrote on the linux-kernel | 258 | It is worth mentioning what Andrew Morton wrote on the linux-kernel |
257 | mailing list about kernel releases: | 259 | mailing list about kernel releases: |
@@ -261,7 +263,7 @@ mailing list about kernel releases: | |||
261 | 263 | ||
262 | 2.6.x.y -stable kernel tree | 264 | 2.6.x.y -stable kernel tree |
263 | --------------------------- | 265 | --------------------------- |
264 | Kernels with 4 digit versions are -stable kernels. They contain | 266 | Kernels with 4-part versions are -stable kernels. They contain |
265 | relatively small and critical fixes for security problems or significant | 267 | relatively small and critical fixes for security problems or significant |
266 | regressions discovered in a given 2.6.x kernel. | 268 | regressions discovered in a given 2.6.x kernel. |
267 | 269 | ||
@@ -273,7 +275,10 @@ If no 2.6.x.y kernel is available, then the highest numbered 2.6.x | |||
273 | kernel is the current stable kernel. | 275 | kernel is the current stable kernel. |
274 | 276 | ||
275 | 2.6.x.y are maintained by the "stable" team <stable@kernel.org>, and are | 277 | 2.6.x.y are maintained by the "stable" team <stable@kernel.org>, and are |
276 | released almost every other week. | 278 | released as needs dictate. The normal release period is approximately |
279 | two weeks, but it can be longer if there are no pressing problems. A | ||
280 | security-related problem, instead, can cause a release to happen almost | ||
281 | instantly. | ||
277 | 282 | ||
278 | The file Documentation/stable_kernel_rules.txt in the kernel tree | 283 | The file Documentation/stable_kernel_rules.txt in the kernel tree |
279 | documents what kinds of changes are acceptable for the -stable tree, and | 284 | documents what kinds of changes are acceptable for the -stable tree, and |
@@ -298,7 +303,9 @@ a while Andrew or the subsystem maintainer pushes it on to Linus for | |||
298 | inclusion in mainline. | 303 | inclusion in mainline. |
299 | 304 | ||
300 | It is heavily encouraged that all new patches get tested in the -mm tree | 305 | It is heavily encouraged that all new patches get tested in the -mm tree |
301 | before they are sent to Linus for inclusion in the main kernel tree. | 306 | before they are sent to Linus for inclusion in the main kernel tree. Code |
307 | which does not make an appearance in -mm before the opening of the merge | ||
308 | window will prove hard to merge into the mainline. | ||
302 | 309 | ||
303 | These kernels are not appropriate for use on systems that are supposed | 310 | These kernels are not appropriate for use on systems that are supposed |
304 | to be stable and they are more risky to run than any of the other | 311 | to be stable and they are more risky to run than any of the other |
@@ -354,11 +361,12 @@ Here is a list of some of the different kernel trees available: | |||
354 | - SCSI, James Bottomley <James.Bottomley@SteelEye.com> | 361 | - SCSI, James Bottomley <James.Bottomley@SteelEye.com> |
355 | git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git | 362 | git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git |
356 | 363 | ||
364 | - x86, Ingo Molnar <mingo@elte.hu> | ||
365 | git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git | ||
366 | |||
357 | quilt trees: | 367 | quilt trees: |
358 | - USB, PCI, Driver Core, and I2C, Greg Kroah-Hartman <gregkh@suse.de> | 368 | - USB, Driver Core, and I2C, Greg Kroah-Hartman <gregkh@suse.de> |
359 | kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ | 369 | kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ |
360 | - x86-64, partly i386, Andi Kleen <ak@suse.de> | ||
361 | ftp.firstfloor.org:/pub/ak/x86_64/quilt/ | ||
362 | 370 | ||
363 | Other kernel trees can be found listed at http://git.kernel.org/ and in | 371 | Other kernel trees can be found listed at http://git.kernel.org/ and in |
364 | the MAINTAINERS file. | 372 | the MAINTAINERS file. |
@@ -392,8 +400,8 @@ If you want to be advised of the future bug reports, you can subscribe to the | |||
392 | bugme-new mailing list (only new bug reports are mailed here) or to the | 400 | bugme-new mailing list (only new bug reports are mailed here) or to the |
393 | bugme-janitor mailing list (every change in the bugzilla is mailed here) | 401 | bugme-janitor mailing list (every change in the bugzilla is mailed here) |
394 | 402 | ||
395 | http://lists.osdl.org/mailman/listinfo/bugme-new | 403 | http://lists.linux-foundation.org/mailman/listinfo/bugme-new |
396 | http://lists.osdl.org/mailman/listinfo/bugme-janitors | 404 | http://lists.linux-foundation.org/mailman/listinfo/bugme-janitors |
397 | 405 | ||
398 | 406 | ||
399 | 407 | ||
diff --git a/Documentation/PCI/00-INDEX b/Documentation/PCI/00-INDEX new file mode 100644 index 00000000000..49f43946c6b --- /dev/null +++ b/Documentation/PCI/00-INDEX | |||
@@ -0,0 +1,12 @@ | |||
1 | 00-INDEX | ||
2 | - this file | ||
3 | PCI-DMA-mapping.txt | ||
4 | - info for PCI drivers using DMA portably across all platforms | ||
5 | PCIEBUS-HOWTO.txt | ||
6 | - a guide describing the PCI Express Port Bus driver | ||
7 | pci-error-recovery.txt | ||
8 | - info on PCI error recovery | ||
9 | pci.txt | ||
10 | - info on the PCI subsystem for device driver authors | ||
11 | pcieaer-howto.txt | ||
12 | - the PCI Express Advanced Error Reporting Driver Guide HOWTO | ||
diff --git a/Documentation/PCIEBUS-HOWTO.txt b/Documentation/PCI/PCIEBUS-HOWTO.txt index c93f42a74d7..9a07e38631b 100644 --- a/Documentation/PCIEBUS-HOWTO.txt +++ b/Documentation/PCI/PCIEBUS-HOWTO.txt | |||
@@ -56,9 +56,9 @@ advantages of using the PCI Express Port Bus driver are listed below: | |||
56 | 56 | ||
57 | - Allow service drivers implemented in an independent | 57 | - Allow service drivers implemented in an independent |
58 | staged approach. | 58 | staged approach. |
59 | 59 | ||
60 | - Allow one service driver to run on multiple PCI-PCI Bridge | 60 | - Allow one service driver to run on multiple PCI-PCI Bridge |
61 | Port devices. | 61 | Port devices. |
62 | 62 | ||
63 | - Manage and distribute resources of a PCI-PCI Bridge Port | 63 | - Manage and distribute resources of a PCI-PCI Bridge Port |
64 | device to requested service drivers. | 64 | device to requested service drivers. |
@@ -82,7 +82,7 @@ Model requires some minimal changes on existing service drivers that | |||
82 | imposes no impact on the functionality of existing service drivers. | 82 | imposes no impact on the functionality of existing service drivers. |
83 | 83 | ||
84 | A service driver is required to use the two APIs shown below to | 84 | A service driver is required to use the two APIs shown below to |
85 | register its service with the PCI Express Port Bus driver (see | 85 | register its service with the PCI Express Port Bus driver (see |
86 | section 5.2.1 & 5.2.2). It is important that a service driver | 86 | section 5.2.1 & 5.2.2). It is important that a service driver |
87 | initializes the pcie_port_service_driver data structure, included in | 87 | initializes the pcie_port_service_driver data structure, included in |
88 | header file /include/linux/pcieport_if.h, before calling these APIs. | 88 | header file /include/linux/pcieport_if.h, before calling these APIs. |
@@ -137,7 +137,7 @@ driver. | |||
137 | static int __init aerdrv_service_init(void) | 137 | static int __init aerdrv_service_init(void) |
138 | { | 138 | { |
139 | int retval = 0; | 139 | int retval = 0; |
140 | 140 | ||
141 | retval = pcie_port_service_register(&root_aerdrv); | 141 | retval = pcie_port_service_register(&root_aerdrv); |
142 | if (!retval) { | 142 | if (!retval) { |
143 | /* | 143 | /* |
@@ -147,7 +147,7 @@ static int __init aerdrv_service_init(void) | |||
147 | return retval; | 147 | return retval; |
148 | } | 148 | } |
149 | 149 | ||
150 | static void __exit aerdrv_service_exit(void) | 150 | static void __exit aerdrv_service_exit(void) |
151 | { | 151 | { |
152 | pcie_port_service_unregister(&root_aerdrv); | 152 | pcie_port_service_unregister(&root_aerdrv); |
153 | } | 153 | } |
@@ -175,7 +175,7 @@ same physical Root Port. Both service drivers call pci_enable_msi to | |||
175 | request MSI based interrupts. A service driver may not know whether | 175 | request MSI based interrupts. A service driver may not know whether |
176 | any other service drivers have run on this Root Port. If either one | 176 | any other service drivers have run on this Root Port. If either one |
177 | of them calls pci_disable_msi, it puts the other service driver | 177 | of them calls pci_disable_msi, it puts the other service driver |
178 | in a wrong interrupt mode. | 178 | in a wrong interrupt mode. |
179 | 179 | ||
180 | To avoid this situation all service drivers are not permitted to | 180 | To avoid this situation all service drivers are not permitted to |
181 | switch interrupt mode on its device. The PCI Express Port Bus driver | 181 | switch interrupt mode on its device. The PCI Express Port Bus driver |
diff --git a/Documentation/pci-error-recovery.txt b/Documentation/PCI/pci-error-recovery.txt index 6650af43252..6650af43252 100644 --- a/Documentation/pci-error-recovery.txt +++ b/Documentation/PCI/pci-error-recovery.txt | |||
diff --git a/Documentation/pci.txt b/Documentation/PCI/pci.txt index d2c2e6e2b22..8d4dc6250c5 100644 --- a/Documentation/pci.txt +++ b/Documentation/PCI/pci.txt | |||
@@ -119,7 +119,7 @@ initialization with a pointer to a structure describing the driver | |||
119 | the power state of a device before reboot. | 119 | the power state of a device before reboot. |
120 | e.g. drivers/net/e100.c. | 120 | e.g. drivers/net/e100.c. |
121 | 121 | ||
122 | err_handler See Documentation/pci-error-recovery.txt | 122 | err_handler See Documentation/PCI/pci-error-recovery.txt |
123 | 123 | ||
124 | 124 | ||
125 | The ID table is an array of struct pci_device_id entries ending with an | 125 | The ID table is an array of struct pci_device_id entries ending with an |
diff --git a/Documentation/pcieaer-howto.txt b/Documentation/PCI/pcieaer-howto.txt index d5da8617010..16c251230c8 100644 --- a/Documentation/pcieaer-howto.txt +++ b/Documentation/PCI/pcieaer-howto.txt | |||
@@ -13,7 +13,7 @@ Reporting (AER) driver and provides information on how to use it, as | |||
13 | well as how to enable the drivers of endpoint devices to conform with | 13 | well as how to enable the drivers of endpoint devices to conform with |
14 | PCI Express AER driver. | 14 | PCI Express AER driver. |
15 | 15 | ||
16 | 1.2 Copyright © Intel Corporation 2006. | 16 | 1.2 Copyright © Intel Corporation 2006. |
17 | 17 | ||
18 | 1.3 What is the PCI Express AER Driver? | 18 | 1.3 What is the PCI Express AER Driver? |
19 | 19 | ||
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index 1fc4e7144dc..9c93a03ea33 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches | |||
@@ -183,7 +183,7 @@ Even if the maintainer did not respond in step #4, make sure to ALWAYS | |||
183 | copy the maintainer when you change their code. | 183 | copy the maintainer when you change their code. |
184 | 184 | ||
185 | For small patches you may want to CC the Trivial Patch Monkey | 185 | For small patches you may want to CC the Trivial Patch Monkey |
186 | trivial@kernel.org managed by Adrian Bunk; which collects "trivial" | 186 | trivial@kernel.org managed by Jesper Juhl; which collects "trivial" |
187 | patches. Trivial patches must qualify for one of the following rules: | 187 | patches. Trivial patches must qualify for one of the following rules: |
188 | Spelling fixes in documentation | 188 | Spelling fixes in documentation |
189 | Spelling fixes which could break grep(1) | 189 | Spelling fixes which could break grep(1) |
@@ -196,7 +196,7 @@ patches. Trivial patches must qualify for one of the following rules: | |||
196 | since people copy, as long as it's trivial) | 196 | since people copy, as long as it's trivial) |
197 | Any fix by the author/maintainer of the file (ie. patch monkey | 197 | Any fix by the author/maintainer of the file (ie. patch monkey |
198 | in re-transmission mode) | 198 | in re-transmission mode) |
199 | URL: <http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/> | 199 | URL: <http://www.kernel.org/pub/linux/kernel/people/juhl/trivial/> |
200 | 200 | ||
201 | 201 | ||
202 | 202 | ||
diff --git a/Documentation/arm/Samsung-S3C24XX/NAND.txt b/Documentation/arm/Samsung-S3C24XX/NAND.txt new file mode 100644 index 00000000000..bc478a3409b --- /dev/null +++ b/Documentation/arm/Samsung-S3C24XX/NAND.txt | |||
@@ -0,0 +1,30 @@ | |||
1 | S3C24XX NAND Support | ||
2 | ==================== | ||
3 | |||
4 | Introduction | ||
5 | ------------ | ||
6 | |||
7 | Small Page NAND | ||
8 | --------------- | ||
9 | |||
10 | The driver uses a 512 byte (1 page) ECC code for this setup. The | ||
11 | ECC code is not directly compatible with the default kernel ECC | ||
12 | code, so the driver enforces its own OOB layout and ECC parameters | ||
13 | |||
14 | Large Page NAND | ||
15 | --------------- | ||
16 | |||
17 | The driver is capable of handling NAND flash with a 2KiB page | ||
18 | size, with support for hardware ECC generation and correction. | ||
19 | |||
20 | Unlike the 512byte page mode, the driver generates ECC data for | ||
21 | each 256 byte block in an 2KiB page. This means that more than | ||
22 | one error in a page can be rectified. It also means that the | ||
23 | OOB layout remains the default kernel layout for these flashes. | ||
24 | |||
25 | |||
26 | Document Author | ||
27 | --------------- | ||
28 | |||
29 | Ben Dooks, Copyright 2007 Simtec Electronics | ||
30 | |||
diff --git a/Documentation/arm/Samsung-S3C24XX/Overview.txt b/Documentation/arm/Samsung-S3C24XX/Overview.txt index c31b76fa66c..d04e1e30c47 100644 --- a/Documentation/arm/Samsung-S3C24XX/Overview.txt +++ b/Documentation/arm/Samsung-S3C24XX/Overview.txt | |||
@@ -156,6 +156,8 @@ NAND | |||
156 | controller. If there are any problems the latest linux-mtd | 156 | controller. If there are any problems the latest linux-mtd |
157 | code can be found from http://www.linux-mtd.infradead.org/ | 157 | code can be found from http://www.linux-mtd.infradead.org/ |
158 | 158 | ||
159 | For more information see Documentation/arm/Samsung-S3C24XX/NAND.txt | ||
160 | |||
159 | 161 | ||
160 | Serial | 162 | Serial |
161 | ------ | 163 | ------ |
diff --git a/Documentation/block/biodoc.txt b/Documentation/block/biodoc.txt index 93f223b9723..4dbb8be1c99 100644 --- a/Documentation/block/biodoc.txt +++ b/Documentation/block/biodoc.txt | |||
@@ -1097,7 +1097,7 @@ lock themselves, if required. Drivers that explicitly used the | |||
1097 | io_request_lock for serialization need to be modified accordingly. | 1097 | io_request_lock for serialization need to be modified accordingly. |
1098 | Usually it's as easy as adding a global lock: | 1098 | Usually it's as easy as adding a global lock: |
1099 | 1099 | ||
1100 | static spinlock_t my_driver_lock = SPIN_LOCK_UNLOCKED; | 1100 | static DEFINE_SPINLOCK(my_driver_lock); |
1101 | 1101 | ||
1102 | and passing the address to that lock to blk_init_queue(). | 1102 | and passing the address to that lock to blk_init_queue(). |
1103 | 1103 | ||
diff --git a/Documentation/cdrom/cdrom-standard.tex b/Documentation/cdrom/cdrom-standard.tex index c713aeb020c..c06233fe52a 100644 --- a/Documentation/cdrom/cdrom-standard.tex +++ b/Documentation/cdrom/cdrom-standard.tex | |||
@@ -777,7 +777,7 @@ Note that a driver must have one static structure, $<device>_dops$, while | |||
777 | it may have as many structures $<device>_info$ as there are minor devices | 777 | it may have as many structures $<device>_info$ as there are minor devices |
778 | active. $Register_cdrom()$ builds a linked list from these. | 778 | active. $Register_cdrom()$ builds a linked list from these. |
779 | 779 | ||
780 | \subsection{$Int\ unregister_cdrom(struct\ cdrom_device_info * cdi)$} | 780 | \subsection{$Void\ unregister_cdrom(struct\ cdrom_device_info * cdi)$} |
781 | 781 | ||
782 | Unregistering device $cdi$ with minor number $MINOR(cdi\to dev)$ removes | 782 | Unregistering device $cdi$ with minor number $MINOR(cdi\to dev)$ removes |
783 | the minor device from the list. If it was the last registered minor for | 783 | the minor device from the list. If it was the last registered minor for |
diff --git a/Documentation/cli-sti-removal.txt b/Documentation/cli-sti-removal.txt index 0223c9d2033..60932b02fcb 100644 --- a/Documentation/cli-sti-removal.txt +++ b/Documentation/cli-sti-removal.txt | |||
@@ -43,7 +43,7 @@ would execute while the cli()-ed section is executing. | |||
43 | 43 | ||
44 | but from now on a more direct method of locking has to be used: | 44 | but from now on a more direct method of locking has to be used: |
45 | 45 | ||
46 | spinlock_t driver_lock = SPIN_LOCK_UNLOCKED; | 46 | DEFINE_SPINLOCK(driver_lock); |
47 | struct driver_data; | 47 | struct driver_data; |
48 | 48 | ||
49 | irq_handler (...) | 49 | irq_handler (...) |
diff --git a/Documentation/cpusets.txt b/Documentation/cpusets.txt index ad2bb3b3acc..aa854b9b18c 100644 --- a/Documentation/cpusets.txt +++ b/Documentation/cpusets.txt | |||
@@ -8,6 +8,7 @@ Portions Copyright (c) 2004-2006 Silicon Graphics, Inc. | |||
8 | Modified by Paul Jackson <pj@sgi.com> | 8 | Modified by Paul Jackson <pj@sgi.com> |
9 | Modified by Christoph Lameter <clameter@sgi.com> | 9 | Modified by Christoph Lameter <clameter@sgi.com> |
10 | Modified by Paul Menage <menage@google.com> | 10 | Modified by Paul Menage <menage@google.com> |
11 | Modified by Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> | ||
11 | 12 | ||
12 | CONTENTS: | 13 | CONTENTS: |
13 | ========= | 14 | ========= |
@@ -20,7 +21,8 @@ CONTENTS: | |||
20 | 1.5 What is memory_pressure ? | 21 | 1.5 What is memory_pressure ? |
21 | 1.6 What is memory spread ? | 22 | 1.6 What is memory spread ? |
22 | 1.7 What is sched_load_balance ? | 23 | 1.7 What is sched_load_balance ? |
23 | 1.8 How do I use cpusets ? | 24 | 1.8 What is sched_relax_domain_level ? |
25 | 1.9 How do I use cpusets ? | ||
24 | 2. Usage Examples and Syntax | 26 | 2. Usage Examples and Syntax |
25 | 2.1 Basic Usage | 27 | 2.1 Basic Usage |
26 | 2.2 Adding/removing cpus | 28 | 2.2 Adding/removing cpus |
@@ -497,7 +499,73 @@ the cpuset code to update these sched domains, it compares the new | |||
497 | partition requested with the current, and updates its sched domains, | 499 | partition requested with the current, and updates its sched domains, |
498 | removing the old and adding the new, for each change. | 500 | removing the old and adding the new, for each change. |
499 | 501 | ||
500 | 1.8 How do I use cpusets ? | 502 | |
503 | 1.8 What is sched_relax_domain_level ? | ||
504 | -------------------------------------- | ||
505 | |||
506 | In sched domain, the scheduler migrates tasks in 2 ways; periodic load | ||
507 | balance on tick, and at time of some schedule events. | ||
508 | |||
509 | When a task is woken up, scheduler try to move the task on idle CPU. | ||
510 | For example, if a task A running on CPU X activates another task B | ||
511 | on the same CPU X, and if CPU Y is X's sibling and performing idle, | ||
512 | then scheduler migrate task B to CPU Y so that task B can start on | ||
513 | CPU Y without waiting task A on CPU X. | ||
514 | |||
515 | And if a CPU run out of tasks in its runqueue, the CPU try to pull | ||
516 | extra tasks from other busy CPUs to help them before it is going to | ||
517 | be idle. | ||
518 | |||
519 | Of course it takes some searching cost to find movable tasks and/or | ||
520 | idle CPUs, the scheduler might not search all CPUs in the domain | ||
521 | everytime. In fact, in some architectures, the searching ranges on | ||
522 | events are limited in the same socket or node where the CPU locates, | ||
523 | while the load balance on tick searchs all. | ||
524 | |||
525 | For example, assume CPU Z is relatively far from CPU X. Even if CPU Z | ||
526 | is idle while CPU X and the siblings are busy, scheduler can't migrate | ||
527 | woken task B from X to Z since it is out of its searching range. | ||
528 | As the result, task B on CPU X need to wait task A or wait load balance | ||
529 | on the next tick. For some applications in special situation, waiting | ||
530 | 1 tick may be too long. | ||
531 | |||
532 | The 'sched_relax_domain_level' file allows you to request changing | ||
533 | this searching range as you like. This file takes int value which | ||
534 | indicates size of searching range in levels ideally as follows, | ||
535 | otherwise initial value -1 that indicates the cpuset has no request. | ||
536 | |||
537 | -1 : no request. use system default or follow request of others. | ||
538 | 0 : no search. | ||
539 | 1 : search siblings (hyperthreads in a core). | ||
540 | 2 : search cores in a package. | ||
541 | 3 : search cpus in a node [= system wide on non-NUMA system] | ||
542 | ( 4 : search nodes in a chunk of node [on NUMA system] ) | ||
543 | ( 5~ : search system wide [on NUMA system]) | ||
544 | |||
545 | This file is per-cpuset and affect the sched domain where the cpuset | ||
546 | belongs to. Therefore if the flag 'sched_load_balance' of a cpuset | ||
547 | is disabled, then 'sched_relax_domain_level' have no effect since | ||
548 | there is no sched domain belonging the cpuset. | ||
549 | |||
550 | If multiple cpusets are overlapping and hence they form a single sched | ||
551 | domain, the largest value among those is used. Be careful, if one | ||
552 | requests 0 and others are -1 then 0 is used. | ||
553 | |||
554 | Note that modifying this file will have both good and bad effects, | ||
555 | and whether it is acceptable or not will be depend on your situation. | ||
556 | Don't modify this file if you are not sure. | ||
557 | |||
558 | If your situation is: | ||
559 | - The migration costs between each cpu can be assumed considerably | ||
560 | small(for you) due to your special application's behavior or | ||
561 | special hardware support for CPU cache etc. | ||
562 | - The searching cost doesn't have impact(for you) or you can make | ||
563 | the searching cost enough small by managing cpuset to compact etc. | ||
564 | - The latency is required even it sacrifices cache hit rate etc. | ||
565 | then increasing 'sched_relax_domain_level' would benefit you. | ||
566 | |||
567 | |||
568 | 1.9 How do I use cpusets ? | ||
501 | -------------------------- | 569 | -------------------------- |
502 | 570 | ||
503 | In order to minimize the impact of cpusets on critical kernel | 571 | In order to minimize the impact of cpusets on critical kernel |
diff --git a/Documentation/dontdiff b/Documentation/dontdiff index c09a96b9935..354aec047c0 100644 --- a/Documentation/dontdiff +++ b/Documentation/dontdiff | |||
@@ -47,7 +47,6 @@ | |||
47 | .mm | 47 | .mm |
48 | 53c700_d.h | 48 | 53c700_d.h |
49 | 53c8xx_d.h* | 49 | 53c8xx_d.h* |
50 | BitKeeper | ||
51 | COPYING | 50 | COPYING |
52 | CREDITS | 51 | CREDITS |
53 | CVS | 52 | CVS |
diff --git a/Documentation/early-userspace/README b/Documentation/early-userspace/README index 766d320c8eb..e35d8305219 100644 --- a/Documentation/early-userspace/README +++ b/Documentation/early-userspace/README | |||
@@ -89,8 +89,8 @@ the 2.7 era (it missed the boat for 2.5). | |||
89 | You can obtain somewhat infrequent snapshots of klibc from | 89 | You can obtain somewhat infrequent snapshots of klibc from |
90 | ftp://ftp.kernel.org/pub/linux/libs/klibc/ | 90 | ftp://ftp.kernel.org/pub/linux/libs/klibc/ |
91 | 91 | ||
92 | For active users, you are better off using the klibc BitKeeper | 92 | For active users, you are better off using the klibc git |
93 | repositories, at http://klibc.bkbits.net/ | 93 | repository, at http://git.kernel.org/?p=libs/klibc/klibc.git |
94 | 94 | ||
95 | The standalone klibc distribution currently provides three components, | 95 | The standalone klibc distribution currently provides three components, |
96 | in addition to the klibc library: | 96 | in addition to the klibc library: |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index af0e9393bf6..448729fcaeb 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -261,17 +261,6 @@ Who: Michael Buesch <mb@bu3sch.de> | |||
261 | 261 | ||
262 | --------------------------- | 262 | --------------------------- |
263 | 263 | ||
264 | What: Solaris/SunOS syscall and binary support on Sparc | ||
265 | When: 2.6.26 | ||
266 | Why: Largely unmaintained and almost entirely unused. File system | ||
267 | layering used to divert library and dynamic linker searches to | ||
268 | /usr/gnemul is extremely buggy and unfixable. Making it work | ||
269 | is largely pointless as without a lot of work only the most | ||
270 | trivial of Solaris binaries can work with the emulation code. | ||
271 | Who: David S. Miller <davem@davemloft.net> | ||
272 | |||
273 | --------------------------- | ||
274 | |||
275 | What: init_mm export | 264 | What: init_mm export |
276 | When: 2.6.26 | 265 | When: 2.6.26 |
277 | Why: Not used in-tree. The current out-of-tree users used it to | 266 | Why: Not used in-tree. The current out-of-tree users used it to |
@@ -282,6 +271,13 @@ Why: Not used in-tree. The current out-of-tree users used it to | |||
282 | out-of-tree driver. | 271 | out-of-tree driver. |
283 | Who: Thomas Gleixner <tglx@linutronix.de> | 272 | Who: Thomas Gleixner <tglx@linutronix.de> |
284 | 273 | ||
274 | ---------------------------- | ||
275 | |||
276 | What: usedac i386 kernel parameter | ||
277 | When: 2.6.27 | ||
278 | Why: replaced by allowdac and no dac combination | ||
279 | Who: Glauber Costa <gcosta@redhat.com> | ||
280 | |||
285 | --------------------------- | 281 | --------------------------- |
286 | 282 | ||
287 | What: /sys/o2cb symlink | 283 | What: /sys/o2cb symlink |
@@ -291,3 +287,11 @@ Why: /sys/fs/o2cb is the proper location for this information - /sys/o2cb | |||
291 | ocfs2-tools. 2 years should be sufficient time to phase in new versions | 287 | ocfs2-tools. 2 years should be sufficient time to phase in new versions |
292 | which know to look in /sys/fs/o2cb. | 288 | which know to look in /sys/fs/o2cb. |
293 | Who: ocfs2-devel@oss.oracle.com | 289 | Who: ocfs2-devel@oss.oracle.com |
290 | |||
291 | --------------------------- | ||
292 | |||
293 | What: asm/semaphore.h | ||
294 | When: 2.6.26 | ||
295 | Why: Implementation became generic; users should now include | ||
296 | linux/semaphore.h instead. | ||
297 | Who: Matthew Wilcox <willy@linux.intel.com> | ||
diff --git a/Documentation/filesystems/nfs-rdma.txt b/Documentation/filesystems/nfs-rdma.txt new file mode 100644 index 00000000000..d0ec45ae4e7 --- /dev/null +++ b/Documentation/filesystems/nfs-rdma.txt | |||
@@ -0,0 +1,256 @@ | |||
1 | ################################################################################ | ||
2 | # # | ||
3 | # NFS/RDMA README # | ||
4 | # # | ||
5 | ################################################################################ | ||
6 | |||
7 | Author: NetApp and Open Grid Computing | ||
8 | Date: April 15, 2008 | ||
9 | |||
10 | Table of Contents | ||
11 | ~~~~~~~~~~~~~~~~~ | ||
12 | - Overview | ||
13 | - Getting Help | ||
14 | - Installation | ||
15 | - Check RDMA and NFS Setup | ||
16 | - NFS/RDMA Setup | ||
17 | |||
18 | Overview | ||
19 | ~~~~~~~~ | ||
20 | |||
21 | This document describes how to install and setup the Linux NFS/RDMA client | ||
22 | and server software. | ||
23 | |||
24 | The NFS/RDMA client was first included in Linux 2.6.24. The NFS/RDMA server | ||
25 | was first included in the following release, Linux 2.6.25. | ||
26 | |||
27 | In our testing, we have obtained excellent performance results (full 10Gbit | ||
28 | wire bandwidth at minimal client CPU) under many workloads. The code passes | ||
29 | the full Connectathon test suite and operates over both Infiniband and iWARP | ||
30 | RDMA adapters. | ||
31 | |||
32 | Getting Help | ||
33 | ~~~~~~~~~~~~ | ||
34 | |||
35 | If you get stuck, you can ask questions on the | ||
36 | |||
37 | nfs-rdma-devel@lists.sourceforge.net | ||
38 | |||
39 | mailing list. | ||
40 | |||
41 | Installation | ||
42 | ~~~~~~~~~~~~ | ||
43 | |||
44 | These instructions are a step by step guide to building a machine for | ||
45 | use with NFS/RDMA. | ||
46 | |||
47 | - Install an RDMA device | ||
48 | |||
49 | Any device supported by the drivers in drivers/infiniband/hw is acceptable. | ||
50 | |||
51 | Testing has been performed using several Mellanox-based IB cards, the | ||
52 | Ammasso AMS1100 iWARP adapter, and the Chelsio cxgb3 iWARP adapter. | ||
53 | |||
54 | - Install a Linux distribution and tools | ||
55 | |||
56 | The first kernel release to contain both the NFS/RDMA client and server was | ||
57 | Linux 2.6.25 Therefore, a distribution compatible with this and subsequent | ||
58 | Linux kernel release should be installed. | ||
59 | |||
60 | The procedures described in this document have been tested with | ||
61 | distributions from Red Hat's Fedora Project (http://fedora.redhat.com/). | ||
62 | |||
63 | - Install nfs-utils-1.1.1 or greater on the client | ||
64 | |||
65 | An NFS/RDMA mount point can only be obtained by using the mount.nfs | ||
66 | command in nfs-utils-1.1.1 or greater. To see which version of mount.nfs | ||
67 | you are using, type: | ||
68 | |||
69 | > /sbin/mount.nfs -V | ||
70 | |||
71 | If the version is less than 1.1.1 or the command does not exist, | ||
72 | then you will need to install the latest version of nfs-utils. | ||
73 | |||
74 | Download the latest package from: | ||
75 | |||
76 | http://www.kernel.org/pub/linux/utils/nfs | ||
77 | |||
78 | Uncompress the package and follow the installation instructions. | ||
79 | |||
80 | If you will not be using GSS and NFSv4, the installation process | ||
81 | can be simplified by disabling these features when running configure: | ||
82 | |||
83 | > ./configure --disable-gss --disable-nfsv4 | ||
84 | |||
85 | For more information on this see the package's README and INSTALL files. | ||
86 | |||
87 | After building the nfs-utils package, there will be a mount.nfs binary in | ||
88 | the utils/mount directory. This binary can be used to initiate NFS v2, v3, | ||
89 | or v4 mounts. To initiate a v4 mount, the binary must be called mount.nfs4. | ||
90 | The standard technique is to create a symlink called mount.nfs4 to mount.nfs. | ||
91 | |||
92 | NOTE: mount.nfs and therefore nfs-utils-1.1.1 or greater is only needed | ||
93 | on the NFS client machine. You do not need this specific version of | ||
94 | nfs-utils on the server. Furthermore, only the mount.nfs command from | ||
95 | nfs-utils-1.1.1 is needed on the client. | ||
96 | |||
97 | - Install a Linux kernel with NFS/RDMA | ||
98 | |||
99 | The NFS/RDMA client and server are both included in the mainline Linux | ||
100 | kernel version 2.6.25 and later. This and other versions of the 2.6 Linux | ||
101 | kernel can be found at: | ||
102 | |||
103 | ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ | ||
104 | |||
105 | Download the sources and place them in an appropriate location. | ||
106 | |||
107 | - Configure the RDMA stack | ||
108 | |||
109 | Make sure your kernel configuration has RDMA support enabled. Under | ||
110 | Device Drivers -> InfiniBand support, update the kernel configuration | ||
111 | to enable InfiniBand support [NOTE: the option name is misleading. Enabling | ||
112 | InfiniBand support is required for all RDMA devices (IB, iWARP, etc.)]. | ||
113 | |||
114 | Enable the appropriate IB HCA support (mlx4, mthca, ehca, ipath, etc.) or | ||
115 | iWARP adapter support (amso, cxgb3, etc.). | ||
116 | |||
117 | If you are using InfiniBand, be sure to enable IP-over-InfiniBand support. | ||
118 | |||
119 | - Configure the NFS client and server | ||
120 | |||
121 | Your kernel configuration must also have NFS file system support and/or | ||
122 | NFS server support enabled. These and other NFS related configuration | ||
123 | options can be found under File Systems -> Network File Systems. | ||
124 | |||
125 | - Build, install, reboot | ||
126 | |||
127 | The NFS/RDMA code will be enabled automatically if NFS and RDMA | ||
128 | are turned on. The NFS/RDMA client and server are configured via the hidden | ||
129 | SUNRPC_XPRT_RDMA config option that depends on SUNRPC and INFINIBAND. The | ||
130 | value of SUNRPC_XPRT_RDMA will be: | ||
131 | |||
132 | - N if either SUNRPC or INFINIBAND are N, in this case the NFS/RDMA client | ||
133 | and server will not be built | ||
134 | - M if both SUNRPC and INFINIBAND are on (M or Y) and at least one is M, | ||
135 | in this case the NFS/RDMA client and server will be built as modules | ||
136 | - Y if both SUNRPC and INFINIBAND are Y, in this case the NFS/RDMA client | ||
137 | and server will be built into the kernel | ||
138 | |||
139 | Therefore, if you have followed the steps above and turned no NFS and RDMA, | ||
140 | the NFS/RDMA client and server will be built. | ||
141 | |||
142 | Build a new kernel, install it, boot it. | ||
143 | |||
144 | Check RDMA and NFS Setup | ||
145 | ~~~~~~~~~~~~~~~~~~~~~~~~ | ||
146 | |||
147 | Before configuring the NFS/RDMA software, it is a good idea to test | ||
148 | your new kernel to ensure that the kernel is working correctly. | ||
149 | In particular, it is a good idea to verify that the RDMA stack | ||
150 | is functioning as expected and standard NFS over TCP/IP and/or UDP/IP | ||
151 | is working properly. | ||
152 | |||
153 | - Check RDMA Setup | ||
154 | |||
155 | If you built the RDMA components as modules, load them at | ||
156 | this time. For example, if you are using a Mellanox Tavor/Sinai/Arbel | ||
157 | card: | ||
158 | |||
159 | > modprobe ib_mthca | ||
160 | > modprobe ib_ipoib | ||
161 | |||
162 | If you are using InfiniBand, make sure there is a Subnet Manager (SM) | ||
163 | running on the network. If your IB switch has an embedded SM, you can | ||
164 | use it. Otherwise, you will need to run an SM, such as OpenSM, on one | ||
165 | of your end nodes. | ||
166 | |||
167 | If an SM is running on your network, you should see the following: | ||
168 | |||
169 | > cat /sys/class/infiniband/driverX/ports/1/state | ||
170 | 4: ACTIVE | ||
171 | |||
172 | where driverX is mthca0, ipath5, ehca3, etc. | ||
173 | |||
174 | To further test the InfiniBand software stack, use IPoIB (this | ||
175 | assumes you have two IB hosts named host1 and host2): | ||
176 | |||
177 | host1> ifconfig ib0 a.b.c.x | ||
178 | host2> ifconfig ib0 a.b.c.y | ||
179 | host1> ping a.b.c.y | ||
180 | host2> ping a.b.c.x | ||
181 | |||
182 | For other device types, follow the appropriate procedures. | ||
183 | |||
184 | - Check NFS Setup | ||
185 | |||
186 | For the NFS components enabled above (client and/or server), | ||
187 | test their functionality over standard Ethernet using TCP/IP or UDP/IP. | ||
188 | |||
189 | NFS/RDMA Setup | ||
190 | ~~~~~~~~~~~~~~ | ||
191 | |||
192 | We recommend that you use two machines, one to act as the client and | ||
193 | one to act as the server. | ||
194 | |||
195 | One time configuration: | ||
196 | |||
197 | - On the server system, configure the /etc/exports file and | ||
198 | start the NFS/RDMA server. | ||
199 | |||
200 | Exports entries with the following formats have been tested: | ||
201 | |||
202 | /vol0 192.168.0.47(fsid=0,rw,async,insecure,no_root_squash) | ||
203 | /vol0 192.168.0.0/255.255.255.0(fsid=0,rw,async,insecure,no_root_squash) | ||
204 | |||
205 | The IP address(es) is(are) the client's IPoIB address for an InfiniBand HCA or the | ||
206 | cleint's iWARP address(es) for an RNIC. | ||
207 | |||
208 | NOTE: The "insecure" option must be used because the NFS/RDMA client does not | ||
209 | use a reserved port. | ||
210 | |||
211 | Each time a machine boots: | ||
212 | |||
213 | - Load and configure the RDMA drivers | ||
214 | |||
215 | For InfiniBand using a Mellanox adapter: | ||
216 | |||
217 | > modprobe ib_mthca | ||
218 | > modprobe ib_ipoib | ||
219 | > ifconfig ib0 a.b.c.d | ||
220 | |||
221 | NOTE: use unique addresses for the client and server | ||
222 | |||
223 | - Start the NFS server | ||
224 | |||
225 | If the NFS/RDMA server was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in kernel config), | ||
226 | load the RDMA transport module: | ||
227 | |||
228 | > modprobe svcrdma | ||
229 | |||
230 | Regardless of how the server was built (module or built-in), start the server: | ||
231 | |||
232 | > /etc/init.d/nfs start | ||
233 | |||
234 | or | ||
235 | |||
236 | > service nfs start | ||
237 | |||
238 | Instruct the server to listen on the RDMA transport: | ||
239 | |||
240 | > echo rdma 2050 > /proc/fs/nfsd/portlist | ||
241 | |||
242 | - On the client system | ||
243 | |||
244 | If the NFS/RDMA client was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in kernel config), | ||
245 | load the RDMA client module: | ||
246 | |||
247 | > modprobe xprtrdma.ko | ||
248 | |||
249 | Regardless of how the client was built (module or built-in), issue the mount.nfs command: | ||
250 | |||
251 | > /path/to/your/mount.nfs <IPoIB-server-name-or-address>:/<export> /mnt -i -o rdma,port=2050 | ||
252 | |||
253 | To verify that the mount is using RDMA, run "cat /proc/mounts" and check the | ||
254 | "proto" field for the given mount. | ||
255 | |||
256 | Congratulations! You're using NFS/RDMA! | ||
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 518ebe609e2..2a99116edc4 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
@@ -43,6 +43,7 @@ Table of Contents | |||
43 | 2.13 /proc/<pid>/oom_score - Display current oom-killer score | 43 | 2.13 /proc/<pid>/oom_score - Display current oom-killer score |
44 | 2.14 /proc/<pid>/io - Display the IO accounting fields | 44 | 2.14 /proc/<pid>/io - Display the IO accounting fields |
45 | 2.15 /proc/<pid>/coredump_filter - Core dump filtering settings | 45 | 2.15 /proc/<pid>/coredump_filter - Core dump filtering settings |
46 | 2.16 /proc/<pid>/mountinfo - Information about mounts | ||
46 | 47 | ||
47 | ------------------------------------------------------------------------------ | 48 | ------------------------------------------------------------------------------ |
48 | Preface | 49 | Preface |
@@ -2348,4 +2349,41 @@ For example: | |||
2348 | $ echo 0x7 > /proc/self/coredump_filter | 2349 | $ echo 0x7 > /proc/self/coredump_filter |
2349 | $ ./some_program | 2350 | $ ./some_program |
2350 | 2351 | ||
2352 | 2.16 /proc/<pid>/mountinfo - Information about mounts | ||
2353 | -------------------------------------------------------- | ||
2354 | |||
2355 | This file contains lines of the form: | ||
2356 | |||
2357 | 36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue | ||
2358 | (1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11) | ||
2359 | |||
2360 | (1) mount ID: unique identifier of the mount (may be reused after umount) | ||
2361 | (2) parent ID: ID of parent (or of self for the top of the mount tree) | ||
2362 | (3) major:minor: value of st_dev for files on filesystem | ||
2363 | (4) root: root of the mount within the filesystem | ||
2364 | (5) mount point: mount point relative to the process's root | ||
2365 | (6) mount options: per mount options | ||
2366 | (7) optional fields: zero or more fields of the form "tag[:value]" | ||
2367 | (8) separator: marks the end of the optional fields | ||
2368 | (9) filesystem type: name of filesystem of the form "type[.subtype]" | ||
2369 | (10) mount source: filesystem specific information or "none" | ||
2370 | (11) super options: per super block options | ||
2371 | |||
2372 | Parsers should ignore all unrecognised optional fields. Currently the | ||
2373 | possible optional fields are: | ||
2374 | |||
2375 | shared:X mount is shared in peer group X | ||
2376 | master:X mount is slave to peer group X | ||
2377 | propagate_from:X mount is slave and receives propagation from peer group X (*) | ||
2378 | unbindable mount is unbindable | ||
2379 | |||
2380 | (*) X is the closest dominant peer group under the process's root. If | ||
2381 | X is the immediate master of the mount, or if there's no dominant peer | ||
2382 | group under the same root, then only the "master:X" field is present | ||
2383 | and not the "propagate_from:X" field. | ||
2384 | |||
2385 | For more information on mount propagation see: | ||
2386 | |||
2387 | Documentation/filesystems/sharedsubtree.txt | ||
2388 | |||
2351 | ------------------------------------------------------------------------------ | 2389 | ------------------------------------------------------------------------------ |
diff --git a/Documentation/filesystems/seq_file.txt b/Documentation/filesystems/seq_file.txt index 7fb8e6dc62b..b843743aa0b 100644 --- a/Documentation/filesystems/seq_file.txt +++ b/Documentation/filesystems/seq_file.txt | |||
@@ -122,8 +122,7 @@ stop() is the place to free it. | |||
122 | } | 122 | } |
123 | 123 | ||
124 | Finally, the show() function should format the object currently pointed to | 124 | Finally, the show() function should format the object currently pointed to |
125 | by the iterator for output. It should return zero, or an error code if | 125 | by the iterator for output. The example module's show() function is: |
126 | something goes wrong. The example module's show() function is: | ||
127 | 126 | ||
128 | static int ct_seq_show(struct seq_file *s, void *v) | 127 | static int ct_seq_show(struct seq_file *s, void *v) |
129 | { | 128 | { |
@@ -132,6 +131,12 @@ something goes wrong. The example module's show() function is: | |||
132 | return 0; | 131 | return 0; |
133 | } | 132 | } |
134 | 133 | ||
134 | If all is well, the show() function should return zero. A negative error | ||
135 | code in the usual manner indicates that something went wrong; it will be | ||
136 | passed back to user space. This function can also return SEQ_SKIP, which | ||
137 | causes the current item to be skipped; if the show() function has already | ||
138 | generated output before returning SEQ_SKIP, that output will be dropped. | ||
139 | |||
135 | We will look at seq_printf() in a moment. But first, the definition of the | 140 | We will look at seq_printf() in a moment. But first, the definition of the |
136 | seq_file iterator is finished by creating a seq_operations structure with | 141 | seq_file iterator is finished by creating a seq_operations structure with |
137 | the four functions we have just defined: | 142 | the four functions we have just defined: |
@@ -182,12 +187,18 @@ The first two output a single character and a string, just like one would | |||
182 | expect. seq_escape() is like seq_puts(), except that any character in s | 187 | expect. seq_escape() is like seq_puts(), except that any character in s |
183 | which is in the string esc will be represented in octal form in the output. | 188 | which is in the string esc will be represented in octal form in the output. |
184 | 189 | ||
185 | There is also a function for printing filenames: | 190 | There is also a pair of functions for printing filenames: |
186 | 191 | ||
187 | int seq_path(struct seq_file *m, struct path *path, char *esc); | 192 | int seq_path(struct seq_file *m, struct path *path, char *esc); |
193 | int seq_path_root(struct seq_file *m, struct path *path, | ||
194 | struct path *root, char *esc) | ||
188 | 195 | ||
189 | Here, path indicates the file of interest, and esc is a set of characters | 196 | Here, path indicates the file of interest, and esc is a set of characters |
190 | which should be escaped in the output. | 197 | which should be escaped in the output. A call to seq_path() will output |
198 | the path relative to the current process's filesystem root. If a different | ||
199 | root is desired, it can be used with seq_path_root(). Note that, if it | ||
200 | turns out that path cannot be reached from root, the value of root will be | ||
201 | changed in seq_file_root() to a root which *does* work. | ||
191 | 202 | ||
192 | 203 | ||
193 | Making it all work | 204 | Making it all work |
diff --git a/Documentation/filesystems/sysfs.txt b/Documentation/filesystems/sysfs.txt index 4598ef7b622..7f27b8f840d 100644 --- a/Documentation/filesystems/sysfs.txt +++ b/Documentation/filesystems/sysfs.txt | |||
@@ -176,8 +176,10 @@ implementations: | |||
176 | Recall that an attribute should only be exporting one value, or an | 176 | Recall that an attribute should only be exporting one value, or an |
177 | array of similar values, so this shouldn't be that expensive. | 177 | array of similar values, so this shouldn't be that expensive. |
178 | 178 | ||
179 | This allows userspace to do partial reads and seeks arbitrarily over | 179 | This allows userspace to do partial reads and forward seeks |
180 | the entire file at will. | 180 | arbitrarily over the entire file at will. If userspace seeks back to |
181 | zero or does a pread(2) with an offset of '0' the show() method will | ||
182 | be called again, rearmed, to fill the buffer. | ||
181 | 183 | ||
182 | - On write(2), sysfs expects the entire buffer to be passed during the | 184 | - On write(2), sysfs expects the entire buffer to be passed during the |
183 | first write. Sysfs then passes the entire buffer to the store() | 185 | first write. Sysfs then passes the entire buffer to the store() |
@@ -192,6 +194,9 @@ implementations: | |||
192 | 194 | ||
193 | Other notes: | 195 | Other notes: |
194 | 196 | ||
197 | - Writing causes the show() method to be rearmed regardless of current | ||
198 | file position. | ||
199 | |||
195 | - The buffer will always be PAGE_SIZE bytes in length. On i386, this | 200 | - The buffer will always be PAGE_SIZE bytes in length. On i386, this |
196 | is 4096. | 201 | is 4096. |
197 | 202 | ||
diff --git a/Documentation/firmware_class/firmware_sample_driver.c b/Documentation/firmware_class/firmware_sample_driver.c deleted file mode 100644 index 6865cbe075e..00000000000 --- a/Documentation/firmware_class/firmware_sample_driver.c +++ /dev/null | |||
@@ -1,115 +0,0 @@ | |||
1 | /* | ||
2 | * firmware_sample_driver.c - | ||
3 | * | ||
4 | * Copyright (c) 2003 Manuel Estrada Sainz | ||
5 | * | ||
6 | * Sample code on how to use request_firmware() from drivers. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #include <linux/module.h> | ||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/device.h> | ||
14 | #include <linux/string.h> | ||
15 | |||
16 | #include "linux/firmware.h" | ||
17 | |||
18 | static struct device ghost_device = { | ||
19 | .bus_id = "ghost0", | ||
20 | }; | ||
21 | |||
22 | |||
23 | static void sample_firmware_load(char *firmware, int size) | ||
24 | { | ||
25 | u8 buf[size+1]; | ||
26 | memcpy(buf, firmware, size); | ||
27 | buf[size] = '\0'; | ||
28 | printk(KERN_INFO "firmware_sample_driver: firmware: %s\n", buf); | ||
29 | } | ||
30 | |||
31 | static void sample_probe_default(void) | ||
32 | { | ||
33 | /* uses the default method to get the firmware */ | ||
34 | const struct firmware *fw_entry; | ||
35 | printk(KERN_INFO "firmware_sample_driver: a ghost device got inserted :)\n"); | ||
36 | |||
37 | if(request_firmware(&fw_entry, "sample_driver_fw", &ghost_device)!=0) | ||
38 | { | ||
39 | printk(KERN_ERR | ||
40 | "firmware_sample_driver: Firmware not available\n"); | ||
41 | return; | ||
42 | } | ||
43 | |||
44 | sample_firmware_load(fw_entry->data, fw_entry->size); | ||
45 | |||
46 | release_firmware(fw_entry); | ||
47 | |||
48 | /* finish setting up the device */ | ||
49 | } | ||
50 | static void sample_probe_specific(void) | ||
51 | { | ||
52 | /* Uses some specific hotplug support to get the firmware from | ||
53 | * userspace directly into the hardware, or via some sysfs file */ | ||
54 | |||
55 | /* NOTE: This currently doesn't work */ | ||
56 | |||
57 | printk(KERN_INFO "firmware_sample_driver: a ghost device got inserted :)\n"); | ||
58 | |||
59 | if(request_firmware(NULL, "sample_driver_fw", &ghost_device)!=0) | ||
60 | { | ||
61 | printk(KERN_ERR | ||
62 | "firmware_sample_driver: Firmware load failed\n"); | ||
63 | return; | ||
64 | } | ||
65 | |||
66 | /* request_firmware blocks until userspace finished, so at | ||
67 | * this point the firmware should be already in the device */ | ||
68 | |||
69 | /* finish setting up the device */ | ||
70 | } | ||
71 | static void sample_probe_async_cont(const struct firmware *fw, void *context) | ||
72 | { | ||
73 | if(!fw){ | ||
74 | printk(KERN_ERR | ||
75 | "firmware_sample_driver: firmware load failed\n"); | ||
76 | return; | ||
77 | } | ||
78 | |||
79 | printk(KERN_INFO "firmware_sample_driver: device pointer \"%s\"\n", | ||
80 | (char *)context); | ||
81 | sample_firmware_load(fw->data, fw->size); | ||
82 | } | ||
83 | static void sample_probe_async(void) | ||
84 | { | ||
85 | /* Let's say that I can't sleep */ | ||
86 | int error; | ||
87 | error = request_firmware_nowait (THIS_MODULE, FW_ACTION_NOHOTPLUG, | ||
88 | "sample_driver_fw", &ghost_device, | ||
89 | "my device pointer", | ||
90 | sample_probe_async_cont); | ||
91 | if(error){ | ||
92 | printk(KERN_ERR | ||
93 | "firmware_sample_driver:" | ||
94 | " request_firmware_nowait failed\n"); | ||
95 | } | ||
96 | } | ||
97 | |||
98 | static int sample_init(void) | ||
99 | { | ||
100 | device_initialize(&ghost_device); | ||
101 | /* since there is no real hardware insertion I just call the | ||
102 | * sample probe functions here */ | ||
103 | sample_probe_specific(); | ||
104 | sample_probe_default(); | ||
105 | sample_probe_async(); | ||
106 | return 0; | ||
107 | } | ||
108 | static void __exit sample_exit(void) | ||
109 | { | ||
110 | } | ||
111 | |||
112 | module_init (sample_init); | ||
113 | module_exit (sample_exit); | ||
114 | |||
115 | MODULE_LICENSE("GPL"); | ||
diff --git a/Documentation/firmware_class/firmware_sample_firmware_class.c b/Documentation/firmware_class/firmware_sample_firmware_class.c deleted file mode 100644 index 2de62854f0e..00000000000 --- a/Documentation/firmware_class/firmware_sample_firmware_class.c +++ /dev/null | |||
@@ -1,207 +0,0 @@ | |||
1 | /* | ||
2 | * firmware_sample_firmware_class.c - | ||
3 | * | ||
4 | * Copyright (c) 2003 Manuel Estrada Sainz | ||
5 | * | ||
6 | * NOTE: This is just a probe of concept, if you think that your driver would | ||
7 | * be well served by this mechanism please contact me first. | ||
8 | * | ||
9 | * DON'T USE THIS CODE AS IS | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #include <linux/device.h> | ||
14 | #include <linux/module.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/timer.h> | ||
17 | #include <linux/slab.h> | ||
18 | #include <linux/string.h> | ||
19 | #include <linux/firmware.h> | ||
20 | |||
21 | |||
22 | MODULE_AUTHOR("Manuel Estrada Sainz"); | ||
23 | MODULE_DESCRIPTION("Hackish sample for using firmware class directly"); | ||
24 | MODULE_LICENSE("GPL"); | ||
25 | |||
26 | static inline struct class_device *to_class_dev(struct kobject *obj) | ||
27 | { | ||
28 | return container_of(obj,struct class_device,kobj); | ||
29 | } | ||
30 | static inline | ||
31 | struct class_device_attribute *to_class_dev_attr(struct attribute *_attr) | ||
32 | { | ||
33 | return container_of(_attr,struct class_device_attribute,attr); | ||
34 | } | ||
35 | |||
36 | int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr); | ||
37 | int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr); | ||
38 | |||
39 | struct firmware_priv { | ||
40 | char fw_id[FIRMWARE_NAME_MAX]; | ||
41 | s32 loading:2; | ||
42 | u32 abort:1; | ||
43 | }; | ||
44 | |||
45 | extern struct class firmware_class; | ||
46 | |||
47 | static ssize_t firmware_loading_show(struct class_device *class_dev, char *buf) | ||
48 | { | ||
49 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); | ||
50 | return sprintf(buf, "%d\n", fw_priv->loading); | ||
51 | } | ||
52 | static ssize_t firmware_loading_store(struct class_device *class_dev, | ||
53 | const char *buf, size_t count) | ||
54 | { | ||
55 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); | ||
56 | int prev_loading = fw_priv->loading; | ||
57 | |||
58 | fw_priv->loading = simple_strtol(buf, NULL, 10); | ||
59 | |||
60 | switch(fw_priv->loading){ | ||
61 | case -1: | ||
62 | /* abort load an panic */ | ||
63 | break; | ||
64 | case 1: | ||
65 | /* setup load */ | ||
66 | break; | ||
67 | case 0: | ||
68 | if(prev_loading==1){ | ||
69 | /* finish load and get the device back to working | ||
70 | * state */ | ||
71 | } | ||
72 | break; | ||
73 | } | ||
74 | |||
75 | return count; | ||
76 | } | ||
77 | static CLASS_DEVICE_ATTR(loading, 0644, | ||
78 | firmware_loading_show, firmware_loading_store); | ||
79 | |||
80 | static ssize_t firmware_data_read(struct kobject *kobj, | ||
81 | struct bin_attribute *bin_attr, | ||
82 | char *buffer, loff_t offset, size_t count) | ||
83 | { | ||
84 | struct class_device *class_dev = to_class_dev(kobj); | ||
85 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); | ||
86 | |||
87 | /* read from the devices firmware memory */ | ||
88 | |||
89 | return count; | ||
90 | } | ||
91 | static ssize_t firmware_data_write(struct kobject *kobj, | ||
92 | struct bin_attribute *bin_attr, | ||
93 | char *buffer, loff_t offset, size_t count) | ||
94 | { | ||
95 | struct class_device *class_dev = to_class_dev(kobj); | ||
96 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); | ||
97 | |||
98 | /* write to the devices firmware memory */ | ||
99 | |||
100 | return count; | ||
101 | } | ||
102 | static struct bin_attribute firmware_attr_data = { | ||
103 | .attr = {.name = "data", .mode = 0644}, | ||
104 | .size = 0, | ||
105 | .read = firmware_data_read, | ||
106 | .write = firmware_data_write, | ||
107 | }; | ||
108 | static int fw_setup_class_device(struct class_device *class_dev, | ||
109 | const char *fw_name, | ||
110 | struct device *device) | ||
111 | { | ||
112 | int retval; | ||
113 | struct firmware_priv *fw_priv; | ||
114 | |||
115 | fw_priv = kzalloc(sizeof(struct firmware_priv), GFP_KERNEL); | ||
116 | if (!fw_priv) { | ||
117 | retval = -ENOMEM; | ||
118 | goto out; | ||
119 | } | ||
120 | |||
121 | memset(class_dev, 0, sizeof(*class_dev)); | ||
122 | |||
123 | strncpy(fw_priv->fw_id, fw_name, FIRMWARE_NAME_MAX); | ||
124 | fw_priv->fw_id[FIRMWARE_NAME_MAX-1] = '\0'; | ||
125 | |||
126 | strncpy(class_dev->class_id, device->bus_id, BUS_ID_SIZE); | ||
127 | class_dev->class_id[BUS_ID_SIZE-1] = '\0'; | ||
128 | class_dev->dev = device; | ||
129 | |||
130 | class_dev->class = &firmware_class, | ||
131 | class_set_devdata(class_dev, fw_priv); | ||
132 | retval = class_device_register(class_dev); | ||
133 | if (retval){ | ||
134 | printk(KERN_ERR "%s: class_device_register failed\n", | ||
135 | __FUNCTION__); | ||
136 | goto error_free_fw_priv; | ||
137 | } | ||
138 | |||
139 | retval = sysfs_create_bin_file(&class_dev->kobj, &firmware_attr_data); | ||
140 | if (retval){ | ||
141 | printk(KERN_ERR "%s: sysfs_create_bin_file failed\n", | ||
142 | __FUNCTION__); | ||
143 | goto error_unreg_class_dev; | ||
144 | } | ||
145 | |||
146 | retval = class_device_create_file(class_dev, | ||
147 | &class_device_attr_loading); | ||
148 | if (retval){ | ||
149 | printk(KERN_ERR "%s: class_device_create_file failed\n", | ||
150 | __FUNCTION__); | ||
151 | goto error_remove_data; | ||
152 | } | ||
153 | |||
154 | goto out; | ||
155 | |||
156 | error_remove_data: | ||
157 | sysfs_remove_bin_file(&class_dev->kobj, &firmware_attr_data); | ||
158 | error_unreg_class_dev: | ||
159 | class_device_unregister(class_dev); | ||
160 | error_free_fw_priv: | ||
161 | kfree(fw_priv); | ||
162 | out: | ||
163 | return retval; | ||
164 | } | ||
165 | static void fw_remove_class_device(struct class_device *class_dev) | ||
166 | { | ||
167 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); | ||
168 | |||
169 | class_device_remove_file(class_dev, &class_device_attr_loading); | ||
170 | sysfs_remove_bin_file(&class_dev->kobj, &firmware_attr_data); | ||
171 | class_device_unregister(class_dev); | ||
172 | } | ||
173 | |||
174 | static struct class_device *class_dev; | ||
175 | |||
176 | static struct device my_device = { | ||
177 | .bus_id = "my_dev0", | ||
178 | }; | ||
179 | |||
180 | static int __init firmware_sample_init(void) | ||
181 | { | ||
182 | int error; | ||
183 | |||
184 | device_initialize(&my_device); | ||
185 | class_dev = kmalloc(sizeof(struct class_device), GFP_KERNEL); | ||
186 | if(!class_dev) | ||
187 | return -ENOMEM; | ||
188 | |||
189 | error = fw_setup_class_device(class_dev, "my_firmware_image", | ||
190 | &my_device); | ||
191 | if(error){ | ||
192 | kfree(class_dev); | ||
193 | return error; | ||
194 | } | ||
195 | return 0; | ||
196 | |||
197 | } | ||
198 | static void __exit firmware_sample_exit(void) | ||
199 | { | ||
200 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); | ||
201 | fw_remove_class_device(class_dev); | ||
202 | kfree(fw_priv); | ||
203 | kfree(class_dev); | ||
204 | } | ||
205 | module_init(firmware_sample_init); | ||
206 | module_exit(firmware_sample_exit); | ||
207 | |||
diff --git a/Documentation/highuid.txt b/Documentation/highuid.txt index 76034d9dbfc..6bad6f1d1ca 100644 --- a/Documentation/highuid.txt +++ b/Documentation/highuid.txt | |||
@@ -28,8 +28,6 @@ What's left to be done for 32-bit UIDs on all Linux architectures: | |||
28 | uses the 32-bit UID system calls properly otherwise. | 28 | uses the 32-bit UID system calls properly otherwise. |
29 | 29 | ||
30 | This affects at least: | 30 | This affects at least: |
31 | SunOS emulation | ||
32 | Solaris emulation | ||
33 | iBCS on Intel | 31 | iBCS on Intel |
34 | 32 | ||
35 | sparc32 emulation on sparc64 | 33 | sparc32 emulation on sparc64 |
diff --git a/Documentation/kbuild/modules.txt b/Documentation/kbuild/modules.txt index 1d247d59ad5..1821c077b43 100644 --- a/Documentation/kbuild/modules.txt +++ b/Documentation/kbuild/modules.txt | |||
@@ -486,7 +486,7 @@ Module.symvers contains a list of all exported symbols from a kernel build. | |||
486 | Sometimes, an external module uses exported symbols from another | 486 | Sometimes, an external module uses exported symbols from another |
487 | external module. Kbuild needs to have full knowledge on all symbols | 487 | external module. Kbuild needs to have full knowledge on all symbols |
488 | to avoid spitting out warnings about undefined symbols. | 488 | to avoid spitting out warnings about undefined symbols. |
489 | Two solutions exist to let kbuild know all symbols of more than | 489 | Three solutions exist to let kbuild know all symbols of more than |
490 | one external module. | 490 | one external module. |
491 | The method with a top-level kbuild file is recommended but may be | 491 | The method with a top-level kbuild file is recommended but may be |
492 | impractical in certain situations. | 492 | impractical in certain situations. |
@@ -523,6 +523,13 @@ Module.symvers contains a list of all exported symbols from a kernel build. | |||
523 | containing the sum of all symbols defined and not part of the | 523 | containing the sum of all symbols defined and not part of the |
524 | kernel. | 524 | kernel. |
525 | 525 | ||
526 | Use make variable KBUILD_EXTRA_SYMBOLS in the Makefile | ||
527 | If it is impractical to copy Module.symvers from another | ||
528 | module, you can assign a space separated list of files to | ||
529 | KBUILD_EXTRA_SYMBOLS in your Makfile. These files will be | ||
530 | loaded by modpost during the initialisation of its symbol | ||
531 | tables. | ||
532 | |||
526 | === 8. Tips & Tricks | 533 | === 8. Tips & Tricks |
527 | 534 | ||
528 | --- 8.1 Testing for CONFIG_FOO_BAR | 535 | --- 8.1 Testing for CONFIG_FOO_BAR |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 4b0f1ae31a4..bf6303ec0bd 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -847,6 +847,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
847 | than 32 bit addressing. The default is to look | 847 | than 32 bit addressing. The default is to look |
848 | for translation below 32 bit and if not available | 848 | for translation below 32 bit and if not available |
849 | then look in the higher range. | 849 | then look in the higher range. |
850 | strict [Default Off] | ||
851 | With this option on every unmap_single operation will | ||
852 | result in a hardware IOTLB flush operation as opposed | ||
853 | to batching them for performance. | ||
850 | 854 | ||
851 | io_delay= [X86-32,X86-64] I/O delay method | 855 | io_delay= [X86-32,X86-64] I/O delay method |
852 | 0x80 | 856 | 0x80 |
@@ -954,6 +958,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
954 | 958 | ||
955 | l2cr= [PPC] | 959 | l2cr= [PPC] |
956 | 960 | ||
961 | l3cr= [PPC] | ||
962 | |||
957 | lapic [X86-32,APIC] Enable the local APIC even if BIOS | 963 | lapic [X86-32,APIC] Enable the local APIC even if BIOS |
958 | disabled it. | 964 | disabled it. |
959 | 965 | ||
@@ -1280,8 +1286,16 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1280 | noexec [IA-64] | 1286 | noexec [IA-64] |
1281 | 1287 | ||
1282 | noexec [X86-32,X86-64] | 1288 | noexec [X86-32,X86-64] |
1289 | On X86-32 available only on PAE configured kernels. | ||
1283 | noexec=on: enable non-executable mappings (default) | 1290 | noexec=on: enable non-executable mappings (default) |
1284 | noexec=off: disable nn-executable mappings | 1291 | noexec=off: disable non-executable mappings |
1292 | |||
1293 | noexec32 [X86-64] | ||
1294 | This affects only 32-bit executables. | ||
1295 | noexec32=on: enable non-executable mappings (default) | ||
1296 | read doesn't imply executable mappings | ||
1297 | noexec32=off: disable non-executable mappings | ||
1298 | read implies executable mappings | ||
1285 | 1299 | ||
1286 | nofxsr [BUGS=X86-32] Disables x86 floating point extended | 1300 | nofxsr [BUGS=X86-32] Disables x86 floating point extended |
1287 | register save and restore. The kernel will only save | 1301 | register save and restore. The kernel will only save |
@@ -1461,10 +1475,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1461 | nomsi [MSI] If the PCI_MSI kernel config parameter is | 1475 | nomsi [MSI] If the PCI_MSI kernel config parameter is |
1462 | enabled, this kernel boot option can be used to | 1476 | enabled, this kernel boot option can be used to |
1463 | disable the use of MSI interrupts system-wide. | 1477 | disable the use of MSI interrupts system-wide. |
1464 | nosort [X86-32] Don't sort PCI devices according to | ||
1465 | order given by the PCI BIOS. This sorting is | ||
1466 | done to get a device order compatible with | ||
1467 | older kernels. | ||
1468 | biosirq [X86-32] Use PCI BIOS calls to get the interrupt | 1478 | biosirq [X86-32] Use PCI BIOS calls to get the interrupt |
1469 | routing table. These calls are known to be buggy | 1479 | routing table. These calls are known to be buggy |
1470 | on several machines and they hang the machine | 1480 | on several machines and they hang the machine |
diff --git a/Documentation/magic-number.txt b/Documentation/magic-number.txt index bd450e79755..95070028d15 100644 --- a/Documentation/magic-number.txt +++ b/Documentation/magic-number.txt | |||
@@ -95,7 +95,6 @@ RFCOMM_TTY_MAGIC 0x6d02 net/bluetooth/rfcomm/tty.c | |||
95 | USB_SERIAL_PORT_MAGIC 0x7301 usb_serial_port drivers/usb/serial/usb-serial.h | 95 | USB_SERIAL_PORT_MAGIC 0x7301 usb_serial_port drivers/usb/serial/usb-serial.h |
96 | CG_MAGIC 0x00090255 ufs_cylinder_group include/linux/ufs_fs.h | 96 | CG_MAGIC 0x00090255 ufs_cylinder_group include/linux/ufs_fs.h |
97 | A2232_MAGIC 0x000a2232 gs_port drivers/char/ser_a2232.h | 97 | A2232_MAGIC 0x000a2232 gs_port drivers/char/ser_a2232.h |
98 | SOLARIS_SOCKET_MAGIC 0x000ADDED sol_socket_struct arch/sparc64/solaris/socksys.h | ||
99 | RPORT_MAGIC 0x00525001 r_port drivers/char/rocket_int.h | 98 | RPORT_MAGIC 0x00525001 r_port drivers/char/rocket_int.h |
100 | LSEMAGIC 0x05091998 lse drivers/fc4/fc.c | 99 | LSEMAGIC 0x05091998 lse drivers/fc4/fc.c |
101 | GDTIOCTL_MAGIC 0x06030f07 gdth_iowr_str drivers/scsi/gdth_ioctl.h | 100 | GDTIOCTL_MAGIC 0x06030f07 gdth_iowr_str drivers/scsi/gdth_ioctl.h |
diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt index 1f506f7830e..e5a819a4f0c 100644 --- a/Documentation/memory-barriers.txt +++ b/Documentation/memory-barriers.txt | |||
@@ -430,8 +430,8 @@ There are certain things that the Linux kernel memory barriers do not guarantee: | |||
430 | 430 | ||
431 | [*] For information on bus mastering DMA and coherency please read: | 431 | [*] For information on bus mastering DMA and coherency please read: |
432 | 432 | ||
433 | Documentation/pci.txt | 433 | Documentation/PCI/pci.txt |
434 | Documentation/DMA-mapping.txt | 434 | Documentation/PCI/PCI-DMA-mapping.txt |
435 | Documentation/DMA-API.txt | 435 | Documentation/DMA-API.txt |
436 | 436 | ||
437 | 437 | ||
diff --git a/Documentation/power/devices.txt b/Documentation/power/devices.txt index 461e4f1dbec..421e7d00ffd 100644 --- a/Documentation/power/devices.txt +++ b/Documentation/power/devices.txt | |||
@@ -196,6 +196,11 @@ its parent; and can't be removed or suspended after that parent. | |||
196 | 196 | ||
197 | The policy is that the device tree should match hardware bus topology. | 197 | The policy is that the device tree should match hardware bus topology. |
198 | (Or at least the control bus, for devices which use multiple busses.) | 198 | (Or at least the control bus, for devices which use multiple busses.) |
199 | In particular, this means that a device registration may fail if the parent of | ||
200 | the device is suspending (ie. has been chosen by the PM core as the next | ||
201 | device to suspend) or has already suspended, as well as after all of the other | ||
202 | devices have been suspended. Device drivers must be prepared to cope with such | ||
203 | situations. | ||
199 | 204 | ||
200 | 205 | ||
201 | Suspending Devices | 206 | Suspending Devices |
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index 7b4e8a70882..4cc780024e6 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt | |||
@@ -59,12 +59,39 @@ Table of Contents | |||
59 | p) Freescale Synchronous Serial Interface | 59 | p) Freescale Synchronous Serial Interface |
60 | q) USB EHCI controllers | 60 | q) USB EHCI controllers |
61 | 61 | ||
62 | VII - Specifying interrupt information for devices | 62 | VII - Marvell Discovery mv64[345]6x System Controller chips |
63 | 1) The /system-controller node | ||
64 | 2) Child nodes of /system-controller | ||
65 | a) Marvell Discovery MDIO bus | ||
66 | b) Marvell Discovery ethernet controller | ||
67 | c) Marvell Discovery PHY nodes | ||
68 | d) Marvell Discovery SDMA nodes | ||
69 | e) Marvell Discovery BRG nodes | ||
70 | f) Marvell Discovery CUNIT nodes | ||
71 | g) Marvell Discovery MPSCROUTING nodes | ||
72 | h) Marvell Discovery MPSCINTR nodes | ||
73 | i) Marvell Discovery MPSC nodes | ||
74 | j) Marvell Discovery Watch Dog Timer nodes | ||
75 | k) Marvell Discovery I2C nodes | ||
76 | l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes | ||
77 | m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes | ||
78 | n) Marvell Discovery GPP (General Purpose Pins) nodes | ||
79 | o) Marvell Discovery PCI host bridge node | ||
80 | p) Marvell Discovery CPU Error nodes | ||
81 | q) Marvell Discovery SRAM Controller nodes | ||
82 | r) Marvell Discovery PCI Error Handler nodes | ||
83 | s) Marvell Discovery Memory Controller nodes | ||
84 | |||
85 | VIII - Specifying interrupt information for devices | ||
63 | 1) interrupts property | 86 | 1) interrupts property |
64 | 2) interrupt-parent property | 87 | 2) interrupt-parent property |
65 | 3) OpenPIC Interrupt Controllers | 88 | 3) OpenPIC Interrupt Controllers |
66 | 4) ISA Interrupt Controllers | 89 | 4) ISA Interrupt Controllers |
67 | 90 | ||
91 | VIII - Specifying GPIO information for devices | ||
92 | 1) gpios property | ||
93 | 2) gpio-controller nodes | ||
94 | |||
68 | Appendix A - Sample SOC node for MPC8540 | 95 | Appendix A - Sample SOC node for MPC8540 |
69 | 96 | ||
70 | 97 | ||
@@ -1269,10 +1296,6 @@ platforms are moved over to use the flattened-device-tree model. | |||
1269 | 1296 | ||
1270 | Recommended properties: | 1297 | Recommended properties: |
1271 | 1298 | ||
1272 | - linux,network-index : This is the intended "index" of this | ||
1273 | network device. This is used by the bootwrapper to interpret | ||
1274 | MAC addresses passed by the firmware when no information other | ||
1275 | than indices is available to associate an address with a device. | ||
1276 | - phy-connection-type : a string naming the controller/PHY interface type, | 1299 | - phy-connection-type : a string naming the controller/PHY interface type, |
1277 | i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii", | 1300 | i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii", |
1278 | "tbi", or "rtbi". This property is only really needed if the connection | 1301 | "tbi", or "rtbi". This property is only really needed if the connection |
@@ -1622,8 +1645,7 @@ platforms are moved over to use the flattened-device-tree model. | |||
1622 | - device_type : should be "network", "hldc", "uart", "transparent" | 1645 | - device_type : should be "network", "hldc", "uart", "transparent" |
1623 | "bisync", "atm", or "serial". | 1646 | "bisync", "atm", or "serial". |
1624 | - compatible : could be "ucc_geth" or "fsl_atm" and so on. | 1647 | - compatible : could be "ucc_geth" or "fsl_atm" and so on. |
1625 | - model : should be "UCC". | 1648 | - cell-index : the ucc number(1-8), corresponding to UCCx in UM. |
1626 | - device-id : the ucc number(1-8), corresponding to UCCx in UM. | ||
1627 | - reg : Offset and length of the register set for the device | 1649 | - reg : Offset and length of the register set for the device |
1628 | - interrupts : <a b> where a is the interrupt number and b is a | 1650 | - interrupts : <a b> where a is the interrupt number and b is a |
1629 | field that represents an encoding of the sense and level | 1651 | field that represents an encoding of the sense and level |
@@ -1667,10 +1689,6 @@ platforms are moved over to use the flattened-device-tree model. | |||
1667 | - phy-handle : The phandle for the PHY connected to this controller. | 1689 | - phy-handle : The phandle for the PHY connected to this controller. |
1668 | 1690 | ||
1669 | Recommended properties: | 1691 | Recommended properties: |
1670 | - linux,network-index : This is the intended "index" of this | ||
1671 | network device. This is used by the bootwrapper to interpret | ||
1672 | MAC addresses passed by the firmware when no information other | ||
1673 | than indices is available to associate an address with a device. | ||
1674 | - phy-connection-type : a string naming the controller/PHY interface type, | 1692 | - phy-connection-type : a string naming the controller/PHY interface type, |
1675 | i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id" (Internal | 1693 | i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id" (Internal |
1676 | Delay), "rgmii-txid" (delay on TX only), "rgmii-rxid" (delay on RX only), | 1694 | Delay), "rgmii-txid" (delay on TX only), "rgmii-rxid" (delay on RX only), |
@@ -1680,8 +1698,7 @@ platforms are moved over to use the flattened-device-tree model. | |||
1680 | ucc@2000 { | 1698 | ucc@2000 { |
1681 | device_type = "network"; | 1699 | device_type = "network"; |
1682 | compatible = "ucc_geth"; | 1700 | compatible = "ucc_geth"; |
1683 | model = "UCC"; | 1701 | cell-index = <1>; |
1684 | device-id = <1>; | ||
1685 | reg = <2000 200>; | 1702 | reg = <2000 200>; |
1686 | interrupts = <a0 0>; | 1703 | interrupts = <a0 0>; |
1687 | interrupt-parent = <700>; | 1704 | interrupt-parent = <700>; |
@@ -1995,7 +2012,6 @@ platforms are moved over to use the flattened-device-tree model. | |||
1995 | interrupts = <20 8>; | 2012 | interrupts = <20 8>; |
1996 | interrupt-parent = <&PIC>; | 2013 | interrupt-parent = <&PIC>; |
1997 | phy-handle = <&PHY0>; | 2014 | phy-handle = <&PHY0>; |
1998 | linux,network-index = <0>; | ||
1999 | fsl,cpm-command = <12000300>; | 2015 | fsl,cpm-command = <12000300>; |
2000 | }; | 2016 | }; |
2001 | 2017 | ||
@@ -2217,12 +2233,6 @@ platforms are moved over to use the flattened-device-tree model. | |||
2217 | EMAC, that is the content of the current (bogus) "phy-port" | 2233 | EMAC, that is the content of the current (bogus) "phy-port" |
2218 | property. | 2234 | property. |
2219 | 2235 | ||
2220 | Recommended properties: | ||
2221 | - linux,network-index : This is the intended "index" of this | ||
2222 | network device. This is used by the bootwrapper to interpret | ||
2223 | MAC addresses passed by the firmware when no information other | ||
2224 | than indices is available to associate an address with a device. | ||
2225 | |||
2226 | Optional properties: | 2236 | Optional properties: |
2227 | - phy-address : 1 cell, optional, MDIO address of the PHY. If absent, | 2237 | - phy-address : 1 cell, optional, MDIO address of the PHY. If absent, |
2228 | a search is performed. | 2238 | a search is performed. |
@@ -2246,7 +2256,6 @@ platforms are moved over to use the flattened-device-tree model. | |||
2246 | Example: | 2256 | Example: |
2247 | 2257 | ||
2248 | EMAC0: ethernet@40000800 { | 2258 | EMAC0: ethernet@40000800 { |
2249 | linux,network-index = <0>; | ||
2250 | device_type = "network"; | 2259 | device_type = "network"; |
2251 | compatible = "ibm,emac-440gp", "ibm,emac"; | 2260 | compatible = "ibm,emac-440gp", "ibm,emac"; |
2252 | interrupt-parent = <&UIC1>; | 2261 | interrupt-parent = <&UIC1>; |
@@ -2817,9 +2826,528 @@ platforms are moved over to use the flattened-device-tree model. | |||
2817 | }; | 2826 | }; |
2818 | 2827 | ||
2819 | 2828 | ||
2820 | More devices will be defined as this spec matures. | 2829 | VII - Marvell Discovery mv64[345]6x System Controller chips |
2830 | =========================================================== | ||
2831 | |||
2832 | The Marvell mv64[345]60 series of system controller chips contain | ||
2833 | many of the peripherals needed to implement a complete computer | ||
2834 | system. In this section, we define device tree nodes to describe | ||
2835 | the system controller chip itself and each of the peripherals | ||
2836 | which it contains. Compatible string values for each node are | ||
2837 | prefixed with the string "marvell,", for Marvell Technology Group Ltd. | ||
2838 | |||
2839 | 1) The /system-controller node | ||
2840 | |||
2841 | This node is used to represent the system-controller and must be | ||
2842 | present when the system uses a system contller chip. The top-level | ||
2843 | system-controller node contains information that is global to all | ||
2844 | devices within the system controller chip. The node name begins | ||
2845 | with "system-controller" followed by the unit address, which is | ||
2846 | the base address of the memory-mapped register set for the system | ||
2847 | controller chip. | ||
2848 | |||
2849 | Required properties: | ||
2850 | |||
2851 | - ranges : Describes the translation of system controller addresses | ||
2852 | for memory mapped registers. | ||
2853 | - clock-frequency: Contains the main clock frequency for the system | ||
2854 | controller chip. | ||
2855 | - reg : This property defines the address and size of the | ||
2856 | memory-mapped registers contained within the system controller | ||
2857 | chip. The address specified in the "reg" property should match | ||
2858 | the unit address of the system-controller node. | ||
2859 | - #address-cells : Address representation for system controller | ||
2860 | devices. This field represents the number of cells needed to | ||
2861 | represent the address of the memory-mapped registers of devices | ||
2862 | within the system controller chip. | ||
2863 | - #size-cells : Size representation for for the memory-mapped | ||
2864 | registers within the system controller chip. | ||
2865 | - #interrupt-cells : Defines the width of cells used to represent | ||
2866 | interrupts. | ||
2867 | |||
2868 | Optional properties: | ||
2869 | |||
2870 | - model : The specific model of the system controller chip. Such | ||
2871 | as, "mv64360", "mv64460", or "mv64560". | ||
2872 | - compatible : A string identifying the compatibility identifiers | ||
2873 | of the system controller chip. | ||
2874 | |||
2875 | The system-controller node contains child nodes for each system | ||
2876 | controller device that the platform uses. Nodes should not be created | ||
2877 | for devices which exist on the system controller chip but are not used | ||
2878 | |||
2879 | Example Marvell Discovery mv64360 system-controller node: | ||
2880 | |||
2881 | system-controller@f1000000 { /* Marvell Discovery mv64360 */ | ||
2882 | #address-cells = <1>; | ||
2883 | #size-cells = <1>; | ||
2884 | model = "mv64360"; /* Default */ | ||
2885 | compatible = "marvell,mv64360"; | ||
2886 | clock-frequency = <133333333>; | ||
2887 | reg = <0xf1000000 0x10000>; | ||
2888 | virtual-reg = <0xf1000000>; | ||
2889 | ranges = <0x88000000 0x88000000 0x1000000 /* PCI 0 I/O Space */ | ||
2890 | 0x80000000 0x80000000 0x8000000 /* PCI 0 MEM Space */ | ||
2891 | 0xa0000000 0xa0000000 0x4000000 /* User FLASH */ | ||
2892 | 0x00000000 0xf1000000 0x0010000 /* Bridge's regs */ | ||
2893 | 0xf2000000 0xf2000000 0x0040000>;/* Integrated SRAM */ | ||
2894 | |||
2895 | [ child node definitions... ] | ||
2896 | } | ||
2897 | |||
2898 | 2) Child nodes of /system-controller | ||
2899 | |||
2900 | a) Marvell Discovery MDIO bus | ||
2901 | |||
2902 | The MDIO is a bus to which the PHY devices are connected. For each | ||
2903 | device that exists on this bus, a child node should be created. See | ||
2904 | the definition of the PHY node below for an example of how to define | ||
2905 | a PHY. | ||
2906 | |||
2907 | Required properties: | ||
2908 | - #address-cells : Should be <1> | ||
2909 | - #size-cells : Should be <0> | ||
2910 | - device_type : Should be "mdio" | ||
2911 | - compatible : Should be "marvell,mv64360-mdio" | ||
2912 | |||
2913 | Example: | ||
2914 | |||
2915 | mdio { | ||
2916 | #address-cells = <1>; | ||
2917 | #size-cells = <0>; | ||
2918 | device_type = "mdio"; | ||
2919 | compatible = "marvell,mv64360-mdio"; | ||
2920 | |||
2921 | ethernet-phy@0 { | ||
2922 | ...... | ||
2923 | }; | ||
2924 | }; | ||
2925 | |||
2926 | |||
2927 | b) Marvell Discovery ethernet controller | ||
2928 | |||
2929 | The Discover ethernet controller is described with two levels | ||
2930 | of nodes. The first level describes an ethernet silicon block | ||
2931 | and the second level describes up to 3 ethernet nodes within | ||
2932 | that block. The reason for the multiple levels is that the | ||
2933 | registers for the node are interleaved within a single set | ||
2934 | of registers. The "ethernet-block" level describes the | ||
2935 | shared register set, and the "ethernet" nodes describe ethernet | ||
2936 | port-specific properties. | ||
2937 | |||
2938 | Ethernet block node | ||
2939 | |||
2940 | Required properties: | ||
2941 | - #address-cells : <1> | ||
2942 | - #size-cells : <0> | ||
2943 | - compatible : "marvell,mv64360-eth-block" | ||
2944 | - reg : Offset and length of the register set for this block | ||
2945 | |||
2946 | Example Discovery Ethernet block node: | ||
2947 | ethernet-block@2000 { | ||
2948 | #address-cells = <1>; | ||
2949 | #size-cells = <0>; | ||
2950 | compatible = "marvell,mv64360-eth-block"; | ||
2951 | reg = <0x2000 0x2000>; | ||
2952 | ethernet@0 { | ||
2953 | ....... | ||
2954 | }; | ||
2955 | }; | ||
2956 | |||
2957 | Ethernet port node | ||
2958 | |||
2959 | Required properties: | ||
2960 | - device_type : Should be "network". | ||
2961 | - compatible : Should be "marvell,mv64360-eth". | ||
2962 | - reg : Should be <0>, <1>, or <2>, according to which registers | ||
2963 | within the silicon block the device uses. | ||
2964 | - interrupts : <a> where a is the interrupt number for the port. | ||
2965 | - interrupt-parent : the phandle for the interrupt controller | ||
2966 | that services interrupts for this device. | ||
2967 | - phy : the phandle for the PHY connected to this ethernet | ||
2968 | controller. | ||
2969 | - local-mac-address : 6 bytes, MAC address | ||
2970 | |||
2971 | Example Discovery Ethernet port node: | ||
2972 | ethernet@0 { | ||
2973 | device_type = "network"; | ||
2974 | compatible = "marvell,mv64360-eth"; | ||
2975 | reg = <0>; | ||
2976 | interrupts = <32>; | ||
2977 | interrupt-parent = <&PIC>; | ||
2978 | phy = <&PHY0>; | ||
2979 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
2980 | }; | ||
2981 | |||
2982 | |||
2983 | |||
2984 | c) Marvell Discovery PHY nodes | ||
2985 | |||
2986 | Required properties: | ||
2987 | - device_type : Should be "ethernet-phy" | ||
2988 | - interrupts : <a> where a is the interrupt number for this phy. | ||
2989 | - interrupt-parent : the phandle for the interrupt controller that | ||
2990 | services interrupts for this device. | ||
2991 | - reg : The ID number for the phy, usually a small integer | ||
2992 | |||
2993 | Example Discovery PHY node: | ||
2994 | ethernet-phy@1 { | ||
2995 | device_type = "ethernet-phy"; | ||
2996 | compatible = "broadcom,bcm5421"; | ||
2997 | interrupts = <76>; /* GPP 12 */ | ||
2998 | interrupt-parent = <&PIC>; | ||
2999 | reg = <1>; | ||
3000 | }; | ||
3001 | |||
3002 | |||
3003 | d) Marvell Discovery SDMA nodes | ||
3004 | |||
3005 | Represent DMA hardware associated with the MPSC (multiprotocol | ||
3006 | serial controllers). | ||
3007 | |||
3008 | Required properties: | ||
3009 | - compatible : "marvell,mv64360-sdma" | ||
3010 | - reg : Offset and length of the register set for this device | ||
3011 | - interrupts : <a> where a is the interrupt number for the DMA | ||
3012 | device. | ||
3013 | - interrupt-parent : the phandle for the interrupt controller | ||
3014 | that services interrupts for this device. | ||
3015 | |||
3016 | Example Discovery SDMA node: | ||
3017 | sdma@4000 { | ||
3018 | compatible = "marvell,mv64360-sdma"; | ||
3019 | reg = <0x4000 0xc18>; | ||
3020 | virtual-reg = <0xf1004000>; | ||
3021 | interrupts = <36>; | ||
3022 | interrupt-parent = <&PIC>; | ||
3023 | }; | ||
3024 | |||
3025 | |||
3026 | e) Marvell Discovery BRG nodes | ||
3027 | |||
3028 | Represent baud rate generator hardware associated with the MPSC | ||
3029 | (multiprotocol serial controllers). | ||
3030 | |||
3031 | Required properties: | ||
3032 | - compatible : "marvell,mv64360-brg" | ||
3033 | - reg : Offset and length of the register set for this device | ||
3034 | - clock-src : A value from 0 to 15 which selects the clock | ||
3035 | source for the baud rate generator. This value corresponds | ||
3036 | to the CLKS value in the BRGx configuration register. See | ||
3037 | the mv64x60 User's Manual. | ||
3038 | - clock-frequence : The frequency (in Hz) of the baud rate | ||
3039 | generator's input clock. | ||
3040 | - current-speed : The current speed setting (presumably by | ||
3041 | firmware) of the baud rate generator. | ||
3042 | |||
3043 | Example Discovery BRG node: | ||
3044 | brg@b200 { | ||
3045 | compatible = "marvell,mv64360-brg"; | ||
3046 | reg = <0xb200 0x8>; | ||
3047 | clock-src = <8>; | ||
3048 | clock-frequency = <133333333>; | ||
3049 | current-speed = <9600>; | ||
3050 | }; | ||
3051 | |||
3052 | |||
3053 | f) Marvell Discovery CUNIT nodes | ||
3054 | |||
3055 | Represent the Serial Communications Unit device hardware. | ||
3056 | |||
3057 | Required properties: | ||
3058 | - reg : Offset and length of the register set for this device | ||
3059 | |||
3060 | Example Discovery CUNIT node: | ||
3061 | cunit@f200 { | ||
3062 | reg = <0xf200 0x200>; | ||
3063 | }; | ||
3064 | |||
3065 | |||
3066 | g) Marvell Discovery MPSCROUTING nodes | ||
3067 | |||
3068 | Represent the Discovery's MPSC routing hardware | ||
3069 | |||
3070 | Required properties: | ||
3071 | - reg : Offset and length of the register set for this device | ||
3072 | |||
3073 | Example Discovery CUNIT node: | ||
3074 | mpscrouting@b500 { | ||
3075 | reg = <0xb400 0xc>; | ||
3076 | }; | ||
3077 | |||
3078 | |||
3079 | h) Marvell Discovery MPSCINTR nodes | ||
3080 | |||
3081 | Represent the Discovery's MPSC DMA interrupt hardware registers | ||
3082 | (SDMA cause and mask registers). | ||
3083 | |||
3084 | Required properties: | ||
3085 | - reg : Offset and length of the register set for this device | ||
2821 | 3086 | ||
2822 | VII - Specifying interrupt information for devices | 3087 | Example Discovery MPSCINTR node: |
3088 | mpsintr@b800 { | ||
3089 | reg = <0xb800 0x100>; | ||
3090 | }; | ||
3091 | |||
3092 | |||
3093 | i) Marvell Discovery MPSC nodes | ||
3094 | |||
3095 | Represent the Discovery's MPSC (Multiprotocol Serial Controller) | ||
3096 | serial port. | ||
3097 | |||
3098 | Required properties: | ||
3099 | - device_type : "serial" | ||
3100 | - compatible : "marvell,mv64360-mpsc" | ||
3101 | - reg : Offset and length of the register set for this device | ||
3102 | - sdma : the phandle for the SDMA node used by this port | ||
3103 | - brg : the phandle for the BRG node used by this port | ||
3104 | - cunit : the phandle for the CUNIT node used by this port | ||
3105 | - mpscrouting : the phandle for the MPSCROUTING node used by this port | ||
3106 | - mpscintr : the phandle for the MPSCINTR node used by this port | ||
3107 | - cell-index : the hardware index of this cell in the MPSC core | ||
3108 | - max_idle : value needed for MPSC CHR3 (Maximum Frame Length) | ||
3109 | register | ||
3110 | - interrupts : <a> where a is the interrupt number for the MPSC. | ||
3111 | - interrupt-parent : the phandle for the interrupt controller | ||
3112 | that services interrupts for this device. | ||
3113 | |||
3114 | Example Discovery MPSCINTR node: | ||
3115 | mpsc@8000 { | ||
3116 | device_type = "serial"; | ||
3117 | compatible = "marvell,mv64360-mpsc"; | ||
3118 | reg = <0x8000 0x38>; | ||
3119 | virtual-reg = <0xf1008000>; | ||
3120 | sdma = <&SDMA0>; | ||
3121 | brg = <&BRG0>; | ||
3122 | cunit = <&CUNIT>; | ||
3123 | mpscrouting = <&MPSCROUTING>; | ||
3124 | mpscintr = <&MPSCINTR>; | ||
3125 | cell-index = <0>; | ||
3126 | max_idle = <40>; | ||
3127 | interrupts = <40>; | ||
3128 | interrupt-parent = <&PIC>; | ||
3129 | }; | ||
3130 | |||
3131 | |||
3132 | j) Marvell Discovery Watch Dog Timer nodes | ||
3133 | |||
3134 | Represent the Discovery's watchdog timer hardware | ||
3135 | |||
3136 | Required properties: | ||
3137 | - compatible : "marvell,mv64360-wdt" | ||
3138 | - reg : Offset and length of the register set for this device | ||
3139 | |||
3140 | Example Discovery Watch Dog Timer node: | ||
3141 | wdt@b410 { | ||
3142 | compatible = "marvell,mv64360-wdt"; | ||
3143 | reg = <0xb410 0x8>; | ||
3144 | }; | ||
3145 | |||
3146 | |||
3147 | k) Marvell Discovery I2C nodes | ||
3148 | |||
3149 | Represent the Discovery's I2C hardware | ||
3150 | |||
3151 | Required properties: | ||
3152 | - device_type : "i2c" | ||
3153 | - compatible : "marvell,mv64360-i2c" | ||
3154 | - reg : Offset and length of the register set for this device | ||
3155 | - interrupts : <a> where a is the interrupt number for the I2C. | ||
3156 | - interrupt-parent : the phandle for the interrupt controller | ||
3157 | that services interrupts for this device. | ||
3158 | |||
3159 | Example Discovery I2C node: | ||
3160 | compatible = "marvell,mv64360-i2c"; | ||
3161 | reg = <0xc000 0x20>; | ||
3162 | virtual-reg = <0xf100c000>; | ||
3163 | interrupts = <37>; | ||
3164 | interrupt-parent = <&PIC>; | ||
3165 | }; | ||
3166 | |||
3167 | |||
3168 | l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes | ||
3169 | |||
3170 | Represent the Discovery's PIC hardware | ||
3171 | |||
3172 | Required properties: | ||
3173 | - #interrupt-cells : <1> | ||
3174 | - #address-cells : <0> | ||
3175 | - compatible : "marvell,mv64360-pic" | ||
3176 | - reg : Offset and length of the register set for this device | ||
3177 | - interrupt-controller | ||
3178 | |||
3179 | Example Discovery PIC node: | ||
3180 | pic { | ||
3181 | #interrupt-cells = <1>; | ||
3182 | #address-cells = <0>; | ||
3183 | compatible = "marvell,mv64360-pic"; | ||
3184 | reg = <0x0 0x88>; | ||
3185 | interrupt-controller; | ||
3186 | }; | ||
3187 | |||
3188 | |||
3189 | m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes | ||
3190 | |||
3191 | Represent the Discovery's MPP hardware | ||
3192 | |||
3193 | Required properties: | ||
3194 | - compatible : "marvell,mv64360-mpp" | ||
3195 | - reg : Offset and length of the register set for this device | ||
3196 | |||
3197 | Example Discovery MPP node: | ||
3198 | mpp@f000 { | ||
3199 | compatible = "marvell,mv64360-mpp"; | ||
3200 | reg = <0xf000 0x10>; | ||
3201 | }; | ||
3202 | |||
3203 | |||
3204 | n) Marvell Discovery GPP (General Purpose Pins) nodes | ||
3205 | |||
3206 | Represent the Discovery's GPP hardware | ||
3207 | |||
3208 | Required properties: | ||
3209 | - compatible : "marvell,mv64360-gpp" | ||
3210 | - reg : Offset and length of the register set for this device | ||
3211 | |||
3212 | Example Discovery GPP node: | ||
3213 | gpp@f000 { | ||
3214 | compatible = "marvell,mv64360-gpp"; | ||
3215 | reg = <0xf100 0x20>; | ||
3216 | }; | ||
3217 | |||
3218 | |||
3219 | o) Marvell Discovery PCI host bridge node | ||
3220 | |||
3221 | Represents the Discovery's PCI host bridge device. The properties | ||
3222 | for this node conform to Rev 2.1 of the PCI Bus Binding to IEEE | ||
3223 | 1275-1994. A typical value for the compatible property is | ||
3224 | "marvell,mv64360-pci". | ||
3225 | |||
3226 | Example Discovery PCI host bridge node | ||
3227 | pci@80000000 { | ||
3228 | #address-cells = <3>; | ||
3229 | #size-cells = <2>; | ||
3230 | #interrupt-cells = <1>; | ||
3231 | device_type = "pci"; | ||
3232 | compatible = "marvell,mv64360-pci"; | ||
3233 | reg = <0xcf8 0x8>; | ||
3234 | ranges = <0x01000000 0x0 0x0 | ||
3235 | 0x88000000 0x0 0x01000000 | ||
3236 | 0x02000000 0x0 0x80000000 | ||
3237 | 0x80000000 0x0 0x08000000>; | ||
3238 | bus-range = <0 255>; | ||
3239 | clock-frequency = <66000000>; | ||
3240 | interrupt-parent = <&PIC>; | ||
3241 | interrupt-map-mask = <0xf800 0x0 0x0 0x7>; | ||
3242 | interrupt-map = < | ||
3243 | /* IDSEL 0x0a */ | ||
3244 | 0x5000 0 0 1 &PIC 80 | ||
3245 | 0x5000 0 0 2 &PIC 81 | ||
3246 | 0x5000 0 0 3 &PIC 91 | ||
3247 | 0x5000 0 0 4 &PIC 93 | ||
3248 | |||
3249 | /* IDSEL 0x0b */ | ||
3250 | 0x5800 0 0 1 &PIC 91 | ||
3251 | 0x5800 0 0 2 &PIC 93 | ||
3252 | 0x5800 0 0 3 &PIC 80 | ||
3253 | 0x5800 0 0 4 &PIC 81 | ||
3254 | |||
3255 | /* IDSEL 0x0c */ | ||
3256 | 0x6000 0 0 1 &PIC 91 | ||
3257 | 0x6000 0 0 2 &PIC 93 | ||
3258 | 0x6000 0 0 3 &PIC 80 | ||
3259 | 0x6000 0 0 4 &PIC 81 | ||
3260 | |||
3261 | /* IDSEL 0x0d */ | ||
3262 | 0x6800 0 0 1 &PIC 93 | ||
3263 | 0x6800 0 0 2 &PIC 80 | ||
3264 | 0x6800 0 0 3 &PIC 81 | ||
3265 | 0x6800 0 0 4 &PIC 91 | ||
3266 | >; | ||
3267 | }; | ||
3268 | |||
3269 | |||
3270 | p) Marvell Discovery CPU Error nodes | ||
3271 | |||
3272 | Represent the Discovery's CPU error handler device. | ||
3273 | |||
3274 | Required properties: | ||
3275 | - compatible : "marvell,mv64360-cpu-error" | ||
3276 | - reg : Offset and length of the register set for this device | ||
3277 | - interrupts : the interrupt number for this device | ||
3278 | - interrupt-parent : the phandle for the interrupt controller | ||
3279 | that services interrupts for this device. | ||
3280 | |||
3281 | Example Discovery CPU Error node: | ||
3282 | cpu-error@0070 { | ||
3283 | compatible = "marvell,mv64360-cpu-error"; | ||
3284 | reg = <0x70 0x10 0x128 0x28>; | ||
3285 | interrupts = <3>; | ||
3286 | interrupt-parent = <&PIC>; | ||
3287 | }; | ||
3288 | |||
3289 | |||
3290 | q) Marvell Discovery SRAM Controller nodes | ||
3291 | |||
3292 | Represent the Discovery's SRAM controller device. | ||
3293 | |||
3294 | Required properties: | ||
3295 | - compatible : "marvell,mv64360-sram-ctrl" | ||
3296 | - reg : Offset and length of the register set for this device | ||
3297 | - interrupts : the interrupt number for this device | ||
3298 | - interrupt-parent : the phandle for the interrupt controller | ||
3299 | that services interrupts for this device. | ||
3300 | |||
3301 | Example Discovery SRAM Controller node: | ||
3302 | sram-ctrl@0380 { | ||
3303 | compatible = "marvell,mv64360-sram-ctrl"; | ||
3304 | reg = <0x380 0x80>; | ||
3305 | interrupts = <13>; | ||
3306 | interrupt-parent = <&PIC>; | ||
3307 | }; | ||
3308 | |||
3309 | |||
3310 | r) Marvell Discovery PCI Error Handler nodes | ||
3311 | |||
3312 | Represent the Discovery's PCI error handler device. | ||
3313 | |||
3314 | Required properties: | ||
3315 | - compatible : "marvell,mv64360-pci-error" | ||
3316 | - reg : Offset and length of the register set for this device | ||
3317 | - interrupts : the interrupt number for this device | ||
3318 | - interrupt-parent : the phandle for the interrupt controller | ||
3319 | that services interrupts for this device. | ||
3320 | |||
3321 | Example Discovery PCI Error Handler node: | ||
3322 | pci-error@1d40 { | ||
3323 | compatible = "marvell,mv64360-pci-error"; | ||
3324 | reg = <0x1d40 0x40 0xc28 0x4>; | ||
3325 | interrupts = <12>; | ||
3326 | interrupt-parent = <&PIC>; | ||
3327 | }; | ||
3328 | |||
3329 | |||
3330 | s) Marvell Discovery Memory Controller nodes | ||
3331 | |||
3332 | Represent the Discovery's memory controller device. | ||
3333 | |||
3334 | Required properties: | ||
3335 | - compatible : "marvell,mv64360-mem-ctrl" | ||
3336 | - reg : Offset and length of the register set for this device | ||
3337 | - interrupts : the interrupt number for this device | ||
3338 | - interrupt-parent : the phandle for the interrupt controller | ||
3339 | that services interrupts for this device. | ||
3340 | |||
3341 | Example Discovery Memory Controller node: | ||
3342 | mem-ctrl@1400 { | ||
3343 | compatible = "marvell,mv64360-mem-ctrl"; | ||
3344 | reg = <0x1400 0x60>; | ||
3345 | interrupts = <17>; | ||
3346 | interrupt-parent = <&PIC>; | ||
3347 | }; | ||
3348 | |||
3349 | |||
3350 | VIII - Specifying interrupt information for devices | ||
2823 | =================================================== | 3351 | =================================================== |
2824 | 3352 | ||
2825 | The device tree represents the busses and devices of a hardware | 3353 | The device tree represents the busses and devices of a hardware |
@@ -2905,6 +3433,54 @@ encodings listed below: | |||
2905 | 2 = high to low edge sensitive type enabled | 3433 | 2 = high to low edge sensitive type enabled |
2906 | 3 = low to high edge sensitive type enabled | 3434 | 3 = low to high edge sensitive type enabled |
2907 | 3435 | ||
3436 | VIII - Specifying GPIO information for devices | ||
3437 | ============================================== | ||
3438 | |||
3439 | 1) gpios property | ||
3440 | ----------------- | ||
3441 | |||
3442 | Nodes that makes use of GPIOs should define them using `gpios' property, | ||
3443 | format of which is: <&gpio-controller1-phandle gpio1-specifier | ||
3444 | &gpio-controller2-phandle gpio2-specifier | ||
3445 | 0 /* holes are permitted, means no GPIO 3 */ | ||
3446 | &gpio-controller4-phandle gpio4-specifier | ||
3447 | ...>; | ||
3448 | |||
3449 | Note that gpio-specifier length is controller dependent. | ||
3450 | |||
3451 | gpio-specifier may encode: bank, pin position inside the bank, | ||
3452 | whether pin is open-drain and whether pin is logically inverted. | ||
3453 | |||
3454 | Example of the node using GPIOs: | ||
3455 | |||
3456 | node { | ||
3457 | gpios = <&qe_pio_e 18 0>; | ||
3458 | }; | ||
3459 | |||
3460 | In this example gpio-specifier is "18 0" and encodes GPIO pin number, | ||
3461 | and empty GPIO flags as accepted by the "qe_pio_e" gpio-controller. | ||
3462 | |||
3463 | 2) gpio-controller nodes | ||
3464 | ------------------------ | ||
3465 | |||
3466 | Every GPIO controller node must have #gpio-cells property defined, | ||
3467 | this information will be used to translate gpio-specifiers. | ||
3468 | |||
3469 | Example of two SOC GPIO banks defined as gpio-controller nodes: | ||
3470 | |||
3471 | qe_pio_a: gpio-controller@1400 { | ||
3472 | #gpio-cells = <2>; | ||
3473 | compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank"; | ||
3474 | reg = <0x1400 0x18>; | ||
3475 | gpio-controller; | ||
3476 | }; | ||
3477 | |||
3478 | qe_pio_e: gpio-controller@1460 { | ||
3479 | #gpio-cells = <2>; | ||
3480 | compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank"; | ||
3481 | reg = <0x1460 0x18>; | ||
3482 | gpio-controller; | ||
3483 | }; | ||
2908 | 3484 | ||
2909 | Appendix A - Sample SOC node for MPC8540 | 3485 | Appendix A - Sample SOC node for MPC8540 |
2910 | ======================================== | 3486 | ======================================== |
diff --git a/Documentation/powerpc/phyp-assisted-dump.txt b/Documentation/powerpc/phyp-assisted-dump.txt new file mode 100644 index 00000000000..c4682b982a2 --- /dev/null +++ b/Documentation/powerpc/phyp-assisted-dump.txt | |||
@@ -0,0 +1,127 @@ | |||
1 | |||
2 | Hypervisor-Assisted Dump | ||
3 | ------------------------ | ||
4 | November 2007 | ||
5 | |||
6 | The goal of hypervisor-assisted dump is to enable the dump of | ||
7 | a crashed system, and to do so from a fully-reset system, and | ||
8 | to minimize the total elapsed time until the system is back | ||
9 | in production use. | ||
10 | |||
11 | As compared to kdump or other strategies, hypervisor-assisted | ||
12 | dump offers several strong, practical advantages: | ||
13 | |||
14 | -- Unlike kdump, the system has been reset, and loaded | ||
15 | with a fresh copy of the kernel. In particular, | ||
16 | PCI and I/O devices have been reinitialized and are | ||
17 | in a clean, consistent state. | ||
18 | -- As the dump is performed, the dumped memory becomes | ||
19 | immediately available to the system for normal use. | ||
20 | -- After the dump is completed, no further reboots are | ||
21 | required; the system will be fully usable, and running | ||
22 | in it's normal, production mode on it normal kernel. | ||
23 | |||
24 | The above can only be accomplished by coordination with, | ||
25 | and assistance from the hypervisor. The procedure is | ||
26 | as follows: | ||
27 | |||
28 | -- When a system crashes, the hypervisor will save | ||
29 | the low 256MB of RAM to a previously registered | ||
30 | save region. It will also save system state, system | ||
31 | registers, and hardware PTE's. | ||
32 | |||
33 | -- After the low 256MB area has been saved, the | ||
34 | hypervisor will reset PCI and other hardware state. | ||
35 | It will *not* clear RAM. It will then launch the | ||
36 | bootloader, as normal. | ||
37 | |||
38 | -- The freshly booted kernel will notice that there | ||
39 | is a new node (ibm,dump-kernel) in the device tree, | ||
40 | indicating that there is crash data available from | ||
41 | a previous boot. It will boot into only 256MB of RAM, | ||
42 | reserving the rest of system memory. | ||
43 | |||
44 | -- Userspace tools will parse /sys/kernel/release_region | ||
45 | and read /proc/vmcore to obtain the contents of memory, | ||
46 | which holds the previous crashed kernel. The userspace | ||
47 | tools may copy this info to disk, or network, nas, san, | ||
48 | iscsi, etc. as desired. | ||
49 | |||
50 | For Example: the values in /sys/kernel/release-region | ||
51 | would look something like this (address-range pairs). | ||
52 | CPU:0x177fee000-0x10000: HPTE:0x177ffe020-0x1000: / | ||
53 | DUMP:0x177fff020-0x10000000, 0x10000000-0x16F1D370A | ||
54 | |||
55 | -- As the userspace tools complete saving a portion of | ||
56 | dump, they echo an offset and size to | ||
57 | /sys/kernel/release_region to release the reserved | ||
58 | memory back to general use. | ||
59 | |||
60 | An example of this is: | ||
61 | "echo 0x40000000 0x10000000 > /sys/kernel/release_region" | ||
62 | which will release 256MB at the 1GB boundary. | ||
63 | |||
64 | Please note that the hypervisor-assisted dump feature | ||
65 | is only available on Power6-based systems with recent | ||
66 | firmware versions. | ||
67 | |||
68 | Implementation details: | ||
69 | ---------------------- | ||
70 | |||
71 | During boot, a check is made to see if firmware supports | ||
72 | this feature on this particular machine. If it does, then | ||
73 | we check to see if a active dump is waiting for us. If yes | ||
74 | then everything but 256 MB of RAM is reserved during early | ||
75 | boot. This area is released once we collect a dump from user | ||
76 | land scripts that are run. If there is dump data, then | ||
77 | the /sys/kernel/release_region file is created, and | ||
78 | the reserved memory is held. | ||
79 | |||
80 | If there is no waiting dump data, then only the highest | ||
81 | 256MB of the ram is reserved as a scratch area. This area | ||
82 | is *not* released: this region will be kept permanently | ||
83 | reserved, so that it can act as a receptacle for a copy | ||
84 | of the low 256MB in the case a crash does occur. See, | ||
85 | however, "open issues" below, as to whether | ||
86 | such a reserved region is really needed. | ||
87 | |||
88 | Currently the dump will be copied from /proc/vmcore to a | ||
89 | a new file upon user intervention. The starting address | ||
90 | to be read and the range for each data point in provided | ||
91 | in /sys/kernel/release_region. | ||
92 | |||
93 | The tools to examine the dump will be same as the ones | ||
94 | used for kdump. | ||
95 | |||
96 | General notes: | ||
97 | -------------- | ||
98 | Security: please note that there are potential security issues | ||
99 | with any sort of dump mechanism. In particular, plaintext | ||
100 | (unencrypted) data, and possibly passwords, may be present in | ||
101 | the dump data. Userspace tools must take adequate precautions to | ||
102 | preserve security. | ||
103 | |||
104 | Open issues/ToDo: | ||
105 | ------------ | ||
106 | o The various code paths that tell the hypervisor that a crash | ||
107 | occurred, vs. it simply being a normal reboot, should be | ||
108 | reviewed, and possibly clarified/fixed. | ||
109 | |||
110 | o Instead of using /sys/kernel, should there be a /sys/dump | ||
111 | instead? There is a dump_subsys being created by the s390 code, | ||
112 | perhaps the pseries code should use a similar layout as well. | ||
113 | |||
114 | o Is reserving a 256MB region really required? The goal of | ||
115 | reserving a 256MB scratch area is to make sure that no | ||
116 | important crash data is clobbered when the hypervisor | ||
117 | save low mem to the scratch area. But, if one could assure | ||
118 | that nothing important is located in some 256MB area, then | ||
119 | it would not need to be reserved. Something that can be | ||
120 | improved in subsequent versions. | ||
121 | |||
122 | o Still working the kdump team to integrate this with kdump, | ||
123 | some work remains but this would not affect the current | ||
124 | patches. | ||
125 | |||
126 | o Still need to write a shell script, to copy the dump away. | ||
127 | Currently I am parsing it manually. | ||
diff --git a/Documentation/prctl/disable-tsc-ctxt-sw-stress-test.c b/Documentation/prctl/disable-tsc-ctxt-sw-stress-test.c new file mode 100644 index 00000000000..f8e8e95e81f --- /dev/null +++ b/Documentation/prctl/disable-tsc-ctxt-sw-stress-test.c | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * Tests for prctl(PR_GET_TSC, ...) / prctl(PR_SET_TSC, ...) | ||
3 | * | ||
4 | * Tests if the control register is updated correctly | ||
5 | * at context switches | ||
6 | * | ||
7 | * Warning: this test will cause a very high load for a few seconds | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #include <stdio.h> | ||
12 | #include <stdlib.h> | ||
13 | #include <unistd.h> | ||
14 | #include <signal.h> | ||
15 | #include <inttypes.h> | ||
16 | #include <wait.h> | ||
17 | |||
18 | |||
19 | #include <sys/prctl.h> | ||
20 | #include <linux/prctl.h> | ||
21 | |||
22 | /* Get/set the process' ability to use the timestamp counter instruction */ | ||
23 | #ifndef PR_GET_TSC | ||
24 | #define PR_GET_TSC 25 | ||
25 | #define PR_SET_TSC 26 | ||
26 | # define PR_TSC_ENABLE 1 /* allow the use of the timestamp counter */ | ||
27 | # define PR_TSC_SIGSEGV 2 /* throw a SIGSEGV instead of reading the TSC */ | ||
28 | #endif | ||
29 | |||
30 | uint64_t rdtsc() { | ||
31 | uint32_t lo, hi; | ||
32 | /* We cannot use "=A", since this would use %rax on x86_64 */ | ||
33 | __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); | ||
34 | return (uint64_t)hi << 32 | lo; | ||
35 | } | ||
36 | |||
37 | void sigsegv_expect(int sig) | ||
38 | { | ||
39 | /* */ | ||
40 | } | ||
41 | |||
42 | void segvtask(void) | ||
43 | { | ||
44 | if (prctl(PR_SET_TSC, PR_TSC_SIGSEGV) < 0) | ||
45 | { | ||
46 | perror("prctl"); | ||
47 | exit(0); | ||
48 | } | ||
49 | signal(SIGSEGV, sigsegv_expect); | ||
50 | alarm(10); | ||
51 | rdtsc(); | ||
52 | fprintf(stderr, "FATAL ERROR, rdtsc() succeeded while disabled\n"); | ||
53 | exit(0); | ||
54 | } | ||
55 | |||
56 | |||
57 | void sigsegv_fail(int sig) | ||
58 | { | ||
59 | fprintf(stderr, "FATAL ERROR, rdtsc() failed while enabled\n"); | ||
60 | exit(0); | ||
61 | } | ||
62 | |||
63 | void rdtsctask(void) | ||
64 | { | ||
65 | if (prctl(PR_SET_TSC, PR_TSC_ENABLE) < 0) | ||
66 | { | ||
67 | perror("prctl"); | ||
68 | exit(0); | ||
69 | } | ||
70 | signal(SIGSEGV, sigsegv_fail); | ||
71 | alarm(10); | ||
72 | for(;;) rdtsc(); | ||
73 | } | ||
74 | |||
75 | |||
76 | int main(int argc, char **argv) | ||
77 | { | ||
78 | int n_tasks = 100, i; | ||
79 | |||
80 | fprintf(stderr, "[No further output means we're allright]\n"); | ||
81 | |||
82 | for (i=0; i<n_tasks; i++) | ||
83 | if (fork() == 0) | ||
84 | { | ||
85 | if (i & 1) | ||
86 | segvtask(); | ||
87 | else | ||
88 | rdtsctask(); | ||
89 | } | ||
90 | |||
91 | for (i=0; i<n_tasks; i++) | ||
92 | wait(NULL); | ||
93 | |||
94 | exit(0); | ||
95 | } | ||
96 | |||
diff --git a/Documentation/prctl/disable-tsc-on-off-stress-test.c b/Documentation/prctl/disable-tsc-on-off-stress-test.c new file mode 100644 index 00000000000..1fcd9144537 --- /dev/null +++ b/Documentation/prctl/disable-tsc-on-off-stress-test.c | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * Tests for prctl(PR_GET_TSC, ...) / prctl(PR_SET_TSC, ...) | ||
3 | * | ||
4 | * Tests if the control register is updated correctly | ||
5 | * when set with prctl() | ||
6 | * | ||
7 | * Warning: this test will cause a very high load for a few seconds | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #include <stdio.h> | ||
12 | #include <stdlib.h> | ||
13 | #include <unistd.h> | ||
14 | #include <signal.h> | ||
15 | #include <inttypes.h> | ||
16 | #include <wait.h> | ||
17 | |||
18 | |||
19 | #include <sys/prctl.h> | ||
20 | #include <linux/prctl.h> | ||
21 | |||
22 | /* Get/set the process' ability to use the timestamp counter instruction */ | ||
23 | #ifndef PR_GET_TSC | ||
24 | #define PR_GET_TSC 25 | ||
25 | #define PR_SET_TSC 26 | ||
26 | # define PR_TSC_ENABLE 1 /* allow the use of the timestamp counter */ | ||
27 | # define PR_TSC_SIGSEGV 2 /* throw a SIGSEGV instead of reading the TSC */ | ||
28 | #endif | ||
29 | |||
30 | /* snippet from wikipedia :-) */ | ||
31 | |||
32 | uint64_t rdtsc() { | ||
33 | uint32_t lo, hi; | ||
34 | /* We cannot use "=A", since this would use %rax on x86_64 */ | ||
35 | __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); | ||
36 | return (uint64_t)hi << 32 | lo; | ||
37 | } | ||
38 | |||
39 | int should_segv = 0; | ||
40 | |||
41 | void sigsegv_cb(int sig) | ||
42 | { | ||
43 | if (!should_segv) | ||
44 | { | ||
45 | fprintf(stderr, "FATAL ERROR, rdtsc() failed while enabled\n"); | ||
46 | exit(0); | ||
47 | } | ||
48 | if (prctl(PR_SET_TSC, PR_TSC_ENABLE) < 0) | ||
49 | { | ||
50 | perror("prctl"); | ||
51 | exit(0); | ||
52 | } | ||
53 | should_segv = 0; | ||
54 | |||
55 | rdtsc(); | ||
56 | } | ||
57 | |||
58 | void task(void) | ||
59 | { | ||
60 | signal(SIGSEGV, sigsegv_cb); | ||
61 | alarm(10); | ||
62 | for(;;) | ||
63 | { | ||
64 | rdtsc(); | ||
65 | if (should_segv) | ||
66 | { | ||
67 | fprintf(stderr, "FATAL ERROR, rdtsc() succeeded while disabled\n"); | ||
68 | exit(0); | ||
69 | } | ||
70 | if (prctl(PR_SET_TSC, PR_TSC_SIGSEGV) < 0) | ||
71 | { | ||
72 | perror("prctl"); | ||
73 | exit(0); | ||
74 | } | ||
75 | should_segv = 1; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | |||
80 | int main(int argc, char **argv) | ||
81 | { | ||
82 | int n_tasks = 100, i; | ||
83 | |||
84 | fprintf(stderr, "[No further output means we're allright]\n"); | ||
85 | |||
86 | for (i=0; i<n_tasks; i++) | ||
87 | if (fork() == 0) | ||
88 | task(); | ||
89 | |||
90 | for (i=0; i<n_tasks; i++) | ||
91 | wait(NULL); | ||
92 | |||
93 | exit(0); | ||
94 | } | ||
95 | |||
diff --git a/Documentation/prctl/disable-tsc-test.c b/Documentation/prctl/disable-tsc-test.c new file mode 100644 index 00000000000..843c81eac23 --- /dev/null +++ b/Documentation/prctl/disable-tsc-test.c | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * Tests for prctl(PR_GET_TSC, ...) / prctl(PR_SET_TSC, ...) | ||
3 | * | ||
4 | * Basic test to test behaviour of PR_GET_TSC and PR_SET_TSC | ||
5 | */ | ||
6 | |||
7 | #include <stdio.h> | ||
8 | #include <stdlib.h> | ||
9 | #include <unistd.h> | ||
10 | #include <signal.h> | ||
11 | #include <inttypes.h> | ||
12 | |||
13 | |||
14 | #include <sys/prctl.h> | ||
15 | #include <linux/prctl.h> | ||
16 | |||
17 | /* Get/set the process' ability to use the timestamp counter instruction */ | ||
18 | #ifndef PR_GET_TSC | ||
19 | #define PR_GET_TSC 25 | ||
20 | #define PR_SET_TSC 26 | ||
21 | # define PR_TSC_ENABLE 1 /* allow the use of the timestamp counter */ | ||
22 | # define PR_TSC_SIGSEGV 2 /* throw a SIGSEGV instead of reading the TSC */ | ||
23 | #endif | ||
24 | |||
25 | const char *tsc_names[] = | ||
26 | { | ||
27 | [0] = "[not set]", | ||
28 | [PR_TSC_ENABLE] = "PR_TSC_ENABLE", | ||
29 | [PR_TSC_SIGSEGV] = "PR_TSC_SIGSEGV", | ||
30 | }; | ||
31 | |||
32 | uint64_t rdtsc() { | ||
33 | uint32_t lo, hi; | ||
34 | /* We cannot use "=A", since this would use %rax on x86_64 */ | ||
35 | __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); | ||
36 | return (uint64_t)hi << 32 | lo; | ||
37 | } | ||
38 | |||
39 | void sigsegv_cb(int sig) | ||
40 | { | ||
41 | int tsc_val = 0; | ||
42 | |||
43 | printf("[ SIG_SEGV ]\n"); | ||
44 | printf("prctl(PR_GET_TSC, &tsc_val); "); | ||
45 | fflush(stdout); | ||
46 | |||
47 | if ( prctl(PR_GET_TSC, &tsc_val) == -1) | ||
48 | perror("prctl"); | ||
49 | |||
50 | printf("tsc_val == %s\n", tsc_names[tsc_val]); | ||
51 | printf("prctl(PR_SET_TSC, PR_TSC_ENABLE)\n"); | ||
52 | fflush(stdout); | ||
53 | if ( prctl(PR_SET_TSC, PR_TSC_ENABLE) == -1) | ||
54 | perror("prctl"); | ||
55 | |||
56 | printf("rdtsc() == "); | ||
57 | } | ||
58 | |||
59 | int main(int argc, char **argv) | ||
60 | { | ||
61 | int tsc_val = 0; | ||
62 | |||
63 | signal(SIGSEGV, sigsegv_cb); | ||
64 | |||
65 | printf("rdtsc() == %llu\n", (unsigned long long)rdtsc()); | ||
66 | printf("prctl(PR_GET_TSC, &tsc_val); "); | ||
67 | fflush(stdout); | ||
68 | |||
69 | if ( prctl(PR_GET_TSC, &tsc_val) == -1) | ||
70 | perror("prctl"); | ||
71 | |||
72 | printf("tsc_val == %s\n", tsc_names[tsc_val]); | ||
73 | printf("rdtsc() == %llu\n", (unsigned long long)rdtsc()); | ||
74 | printf("prctl(PR_SET_TSC, PR_TSC_ENABLE)\n"); | ||
75 | fflush(stdout); | ||
76 | |||
77 | if ( prctl(PR_SET_TSC, PR_TSC_ENABLE) == -1) | ||
78 | perror("prctl"); | ||
79 | |||
80 | printf("rdtsc() == %llu\n", (unsigned long long)rdtsc()); | ||
81 | printf("prctl(PR_SET_TSC, PR_TSC_SIGSEGV)\n"); | ||
82 | fflush(stdout); | ||
83 | |||
84 | if ( prctl(PR_SET_TSC, PR_TSC_SIGSEGV) == -1) | ||
85 | perror("prctl"); | ||
86 | |||
87 | printf("rdtsc() == "); | ||
88 | fflush(stdout); | ||
89 | printf("%llu\n", (unsigned long long)rdtsc()); | ||
90 | fflush(stdout); | ||
91 | |||
92 | exit(EXIT_SUCCESS); | ||
93 | } | ||
94 | |||
diff --git a/Documentation/scheduler/sched-rt-group.txt b/Documentation/scheduler/sched-rt-group.txt index 1c6332f4543..14f901f639e 100644 --- a/Documentation/scheduler/sched-rt-group.txt +++ b/Documentation/scheduler/sched-rt-group.txt | |||
@@ -1,59 +1,177 @@ | |||
1 | Real-Time group scheduling | ||
2 | -------------------------- | ||
1 | 3 | ||
4 | CONTENTS | ||
5 | ======== | ||
2 | 6 | ||
3 | Real-Time group scheduling. | 7 | 1. Overview |
8 | 1.1 The problem | ||
9 | 1.2 The solution | ||
10 | 2. The interface | ||
11 | 2.1 System-wide settings | ||
12 | 2.2 Default behaviour | ||
13 | 2.3 Basis for grouping tasks | ||
14 | 3. Future plans | ||
4 | 15 | ||
5 | The problem space: | ||
6 | 16 | ||
7 | In order to schedule multiple groups of realtime tasks each group must | 17 | 1. Overview |
8 | be assigned a fixed portion of the CPU time available. Without a minimum | 18 | =========== |
9 | guarantee a realtime group can obviously fall short. A fuzzy upper limit | ||
10 | is of no use since it cannot be relied upon. Which leaves us with just | ||
11 | the single fixed portion. | ||
12 | 19 | ||
13 | CPU time is divided by means of specifying how much time can be spent | ||
14 | running in a given period. Say a frame fixed realtime renderer must | ||
15 | deliver 25 frames a second, which yields a period of 0.04s. Now say | ||
16 | it will also have to play some music and respond to input, leaving it | ||
17 | with around 80% for the graphics. We can then give this group a runtime | ||
18 | of 0.8 * 0.04s = 0.032s. | ||
19 | 20 | ||
20 | This way the graphics group will have a 0.04s period with a 0.032s runtime | 21 | 1.1 The problem |
21 | limit. | 22 | --------------- |
22 | 23 | ||
23 | Now if the audio thread needs to refill the DMA buffer every 0.005s, but | 24 | Realtime scheduling is all about determinism, a group has to be able to rely on |
24 | needs only about 3% CPU time to do so, it can do with a 0.03 * 0.005s | 25 | the amount of bandwidth (eg. CPU time) being constant. In order to schedule |
25 | = 0.00015s. | 26 | multiple groups of realtime tasks, each group must be assigned a fixed portion |
27 | of the CPU time available. Without a minimum guarantee a realtime group can | ||
28 | obviously fall short. A fuzzy upper limit is of no use since it cannot be | ||
29 | relied upon. Which leaves us with just the single fixed portion. | ||
26 | 30 | ||
31 | 1.2 The solution | ||
32 | ---------------- | ||
27 | 33 | ||
28 | The Interface: | 34 | CPU time is divided by means of specifying how much time can be spent running |
35 | in a given period. We allocate this "run time" for each realtime group which | ||
36 | the other realtime groups will not be permitted to use. | ||
29 | 37 | ||
30 | system wide: | 38 | Any time not allocated to a realtime group will be used to run normal priority |
39 | tasks (SCHED_OTHER). Any allocated run time not used will also be picked up by | ||
40 | SCHED_OTHER. | ||
31 | 41 | ||
32 | /proc/sys/kernel/sched_rt_period_ms | 42 | Let's consider an example: a frame fixed realtime renderer must deliver 25 |
33 | /proc/sys/kernel/sched_rt_runtime_us | 43 | frames a second, which yields a period of 0.04s per frame. Now say it will also |
44 | have to play some music and respond to input, leaving it with around 80% CPU | ||
45 | time dedicated for the graphics. We can then give this group a run time of 0.8 | ||
46 | * 0.04s = 0.032s. | ||
34 | 47 | ||
35 | CONFIG_FAIR_USER_SCHED | 48 | This way the graphics group will have a 0.04s period with a 0.032s run time |
49 | limit. Now if the audio thread needs to refill the DMA buffer every 0.005s, but | ||
50 | needs only about 3% CPU time to do so, it can do with a 0.03 * 0.005s = | ||
51 | 0.00015s. So this group can be scheduled with a period of 0.005s and a run time | ||
52 | of 0.00015s. | ||
36 | 53 | ||
37 | /sys/kernel/uids/<uid>/cpu_rt_runtime_us | 54 | The remaining CPU time will be used for user input and other tass. Because |
55 | realtime tasks have explicitly allocated the CPU time they need to perform | ||
56 | their tasks, buffer underruns in the graphocs or audio can be eliminated. | ||
38 | 57 | ||
39 | or | 58 | NOTE: the above example is not fully implemented as of yet (2.6.25). We still |
59 | lack an EDF scheduler to make non-uniform periods usable. | ||
40 | 60 | ||
41 | CONFIG_FAIR_CGROUP_SCHED | ||
42 | 61 | ||
43 | /cgroup/<cgroup>/cpu.rt_runtime_us | 62 | 2. The Interface |
63 | ================ | ||
44 | 64 | ||
45 | [ time is specified in us because the interface is s32; this gives an | ||
46 | operating range of ~35m to 1us ] | ||
47 | 65 | ||
48 | The period takes values in [ 1, INT_MAX ], runtime in [ -1, INT_MAX - 1 ]. | 66 | 2.1 System wide settings |
67 | ------------------------ | ||
49 | 68 | ||
50 | A runtime of -1 specifies runtime == period, ie. no limit. | 69 | The system wide settings are configured under the /proc virtual file system: |
51 | 70 | ||
52 | New groups get the period from /proc/sys/kernel/sched_rt_period_us and | 71 | /proc/sys/kernel/sched_rt_period_us: |
53 | a runtime of 0. | 72 | The scheduling period that is equivalent to 100% CPU bandwidth |
54 | 73 | ||
55 | Settings are constrained to: | 74 | /proc/sys/kernel/sched_rt_runtime_us: |
75 | A global limit on how much time realtime scheduling may use. Even without | ||
76 | CONFIG_RT_GROUP_SCHED enabled, this will limit time reserved to realtime | ||
77 | processes. With CONFIG_RT_GROUP_SCHED it signifies the total bandwidth | ||
78 | available to all realtime groups. | ||
79 | |||
80 | * Time is specified in us because the interface is s32. This gives an | ||
81 | operating range from 1us to about 35 minutes. | ||
82 | * sched_rt_period_us takes values from 1 to INT_MAX. | ||
83 | * sched_rt_runtime_us takes values from -1 to (INT_MAX - 1). | ||
84 | * A run time of -1 specifies runtime == period, ie. no limit. | ||
85 | |||
86 | |||
87 | 2.2 Default behaviour | ||
88 | --------------------- | ||
89 | |||
90 | The default values for sched_rt_period_us (1000000 or 1s) and | ||
91 | sched_rt_runtime_us (950000 or 0.95s). This gives 0.05s to be used by | ||
92 | SCHED_OTHER (non-RT tasks). These defaults were chosen so that a run-away | ||
93 | realtime tasks will not lock up the machine but leave a little time to recover | ||
94 | it. By setting runtime to -1 you'd get the old behaviour back. | ||
95 | |||
96 | By default all bandwidth is assigned to the root group and new groups get the | ||
97 | period from /proc/sys/kernel/sched_rt_period_us and a run time of 0. If you | ||
98 | want to assign bandwidth to another group, reduce the root group's bandwidth | ||
99 | and assign some or all of the difference to another group. | ||
100 | |||
101 | Realtime group scheduling means you have to assign a portion of total CPU | ||
102 | bandwidth to the group before it will accept realtime tasks. Therefore you will | ||
103 | not be able to run realtime tasks as any user other than root until you have | ||
104 | done that, even if the user has the rights to run processes with realtime | ||
105 | priority! | ||
106 | |||
107 | |||
108 | 2.3 Basis for grouping tasks | ||
109 | ---------------------------- | ||
110 | |||
111 | There are two compile-time settings for allocating CPU bandwidth. These are | ||
112 | configured using the "Basis for grouping tasks" multiple choice menu under | ||
113 | General setup > Group CPU Scheduler: | ||
114 | |||
115 | a. CONFIG_USER_SCHED (aka "Basis for grouping tasks" = "user id") | ||
116 | |||
117 | This lets you use the virtual files under | ||
118 | "/sys/kernel/uids/<uid>/cpu_rt_runtime_us" to control he CPU time reserved for | ||
119 | each user . | ||
120 | |||
121 | The other option is: | ||
122 | |||
123 | .o CONFIG_CGROUP_SCHED (aka "Basis for grouping tasks" = "Control groups") | ||
124 | |||
125 | This uses the /cgroup virtual file system and "/cgroup/<cgroup>/cpu.rt_runtime_us" | ||
126 | to control the CPU time reserved for each control group instead. | ||
127 | |||
128 | For more information on working with control groups, you should read | ||
129 | Documentation/cgroups.txt as well. | ||
130 | |||
131 | Group settings are checked against the following limits in order to keep the configuration | ||
132 | schedulable: | ||
56 | 133 | ||
57 | \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period | 134 | \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period |
58 | 135 | ||
59 | in order to keep the configuration schedulable. | 136 | For now, this can be simplified to just the following (but see Future plans): |
137 | |||
138 | \Sum_{i} runtime_{i} <= global_runtime | ||
139 | |||
140 | |||
141 | 3. Future plans | ||
142 | =============== | ||
143 | |||
144 | There is work in progress to make the scheduling period for each group | ||
145 | ("/sys/kernel/uids/<uid>/cpu_rt_period_us" or | ||
146 | "/cgroup/<cgroup>/cpu.rt_period_us" respectively) configurable as well. | ||
147 | |||
148 | The constraint on the period is that a subgroup must have a smaller or | ||
149 | equal period to its parent. But realistically its not very useful _yet_ | ||
150 | as its prone to starvation without deadline scheduling. | ||
151 | |||
152 | Consider two sibling groups A and B; both have 50% bandwidth, but A's | ||
153 | period is twice the length of B's. | ||
154 | |||
155 | * group A: period=100000us, runtime=10000us | ||
156 | - this runs for 0.01s once every 0.1s | ||
157 | |||
158 | * group B: period= 50000us, runtime=10000us | ||
159 | - this runs for 0.01s twice every 0.1s (or once every 0.05 sec). | ||
160 | |||
161 | This means that currently a while (1) loop in A will run for the full period of | ||
162 | B and can starve B's tasks (assuming they are of lower priority) for a whole | ||
163 | period. | ||
164 | |||
165 | The next project will be SCHED_EDF (Earliest Deadline First scheduling) to bring | ||
166 | full deadline scheduling to the linux kernel. Deadline scheduling the above | ||
167 | groups and treating end of the period as a deadline will ensure that they both | ||
168 | get their allocated time. | ||
169 | |||
170 | Implementing SCHED_EDF might take a while to complete. Priority Inheritance is | ||
171 | the biggest challenge as the current linux PI infrastructure is geared towards | ||
172 | the limited static priority levels 0-139. With deadline scheduling you need to | ||
173 | do deadline inheritance (since priority is inversely proportional to the | ||
174 | deadline delta (deadline - now). | ||
175 | |||
176 | This means the whole PI machinery will have to be reworked - and that is one of | ||
177 | the most complex pieces of code we have. | ||
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt index e985cf5e041..fd4c32a031c 100644 --- a/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/Documentation/sound/alsa/ALSA-Configuration.txt | |||
@@ -284,6 +284,13 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
284 | control correctly. If you have problems regarding this, try | 284 | control correctly. If you have problems regarding this, try |
285 | another ALSA compliant mixer (alsamixer works). | 285 | another ALSA compliant mixer (alsamixer works). |
286 | 286 | ||
287 | Module snd-aw2 | ||
288 | -------------- | ||
289 | |||
290 | Module for Audiowerk2 sound card | ||
291 | |||
292 | This module supports multiple cards. | ||
293 | |||
287 | Module snd-azt2320 | 294 | Module snd-azt2320 |
288 | ------------------ | 295 | ------------------ |
289 | 296 | ||
@@ -818,19 +825,25 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
818 | hippo_1 Hippo (Benq) with jack detection | 825 | hippo_1 Hippo (Benq) with jack detection |
819 | sony-assamd Sony ASSAMD | 826 | sony-assamd Sony ASSAMD |
820 | ultra Samsung Q1 Ultra Vista model | 827 | ultra Samsung Q1 Ultra Vista model |
828 | lenovo-3000 Lenovo 3000 y410 | ||
821 | basic fixed pin assignment w/o SPDIF | 829 | basic fixed pin assignment w/o SPDIF |
822 | auto auto-config reading BIOS (default) | 830 | auto auto-config reading BIOS (default) |
823 | 831 | ||
824 | ALC268 | 832 | ALC267/268 |
833 | quanta-il1 Quanta IL1 mini-notebook | ||
825 | 3stack 3-stack model | 834 | 3stack 3-stack model |
826 | toshiba Toshiba A205 | 835 | toshiba Toshiba A205 |
827 | acer Acer laptops | 836 | acer Acer laptops |
828 | dell Dell OEM laptops (Vostro 1200) | 837 | dell Dell OEM laptops (Vostro 1200) |
838 | zepto Zepto laptops | ||
829 | test for testing/debugging purpose, almost all controls can | 839 | test for testing/debugging purpose, almost all controls can |
830 | adjusted. Appearing only when compiled with | 840 | adjusted. Appearing only when compiled with |
831 | $CONFIG_SND_DEBUG=y | 841 | $CONFIG_SND_DEBUG=y |
832 | auto auto-config reading BIOS (default) | 842 | auto auto-config reading BIOS (default) |
833 | 843 | ||
844 | ALC269 | ||
845 | basic Basic preset | ||
846 | |||
834 | ALC662 | 847 | ALC662 |
835 | 3stack-dig 3-stack (2-channel) with SPDIF | 848 | 3stack-dig 3-stack (2-channel) with SPDIF |
836 | 3stack-6ch 3-stack (6-channel) | 849 | 3stack-6ch 3-stack (6-channel) |
@@ -871,10 +884,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
871 | lenovo-nb0763 Lenovo NB0763 | 884 | lenovo-nb0763 Lenovo NB0763 |
872 | lenovo-ms7195-dig Lenovo MS7195 | 885 | lenovo-ms7195-dig Lenovo MS7195 |
873 | haier-w66 Haier W66 | 886 | haier-w66 Haier W66 |
874 | 6stack-hp HP machines with 6stack (Nettle boards) | ||
875 | 3stack-hp HP machines with 3stack (Lucknow, Samba boards) | 887 | 3stack-hp HP machines with 3stack (Lucknow, Samba boards) |
876 | 6stack-dell Dell machines with 6stack (Inspiron 530) | 888 | 6stack-dell Dell machines with 6stack (Inspiron 530) |
877 | mitac Mitac 8252D | 889 | mitac Mitac 8252D |
890 | clevo-m720 Clevo M720 laptop series | ||
891 | fujitsu-pi2515 Fujitsu AMILO Pi2515 | ||
878 | auto auto-config reading BIOS (default) | 892 | auto auto-config reading BIOS (default) |
879 | 893 | ||
880 | ALC861/660 | 894 | ALC861/660 |
@@ -911,6 +925,12 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
911 | 3stack 3-stack mode (default) | 925 | 3stack 3-stack mode (default) |
912 | 6stack 6-stack mode | 926 | 6stack 6-stack mode |
913 | 927 | ||
928 | AD1884A / AD1883 / AD1984A / AD1984B | ||
929 | desktop 3-stack desktop (default) | ||
930 | laptop laptop with HP jack sensing | ||
931 | mobile mobile devices with HP jack sensing | ||
932 | thinkpad Lenovo Thinkpad X300 | ||
933 | |||
914 | AD1884 | 934 | AD1884 |
915 | N/A | 935 | N/A |
916 | 936 | ||
@@ -936,7 +956,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
936 | laptop-automute 2-channel with EAPD and HP-automute (Lenovo N100) | 956 | laptop-automute 2-channel with EAPD and HP-automute (Lenovo N100) |
937 | ultra 2-channel with EAPD (Samsung Ultra tablet PC) | 957 | ultra 2-channel with EAPD (Samsung Ultra tablet PC) |
938 | 958 | ||
939 | AD1988 | 959 | AD1988/AD1988B/AD1989A/AD1989B |
940 | 6stack 6-jack | 960 | 6stack 6-jack |
941 | 6stack-dig ditto with SPDIF | 961 | 6stack-dig ditto with SPDIF |
942 | 3stack 3-jack | 962 | 3stack 3-jack |
@@ -979,6 +999,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
979 | dell-m26 Dell Inspiron 1501 | 999 | dell-m26 Dell Inspiron 1501 |
980 | dell-m27 Dell Inspiron E1705/9400 | 1000 | dell-m27 Dell Inspiron E1705/9400 |
981 | gateway Gateway laptops with EAPD control | 1001 | gateway Gateway laptops with EAPD control |
1002 | panasonic Panasonic CF-74 | ||
982 | 1003 | ||
983 | STAC9205/9254 | 1004 | STAC9205/9254 |
984 | ref Reference board | 1005 | ref Reference board |
@@ -1017,6 +1038,16 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
1017 | 3stack D965 3stack | 1038 | 3stack D965 3stack |
1018 | 5stack D965 5stack + SPDIF | 1039 | 5stack D965 5stack + SPDIF |
1019 | dell-3stack Dell Dimension E520 | 1040 | dell-3stack Dell Dimension E520 |
1041 | dell-bios Fixes with Dell BIOS setup | ||
1042 | |||
1043 | STAC92HD71B* | ||
1044 | ref Reference board | ||
1045 | dell-m4-1 Dell desktops | ||
1046 | dell-m4-2 Dell desktops | ||
1047 | |||
1048 | STAC92HD73* | ||
1049 | ref Reference board | ||
1050 | dell-m6 Dell desktops | ||
1020 | 1051 | ||
1021 | STAC9872 | 1052 | STAC9872 |
1022 | vaio Setup for VAIO FE550G/SZ110 | 1053 | vaio Setup for VAIO FE550G/SZ110 |
@@ -1590,6 +1621,16 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
1590 | 1621 | ||
1591 | Power management is _not_ supported. | 1622 | Power management is _not_ supported. |
1592 | 1623 | ||
1624 | Module snd-pcsp | ||
1625 | ----------------- | ||
1626 | |||
1627 | Module for internal PC-Speaker. | ||
1628 | |||
1629 | nforce_wa - enable NForce chipset workaround. Expect bad sound. | ||
1630 | |||
1631 | This module supports system beeps, some kind of PCM playback and | ||
1632 | even a few mixer controls. | ||
1633 | |||
1593 | Module snd-pcxhr | 1634 | Module snd-pcxhr |
1594 | ---------------- | 1635 | ---------------- |
1595 | 1636 | ||
diff --git a/Documentation/video4linux/CARDLIST.au0828 b/Documentation/video4linux/CARDLIST.au0828 new file mode 100644 index 00000000000..aaae360312e --- /dev/null +++ b/Documentation/video4linux/CARDLIST.au0828 | |||
@@ -0,0 +1,4 @@ | |||
1 | 0 -> Unknown board (au0828) | ||
2 | 1 -> Hauppauge HVR950Q (au0828) [2040:7200] | ||
3 | 2 -> Hauppauge HVR850 (au0828) [2040:7240] | ||
4 | 3 -> DViCO FusionHDTV USB (au0828) [0fe9:d620] | ||
diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv index d97cf7cc608..f32efb6fb12 100644 --- a/Documentation/video4linux/CARDLIST.bttv +++ b/Documentation/video4linux/CARDLIST.bttv | |||
@@ -148,3 +148,5 @@ | |||
148 | 147 -> VoodooTV 200 (USA) [121a:3000] | 148 | 147 -> VoodooTV 200 (USA) [121a:3000] |
149 | 148 -> DViCO FusionHDTV 2 [dbc0:d200] | 149 | 148 -> DViCO FusionHDTV 2 [dbc0:d200] |
150 | 149 -> Typhoon TV-Tuner PCI (50684) | 150 | 149 -> Typhoon TV-Tuner PCI (50684) |
151 | 150 -> Geovision GV-600 [008a:763c] | ||
152 | 151 -> Kozumi KTV-01C | ||
diff --git a/Documentation/video4linux/CARDLIST.cx23885 b/Documentation/video4linux/CARDLIST.cx23885 index 0924e6e142c..929b90c8387 100644 --- a/Documentation/video4linux/CARDLIST.cx23885 +++ b/Documentation/video4linux/CARDLIST.cx23885 | |||
@@ -5,3 +5,6 @@ | |||
5 | 4 -> DViCO FusionHDTV5 Express [18ac:d500] | 5 | 4 -> DViCO FusionHDTV5 Express [18ac:d500] |
6 | 5 -> Hauppauge WinTV-HVR1500Q [0070:7790,0070:7797] | 6 | 5 -> Hauppauge WinTV-HVR1500Q [0070:7790,0070:7797] |
7 | 6 -> Hauppauge WinTV-HVR1500 [0070:7710,0070:7717] | 7 | 6 -> Hauppauge WinTV-HVR1500 [0070:7710,0070:7717] |
8 | 7 -> Hauppauge WinTV-HVR1200 [0070:71d1] | ||
9 | 8 -> Hauppauge WinTV-HVR1700 [0070:8101] | ||
10 | 9 -> Hauppauge WinTV-HVR1400 [0070:8010] | ||
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index bc5593bd970..54395734646 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -57,3 +57,12 @@ | |||
57 | 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] | 57 | 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] |
58 | 57 -> ADS Tech Instant Video PCI [1421:0390] | 58 | 57 -> ADS Tech Instant Video PCI [1421:0390] |
59 | 58 -> Pinnacle PCTV HD 800i [11bd:0051] | 59 | 58 -> Pinnacle PCTV HD 800i [11bd:0051] |
60 | 59 -> DViCO FusionHDTV 5 PCI nano [18ac:d530] | ||
61 | 60 -> Pinnacle Hybrid PCTV [12ab:1788] | ||
62 | 61 -> Winfast TV2000 XP Global [107d:6f18] | ||
63 | 62 -> PowerColor Real Angel 330 [14f1:ea3d] | ||
64 | 63 -> Geniatech X8000-MT DVBT [14f1:8852] | ||
65 | 64 -> DViCO FusionHDTV DVB-T PRO [18ac:db30] | ||
66 | 65 -> DViCO FusionHDTV 7 Gold [18ac:d610] | ||
67 | 66 -> Prolink Pixelview MPEG 8000GT [1554:4935] | ||
68 | 67 -> Kworld PlusTV HD PCI 120 (ATSC 120) [17de:08c1] | ||
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index 0424901ebc7..44d84dd15ad 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -25,8 +25,8 @@ | |||
25 | 24 -> KNC One TV-Station DVR [1894:a006] | 25 | 24 -> KNC One TV-Station DVR [1894:a006] |
26 | 25 -> ASUS TV-FM 7133 [1043:4843] | 26 | 25 -> ASUS TV-FM 7133 [1043:4843] |
27 | 26 -> Pinnacle PCTV Stereo (saa7134) [11bd:002b] | 27 | 26 -> Pinnacle PCTV Stereo (saa7134) [11bd:002b] |
28 | 27 -> Manli MuchTV M-TV002/Behold TV 403 FM | 28 | 27 -> Manli MuchTV M-TV002 |
29 | 28 -> Manli MuchTV M-TV001/Behold TV 401 | 29 | 28 -> Manli MuchTV M-TV001 |
30 | 29 -> Nagase Sangyo TransGear 3000TV [1461:050c] | 30 | 29 -> Nagase Sangyo TransGear 3000TV [1461:050c] |
31 | 30 -> Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) [1019:4cb4] | 31 | 30 -> Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) [1019:4cb4] |
32 | 31 -> Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) [1019:4cb5] | 32 | 31 -> Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) [1019:4cb5] |
@@ -131,3 +131,12 @@ | |||
131 | 130 -> Beholder BeholdTV M6 / BeholdTV M6 Extra [5ace:6190,5ace:6193] | 131 | 130 -> Beholder BeholdTV M6 / BeholdTV M6 Extra [5ace:6190,5ace:6193] |
132 | 131 -> Twinhan Hybrid DTV-DVB 3056 PCI [1822:0022] | 132 | 131 -> Twinhan Hybrid DTV-DVB 3056 PCI [1822:0022] |
133 | 132 -> Genius TVGO AM11MCE | 133 | 132 -> Genius TVGO AM11MCE |
134 | 133 -> NXP Snake DVB-S reference design | ||
135 | 134 -> Medion/Creatix CTX953 Hybrid [16be:0010] | ||
136 | 135 -> MSI TV@nywhere A/D v1.1 [1462:8625] | ||
137 | 136 -> AVerMedia Cardbus TV/Radio (E506R) [1461:f436] | ||
138 | 137 -> AVerMedia Hybrid TV/Radio (A16D) [1461:f936] | ||
139 | 138 -> Avermedia M115 [1461:a836] | ||
140 | 139 -> Compro VideoMate T750 [185b:c900] | ||
141 | 140 -> Avermedia DVB-S Pro A700 [1461:a7a1] | ||
142 | 141 -> Avermedia DVB-S Hybrid+FM A700 [1461:a7a2] | ||
diff --git a/Documentation/video4linux/extract_xc3028.pl b/Documentation/video4linux/extract_xc3028.pl index cced8ac5c54..2cb816047fc 100644 --- a/Documentation/video4linux/extract_xc3028.pl +++ b/Documentation/video4linux/extract_xc3028.pl | |||
@@ -686,11 +686,11 @@ sub main_firmware($$$$) | |||
686 | write_hunk(812664, 192); | 686 | write_hunk(812664, 192); |
687 | 687 | ||
688 | # | 688 | # |
689 | # Firmware 58, type: SCODE FW HAS IF (0x60000000), IF = 4.50 MHz id: NTSC/M Jp (0000000000002000), size: 192 | 689 | # Firmware 58, type: SCODE FW MTS LCD NOGD MONO IF HAS IF (0x6002b004), IF = 4.50 MHz id: NTSC PAL/M PAL/N (000000000000b700), size: 192 |
690 | # | 690 | # |
691 | 691 | ||
692 | write_le32(0x60000000); # Type | 692 | write_le32(0x6002b004); # Type |
693 | write_le64(0x00000000, 0x00002000); # ID | 693 | write_le64(0x00000000, 0x0000b700); # ID |
694 | write_le16(4500); # IF | 694 | write_le16(4500); # IF |
695 | write_le32(192); # Size | 695 | write_le32(192); # Size |
696 | write_hunk(807672, 192); | 696 | write_hunk(807672, 192); |
@@ -706,10 +706,10 @@ sub main_firmware($$$$) | |||
706 | write_hunk(807864, 192); | 706 | write_hunk(807864, 192); |
707 | 707 | ||
708 | # | 708 | # |
709 | # Firmware 60, type: SCODE FW DTV78 ZARLINK456 HAS IF (0x62000100), IF = 4.76 MHz id: (0000000000000000), size: 192 | 709 | # Firmware 60, type: SCODE FW DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 HAS IF (0x620003e0), IF = 4.76 MHz id: (0000000000000000), size: 192 |
710 | # | 710 | # |
711 | 711 | ||
712 | write_le32(0x62000100); # Type | 712 | write_le32(0x620003e0); # Type |
713 | write_le64(0x00000000, 0x00000000); # ID | 713 | write_le64(0x00000000, 0x00000000); # ID |
714 | write_le16(4760); # IF | 714 | write_le16(4760); # IF |
715 | write_le32(192); # Size | 715 | write_le32(192); # Size |
@@ -726,30 +726,30 @@ sub main_firmware($$$$) | |||
726 | write_hunk(811512, 192); | 726 | write_hunk(811512, 192); |
727 | 727 | ||
728 | # | 728 | # |
729 | # Firmware 62, type: SCODE FW DTV7 ZARLINK456 HAS IF (0x62000080), IF = 5.26 MHz id: (0000000000000000), size: 192 | 729 | # Firmware 62, type: SCODE FW HAS IF (0x60000000), IF = 5.26 MHz id: (0000000000000000), size: 192 |
730 | # | 730 | # |
731 | 731 | ||
732 | write_le32(0x62000080); # Type | 732 | write_le32(0x60000000); # Type |
733 | write_le64(0x00000000, 0x00000000); # ID | 733 | write_le64(0x00000000, 0x00000000); # ID |
734 | write_le16(5260); # IF | 734 | write_le16(5260); # IF |
735 | write_le32(192); # Size | 735 | write_le32(192); # Size |
736 | write_hunk(810552, 192); | 736 | write_hunk(810552, 192); |
737 | 737 | ||
738 | # | 738 | # |
739 | # Firmware 63, type: SCODE FW MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG NICAM/B (0000000800000007), size: 192 | 739 | # Firmware 63, type: SCODE FW MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG A2 NICAM (0000000f00000007), size: 192 |
740 | # | 740 | # |
741 | 741 | ||
742 | write_le32(0x60008000); # Type | 742 | write_le32(0x60008000); # Type |
743 | write_le64(0x00000008, 0x00000007); # ID | 743 | write_le64(0x0000000f, 0x00000007); # ID |
744 | write_le16(5320); # IF | 744 | write_le16(5320); # IF |
745 | write_le32(192); # Size | 745 | write_le32(192); # Size |
746 | write_hunk(810744, 192); | 746 | write_hunk(810744, 192); |
747 | 747 | ||
748 | # | 748 | # |
749 | # Firmware 64, type: SCODE FW DTV8 CHINA HAS IF (0x64000200), IF = 5.40 MHz id: (0000000000000000), size: 192 | 749 | # Firmware 64, type: SCODE FW DTV7 DTV78 DTV8 DIBCOM52 CHINA HAS IF (0x65000380), IF = 5.40 MHz id: (0000000000000000), size: 192 |
750 | # | 750 | # |
751 | 751 | ||
752 | write_le32(0x64000200); # Type | 752 | write_le32(0x65000380); # Type |
753 | write_le64(0x00000000, 0x00000000); # ID | 753 | write_le64(0x00000000, 0x00000000); # ID |
754 | write_le16(5400); # IF | 754 | write_le16(5400); # IF |
755 | write_le32(192); # Size | 755 | write_le32(192); # Size |
@@ -766,50 +766,50 @@ sub main_firmware($$$$) | |||
766 | write_hunk(809592, 192); | 766 | write_hunk(809592, 192); |
767 | 767 | ||
768 | # | 768 | # |
769 | # Firmware 66, type: SCODE FW HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2/B (0000000200000007), size: 192 | 769 | # Firmware 66, type: SCODE FW HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2 (0000000300000007), size: 192 |
770 | # | 770 | # |
771 | 771 | ||
772 | write_le32(0x60000000); # Type | 772 | write_le32(0x60000000); # Type |
773 | write_le64(0x00000002, 0x00000007); # ID | 773 | write_le64(0x00000003, 0x00000007); # ID |
774 | write_le16(5640); # IF | 774 | write_le16(5640); # IF |
775 | write_le32(192); # Size | 775 | write_le32(192); # Size |
776 | write_hunk(808440, 192); | 776 | write_hunk(808440, 192); |
777 | 777 | ||
778 | # | 778 | # |
779 | # Firmware 67, type: SCODE FW HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM/B (0000000800000007), size: 192 | 779 | # Firmware 67, type: SCODE FW HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM (0000000c00000007), size: 192 |
780 | # | 780 | # |
781 | 781 | ||
782 | write_le32(0x60000000); # Type | 782 | write_le32(0x60000000); # Type |
783 | write_le64(0x00000008, 0x00000007); # ID | 783 | write_le64(0x0000000c, 0x00000007); # ID |
784 | write_le16(5740); # IF | 784 | write_le16(5740); # IF |
785 | write_le32(192); # Size | 785 | write_le32(192); # Size |
786 | write_hunk(808632, 192); | 786 | write_hunk(808632, 192); |
787 | 787 | ||
788 | # | 788 | # |
789 | # Firmware 68, type: SCODE FW DTV7 DIBCOM52 HAS IF (0x61000080), IF = 5.90 MHz id: (0000000000000000), size: 192 | 789 | # Firmware 68, type: SCODE FW HAS IF (0x60000000), IF = 5.90 MHz id: (0000000000000000), size: 192 |
790 | # | 790 | # |
791 | 791 | ||
792 | write_le32(0x61000080); # Type | 792 | write_le32(0x60000000); # Type |
793 | write_le64(0x00000000, 0x00000000); # ID | 793 | write_le64(0x00000000, 0x00000000); # ID |
794 | write_le16(5900); # IF | 794 | write_le16(5900); # IF |
795 | write_le32(192); # Size | 795 | write_le32(192); # Size |
796 | write_hunk(810360, 192); | 796 | write_hunk(810360, 192); |
797 | 797 | ||
798 | # | 798 | # |
799 | # Firmware 69, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/I (0000000000000010), size: 192 | 799 | # Firmware 69, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/DK PAL/I SECAM/K3 SECAM/L SECAM/Lc NICAM (0000000c04c000f0), size: 192 |
800 | # | 800 | # |
801 | 801 | ||
802 | write_le32(0x60008000); # Type | 802 | write_le32(0x60008000); # Type |
803 | write_le64(0x00000000, 0x00000010); # ID | 803 | write_le64(0x0000000c, 0x04c000f0); # ID |
804 | write_le16(6000); # IF | 804 | write_le16(6000); # IF |
805 | write_le32(192); # Size | 805 | write_le32(192); # Size |
806 | write_hunk(808824, 192); | 806 | write_hunk(808824, 192); |
807 | 807 | ||
808 | # | 808 | # |
809 | # Firmware 70, type: SCODE FW DTV6 QAM F6MHZ HAS IF (0x68000060), IF = 6.20 MHz id: (0000000000000000), size: 192 | 809 | # Firmware 70, type: SCODE FW DTV6 QAM ATSC LG60 F6MHZ HAS IF (0x68050060), IF = 6.20 MHz id: (0000000000000000), size: 192 |
810 | # | 810 | # |
811 | 811 | ||
812 | write_le32(0x68000060); # Type | 812 | write_le32(0x68050060); # Type |
813 | write_le64(0x00000000, 0x00000000); # ID | 813 | write_le64(0x00000000, 0x00000000); # ID |
814 | write_le16(6200); # IF | 814 | write_le16(6200); # IF |
815 | write_le32(192); # Size | 815 | write_le32(192); # Size |
@@ -846,11 +846,11 @@ sub main_firmware($$$$) | |||
846 | write_hunk(809208, 192); | 846 | write_hunk(809208, 192); |
847 | 847 | ||
848 | # | 848 | # |
849 | # Firmware 74, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.50 MHz id: SECAM/K3 (0000000004000000), size: 192 | 849 | # Firmware 74, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.50 MHz id: PAL/DK SECAM/K3 SECAM/L NICAM (0000000c044000e0), size: 192 |
850 | # | 850 | # |
851 | 851 | ||
852 | write_le32(0x60008000); # Type | 852 | write_le32(0x60008000); # Type |
853 | write_le64(0x00000000, 0x04000000); # ID | 853 | write_le64(0x0000000c, 0x044000e0); # ID |
854 | write_le16(6500); # IF | 854 | write_le16(6500); # IF |
855 | write_le32(192); # Size | 855 | write_le32(192); # Size |
856 | write_hunk(811128, 192); | 856 | write_hunk(811128, 192); |