diff options
Diffstat (limited to 'Documentation')
29 files changed, 1639 insertions, 84 deletions
diff --git a/Documentation/ABI/testing/debugfs-pktcdvd b/Documentation/ABI/testing/debugfs-pktcdvd index 03dbd883cc41..bf9c16b64c34 100644 --- a/Documentation/ABI/testing/debugfs-pktcdvd +++ b/Documentation/ABI/testing/debugfs-pktcdvd | |||
@@ -1,6 +1,6 @@ | |||
1 | What: /debug/pktcdvd/pktcdvd[0-7] | 1 | What: /debug/pktcdvd/pktcdvd[0-7] |
2 | Date: Oct. 2006 | 2 | Date: Oct. 2006 |
3 | KernelVersion: 2.6.19 | 3 | KernelVersion: 2.6.20 |
4 | Contact: Thomas Maier <balagi@justmail.de> | 4 | Contact: Thomas Maier <balagi@justmail.de> |
5 | Description: | 5 | Description: |
6 | 6 | ||
@@ -11,8 +11,7 @@ The pktcdvd module (packet writing driver) creates | |||
11 | these files in debugfs: | 11 | these files in debugfs: |
12 | 12 | ||
13 | /debug/pktcdvd/pktcdvd[0-7]/ | 13 | /debug/pktcdvd/pktcdvd[0-7]/ |
14 | info (0444) Lots of human readable driver | 14 | info (0444) Lots of driver statistics and infos. |
15 | statistics and infos. Multiple lines! | ||
16 | 15 | ||
17 | Example: | 16 | Example: |
18 | ------- | 17 | ------- |
diff --git a/Documentation/ABI/testing/sysfs-class-pktcdvd b/Documentation/ABI/testing/sysfs-class-pktcdvd index c4c55edc9a5c..b1c3f0263359 100644 --- a/Documentation/ABI/testing/sysfs-class-pktcdvd +++ b/Documentation/ABI/testing/sysfs-class-pktcdvd | |||
@@ -1,6 +1,6 @@ | |||
1 | What: /sys/class/pktcdvd/ | 1 | What: /sys/class/pktcdvd/ |
2 | Date: Oct. 2006 | 2 | Date: Oct. 2006 |
3 | KernelVersion: 2.6.19 | 3 | KernelVersion: 2.6.20 |
4 | Contact: Thomas Maier <balagi@justmail.de> | 4 | Contact: Thomas Maier <balagi@justmail.de> |
5 | Description: | 5 | Description: |
6 | 6 | ||
diff --git a/Documentation/DocBook/gadget.tmpl b/Documentation/DocBook/gadget.tmpl index a34442436128..e7fc96433408 100644 --- a/Documentation/DocBook/gadget.tmpl +++ b/Documentation/DocBook/gadget.tmpl | |||
@@ -482,13 +482,13 @@ slightly. | |||
482 | <para>Gadget drivers | 482 | <para>Gadget drivers |
483 | rely on common USB structures and constants | 483 | rely on common USB structures and constants |
484 | defined in the | 484 | defined in the |
485 | <filename><linux/usb_ch9.h></filename> | 485 | <filename><linux/usb/ch9.h></filename> |
486 | header file, which is standard in Linux 2.6 kernels. | 486 | header file, which is standard in Linux 2.6 kernels. |
487 | These are the same types and constants used by host | 487 | These are the same types and constants used by host |
488 | side drivers (and usbcore). | 488 | side drivers (and usbcore). |
489 | </para> | 489 | </para> |
490 | 490 | ||
491 | !Iinclude/linux/usb_ch9.h | 491 | !Iinclude/linux/usb/ch9.h |
492 | </sect1> | 492 | </sect1> |
493 | 493 | ||
494 | <sect1 id="core"><title>Core Objects and Methods</title> | 494 | <sect1 id="core"><title>Core Objects and Methods</title> |
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index 3fa0c4b4541e..0bb90237e230 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -316,6 +316,9 @@ X!Earch/i386/kernel/mca.c | |||
316 | <sect1><title>DMI Interfaces</title> | 316 | <sect1><title>DMI Interfaces</title> |
317 | !Edrivers/firmware/dmi_scan.c | 317 | !Edrivers/firmware/dmi_scan.c |
318 | </sect1> | 318 | </sect1> |
319 | <sect1><title>EDD Interfaces</title> | ||
320 | !Idrivers/firmware/edd.c | ||
321 | </sect1> | ||
319 | </chapter> | 322 | </chapter> |
320 | 323 | ||
321 | <chapter id="security"> | 324 | <chapter id="security"> |
diff --git a/Documentation/DocBook/stylesheet.xsl b/Documentation/DocBook/stylesheet.xsl index 3ccce886c349..974e17ccf106 100644 --- a/Documentation/DocBook/stylesheet.xsl +++ b/Documentation/DocBook/stylesheet.xsl | |||
@@ -4,4 +4,5 @@ | |||
4 | <param name="funcsynopsis.style">ansi</param> | 4 | <param name="funcsynopsis.style">ansi</param> |
5 | <param name="funcsynopsis.tabular.threshold">80</param> | 5 | <param name="funcsynopsis.tabular.threshold">80</param> |
6 | <!-- <param name="paper.type">A4</param> --> | 6 | <!-- <param name="paper.type">A4</param> --> |
7 | <param name="generate.section.toc.level">2</param> | ||
7 | </stylesheet> | 8 | </stylesheet> |
diff --git a/Documentation/DocBook/usb.tmpl b/Documentation/DocBook/usb.tmpl index 143e5ff7deb8..a2ebd651b05a 100644 --- a/Documentation/DocBook/usb.tmpl +++ b/Documentation/DocBook/usb.tmpl | |||
@@ -187,13 +187,13 @@ | |||
187 | 187 | ||
188 | <chapter><title>USB-Standard Types</title> | 188 | <chapter><title>USB-Standard Types</title> |
189 | 189 | ||
190 | <para>In <filename><linux/usb_ch9.h></filename> you will find | 190 | <para>In <filename><linux/usb/ch9.h></filename> you will find |
191 | the USB data types defined in chapter 9 of the USB specification. | 191 | the USB data types defined in chapter 9 of the USB specification. |
192 | These data types are used throughout USB, and in APIs including | 192 | These data types are used throughout USB, and in APIs including |
193 | this host side API, gadget APIs, and usbfs. | 193 | this host side API, gadget APIs, and usbfs. |
194 | </para> | 194 | </para> |
195 | 195 | ||
196 | !Iinclude/linux/usb_ch9.h | 196 | !Iinclude/linux/usb/ch9.h |
197 | 197 | ||
198 | </chapter> | 198 | </chapter> |
199 | 199 | ||
@@ -574,7 +574,7 @@ for (;;) { | |||
574 | #include <asm/byteorder.h></programlisting> | 574 | #include <asm/byteorder.h></programlisting> |
575 | The standard USB device model requests, from "Chapter 9" of | 575 | The standard USB device model requests, from "Chapter 9" of |
576 | the USB 2.0 specification, are automatically included from | 576 | the USB 2.0 specification, are automatically included from |
577 | the <filename><linux/usb_ch9.h></filename> header. | 577 | the <filename><linux/usb/ch9.h></filename> header. |
578 | </para> | 578 | </para> |
579 | 579 | ||
580 | <para>Unless noted otherwise, the ioctl requests | 580 | <para>Unless noted otherwise, the ioctl requests |
diff --git a/Documentation/auxdisplay/cfag12864b b/Documentation/auxdisplay/cfag12864b new file mode 100644 index 000000000000..3572b98f45b8 --- /dev/null +++ b/Documentation/auxdisplay/cfag12864b | |||
@@ -0,0 +1,105 @@ | |||
1 | =================================== | ||
2 | cfag12864b LCD Driver Documentation | ||
3 | =================================== | ||
4 | |||
5 | License: GPLv2 | ||
6 | Author & Maintainer: Miguel Ojeda Sandonis <maxextreme@gmail.com> | ||
7 | Date: 2006-10-27 | ||
8 | |||
9 | |||
10 | |||
11 | -------- | ||
12 | 0. INDEX | ||
13 | -------- | ||
14 | |||
15 | 1. DRIVER INFORMATION | ||
16 | 2. DEVICE INFORMATION | ||
17 | 3. WIRING | ||
18 | 4. USERSPACE PROGRAMMING | ||
19 | |||
20 | |||
21 | --------------------- | ||
22 | 1. DRIVER INFORMATION | ||
23 | --------------------- | ||
24 | |||
25 | This driver support one cfag12864b display at time. | ||
26 | |||
27 | |||
28 | --------------------- | ||
29 | 2. DEVICE INFORMATION | ||
30 | --------------------- | ||
31 | |||
32 | Manufacturer: Crystalfontz | ||
33 | Device Name: Crystalfontz 12864b LCD Series | ||
34 | Device Code: cfag12864b | ||
35 | Webpage: http://www.crystalfontz.com | ||
36 | Device Webpage: http://www.crystalfontz.com/products/12864b/ | ||
37 | Type: LCD (Liquid Crystal Display) | ||
38 | Width: 128 | ||
39 | Height: 64 | ||
40 | Colors: 2 (B/N) | ||
41 | Controller: ks0108 | ||
42 | Controllers: 2 | ||
43 | Pages: 8 each controller | ||
44 | Addresses: 64 each page | ||
45 | Data size: 1 byte each address | ||
46 | Memory size: 2 * 8 * 64 * 1 = 1024 bytes = 1 Kbyte | ||
47 | |||
48 | |||
49 | --------- | ||
50 | 3. WIRING | ||
51 | --------- | ||
52 | |||
53 | The cfag12864b LCD Series don't have official wiring. | ||
54 | |||
55 | The common wiring is done to the parallel port as shown: | ||
56 | |||
57 | Parallel Port cfag12864b | ||
58 | |||
59 | Name Pin# Pin# Name | ||
60 | |||
61 | Strobe ( 1)------------------------------(17) Enable | ||
62 | Data 0 ( 2)------------------------------( 4) Data 0 | ||
63 | Data 1 ( 3)------------------------------( 5) Data 1 | ||
64 | Data 2 ( 4)------------------------------( 6) Data 2 | ||
65 | Data 3 ( 5)------------------------------( 7) Data 3 | ||
66 | Data 4 ( 6)------------------------------( 8) Data 4 | ||
67 | Data 5 ( 7)------------------------------( 9) Data 5 | ||
68 | Data 6 ( 8)------------------------------(10) Data 6 | ||
69 | Data 7 ( 9)------------------------------(11) Data 7 | ||
70 | (10) [+5v]---( 1) Vdd | ||
71 | (11) [GND]---( 2) Ground | ||
72 | (12) [+5v]---(14) Reset | ||
73 | (13) [GND]---(15) Read / Write | ||
74 | Line (14)------------------------------(13) Controller Select 1 | ||
75 | (15) | ||
76 | Init (16)------------------------------(12) Controller Select 2 | ||
77 | Select (17)------------------------------(16) Data / Instruction | ||
78 | Ground (18)---[GND] [+5v]---(19) LED + | ||
79 | Ground (19)---[GND] | ||
80 | Ground (20)---[GND] E A Values: | ||
81 | Ground (21)---[GND] [GND]---[P1]---(18) Vee · R = Resistor = 22 ohm | ||
82 | Ground (22)---[GND] | · P1 = Preset = 10 Kohm | ||
83 | Ground (23)---[GND] ---- S ------( 3) V0 · P2 = Preset = 1 Kohm | ||
84 | Ground (24)---[GND] | | | ||
85 | Ground (25)---[GND] [GND]---[P2]---[R]---(20) LED - | ||
86 | |||
87 | |||
88 | ------------------------ | ||
89 | 4. USERSPACE PROGRAMMING | ||
90 | ------------------------ | ||
91 | |||
92 | The cfag12864bfb describes a framebuffer device (/dev/fbX). | ||
93 | |||
94 | It has a size of 1024 bytes = 1 Kbyte. | ||
95 | Each bit represents one pixel. If the bit is high, the pixel will | ||
96 | turn on. If the pixel is low, the pixel will turn off. | ||
97 | |||
98 | You can use the framebuffer as a file: fopen, fwrite, fclose... | ||
99 | Although the LCD won't get updated until the next refresh time arrives. | ||
100 | |||
101 | Also, you can mmap the framebuffer: open & mmap, munmap & close... | ||
102 | which is the best option for most uses. | ||
103 | |||
104 | Check Documentation/auxdisplay/cfag12864b-example.c | ||
105 | for a real working userspace complete program with usage examples. | ||
diff --git a/Documentation/auxdisplay/cfag12864b-example.c b/Documentation/auxdisplay/cfag12864b-example.c new file mode 100644 index 000000000000..7bfac354d4c9 --- /dev/null +++ b/Documentation/auxdisplay/cfag12864b-example.c | |||
@@ -0,0 +1,282 @@ | |||
1 | /* | ||
2 | * Filename: cfag12864b-example.c | ||
3 | * Version: 0.1.0 | ||
4 | * Description: cfag12864b LCD userspace example program | ||
5 | * License: GPLv2 | ||
6 | * | ||
7 | * Author: Copyright (C) Miguel Ojeda Sandonis <maxextreme@gmail.com> | ||
8 | * Date: 2006-10-31 | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | /* | ||
26 | * ------------------------ | ||
27 | * start of cfag12864b code | ||
28 | * ------------------------ | ||
29 | */ | ||
30 | |||
31 | #include <string.h> | ||
32 | #include <fcntl.h> | ||
33 | #include <unistd.h> | ||
34 | #include <sys/types.h> | ||
35 | #include <sys/stat.h> | ||
36 | #include <sys/mman.h> | ||
37 | |||
38 | #define CFAG12864B_WIDTH (128) | ||
39 | #define CFAG12864B_HEIGHT (64) | ||
40 | #define CFAG12864B_SIZE (128 * 64 / 8) | ||
41 | #define CFAG12864B_BPB (8) | ||
42 | #define CFAG12864B_ADDRESS(x, y) ((y) * CFAG12864B_WIDTH / \ | ||
43 | CFAG12864B_BPB + (x) / CFAG12864B_BPB) | ||
44 | #define CFAG12864B_BIT(n) (((unsigned char) 1) << (n)) | ||
45 | |||
46 | #undef CFAG12864B_DOCHECK | ||
47 | #ifdef CFAG12864B_DOCHECK | ||
48 | #define CFAG12864B_CHECK(x, y) ((x) < CFAG12864B_WIDTH && \ | ||
49 | (y) < CFAG12864B_HEIGHT) | ||
50 | #else | ||
51 | #define CFAG12864B_CHECK(x, y) (1) | ||
52 | #endif | ||
53 | |||
54 | int cfag12864b_fd; | ||
55 | unsigned char * cfag12864b_mem; | ||
56 | unsigned char cfag12864b_buffer[CFAG12864B_SIZE]; | ||
57 | |||
58 | /* | ||
59 | * init a cfag12864b framebuffer device | ||
60 | * | ||
61 | * No error: return = 0 | ||
62 | * Unable to open: return = -1 | ||
63 | * Unable to mmap: return = -2 | ||
64 | */ | ||
65 | int cfag12864b_init(char *path) | ||
66 | { | ||
67 | cfag12864b_fd = open(path, O_RDWR); | ||
68 | if (cfag12864b_fd == -1) | ||
69 | return -1; | ||
70 | |||
71 | cfag12864b_mem = mmap(0, CFAG12864B_SIZE, PROT_READ | PROT_WRITE, | ||
72 | MAP_SHARED, cfag12864b_fd, 0); | ||
73 | if (cfag12864b_mem == MAP_FAILED) { | ||
74 | close(cfag12864b_fd); | ||
75 | return -2; | ||
76 | } | ||
77 | |||
78 | return 0; | ||
79 | } | ||
80 | |||
81 | /* | ||
82 | * exit a cfag12864b framebuffer device | ||
83 | */ | ||
84 | void cfag12864b_exit(void) | ||
85 | { | ||
86 | munmap(cfag12864b_mem, CFAG12864B_SIZE); | ||
87 | close(cfag12864b_fd); | ||
88 | } | ||
89 | |||
90 | /* | ||
91 | * set (x, y) pixel | ||
92 | */ | ||
93 | void cfag12864b_set(unsigned char x, unsigned char y) | ||
94 | { | ||
95 | if (CFAG12864B_CHECK(x, y)) | ||
96 | cfag12864b_buffer[CFAG12864B_ADDRESS(x, y)] |= | ||
97 | CFAG12864B_BIT(x % CFAG12864B_BPB); | ||
98 | } | ||
99 | |||
100 | /* | ||
101 | * unset (x, y) pixel | ||
102 | */ | ||
103 | void cfag12864b_unset(unsigned char x, unsigned char y) | ||
104 | { | ||
105 | if (CFAG12864B_CHECK(x, y)) | ||
106 | cfag12864b_buffer[CFAG12864B_ADDRESS(x, y)] &= | ||
107 | ~CFAG12864B_BIT(x % CFAG12864B_BPB); | ||
108 | } | ||
109 | |||
110 | /* | ||
111 | * is set (x, y) pixel? | ||
112 | * | ||
113 | * Pixel off: return = 0 | ||
114 | * Pixel on: return = 1 | ||
115 | */ | ||
116 | unsigned char cfag12864b_isset(unsigned char x, unsigned char y) | ||
117 | { | ||
118 | if (CFAG12864B_CHECK(x, y)) | ||
119 | if (cfag12864b_buffer[CFAG12864B_ADDRESS(x, y)] & | ||
120 | CFAG12864B_BIT(x % CFAG12864B_BPB)) | ||
121 | return 1; | ||
122 | |||
123 | return 0; | ||
124 | } | ||
125 | |||
126 | /* | ||
127 | * not (x, y) pixel | ||
128 | */ | ||
129 | void cfag12864b_not(unsigned char x, unsigned char y) | ||
130 | { | ||
131 | if (cfag12864b_isset(x, y)) | ||
132 | cfag12864b_unset(x, y); | ||
133 | else | ||
134 | cfag12864b_set(x, y); | ||
135 | } | ||
136 | |||
137 | /* | ||
138 | * fill (set all pixels) | ||
139 | */ | ||
140 | void cfag12864b_fill(void) | ||
141 | { | ||
142 | unsigned short i; | ||
143 | |||
144 | for (i = 0; i < CFAG12864B_SIZE; i++) | ||
145 | cfag12864b_buffer[i] = 0xFF; | ||
146 | } | ||
147 | |||
148 | /* | ||
149 | * clear (unset all pixels) | ||
150 | */ | ||
151 | void cfag12864b_clear(void) | ||
152 | { | ||
153 | unsigned short i; | ||
154 | |||
155 | for (i = 0; i < CFAG12864B_SIZE; i++) | ||
156 | cfag12864b_buffer[i] = 0; | ||
157 | } | ||
158 | |||
159 | /* | ||
160 | * format a [128*64] matrix | ||
161 | * | ||
162 | * Pixel off: src[i] = 0 | ||
163 | * Pixel on: src[i] > 0 | ||
164 | */ | ||
165 | void cfag12864b_format(unsigned char * matrix) | ||
166 | { | ||
167 | unsigned char i, j, n; | ||
168 | |||
169 | for (i = 0; i < CFAG12864B_HEIGHT; i++) | ||
170 | for (j = 0; j < CFAG12864B_WIDTH / CFAG12864B_BPB; j++) { | ||
171 | cfag12864b_buffer[i * CFAG12864B_WIDTH / CFAG12864B_BPB + | ||
172 | j] = 0; | ||
173 | for (n = 0; n < CFAG12864B_BPB; n++) | ||
174 | if (matrix[i * CFAG12864B_WIDTH + | ||
175 | j * CFAG12864B_BPB + n]) | ||
176 | cfag12864b_buffer[i * CFAG12864B_WIDTH / | ||
177 | CFAG12864B_BPB + j] |= | ||
178 | CFAG12864B_BIT(n); | ||
179 | } | ||
180 | } | ||
181 | |||
182 | /* | ||
183 | * blit buffer to lcd | ||
184 | */ | ||
185 | void cfag12864b_blit(void) | ||
186 | { | ||
187 | memcpy(cfag12864b_mem, cfag12864b_buffer, CFAG12864B_SIZE); | ||
188 | } | ||
189 | |||
190 | /* | ||
191 | * ---------------------- | ||
192 | * end of cfag12864b code | ||
193 | * ---------------------- | ||
194 | */ | ||
195 | |||
196 | #include <stdio.h> | ||
197 | #include <string.h> | ||
198 | |||
199 | #define EXAMPLES 6 | ||
200 | |||
201 | void example(unsigned char n) | ||
202 | { | ||
203 | unsigned short i, j; | ||
204 | unsigned char matrix[CFAG12864B_WIDTH * CFAG12864B_HEIGHT]; | ||
205 | |||
206 | if (n > EXAMPLES) | ||
207 | return; | ||
208 | |||
209 | printf("Example %i/%i - ", n, EXAMPLES); | ||
210 | |||
211 | switch (n) { | ||
212 | case 1: | ||
213 | printf("Draw points setting bits"); | ||
214 | cfag12864b_clear(); | ||
215 | for (i = 0; i < CFAG12864B_WIDTH; i += 2) | ||
216 | for (j = 0; j < CFAG12864B_HEIGHT; j += 2) | ||
217 | cfag12864b_set(i, j); | ||
218 | break; | ||
219 | |||
220 | case 2: | ||
221 | printf("Clear the LCD"); | ||
222 | cfag12864b_clear(); | ||
223 | break; | ||
224 | |||
225 | case 3: | ||
226 | printf("Draw rows formatting a [128*64] matrix"); | ||
227 | memset(matrix, 0, CFAG12864B_WIDTH * CFAG12864B_HEIGHT); | ||
228 | for (i = 0; i < CFAG12864B_WIDTH; i++) | ||
229 | for (j = 0; j < CFAG12864B_HEIGHT; j += 2) | ||
230 | matrix[j * CFAG12864B_WIDTH + i] = 1; | ||
231 | cfag12864b_format(matrix); | ||
232 | break; | ||
233 | |||
234 | case 4: | ||
235 | printf("Fill the lcd"); | ||
236 | cfag12864b_fill(); | ||
237 | break; | ||
238 | |||
239 | case 5: | ||
240 | printf("Draw columns unsetting bits"); | ||
241 | for (i = 0; i < CFAG12864B_WIDTH; i += 2) | ||
242 | for (j = 0; j < CFAG12864B_HEIGHT; j++) | ||
243 | cfag12864b_unset(i, j); | ||
244 | break; | ||
245 | |||
246 | case 6: | ||
247 | printf("Do negative not-ing all bits"); | ||
248 | for (i = 0; i < CFAG12864B_WIDTH; i++) | ||
249 | for (j = 0; j < CFAG12864B_HEIGHT; j ++) | ||
250 | cfag12864b_not(i, j); | ||
251 | break; | ||
252 | } | ||
253 | |||
254 | puts(" - [Press Enter]"); | ||
255 | } | ||
256 | |||
257 | int main(int argc, char *argv[]) | ||
258 | { | ||
259 | unsigned char n; | ||
260 | |||
261 | if (argc != 2) { | ||
262 | printf( | ||
263 | "Sintax: %s fbdev\n" | ||
264 | "Usually: /dev/fb0, /dev/fb1...\n", argv[0]); | ||
265 | return -1; | ||
266 | } | ||
267 | |||
268 | if (cfag12864b_init(argv[1])) { | ||
269 | printf("Can't init %s fbdev\n", argv[1]); | ||
270 | return -2; | ||
271 | } | ||
272 | |||
273 | for (n = 1; n <= EXAMPLES; n++) { | ||
274 | example(n); | ||
275 | cfag12864b_blit(); | ||
276 | while (getchar() != '\n'); | ||
277 | } | ||
278 | |||
279 | cfag12864b_exit(); | ||
280 | |||
281 | return 0; | ||
282 | } | ||
diff --git a/Documentation/auxdisplay/ks0108 b/Documentation/auxdisplay/ks0108 new file mode 100644 index 000000000000..92b03b60c613 --- /dev/null +++ b/Documentation/auxdisplay/ks0108 | |||
@@ -0,0 +1,55 @@ | |||
1 | ========================================== | ||
2 | ks0108 LCD Controller Driver Documentation | ||
3 | ========================================== | ||
4 | |||
5 | License: GPLv2 | ||
6 | Author & Maintainer: Miguel Ojeda Sandonis <maxextreme@gmail.com> | ||
7 | Date: 2006-10-27 | ||
8 | |||
9 | |||
10 | |||
11 | -------- | ||
12 | 0. INDEX | ||
13 | -------- | ||
14 | |||
15 | 1. DRIVER INFORMATION | ||
16 | 2. DEVICE INFORMATION | ||
17 | 3. WIRING | ||
18 | |||
19 | |||
20 | --------------------- | ||
21 | 1. DRIVER INFORMATION | ||
22 | --------------------- | ||
23 | |||
24 | This driver support the ks0108 LCD controller. | ||
25 | |||
26 | |||
27 | --------------------- | ||
28 | 2. DEVICE INFORMATION | ||
29 | --------------------- | ||
30 | |||
31 | Manufacturer: Samsung | ||
32 | Device Name: KS0108 LCD Controller | ||
33 | Device Code: ks0108 | ||
34 | Webpage: - | ||
35 | Device Webpage: - | ||
36 | Type: LCD Controller (Liquid Crystal Display Controller) | ||
37 | Width: 64 | ||
38 | Height: 64 | ||
39 | Colors: 2 (B/N) | ||
40 | Pages: 8 | ||
41 | Addresses: 64 each page | ||
42 | Data size: 1 byte each address | ||
43 | Memory size: 8 * 64 * 1 = 512 bytes | ||
44 | |||
45 | |||
46 | --------- | ||
47 | 3. WIRING | ||
48 | --------- | ||
49 | |||
50 | The driver supports data parallel port wiring. | ||
51 | |||
52 | If you aren't building LCD related hardware, you should check | ||
53 | your LCD specific wiring information in the same folder. | ||
54 | |||
55 | For example, check Documentation/auxdisplay/cfag12864b. | ||
diff --git a/Documentation/cdrom/packet-writing.txt b/Documentation/cdrom/packet-writing.txt index 7715d2247c4d..cf1f8126991c 100644 --- a/Documentation/cdrom/packet-writing.txt +++ b/Documentation/cdrom/packet-writing.txt | |||
@@ -93,7 +93,7 @@ Notes | |||
93 | Using the pktcdvd sysfs interface | 93 | Using the pktcdvd sysfs interface |
94 | --------------------------------- | 94 | --------------------------------- |
95 | 95 | ||
96 | Since Linux 2.6.19, the pktcdvd module has a sysfs interface | 96 | Since Linux 2.6.20, the pktcdvd module has a sysfs interface |
97 | and can be controlled by it. For example the "pktcdvd" tool uses | 97 | and can be controlled by it. For example the "pktcdvd" tool uses |
98 | this interface. (see http://people.freenet.de/BalaGi#pktcdvd ) | 98 | this interface. (see http://people.freenet.de/BalaGi#pktcdvd ) |
99 | 99 | ||
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt new file mode 100644 index 000000000000..5163b85308f5 --- /dev/null +++ b/Documentation/driver-model/devres.txt | |||
@@ -0,0 +1,268 @@ | |||
1 | Devres - Managed Device Resource | ||
2 | ================================ | ||
3 | |||
4 | Tejun Heo <teheo@suse.de> | ||
5 | |||
6 | First draft 10 January 2007 | ||
7 | |||
8 | |||
9 | 1. Intro : Huh? Devres? | ||
10 | 2. Devres : Devres in a nutshell | ||
11 | 3. Devres Group : Group devres'es and release them together | ||
12 | 4. Details : Life time rules, calling context, ... | ||
13 | 5. Overhead : How much do we have to pay for this? | ||
14 | 6. List of managed interfaces : Currently implemented managed interfaces | ||
15 | |||
16 | |||
17 | 1. Intro | ||
18 | -------- | ||
19 | |||
20 | devres came up while trying to convert libata to use iomap. Each | ||
21 | iomapped address should be kept and unmapped on driver detach. For | ||
22 | example, a plain SFF ATA controller (that is, good old PCI IDE) in | ||
23 | native mode makes use of 5 PCI BARs and all of them should be | ||
24 | maintained. | ||
25 | |||
26 | As with many other device drivers, libata low level drivers have | ||
27 | sufficient bugs in ->remove and ->probe failure path. Well, yes, | ||
28 | that's probably because libata low level driver developers are lazy | ||
29 | bunch, but aren't all low level driver developers? After spending a | ||
30 | day fiddling with braindamaged hardware with no document or | ||
31 | braindamaged document, if it's finally working, well, it's working. | ||
32 | |||
33 | For one reason or another, low level drivers don't receive as much | ||
34 | attention or testing as core code, and bugs on driver detach or | ||
35 | initilaization failure doesn't happen often enough to be noticeable. | ||
36 | Init failure path is worse because it's much less travelled while | ||
37 | needs to handle multiple entry points. | ||
38 | |||
39 | So, many low level drivers end up leaking resources on driver detach | ||
40 | and having half broken failure path implementation in ->probe() which | ||
41 | would leak resources or even cause oops when failure occurs. iomap | ||
42 | adds more to this mix. So do msi and msix. | ||
43 | |||
44 | |||
45 | 2. Devres | ||
46 | --------- | ||
47 | |||
48 | devres is basically linked list of arbitrarily sized memory areas | ||
49 | associated with a struct device. Each devres entry is associated with | ||
50 | a release function. A devres can be released in several ways. No | ||
51 | matter what, all devres entries are released on driver detach. On | ||
52 | release, the associated release function is invoked and then the | ||
53 | devres entry is freed. | ||
54 | |||
55 | Managed interface is created for resources commonly used by device | ||
56 | drivers using devres. For example, coherent DMA memory is acquired | ||
57 | using dma_alloc_coherent(). The managed version is called | ||
58 | dmam_alloc_coherent(). It is identical to dma_alloc_coherent() except | ||
59 | for the DMA memory allocated using it is managed and will be | ||
60 | automatically released on driver detach. Implementation looks like | ||
61 | the following. | ||
62 | |||
63 | struct dma_devres { | ||
64 | size_t size; | ||
65 | void *vaddr; | ||
66 | dma_addr_t dma_handle; | ||
67 | }; | ||
68 | |||
69 | static void dmam_coherent_release(struct device *dev, void *res) | ||
70 | { | ||
71 | struct dma_devres *this = res; | ||
72 | |||
73 | dma_free_coherent(dev, this->size, this->vaddr, this->dma_handle); | ||
74 | } | ||
75 | |||
76 | dmam_alloc_coherent(dev, size, dma_handle, gfp) | ||
77 | { | ||
78 | struct dma_devres *dr; | ||
79 | void *vaddr; | ||
80 | |||
81 | dr = devres_alloc(dmam_coherent_release, sizeof(*dr), gfp); | ||
82 | ... | ||
83 | |||
84 | /* alloc DMA memory as usual */ | ||
85 | vaddr = dma_alloc_coherent(...); | ||
86 | ... | ||
87 | |||
88 | /* record size, vaddr, dma_handle in dr */ | ||
89 | dr->vaddr = vaddr; | ||
90 | ... | ||
91 | |||
92 | devres_add(dev, dr); | ||
93 | |||
94 | return vaddr; | ||
95 | } | ||
96 | |||
97 | If a driver uses dmam_alloc_coherent(), the area is guaranteed to be | ||
98 | freed whether initialization fails half-way or the device gets | ||
99 | detached. If most resources are acquired using managed interface, a | ||
100 | driver can have much simpler init and exit code. Init path basically | ||
101 | looks like the following. | ||
102 | |||
103 | my_init_one() | ||
104 | { | ||
105 | struct mydev *d; | ||
106 | |||
107 | d = devm_kzalloc(dev, sizeof(*d), GFP_KERNEL); | ||
108 | if (!d) | ||
109 | return -ENOMEM; | ||
110 | |||
111 | d->ring = dmam_alloc_coherent(...); | ||
112 | if (!d->ring) | ||
113 | return -ENOMEM; | ||
114 | |||
115 | if (check something) | ||
116 | return -EINVAL; | ||
117 | ... | ||
118 | |||
119 | return register_to_upper_layer(d); | ||
120 | } | ||
121 | |||
122 | And exit path, | ||
123 | |||
124 | my_remove_one() | ||
125 | { | ||
126 | unregister_from_upper_layer(d); | ||
127 | shutdown_my_hardware(); | ||
128 | } | ||
129 | |||
130 | As shown above, low level drivers can be simplified a lot by using | ||
131 | devres. Complexity is shifted from less maintained low level drivers | ||
132 | to better maintained higher layer. Also, as init failure path is | ||
133 | shared with exit path, both can get more testing. | ||
134 | |||
135 | |||
136 | 3. Devres group | ||
137 | --------------- | ||
138 | |||
139 | Devres entries can be grouped using devres group. When a group is | ||
140 | released, all contained normal devres entries and properly nested | ||
141 | groups are released. One usage is to rollback series of acquired | ||
142 | resources on failure. For example, | ||
143 | |||
144 | if (!devres_open_group(dev, NULL, GFP_KERNEL)) | ||
145 | return -ENOMEM; | ||
146 | |||
147 | acquire A; | ||
148 | if (failed) | ||
149 | goto err; | ||
150 | |||
151 | acquire B; | ||
152 | if (failed) | ||
153 | goto err; | ||
154 | ... | ||
155 | |||
156 | devres_remove_group(dev, NULL); | ||
157 | return 0; | ||
158 | |||
159 | err: | ||
160 | devres_release_group(dev, NULL); | ||
161 | return err_code; | ||
162 | |||
163 | As resource acquision failure usually means probe failure, constructs | ||
164 | like above are usually useful in midlayer driver (e.g. libata core | ||
165 | layer) where interface function shouldn't have side effect on failure. | ||
166 | For LLDs, just returning error code suffices in most cases. | ||
167 | |||
168 | Each group is identified by void *id. It can either be explicitly | ||
169 | specified by @id argument to devres_open_group() or automatically | ||
170 | created by passing NULL as @id as in the above example. In both | ||
171 | cases, devres_open_group() returns the group's id. The returned id | ||
172 | can be passed to other devres functions to select the target group. | ||
173 | If NULL is given to those functions, the latest open group is | ||
174 | selected. | ||
175 | |||
176 | For example, you can do something like the following. | ||
177 | |||
178 | int my_midlayer_create_something() | ||
179 | { | ||
180 | if (!devres_open_group(dev, my_midlayer_create_something, GFP_KERNEL)) | ||
181 | return -ENOMEM; | ||
182 | |||
183 | ... | ||
184 | |||
185 | devres_close_group(dev, my_midlayer_something); | ||
186 | return 0; | ||
187 | } | ||
188 | |||
189 | void my_midlayer_destroy_something() | ||
190 | { | ||
191 | devres_release_group(dev, my_midlayer_create_soemthing); | ||
192 | } | ||
193 | |||
194 | |||
195 | 4. Details | ||
196 | ---------- | ||
197 | |||
198 | Lifetime of a devres entry begins on devres allocation and finishes | ||
199 | when it is released or destroyed (removed and freed) - no reference | ||
200 | counting. | ||
201 | |||
202 | devres core guarantees atomicity to all basic devres operations and | ||
203 | has support for single-instance devres types (atomic | ||
204 | lookup-and-add-if-not-found). Other than that, synchronizing | ||
205 | concurrent accesses to allocated devres data is caller's | ||
206 | responsibility. This is usually non-issue because bus ops and | ||
207 | resource allocations already do the job. | ||
208 | |||
209 | For an example of single-instance devres type, read pcim_iomap_table() | ||
210 | in lib/iomap.c. | ||
211 | |||
212 | All devres interface functions can be called without context if the | ||
213 | right gfp mask is given. | ||
214 | |||
215 | |||
216 | 5. Overhead | ||
217 | ----------- | ||
218 | |||
219 | Each devres bookkeeping info is allocated together with requested data | ||
220 | area. With debug option turned off, bookkeeping info occupies 16 | ||
221 | bytes on 32bit machines and 24 bytes on 64bit (three pointers rounded | ||
222 | up to ull alignment). If singly linked list is used, it can be | ||
223 | reduced to two pointers (8 bytes on 32bit, 16 bytes on 64bit). | ||
224 | |||
225 | Each devres group occupies 8 pointers. It can be reduced to 6 if | ||
226 | singly linked list is used. | ||
227 | |||
228 | Memory space overhead on ahci controller with two ports is between 300 | ||
229 | and 400 bytes on 32bit machine after naive conversion (we can | ||
230 | certainly invest a bit more effort into libata core layer). | ||
231 | |||
232 | |||
233 | 6. List of managed interfaces | ||
234 | ----------------------------- | ||
235 | |||
236 | IO region | ||
237 | devm_request_region() | ||
238 | devm_request_mem_region() | ||
239 | devm_release_region() | ||
240 | devm_release_mem_region() | ||
241 | |||
242 | IRQ | ||
243 | devm_request_irq() | ||
244 | devm_free_irq() | ||
245 | |||
246 | DMA | ||
247 | dmam_alloc_coherent() | ||
248 | dmam_free_coherent() | ||
249 | dmam_alloc_noncoherent() | ||
250 | dmam_free_noncoherent() | ||
251 | dmam_declare_coherent_memory() | ||
252 | dmam_pool_create() | ||
253 | dmam_pool_destroy() | ||
254 | |||
255 | PCI | ||
256 | pcim_enable_device() : after success, all PCI ops become managed | ||
257 | pcim_pin_device() : keep PCI device enabled after release | ||
258 | |||
259 | IOMAP | ||
260 | devm_ioport_map() | ||
261 | devm_ioport_unmap() | ||
262 | devm_ioremap() | ||
263 | devm_ioremap_nocache() | ||
264 | devm_iounmap() | ||
265 | pcim_iomap() | ||
266 | pcim_iounmap() | ||
267 | pcim_iomap_table() : array of mapped addresses indexed by BAR | ||
268 | pcim_iomap_regions() : do request_region() and iomap() on multiple BARs | ||
diff --git a/Documentation/drivers/edac/edac.txt b/Documentation/drivers/edac/edac.txt index 7b3d969d2964..3c5a9e4297b4 100644 --- a/Documentation/drivers/edac/edac.txt +++ b/Documentation/drivers/edac/edac.txt | |||
@@ -339,7 +339,21 @@ Device Symlink: | |||
339 | 339 | ||
340 | 'device' | 340 | 'device' |
341 | 341 | ||
342 | Symlink to the memory controller device | 342 | Symlink to the memory controller device. |
343 | |||
344 | Sdram memory scrubbing rate: | ||
345 | |||
346 | 'sdram_scrub_rate' | ||
347 | |||
348 | Read/Write attribute file that controls memory scrubbing. The scrubbing | ||
349 | rate is set by writing a minimum bandwith in bytes/sec to the attribute | ||
350 | file. The rate will be translated to an internal value that gives at | ||
351 | least the specified rate. | ||
352 | |||
353 | Reading the file will return the actual scrubbing rate employed. | ||
354 | |||
355 | If configuration fails or memory scrubbing is not implemented, the value | ||
356 | of the attribute file will be -1. | ||
343 | 357 | ||
344 | 358 | ||
345 | 359 | ||
diff --git a/Documentation/fb/s3fb.txt b/Documentation/fb/s3fb.txt new file mode 100644 index 000000000000..8a04c0da0c91 --- /dev/null +++ b/Documentation/fb/s3fb.txt | |||
@@ -0,0 +1,78 @@ | |||
1 | |||
2 | s3fb - fbdev driver for S3 Trio/Virge chips | ||
3 | =========================================== | ||
4 | |||
5 | |||
6 | Supported Hardware | ||
7 | ================== | ||
8 | |||
9 | S3 Trio32 | ||
10 | S3 Trio64 (and variants V+, UV+, V2/DX, V2/GX) | ||
11 | S3 Virge (and variants VX, DX, GX and GX2+) | ||
12 | S3 Plato/PX (completely untested) | ||
13 | S3 Aurora64V+ (completely untested) | ||
14 | |||
15 | - only PCI bus supported | ||
16 | - only BIOS initialized VGA devices supported | ||
17 | - probably not working on big endian | ||
18 | |||
19 | I tested s3fb on Trio64 (plain, V+ and V2/DX) and Virge (plain, VX, DX), | ||
20 | all on i386. | ||
21 | |||
22 | |||
23 | Supported Features | ||
24 | ================== | ||
25 | |||
26 | * 4 bpp pseudocolor modes (with 18bit palette, two variants) | ||
27 | * 8 bpp pseudocolor mode (with 18bit palette) | ||
28 | * 16 bpp truecolor modes (RGB 555 and RGB 565) | ||
29 | * 24 bpp truecolor mode (RGB 888) on (only on Virge VX) | ||
30 | * 32 bpp truecolor mode (RGB 888) on (not on Virge VX) | ||
31 | * text mode (activated by bpp = 0) | ||
32 | * interlaced mode variant (not available in text mode) | ||
33 | * doublescan mode variant (not available in text mode) | ||
34 | * panning in both directions | ||
35 | * suspend/resume support | ||
36 | * DPMS support | ||
37 | |||
38 | Text mode is supported even in higher resolutions, but there is limitation | ||
39 | to lower pixclocks (maximum between 50-60 MHz, depending on specific hardware). | ||
40 | This limitation is not enforced by driver. Text mode supports 8bit wide fonts | ||
41 | only (hardware limitation) and 16bit tall fonts (driver limitation). | ||
42 | |||
43 | There are two 4 bpp modes. First mode (selected if nonstd == 0) is mode with | ||
44 | packed pixels, high nibble first. Second mode (selected if nonstd == 1) is mode | ||
45 | with interleaved planes (1 byte interleave), MSB first. Both modes support | ||
46 | 8bit wide fonts only (driver limitation). | ||
47 | |||
48 | Suspend/resume works on systems that initialize video card during resume and | ||
49 | if device is active (for example used by fbcon). | ||
50 | |||
51 | |||
52 | Missing Features | ||
53 | ================ | ||
54 | (alias TODO list) | ||
55 | |||
56 | * secondary (not initialized by BIOS) device support | ||
57 | * big endian support | ||
58 | * Zorro bus support | ||
59 | * MMIO support | ||
60 | * 24 bpp mode support on more cards | ||
61 | * support for fontwidths != 8 in 4 bpp modes | ||
62 | * support for fontheight != 16 in text mode | ||
63 | * composite and external sync (is anyone able to test this?) | ||
64 | * hardware cursor | ||
65 | * video overlay support | ||
66 | * vsync synchronization | ||
67 | * feature connector support | ||
68 | * acceleration support (8514-like 2D, Virge 3D, busmaster transfers) | ||
69 | * better values for some magic registers (performance issues) | ||
70 | |||
71 | |||
72 | Known bugs | ||
73 | ========== | ||
74 | |||
75 | * cursor disable in text mode doesn't work | ||
76 | |||
77 | -- | ||
78 | Ondrej Zajicek <santiago@crfreenet.org> | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index fa844fd7bded..c585aa8d62b4 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -215,6 +215,13 @@ Who: Jean Delvare <khali@linux-fr.org>, | |||
215 | 215 | ||
216 | --------------------------- | 216 | --------------------------- |
217 | 217 | ||
218 | What: drivers depending on OBSOLETE_OSS | ||
219 | When: options in 2.6.22, code in 2.6.24 | ||
220 | Why: OSS drivers with ALSA replacements | ||
221 | Who: Adrian Bunk <bunk@stusta.de> | ||
222 | |||
223 | --------------------------- | ||
224 | |||
218 | What: IPv4 only connection tracking/NAT/helpers | 225 | What: IPv4 only connection tracking/NAT/helpers |
219 | When: 2.6.22 | 226 | When: 2.6.22 |
220 | Why: The new layer 3 independant connection tracking replaces the old | 227 | Why: The new layer 3 independant connection tracking replaces the old |
@@ -312,3 +319,18 @@ Why: In kernel tree version of driver is unmaintained. Sk98lin driver | |||
312 | replaced by the skge driver. | 319 | replaced by the skge driver. |
313 | Who: Stephen Hemminger <shemminger@osdl.org> | 320 | Who: Stephen Hemminger <shemminger@osdl.org> |
314 | 321 | ||
322 | --------------------------- | ||
323 | |||
324 | What: Compaq touchscreen device emulation | ||
325 | When: Oct 2007 | ||
326 | Files: drivers/input/tsdev.c | ||
327 | Why: The code says it was obsolete when it was written in 2001. | ||
328 | tslib is a userspace library which does anything tsdev can do and | ||
329 | much more besides in userspace where this code belongs. There is no | ||
330 | longer any need for tsdev and applications should have converted to | ||
331 | use tslib by now. | ||
332 | The name "tsdev" is also extremely confusing and lots of people have | ||
333 | it loaded when they don't need/use it. | ||
334 | Who: Richard Purdie <rpurdie@rpsys.net> | ||
335 | |||
336 | --------------------------- | ||
diff --git a/Documentation/filesystems/relay.txt b/Documentation/filesystems/relay.txt index d6788dae0349..7fbb6ffe5769 100644 --- a/Documentation/filesystems/relay.txt +++ b/Documentation/filesystems/relay.txt | |||
@@ -157,7 +157,7 @@ TBD(curr. line MT:/API/) | |||
157 | channel management functions: | 157 | channel management functions: |
158 | 158 | ||
159 | relay_open(base_filename, parent, subbuf_size, n_subbufs, | 159 | relay_open(base_filename, parent, subbuf_size, n_subbufs, |
160 | callbacks) | 160 | callbacks, private_data) |
161 | relay_close(chan) | 161 | relay_close(chan) |
162 | relay_flush(chan) | 162 | relay_flush(chan) |
163 | relay_reset(chan) | 163 | relay_reset(chan) |
@@ -251,7 +251,7 @@ static struct rchan_callbacks relay_callbacks = | |||
251 | 251 | ||
252 | And an example relay_open() invocation using them: | 252 | And an example relay_open() invocation using them: |
253 | 253 | ||
254 | chan = relay_open("cpu", NULL, SUBBUF_SIZE, N_SUBBUFS, &relay_callbacks); | 254 | chan = relay_open("cpu", NULL, SUBBUF_SIZE, N_SUBBUFS, &relay_callbacks, NULL); |
255 | 255 | ||
256 | If the create_buf_file() callback fails, or isn't defined, channel | 256 | If the create_buf_file() callback fails, or isn't defined, channel |
257 | creation and thus relay_open() will fail. | 257 | creation and thus relay_open() will fail. |
@@ -289,6 +289,11 @@ they use the proper locking for such a buffer, either by wrapping | |||
289 | writes in a spinlock, or by copying a write function from relay.h and | 289 | writes in a spinlock, or by copying a write function from relay.h and |
290 | creating a local version that internally does the proper locking. | 290 | creating a local version that internally does the proper locking. |
291 | 291 | ||
292 | The private_data passed into relay_open() allows clients to associate | ||
293 | user-defined data with a channel, and is immediately available | ||
294 | (including in create_buf_file()) via chan->private_data or | ||
295 | buf->chan->private_data. | ||
296 | |||
292 | Channel 'modes' | 297 | Channel 'modes' |
293 | --------------- | 298 | --------------- |
294 | 299 | ||
diff --git a/Documentation/filesystems/ufs.txt b/Documentation/filesystems/ufs.txt index 2b5a56a6a558..7a602adeca2b 100644 --- a/Documentation/filesystems/ufs.txt +++ b/Documentation/filesystems/ufs.txt | |||
@@ -21,7 +21,7 @@ ufstype=type_of_ufs | |||
21 | supported as read-write | 21 | supported as read-write |
22 | 22 | ||
23 | ufs2 used in FreeBSD 5.x | 23 | ufs2 used in FreeBSD 5.x |
24 | supported as read-only | 24 | supported as read-write |
25 | 25 | ||
26 | 5xbsd synonym for ufs2 | 26 | 5xbsd synonym for ufs2 |
27 | 27 | ||
@@ -50,12 +50,11 @@ ufstype=type_of_ufs | |||
50 | POSSIBLE PROBLEMS | 50 | POSSIBLE PROBLEMS |
51 | ================= | 51 | ================= |
52 | 52 | ||
53 | There is still bug in reallocation of fragment, in file fs/ufs/balloc.c, | 53 | See next section, if you have any. |
54 | line 364. But it seems working on current buffer cache configuration. | ||
55 | 54 | ||
56 | 55 | ||
57 | BUG REPORTS | 56 | BUG REPORTS |
58 | =========== | 57 | =========== |
59 | 58 | ||
60 | Any ufs bug report you can send to daniel.pirkl@email.cz (do not send | 59 | Any ufs bug report you can send to daniel.pirkl@email.cz or |
61 | partition tables bug reports.) | 60 | to dushistov@mail.ru (do not send partition tables bug reports). |
diff --git a/Documentation/gpio.txt b/Documentation/gpio.txt new file mode 100644 index 000000000000..09dd510c4a5f --- /dev/null +++ b/Documentation/gpio.txt | |||
@@ -0,0 +1,271 @@ | |||
1 | GPIO Interfaces | ||
2 | |||
3 | This provides an overview of GPIO access conventions on Linux. | ||
4 | |||
5 | |||
6 | What is a GPIO? | ||
7 | =============== | ||
8 | A "General Purpose Input/Output" (GPIO) is a flexible software-controlled | ||
9 | digital signal. They are provided from many kinds of chip, and are familiar | ||
10 | to Linux developers working with embedded and custom hardware. Each GPIO | ||
11 | represents a bit connected to a particular pin, or "ball" on Ball Grid Array | ||
12 | (BGA) packages. Board schematics show which external hardware connects to | ||
13 | which GPIOs. Drivers can be written generically, so that board setup code | ||
14 | passes such pin configuration data to drivers. | ||
15 | |||
16 | System-on-Chip (SOC) processors heavily rely on GPIOs. In some cases, every | ||
17 | non-dedicated pin can be configured as a GPIO; and most chips have at least | ||
18 | several dozen of them. Programmable logic devices (like FPGAs) can easily | ||
19 | provide GPIOs; multifunction chips like power managers, and audio codecs | ||
20 | often have a few such pins to help with pin scarcity on SOCs; and there are | ||
21 | also "GPIO Expander" chips that connect using the I2C or SPI serial busses. | ||
22 | Most PC southbridges have a few dozen GPIO-capable pins (with only the BIOS | ||
23 | firmware knowing how they're used). | ||
24 | |||
25 | The exact capabilities of GPIOs vary between systems. Common options: | ||
26 | |||
27 | - Output values are writable (high=1, low=0). Some chips also have | ||
28 | options about how that value is driven, so that for example only one | ||
29 | value might be driven ... supporting "wire-OR" and similar schemes | ||
30 | for the other value. | ||
31 | |||
32 | - Input values are likewise readable (1, 0). Some chips support readback | ||
33 | of pins configured as "output", which is very useful in such "wire-OR" | ||
34 | cases (to support bidirectional signaling). GPIO controllers may have | ||
35 | input de-glitch logic, sometimes with software controls. | ||
36 | |||
37 | - Inputs can often be used as IRQ signals, often edge triggered but | ||
38 | sometimes level triggered. Such IRQs may be configurable as system | ||
39 | wakeup events, to wake the system from a low power state. | ||
40 | |||
41 | - Usually a GPIO will be configurable as either input or output, as needed | ||
42 | by different product boards; single direction ones exist too. | ||
43 | |||
44 | - Most GPIOs can be accessed while holding spinlocks, but those accessed | ||
45 | through a serial bus normally can't. Some systems support both types. | ||
46 | |||
47 | On a given board each GPIO is used for one specific purpose like monitoring | ||
48 | MMC/SD card insertion/removal, detecting card writeprotect status, driving | ||
49 | a LED, configuring a transceiver, bitbanging a serial bus, poking a hardware | ||
50 | watchdog, sensing a switch, and so on. | ||
51 | |||
52 | |||
53 | GPIO conventions | ||
54 | ================ | ||
55 | Note that this is called a "convention" because you don't need to do it this | ||
56 | way, and it's no crime if you don't. There **are** cases where portability | ||
57 | is not the main issue; GPIOs are often used for the kind of board-specific | ||
58 | glue logic that may even change between board revisions, and can't ever be | ||
59 | used on a board that's wired differently. Only least-common-denominator | ||
60 | functionality can be very portable. Other features are platform-specific, | ||
61 | and that can be critical for glue logic. | ||
62 | |||
63 | Plus, this doesn't define an implementation framework, just an interface. | ||
64 | One platform might implement it as simple inline functions accessing chip | ||
65 | registers; another might implement it by delegating through abstractions | ||
66 | used for several very different kinds of GPIO controller. | ||
67 | |||
68 | That said, if the convention is supported on their platform, drivers should | ||
69 | use it when possible: | ||
70 | |||
71 | #include <asm/gpio.h> | ||
72 | |||
73 | If you stick to this convention then it'll be easier for other developers to | ||
74 | see what your code is doing, and help maintain it. | ||
75 | |||
76 | |||
77 | Identifying GPIOs | ||
78 | ----------------- | ||
79 | GPIOs are identified by unsigned integers in the range 0..MAX_INT. That | ||
80 | reserves "negative" numbers for other purposes like marking signals as | ||
81 | "not available on this board", or indicating faults. | ||
82 | |||
83 | Platforms define how they use those integers, and usually #define symbols | ||
84 | for the GPIO lines so that board-specific setup code directly corresponds | ||
85 | to the relevant schematics. In contrast, drivers should only use GPIO | ||
86 | numbers passed to them from that setup code, using platform_data to hold | ||
87 | board-specific pin configuration data (along with other board specific | ||
88 | data they need). That avoids portability problems. | ||
89 | |||
90 | So for example one platform uses numbers 32-159 for GPIOs; while another | ||
91 | uses numbers 0..63 with one set of GPIO controllers, 64-79 with another | ||
92 | type of GPIO controller, and on one particular board 80-95 with an FPGA. | ||
93 | The numbers need not be contiguous; either of those platforms could also | ||
94 | use numbers 2000-2063 to identify GPIOs in a bank of I2C GPIO expanders. | ||
95 | |||
96 | Whether a platform supports multiple GPIO controllers is currently a | ||
97 | platform-specific implementation issue. | ||
98 | |||
99 | |||
100 | Using GPIOs | ||
101 | ----------- | ||
102 | One of the first things to do with a GPIO, often in board setup code when | ||
103 | setting up a platform_device using the GPIO, is mark its direction: | ||
104 | |||
105 | /* set as input or output, returning 0 or negative errno */ | ||
106 | int gpio_direction_input(unsigned gpio); | ||
107 | int gpio_direction_output(unsigned gpio); | ||
108 | |||
109 | The return value is zero for success, else a negative errno. It should | ||
110 | be checked, since the get/set calls don't have error returns and since | ||
111 | misconfiguration is possible. (These calls could sleep.) | ||
112 | |||
113 | Setting the direction can fail if the GPIO number is invalid, or when | ||
114 | that particular GPIO can't be used in that mode. It's generally a bad | ||
115 | idea to rely on boot firmware to have set the direction correctly, since | ||
116 | it probably wasn't validated to do more than boot Linux. (Similarly, | ||
117 | that board setup code probably needs to multiplex that pin as a GPIO, | ||
118 | and configure pullups/pulldowns appropriately.) | ||
119 | |||
120 | |||
121 | Spinlock-Safe GPIO access | ||
122 | ------------------------- | ||
123 | Most GPIO controllers can be accessed with memory read/write instructions. | ||
124 | That doesn't need to sleep, and can safely be done from inside IRQ handlers. | ||
125 | |||
126 | Use these calls to access such GPIOs: | ||
127 | |||
128 | /* GPIO INPUT: return zero or nonzero */ | ||
129 | int gpio_get_value(unsigned gpio); | ||
130 | |||
131 | /* GPIO OUTPUT */ | ||
132 | void gpio_set_value(unsigned gpio, int value); | ||
133 | |||
134 | The values are boolean, zero for low, nonzero for high. When reading the | ||
135 | value of an output pin, the value returned should be what's seen on the | ||
136 | pin ... that won't always match the specified output value, because of | ||
137 | issues including wire-OR and output latencies. | ||
138 | |||
139 | The get/set calls have no error returns because "invalid GPIO" should have | ||
140 | been reported earlier in gpio_set_direction(). However, note that not all | ||
141 | platforms can read the value of output pins; those that can't should always | ||
142 | return zero. Also, these calls will be ignored for GPIOs that can't safely | ||
143 | be accessed wihtout sleeping (see below). | ||
144 | |||
145 | Platform-specific implementations are encouraged to optimise the two | ||
146 | calls to access the GPIO value in cases where the GPIO number (and for | ||
147 | output, value) are constant. It's normal for them to need only a couple | ||
148 | of instructions in such cases (reading or writing a hardware register), | ||
149 | and not to need spinlocks. Such optimized calls can make bitbanging | ||
150 | applications a lot more efficient (in both space and time) than spending | ||
151 | dozens of instructions on subroutine calls. | ||
152 | |||
153 | |||
154 | GPIO access that may sleep | ||
155 | -------------------------- | ||
156 | Some GPIO controllers must be accessed using message based busses like I2C | ||
157 | or SPI. Commands to read or write those GPIO values require waiting to | ||
158 | get to the head of a queue to transmit a command and get its response. | ||
159 | This requires sleeping, which can't be done from inside IRQ handlers. | ||
160 | |||
161 | Platforms that support this type of GPIO distinguish them from other GPIOs | ||
162 | by returning nonzero from this call: | ||
163 | |||
164 | int gpio_cansleep(unsigned gpio); | ||
165 | |||
166 | To access such GPIOs, a different set of accessors is defined: | ||
167 | |||
168 | /* GPIO INPUT: return zero or nonzero, might sleep */ | ||
169 | int gpio_get_value_cansleep(unsigned gpio); | ||
170 | |||
171 | /* GPIO OUTPUT, might sleep */ | ||
172 | void gpio_set_value_cansleep(unsigned gpio, int value); | ||
173 | |||
174 | Other than the fact that these calls might sleep, and will not be ignored | ||
175 | for GPIOs that can't be accessed from IRQ handlers, these calls act the | ||
176 | same as the spinlock-safe calls. | ||
177 | |||
178 | |||
179 | Claiming and Releasing GPIOs (OPTIONAL) | ||
180 | --------------------------------------- | ||
181 | To help catch system configuration errors, two calls are defined. | ||
182 | However, many platforms don't currently support this mechanism. | ||
183 | |||
184 | /* request GPIO, returning 0 or negative errno. | ||
185 | * non-null labels may be useful for diagnostics. | ||
186 | */ | ||
187 | int gpio_request(unsigned gpio, const char *label); | ||
188 | |||
189 | /* release previously-claimed GPIO */ | ||
190 | void gpio_free(unsigned gpio); | ||
191 | |||
192 | Passing invalid GPIO numbers to gpio_request() will fail, as will requesting | ||
193 | GPIOs that have already been claimed with that call. The return value of | ||
194 | gpio_request() must be checked. (These calls could sleep.) | ||
195 | |||
196 | These calls serve two basic purposes. One is marking the signals which | ||
197 | are actually in use as GPIOs, for better diagnostics; systems may have | ||
198 | several hundred potential GPIOs, but often only a dozen are used on any | ||
199 | given board. Another is to catch conflicts between drivers, reporting | ||
200 | errors when drivers wrongly think they have exclusive use of that signal. | ||
201 | |||
202 | These two calls are optional because not not all current Linux platforms | ||
203 | offer such functionality in their GPIO support; a valid implementation | ||
204 | could return success for all gpio_request() calls. Unlike the other calls, | ||
205 | the state they represent doesn't normally match anything from a hardware | ||
206 | register; it's just a software bitmap which clearly is not necessary for | ||
207 | correct operation of hardware or (bug free) drivers. | ||
208 | |||
209 | Note that requesting a GPIO does NOT cause it to be configured in any | ||
210 | way; it just marks that GPIO as in use. Separate code must handle any | ||
211 | pin setup (e.g. controlling which pin the GPIO uses, pullup/pulldown). | ||
212 | |||
213 | |||
214 | GPIOs mapped to IRQs | ||
215 | -------------------- | ||
216 | GPIO numbers are unsigned integers; so are IRQ numbers. These make up | ||
217 | two logically distinct namespaces (GPIO 0 need not use IRQ 0). You can | ||
218 | map between them using calls like: | ||
219 | |||
220 | /* map GPIO numbers to IRQ numbers */ | ||
221 | int gpio_to_irq(unsigned gpio); | ||
222 | |||
223 | /* map IRQ numbers to GPIO numbers */ | ||
224 | int irq_to_gpio(unsigned irq); | ||
225 | |||
226 | Those return either the corresponding number in the other namespace, or | ||
227 | else a negative errno code if the mapping can't be done. (For example, | ||
228 | some GPIOs can't used as IRQs.) It is an unchecked error to use a GPIO | ||
229 | number that hasn't been marked as an input using gpio_set_direction(), or | ||
230 | to use an IRQ number that didn't originally come from gpio_to_irq(). | ||
231 | |||
232 | These two mapping calls are expected to cost on the order of a single | ||
233 | addition or subtraction. They're not allowed to sleep. | ||
234 | |||
235 | Non-error values returned from gpio_to_irq() can be passed to request_irq() | ||
236 | or free_irq(). They will often be stored into IRQ resources for platform | ||
237 | devices, by the board-specific initialization code. Note that IRQ trigger | ||
238 | options are part of the IRQ interface, e.g. IRQF_TRIGGER_FALLING, as are | ||
239 | system wakeup capabilities. | ||
240 | |||
241 | Non-error values returned from irq_to_gpio() would most commonly be used | ||
242 | with gpio_get_value(). | ||
243 | |||
244 | |||
245 | |||
246 | What do these conventions omit? | ||
247 | =============================== | ||
248 | One of the biggest things these conventions omit is pin multiplexing, since | ||
249 | this is highly chip-specific and nonportable. One platform might not need | ||
250 | explicit multiplexing; another might have just two options for use of any | ||
251 | given pin; another might have eight options per pin; another might be able | ||
252 | to route a given GPIO to any one of several pins. (Yes, those examples all | ||
253 | come from systems that run Linux today.) | ||
254 | |||
255 | Related to multiplexing is configuration and enabling of the pullups or | ||
256 | pulldowns integrated on some platforms. Not all platforms support them, | ||
257 | or support them in the same way; and any given board might use external | ||
258 | pullups (or pulldowns) so that the on-chip ones should not be used. | ||
259 | |||
260 | There are other system-specific mechanisms that are not specified here, | ||
261 | like the aforementioned options for input de-glitching and wire-OR output. | ||
262 | Hardware may support reading or writing GPIOs in gangs, but that's usually | ||
263 | configuration dependednt: for GPIOs sharing the same bank. (GPIOs are | ||
264 | commonly grouped in banks of 16 or 32, with a given SOC having several such | ||
265 | banks.) Code relying on such mechanisms will necessarily be nonportable. | ||
266 | |||
267 | Dynamic definition of GPIOs is not currently supported; for example, as | ||
268 | a side effect of configuring an add-on board with some GPIO expanders. | ||
269 | |||
270 | These calls are purely for kernel space, but a userspace API could be built | ||
271 | on top of it. | ||
diff --git a/Documentation/ioctl-number.txt b/Documentation/ioctl-number.txt index 5a8bd5bd88ef..8f750c0efed5 100644 --- a/Documentation/ioctl-number.txt +++ b/Documentation/ioctl-number.txt | |||
@@ -94,8 +94,7 @@ Code Seq# Include File Comments | |||
94 | 'L' 00-1F linux/loop.h | 94 | 'L' 00-1F linux/loop.h |
95 | 'L' E0-FF linux/ppdd.h encrypted disk device driver | 95 | 'L' E0-FF linux/ppdd.h encrypted disk device driver |
96 | <http://linux01.gwdg.de/~alatham/ppdd.html> | 96 | <http://linux01.gwdg.de/~alatham/ppdd.html> |
97 | 'M' all linux/soundcard.h conflict! | 97 | 'M' all linux/soundcard.h |
98 | 'M' 00-1F linux/isicom.h conflict! | ||
99 | 'N' 00-1F drivers/usb/scanner.h | 98 | 'N' 00-1F drivers/usb/scanner.h |
100 | 'P' all linux/soundcard.h | 99 | 'P' all linux/soundcard.h |
101 | 'Q' all linux/soundcard.h | 100 | 'Q' all linux/soundcard.h |
diff --git a/Documentation/isdn/README.gigaset b/Documentation/isdn/README.gigaset index fa0d4cca964a..55b2852904a4 100644 --- a/Documentation/isdn/README.gigaset +++ b/Documentation/isdn/README.gigaset | |||
@@ -8,29 +8,33 @@ GigaSet 307x Device Driver | |||
8 | This release supports the connection of the Gigaset 307x/417x family of | 8 | This release supports the connection of the Gigaset 307x/417x family of |
9 | ISDN DECT bases via Gigaset M101 Data, Gigaset M105 Data or direct USB | 9 | ISDN DECT bases via Gigaset M101 Data, Gigaset M105 Data or direct USB |
10 | connection. The following devices are reported to be compatible: | 10 | connection. The following devices are reported to be compatible: |
11 | 307x/417x: | 11 | |
12 | Gigaset SX255isdn | 12 | Bases: |
13 | Gigaset SX353isdn | 13 | Siemens Gigaset 3070/3075 isdn |
14 | Sinus 45 [AB] isdn (Deutsche Telekom) | 14 | Siemens Gigaset 4170/4175 isdn |
15 | Sinus 721X/XA | 15 | Siemens Gigaset SX205/255 |
16 | Siemens Gigaset SX353 | ||
17 | T-Com Sinus 45 [AB] isdn | ||
18 | T-Com Sinus 721X[A] [SE] | ||
16 | Vox Chicago 390 ISDN (KPN Telecom) | 19 | Vox Chicago 390 ISDN (KPN Telecom) |
17 | M101: | 20 | |
18 | Sinus 45 Data 1 (Telekom) | 21 | RS232 data boxes: |
19 | M105: | 22 | Siemens Gigaset M101 Data |
20 | Gigaset USB Adapter DECT | 23 | T-Com Sinus 45 Data 1 |
21 | Sinus 45 Data 2 (Telekom) | 24 | |
22 | Sinus 721 data | 25 | USB data boxes: |
26 | Siemens Gigaset M105 Data | ||
27 | Siemens Gigaset USB Adapter DECT | ||
28 | T-Com Sinus 45 Data 2 | ||
29 | T-Com Sinus 721 data | ||
23 | Chicago 390 USB (KPN) | 30 | Chicago 390 USB (KPN) |
31 | |||
24 | See also http://www.erbze.info/sinus_gigaset.htm and | 32 | See also http://www.erbze.info/sinus_gigaset.htm and |
25 | http://gigaset307x.sourceforge.net/ | 33 | http://gigaset307x.sourceforge.net/ |
26 | 34 | ||
27 | We had also reports from users of Gigaset M105 who could use the drivers | 35 | We had also reports from users of Gigaset M105 who could use the drivers |
28 | with SX 100 and CX 100 ISDN bases (only in unimodem mode, see section 2.4.) | 36 | with SX 100 and CX 100 ISDN bases (only in unimodem mode, see section 2.4.) |
29 | If you have another device that works with our driver, please let us know. | 37 | If you have another device that works with our driver, please let us know. |
30 | For example, Gigaset SX205isdn/Sinus 721 X SE and Gigaset SX303isdn bases | ||
31 | are just versions without answering machine of models known to work, so | ||
32 | they should work just as well; but so far we are lacking positive reports | ||
33 | on these. | ||
34 | 38 | ||
35 | Chances of getting an USB device to work are good if the output of | 39 | Chances of getting an USB device to work are good if the output of |
36 | lsusb | 40 | lsusb |
@@ -60,14 +64,28 @@ GigaSet 307x Device Driver | |||
60 | To get the device working, you have to load the proper kernel module. You | 64 | To get the device working, you have to load the proper kernel module. You |
61 | can do this using | 65 | can do this using |
62 | modprobe modulename | 66 | modprobe modulename |
63 | where modulename is usb_gigaset (M105) or bas_gigaset (direct USB | 67 | where modulename is ser_gigaset (M101), usb_gigaset (M105), or |
64 | connection to the base). | 68 | bas_gigaset (direct USB connection to the base). |
69 | |||
70 | The module ser_gigaset provides a serial line discipline N_GIGASET_M101 | ||
71 | which drives the device through the regular serial line driver. To use it, | ||
72 | run the Gigaset M101 daemon "gigasetm101d" (also available from | ||
73 | http://sourceforge.net/projects/gigaset307x/) with the device file of the | ||
74 | RS232 port to the M101 as an argument, for example: | ||
75 | gigasetm101d /dev/ttyS1 | ||
76 | This will open the device file, set its line discipline to N_GIGASET_M101, | ||
77 | and then sleep in the background, keeping the device open so that the | ||
78 | line discipline remains active. To deactivate it, kill the daemon, for | ||
79 | example with | ||
80 | killall gigasetm101d | ||
81 | before disconnecting the device. | ||
65 | 82 | ||
66 | 2.2. Device nodes for user space programs | 83 | 2.2. Device nodes for user space programs |
67 | ------------------------------------ | 84 | ------------------------------------ |
68 | The device can be accessed from user space (eg. by the user space tools | 85 | The device can be accessed from user space (eg. by the user space tools |
69 | mentioned in 1.2.) through the device nodes: | 86 | mentioned in 1.2.) through the device nodes: |
70 | 87 | ||
88 | - /dev/ttyGS0 for M101 (RS232 data boxes) | ||
71 | - /dev/ttyGU0 for M105 (USB data boxes) | 89 | - /dev/ttyGU0 for M105 (USB data boxes) |
72 | - /dev/ttyGB0 for the base driver (direct USB connection) | 90 | - /dev/ttyGB0 for the base driver (direct USB connection) |
73 | 91 | ||
@@ -168,6 +186,19 @@ GigaSet 307x Device Driver | |||
168 | You can also use /sys/class/tty/ttyGxy/cidmode for changing the CID mode | 186 | You can also use /sys/class/tty/ttyGxy/cidmode for changing the CID mode |
169 | setting (ttyGxy is ttyGU0 or ttyGB0). | 187 | setting (ttyGxy is ttyGU0 or ttyGB0). |
170 | 188 | ||
189 | 2.6. M105 Undocumented USB Requests | ||
190 | ------------------------------ | ||
191 | |||
192 | The Gigaset M105 USB data box understands a couple of useful, but | ||
193 | undocumented USB commands. These requests are not used in normal | ||
194 | operation (for wireless access to the base), but are needed for access | ||
195 | to the M105's own configuration mode (registration to the base, baudrate | ||
196 | and line format settings, device status queries) via the gigacontr | ||
197 | utility. Their use is disabled in the driver by default for safety | ||
198 | reasons but can be enabled by setting the kernel configuration option | ||
199 | "Support for undocumented USB requests" (GIGASET_UNDOCREQ) to "Y" and | ||
200 | recompiling. | ||
201 | |||
171 | 202 | ||
172 | 3. Troubleshooting | 203 | 3. Troubleshooting |
173 | --------------- | 204 | --------------- |
diff --git a/Documentation/kdump/kdump.txt b/Documentation/kdump/kdump.txt index 073306818347..79775a4130b5 100644 --- a/Documentation/kdump/kdump.txt +++ b/Documentation/kdump/kdump.txt | |||
@@ -311,10 +311,10 @@ Following are the arch specific command line options to be used while | |||
311 | loading dump-capture kernel. | 311 | loading dump-capture kernel. |
312 | 312 | ||
313 | For i386, x86_64 and ia64: | 313 | For i386, x86_64 and ia64: |
314 | "init 1 irqpoll maxcpus=1" | 314 | "1 irqpoll maxcpus=1" |
315 | 315 | ||
316 | For ppc64: | 316 | For ppc64: |
317 | "init 1 maxcpus=1 noirqdistrib" | 317 | "1 maxcpus=1 noirqdistrib" |
318 | 318 | ||
319 | 319 | ||
320 | Notes on loading the dump-capture kernel: | 320 | Notes on loading the dump-capture kernel: |
@@ -332,8 +332,8 @@ Notes on loading the dump-capture kernel: | |||
332 | * You must specify <root-dev> in the format corresponding to the root | 332 | * You must specify <root-dev> in the format corresponding to the root |
333 | device name in the output of mount command. | 333 | device name in the output of mount command. |
334 | 334 | ||
335 | * "init 1" boots the dump-capture kernel into single-user mode without | 335 | * Boot parameter "1" boots the dump-capture kernel into single-user |
336 | networking. If you want networking, use "init 3." | 336 | mode without networking. If you want networking, use "3". |
337 | 337 | ||
338 | * We generally don' have to bring up a SMP kernel just to capture the | 338 | * We generally don' have to bring up a SMP kernel just to capture the |
339 | dump. Hence generally it is useful either to build a UP dump-capture | 339 | dump. Hence generally it is useful either to build a UP dump-capture |
diff --git a/Documentation/kernel-doc-nano-HOWTO.txt b/Documentation/kernel-doc-nano-HOWTO.txt index 284e7e198e93..2075c0658bf5 100644 --- a/Documentation/kernel-doc-nano-HOWTO.txt +++ b/Documentation/kernel-doc-nano-HOWTO.txt | |||
@@ -101,16 +101,20 @@ The format of the block comment is like this: | |||
101 | 101 | ||
102 | /** | 102 | /** |
103 | * function_name(:)? (- short description)? | 103 | * function_name(:)? (- short description)? |
104 | (* @parameterx: (description of parameter x)?)* | 104 | (* @parameterx(space)*: (description of parameter x)?)* |
105 | (* a blank line)? | 105 | (* a blank line)? |
106 | * (Description:)? (Description of function)? | 106 | * (Description:)? (Description of function)? |
107 | * (section header: (section description)? )* | 107 | * (section header: (section description)? )* |
108 | (*)?*/ | 108 | (*)?*/ |
109 | 109 | ||
110 | The short function description cannot be multiline, but the other | 110 | The short function description ***cannot be multiline***, but the other |
111 | descriptions can be (and they can contain blank lines). Avoid putting a | 111 | descriptions can be (and they can contain blank lines). If you continue |
112 | spurious blank line after the function name, or else the description will | 112 | that initial short description onto a second line, that second line will |
113 | be repeated! | 113 | appear further down at the beginning of the description section, which is |
114 | almost certainly not what you had in mind. | ||
115 | |||
116 | Avoid putting a spurious blank line after the function name, or else the | ||
117 | description will be repeated! | ||
114 | 118 | ||
115 | All descriptive text is further processed, scanning for the following special | 119 | All descriptive text is further processed, scanning for the following special |
116 | patterns, which are highlighted appropriately. | 120 | patterns, which are highlighted appropriately. |
@@ -121,6 +125,31 @@ patterns, which are highlighted appropriately. | |||
121 | '@parameter' - name of a parameter | 125 | '@parameter' - name of a parameter |
122 | '%CONST' - name of a constant. | 126 | '%CONST' - name of a constant. |
123 | 127 | ||
128 | NOTE 1: The multi-line descriptive text you provide does *not* recognize | ||
129 | line breaks, so if you try to format some text nicely, as in: | ||
130 | |||
131 | Return codes | ||
132 | 0 - cool | ||
133 | 1 - invalid arg | ||
134 | 2 - out of memory | ||
135 | |||
136 | this will all run together and produce: | ||
137 | |||
138 | Return codes 0 - cool 1 - invalid arg 2 - out of memory | ||
139 | |||
140 | NOTE 2: If the descriptive text you provide has lines that begin with | ||
141 | some phrase followed by a colon, each of those phrases will be taken as | ||
142 | a new section heading, which means you should similarly try to avoid text | ||
143 | like: | ||
144 | |||
145 | Return codes: | ||
146 | 0: cool | ||
147 | 1: invalid arg | ||
148 | 2: out of memory | ||
149 | |||
150 | every line of which would start a new section. Again, probably not | ||
151 | what you were after. | ||
152 | |||
124 | Take a look around the source tree for examples. | 153 | Take a look around the source tree for examples. |
125 | 154 | ||
126 | 155 | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 25d298517104..d25acd51e181 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1396,6 +1396,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1396 | in <PAGE_SIZE> units (needed only for swap files). | 1396 | in <PAGE_SIZE> units (needed only for swap files). |
1397 | See Documentation/power/swsusp-and-swap-files.txt | 1397 | See Documentation/power/swsusp-and-swap-files.txt |
1398 | 1398 | ||
1399 | retain_initrd [RAM] Keep initrd memory after extraction | ||
1400 | |||
1399 | rhash_entries= [KNL,NET] | 1401 | rhash_entries= [KNL,NET] |
1400 | Set number of hash buckets for route cache | 1402 | Set number of hash buckets for route cache |
1401 | 1403 | ||
diff --git a/Documentation/local_ops.txt b/Documentation/local_ops.txt new file mode 100644 index 000000000000..b0aca0705d1e --- /dev/null +++ b/Documentation/local_ops.txt | |||
@@ -0,0 +1,163 @@ | |||
1 | Semantics and Behavior of Local Atomic Operations | ||
2 | |||
3 | Mathieu Desnoyers | ||
4 | |||
5 | |||
6 | This document explains the purpose of the local atomic operations, how | ||
7 | to implement them for any given architecture and shows how they can be used | ||
8 | properly. It also stresses on the precautions that must be taken when reading | ||
9 | those local variables across CPUs when the order of memory writes matters. | ||
10 | |||
11 | |||
12 | |||
13 | * Purpose of local atomic operations | ||
14 | |||
15 | Local atomic operations are meant to provide fast and highly reentrant per CPU | ||
16 | counters. They minimize the performance cost of standard atomic operations by | ||
17 | removing the LOCK prefix and memory barriers normally required to synchronize | ||
18 | across CPUs. | ||
19 | |||
20 | Having fast per CPU atomic counters is interesting in many cases : it does not | ||
21 | require disabling interrupts to protect from interrupt handlers and it permits | ||
22 | coherent counters in NMI handlers. It is especially useful for tracing purposes | ||
23 | and for various performance monitoring counters. | ||
24 | |||
25 | Local atomic operations only guarantee variable modification atomicity wrt the | ||
26 | CPU which owns the data. Therefore, care must taken to make sure that only one | ||
27 | CPU writes to the local_t data. This is done by using per cpu data and making | ||
28 | sure that we modify it from within a preemption safe context. It is however | ||
29 | permitted to read local_t data from any CPU : it will then appear to be written | ||
30 | out of order wrt other memory writes on the owner CPU. | ||
31 | |||
32 | |||
33 | * Implementation for a given architecture | ||
34 | |||
35 | It can be done by slightly modifying the standard atomic operations : only | ||
36 | their UP variant must be kept. It typically means removing LOCK prefix (on | ||
37 | i386 and x86_64) and any SMP sychronization barrier. If the architecture does | ||
38 | not have a different behavior between SMP and UP, including asm-generic/local.h | ||
39 | in your archtecture's local.h is sufficient. | ||
40 | |||
41 | The local_t type is defined as an opaque signed long by embedding an | ||
42 | atomic_long_t inside a structure. This is made so a cast from this type to a | ||
43 | long fails. The definition looks like : | ||
44 | |||
45 | typedef struct { atomic_long_t a; } local_t; | ||
46 | |||
47 | |||
48 | * How to use local atomic operations | ||
49 | |||
50 | #include <linux/percpu.h> | ||
51 | #include <asm/local.h> | ||
52 | |||
53 | static DEFINE_PER_CPU(local_t, counters) = LOCAL_INIT(0); | ||
54 | |||
55 | |||
56 | * Counting | ||
57 | |||
58 | Counting is done on all the bits of a signed long. | ||
59 | |||
60 | In preemptible context, use get_cpu_var() and put_cpu_var() around local atomic | ||
61 | operations : it makes sure that preemption is disabled around write access to | ||
62 | the per cpu variable. For instance : | ||
63 | |||
64 | local_inc(&get_cpu_var(counters)); | ||
65 | put_cpu_var(counters); | ||
66 | |||
67 | If you are already in a preemption-safe context, you can directly use | ||
68 | __get_cpu_var() instead. | ||
69 | |||
70 | local_inc(&__get_cpu_var(counters)); | ||
71 | |||
72 | |||
73 | |||
74 | * Reading the counters | ||
75 | |||
76 | Those local counters can be read from foreign CPUs to sum the count. Note that | ||
77 | the data seen by local_read across CPUs must be considered to be out of order | ||
78 | relatively to other memory writes happening on the CPU that owns the data. | ||
79 | |||
80 | long sum = 0; | ||
81 | for_each_online_cpu(cpu) | ||
82 | sum += local_read(&per_cpu(counters, cpu)); | ||
83 | |||
84 | If you want to use a remote local_read to synchronize access to a resource | ||
85 | between CPUs, explicit smp_wmb() and smp_rmb() memory barriers must be used | ||
86 | respectively on the writer and the reader CPUs. It would be the case if you use | ||
87 | the local_t variable as a counter of bytes written in a buffer : there should | ||
88 | be a smp_wmb() between the buffer write and the counter increment and also a | ||
89 | smp_rmb() between the counter read and the buffer read. | ||
90 | |||
91 | |||
92 | Here is a sample module which implements a basic per cpu counter using local.h. | ||
93 | |||
94 | --- BEGIN --- | ||
95 | /* test-local.c | ||
96 | * | ||
97 | * Sample module for local.h usage. | ||
98 | */ | ||
99 | |||
100 | |||
101 | #include <asm/local.h> | ||
102 | #include <linux/module.h> | ||
103 | #include <linux/timer.h> | ||
104 | |||
105 | static DEFINE_PER_CPU(local_t, counters) = LOCAL_INIT(0); | ||
106 | |||
107 | static struct timer_list test_timer; | ||
108 | |||
109 | /* IPI called on each CPU. */ | ||
110 | static void test_each(void *info) | ||
111 | { | ||
112 | /* Increment the counter from a non preemptible context */ | ||
113 | printk("Increment on cpu %d\n", smp_processor_id()); | ||
114 | local_inc(&__get_cpu_var(counters)); | ||
115 | |||
116 | /* This is what incrementing the variable would look like within a | ||
117 | * preemptible context (it disables preemption) : | ||
118 | * | ||
119 | * local_inc(&get_cpu_var(counters)); | ||
120 | * put_cpu_var(counters); | ||
121 | */ | ||
122 | } | ||
123 | |||
124 | static void do_test_timer(unsigned long data) | ||
125 | { | ||
126 | int cpu; | ||
127 | |||
128 | /* Increment the counters */ | ||
129 | on_each_cpu(test_each, NULL, 0, 1); | ||
130 | /* Read all the counters */ | ||
131 | printk("Counters read from CPU %d\n", smp_processor_id()); | ||
132 | for_each_online_cpu(cpu) { | ||
133 | printk("Read : CPU %d, count %ld\n", cpu, | ||
134 | local_read(&per_cpu(counters, cpu))); | ||
135 | } | ||
136 | del_timer(&test_timer); | ||
137 | test_timer.expires = jiffies + 1000; | ||
138 | add_timer(&test_timer); | ||
139 | } | ||
140 | |||
141 | static int __init test_init(void) | ||
142 | { | ||
143 | /* initialize the timer that will increment the counter */ | ||
144 | init_timer(&test_timer); | ||
145 | test_timer.function = do_test_timer; | ||
146 | test_timer.expires = jiffies + 1; | ||
147 | add_timer(&test_timer); | ||
148 | |||
149 | return 0; | ||
150 | } | ||
151 | |||
152 | static void __exit test_exit(void) | ||
153 | { | ||
154 | del_timer_sync(&test_timer); | ||
155 | } | ||
156 | |||
157 | module_init(test_init); | ||
158 | module_exit(test_exit); | ||
159 | |||
160 | MODULE_LICENSE("GPL"); | ||
161 | MODULE_AUTHOR("Mathieu Desnoyers"); | ||
162 | MODULE_DESCRIPTION("Local Atomic Ops"); | ||
163 | --- END --- | ||
diff --git a/Documentation/nfsroot.txt b/Documentation/nfsroot.txt index 719f9a9d60c0..16a7cae2721d 100644 --- a/Documentation/nfsroot.txt +++ b/Documentation/nfsroot.txt | |||
@@ -67,8 +67,8 @@ nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] | |||
67 | <nfs-options> Standard NFS options. All options are separated by commas. | 67 | <nfs-options> Standard NFS options. All options are separated by commas. |
68 | The following defaults are used: | 68 | The following defaults are used: |
69 | port = as given by server portmap daemon | 69 | port = as given by server portmap daemon |
70 | rsize = 1024 | 70 | rsize = 4096 |
71 | wsize = 1024 | 71 | wsize = 4096 |
72 | timeo = 7 | 72 | timeo = 7 |
73 | retrans = 3 | 73 | retrans = 3 |
74 | acregmin = 3 | 74 | acregmin = 3 |
diff --git a/Documentation/rbtree.txt b/Documentation/rbtree.txt new file mode 100644 index 000000000000..7224459b469e --- /dev/null +++ b/Documentation/rbtree.txt | |||
@@ -0,0 +1,192 @@ | |||
1 | Red-black Trees (rbtree) in Linux | ||
2 | January 18, 2007 | ||
3 | Rob Landley <rob@landley.net> | ||
4 | ============================= | ||
5 | |||
6 | What are red-black trees, and what are they for? | ||
7 | ------------------------------------------------ | ||
8 | |||
9 | Red-black trees are a type of self-balancing binary search tree, used for | ||
10 | storing sortable key/value data pairs. This differs from radix trees (which | ||
11 | are used to efficiently store sparse arrays and thus use long integer indexes | ||
12 | to insert/access/delete nodes) and hash tables (which are not kept sorted to | ||
13 | be easily traversed in order, and must be tuned for a specific size and | ||
14 | hash function where rbtrees scale gracefully storing arbitrary keys). | ||
15 | |||
16 | Red-black trees are similar to AVL trees, but provide faster real-time bounded | ||
17 | worst case performance for insertion and deletion (at most two rotations and | ||
18 | three rotations, respectively, to balance the tree), with slightly slower | ||
19 | (but still O(log n)) lookup time. | ||
20 | |||
21 | To quote Linux Weekly News: | ||
22 | |||
23 | There are a number of red-black trees in use in the kernel. | ||
24 | The anticipatory, deadline, and CFQ I/O schedulers all employ | ||
25 | rbtrees to track requests; the packet CD/DVD driver does the same. | ||
26 | The high-resolution timer code uses an rbtree to organize outstanding | ||
27 | timer requests. The ext3 filesystem tracks directory entries in a | ||
28 | red-black tree. Virtual memory areas (VMAs) are tracked with red-black | ||
29 | trees, as are epoll file descriptors, cryptographic keys, and network | ||
30 | packets in the "hierarchical token bucket" scheduler. | ||
31 | |||
32 | This document covers use of the Linux rbtree implementation. For more | ||
33 | information on the nature and implementation of Red Black Trees, see: | ||
34 | |||
35 | Linux Weekly News article on red-black trees | ||
36 | http://lwn.net/Articles/184495/ | ||
37 | |||
38 | Wikipedia entry on red-black trees | ||
39 | http://en.wikipedia.org/wiki/Red-black_tree | ||
40 | |||
41 | Linux implementation of red-black trees | ||
42 | --------------------------------------- | ||
43 | |||
44 | Linux's rbtree implementation lives in the file "lib/rbtree.c". To use it, | ||
45 | "#include <linux/rbtree.h>". | ||
46 | |||
47 | The Linux rbtree implementation is optimized for speed, and thus has one | ||
48 | less layer of indirection (and better cache locality) than more traditional | ||
49 | tree implementations. Instead of using pointers to separate rb_node and data | ||
50 | structures, each instance of struct rb_node is embedded in the data structure | ||
51 | it organizes. And instead of using a comparison callback function pointer, | ||
52 | users are expected to write their own tree search and insert functions | ||
53 | which call the provided rbtree functions. Locking is also left up to the | ||
54 | user of the rbtree code. | ||
55 | |||
56 | Creating a new rbtree | ||
57 | --------------------- | ||
58 | |||
59 | Data nodes in an rbtree tree are structures containing a struct rb_node member: | ||
60 | |||
61 | struct mytype { | ||
62 | struct rb_node node; | ||
63 | char *keystring; | ||
64 | }; | ||
65 | |||
66 | When dealing with a pointer to the embedded struct rb_node, the containing data | ||
67 | structure may be accessed with the standard container_of() macro. In addition, | ||
68 | individual members may be accessed directly via rb_entry(node, type, member). | ||
69 | |||
70 | At the root of each rbtree is an rb_root structure, which is initialized to be | ||
71 | empty via: | ||
72 | |||
73 | struct rb_root mytree = RB_ROOT; | ||
74 | |||
75 | Searching for a value in an rbtree | ||
76 | ---------------------------------- | ||
77 | |||
78 | Writing a search function for your tree is fairly straightforward: start at the | ||
79 | root, compare each value, and follow the left or right branch as necessary. | ||
80 | |||
81 | Example: | ||
82 | |||
83 | struct mytype *my_search(struct rb_root *root, char *string) | ||
84 | { | ||
85 | struct rb_node *node = root->rb_node; | ||
86 | |||
87 | while (node) { | ||
88 | struct mytype *data = container_of(node, struct mytype, node); | ||
89 | int result; | ||
90 | |||
91 | result = strcmp(string, data->keystring); | ||
92 | |||
93 | if (result < 0) | ||
94 | node = node->rb_left; | ||
95 | else if (result > 0) | ||
96 | node = node->rb_right; | ||
97 | else | ||
98 | return data; | ||
99 | } | ||
100 | return NULL; | ||
101 | } | ||
102 | |||
103 | Inserting data into an rbtree | ||
104 | ----------------------------- | ||
105 | |||
106 | Inserting data in the tree involves first searching for the place to insert the | ||
107 | new node, then inserting the node and rebalancing ("recoloring") the tree. | ||
108 | |||
109 | The search for insertion differs from the previous search by finding the | ||
110 | location of the pointer on which to graft the new node. The new node also | ||
111 | needs a link to its parent node for rebalancing purposes. | ||
112 | |||
113 | Example: | ||
114 | |||
115 | int my_insert(struct rb_root *root, struct mytype *data) | ||
116 | { | ||
117 | struct rb_node **new = &(root->rb_node), *parent = NULL; | ||
118 | |||
119 | /* Figure out where to put new node */ | ||
120 | while (*new) { | ||
121 | struct mytype *this = container_of(*new, struct mytype, node); | ||
122 | int result = strcmp(data->keystring, this->keystring); | ||
123 | |||
124 | parent = *new; | ||
125 | if (result < 0) | ||
126 | new = &((*new)->rb_left); | ||
127 | else if (result > 0) | ||
128 | new = &((*new)->rb_right); | ||
129 | else | ||
130 | return FALSE; | ||
131 | } | ||
132 | |||
133 | /* Add new node and rebalance tree. */ | ||
134 | rb_link_node(data->node, parent, new); | ||
135 | rb_insert_color(data->node, root); | ||
136 | |||
137 | return TRUE; | ||
138 | } | ||
139 | |||
140 | Removing or replacing existing data in an rbtree | ||
141 | ------------------------------------------------ | ||
142 | |||
143 | To remove an existing node from a tree, call: | ||
144 | |||
145 | void rb_erase(struct rb_node *victim, struct rb_root *tree); | ||
146 | |||
147 | Example: | ||
148 | |||
149 | struct mytype *data = mysearch(mytree, "walrus"); | ||
150 | |||
151 | if (data) { | ||
152 | rb_erase(data->node, mytree); | ||
153 | myfree(data); | ||
154 | } | ||
155 | |||
156 | To replace an existing node in a tree with a new one with the same key, call: | ||
157 | |||
158 | void rb_replace_node(struct rb_node *old, struct rb_node *new, | ||
159 | struct rb_root *tree); | ||
160 | |||
161 | Replacing a node this way does not re-sort the tree: If the new node doesn't | ||
162 | have the same key as the old node, the rbtree will probably become corrupted. | ||
163 | |||
164 | Iterating through the elements stored in an rbtree (in sort order) | ||
165 | ------------------------------------------------------------------ | ||
166 | |||
167 | Four functions are provided for iterating through an rbtree's contents in | ||
168 | sorted order. These work on arbitrary trees, and should not need to be | ||
169 | modified or wrapped (except for locking purposes): | ||
170 | |||
171 | struct rb_node *rb_first(struct rb_root *tree); | ||
172 | struct rb_node *rb_last(struct rb_root *tree); | ||
173 | struct rb_node *rb_next(struct rb_node *node); | ||
174 | struct rb_node *rb_prev(struct rb_node *node); | ||
175 | |||
176 | To start iterating, call rb_first() or rb_last() with a pointer to the root | ||
177 | of the tree, which will return a pointer to the node structure contained in | ||
178 | the first or last element in the tree. To continue, fetch the next or previous | ||
179 | node by calling rb_next() or rb_prev() on the current node. This will return | ||
180 | NULL when there are no more nodes left. | ||
181 | |||
182 | The iterator functions return a pointer to the embedded struct rb_node, from | ||
183 | which the containing data structure may be accessed with the container_of() | ||
184 | macro, and individual members may be accessed directly via | ||
185 | rb_entry(node, type, member). | ||
186 | |||
187 | Example: | ||
188 | |||
189 | struct rb_node *node; | ||
190 | for (node = rb_first(&mytree); node; node = rb_next(node)) | ||
191 | printk("key=%s\n", rb_entry(node, int, keystring)); | ||
192 | |||
diff --git a/Documentation/rtc.txt b/Documentation/rtc.txt index 7cf1ec5bcdd3..1ef6bb88cd00 100644 --- a/Documentation/rtc.txt +++ b/Documentation/rtc.txt | |||
@@ -149,7 +149,7 @@ RTC class framework, but can't be supported by the older driver. | |||
149 | is connected to an IRQ line, it can often issue an alarm IRQ up to | 149 | is connected to an IRQ line, it can often issue an alarm IRQ up to |
150 | 24 hours in the future. | 150 | 24 hours in the future. |
151 | 151 | ||
152 | * RTC_WKALM_SET, RTC_WKALM_READ ... RTCs that can issue alarms beyond | 152 | * RTC_WKALM_SET, RTC_WKALM_RD ... RTCs that can issue alarms beyond |
153 | the next 24 hours use a slightly more powerful API, which supports | 153 | the next 24 hours use a slightly more powerful API, which supports |
154 | setting the longer alarm time and enabling its IRQ using a single | 154 | setting the longer alarm time and enabling its IRQ using a single |
155 | request (using the same model as EFI firmware). | 155 | request (using the same model as EFI firmware). |
@@ -167,6 +167,28 @@ Linux out of a low power sleep state (or hibernation) back to a fully | |||
167 | operational state. For example, a system could enter a deep power saving | 167 | operational state. For example, a system could enter a deep power saving |
168 | state until it's time to execute some scheduled tasks. | 168 | state until it's time to execute some scheduled tasks. |
169 | 169 | ||
170 | Note that many of these ioctls need not actually be implemented by your | ||
171 | driver. The common rtc-dev interface handles many of these nicely if your | ||
172 | driver returns ENOIOCTLCMD. Some common examples: | ||
173 | |||
174 | * RTC_RD_TIME, RTC_SET_TIME: the read_time/set_time functions will be | ||
175 | called with appropriate values. | ||
176 | |||
177 | * RTC_ALM_SET, RTC_ALM_READ, RTC_WKALM_SET, RTC_WKALM_RD: the | ||
178 | set_alarm/read_alarm functions will be called. To differentiate | ||
179 | between the ALM and WKALM, check the larger fields of the rtc_wkalrm | ||
180 | struct (like tm_year). These will be set to -1 when using ALM and | ||
181 | will be set to proper values when using WKALM. | ||
182 | |||
183 | * RTC_IRQP_SET, RTC_IRQP_READ: the irq_set_freq function will be called | ||
184 | to set the frequency while the framework will handle the read for you | ||
185 | since the frequency is stored in the irq_freq member of the rtc_device | ||
186 | structure. Also make sure you set the max_user_freq member in your | ||
187 | initialization routines so the framework can sanity check the user | ||
188 | input for you. | ||
189 | |||
190 | If all else fails, check out the rtc-test.c driver! | ||
191 | |||
170 | 192 | ||
171 | -------------------- 8< ---------------- 8< ----------------------------- | 193 | -------------------- 8< ---------------- 8< ----------------------------- |
172 | 194 | ||
@@ -237,7 +259,7 @@ int main(int argc, char **argv) | |||
237 | "\n...Update IRQs not supported.\n"); | 259 | "\n...Update IRQs not supported.\n"); |
238 | goto test_READ; | 260 | goto test_READ; |
239 | } | 261 | } |
240 | perror("ioctl"); | 262 | perror("RTC_UIE_ON ioctl"); |
241 | exit(errno); | 263 | exit(errno); |
242 | } | 264 | } |
243 | 265 | ||
@@ -284,7 +306,7 @@ int main(int argc, char **argv) | |||
284 | /* Turn off update interrupts */ | 306 | /* Turn off update interrupts */ |
285 | retval = ioctl(fd, RTC_UIE_OFF, 0); | 307 | retval = ioctl(fd, RTC_UIE_OFF, 0); |
286 | if (retval == -1) { | 308 | if (retval == -1) { |
287 | perror("ioctl"); | 309 | perror("RTC_UIE_OFF ioctl"); |
288 | exit(errno); | 310 | exit(errno); |
289 | } | 311 | } |
290 | 312 | ||
@@ -292,7 +314,7 @@ test_READ: | |||
292 | /* Read the RTC time/date */ | 314 | /* Read the RTC time/date */ |
293 | retval = ioctl(fd, RTC_RD_TIME, &rtc_tm); | 315 | retval = ioctl(fd, RTC_RD_TIME, &rtc_tm); |
294 | if (retval == -1) { | 316 | if (retval == -1) { |
295 | perror("ioctl"); | 317 | perror("RTC_RD_TIME ioctl"); |
296 | exit(errno); | 318 | exit(errno); |
297 | } | 319 | } |
298 | 320 | ||
@@ -320,14 +342,14 @@ test_READ: | |||
320 | "\n...Alarm IRQs not supported.\n"); | 342 | "\n...Alarm IRQs not supported.\n"); |
321 | goto test_PIE; | 343 | goto test_PIE; |
322 | } | 344 | } |
323 | perror("ioctl"); | 345 | perror("RTC_ALM_SET ioctl"); |
324 | exit(errno); | 346 | exit(errno); |
325 | } | 347 | } |
326 | 348 | ||
327 | /* Read the current alarm settings */ | 349 | /* Read the current alarm settings */ |
328 | retval = ioctl(fd, RTC_ALM_READ, &rtc_tm); | 350 | retval = ioctl(fd, RTC_ALM_READ, &rtc_tm); |
329 | if (retval == -1) { | 351 | if (retval == -1) { |
330 | perror("ioctl"); | 352 | perror("RTC_ALM_READ ioctl"); |
331 | exit(errno); | 353 | exit(errno); |
332 | } | 354 | } |
333 | 355 | ||
@@ -337,7 +359,7 @@ test_READ: | |||
337 | /* Enable alarm interrupts */ | 359 | /* Enable alarm interrupts */ |
338 | retval = ioctl(fd, RTC_AIE_ON, 0); | 360 | retval = ioctl(fd, RTC_AIE_ON, 0); |
339 | if (retval == -1) { | 361 | if (retval == -1) { |
340 | perror("ioctl"); | 362 | perror("RTC_AIE_ON ioctl"); |
341 | exit(errno); | 363 | exit(errno); |
342 | } | 364 | } |
343 | 365 | ||
@@ -355,7 +377,7 @@ test_READ: | |||
355 | /* Disable alarm interrupts */ | 377 | /* Disable alarm interrupts */ |
356 | retval = ioctl(fd, RTC_AIE_OFF, 0); | 378 | retval = ioctl(fd, RTC_AIE_OFF, 0); |
357 | if (retval == -1) { | 379 | if (retval == -1) { |
358 | perror("ioctl"); | 380 | perror("RTC_AIE_OFF ioctl"); |
359 | exit(errno); | 381 | exit(errno); |
360 | } | 382 | } |
361 | 383 | ||
@@ -368,7 +390,7 @@ test_PIE: | |||
368 | fprintf(stderr, "\nNo periodic IRQ support\n"); | 390 | fprintf(stderr, "\nNo periodic IRQ support\n"); |
369 | return 0; | 391 | return 0; |
370 | } | 392 | } |
371 | perror("ioctl"); | 393 | perror("RTC_IRQP_READ ioctl"); |
372 | exit(errno); | 394 | exit(errno); |
373 | } | 395 | } |
374 | fprintf(stderr, "\nPeriodic IRQ rate is %ldHz.\n", tmp); | 396 | fprintf(stderr, "\nPeriodic IRQ rate is %ldHz.\n", tmp); |
@@ -387,7 +409,7 @@ test_PIE: | |||
387 | "\n...Periodic IRQ rate is fixed\n"); | 409 | "\n...Periodic IRQ rate is fixed\n"); |
388 | goto done; | 410 | goto done; |
389 | } | 411 | } |
390 | perror("ioctl"); | 412 | perror("RTC_IRQP_SET ioctl"); |
391 | exit(errno); | 413 | exit(errno); |
392 | } | 414 | } |
393 | 415 | ||
@@ -397,7 +419,7 @@ test_PIE: | |||
397 | /* Enable periodic interrupts */ | 419 | /* Enable periodic interrupts */ |
398 | retval = ioctl(fd, RTC_PIE_ON, 0); | 420 | retval = ioctl(fd, RTC_PIE_ON, 0); |
399 | if (retval == -1) { | 421 | if (retval == -1) { |
400 | perror("ioctl"); | 422 | perror("RTC_PIE_ON ioctl"); |
401 | exit(errno); | 423 | exit(errno); |
402 | } | 424 | } |
403 | 425 | ||
@@ -416,7 +438,7 @@ test_PIE: | |||
416 | /* Disable periodic interrupts */ | 438 | /* Disable periodic interrupts */ |
417 | retval = ioctl(fd, RTC_PIE_OFF, 0); | 439 | retval = ioctl(fd, RTC_PIE_OFF, 0); |
418 | if (retval == -1) { | 440 | if (retval == -1) { |
419 | perror("ioctl"); | 441 | perror("RTC_PIE_OFF ioctl"); |
420 | exit(errno); | 442 | exit(errno); |
421 | } | 443 | } |
422 | } | 444 | } |
diff --git a/Documentation/scsi/ChangeLog.megaraid b/Documentation/scsi/ChangeLog.megaraid index a056bbe67c7e..37796fe45bd0 100644 --- a/Documentation/scsi/ChangeLog.megaraid +++ b/Documentation/scsi/ChangeLog.megaraid | |||
@@ -1,3 +1,19 @@ | |||
1 | Release Date : Thu Nov 16 15:32:35 EST 2006 - | ||
2 | Sumant Patro <sumant.patro@lsi.com> | ||
3 | Current Version : 2.20.5.1 (scsi module), 2.20.2.6 (cmm module) | ||
4 | Older Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module) | ||
5 | |||
6 | 1. Changes in Initialization to fix kdump failure. | ||
7 | Send SYNC command on loading. | ||
8 | This command clears the pending commands in the adapter | ||
9 | and re-initialize its internal RAID structure. | ||
10 | Without this change, megaraid driver either panics or fails to | ||
11 | initialize the adapter during kdump's second kernel boot | ||
12 | if there are pending commands or interrupts from other devices | ||
13 | sharing the same IRQ. | ||
14 | 2. Authors email-id domain name changed from lsil.com to lsi.com. | ||
15 | Also modified the MODULE_AUTHOR to megaraidlinux@lsi.com | ||
16 | |||
1 | Release Date : Fri May 19 09:31:45 EST 2006 - Seokmann Ju <sju@lsil.com> | 17 | Release Date : Fri May 19 09:31:45 EST 2006 - Seokmann Ju <sju@lsil.com> |
2 | Current Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module) | 18 | Current Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module) |
3 | Older Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module) | 19 | Older Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module) |
diff --git a/Documentation/spi/spi-summary b/Documentation/spi/spi-summary index 72795796b13d..ecc7c9eb9f29 100644 --- a/Documentation/spi/spi-summary +++ b/Documentation/spi/spi-summary | |||
@@ -284,7 +284,6 @@ SPI protocol drivers somewhat resemble platform device drivers: | |||
284 | static struct spi_driver CHIP_driver = { | 284 | static struct spi_driver CHIP_driver = { |
285 | .driver = { | 285 | .driver = { |
286 | .name = "CHIP", | 286 | .name = "CHIP", |
287 | .bus = &spi_bus_type, | ||
288 | .owner = THIS_MODULE, | 287 | .owner = THIS_MODULE, |
289 | }, | 288 | }, |
290 | 289 | ||
@@ -312,7 +311,7 @@ might look like this unless you're creating a class_device: | |||
312 | chip = kzalloc(sizeof *chip, GFP_KERNEL); | 311 | chip = kzalloc(sizeof *chip, GFP_KERNEL); |
313 | if (!chip) | 312 | if (!chip) |
314 | return -ENOMEM; | 313 | return -ENOMEM; |
315 | dev_set_drvdata(&spi->dev, chip); | 314 | spi_set_drvdata(spi, chip); |
316 | 315 | ||
317 | ... etc | 316 | ... etc |
318 | return 0; | 317 | return 0; |
diff --git a/Documentation/sysrq.txt b/Documentation/sysrq.txt index 61613166981b..452c0f152304 100644 --- a/Documentation/sysrq.txt +++ b/Documentation/sysrq.txt | |||
@@ -64,11 +64,6 @@ On all - write a character to /proc/sysrq-trigger. e.g.: | |||
64 | 64 | ||
65 | * What are the 'command' keys? | 65 | * What are the 'command' keys? |
66 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 66 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
67 | 'r' - Turns off keyboard raw mode and sets it to XLATE. | ||
68 | |||
69 | 'k' - Secure Access Key (SAK) Kills all programs on the current virtual | ||
70 | console. NOTE: See important comments below in SAK section. | ||
71 | |||
72 | 'b' - Will immediately reboot the system without syncing or unmounting | 67 | 'b' - Will immediately reboot the system without syncing or unmounting |
73 | your disks. | 68 | your disks. |
74 | 69 | ||
@@ -76,21 +71,37 @@ On all - write a character to /proc/sysrq-trigger. e.g.: | |||
76 | 71 | ||
77 | 'd' - Shows all locks that are held. | 72 | 'd' - Shows all locks that are held. |
78 | 73 | ||
79 | 'o' - Will shut your system off (if configured and supported). | 74 | 'e' - Send a SIGTERM to all processes, except for init. |
80 | 75 | ||
81 | 's' - Will attempt to sync all mounted filesystems. | 76 | 'f' - Will call oom_kill to kill a memory hog process. |
82 | 77 | ||
83 | 'u' - Will attempt to remount all mounted filesystems read-only. | 78 | 'g' - Used by kgdb on ppc platforms. |
84 | 79 | ||
85 | 'p' - Will dump the current registers and flags to your console. | 80 | 'h' - Will display help (actually any other key than those listed |
81 | above will display help. but 'h' is easy to remember :-) | ||
86 | 82 | ||
87 | 't' - Will dump a list of current tasks and their information to your | 83 | 'i' - Send a SIGKILL to all processes, except for init. |
88 | console. | 84 | |
85 | 'k' - Secure Access Key (SAK) Kills all programs on the current virtual | ||
86 | console. NOTE: See important comments below in SAK section. | ||
89 | 87 | ||
90 | 'm' - Will dump current memory info to your console. | 88 | 'm' - Will dump current memory info to your console. |
91 | 89 | ||
92 | 'n' - Used to make RT tasks nice-able | 90 | 'n' - Used to make RT tasks nice-able |
93 | 91 | ||
92 | 'o' - Will shut your system off (if configured and supported). | ||
93 | |||
94 | 'p' - Will dump the current registers and flags to your console. | ||
95 | |||
96 | 'r' - Turns off keyboard raw mode and sets it to XLATE. | ||
97 | |||
98 | 's' - Will attempt to sync all mounted filesystems. | ||
99 | |||
100 | 't' - Will dump a list of current tasks and their information to your | ||
101 | console. | ||
102 | |||
103 | 'u' - Will attempt to remount all mounted filesystems read-only. | ||
104 | |||
94 | 'v' - Dumps Voyager SMP processor info to your console. | 105 | 'v' - Dumps Voyager SMP processor info to your console. |
95 | 106 | ||
96 | 'w' - Dumps tasks that are in uninterruptable (blocked) state. | 107 | 'w' - Dumps tasks that are in uninterruptable (blocked) state. |
@@ -102,17 +113,6 @@ On all - write a character to /proc/sysrq-trigger. e.g.: | |||
102 | it so that only emergency messages like PANICs or OOPSes would | 113 | it so that only emergency messages like PANICs or OOPSes would |
103 | make it to your console.) | 114 | make it to your console.) |
104 | 115 | ||
105 | 'f' - Will call oom_kill to kill a memory hog process. | ||
106 | |||
107 | 'e' - Send a SIGTERM to all processes, except for init. | ||
108 | |||
109 | 'g' - Used by kgdb on ppc platforms. | ||
110 | |||
111 | 'i' - Send a SIGKILL to all processes, except for init. | ||
112 | |||
113 | 'h' - Will display help (actually any other key than those listed | ||
114 | above will display help. but 'h' is easy to remember :-) | ||
115 | |||
116 | * Okay, so what can I use them for? | 116 | * Okay, so what can I use them for? |
117 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 117 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
118 | Well, un'R'aw is very handy when your X server or a svgalib program crashes. | 118 | Well, un'R'aw is very handy when your X server or a svgalib program crashes. |