diff options
author | Anton Altaparmakov <aia21@cantab.net> | 2005-06-25 09:27:27 -0400 |
---|---|---|
committer | Anton Altaparmakov <aia21@cantab.net> | 2005-06-25 09:27:27 -0400 |
commit | 38b22b6e9f46ab8f73ef5734f0e0a000766a9258 (patch) | |
tree | 2ccc41ef55918d3af43e444bde7648562a031559 /Documentation | |
parent | 3357d4c75f1fb67e7304998c4ad4e9a9fed66fa4 (diff) | |
parent | b3e112bcc19abd8e9657dca34a87316786e096f3 (diff) |
Automerge with /usr/src/ntfs-2.6.git.
Diffstat (limited to 'Documentation')
23 files changed, 838 insertions, 294 deletions
diff --git a/Documentation/Changes b/Documentation/Changes index 57542bc25edd..b37600754762 100644 --- a/Documentation/Changes +++ b/Documentation/Changes | |||
@@ -63,7 +63,7 @@ o PPP 2.4.0 # pppd --version | |||
63 | o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version | 63 | o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version |
64 | o nfs-utils 1.0.5 # showmount --version | 64 | o nfs-utils 1.0.5 # showmount --version |
65 | o procps 3.2.0 # ps --version | 65 | o procps 3.2.0 # ps --version |
66 | o oprofile 0.5.3 # oprofiled --version | 66 | o oprofile 0.9 # oprofiled --version |
67 | 67 | ||
68 | Kernel compilation | 68 | Kernel compilation |
69 | ================== | 69 | ================== |
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 87da3478fada..fa3e29ad8a46 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
@@ -49,7 +49,7 @@ installmandocs: mandocs | |||
49 | KERNELDOC = scripts/kernel-doc | 49 | KERNELDOC = scripts/kernel-doc |
50 | DOCPROC = scripts/basic/docproc | 50 | DOCPROC = scripts/basic/docproc |
51 | 51 | ||
52 | XMLTOFLAGS = -m Documentation/DocBook/stylesheet.xsl | 52 | XMLTOFLAGS = -m $(srctree)/Documentation/DocBook/stylesheet.xsl |
53 | #XMLTOFLAGS += --skip-validation | 53 | #XMLTOFLAGS += --skip-validation |
54 | 54 | ||
55 | ### | 55 | ### |
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index bb6a0106be11..d650ce36485f 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -266,7 +266,7 @@ X!Ekernel/module.c | |||
266 | <chapter id="hardware"> | 266 | <chapter id="hardware"> |
267 | <title>Hardware Interfaces</title> | 267 | <title>Hardware Interfaces</title> |
268 | <sect1><title>Interrupt Handling</title> | 268 | <sect1><title>Interrupt Handling</title> |
269 | !Iarch/i386/kernel/irq.c | 269 | !Ikernel/irq/manage.c |
270 | </sect1> | 270 | </sect1> |
271 | 271 | ||
272 | <sect1><title>Resources Management</title> | 272 | <sect1><title>Resources Management</title> |
diff --git a/Documentation/DocBook/stylesheet.xsl b/Documentation/DocBook/stylesheet.xsl index e14c21dda403..64be9f7ee3bb 100644 --- a/Documentation/DocBook/stylesheet.xsl +++ b/Documentation/DocBook/stylesheet.xsl | |||
@@ -2,4 +2,5 @@ | |||
2 | <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0"> | 2 | <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0"> |
3 | <param name="chunk.quietly">1</param> | 3 | <param name="chunk.quietly">1</param> |
4 | <param name="funcsynopsis.style">ansi</param> | 4 | <param name="funcsynopsis.style">ansi</param> |
5 | <param name="funcsynopsis.tabular.threshold">80</param> | ||
5 | </stylesheet> | 6 | </stylesheet> |
diff --git a/Documentation/IPMI.txt b/Documentation/IPMI.txt index 90d10e708ca3..84d3d4d10c17 100644 --- a/Documentation/IPMI.txt +++ b/Documentation/IPMI.txt | |||
@@ -25,9 +25,10 @@ subject and I can't cover it all here! | |||
25 | Configuration | 25 | Configuration |
26 | ------------- | 26 | ------------- |
27 | 27 | ||
28 | The LinuxIPMI driver is modular, which means you have to pick several | 28 | The Linux IPMI driver is modular, which means you have to pick several |
29 | things to have it work right depending on your hardware. Most of | 29 | things to have it work right depending on your hardware. Most of |
30 | these are available in the 'Character Devices' menu. | 30 | these are available in the 'Character Devices' menu then the IPMI |
31 | menu. | ||
31 | 32 | ||
32 | No matter what, you must pick 'IPMI top-level message handler' to use | 33 | No matter what, you must pick 'IPMI top-level message handler' to use |
33 | IPMI. What you do beyond that depends on your needs and hardware. | 34 | IPMI. What you do beyond that depends on your needs and hardware. |
@@ -35,33 +36,30 @@ IPMI. What you do beyond that depends on your needs and hardware. | |||
35 | The message handler does not provide any user-level interfaces. | 36 | The message handler does not provide any user-level interfaces. |
36 | Kernel code (like the watchdog) can still use it. If you need access | 37 | Kernel code (like the watchdog) can still use it. If you need access |
37 | from userland, you need to select 'Device interface for IPMI' if you | 38 | from userland, you need to select 'Device interface for IPMI' if you |
38 | want access through a device driver. Another interface is also | 39 | want access through a device driver. |
39 | available, you may select 'IPMI sockets' in the 'Networking Support' | 40 | |
40 | main menu. This provides a socket interface to IPMI. You may select | 41 | The driver interface depends on your hardware. If your system |
41 | both of these at the same time, they will both work together. | 42 | properly provides the SMBIOS info for IPMI, the driver will detect it |
42 | 43 | and just work. If you have a board with a standard interface (These | |
43 | The driver interface depends on your hardware. If you have a board | 44 | will generally be either "KCS", "SMIC", or "BT", consult your hardware |
44 | with a standard interface (These will generally be either "KCS", | 45 | manual), choose the 'IPMI SI handler' option. A driver also exists |
45 | "SMIC", or "BT", consult your hardware manual), choose the 'IPMI SI | 46 | for direct I2C access to the IPMI management controller. Some boards |
46 | handler' option. A driver also exists for direct I2C access to the | 47 | support this, but it is unknown if it will work on every board. For |
47 | IPMI management controller. Some boards support this, but it is | 48 | this, choose 'IPMI SMBus handler', but be ready to try to do some |
48 | unknown if it will work on every board. For this, choose 'IPMI SMBus | 49 | figuring to see if it will work on your system if the SMBIOS/APCI |
49 | handler', but be ready to try to do some figuring to see if it will | 50 | information is wrong or not present. It is fairly safe to have both |
50 | work. | 51 | these enabled and let the drivers auto-detect what is present. |
51 | |||
52 | There is also a KCS-only driver interface supplied, but it is | ||
53 | depracated in favor of the SI interface. | ||
54 | 52 | ||
55 | You should generally enable ACPI on your system, as systems with IPMI | 53 | You should generally enable ACPI on your system, as systems with IPMI |
56 | should have ACPI tables describing them. | 54 | can have ACPI tables describing them. |
57 | 55 | ||
58 | If you have a standard interface and the board manufacturer has done | 56 | If you have a standard interface and the board manufacturer has done |
59 | their job correctly, the IPMI controller should be automatically | 57 | their job correctly, the IPMI controller should be automatically |
60 | detect (via ACPI or SMBIOS tables) and should just work. Sadly, many | 58 | detected (via ACPI or SMBIOS tables) and should just work. Sadly, |
61 | boards do not have this information. The driver attempts standard | 59 | many boards do not have this information. The driver attempts |
62 | defaults, but they may not work. If you fall into this situation, you | 60 | standard defaults, but they may not work. If you fall into this |
63 | need to read the section below named 'The SI Driver' on how to | 61 | situation, you need to read the section below named 'The SI Driver' or |
64 | hand-configure your system. | 62 | "The SMBus Driver" on how to hand-configure your system. |
65 | 63 | ||
66 | IPMI defines a standard watchdog timer. You can enable this with the | 64 | IPMI defines a standard watchdog timer. You can enable this with the |
67 | 'IPMI Watchdog Timer' config option. If you compile the driver into | 65 | 'IPMI Watchdog Timer' config option. If you compile the driver into |
@@ -73,6 +71,18 @@ closed (by default it is disabled on close). Go into the 'Watchdog | |||
73 | Cards' menu, enable 'Watchdog Timer Support', and enable the option | 71 | Cards' menu, enable 'Watchdog Timer Support', and enable the option |
74 | 'Disable watchdog shutdown on close'. | 72 | 'Disable watchdog shutdown on close'. |
75 | 73 | ||
74 | IPMI systems can often be powered off using IPMI commands. Select | ||
75 | 'IPMI Poweroff' to do this. The driver will auto-detect if the system | ||
76 | can be powered off by IPMI. It is safe to enable this even if your | ||
77 | system doesn't support this option. This works on ATCA systems, the | ||
78 | Radisys CPI1 card, and any IPMI system that supports standard chassis | ||
79 | management commands. | ||
80 | |||
81 | If you want the driver to put an event into the event log on a panic, | ||
82 | enable the 'Generate a panic event to all BMCs on a panic' option. If | ||
83 | you want the whole panic string put into the event log using OEM | ||
84 | events, enable the 'Generate OEM events containing the panic string' | ||
85 | option. | ||
76 | 86 | ||
77 | Basic Design | 87 | Basic Design |
78 | ------------ | 88 | ------------ |
@@ -80,7 +90,7 @@ Basic Design | |||
80 | The Linux IPMI driver is designed to be very modular and flexible, you | 90 | The Linux IPMI driver is designed to be very modular and flexible, you |
81 | only need to take the pieces you need and you can use it in many | 91 | only need to take the pieces you need and you can use it in many |
82 | different ways. Because of that, it's broken into many chunks of | 92 | different ways. Because of that, it's broken into many chunks of |
83 | code. These chunks are: | 93 | code. These chunks (by module name) are: |
84 | 94 | ||
85 | ipmi_msghandler - This is the central piece of software for the IPMI | 95 | ipmi_msghandler - This is the central piece of software for the IPMI |
86 | system. It handles all messages, message timing, and responses. The | 96 | system. It handles all messages, message timing, and responses. The |
@@ -93,18 +103,26 @@ ipmi_devintf - This provides a userland IOCTL interface for the IPMI | |||
93 | driver, each open file for this device ties in to the message handler | 103 | driver, each open file for this device ties in to the message handler |
94 | as an IPMI user. | 104 | as an IPMI user. |
95 | 105 | ||
96 | ipmi_si - A driver for various system interfaces. This supports | 106 | ipmi_si - A driver for various system interfaces. This supports KCS, |
97 | KCS, SMIC, and may support BT in the future. Unless you have your own | 107 | SMIC, and BT interfaces. Unless you have an SMBus interface or your |
98 | custom interface, you probably need to use this. | 108 | own custom interface, you probably need to use this. |
99 | 109 | ||
100 | ipmi_smb - A driver for accessing BMCs on the SMBus. It uses the | 110 | ipmi_smb - A driver for accessing BMCs on the SMBus. It uses the |
101 | I2C kernel driver's SMBus interfaces to send and receive IPMI messages | 111 | I2C kernel driver's SMBus interfaces to send and receive IPMI messages |
102 | over the SMBus. | 112 | over the SMBus. |
103 | 113 | ||
104 | af_ipmi - A network socket interface to IPMI. This doesn't take up | 114 | ipmi_watchdog - IPMI requires systems to have a very capable watchdog |
105 | a character device in your system. | 115 | timer. This driver implements the standard Linux watchdog timer |
116 | interface on top of the IPMI message handler. | ||
117 | |||
118 | ipmi_poweroff - Some systems support the ability to be turned off via | ||
119 | IPMI commands. | ||
106 | 120 | ||
107 | Note that the KCS-only interface ahs been removed. | 121 | These are all individually selectable via configuration options. |
122 | |||
123 | Note that the KCS-only interface has been removed. The af_ipmi driver | ||
124 | is no longer supported and has been removed because it was impossible | ||
125 | to do 32 bit emulation on 64-bit kernels with it. | ||
108 | 126 | ||
109 | Much documentation for the interface is in the include files. The | 127 | Much documentation for the interface is in the include files. The |
110 | IPMI include files are: | 128 | IPMI include files are: |
@@ -424,7 +442,7 @@ at module load time (for a module) with: | |||
424 | modprobe ipmi_smb.o | 442 | modprobe ipmi_smb.o |
425 | addr=<adapter1>,<i2caddr1>[,<adapter2>,<i2caddr2>[,...]] | 443 | addr=<adapter1>,<i2caddr1>[,<adapter2>,<i2caddr2>[,...]] |
426 | dbg=<flags1>,<flags2>... | 444 | dbg=<flags1>,<flags2>... |
427 | [defaultprobe=0] [dbg_probe=1] | 445 | [defaultprobe=1] [dbg_probe=1] |
428 | 446 | ||
429 | The addresses are specified in pairs, the first is the adapter ID and the | 447 | The addresses are specified in pairs, the first is the adapter ID and the |
430 | second is the I2C address on that adapter. | 448 | second is the I2C address on that adapter. |
@@ -532,3 +550,67 @@ Once you open the watchdog timer, you must write a 'V' character to the | |||
532 | device to close it, or the timer will not stop. This is a new semantic | 550 | device to close it, or the timer will not stop. This is a new semantic |
533 | for the driver, but makes it consistent with the rest of the watchdog | 551 | for the driver, but makes it consistent with the rest of the watchdog |
534 | drivers in Linux. | 552 | drivers in Linux. |
553 | |||
554 | |||
555 | Panic Timeouts | ||
556 | -------------- | ||
557 | |||
558 | The OpenIPMI driver supports the ability to put semi-custom and custom | ||
559 | events in the system event log if a panic occurs. if you enable the | ||
560 | 'Generate a panic event to all BMCs on a panic' option, you will get | ||
561 | one event on a panic in a standard IPMI event format. If you enable | ||
562 | the 'Generate OEM events containing the panic string' option, you will | ||
563 | also get a bunch of OEM events holding the panic string. | ||
564 | |||
565 | |||
566 | The field settings of the events are: | ||
567 | * Generator ID: 0x21 (kernel) | ||
568 | * EvM Rev: 0x03 (this event is formatting in IPMI 1.0 format) | ||
569 | * Sensor Type: 0x20 (OS critical stop sensor) | ||
570 | * Sensor #: The first byte of the panic string (0 if no panic string) | ||
571 | * Event Dir | Event Type: 0x6f (Assertion, sensor-specific event info) | ||
572 | * Event Data 1: 0xa1 (Runtime stop in OEM bytes 2 and 3) | ||
573 | * Event data 2: second byte of panic string | ||
574 | * Event data 3: third byte of panic string | ||
575 | See the IPMI spec for the details of the event layout. This event is | ||
576 | always sent to the local management controller. It will handle routing | ||
577 | the message to the right place | ||
578 | |||
579 | Other OEM events have the following format: | ||
580 | Record ID (bytes 0-1): Set by the SEL. | ||
581 | Record type (byte 2): 0xf0 (OEM non-timestamped) | ||
582 | byte 3: The slave address of the card saving the panic | ||
583 | byte 4: A sequence number (starting at zero) | ||
584 | The rest of the bytes (11 bytes) are the panic string. If the panic string | ||
585 | is longer than 11 bytes, multiple messages will be sent with increasing | ||
586 | sequence numbers. | ||
587 | |||
588 | Because you cannot send OEM events using the standard interface, this | ||
589 | function will attempt to find an SEL and add the events there. It | ||
590 | will first query the capabilities of the local management controller. | ||
591 | If it has an SEL, then they will be stored in the SEL of the local | ||
592 | management controller. If not, and the local management controller is | ||
593 | an event generator, the event receiver from the local management | ||
594 | controller will be queried and the events sent to the SEL on that | ||
595 | device. Otherwise, the events go nowhere since there is nowhere to | ||
596 | send them. | ||
597 | |||
598 | |||
599 | Poweroff | ||
600 | -------- | ||
601 | |||
602 | If the poweroff capability is selected, the IPMI driver will install | ||
603 | a shutdown function into the standard poweroff function pointer. This | ||
604 | is in the ipmi_poweroff module. When the system requests a powerdown, | ||
605 | it will send the proper IPMI commands to do this. This is supported on | ||
606 | several platforms. | ||
607 | |||
608 | There is a module parameter named "poweroff_control" that may either be zero | ||
609 | (do a power down) or 2 (do a power cycle, power the system off, then power | ||
610 | it on in a few seconds). Setting ipmi_poweroff.poweroff_control=x will do | ||
611 | the same thing on the kernel command line. The parameter is also available | ||
612 | via the proc filesystem in /proc/ipmi/poweroff_control. Note that if the | ||
613 | system does not support power cycling, it will always to the power off. | ||
614 | |||
615 | Note that if you have ACPI enabled, the system will prefer using ACPI to | ||
616 | power off. | ||
diff --git a/Documentation/basic_profiling.txt b/Documentation/basic_profiling.txt index 65e3dc2d4437..8764e9f70821 100644 --- a/Documentation/basic_profiling.txt +++ b/Documentation/basic_profiling.txt | |||
@@ -27,9 +27,13 @@ dump output readprofile -m /boot/System.map > captured_profile | |||
27 | 27 | ||
28 | Oprofile | 28 | Oprofile |
29 | -------- | 29 | -------- |
30 | Get the source (I use 0.8) from http://oprofile.sourceforge.net/ | 30 | |
31 | and add "idle=poll" to the kernel command line | 31 | Get the source (see Changes for required version) from |
32 | http://oprofile.sourceforge.net/ and add "idle=poll" to the kernel command | ||
33 | line. | ||
34 | |||
32 | Configure with CONFIG_PROFILING=y and CONFIG_OPROFILE=y & reboot on new kernel | 35 | Configure with CONFIG_PROFILING=y and CONFIG_OPROFILE=y & reboot on new kernel |
36 | |||
33 | ./configure --with-kernel-support | 37 | ./configure --with-kernel-support |
34 | make install | 38 | make install |
35 | 39 | ||
@@ -46,7 +50,7 @@ start opcontrol --start | |||
46 | stop opcontrol --stop | 50 | stop opcontrol --stop |
47 | dump output opreport > output_file | 51 | dump output opreport > output_file |
48 | 52 | ||
49 | To only report on the kernel, run opreport /boot/vmlinux > output_file | 53 | To only report on the kernel, run opreport -l /boot/vmlinux > output_file |
50 | 54 | ||
51 | A reset is needed to clear old statistics, which survive a reboot. | 55 | A reset is needed to clear old statistics, which survive a reboot. |
52 | 56 | ||
diff --git a/Documentation/dontdiff b/Documentation/dontdiff index 9a33bb94f74f..d4fda25db868 100644 --- a/Documentation/dontdiff +++ b/Documentation/dontdiff | |||
@@ -111,6 +111,7 @@ mkdep | |||
111 | mktables | 111 | mktables |
112 | modpost | 112 | modpost |
113 | modversions.h* | 113 | modversions.h* |
114 | offset.h | ||
114 | offsets.h | 115 | offsets.h |
115 | oui.c* | 116 | oui.c* |
116 | parse.c* | 117 | parse.c* |
diff --git a/Documentation/dvb/README.dibusb b/Documentation/dvb/README.dvb-usb index 7a9e958513f3..c7ed01b9f8f4 100644 --- a/Documentation/dvb/README.dibusb +++ b/Documentation/dvb/README.dvb-usb | |||
@@ -1,16 +1,40 @@ | |||
1 | Documentation for dib3000* frontend drivers and dibusb device driver | 1 | Documentation for dvb-usb-framework module and its devices |
2 | ==================================================================== | ||
3 | 2 | ||
4 | Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de), | 3 | Idea behind the dvb-usb-framework |
4 | ================================= | ||
5 | 5 | ||
6 | dibusb and dib3000mb/mc drivers based on GPL code, which has | 6 | In March 2005 I got the new Twinhan USB2.0 DVB-T device. They provided specs and a firmware. |
7 | 7 | ||
8 | Copyright (C) 2004 Amaury Demol for DiBcom (ademol@dibcom.fr) | 8 | Quite keen I wanted to put the driver (with some quirks of course) into dibusb. |
9 | After reading some specs and doing some USB snooping, it realized, that the | ||
10 | dibusb-driver would be a complete mess afterwards. So I decided to do it in a | ||
11 | different way: With the help of a dvb-usb-framework. | ||
9 | 12 | ||
10 | This program is free software; you can redistribute it and/or | 13 | The framework provides generic functions (mostly kernel API calls), such as: |
11 | modify it under the terms of the GNU General Public License as | ||
12 | published by the Free Software Foundation, version 2. | ||
13 | 14 | ||
15 | - Transport Stream URB handling in conjunction with dvb-demux-feed-control | ||
16 | (bulk and isoc (TODO) are supported) | ||
17 | - registering the device for the DVB-API | ||
18 | - registering an I2C-adapter if applicable | ||
19 | - remote-control/input-device handling | ||
20 | - firmware requesting and loading (currently just for the Cypress USB | ||
21 | controller) | ||
22 | - other functions/methods which can be shared by several drivers (such as | ||
23 | functions for bulk-control-commands) | ||
24 | |||
25 | The source code of the particular DVB USB devices does just the communication | ||
26 | with the device via the bus. The connection between the DVB-API-functionality | ||
27 | is done via callbacks, assigned in a static device-description (struct | ||
28 | dvb_usb_device) each device-driver has to have. | ||
29 | |||
30 | For an example have a look in drivers/media/dvb/dvb-usb/vp7045*. | ||
31 | |||
32 | Objective is to migrate all the usb-devices (dibusb, cinergyT2, maybe the | ||
33 | ttusb; flexcop-usb already benefits from the generic flexcop-device) to use | ||
34 | the dvb-usb-lib. | ||
35 | |||
36 | TODO: dynamic enabling and disabling of the pid-filter in regard to number of | ||
37 | feeds requested. | ||
14 | 38 | ||
15 | Supported devices USB1.1 | 39 | Supported devices USB1.1 |
16 | ======================== | 40 | ======================== |
@@ -55,22 +79,34 @@ Others: | |||
55 | - Grandtec USB DVB-T | 79 | - Grandtec USB DVB-T |
56 | http://www.grand.com.tw/ | 80 | http://www.grand.com.tw/ |
57 | 81 | ||
58 | - Avermedia AverTV DVBT USB (2) | 82 | - AVerMedia AverTV DVBT USB |
59 | http://www.avermedia.com/ | 83 | http://www.avermedia.com/ |
60 | 84 | ||
61 | - DiBcom USB DVB-T reference device (non-public) | 85 | - DiBcom USB DVB-T reference device (non-public) |
62 | 86 | ||
63 | 87 | ||
64 | Supported devices USB2.0 | 88 | Supported devices USB2.0-only |
65 | ======================== | 89 | ============================= |
66 | - Twinhan MagicBox II (2) | 90 | - Twinhan MagicBox II |
67 | http://www.twinhan.com/product_terrestrial_7.asp | 91 | http://www.twinhan.com/product_terrestrial_7.asp |
68 | 92 | ||
69 | - Hanftek UMT-010 (1) | 93 | - TwinhanDTV Alpha |
94 | http://www.twinhan.com/product_terrestrial_8.asp | ||
95 | |||
96 | - DigitalNow TinyUSB 2 DVB-t Receiver | ||
97 | http://www.digitalnow.com.au/DigitalNow%20tinyUSB2%20Specifications.html | ||
98 | |||
99 | - Hanftek UMT-010 | ||
70 | http://www.globalsources.com/si/6008819757082/ProductDetail/Digital-TV/product_id-100046529 | 100 | http://www.globalsources.com/si/6008819757082/ProductDetail/Digital-TV/product_id-100046529 |
71 | 101 | ||
72 | - Typhoon/Yakumo/HAMA DVB-T mobile USB2.0 (1) | 102 | |
103 | Supported devices USB2.0 and USB1.1 | ||
104 | ============================= | ||
105 | - Typhoon/Yakumo/HAMA/Yuan DVB-T mobile USB2.0 | ||
73 | http://www.yakumo.de/produkte/index.php?pid=1&ag=DVB-T | 106 | http://www.yakumo.de/produkte/index.php?pid=1&ag=DVB-T |
107 | http://www.yuan.com.tw/en/products/vdo_ub300.html | ||
108 | http://www.hama.de/portal/articleId*114663/action*2563 | ||
109 | http://www.anubisline.com/english/articlec.asp?id=50502&catid=002 | ||
74 | 110 | ||
75 | - Artec T1 USB TVBOX (FX2) (2) | 111 | - Artec T1 USB TVBOX (FX2) (2) |
76 | 112 | ||
@@ -81,14 +117,24 @@ Supported devices USB2.0 | |||
81 | 117 | ||
82 | - DiBcom USB2.0 DVB-T reference device (non-public) | 118 | - DiBcom USB2.0 DVB-T reference device (non-public) |
83 | 119 | ||
84 | 1) It is working almost. | 120 | - AVerMedia AverTV A800 DVB-T USB2.0 |
121 | |||
122 | 1) It is working almost - work-in-progress. | ||
85 | 2) No test reports received yet. | 123 | 2) No test reports received yet. |
86 | 124 | ||
125 | 0. History & News: | ||
126 | 2005-04-17 - all dibusb devices ported to make use of the dvb-usb-framework | ||
127 | 2005-04-02 - re-enabled and improved remote control code. | ||
128 | 2005-03-31 - ported the Yakumo/Hama/Typhoon DVB-T USB2.0 device to dvb-usb. | ||
129 | 2005-03-30 - first commit of the dvb-usb-module based on the dibusb-source. First device is a new driver for the | ||
130 | TwinhanDTV Alpha / MagicBox II USB2.0-only DVB-T device. | ||
87 | 131 | ||
88 | 0. NEWS: | 132 | (change from dvb-dibusb to dvb-usb) |
133 | 2005-03-28 - added support for the AVerMedia AverTV DVB-T USB2.0 device (Thanks to Glen Harris and Jiun-Kuei Jung, AVerMedia) | ||
134 | 2005-03-14 - added support for the Typhoon/Yakumo/HAMA DVB-T mobile USB2.0 | ||
89 | 2005-02-11 - added support for the KWorld/ADSTech Instant DVB-T USB2.0. Thanks a lot to Joachim von Caron | 135 | 2005-02-11 - added support for the KWorld/ADSTech Instant DVB-T USB2.0. Thanks a lot to Joachim von Caron |
90 | 2005-02-02 - added support for the Hauppauge Win-TV Nova-T USB2 | 136 | 2005-02-02 - added support for the Hauppauge Win-TV Nova-T USB2 |
91 | 2005-01-31 - distorted streaming is finally gone for USB1.1 devices | 137 | 2005-01-31 - distorted streaming is gone for USB1.1 devices |
92 | 2005-01-13 - moved the mirrored pid_filter_table back to dvb-dibusb | 138 | 2005-01-13 - moved the mirrored pid_filter_table back to dvb-dibusb |
93 | - first almost working version for HanfTek UMT-010 | 139 | - first almost working version for HanfTek UMT-010 |
94 | - found out, that Yakumo/HAMA/Typhoon are predessors of the HanfTek UMT-010 | 140 | - found out, that Yakumo/HAMA/Typhoon are predessors of the HanfTek UMT-010 |
@@ -99,7 +145,7 @@ Supported devices USB2.0 | |||
99 | 2004-12-26 - refactored the dibusb-driver, splitted into separate files | 145 | 2004-12-26 - refactored the dibusb-driver, splitted into separate files |
100 | - i2c-probing enabled | 146 | - i2c-probing enabled |
101 | 2004-12-06 - possibility for demod i2c-address probing | 147 | 2004-12-06 - possibility for demod i2c-address probing |
102 | - new usb IDs (Compro,Artec) | 148 | - new usb IDs (Compro, Artec) |
103 | 2004-11-23 - merged changes from DiB3000MC_ver2.1 | 149 | 2004-11-23 - merged changes from DiB3000MC_ver2.1 |
104 | - revised the debugging | 150 | - revised the debugging |
105 | - possibility to deliver the complete TS for USB2.0 | 151 | - possibility to deliver the complete TS for USB2.0 |
@@ -127,8 +173,8 @@ Supported devices USB2.0 | |||
127 | CTS Portable (Chinese Television System) | 173 | CTS Portable (Chinese Television System) |
128 | 2004-07-08 - firmware-extraction-2.422-problem solved, driver is now working | 174 | 2004-07-08 - firmware-extraction-2.422-problem solved, driver is now working |
129 | properly with firmware extracted from 2.422 | 175 | properly with firmware extracted from 2.422 |
130 | - #if for 2.6.4 (dvb), compile issue | 176 | - #if for 2.6.4 (dvb), compile issue |
131 | - changed firmware handling, see vp7041.txt sec 1.1 | 177 | - changed firmware handling, see vp7041.txt sec 1.1 |
132 | 2004-07-02 - some tuner modifications, v0.1, cleanups, first public | 178 | 2004-07-02 - some tuner modifications, v0.1, cleanups, first public |
133 | 2004-06-28 - now using the dvb_dmx_swfilter_packets, everything | 179 | 2004-06-28 - now using the dvb_dmx_swfilter_packets, everything |
134 | runs fine now | 180 | runs fine now |
@@ -139,38 +185,27 @@ Supported devices USB2.0 | |||
139 | 2004-05-11 - start writing the driver | 185 | 2004-05-11 - start writing the driver |
140 | 186 | ||
141 | 1. How to use? | 187 | 1. How to use? |
142 | NOTE: This driver was developed using Linux 2.6.6., | ||
143 | it is working with 2.6.7 and above. | ||
144 | |||
145 | Linux 2.4.x support is not planned, but patches are very welcome. | ||
146 | |||
147 | NOTE: I'm using Debian testing, so the following explaination (especially | ||
148 | the hotplug-path) needn't match your system, but probably it will :). | ||
149 | |||
150 | The driver is included in the kernel since Linux 2.6.10. | ||
151 | |||
152 | 1.1. Firmware | 188 | 1.1. Firmware |
153 | 189 | ||
154 | The USB driver needs to download a firmware to start working. | 190 | Most of the USB drivers need to download a firmware to start working. |
155 | |||
156 | You can either use "get_dvb_firmware dibusb" to download the firmware or you | ||
157 | can get it directly via | ||
158 | 191 | ||
159 | for USB1.1 (AN2135) | 192 | for USB1.1 (AN2135) you need: dvb-usb-dibusb-5.0.0.11.fw |
160 | http://www.linuxtv.org/downloads/firmware/dvb-dibusb-5.0.0.11.fw | 193 | for USB2.0 HanfTek: dvb-usb-umt-010-02.fw |
194 | for USB2.0 DiBcom: dvb-usb-dibusb-6.0.0.8.fw | ||
195 | for USB2.0 AVerMedia AverTV DVB-T USB2: dvb-usb-avertv-a800-01.fw | ||
196 | for USB2.0 TwinhanDTV Alpha/MagicBox II: dvb-usb-vp7045-01.fw | ||
161 | 197 | ||
162 | for USB1.1 (AN2235) (a few Artec T1 devices) | 198 | The files can be found on http://www.linuxtv.org/download/firmware/ . |
163 | http://www.linuxtv.org/downloads/firmware/dvb-dibusb-an2235-1.fw | ||
164 | 199 | ||
165 | for USB2.0 (FX2) Hauppauge, DiBcom | 200 | We do not have the permission (yet) to publish the following firmware-files. |
166 | http://www.linuxtv.org/downloads/firmware/dvb-dibusb-6.0.0.5.fw | 201 | You'll need to extract them from the windows drivers. |
167 | 202 | ||
168 | for USB2.0 ADSTech/Kworld USB2.0 | 203 | You should be able to use "get_dvb_firmware dvb-usb" to get the firmware: |
169 | http://www.linuxtv.org/downloads/firmware/dvb-dibusb-adstech-usb2-1.fw | ||
170 | |||
171 | for USB2.0 HanfTek | ||
172 | http://www.linuxtv.org/downloads/firmware/dvb-dibusb-an2235-1.fw | ||
173 | 204 | ||
205 | for USB1.1 (AN2235) (a few Artec T1 devices): dvb-usb-dibusb-an2235-01.fw | ||
206 | for USB2.0 Hauppauge: dvb-usb-nova-t-usb2-01.fw | ||
207 | for USB2.0 ADSTech/Kworld USB2.0: dvb-usb-adstech-usb2-01.fw | ||
208 | for USB2.0 Yakumo/Typhoon/Hama: dvb-usb-dtt200u-01.fw | ||
174 | 209 | ||
175 | 1.2. Compiling | 210 | 1.2. Compiling |
176 | 211 | ||
@@ -178,6 +213,9 @@ Since the driver is in the linux kernel, activating the driver in | |||
178 | your favorite config-environment should sufficient. I recommend | 213 | your favorite config-environment should sufficient. I recommend |
179 | to compile the driver as module. Hotplug does the rest. | 214 | to compile the driver as module. Hotplug does the rest. |
180 | 215 | ||
216 | If you use dvb-kernel enter the build-2.6 directory run 'make' and 'insmod.sh | ||
217 | load' afterwards. | ||
218 | |||
181 | 1.3. Loading the drivers | 219 | 1.3. Loading the drivers |
182 | 220 | ||
183 | Hotplug is able to load the driver, when it is needed (because you plugged | 221 | Hotplug is able to load the driver, when it is needed (because you plugged |
@@ -188,15 +226,13 @@ from withing the dvb-kernel cvs repository. | |||
188 | 226 | ||
189 | first have a look, which debug level are available: | 227 | first have a look, which debug level are available: |
190 | 228 | ||
191 | modinfo dib3000mb | 229 | modinfo dvb-usb |
192 | modinfo dib3000-common | 230 | modinfo dvb-usb-vp7045 |
193 | modinfo dib3000mc | 231 | etc. |
194 | modinfo dvb-dibusb | ||
195 | 232 | ||
196 | modprobe dib3000-common debug=<level> | 233 | modprobe dvb-usb debug=<level> |
197 | modprobe dib3000mb debug=<level> | 234 | modprobe dvb-usb-vp7045 debug=<level> |
198 | modprobe dib3000mc debug=<level> | 235 | etc. |
199 | modprobe dvb-dibusb debug=<level> | ||
200 | 236 | ||
201 | should do the trick. | 237 | should do the trick. |
202 | 238 | ||
@@ -204,52 +240,32 @@ When the driver is loaded successfully, the firmware file was in | |||
204 | the right place and the device is connected, the "Power"-LED should be | 240 | the right place and the device is connected, the "Power"-LED should be |
205 | turned on. | 241 | turned on. |
206 | 242 | ||
207 | At this point you should be able to start a dvb-capable application. For myself | 243 | At this point you should be able to start a dvb-capable application. I'm use |
208 | I used mplayer, dvbscan, tzap and kaxtv, they are working. Using the device | 244 | (t|s)zap, mplayer and dvbscan to test the basics. VDR-xine provides the |
209 | in vdr is working now also. | 245 | long-term test scenario. |
210 | 246 | ||
211 | 2. Known problems and bugs | 247 | 2. Known problems and bugs |
212 | 248 | ||
213 | - Don't remove the USB device while running an DVB application, your system will die. | 249 | - Don't remove the USB device while running an DVB application, your system |
250 | will go crazy or die most likely. | ||
214 | 251 | ||
215 | 2.1. Adding support for devices | 252 | 2.1. Adding support for devices |
216 | 253 | ||
217 | It is not possible to determine the range of devices based on the DiBcom | 254 | TODO |
218 | reference designs. This is because the reference design of DiBcom can be sold | ||
219 | to thirds, without telling DiBcom (so done with the Twinhan VP7041 and | ||
220 | the HAMA device). | ||
221 | |||
222 | When you think you have a device like this and the driver does not recognizes it, | ||
223 | please send the ****load*.inf and the ****cap*.inf of the Windows driver to me. | ||
224 | |||
225 | Sometimes the Vendor or Product ID is identical to the ones of Twinhan, even | ||
226 | though it is not a Twinhan device (e.g. HAMA), then please send me the name | ||
227 | of the device. I will add it to this list in order to make this clear to | ||
228 | others. | ||
229 | |||
230 | If you are familar with C you can also add the VID and PID of the device to | ||
231 | the dvb-dibusb-core.c-file and create a patch and send it over to me or to | ||
232 | the linux-dvb mailing list, _after_ you have tried compiling and modprobing | ||
233 | it. | ||
234 | 255 | ||
235 | 2.2. USB1.1 Bandwidth limitation | 256 | 2.2. USB1.1 Bandwidth limitation |
236 | 257 | ||
237 | Most of the currently supported devices are USB1.1 and thus they have a | 258 | A lot of the currently supported devices are USB1.1 and thus they have a |
238 | maximum bandwidth of about 5-6 MBit/s when connected to a USB2.0 hub. | 259 | maximum bandwidth of about 5-6 MBit/s when connected to a USB2.0 hub. |
239 | This is not enough for receiving the complete transport stream of a | 260 | This is not enough for receiving the complete transport stream of a |
240 | DVB-T channel (which can be about 16 MBit/s). Normally this is not a | 261 | DVB-T channel (which is about 16 MBit/s). Normally this is not a |
241 | problem, if you only want to watch TV (this does not apply for HDTV), | 262 | problem, if you only want to watch TV (this does not apply for HDTV), |
242 | but watching a channel while recording another channel on the same | 263 | but watching a channel while recording another channel on the same |
243 | frequency simply does not work very well. This applies to all USB1.1 | 264 | frequency simply does not work very well. This applies to all USB1.1 |
244 | DVB-T devices, not just dibusb) | 265 | DVB-T devices, not just the dvb-usb-devices) |
245 | |||
246 | Update: For the USB1.1 and VDR some work has been done (patches and comments | ||
247 | are still very welcome). Maybe the problem is solved in the meantime because I | ||
248 | now use the dmx_sw_filter function instead of dmx_sw_filter_packet. I hope the | ||
249 | linux-dvb software filter is able to get the best of the garbled TS. | ||
250 | 266 | ||
251 | The bug, where the TS is distorted by a heavy usage of the device is gone | 267 | The bug, where the TS is distorted by a heavy usage of the device is gone |
252 | definitely. All dibusb-devices I was using (Twinhan, Kworld, DiBcom) are | 268 | definitely. All dvb-usb-devices I was using (Twinhan, Kworld, DiBcom) are |
253 | working like charm now with VDR. Sometimes I even was able to record a channel | 269 | working like charm now with VDR. Sometimes I even was able to record a channel |
254 | and watch another one. | 270 | and watch another one. |
255 | 271 | ||
@@ -258,7 +274,7 @@ and watch another one. | |||
258 | Patches, comments and suggestions are very very welcome. | 274 | Patches, comments and suggestions are very very welcome. |
259 | 275 | ||
260 | 3. Acknowledgements | 276 | 3. Acknowledgements |
261 | Amaury Demol (ademol@dibcom.fr) and Francois Kanounnikoff from DiBcom for | 277 | Amaury Demol (ademol@dibcom.fr) and Francois Kanounnikoff from DiBcom for |
262 | providing specs, code and help, on which the dvb-dibusb, dib3000mb and | 278 | providing specs, code and help, on which the dvb-dibusb, dib3000mb and |
263 | dib3000mc are based. | 279 | dib3000mc are based. |
264 | 280 | ||
@@ -270,9 +286,16 @@ Patches, comments and suggestions are very very welcome. | |||
270 | 286 | ||
271 | Bernd Wagner for helping with huge bug reports and discussions. | 287 | Bernd Wagner for helping with huge bug reports and discussions. |
272 | 288 | ||
273 | Gunnar Wittich and Joachim von Caron for their trust for giving me | 289 | Gunnar Wittich and Joachim von Caron for their trust for providing |
274 | root-shells on their machines to implement support for new devices. | 290 | root-shells on their machines to implement support for new devices. |
275 | 291 | ||
292 | Glen Harris for bringing up, that there is a new dibusb-device and Jiun-Kuei | ||
293 | Jung from AVerMedia who kindly provided a special firmware to get the device | ||
294 | up and running in Linux. | ||
295 | |||
296 | Jennifer Chen, Jeff and Jack from Twinhan for kindly supporting by | ||
297 | writing the vp7045-driver. | ||
298 | |||
276 | Some guys on the linux-dvb mailing list for encouraging me | 299 | Some guys on the linux-dvb mailing list for encouraging me |
277 | 300 | ||
278 | Peter Schildmann >peter.schildmann-nospam-at-web.de< for his | 301 | Peter Schildmann >peter.schildmann-nospam-at-web.de< for his |
@@ -282,4 +305,4 @@ Patches, comments and suggestions are very very welcome. | |||
282 | Ulf Hermenau for helping me out with traditional chinese. | 305 | Ulf Hermenau for helping me out with traditional chinese. |
283 | 306 | ||
284 | André Smoktun and Christian Frömmel for supporting me with | 307 | André Smoktun and Christian Frömmel for supporting me with |
285 | hardware and listening to my problems very patient | 308 | hardware and listening to my problems very patient. |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 26414bc87c65..77511af45362 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -66,6 +66,14 @@ Who: Paul E. McKenney <paulmck@us.ibm.com> | |||
66 | 66 | ||
67 | --------------------------- | 67 | --------------------------- |
68 | 68 | ||
69 | What: remove verify_area() | ||
70 | When: July 2006 | ||
71 | Files: Various uaccess.h headers. | ||
72 | Why: Deprecated and redundant. access_ok() should be used instead. | ||
73 | Who: Jesper Juhl <juhl-lkml@dif.dk> | ||
74 | |||
75 | --------------------------- | ||
76 | |||
69 | What: IEEE1394 Audio and Music Data Transmission Protocol driver, | 77 | What: IEEE1394 Audio and Music Data Transmission Protocol driver, |
70 | Connection Management Procedures driver | 78 | Connection Management Procedures driver |
71 | When: November 2005 | 79 | When: November 2005 |
@@ -86,6 +94,16 @@ Who: Jody McIntyre <scjody@steamballoon.com> | |||
86 | 94 | ||
87 | --------------------------- | 95 | --------------------------- |
88 | 96 | ||
97 | What: register_serial/unregister_serial | ||
98 | When: December 2005 | ||
99 | Why: This interface does not allow serial ports to be registered against | ||
100 | a struct device, and as such does not allow correct power management | ||
101 | of such ports. 8250-based ports should use serial8250_register_port | ||
102 | and serial8250_unregister_port instead. | ||
103 | Who: Russell King <rmk@arm.linux.org.uk> | ||
104 | |||
105 | --------------------------- | ||
106 | |||
89 | What: i2c sysfs name change: in1_ref, vid deprecated in favour of cpu0_vid | 107 | What: i2c sysfs name change: in1_ref, vid deprecated in favour of cpu0_vid |
90 | When: November 2005 | 108 | When: November 2005 |
91 | Files: drivers/i2c/chips/adm1025.c, drivers/i2c/chips/adm1026.c | 109 | Files: drivers/i2c/chips/adm1025.c, drivers/i2c/chips/adm1026.c |
diff --git a/Documentation/filesystems/ext2.txt b/Documentation/filesystems/ext2.txt index b5cb9110cc6b..d16334ec48ba 100644 --- a/Documentation/filesystems/ext2.txt +++ b/Documentation/filesystems/ext2.txt | |||
@@ -58,6 +58,8 @@ noacl Don't support POSIX ACLs. | |||
58 | 58 | ||
59 | nobh Do not attach buffer_heads to file pagecache. | 59 | nobh Do not attach buffer_heads to file pagecache. |
60 | 60 | ||
61 | xip Use execute in place (no caching) if possible | ||
62 | |||
61 | grpquota,noquota,quota,usrquota Quota options are silently ignored by ext2. | 63 | grpquota,noquota,quota,usrquota Quota options are silently ignored by ext2. |
62 | 64 | ||
63 | 65 | ||
diff --git a/Documentation/filesystems/xip.txt b/Documentation/filesystems/xip.txt new file mode 100644 index 000000000000..6c0cef10eb4d --- /dev/null +++ b/Documentation/filesystems/xip.txt | |||
@@ -0,0 +1,67 @@ | |||
1 | Execute-in-place for file mappings | ||
2 | ---------------------------------- | ||
3 | |||
4 | Motivation | ||
5 | ---------- | ||
6 | File mappings are performed by mapping page cache pages to userspace. In | ||
7 | addition, read&write type file operations also transfer data from/to the page | ||
8 | cache. | ||
9 | |||
10 | For memory backed storage devices that use the block device interface, the page | ||
11 | cache pages are in fact copies of the original storage. Various approaches | ||
12 | exist to work around the need for an extra copy. The ramdisk driver for example | ||
13 | does read the data into the page cache, keeps a reference, and discards the | ||
14 | original data behind later on. | ||
15 | |||
16 | Execute-in-place solves this issue the other way around: instead of keeping | ||
17 | data in the page cache, the need to have a page cache copy is eliminated | ||
18 | completely. With execute-in-place, read&write type operations are performed | ||
19 | directly from/to the memory backed storage device. For file mappings, the | ||
20 | storage device itself is mapped directly into userspace. | ||
21 | |||
22 | This implementation was initialy written for shared memory segments between | ||
23 | different virtual machines on s390 hardware to allow multiple machines to | ||
24 | share the same binaries and libraries. | ||
25 | |||
26 | Implementation | ||
27 | -------------- | ||
28 | Execute-in-place is implemented in three steps: block device operation, | ||
29 | address space operation, and file operations. | ||
30 | |||
31 | A block device operation named direct_access is used to retrieve a | ||
32 | reference (pointer) to a block on-disk. The reference is supposed to be | ||
33 | cpu-addressable, physical address and remain valid until the release operation | ||
34 | is performed. A struct block_device reference is used to address the device, | ||
35 | and a sector_t argument is used to identify the individual block. As an | ||
36 | alternative, memory technology devices can be used for this. | ||
37 | |||
38 | The block device operation is optional, these block devices support it as of | ||
39 | today: | ||
40 | - dcssblk: s390 dcss block device driver | ||
41 | |||
42 | An address space operation named get_xip_page is used to retrieve reference | ||
43 | to a struct page. To address the target page, a reference to an address_space, | ||
44 | and a sector number is provided. A 3rd argument indicates whether the | ||
45 | function should allocate blocks if needed. | ||
46 | |||
47 | This address space operation is mutually exclusive with readpage&writepage that | ||
48 | do page cache read/write operations. | ||
49 | The following filesystems support it as of today: | ||
50 | - ext2: the second extended filesystem, see Documentation/filesystems/ext2.txt | ||
51 | |||
52 | A set of file operations that do utilize get_xip_page can be found in | ||
53 | mm/filemap_xip.c . The following file operation implementations are provided: | ||
54 | - aio_read/aio_write | ||
55 | - readv/writev | ||
56 | - sendfile | ||
57 | |||
58 | The generic file operations do_sync_read/do_sync_write can be used to implement | ||
59 | classic synchronous IO calls. | ||
60 | |||
61 | Shortcomings | ||
62 | ------------ | ||
63 | This implementation is limited to storage devices that are cpu addressable at | ||
64 | all times (no highmem or such). It works well on rom/ram, but enhancements are | ||
65 | needed to make it work with flash in read+write mode. | ||
66 | Putting the Linux kernel and/or its modules on a xip filesystem does not mean | ||
67 | they are not copied. | ||
diff --git a/Documentation/keys.txt b/Documentation/keys.txt index 36d80aeeaf28..0321ded4b9ae 100644 --- a/Documentation/keys.txt +++ b/Documentation/keys.txt | |||
@@ -22,6 +22,7 @@ This document has the following sections: | |||
22 | - New procfs files | 22 | - New procfs files |
23 | - Userspace system call interface | 23 | - Userspace system call interface |
24 | - Kernel services | 24 | - Kernel services |
25 | - Notes on accessing payload contents | ||
25 | - Defining a key type | 26 | - Defining a key type |
26 | - Request-key callback service | 27 | - Request-key callback service |
27 | - Key access filesystem | 28 | - Key access filesystem |
@@ -45,27 +46,26 @@ Each key has a number of attributes: | |||
45 | - State. | 46 | - State. |
46 | 47 | ||
47 | 48 | ||
48 | (*) Each key is issued a serial number of type key_serial_t that is unique | 49 | (*) Each key is issued a serial number of type key_serial_t that is unique for |
49 | for the lifetime of that key. All serial numbers are positive non-zero | 50 | the lifetime of that key. All serial numbers are positive non-zero 32-bit |
50 | 32-bit integers. | 51 | integers. |
51 | 52 | ||
52 | Userspace programs can use a key's serial numbers as a way to gain access | 53 | Userspace programs can use a key's serial numbers as a way to gain access |
53 | to it, subject to permission checking. | 54 | to it, subject to permission checking. |
54 | 55 | ||
55 | (*) Each key is of a defined "type". Types must be registered inside the | 56 | (*) Each key is of a defined "type". Types must be registered inside the |
56 | kernel by a kernel service (such as a filesystem) before keys of that | 57 | kernel by a kernel service (such as a filesystem) before keys of that type |
57 | type can be added or used. Userspace programs cannot define new types | 58 | can be added or used. Userspace programs cannot define new types directly. |
58 | directly. | ||
59 | 59 | ||
60 | Key types are represented in the kernel by struct key_type. This defines | 60 | Key types are represented in the kernel by struct key_type. This defines a |
61 | a number of operations that can be performed on a key of that type. | 61 | number of operations that can be performed on a key of that type. |
62 | 62 | ||
63 | Should a type be removed from the system, all the keys of that type will | 63 | Should a type be removed from the system, all the keys of that type will |
64 | be invalidated. | 64 | be invalidated. |
65 | 65 | ||
66 | (*) Each key has a description. This should be a printable string. The key | 66 | (*) Each key has a description. This should be a printable string. The key |
67 | type provides an operation to perform a match between the description on | 67 | type provides an operation to perform a match between the description on a |
68 | a key and a criterion string. | 68 | key and a criterion string. |
69 | 69 | ||
70 | (*) Each key has an owner user ID, a group ID and a permissions mask. These | 70 | (*) Each key has an owner user ID, a group ID and a permissions mask. These |
71 | are used to control what a process may do to a key from userspace, and | 71 | are used to control what a process may do to a key from userspace, and |
@@ -74,10 +74,10 @@ Each key has a number of attributes: | |||
74 | (*) Each key can be set to expire at a specific time by the key type's | 74 | (*) Each key can be set to expire at a specific time by the key type's |
75 | instantiation function. Keys can also be immortal. | 75 | instantiation function. Keys can also be immortal. |
76 | 76 | ||
77 | (*) Each key can have a payload. This is a quantity of data that represent | 77 | (*) Each key can have a payload. This is a quantity of data that represent the |
78 | the actual "key". In the case of a keyring, this is a list of keys to | 78 | actual "key". In the case of a keyring, this is a list of keys to which |
79 | which the keyring links; in the case of a user-defined key, it's an | 79 | the keyring links; in the case of a user-defined key, it's an arbitrary |
80 | arbitrary blob of data. | 80 | blob of data. |
81 | 81 | ||
82 | Having a payload is not required; and the payload can, in fact, just be a | 82 | Having a payload is not required; and the payload can, in fact, just be a |
83 | value stored in the struct key itself. | 83 | value stored in the struct key itself. |
@@ -92,8 +92,8 @@ Each key has a number of attributes: | |||
92 | 92 | ||
93 | (*) Each key can be in one of a number of basic states: | 93 | (*) Each key can be in one of a number of basic states: |
94 | 94 | ||
95 | (*) Uninstantiated. The key exists, but does not have any data | 95 | (*) Uninstantiated. The key exists, but does not have any data attached. |
96 | attached. Keys being requested from userspace will be in this state. | 96 | Keys being requested from userspace will be in this state. |
97 | 97 | ||
98 | (*) Instantiated. This is the normal state. The key is fully formed, and | 98 | (*) Instantiated. This is the normal state. The key is fully formed, and |
99 | has data attached. | 99 | has data attached. |
@@ -140,10 +140,10 @@ The key service provides a number of features besides keys: | |||
140 | clone, fork, vfork or execve occurs. A new keyring is created only when | 140 | clone, fork, vfork or execve occurs. A new keyring is created only when |
141 | required. | 141 | required. |
142 | 142 | ||
143 | The process-specific keyring is replaced with an empty one in the child | 143 | The process-specific keyring is replaced with an empty one in the child on |
144 | on clone, fork, vfork unless CLONE_THREAD is supplied, in which case it | 144 | clone, fork, vfork unless CLONE_THREAD is supplied, in which case it is |
145 | is shared. execve also discards the process's process keyring and creates | 145 | shared. execve also discards the process's process keyring and creates a |
146 | a new one. | 146 | new one. |
147 | 147 | ||
148 | The session-specific keyring is persistent across clone, fork, vfork and | 148 | The session-specific keyring is persistent across clone, fork, vfork and |
149 | execve, even when the latter executes a set-UID or set-GID binary. A | 149 | execve, even when the latter executes a set-UID or set-GID binary. A |
@@ -177,11 +177,11 @@ The key service provides a number of features besides keys: | |||
177 | If a system call that modifies a key or keyring in some way would put the | 177 | If a system call that modifies a key or keyring in some way would put the |
178 | user over quota, the operation is refused and error EDQUOT is returned. | 178 | user over quota, the operation is refused and error EDQUOT is returned. |
179 | 179 | ||
180 | (*) There's a system call interface by which userspace programs can create | 180 | (*) There's a system call interface by which userspace programs can create and |
181 | and manipulate keys and keyrings. | 181 | manipulate keys and keyrings. |
182 | 182 | ||
183 | (*) There's a kernel interface by which services can register types and | 183 | (*) There's a kernel interface by which services can register types and search |
184 | search for keys. | 184 | for keys. |
185 | 185 | ||
186 | (*) There's a way for the a search done from the kernel to call back to | 186 | (*) There's a way for the a search done from the kernel to call back to |
187 | userspace to request a key that can't be found in a process's keyrings. | 187 | userspace to request a key that can't be found in a process's keyrings. |
@@ -194,9 +194,9 @@ The key service provides a number of features besides keys: | |||
194 | KEY ACCESS PERMISSIONS | 194 | KEY ACCESS PERMISSIONS |
195 | ====================== | 195 | ====================== |
196 | 196 | ||
197 | Keys have an owner user ID, a group access ID, and a permissions mask. The | 197 | Keys have an owner user ID, a group access ID, and a permissions mask. The mask |
198 | mask has up to eight bits each for user, group and other access. Only five of | 198 | has up to eight bits each for user, group and other access. Only five of each |
199 | each set of eight bits are defined. These permissions granted are: | 199 | set of eight bits are defined. These permissions granted are: |
200 | 200 | ||
201 | (*) View | 201 | (*) View |
202 | 202 | ||
@@ -210,8 +210,8 @@ each set of eight bits are defined. These permissions granted are: | |||
210 | 210 | ||
211 | (*) Write | 211 | (*) Write |
212 | 212 | ||
213 | This permits a key's payload to be instantiated or updated, or it allows | 213 | This permits a key's payload to be instantiated or updated, or it allows a |
214 | a link to be added to or removed from a keyring. | 214 | link to be added to or removed from a keyring. |
215 | 215 | ||
216 | (*) Search | 216 | (*) Search |
217 | 217 | ||
@@ -238,8 +238,8 @@ about the status of the key service: | |||
238 | (*) /proc/keys | 238 | (*) /proc/keys |
239 | 239 | ||
240 | This lists all the keys on the system, giving information about their | 240 | This lists all the keys on the system, giving information about their |
241 | type, description and permissions. The payload of the key is not | 241 | type, description and permissions. The payload of the key is not available |
242 | available this way: | 242 | this way: |
243 | 243 | ||
244 | SERIAL FLAGS USAGE EXPY PERM UID GID TYPE DESCRIPTION: SUMMARY | 244 | SERIAL FLAGS USAGE EXPY PERM UID GID TYPE DESCRIPTION: SUMMARY |
245 | 00000001 I----- 39 perm 1f0000 0 0 keyring _uid_ses.0: 1/4 | 245 | 00000001 I----- 39 perm 1f0000 0 0 keyring _uid_ses.0: 1/4 |
@@ -318,21 +318,21 @@ The main syscalls are: | |||
318 | If a key of the same type and description as that proposed already exists | 318 | If a key of the same type and description as that proposed already exists |
319 | in the keyring, this will try to update it with the given payload, or it | 319 | in the keyring, this will try to update it with the given payload, or it |
320 | will return error EEXIST if that function is not supported by the key | 320 | will return error EEXIST if that function is not supported by the key |
321 | type. The process must also have permission to write to the key to be | 321 | type. The process must also have permission to write to the key to be able |
322 | able to update it. The new key will have all user permissions granted and | 322 | to update it. The new key will have all user permissions granted and no |
323 | no group or third party permissions. | 323 | group or third party permissions. |
324 | 324 | ||
325 | Otherwise, this will attempt to create a new key of the specified type | 325 | Otherwise, this will attempt to create a new key of the specified type and |
326 | and description, and to instantiate it with the supplied payload and | 326 | description, and to instantiate it with the supplied payload and attach it |
327 | attach it to the keyring. In this case, an error will be generated if the | 327 | to the keyring. In this case, an error will be generated if the process |
328 | process does not have permission to write to the keyring. | 328 | does not have permission to write to the keyring. |
329 | 329 | ||
330 | The payload is optional, and the pointer can be NULL if not required by | 330 | The payload is optional, and the pointer can be NULL if not required by |
331 | the type. The payload is plen in size, and plen can be zero for an empty | 331 | the type. The payload is plen in size, and plen can be zero for an empty |
332 | payload. | 332 | payload. |
333 | 333 | ||
334 | A new keyring can be generated by setting type "keyring", the keyring | 334 | A new keyring can be generated by setting type "keyring", the keyring name |
335 | name as the description (or NULL) and setting the payload to NULL. | 335 | as the description (or NULL) and setting the payload to NULL. |
336 | 336 | ||
337 | User defined keys can be created by specifying type "user". It is | 337 | User defined keys can be created by specifying type "user". It is |
338 | recommended that a user defined key's description by prefixed with a type | 338 | recommended that a user defined key's description by prefixed with a type |
@@ -369,9 +369,9 @@ The keyctl syscall functions are: | |||
369 | key_serial_t keyctl(KEYCTL_GET_KEYRING_ID, key_serial_t id, | 369 | key_serial_t keyctl(KEYCTL_GET_KEYRING_ID, key_serial_t id, |
370 | int create); | 370 | int create); |
371 | 371 | ||
372 | The special key specified by "id" is looked up (with the key being | 372 | The special key specified by "id" is looked up (with the key being created |
373 | created if necessary) and the ID of the key or keyring thus found is | 373 | if necessary) and the ID of the key or keyring thus found is returned if |
374 | returned if it exists. | 374 | it exists. |
375 | 375 | ||
376 | If the key does not yet exist, the key will be created if "create" is | 376 | If the key does not yet exist, the key will be created if "create" is |
377 | non-zero; and the error ENOKEY will be returned if "create" is zero. | 377 | non-zero; and the error ENOKEY will be returned if "create" is zero. |
@@ -402,8 +402,8 @@ The keyctl syscall functions are: | |||
402 | 402 | ||
403 | This will try to update the specified key with the given payload, or it | 403 | This will try to update the specified key with the given payload, or it |
404 | will return error EOPNOTSUPP if that function is not supported by the key | 404 | will return error EOPNOTSUPP if that function is not supported by the key |
405 | type. The process must also have permission to write to the key to be | 405 | type. The process must also have permission to write to the key to be able |
406 | able to update it. | 406 | to update it. |
407 | 407 | ||
408 | The payload is of length plen, and may be absent or empty as for | 408 | The payload is of length plen, and may be absent or empty as for |
409 | add_key(). | 409 | add_key(). |
@@ -422,8 +422,8 @@ The keyctl syscall functions are: | |||
422 | 422 | ||
423 | long keyctl(KEYCTL_CHOWN, key_serial_t key, uid_t uid, gid_t gid); | 423 | long keyctl(KEYCTL_CHOWN, key_serial_t key, uid_t uid, gid_t gid); |
424 | 424 | ||
425 | This function permits a key's owner and group ID to be changed. Either | 425 | This function permits a key's owner and group ID to be changed. Either one |
426 | one of uid or gid can be set to -1 to suppress that change. | 426 | of uid or gid can be set to -1 to suppress that change. |
427 | 427 | ||
428 | Only the superuser can change a key's owner to something other than the | 428 | Only the superuser can change a key's owner to something other than the |
429 | key's current owner. Similarly, only the superuser can change a key's | 429 | key's current owner. Similarly, only the superuser can change a key's |
@@ -484,12 +484,12 @@ The keyctl syscall functions are: | |||
484 | 484 | ||
485 | long keyctl(KEYCTL_LINK, key_serial_t keyring, key_serial_t key); | 485 | long keyctl(KEYCTL_LINK, key_serial_t keyring, key_serial_t key); |
486 | 486 | ||
487 | This function creates a link from the keyring to the key. The process | 487 | This function creates a link from the keyring to the key. The process must |
488 | must have write permission on the keyring and must have link permission | 488 | have write permission on the keyring and must have link permission on the |
489 | on the key. | 489 | key. |
490 | 490 | ||
491 | Should the keyring not be a keyring, error ENOTDIR will result; and if | 491 | Should the keyring not be a keyring, error ENOTDIR will result; and if the |
492 | the keyring is full, error ENFILE will result. | 492 | keyring is full, error ENFILE will result. |
493 | 493 | ||
494 | The link procedure checks the nesting of the keyrings, returning ELOOP if | 494 | The link procedure checks the nesting of the keyrings, returning ELOOP if |
495 | it appears to deep or EDEADLK if the link would introduce a cycle. | 495 | it appears to deep or EDEADLK if the link would introduce a cycle. |
@@ -503,8 +503,8 @@ The keyctl syscall functions are: | |||
503 | specified key, and removes it if found. Subsequent links to that key are | 503 | specified key, and removes it if found. Subsequent links to that key are |
504 | ignored. The process must have write permission on the keyring. | 504 | ignored. The process must have write permission on the keyring. |
505 | 505 | ||
506 | If the keyring is not a keyring, error ENOTDIR will result; and if the | 506 | If the keyring is not a keyring, error ENOTDIR will result; and if the key |
507 | key is not present, error ENOENT will be the result. | 507 | is not present, error ENOENT will be the result. |
508 | 508 | ||
509 | 509 | ||
510 | (*) Search a keyring tree for a key: | 510 | (*) Search a keyring tree for a key: |
@@ -513,9 +513,9 @@ The keyctl syscall functions are: | |||
513 | const char *type, const char *description, | 513 | const char *type, const char *description, |
514 | key_serial_t dest_keyring); | 514 | key_serial_t dest_keyring); |
515 | 515 | ||
516 | This searches the keyring tree headed by the specified keyring until a | 516 | This searches the keyring tree headed by the specified keyring until a key |
517 | key is found that matches the type and description criteria. Each keyring | 517 | is found that matches the type and description criteria. Each keyring is |
518 | is checked for keys before recursion into its children occurs. | 518 | checked for keys before recursion into its children occurs. |
519 | 519 | ||
520 | The process must have search permission on the top level keyring, or else | 520 | The process must have search permission on the top level keyring, or else |
521 | error EACCES will result. Only keyrings that the process has search | 521 | error EACCES will result. Only keyrings that the process has search |
@@ -549,8 +549,8 @@ The keyctl syscall functions are: | |||
549 | As much of the data as can be fitted into the buffer will be copied to | 549 | As much of the data as can be fitted into the buffer will be copied to |
550 | userspace if the buffer pointer is not NULL. | 550 | userspace if the buffer pointer is not NULL. |
551 | 551 | ||
552 | On a successful return, the function will always return the amount of | 552 | On a successful return, the function will always return the amount of data |
553 | data available rather than the amount copied. | 553 | available rather than the amount copied. |
554 | 554 | ||
555 | 555 | ||
556 | (*) Instantiate a partially constructed key. | 556 | (*) Instantiate a partially constructed key. |
@@ -568,8 +568,8 @@ The keyctl syscall functions are: | |||
568 | it, and the key must be uninstantiated. | 568 | it, and the key must be uninstantiated. |
569 | 569 | ||
570 | If a keyring is specified (non-zero), the key will also be linked into | 570 | If a keyring is specified (non-zero), the key will also be linked into |
571 | that keyring, however all the constraints applying in KEYCTL_LINK apply | 571 | that keyring, however all the constraints applying in KEYCTL_LINK apply in |
572 | in this case too. | 572 | this case too. |
573 | 573 | ||
574 | The payload and plen arguments describe the payload data as for add_key(). | 574 | The payload and plen arguments describe the payload data as for add_key(). |
575 | 575 | ||
@@ -587,8 +587,39 @@ The keyctl syscall functions are: | |||
587 | it, and the key must be uninstantiated. | 587 | it, and the key must be uninstantiated. |
588 | 588 | ||
589 | If a keyring is specified (non-zero), the key will also be linked into | 589 | If a keyring is specified (non-zero), the key will also be linked into |
590 | that keyring, however all the constraints applying in KEYCTL_LINK apply | 590 | that keyring, however all the constraints applying in KEYCTL_LINK apply in |
591 | in this case too. | 591 | this case too. |
592 | |||
593 | |||
594 | (*) Set the default request-key destination keyring. | ||
595 | |||
596 | long keyctl(KEYCTL_SET_REQKEY_KEYRING, int reqkey_defl); | ||
597 | |||
598 | This sets the default keyring to which implicitly requested keys will be | ||
599 | attached for this thread. reqkey_defl should be one of these constants: | ||
600 | |||
601 | CONSTANT VALUE NEW DEFAULT KEYRING | ||
602 | ====================================== ====== ======================= | ||
603 | KEY_REQKEY_DEFL_NO_CHANGE -1 No change | ||
604 | KEY_REQKEY_DEFL_DEFAULT 0 Default[1] | ||
605 | KEY_REQKEY_DEFL_THREAD_KEYRING 1 Thread keyring | ||
606 | KEY_REQKEY_DEFL_PROCESS_KEYRING 2 Process keyring | ||
607 | KEY_REQKEY_DEFL_SESSION_KEYRING 3 Session keyring | ||
608 | KEY_REQKEY_DEFL_USER_KEYRING 4 User keyring | ||
609 | KEY_REQKEY_DEFL_USER_SESSION_KEYRING 5 User session keyring | ||
610 | KEY_REQKEY_DEFL_GROUP_KEYRING 6 Group keyring | ||
611 | |||
612 | The old default will be returned if successful and error EINVAL will be | ||
613 | returned if reqkey_defl is not one of the above values. | ||
614 | |||
615 | The default keyring can be overridden by the keyring indicated to the | ||
616 | request_key() system call. | ||
617 | |||
618 | Note that this setting is inherited across fork/exec. | ||
619 | |||
620 | [1] The default default is: the thread keyring if there is one, otherwise | ||
621 | the process keyring if there is one, otherwise the session keyring if | ||
622 | there is one, otherwise the user default session keyring. | ||
592 | 623 | ||
593 | 624 | ||
594 | =============== | 625 | =============== |
@@ -601,17 +632,14 @@ be broken down into two areas: keys and key types. | |||
601 | Dealing with keys is fairly straightforward. Firstly, the kernel service | 632 | Dealing with keys is fairly straightforward. Firstly, the kernel service |
602 | registers its type, then it searches for a key of that type. It should retain | 633 | registers its type, then it searches for a key of that type. It should retain |
603 | the key as long as it has need of it, and then it should release it. For a | 634 | the key as long as it has need of it, and then it should release it. For a |
604 | filesystem or device file, a search would probably be performed during the | 635 | filesystem or device file, a search would probably be performed during the open |
605 | open call, and the key released upon close. How to deal with conflicting keys | 636 | call, and the key released upon close. How to deal with conflicting keys due to |
606 | due to two different users opening the same file is left to the filesystem | 637 | two different users opening the same file is left to the filesystem author to |
607 | author to solve. | 638 | solve. |
608 | 639 | ||
609 | When accessing a key's payload data, key->lock should be at least read locked, | 640 | When accessing a key's payload contents, certain precautions must be taken to |
610 | or else the data may be changed by an update being performed from userspace | 641 | prevent access vs modification races. See the section "Notes on accessing |
611 | whilst the driver or filesystem is trying to access it. If no update method is | 642 | payload contents" for more information. |
612 | supplied, then the key's payload may be accessed without holding a lock as | ||
613 | there is no way to change it, provided it can be guaranteed that the key's | ||
614 | type definition won't go away. | ||
615 | 643 | ||
616 | (*) To search for a key, call: | 644 | (*) To search for a key, call: |
617 | 645 | ||
@@ -629,6 +657,9 @@ type definition won't go away. | |||
629 | Should the function fail error ENOKEY, EKEYEXPIRED or EKEYREVOKED will be | 657 | Should the function fail error ENOKEY, EKEYEXPIRED or EKEYREVOKED will be |
630 | returned. | 658 | returned. |
631 | 659 | ||
660 | If successful, the key will have been attached to the default keyring for | ||
661 | implicitly obtained request-key keys, as set by KEYCTL_SET_REQKEY_KEYRING. | ||
662 | |||
632 | 663 | ||
633 | (*) When it is no longer required, the key should be released using: | 664 | (*) When it is no longer required, the key should be released using: |
634 | 665 | ||
@@ -690,6 +721,54 @@ type definition won't go away. | |||
690 | void unregister_key_type(struct key_type *type); | 721 | void unregister_key_type(struct key_type *type); |
691 | 722 | ||
692 | 723 | ||
724 | =================================== | ||
725 | NOTES ON ACCESSING PAYLOAD CONTENTS | ||
726 | =================================== | ||
727 | |||
728 | The simplest payload is just a number in key->payload.value. In this case, | ||
729 | there's no need to indulge in RCU or locking when accessing the payload. | ||
730 | |||
731 | More complex payload contents must be allocated and a pointer to them set in | ||
732 | key->payload.data. One of the following ways must be selected to access the | ||
733 | data: | ||
734 | |||
735 | (1) Unmodifyable key type. | ||
736 | |||
737 | If the key type does not have a modify method, then the key's payload can | ||
738 | be accessed without any form of locking, provided that it's known to be | ||
739 | instantiated (uninstantiated keys cannot be "found"). | ||
740 | |||
741 | (2) The key's semaphore. | ||
742 | |||
743 | The semaphore could be used to govern access to the payload and to control | ||
744 | the payload pointer. It must be write-locked for modifications and would | ||
745 | have to be read-locked for general access. The disadvantage of doing this | ||
746 | is that the accessor may be required to sleep. | ||
747 | |||
748 | (3) RCU. | ||
749 | |||
750 | RCU must be used when the semaphore isn't already held; if the semaphore | ||
751 | is held then the contents can't change under you unexpectedly as the | ||
752 | semaphore must still be used to serialise modifications to the key. The | ||
753 | key management code takes care of this for the key type. | ||
754 | |||
755 | However, this means using: | ||
756 | |||
757 | rcu_read_lock() ... rcu_dereference() ... rcu_read_unlock() | ||
758 | |||
759 | to read the pointer, and: | ||
760 | |||
761 | rcu_dereference() ... rcu_assign_pointer() ... call_rcu() | ||
762 | |||
763 | to set the pointer and dispose of the old contents after a grace period. | ||
764 | Note that only the key type should ever modify a key's payload. | ||
765 | |||
766 | Furthermore, an RCU controlled payload must hold a struct rcu_head for the | ||
767 | use of call_rcu() and, if the payload is of variable size, the length of | ||
768 | the payload. key->datalen cannot be relied upon to be consistent with the | ||
769 | payload just dereferenced if the key's semaphore is not held. | ||
770 | |||
771 | |||
693 | =================== | 772 | =================== |
694 | DEFINING A KEY TYPE | 773 | DEFINING A KEY TYPE |
695 | =================== | 774 | =================== |
@@ -717,15 +796,15 @@ The structure has a number of fields, some of which are mandatory: | |||
717 | 796 | ||
718 | int key_payload_reserve(struct key *key, size_t datalen); | 797 | int key_payload_reserve(struct key *key, size_t datalen); |
719 | 798 | ||
720 | With the revised data length. Error EDQUOT will be returned if this is | 799 | With the revised data length. Error EDQUOT will be returned if this is not |
721 | not viable. | 800 | viable. |
722 | 801 | ||
723 | 802 | ||
724 | (*) int (*instantiate)(struct key *key, const void *data, size_t datalen); | 803 | (*) int (*instantiate)(struct key *key, const void *data, size_t datalen); |
725 | 804 | ||
726 | This method is called to attach a payload to a key during construction. | 805 | This method is called to attach a payload to a key during construction. |
727 | The payload attached need not bear any relation to the data passed to | 806 | The payload attached need not bear any relation to the data passed to this |
728 | this function. | 807 | function. |
729 | 808 | ||
730 | If the amount of data attached to the key differs from the size in | 809 | If the amount of data attached to the key differs from the size in |
731 | keytype->def_datalen, then key_payload_reserve() should be called. | 810 | keytype->def_datalen, then key_payload_reserve() should be called. |
@@ -734,38 +813,47 @@ The structure has a number of fields, some of which are mandatory: | |||
734 | The fact that KEY_FLAG_INSTANTIATED is not set in key->flags prevents | 813 | The fact that KEY_FLAG_INSTANTIATED is not set in key->flags prevents |
735 | anything else from gaining access to the key. | 814 | anything else from gaining access to the key. |
736 | 815 | ||
737 | This method may sleep if it wishes. | 816 | It is safe to sleep in this method. |
738 | 817 | ||
739 | 818 | ||
740 | (*) int (*duplicate)(struct key *key, const struct key *source); | 819 | (*) int (*duplicate)(struct key *key, const struct key *source); |
741 | 820 | ||
742 | If this type of key can be duplicated, then this method should be | 821 | If this type of key can be duplicated, then this method should be |
743 | provided. It is called to copy the payload attached to the source into | 822 | provided. It is called to copy the payload attached to the source into the |
744 | the new key. The data length on the new key will have been updated and | 823 | new key. The data length on the new key will have been updated and the |
745 | the quota adjusted already. | 824 | quota adjusted already. |
746 | 825 | ||
747 | This method will be called with the source key's semaphore read-locked to | 826 | This method will be called with the source key's semaphore read-locked to |
748 | prevent its payload from being changed. It is safe to sleep here. | 827 | prevent its payload from being changed, thus RCU constraints need not be |
828 | applied to the source key. | ||
829 | |||
830 | This method does not have to lock the destination key in order to attach a | ||
831 | payload. The fact that KEY_FLAG_INSTANTIATED is not set in key->flags | ||
832 | prevents anything else from gaining access to the key. | ||
833 | |||
834 | It is safe to sleep in this method. | ||
749 | 835 | ||
750 | 836 | ||
751 | (*) int (*update)(struct key *key, const void *data, size_t datalen); | 837 | (*) int (*update)(struct key *key, const void *data, size_t datalen); |
752 | 838 | ||
753 | If this type of key can be updated, then this method should be | 839 | If this type of key can be updated, then this method should be provided. |
754 | provided. It is called to update a key's payload from the blob of data | 840 | It is called to update a key's payload from the blob of data provided. |
755 | provided. | ||
756 | 841 | ||
757 | key_payload_reserve() should be called if the data length might change | 842 | key_payload_reserve() should be called if the data length might change |
758 | before any changes are actually made. Note that if this succeeds, the | 843 | before any changes are actually made. Note that if this succeeds, the type |
759 | type is committed to changing the key because it's already been altered, | 844 | is committed to changing the key because it's already been altered, so all |
760 | so all memory allocation must be done first. | 845 | memory allocation must be done first. |
846 | |||
847 | The key will have its semaphore write-locked before this method is called, | ||
848 | but this only deters other writers; any changes to the key's payload must | ||
849 | be made under RCU conditions, and call_rcu() must be used to dispose of | ||
850 | the old payload. | ||
761 | 851 | ||
762 | key_payload_reserve() should be called with the key->lock write locked, | 852 | key_payload_reserve() should be called before the changes are made, but |
763 | and the changes to the key's attached payload should be made before the | 853 | after all allocations and other potentially failing function calls are |
764 | key is locked. | 854 | made. |
765 | 855 | ||
766 | The key will have its semaphore write-locked before this method is | 856 | It is safe to sleep in this method. |
767 | called. Any changes to the key should be made with the key's rwlock | ||
768 | write-locked also. It is safe to sleep here. | ||
769 | 857 | ||
770 | 858 | ||
771 | (*) int (*match)(const struct key *key, const void *desc); | 859 | (*) int (*match)(const struct key *key, const void *desc); |
@@ -782,12 +870,12 @@ The structure has a number of fields, some of which are mandatory: | |||
782 | 870 | ||
783 | (*) void (*destroy)(struct key *key); | 871 | (*) void (*destroy)(struct key *key); |
784 | 872 | ||
785 | This method is optional. It is called to discard the payload data on a | 873 | This method is optional. It is called to discard the payload data on a key |
786 | key when it is being destroyed. | 874 | when it is being destroyed. |
787 | 875 | ||
788 | This method does not need to lock the key; it can consider the key as | 876 | This method does not need to lock the key to access the payload; it can |
789 | being inaccessible. Note that the key's type may have changed before this | 877 | consider the key as being inaccessible at this time. Note that the key's |
790 | function is called. | 878 | type may have been changed before this function is called. |
791 | 879 | ||
792 | It is not safe to sleep in this method; the caller may hold spinlocks. | 880 | It is not safe to sleep in this method; the caller may hold spinlocks. |
793 | 881 | ||
@@ -797,26 +885,31 @@ The structure has a number of fields, some of which are mandatory: | |||
797 | This method is optional. It is called during /proc/keys reading to | 885 | This method is optional. It is called during /proc/keys reading to |
798 | summarise a key's description and payload in text form. | 886 | summarise a key's description and payload in text form. |
799 | 887 | ||
800 | This method will be called with the key's rwlock read-locked. This will | 888 | This method will be called with the RCU read lock held. rcu_dereference() |
801 | prevent the key's payload and state changing; also the description should | 889 | should be used to read the payload pointer if the payload is to be |
802 | not change. This also means it is not safe to sleep in this method. | 890 | accessed. key->datalen cannot be trusted to stay consistent with the |
891 | contents of the payload. | ||
892 | |||
893 | The description will not change, though the key's state may. | ||
894 | |||
895 | It is not safe to sleep in this method; the RCU read lock is held by the | ||
896 | caller. | ||
803 | 897 | ||
804 | 898 | ||
805 | (*) long (*read)(const struct key *key, char __user *buffer, size_t buflen); | 899 | (*) long (*read)(const struct key *key, char __user *buffer, size_t buflen); |
806 | 900 | ||
807 | This method is optional. It is called by KEYCTL_READ to translate the | 901 | This method is optional. It is called by KEYCTL_READ to translate the |
808 | key's payload into something a blob of data for userspace to deal | 902 | key's payload into something a blob of data for userspace to deal with. |
809 | with. Ideally, the blob should be in the same format as that passed in to | 903 | Ideally, the blob should be in the same format as that passed in to the |
810 | the instantiate and update methods. | 904 | instantiate and update methods. |
811 | 905 | ||
812 | If successful, the blob size that could be produced should be returned | 906 | If successful, the blob size that could be produced should be returned |
813 | rather than the size copied. | 907 | rather than the size copied. |
814 | 908 | ||
815 | This method will be called with the key's semaphore read-locked. This | 909 | This method will be called with the key's semaphore read-locked. This will |
816 | will prevent the key's payload changing. It is not necessary to also | 910 | prevent the key's payload changing. It is not necessary to use RCU locking |
817 | read-lock key->lock when accessing the key's payload. It is safe to sleep | 911 | when accessing the key's payload. It is safe to sleep in this method, such |
818 | in this method, such as might happen when the userspace buffer is | 912 | as might happen when the userspace buffer is accessed. |
819 | accessed. | ||
820 | 913 | ||
821 | 914 | ||
822 | ============================ | 915 | ============================ |
@@ -853,8 +946,8 @@ If it returns with the key remaining in the unconstructed state, the key will | |||
853 | be marked as being negative, it will be added to the session keyring, and an | 946 | be marked as being negative, it will be added to the session keyring, and an |
854 | error will be returned to the key requestor. | 947 | error will be returned to the key requestor. |
855 | 948 | ||
856 | Supplementary information may be provided from whoever or whatever invoked | 949 | Supplementary information may be provided from whoever or whatever invoked this |
857 | this service. This will be passed as the <callout_info> parameter. If no such | 950 | service. This will be passed as the <callout_info> parameter. If no such |
858 | information was made available, then "-" will be passed as this parameter | 951 | information was made available, then "-" will be passed as this parameter |
859 | instead. | 952 | instead. |
860 | 953 | ||
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index a2c893a7475d..ab65714d95fc 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
@@ -304,57 +304,6 @@ tcp_low_latency - BOOLEAN | |||
304 | changed would be a Beowulf compute cluster. | 304 | changed would be a Beowulf compute cluster. |
305 | Default: 0 | 305 | Default: 0 |
306 | 306 | ||
307 | tcp_westwood - BOOLEAN | ||
308 | Enable TCP Westwood+ congestion control algorithm. | ||
309 | TCP Westwood+ is a sender-side only modification of the TCP Reno | ||
310 | protocol stack that optimizes the performance of TCP congestion | ||
311 | control. It is based on end-to-end bandwidth estimation to set | ||
312 | congestion window and slow start threshold after a congestion | ||
313 | episode. Using this estimation, TCP Westwood+ adaptively sets a | ||
314 | slow start threshold and a congestion window which takes into | ||
315 | account the bandwidth used at the time congestion is experienced. | ||
316 | TCP Westwood+ significantly increases fairness wrt TCP Reno in | ||
317 | wired networks and throughput over wireless links. | ||
318 | Default: 0 | ||
319 | |||
320 | tcp_vegas_cong_avoid - BOOLEAN | ||
321 | Enable TCP Vegas congestion avoidance algorithm. | ||
322 | TCP Vegas is a sender-side only change to TCP that anticipates | ||
323 | the onset of congestion by estimating the bandwidth. TCP Vegas | ||
324 | adjusts the sending rate by modifying the congestion | ||
325 | window. TCP Vegas should provide less packet loss, but it is | ||
326 | not as aggressive as TCP Reno. | ||
327 | Default:0 | ||
328 | |||
329 | tcp_bic - BOOLEAN | ||
330 | Enable BIC TCP congestion control algorithm. | ||
331 | BIC-TCP is a sender-side only change that ensures a linear RTT | ||
332 | fairness under large windows while offering both scalability and | ||
333 | bounded TCP-friendliness. The protocol combines two schemes | ||
334 | called additive increase and binary search increase. When the | ||
335 | congestion window is large, additive increase with a large | ||
336 | increment ensures linear RTT fairness as well as good | ||
337 | scalability. Under small congestion windows, binary search | ||
338 | increase provides TCP friendliness. | ||
339 | Default: 0 | ||
340 | |||
341 | tcp_bic_low_window - INTEGER | ||
342 | Sets the threshold window (in packets) where BIC TCP starts to | ||
343 | adjust the congestion window. Below this threshold BIC TCP behaves | ||
344 | the same as the default TCP Reno. | ||
345 | Default: 14 | ||
346 | |||
347 | tcp_bic_fast_convergence - BOOLEAN | ||
348 | Forces BIC TCP to more quickly respond to changes in congestion | ||
349 | window. Allows two flows sharing the same connection to converge | ||
350 | more rapidly. | ||
351 | Default: 1 | ||
352 | |||
353 | tcp_default_win_scale - INTEGER | ||
354 | Sets the minimum window scale TCP will negotiate for on all | ||
355 | conections. | ||
356 | Default: 7 | ||
357 | |||
358 | tcp_tso_win_divisor - INTEGER | 307 | tcp_tso_win_divisor - INTEGER |
359 | This allows control over what percentage of the congestion window | 308 | This allows control over what percentage of the congestion window |
360 | can be consumed by a single TSO frame. | 309 | can be consumed by a single TSO frame. |
@@ -368,6 +317,11 @@ tcp_frto - BOOLEAN | |||
368 | where packet loss is typically due to random radio interference | 317 | where packet loss is typically due to random radio interference |
369 | rather than intermediate router congestion. | 318 | rather than intermediate router congestion. |
370 | 319 | ||
320 | tcp_congestion_control - STRING | ||
321 | Set the congestion control algorithm to be used for new | ||
322 | connections. The algorithm "reno" is always available, but | ||
323 | additional choices may be available based on kernel configuration. | ||
324 | |||
371 | somaxconn - INTEGER | 325 | somaxconn - INTEGER |
372 | Limit of socket listen() backlog, known in userspace as SOMAXCONN. | 326 | Limit of socket listen() backlog, known in userspace as SOMAXCONN. |
373 | Defaults to 128. See also tcp_max_syn_backlog for additional tuning | 327 | Defaults to 128. See also tcp_max_syn_backlog for additional tuning |
diff --git a/Documentation/networking/tcp.txt b/Documentation/networking/tcp.txt index 71749007091e..0fa300425575 100644 --- a/Documentation/networking/tcp.txt +++ b/Documentation/networking/tcp.txt | |||
@@ -1,5 +1,72 @@ | |||
1 | How the new TCP output machine [nyi] works. | 1 | TCP protocol |
2 | ============ | ||
3 | |||
4 | Last updated: 21 June 2005 | ||
5 | |||
6 | Contents | ||
7 | ======== | ||
8 | |||
9 | - Congestion control | ||
10 | - How the new TCP output machine [nyi] works | ||
11 | |||
12 | Congestion control | ||
13 | ================== | ||
14 | |||
15 | The following variables are used in the tcp_sock for congestion control: | ||
16 | snd_cwnd The size of the congestion window | ||
17 | snd_ssthresh Slow start threshold. We are in slow start if | ||
18 | snd_cwnd is less than this. | ||
19 | snd_cwnd_cnt A counter used to slow down the rate of increase | ||
20 | once we exceed slow start threshold. | ||
21 | snd_cwnd_clamp This is the maximum size that snd_cwnd can grow to. | ||
22 | snd_cwnd_stamp Timestamp for when congestion window last validated. | ||
23 | snd_cwnd_used Used as a highwater mark for how much of the | ||
24 | congestion window is in use. It is used to adjust | ||
25 | snd_cwnd down when the link is limited by the | ||
26 | application rather than the network. | ||
27 | |||
28 | As of 2.6.13, Linux supports pluggable congestion control algorithms. | ||
29 | A congestion control mechanism can be registered through functions in | ||
30 | tcp_cong.c. The functions used by the congestion control mechanism are | ||
31 | registered via passing a tcp_congestion_ops struct to | ||
32 | tcp_register_congestion_control. As a minimum name, ssthresh, | ||
33 | cong_avoid, min_cwnd must be valid. | ||
2 | 34 | ||
35 | Private data for a congestion control mechanism is stored in tp->ca_priv. | ||
36 | tcp_ca(tp) returns a pointer to this space. This is preallocated space - it | ||
37 | is important to check the size of your private data will fit this space, or | ||
38 | alternatively space could be allocated elsewhere and a pointer to it could | ||
39 | be stored here. | ||
40 | |||
41 | There are three kinds of congestion control algorithms currently: The | ||
42 | simplest ones are derived from TCP reno (highspeed, scalable) and just | ||
43 | provide an alternative the congestion window calculation. More complex | ||
44 | ones like BIC try to look at other events to provide better | ||
45 | heuristics. There are also round trip time based algorithms like | ||
46 | Vegas and Westwood+. | ||
47 | |||
48 | Good TCP congestion control is a complex problem because the algorithm | ||
49 | needs to maintain fairness and performance. Please review current | ||
50 | research and RFC's before developing new modules. | ||
51 | |||
52 | The method that is used to determine which congestion control mechanism is | ||
53 | determined by the setting of the sysctl net.ipv4.tcp_congestion_control. | ||
54 | The default congestion control will be the last one registered (LIFO); | ||
55 | so if you built everything as modules. the default will be reno. If you | ||
56 | build with the default's from Kconfig, then BIC will be builtin (not a module) | ||
57 | and it will end up the default. | ||
58 | |||
59 | If you really want a particular default value then you will need | ||
60 | to set it with the sysctl. If you use a sysctl, the module will be autoloaded | ||
61 | if needed and you will get the expected protocol. If you ask for an | ||
62 | unknown congestion method, then the sysctl attempt will fail. | ||
63 | |||
64 | If you remove a tcp congestion control module, then you will get the next | ||
65 | available one. Since reno can not be built as a module, and can not be | ||
66 | deleted, it will always be available. | ||
67 | |||
68 | How the new TCP output machine [nyi] works. | ||
69 | =========================================== | ||
3 | 70 | ||
4 | Data is kept on a single queue. The skb->users flag tells us if the frame is | 71 | Data is kept on a single queue. The skb->users flag tells us if the frame is |
5 | one that has been queued already. To add a frame we throw it on the end. Ack | 72 | one that has been queued already. To add a frame we throw it on the end. Ack |
diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt index 35159176997b..9f11d36a8c10 100644 --- a/Documentation/sysctl/kernel.txt +++ b/Documentation/sysctl/kernel.txt | |||
@@ -49,6 +49,7 @@ show up in /proc/sys/kernel: | |||
49 | - shmmax [ sysv ipc ] | 49 | - shmmax [ sysv ipc ] |
50 | - shmmni | 50 | - shmmni |
51 | - stop-a [ SPARC only ] | 51 | - stop-a [ SPARC only ] |
52 | - suid_dumpable | ||
52 | - sysrq ==> Documentation/sysrq.txt | 53 | - sysrq ==> Documentation/sysrq.txt |
53 | - tainted | 54 | - tainted |
54 | - threads-max | 55 | - threads-max |
@@ -300,6 +301,25 @@ kernel. This value defaults to SHMMAX. | |||
300 | 301 | ||
301 | ============================================================== | 302 | ============================================================== |
302 | 303 | ||
304 | suid_dumpable: | ||
305 | |||
306 | This value can be used to query and set the core dump mode for setuid | ||
307 | or otherwise protected/tainted binaries. The modes are | ||
308 | |||
309 | 0 - (default) - traditional behaviour. Any process which has changed | ||
310 | privilege levels or is execute only will not be dumped | ||
311 | 1 - (debug) - all processes dump core when possible. The core dump is | ||
312 | owned by the current user and no security is applied. This is | ||
313 | intended for system debugging situations only. Ptrace is unchecked. | ||
314 | 2 - (suidsafe) - any binary which normally would not be dumped is dumped | ||
315 | readable by root only. This allows the end user to remove | ||
316 | such a dump but not access it directly. For security reasons | ||
317 | core dumps in this mode will not overwrite one another or | ||
318 | other files. This mode is appropriate when adminstrators are | ||
319 | attempting to debug problems in a normal environment. | ||
320 | |||
321 | ============================================================== | ||
322 | |||
303 | tainted: | 323 | tainted: |
304 | 324 | ||
305 | Non-zero if the kernel has been tainted. Numeric values, which | 325 | Non-zero if the kernel has been tainted. Numeric values, which |
diff --git a/Documentation/tty.txt b/Documentation/tty.txt index 3958cf746dde..8ff7bc2a0811 100644 --- a/Documentation/tty.txt +++ b/Documentation/tty.txt | |||
@@ -22,7 +22,7 @@ copy of the structure. You must not re-register over the top of the line | |||
22 | discipline even with the same data or your computer again will be eaten by | 22 | discipline even with the same data or your computer again will be eaten by |
23 | demons. | 23 | demons. |
24 | 24 | ||
25 | In order to remove a line discipline call tty_register_ldisc passing NULL. | 25 | In order to remove a line discipline call tty_unregister_ldisc(). |
26 | In ancient times this always worked. In modern times the function will | 26 | In ancient times this always worked. In modern times the function will |
27 | return -EBUSY if the ldisc is currently in use. Since the ldisc referencing | 27 | return -EBUSY if the ldisc is currently in use. Since the ldisc referencing |
28 | code manages the module counts this should not usually be a concern. | 28 | code manages the module counts this should not usually be a concern. |
diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv index e46761c39e3f..aeeafec0594c 100644 --- a/Documentation/video4linux/CARDLIST.bttv +++ b/Documentation/video4linux/CARDLIST.bttv | |||
@@ -119,3 +119,17 @@ card=117 - NGS NGSTV+ | |||
119 | card=118 - LMLBT4 | 119 | card=118 - LMLBT4 |
120 | card=119 - Tekram M205 PRO | 120 | card=119 - Tekram M205 PRO |
121 | card=120 - Conceptronic CONTVFMi | 121 | card=120 - Conceptronic CONTVFMi |
122 | card=121 - Euresys Picolo Tetra | ||
123 | card=122 - Spirit TV Tuner | ||
124 | card=123 - AVerMedia AVerTV DVB-T 771 | ||
125 | card=124 - AverMedia AverTV DVB-T 761 | ||
126 | card=125 - MATRIX Vision Sigma-SQ | ||
127 | card=126 - MATRIX Vision Sigma-SLC | ||
128 | card=127 - APAC Viewcomp 878(AMAX) | ||
129 | card=128 - DVICO FusionHDTV DVB-T Lite | ||
130 | card=129 - V-Gear MyVCD | ||
131 | card=130 - Super TV Tuner | ||
132 | card=131 - Tibet Systems 'Progress DVR' CS16 | ||
133 | card=132 - Kodicom 4400R (master) | ||
134 | card=133 - Kodicom 4400R (slave) | ||
135 | card=134 - Adlink RTV24 | ||
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 new file mode 100644 index 000000000000..216f705495cc --- /dev/null +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -0,0 +1,29 @@ | |||
1 | card=0 - UNKNOWN/GENERIC | ||
2 | card=1 - Hauppauge WinTV 34xxx models | ||
3 | card=2 - GDI Black Gold | ||
4 | card=3 - PixelView | ||
5 | card=4 - ATI TV Wonder Pro | ||
6 | card=5 - Leadtek Winfast 2000XP Expert | ||
7 | card=6 - AverTV Studio 303 (M126) | ||
8 | card=7 - MSI TV-@nywhere Master | ||
9 | card=8 - Leadtek Winfast DV2000 | ||
10 | card=9 - Leadtek PVR 2000 | ||
11 | card=10 - IODATA GV-VCP3/PCI | ||
12 | card=11 - Prolink PlayTV PVR | ||
13 | card=12 - ASUS PVR-416 | ||
14 | card=13 - MSI TV-@nywhere | ||
15 | card=14 - KWorld/VStream XPert DVB-T | ||
16 | card=15 - DVICO FusionHDTV DVB-T1 | ||
17 | card=16 - KWorld LTV883RF | ||
18 | card=17 - DViCO - FusionHDTV 3 Gold | ||
19 | card=18 - Hauppauge Nova-T DVB-T | ||
20 | card=19 - Conexant DVB-T reference design | ||
21 | card=20 - Provideo PV259 | ||
22 | card=21 - DVICO FusionHDTV DVB-T Plus | ||
23 | card=22 - digitalnow DNTV Live! DVB-T | ||
24 | card=23 - pcHDTV HD3000 HDTV | ||
25 | card=24 - Hauppauge WinTV 28xxx (Roslyn) models | ||
26 | card=25 - Digital-Logic MICROSPACE Entertainment Center (MEC) | ||
27 | card=26 - IODATA GV/BCTV7E | ||
28 | card=27 - PixelView PlayTV Ultra Pro (Stereo) | ||
29 | card=28 - DViCO - FusionHDTV 3 Gold-T | ||
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index a6c82fa4de02..d5ed95d28500 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -20,16 +20,37 @@ | |||
20 | 19 -> Compro VideoMate TV [185b:c100] | 20 | 19 -> Compro VideoMate TV [185b:c100] |
21 | 20 -> Matrox CronosPlus [102B:48d0] | 21 | 20 -> Matrox CronosPlus [102B:48d0] |
22 | 21 -> 10MOONS PCI TV CAPTURE CARD [1131:2001] | 22 | 21 -> 10MOONS PCI TV CAPTURE CARD [1131:2001] |
23 | 22 -> Medion 2819/ AverMedia M156 [1461:a70b,1461:2115] | 23 | 22 -> AverMedia M156 / Medion 2819 [1461:a70b] |
24 | 23 -> BMK MPEX Tuner | 24 | 23 -> BMK MPEX Tuner |
25 | 24 -> KNC One TV-Station DVR [1894:a006] | 25 | 24 -> KNC One TV-Station DVR [1894:a006] |
26 | 25 -> ASUS TV-FM 7133 [1043:4843] | 26 | 25 -> ASUS TV-FM 7133 [1043:4843] |
27 | 26 -> Pinnacle PCTV Stereo (saa7134) [11bd:002b] | 27 | 26 -> Pinnacle PCTV Stereo (saa7134) [11bd:002b] |
28 | 27 -> Manli MuchTV M-TV002 | 28 | 27 -> Manli MuchTV M-TV002/Behold TV 403 FM |
29 | 28 -> Manli MuchTV M-TV001 | 29 | 28 -> Manli MuchTV M-TV001/Behold TV 401 |
30 | 29 -> Nagase Sangyo TransGear 3000TV [1461:050c] | 30 | 29 -> Nagase Sangyo TransGear 3000TV [1461:050c] |
31 | 30 -> Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) [1019:4cb4] | 31 | 30 -> Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) [1019:4cb4] |
32 | 31 -> Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) [1019:4cb5] | 32 | 31 -> Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) [1019:4cb5] |
33 | 32 -> AVACS SmartTV | 33 | 32 -> AVACS SmartTV |
34 | 33 -> AVerMedia DVD EZMaker [1461:10ff] | 34 | 33 -> AVerMedia DVD EZMaker [1461:10ff] |
35 | 34 -> LifeView FlyTV Platinum33 mini [5168:0212] | 35 | 34 -> Noval Prime TV 7133 |
36 | 35 -> AverMedia AverTV Studio 305 [1461:2115] | ||
37 | 37 -> Items MuchTV Plus / IT-005 | ||
38 | 38 -> Terratec Cinergy 200 TV [153B:1152] | ||
39 | 39 -> LifeView FlyTV Platinum Mini [5168:0212] | ||
40 | 40 -> Compro VideoMate TV PVR/FM [185b:c100] | ||
41 | 41 -> Compro VideoMate TV Gold+ [185b:c100] | ||
42 | 42 -> Sabrent SBT-TVFM (saa7130) | ||
43 | 43 -> :Zolid Xpert TV7134 | ||
44 | 44 -> Empire PCI TV-Radio LE | ||
45 | 45 -> Avermedia AVerTV Studio 307 [1461:9715] | ||
46 | 46 -> AVerMedia Cardbus TV/Radio [1461:d6ee] | ||
47 | 47 -> Terratec Cinergy 400 mobile [153b:1162] | ||
48 | 48 -> Terratec Cinergy 600 TV MK3 [153B:1158] | ||
49 | 49 -> Compro VideoMate Gold+ Pal [185b:c200] | ||
50 | 50 -> Pinnacle PCTV 300i DVB-T + PAL [11bd:002d] | ||
51 | 51 -> ProVideo PV952 [1540:9524] | ||
52 | 52 -> AverMedia AverTV/305 [1461:2108] | ||
53 | 54 -> LifeView FlyTV Platinum FM [5168:0214,1489:0214] | ||
54 | 55 -> LifeView FlyDVB-T DUO [5168:0306] | ||
55 | 56 -> Avermedia AVerTV 307 [1461:a70a] | ||
56 | 57 -> Avermedia AVerTV GO 007 FM [1461:f31f] | ||
diff --git a/Documentation/video4linux/CARDLIST.tuner b/Documentation/video4linux/CARDLIST.tuner index f7bafe862ba0..aeb8df8ce890 100644 --- a/Documentation/video4linux/CARDLIST.tuner +++ b/Documentation/video4linux/CARDLIST.tuner | |||
@@ -44,3 +44,18 @@ tuner=42 - Philips 1236D ATSC/NTSC daul in | |||
44 | tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F) | 44 | tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F) |
45 | tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant) | 45 | tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant) |
46 | tuner=45 - Microtune 4049 FM5 | 46 | tuner=45 - Microtune 4049 FM5 |
47 | tuner=46 - Panasonic VP27s/ENGE4324D | ||
48 | tuner=47 - LG NTSC (TAPE series) | ||
49 | tuner=48 - Tenna TNF 8831 BGFF) | ||
50 | tuner=49 - Microtune 4042 FI5 ATSC/NTSC dual in | ||
51 | tuner=50 - TCL 2002N | ||
52 | tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) | ||
53 | tuner=52 - Thomson DDT 7610 (ATSC/NTSC) | ||
54 | tuner=53 - Philips FQ1286 | ||
55 | tuner=54 - tda8290+75 | ||
56 | tuner=55 - LG PAL (TAPE series) | ||
57 | tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) | ||
58 | tuner=57 - Philips FQ1236A MK4 | ||
59 | tuner=58 - Ymec TVision TVF-8531MF | ||
60 | tuner=59 - Ymec TVision TVF-5533MF | ||
61 | tuner=60 - Thomson DDT 7611 (ATSC/NTSC) | ||
diff --git a/Documentation/video4linux/hauppauge-wintv-cx88-ir.txt b/Documentation/video4linux/hauppauge-wintv-cx88-ir.txt new file mode 100644 index 000000000000..93fec32a1188 --- /dev/null +++ b/Documentation/video4linux/hauppauge-wintv-cx88-ir.txt | |||
@@ -0,0 +1,54 @@ | |||
1 | The controls for the mux are GPIO [0,1] for source, and GPIO 2 for muting. | ||
2 | |||
3 | GPIO0 GPIO1 | ||
4 | 0 0 TV Audio | ||
5 | 1 0 FM radio | ||
6 | 0 1 Line-In | ||
7 | 1 1 Mono tuner bypass or CD passthru (tuner specific) | ||
8 | |||
9 | GPIO 16(i believe) is tied to the IR port (if present). | ||
10 | |||
11 | ------------------------------------------------------------------------------------ | ||
12 | |||
13 | >From the data sheet: | ||
14 | Register 24'h20004 PCI Interrupt Status | ||
15 | bit [18] IR_SMP_INT Set when 32 input samples have been collected over | ||
16 | gpio[16] pin into GP_SAMPLE register. | ||
17 | |||
18 | What's missing from the data sheet: | ||
19 | |||
20 | Setup 4KHz sampling rate (roughly 2x oversampled; good enough for our RC5 | ||
21 | compat remote) | ||
22 | set register 0x35C050 to 0xa80a80 | ||
23 | |||
24 | enable sampling | ||
25 | set register 0x35C054 to 0x5 | ||
26 | |||
27 | Of course, enable the IRQ bit 18 in the interrupt mask register .(and | ||
28 | provide for a handler) | ||
29 | |||
30 | GP_SAMPLE register is at 0x35C058 | ||
31 | |||
32 | Bits are then right shifted into the GP_SAMPLE register at the specified | ||
33 | rate; you get an interrupt when a full DWORD is recieved. | ||
34 | You need to recover the actual RC5 bits out of the (oversampled) IR sensor | ||
35 | bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data) An | ||
36 | actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment. | ||
37 | |||
38 | I'm pretty sure when no IR signal is present the receiver is always in a | ||
39 | marking state(1); but stray light, etc can cause intermittent noise values | ||
40 | as well. Remember, this is a free running sample of the IR receiver state | ||
41 | over time, so don't assume any sample starts at any particular place. | ||
42 | |||
43 | http://www.atmel.com/dyn/resources/prod_documents/doc2817.pdf | ||
44 | This data sheet (google search) seems to have a lovely description of the | ||
45 | RC5 basics | ||
46 | |||
47 | http://users.pandora.be/nenya/electronics/rc5/ and more data | ||
48 | |||
49 | http://www.ee.washington.edu/circuit_archive/text/ir_decode.txt | ||
50 | and even a reference to how to decode a bi-phase data stream. | ||
51 | |||
52 | http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm | ||
53 | still more info | ||
54 | |||
diff --git a/Documentation/video4linux/lifeview.txt b/Documentation/video4linux/lifeview.txt new file mode 100644 index 000000000000..b07ea79c2b7e --- /dev/null +++ b/Documentation/video4linux/lifeview.txt | |||
@@ -0,0 +1,42 @@ | |||
1 | collecting data about the lifeview models and the config coding on | ||
2 | gpio pins 0-9 ... | ||
3 | ================================================================== | ||
4 | |||
5 | bt878: | ||
6 | LR50 rev. Q ("PARTS: 7031505116), Tuner wurde als Nr. 5 erkannt, Eingänge | ||
7 | SVideo, TV, Composite, Audio, Remote. CP9..1=100001001 (1: 0-Ohm-Widerstand | ||
8 | gegen GND unbestückt; 0: bestückt) | ||
9 | |||
10 | ------------------------------------------------------------------------------ | ||
11 | |||
12 | saa7134: | ||
13 | /* LifeView FlyTV Platinum FM (LR214WF) */ | ||
14 | /* "Peter Missel <peter.missel@onlinehome.de> */ | ||
15 | .name = "LifeView FlyTV Platinum FM", | ||
16 | /* GP27 MDT2005 PB4 pin 10 */ | ||
17 | /* GP26 MDT2005 PB3 pin 9 */ | ||
18 | /* GP25 MDT2005 PB2 pin 8 */ | ||
19 | /* GP23 MDT2005 PB1 pin 7 */ | ||
20 | /* GP22 MDT2005 PB0 pin 6 */ | ||
21 | /* GP21 MDT2005 PB5 pin 11 */ | ||
22 | /* GP20 MDT2005 PB6 pin 12 */ | ||
23 | /* GP19 MDT2005 PB7 pin 13 */ | ||
24 | /* nc MDT2005 PA3 pin 2 */ | ||
25 | /* Remote MDT2005 PA2 pin 1 */ | ||
26 | /* GP18 MDT2005 PA1 pin 18 */ | ||
27 | /* nc MDT2005 PA0 pin 17 strap low */ | ||
28 | |||
29 | /* GP17 Strap "GP7"=High */ | ||
30 | /* GP16 Strap "GP6"=High | ||
31 | 0=Radio 1=TV | ||
32 | Drives SA630D ENCH1 and HEF4052 A1 pins | ||
33 | to do FM radio through SIF input */ | ||
34 | /* GP15 nc */ | ||
35 | /* GP14 nc */ | ||
36 | /* GP13 nc */ | ||
37 | /* GP12 Strap "GP5" = High */ | ||
38 | /* GP11 Strap "GP4" = High */ | ||
39 | /* GP10 Strap "GP3" = High */ | ||
40 | /* GP09 Strap "GP2" = Low */ | ||
41 | /* GP08 Strap "GP1" = Low */ | ||
42 | /* GP07.00 nc */ | ||
diff --git a/Documentation/video4linux/not-in-cx2388x-datasheet.txt b/Documentation/video4linux/not-in-cx2388x-datasheet.txt new file mode 100644 index 000000000000..96b638b5ba1d --- /dev/null +++ b/Documentation/video4linux/not-in-cx2388x-datasheet.txt | |||
@@ -0,0 +1,37 @@ | |||
1 | ================================================================================= | ||
2 | MO_OUTPUT_FORMAT (0x310164) | ||
3 | |||
4 | Previous default from DScaler: 0x1c1f0008 | ||
5 | Digit 8: 31-28 | ||
6 | 28: PREVREMOD = 1 | ||
7 | |||
8 | Digit 7: 27-24 (0xc = 12 = b1100 ) | ||
9 | 27: COMBALT = 1 | ||
10 | 26: PAL_INV_PHASE | ||
11 | (DScaler apparently set this to 1, resulted in sucky picture) | ||
12 | |||
13 | Digits 6,5: 23-16 | ||
14 | 25-16: COMB_RANGE = 0x1f [default] (9 bits -> max 512) | ||
15 | |||
16 | Digit 4: 15-12 | ||
17 | 15: DISIFX = 0 | ||
18 | 14: INVCBF = 0 | ||
19 | 13: DISADAPT = 0 | ||
20 | 12: NARROWADAPT = 0 | ||
21 | |||
22 | Digit 3: 11-8 | ||
23 | 11: FORCE2H | ||
24 | 10: FORCEREMD | ||
25 | 9: NCHROMAEN | ||
26 | 8: NREMODEN | ||
27 | |||
28 | Digit 2: 7-4 | ||
29 | 7-6: YCORE | ||
30 | 5-4: CCORE | ||
31 | |||
32 | Digit 1: 3-0 | ||
33 | 3: RANGE = 1 | ||
34 | 2: HACTEXT | ||
35 | 1: HSFMT | ||
36 | |||
37 | ================================================================================= | ||