Unified · Split
| @@ -32,6 +32,7 @@ Brian Avery <b.avery@hp.com> · 31 unmodified lines | ||
| 32 | 32 | Brian King <brking@us.ibm.com> |
| 33 | 33 | Christoph Hellwig <hch@lst.de> |
| 34 | 34 | Corey Minyard <minyard@acm.org> |
| 35 | +Damian Hobson-Garcia <dhobsong@igel.co.jp> | |
| 35 | 36 | David Brownell <david-b@pacbell.net> |
| 36 | 37 | David Woodhouse <dwmw2@shinybook.infradead.org> |
| 37 | 38 | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
| @@ -328,7 +328,7 @@ S: Haifa, Israel · 327 unmodified lines | ||
| 328 | 328 | N: Johannes Berg |
| 329 | 329 | E: johannes@sipsolutions.net |
| 330 | 330 | W: http://johannes.sipsolutions.net/ |
| 331 | −P: 1024D/9AB78CA5 AD02 0176 4E29 C137 1DF6 08D2 FC44 CF86 9AB7 8CA5 | |
| 331 | +P: 4096R/7BF9099A C0EB C440 F6DA 091C 884D 8532 E0F3 73F3 7BF9 099A | |
| 332 | 332 | D: powerpc & 802.11 hacker |
| 333 | 333 | |
| 334 | 334 | N: Stephen R. van den Berg (AKA BuGless) |
| @@ -1677,7 +1677,7 @@ W: http://www.codemonkey.org.uk · 1342 unmodified lines | ||
| 1677 | 1677 | D: Assorted VIA x86 support. |
| 1678 | 1678 | D: 2.5 AGPGART overhaul. |
| 1679 | 1679 | D: CPUFREQ maintenance. |
| 1680 | −D: Fedora kernel maintainence. | |
| 1680 | +D: Fedora kernel maintenance. | |
| 1681 | 1681 | D: Misc/Other. |
| 1682 | 1682 | S: 314 Littleton Rd, Westford, MA 01886, USA |
| 1683 | 1683 | |
| @@ -2943,6 +2943,10 @@ S: Kasarmikatu 11 A4 · 1259 unmodified lines | ||
| 2943 | 2943 | S: 70110 Kuopio |
| 2944 | 2944 | S: Finland |
| 2945 | 2945 | |
| 2946 | +N: Tobias Ringström | |
| 2947 | +E: tori@unhappy.mine.nu | |
| 2948 | +D: Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver | |
| 2949 | + | |
| 2946 | 2950 | N: Luca Risolia |
| 2947 | 2951 | E: luca.risolia@studio.unibo.it |
| 2948 | 2952 | P: 1024D/FCE635A4 88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4 |
| @@ -3211,7 +3215,7 @@ N: James Simmons · 262 unmodified lines | ||
| 3211 | 3215 | E: jsimmons@infradead.org |
| 3212 | 3216 | E: jsimmons@users.sf.net |
| 3213 | 3217 | D: Frame buffer device maintainer |
| 3214 | −D: input layer developement | |
| 3218 | +D: input layer development | |
| 3215 | 3219 | D: tty/console layer |
| 3216 | 3220 | D: various mipsel devices |
| 3217 | 3221 | S: 115 Carmel Avenue |
| @@ -3290,7 +3294,7 @@ S: USA · 72 unmodified lines | ||
| 3290 | 3294 | N: Manfred Spraul |
| 3291 | 3295 | E: manfred@colorfullife.com |
| 3292 | 3296 | W: http://www.colorfullife.com/~manfred |
| 3293 | −D: Lots of tiny hacks. Larger improvments to SysV IPC msg, | |
| 3297 | +D: Lots of tiny hacks. Larger improvements to SysV IPC msg, | |
| 3294 | 3298 | D: slab, pipe, select. |
| 3295 | 3299 | S: 71701 Schwieberdingen |
| 3296 | 3300 | S: Germany |
| @@ -3913,6 +3917,10 @@ S: Flandernstrasse 101 · 616 unmodified lines | ||
| 3913 | 3917 | S: D-73732 Esslingen |
| 3914 | 3918 | S: Germany |
| 3915 | 3919 | |
| 3920 | +N: Roman Zippel | |
| 3921 | +E: zippel@linux-m68k.org | |
| 3922 | +D: AFFS and HFS filesystems, m68k maintainer, new kernel configuration in 2.5 | |
| 3923 | + | |
| 3916 | 3924 | N: Leonard N. Zubkoff |
| 3917 | 3925 | W: http://www.dandelion.com/Linux/ |
| 3918 | 3926 | D: BusLogic SCSI driver |
| @@ -192,10 +192,6 @@ kernel-docs.txt · 191 unmodified lines | ||
| 192 | 192 | - listing of various WWW + books that document kernel internals. |
| 193 | 193 | kernel-parameters.txt |
| 194 | 194 | - summary listing of command line / boot prompt args for the kernel. |
| 195 | −keys-request-key.txt | |
| 196 | − - description of the kernel key request service. | |
| 197 | −keys.txt | |
| 198 | − - description of the kernel key retention service. | |
| 199 | 195 | kobject.txt |
| 200 | 196 | - info of the kobject infrastructure of the Linux kernel. |
| 201 | 197 | kprobes.txt |
| @@ -206,8 +202,8 @@ laptops/ · 4 unmodified lines | ||
| 206 | 202 | - directory with laptop related info and laptop driver documentation. |
| 207 | 203 | ldm.txt |
| 208 | 204 | - a brief description of LDM (Windows Dynamic Disks). |
| 209 | −leds-class.txt | |
| 210 | − - documents LED handling under Linux. | |
| 205 | +leds/ | |
| 206 | + - directory with info about LED handling under Linux. | |
| 211 | 207 | local_ops.txt |
| 212 | 208 | - semantics and behavior of local atomic operations. |
| 213 | 209 | lockdep-design.txt |
| @@ -294,6 +290,8 @@ scheduler/ · 80 unmodified lines | ||
| 294 | 290 | - directory with info on the scheduler. |
| 295 | 291 | scsi/ |
| 296 | 292 | - directory with info on Linux scsi support. |
| 293 | +security/ | |
| 294 | + - directory that contains security-related info | |
| 297 | 295 | serial/ |
| 298 | 296 | - directory with info on the low level serial API. |
| 299 | 297 | serial-console.txt |
| @@ -328,8 +326,6 @@ sysrq.txt · 28 unmodified lines | ||
| 328 | 326 | - info on the magic SysRq key. |
| 329 | 327 | telephony/ |
| 330 | 328 | - directory with info on telephony (e.g. voice over IP) support. |
| 331 | −uml/ | |
| 332 | − - directory with information about User Mode Linux. | |
| 333 | 329 | unicode.txt |
| 334 | 330 | - info on the Unicode character/font mapping used in Linux. |
| 335 | 331 | unshare.txt |
| @@ -0,0 +1,10 @@ | ||
| 1 | +What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile | |
| 2 | +Date: October 2010 | |
| 3 | +Contact: Stefan Achatz <erazor_de@users.sourceforge.net> | |
| 4 | +Description: The integer value of this attribute ranges from 0-4. | |
| 5 | + When read, this attribute returns the number of the actual | |
| 6 | + profile. This value is persistent, so its equivalent to the | |
| 7 | + profile that's active when the mouse is powered on next time. | |
| 8 | + When written, this file sets the number of the startup profile | |
| 9 | + and the mouse activates this profile immediately. | |
| 10 | + Please use actual_profile, it does the same thing. | |
| @@ -1,11 +1,10 @@ | ||
| 1 | 1 | What: /sys/o2cb symlink |
| 2 | −Date: Dec 2005 | |
| 3 | −KernelVersion: 2.6.16 | |
| 2 | +Date: May 2011 | |
| 3 | +KernelVersion: 2.6.40 | |
| 4 | 4 | Contact: ocfs2-devel@oss.oracle.com |
| 5 | −Description: This is a symlink: /sys/o2cb to /sys/fs/o2cb. The symlink will | |
| 6 | − be removed when new versions of ocfs2-tools which know to look | |
| 5 | +Description: This is a symlink: /sys/o2cb to /sys/fs/o2cb. The symlink is | |
| 6 | + removed when new versions of ocfs2-tools which know to look | |
| 7 | 7 | in /sys/fs/o2cb are sufficiently prevalent. Don't code new |
| 8 | 8 | software to look here, it should try /sys/fs/o2cb instead. |
| 9 | − See Documentation/ABI/stable/o2cb for more information on usage. | |
| 10 | 9 | Users: ocfs2-tools. It's sufficient to mail proposed changes to |
| 11 | 10 | ocfs2-devel@oss.oracle.com. |
| @@ -142,3 +142,67 @@ Description: · 141 unmodified lines | ||
| 142 | 142 | with the previous I/O request are enabled. When set to 2, |
| 143 | 143 | all merge tries are disabled. The default value is 0 - |
| 144 | 144 | which enables all types of merge tries. |
| 145 | + | |
| 146 | +What: /sys/block/<disk>/discard_alignment | |
| 147 | +Date: May 2011 | |
| 148 | +Contact: Martin K. Petersen <martin.petersen@oracle.com> | |
| 149 | +Description: | |
| 150 | + Devices that support discard functionality may | |
| 151 | + internally allocate space in units that are bigger than | |
| 152 | + the exported logical block size. The discard_alignment | |
| 153 | + parameter indicates how many bytes the beginning of the | |
| 154 | + device is offset from the internal allocation unit's | |
| 155 | + natural alignment. | |
| 156 | + | |
| 157 | +What: /sys/block/<disk>/<partition>/discard_alignment | |
| 158 | +Date: May 2011 | |
| 159 | +Contact: Martin K. Petersen <martin.petersen@oracle.com> | |
| 160 | +Description: | |
| 161 | + Devices that support discard functionality may | |
| 162 | + internally allocate space in units that are bigger than | |
| 163 | + the exported logical block size. The discard_alignment | |
| 164 | + parameter indicates how many bytes the beginning of the | |
| 165 | + partition is offset from the internal allocation unit's | |
| 166 | + natural alignment. | |
| 167 | + | |
| 168 | +What: /sys/block/<disk>/queue/discard_granularity | |
| 169 | +Date: May 2011 | |
| 170 | +Contact: Martin K. Petersen <martin.petersen@oracle.com> | |
| 171 | +Description: | |
| 172 | + Devices that support discard functionality may | |
| 173 | + internally allocate space using units that are bigger | |
| 174 | + than the logical block size. The discard_granularity | |
| 175 | + parameter indicates the size of the internal allocation | |
| 176 | + unit in bytes if reported by the device. Otherwise the | |
| 177 | + discard_granularity will be set to match the device's | |
| 178 | + physical block size. A discard_granularity of 0 means | |
| 179 | + that the device does not support discard functionality. | |
| 180 | + | |
| 181 | +What: /sys/block/<disk>/queue/discard_max_bytes | |
| 182 | +Date: May 2011 | |
| 183 | +Contact: Martin K. Petersen <martin.petersen@oracle.com> | |
| 184 | +Description: | |
| 185 | + Devices that support discard functionality may have | |
| 186 | + internal limits on the number of bytes that can be | |
| 187 | + trimmed or unmapped in a single operation. Some storage | |
| 188 | + protocols also have inherent limits on the number of | |
| 189 | + blocks that can be described in a single command. The | |
| 190 | + discard_max_bytes parameter is set by the device driver | |
| 191 | + to the maximum number of bytes that can be discarded in | |
| 192 | + a single operation. Discard requests issued to the | |
| 193 | + device must not exceed this limit. A discard_max_bytes | |
| 194 | + value of 0 means that the device does not support | |
| 195 | + discard functionality. | |
| 196 | + | |
| 197 | +What: /sys/block/<disk>/queue/discard_zeroes_data | |
| 198 | +Date: May 2011 | |
| 199 | +Contact: Martin K. Petersen <martin.petersen@oracle.com> | |
| 200 | +Description: | |
| 201 | + Devices that support discard functionality may return | |
| 202 | + stale or random data when a previously discarded block | |
| 203 | + is read back. This can cause problems if the filesystem | |
| 204 | + expects discarded blocks to be explicitly cleared. If a | |
| 205 | + device reports that it deterministically returns zeroes | |
| 206 | + when a discarded area is read the discard_zeroes_data | |
| 207 | + parameter will be set to one. Otherwise it will be 0 and | |
| 208 | + the result of reading a discarded area is undefined. | |
| @@ -0,0 +1,31 @@ | ||
| 1 | +What: /sys/bus/bcma/devices/.../manuf | |
| 2 | +Date: May 2011 | |
| 3 | +KernelVersion: 2.6.40 | |
| 4 | +Contact: Rafał Miłecki <zajec5@gmail.com> | |
| 5 | +Description: | |
| 6 | + Each BCMA core has it's manufacturer id. See | |
| 7 | + include/linux/bcma/bcma.h for possible values. | |
| 8 | + | |
| 9 | +What: /sys/bus/bcma/devices/.../id | |
| 10 | +Date: May 2011 | |
| 11 | +KernelVersion: 2.6.40 | |
| 12 | +Contact: Rafał Miłecki <zajec5@gmail.com> | |
| 13 | +Description: | |
| 14 | + There are a few types of BCMA cores, they can be identified by | |
| 15 | + id field. | |
| 16 | + | |
| 17 | +What: /sys/bus/bcma/devices/.../rev | |
| 18 | +Date: May 2011 | |
| 19 | +KernelVersion: 2.6.40 | |
| 20 | +Contact: Rafał Miłecki <zajec5@gmail.com> | |
| 21 | +Description: | |
| 22 | + BCMA cores of the same type can still slightly differ depending | |
| 23 | + on their revision. Use it for detailed programming. | |
| 24 | + | |
| 25 | +What: /sys/bus/bcma/devices/.../class | |
| 26 | +Date: May 2011 | |
| 27 | +KernelVersion: 2.6.40 | |
| 28 | +Contact: Rafał Miłecki <zajec5@gmail.com> | |
| 29 | +Description: | |
| 30 | + Each BCMA core is identified by few fields, including class it | |
| 31 | + belongs to. See include/linux/bcma/bcma.h for possible values. | |
| @@ -29,7 +29,7 @@ Contact: Cornelia Huck <cornelia.huck@de.ibm.com> · 28 unmodified lines | ||
| 29 | 29 | linux-s390@vger.kernel.org |
| 30 | 30 | Description: Contains the PIM/PAM/POM values, as reported by the |
| 31 | 31 | channel subsystem when last queried by the common I/O |
| 32 | − layer (this implies that this attribute is not neccessarily | |
| 32 | + layer (this implies that this attribute is not necessarily | |
| 33 | 33 | in sync with the values current in the channel subsystem). |
| 34 | 34 | Note: This is an I/O-subchannel specific attribute. |
| 35 | 35 | Users: s390-tools, HAL |
| @@ -74,6 +74,15 @@ Description: · 73 unmodified lines | ||
| 74 | 74 | hot-remove the PCI device and any of its children. |
| 75 | 75 | Depends on CONFIG_HOTPLUG. |
| 76 | 76 | |
| 77 | +What: /sys/bus/pci/devices/.../pci_bus/.../rescan | |
| 78 | +Date: May 2011 | |
| 79 | +Contact: Linux PCI developers <linux-pci@vger.kernel.org> | |
| 80 | +Description: | |
| 81 | + Writing a non-zero value to this attribute will | |
| 82 | + force a rescan of the bus and all child buses, | |
| 83 | + and re-discover devices removed earlier from this | |
| 84 | + part of the device tree. Depends on CONFIG_HOTPLUG. | |
| 85 | + | |
| 77 | 86 | What: /sys/bus/pci/devices/.../rescan |
| 78 | 87 | Date: January 2009 |
| 79 | 88 | Contact: Linux PCI developers <linux-pci@vger.kernel.org> |
| @@ -33,5 +33,5 @@ Contact: Richard Purdie <rpurdie@rpsys.net> · 32 unmodified lines | ||
| 33 | 33 | Description: |
| 34 | 34 | Invert the LED on/off state. This parameter is specific to |
| 35 | 35 | gpio and backlight triggers. In case of the backlight trigger, |
| 36 | − it is usefull when driving a LED which is intended to indicate | |
| 36 | + it is useful when driving a LED which is intended to indicate | |
| 37 | 37 | a device in a standby like state. |
| @@ -183,21 +183,21 @@ Description: Discover and change clock speed of CPUs · 182 unmodified lines | ||
| 183 | 183 | to learn how to control the knobs. |
| 184 | 184 | |
| 185 | 185 | |
| 186 | −What: /sys/devices/system/cpu/cpu*/cache/index*/cache_disable_X | |
| 187 | −Date: August 2008 | |
| 186 | +What: /sys/devices/system/cpu/cpu*/cache/index3/cache_disable_{0,1} | |
| 187 | +Date: August 2008 | |
| 188 | 188 | KernelVersion: 2.6.27 |
| 189 | −Contact: mark.langsdorf@amd.com | |
| 190 | −Description: These files exist in every cpu's cache index directories. | |
| 191 | − There are currently 2 cache_disable_# files in each | |
| 192 | − directory. Reading from these files on a supported | |
| 193 | − processor will return that cache disable index value | |
| 194 | − for that processor and node. Writing to one of these | |
| 195 | − files will cause the specificed cache index to be disabled. | |
| 196 | − | |
| 197 | − Currently, only AMD Family 10h Processors support cache index | |
| 198 | − disable, and only for their L3 caches. See the BIOS and | |
| 199 | − Kernel Developer's Guide at | |
| 200 | − http://support.amd.com/us/Embedded_TechDocs/31116-Public-GH-BKDG_3-28_5-28-09.pdf | |
| 201 | − for formatting information and other details on the | |
| 202 | − cache index disable. | |
| 203 | −Users: joachim.deguara@amd.com | |
| 189 | +Contact: discuss@x86-64.org | |
| 190 | +Description: Disable L3 cache indices | |
| 191 | + | |
| 192 | + These files exist in every CPU's cache/index3 directory. Each | |
| 193 | + cache_disable_{0,1} file corresponds to one disable slot which | |
| 194 | + can be used to disable a cache index. Reading from these files | |
| 195 | + on a processor with this functionality will return the currently | |
| 196 | + disabled index for that node. There is one L3 structure per | |
| 197 | + node, or per internal node on MCM machines. Writing a valid | |
| 198 | + index to one of these files will cause the specificed cache | |
| 199 | + index to be disabled. | |
| 200 | + | |
| 201 | + All AMD processors with L3 caches provide this functionality. | |
| 202 | + For details, see BKDGs at | |
| 203 | + http://developer.amd.com/documentation/guides/Pages/default.aspx | |
| @@ -40,7 +40,7 @@ What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid- · 39 unmodified lines | ||
| 40 | 40 | Date: March 2010 |
| 41 | 41 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 42 | 42 | Description: The mouse can store 5 profiles which can be switched by the |
| 43 | − press of a button. A profile holds informations like button | |
| 43 | + press of a button. A profile holds information like button | |
| 44 | 44 | mappings, sensitivity, the colors of the 5 leds and light |
| 45 | 45 | effects. |
| 46 | 46 | When read, these files return the respective profile. The |
| @@ -1,9 +1,12 @@ | ||
| 1 | 1 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/actual_profile |
| 2 | 2 | Date: October 2010 |
| 3 | 3 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 4 | −Description: When read, this file returns the number of the actual profile in | |
| 5 | − range 0-4. | |
| 6 | − This file is readonly. | |
| 4 | +Description: The integer value of this attribute ranges from 0-4. | |
| 5 | + When read, this attribute returns the number of the actual | |
| 6 | + profile. This value is persistent, so its equivalent to the | |
| 7 | + profile that's active when the mouse is powered on next time. | |
| 8 | + When written, this file sets the number of the startup profile | |
| 9 | + and the mouse activates this profile immediately. | |
| 7 | 10 | Users: http://roccat.sourceforge.net |
| 8 | 11 | |
| 9 | 12 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/firmware_version |
| @@ -33,7 +36,7 @@ Date: August 2010 · 23 unmodified lines | ||
| 33 | 36 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 34 | 37 | Description: The mouse can store 5 profiles which can be switched by the |
| 35 | 38 | press of a button. A profile is split in settings and buttons. |
| 36 | − profile_buttons holds informations about button layout. | |
| 39 | + profile_buttons holds information about button layout. | |
| 37 | 40 | When written, this file lets one write the respective profile |
| 38 | 41 | buttons back to the mouse. The data has to be 77 bytes long. |
| 39 | 42 | The mouse will reject invalid data. |
| @@ -47,7 +50,7 @@ Date: August 2010 · 7 unmodified lines | ||
| 47 | 50 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 48 | 51 | Description: The mouse can store 5 profiles which can be switched by the |
| 49 | 52 | press of a button. A profile is split in settings and buttons. |
| 50 | − profile_buttons holds informations about button layout. | |
| 53 | + profile_buttons holds information about button layout. | |
| 51 | 54 | When read, these files return the respective profile buttons. |
| 52 | 55 | The returned data is 77 bytes in size. |
| 53 | 56 | This file is readonly. |
| @@ -58,7 +61,7 @@ Date: October 2010 · 4 unmodified lines | ||
| 58 | 61 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 59 | 62 | Description: The mouse can store 5 profiles which can be switched by the |
| 60 | 63 | press of a button. A profile is split in settings and buttons. |
| 61 | − profile_settings holds informations like resolution, sensitivity | |
| 64 | + profile_settings holds information like resolution, sensitivity | |
| 62 | 65 | and light effects. |
| 63 | 66 | When written, this file lets one write the respective profile |
| 64 | 67 | settings back to the mouse. The data has to be 43 bytes long. |
| @@ -73,7 +76,7 @@ Date: August 2010 · 8 unmodified lines | ||
| 73 | 76 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 74 | 77 | Description: The mouse can store 5 profiles which can be switched by the |
| 75 | 78 | press of a button. A profile is split in settings and buttons. |
| 76 | − profile_settings holds informations like resolution, sensitivity | |
| 79 | + profile_settings holds information like resolution, sensitivity | |
| 77 | 80 | and light effects. |
| 78 | 81 | When read, these files return the respective profile settings. |
| 79 | 82 | The returned data is 43 bytes in size. |
| @@ -89,16 +92,6 @@ Description: The mouse has a tracking- and a distance-control-unit. These · 9 unmodified lines | ||
| 89 | 92 | This file is writeonly. |
| 90 | 93 | Users: http://roccat.sourceforge.net |
| 91 | 94 | |
| 92 | −What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile | |
| 93 | −Date: October 2010 | |
| 94 | −Contact: Stefan Achatz <erazor_de@users.sourceforge.net> | |
| 95 | −Description: The integer value of this attribute ranges from 0-4. | |
| 96 | − When read, this attribute returns the number of the profile | |
| 97 | − that's active when the mouse is powered on. | |
| 98 | − When written, this file sets the number of the startup profile | |
| 99 | − and the mouse activates this profile immediately. | |
| 100 | −Users: http://roccat.sourceforge.net | |
| 101 | − | |
| 102 | 95 | What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu |
| 103 | 96 | Date: October 2010 |
| 104 | 97 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| @@ -52,7 +52,7 @@ Date: January 2011 · 51 unmodified lines | ||
| 52 | 52 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 53 | 53 | Description: The mouse can store 5 profiles which can be switched by the |
| 54 | 54 | press of a button. A profile is split in settings and buttons. |
| 55 | − profile_buttons holds informations about button layout. | |
| 55 | + profile_buttons holds information about button layout. | |
| 56 | 56 | When written, this file lets one write the respective profile |
| 57 | 57 | buttons back to the mouse. The data has to be 23 bytes long. |
| 58 | 58 | The mouse will reject invalid data. |
| @@ -66,7 +66,7 @@ Date: January 2011 · 7 unmodified lines | ||
| 66 | 66 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 67 | 67 | Description: The mouse can store 5 profiles which can be switched by the |
| 68 | 68 | press of a button. A profile is split in settings and buttons. |
| 69 | − profile_buttons holds informations about button layout. | |
| 69 | + profile_buttons holds information about button layout. | |
| 70 | 70 | When read, these files return the respective profile buttons. |
| 71 | 71 | The returned data is 23 bytes in size. |
| 72 | 72 | This file is readonly. |
| @@ -77,7 +77,7 @@ Date: January 2011 · 4 unmodified lines | ||
| 77 | 77 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 78 | 78 | Description: The mouse can store 5 profiles which can be switched by the |
| 79 | 79 | press of a button. A profile is split in settings and buttons. |
| 80 | − profile_settings holds informations like resolution, sensitivity | |
| 80 | + profile_settings holds information like resolution, sensitivity | |
| 81 | 81 | and light effects. |
| 82 | 82 | When written, this file lets one write the respective profile |
| 83 | 83 | settings back to the mouse. The data has to be 16 bytes long. |
| @@ -92,7 +92,7 @@ Date: January 2011 · 8 unmodified lines | ||
| 92 | 92 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 93 | 93 | Description: The mouse can store 5 profiles which can be switched by the |
| 94 | 94 | press of a button. A profile is split in settings and buttons. |
| 95 | − profile_settings holds informations like resolution, sensitivity | |
| 95 | + profile_settings holds information like resolution, sensitivity | |
| 96 | 96 | and light effects. |
| 97 | 97 | When read, these files return the respective profile settings. |
| 98 | 98 | The returned data is 16 bytes in size. |
| @@ -39,7 +39,7 @@ Date: August 2010 · 38 unmodified lines | ||
| 39 | 39 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 40 | 40 | Description: The mouse can store 5 profiles which can be switched by the |
| 41 | 41 | press of a button. A profile is split in settings and buttons. |
| 42 | − profile_settings holds informations like resolution, sensitivity | |
| 42 | + profile_settings holds information like resolution, sensitivity | |
| 43 | 43 | and light effects. |
| 44 | 44 | When written, this file lets one write the respective profile |
| 45 | 45 | settings back to the mouse. The data has to be 13 bytes long. |
| @@ -54,7 +54,7 @@ Date: August 2010 · 8 unmodified lines | ||
| 54 | 54 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 55 | 55 | Description: The mouse can store 5 profiles which can be switched by the |
| 56 | 56 | press of a button. A profile is split in settings and buttons. |
| 57 | − profile_settings holds informations like resolution, sensitivity | |
| 57 | + profile_settings holds information like resolution, sensitivity | |
| 58 | 58 | and light effects. |
| 59 | 59 | When read, these files return the respective profile settings. |
| 60 | 60 | The returned data is 13 bytes in size. |
| @@ -66,7 +66,7 @@ Date: August 2010 · 5 unmodified lines | ||
| 66 | 66 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 67 | 67 | Description: The mouse can store 5 profiles which can be switched by the |
| 68 | 68 | press of a button. A profile is split in settings and buttons. |
| 69 | − profile_buttons holds informations about button layout. | |
| 69 | + profile_buttons holds information about button layout. | |
| 70 | 70 | When written, this file lets one write the respective profile |
| 71 | 71 | buttons back to the mouse. The data has to be 19 bytes long. |
| 72 | 72 | The mouse will reject invalid data. |
| @@ -80,7 +80,7 @@ Date: August 2010 · 7 unmodified lines | ||
| 80 | 80 | Contact: Stefan Achatz <erazor_de@users.sourceforge.net> |
| 81 | 81 | Description: The mouse can store 5 profiles which can be switched by the |
| 82 | 82 | press of a button. A profile is split in settings and buttons. |
| 83 | − profile_buttons holds informations about button layout. | |
| 83 | + profile_buttons holds information about button layout. | |
| 84 | 84 | When read, these files return the respective profile buttons. |
| 85 | 85 | The returned data is 19 bytes in size. |
| 86 | 86 | This file is readonly. |
| @@ -14,14 +14,15 @@ Description: · 13 unmodified lines | ||
| 14 | 14 | |
| 15 | 15 | DMI is structured as a large table of entries, where |
| 16 | 16 | each entry has a common header indicating the type and |
| 17 | − length of the entry, as well as 'handle' that is | |
| 18 | − supposed to be unique amongst all entries. | |
| 17 | + length of the entry, as well as a firmware-provided | |
| 18 | + 'handle' that is supposed to be unique amongst all | |
| 19 | + entries. | |
| 19 | 20 | |
| 20 | 21 | Some entries are required by the specification, but many |
| 21 | 22 | others are optional. In general though, users should |
| 22 | 23 | never expect to find a specific entry type on their |
| 23 | 24 | system unless they know for certain what their firmware |
| 24 | − is doing. Machine to machine will vary. | |
| 25 | + is doing. Machine to machine experiences will vary. | |
| 25 | 26 | |
| 26 | 27 | Multiple entries of the same type are allowed. In order |
| 27 | 28 | to handle these duplicate entry types, each entry is |
| @@ -67,25 +68,24 @@ Description: · 39 unmodified lines | ||
| 67 | 68 | and the two terminating nul characters. |
| 68 | 69 | type : The type of the entry. This value is the same |
| 69 | 70 | as found in the directory name. It indicates |
| 70 | − how the rest of the entry should be | |
| 71 | − interpreted. | |
| 71 | + how the rest of the entry should be interpreted. | |
| 72 | 72 | instance: The instance ordinal of the entry for the |
| 73 | 73 | given type. This value is the same as found |
| 74 | 74 | in the parent directory name. |
| 75 | − position: The position of the entry within the entirety | |
| 76 | − of the entirety. | |
| 75 | + position: The ordinal position (zero-based) of the entry | |
| 76 | + within the entirety of the DMI entry table. | |
| 77 | 77 | |
| 78 | 78 | === Entry Specialization === |
| 79 | 79 | |
| 80 | 80 | Some entry types may have other information available in |
| 81 | − sysfs. | |
| 81 | + sysfs. Not all types are specialized. | |
| 82 | 82 | |
| 83 | 83 | --- Type 15 - System Event Log --- |
| 84 | 84 | |
| 85 | 85 | This entry allows the firmware to export a log of |
| 86 | 86 | events the system has taken. This information is |
| 87 | 87 | typically backed by nvram, but the implementation |
| 88 | − details are abstracted by this table. This entries data | |
| 88 | + details are abstracted by this table. This entry's data | |
| 89 | 89 | is exported in the directory: |
| 90 | 90 | |
| 91 | 91 | /sys/firmware/dmi/entries/15-0/system_event_log |
| @@ -0,0 +1,58 @@ | ||
| 1 | +What: /sys/firmware/gsmi | |
| 2 | +Date: March 2011 | |
| 3 | +Contact: Mike Waychison <mikew@google.com> | |
| 4 | +Description: | |
| 5 | + Some servers used internally at Google have firmware | |
| 6 | + that provides callback functionality via explicit SMI | |
| 7 | + triggers. Some of the callbacks are similar to those | |
| 8 | + provided by the EFI runtime services page, but due to | |
| 9 | + historical reasons this different entry-point has been | |
| 10 | + used. | |
| 11 | + | |
| 12 | + The gsmi driver implements the kernel's abstraction for | |
| 13 | + these firmware callbacks. Currently, this functionality | |
| 14 | + is limited to handling the system event log and getting | |
| 15 | + access to EFI-style variables stored in nvram. | |
| 16 | + | |
| 17 | + Layout: | |
| 18 | + | |
| 19 | + /sys/firmware/gsmi/vars: | |
| 20 | + | |
| 21 | + This directory has the same layout (and | |
| 22 | + underlying implementation as /sys/firmware/efi/vars. | |
| 23 | + See Documentation/ABI/*/sysfs-firmware-efi-vars | |
| 24 | + for more information on how to interact with | |
| 25 | + this structure. | |
| 26 | + | |
| 27 | + /sys/firmware/gsmi/append_to_eventlog - write-only: | |
| 28 | + | |
| 29 | + This file takes a binary blob and passes it onto | |
| 30 | + the firmware to be timestamped and appended to | |
| 31 | + the system eventlog. The binary format is | |
| 32 | + interpreted by the firmware and may change from | |
| 33 | + platform to platform. The only kernel-enforced | |
| 34 | + requirement is that the blob be prefixed with a | |
| 35 | + 32bit host-endian type used as part of the | |
| 36 | + firmware call. | |
| 37 | + | |
| 38 | + /sys/firmware/gsmi/clear_config - write-only: | |
| 39 | + | |
| 40 | + Writing any value to this file will cause the | |
| 41 | + entire firmware configuration to be reset to | |
| 42 | + "factory defaults". Callers should assume that | |
| 43 | + a reboot is required for the configuration to be | |
| 44 | + cleared. | |
| 45 | + | |
| 46 | + /sys/firmware/gsmi/clear_eventlog - write-only: | |
| 47 | + | |
| 48 | + This file is used to clear out a portion/the | |
| 49 | + whole of the system event log. Values written | |
| 50 | + should be values between 1 and 100 inclusive (in | |
| 51 | + ASCII) representing the fraction of the log to | |
| 52 | + clear. Not all platforms support fractional | |
| 53 | + clearing though, and this writes to this file | |
| 54 | + will error out if the firmware doesn't like your | |
| 55 | + submitted fraction. | |
| 56 | + | |
| 57 | + Callers should assume that a reboot is needed | |
| 58 | + for this operation to complete. | |
| @@ -0,0 +1,7 @@ | ||
| 1 | +What: /sys/firmware/log | |
| 2 | +Date: February 2011 | |
| 3 | +Contact: Mike Waychison <mikew@google.com> | |
| 4 | +Description: | |
| 5 | + The /sys/firmware/log is a binary file that represents a | |
| 6 | + read-only copy of the firmware's log if one is | |
| 7 | + available. | |
| @@ -0,0 +1,8 @@ | ||
| 1 | +What: /sys/kernel/fscaps | |
| 2 | +Date: February 2011 | |
| 3 | +KernelVersion: 2.6.38 | |
| 4 | +Contact: Ludwig Nussel <ludwig.nussel@suse.de> | |
| 5 | +Description | |
| 6 | + Shows whether file system capabilities are honored | |
| 7 | + when executing a binary | |
| 8 | + | |
| @@ -0,0 +1,11 @@ | ||
| 1 | +What: /sys/kernel/mm/cleancache/ | |
| 2 | +Date: April 2011 | |
| 3 | +Contact: Dan Magenheimer <dan.magenheimer@oracle.com> | |
| 4 | +Description: | |
| 5 | + /sys/kernel/mm/cleancache/ contains a number of files which | |
| 6 | + record a count of various cleancache operations | |
| 7 | + (sum across all filesystems): | |
| 8 | + succ_gets | |
| 9 | + failed_gets | |
| 10 | + puts | |
| 11 | + flushes | |
| @@ -27,7 +27,7 @@ KernelVersion: 2.6.20 · 26 unmodified lines | ||
| 27 | 27 | Contact: "Corentin Chary" <corentincj@iksaif.net> |
| 28 | 28 | Description: |
| 29 | 29 | Some models like the W1N have a LED display that can be |
| 30 | − used to display several informations. | |
| 30 | + used to display several items of information. | |
| 31 | 31 | To control the LED display, use the following : |
| 32 | 32 | echo 0x0T000DDD > /sys/devices/platform/asus_laptop/ |
| 33 | 33 | where T control the 3 letters display, and DDD the 3 digits display. |
| @@ -158,3 +158,17 @@ Description: · 157 unmodified lines | ||
| 158 | 158 | successful, will make the kernel abort a subsequent transition |
| 159 | 159 | to a sleep state if any wakeup events are reported after the |
| 160 | 160 | write has returned. |
| 161 | + | |
| 162 | +What: /sys/power/reserved_size | |
| 163 | +Date: May 2011 | |
| 164 | +Contact: Rafael J. Wysocki <rjw@sisk.pl> | |
| 165 | +Description: | |
| 166 | + The /sys/power/reserved_size file allows user space to control | |
| 167 | + the amount of memory reserved for allocations made by device | |
| 168 | + drivers during the "device freeze" stage of hibernation. It can | |
| 169 | + be written a string representing a non-negative integer that | |
| 170 | + will be used as the amount of memory to reserve for allocations | |
| 171 | + made by device drivers' "freeze" callbacks, in bytes. | |
| 172 | + | |
| 173 | + Reading from this file will display the current value, which is | |
| 174 | + set to 1 MB by default. | |
| @@ -0,0 +1,98 @@ | ||
| 1 | +What: /sys/class/ptp/ | |
| 2 | +Date: September 2010 | |
| 3 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 4 | +Description: | |
| 5 | + This directory contains files and directories | |
| 6 | + providing a standardized interface to the ancillary | |
| 7 | + features of PTP hardware clocks. | |
| 8 | + | |
| 9 | +What: /sys/class/ptp/ptpN/ | |
| 10 | +Date: September 2010 | |
| 11 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 12 | +Description: | |
| 13 | + This directory contains the attributes of the Nth PTP | |
| 14 | + hardware clock registered into the PTP class driver | |
| 15 | + subsystem. | |
| 16 | + | |
| 17 | +What: /sys/class/ptp/ptpN/clock_name | |
| 18 | +Date: September 2010 | |
| 19 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 20 | +Description: | |
| 21 | + This file contains the name of the PTP hardware clock | |
| 22 | + as a human readable string. | |
| 23 | + | |
| 24 | +What: /sys/class/ptp/ptpN/max_adjustment | |
| 25 | +Date: September 2010 | |
| 26 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 27 | +Description: | |
| 28 | + This file contains the PTP hardware clock's maximum | |
| 29 | + frequency adjustment value (a positive integer) in | |
| 30 | + parts per billion. | |
| 31 | + | |
| 32 | +What: /sys/class/ptp/ptpN/n_alarms | |
| 33 | +Date: September 2010 | |
| 34 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 35 | +Description: | |
| 36 | + This file contains the number of periodic or one shot | |
| 37 | + alarms offer by the PTP hardware clock. | |
| 38 | + | |
| 39 | +What: /sys/class/ptp/ptpN/n_external_timestamps | |
| 40 | +Date: September 2010 | |
| 41 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 42 | +Description: | |
| 43 | + This file contains the number of external timestamp | |
| 44 | + channels offered by the PTP hardware clock. | |
| 45 | + | |
| 46 | +What: /sys/class/ptp/ptpN/n_periodic_outputs | |
| 47 | +Date: September 2010 | |
| 48 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 49 | +Description: | |
| 50 | + This file contains the number of programmable periodic | |
| 51 | + output channels offered by the PTP hardware clock. | |
| 52 | + | |
| 53 | +What: /sys/class/ptp/ptpN/pps_avaiable | |
| 54 | +Date: September 2010 | |
| 55 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 56 | +Description: | |
| 57 | + This file indicates whether the PTP hardware clock | |
| 58 | + supports a Pulse Per Second to the host CPU. Reading | |
| 59 | + "1" means that the PPS is supported, while "0" means | |
| 60 | + not supported. | |
| 61 | + | |
| 62 | +What: /sys/class/ptp/ptpN/extts_enable | |
| 63 | +Date: September 2010 | |
| 64 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 65 | +Description: | |
| 66 | + This write-only file enables or disables external | |
| 67 | + timestamps. To enable external timestamps, write the | |
| 68 | + channel index followed by a "1" into the file. | |
| 69 | + To disable external timestamps, write the channel | |
| 70 | + index followed by a "0" into the file. | |
| 71 | + | |
| 72 | +What: /sys/class/ptp/ptpN/fifo | |
| 73 | +Date: September 2010 | |
| 74 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 75 | +Description: | |
| 76 | + This file provides timestamps on external events, in | |
| 77 | + the form of three integers: channel index, seconds, | |
| 78 | + and nanoseconds. | |
| 79 | + | |
| 80 | +What: /sys/class/ptp/ptpN/period | |
| 81 | +Date: September 2010 | |
| 82 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 83 | +Description: | |
| 84 | + This write-only file enables or disables periodic | |
| 85 | + outputs. To enable a periodic output, write five | |
| 86 | + integers into the file: channel index, start time | |
| 87 | + seconds, start time nanoseconds, period seconds, and | |
| 88 | + period nanoseconds. To disable a periodic output, set | |
| 89 | + all the seconds and nanoseconds values to zero. | |
| 90 | + | |
| 91 | +What: /sys/class/ptp/ptpN/pps_enable | |
| 92 | +Date: September 2010 | |
| 93 | +Contact: Richard Cochran <richardcochran@gmail.com> | |
| 94 | +Description: | |
| 95 | + This write-only file enables or disables delivery of | |
| 96 | + PPS events to the Linux PPS subsystem. To enable PPS | |
| 97 | + events, write a "1" into the file. To disable events, | |
| 98 | + write a "0" into the file. | |
| @@ -8,3 +8,4 @@ · 7 unmodified lines | ||
| 8 | 8 | *.dvi |
| 9 | 9 | *.log |
| 10 | 10 | *.out |
| 11 | +media/ | |
| @@ -96,10 +96,10 @@ X!Iinclude/linux/kobject.h · 95 unmodified lines | ||
| 96 | 96 | |
| 97 | 97 | <chapter id="devdrivers"> |
| 98 | 98 | <title>Device drivers infrastructure</title> |
| 99 | + <sect1><title>The Basic Device Driver-Model Structures </title> | |
| 100 | +!Iinclude/linux/device.h | |
| 101 | + </sect1> | |
| 99 | 102 | <sect1><title>Device Drivers Base</title> |
| 100 | −<!-- | |
| 101 | −X!Iinclude/linux/device.h | |
| 102 | −--> | |
| 103 | 103 | !Edrivers/base/driver.c |
| 104 | 104 | !Edrivers/base/core.c |
| 105 | 105 | !Edrivers/base/class.c |
| @@ -34,6 +34,14 @@ · 33 unmodified lines | ||
| 34 | 34 | |
| 35 | 35 | <revhistory> |
| 36 | 36 | <!-- Put document revisions here, newest first. --> |
| 37 | +<revision> | |
| 38 | + <revnumber>2.0.4</revnumber> | |
| 39 | + <date>2011-05-06</date> | |
| 40 | + <authorinitials>mcc</authorinitials> | |
| 41 | + <revremark> | |
| 42 | + Add more information about DVB APIv5, better describing the frontend GET/SET props ioctl's. | |
| 43 | + </revremark> | |
| 44 | +</revision> | |
| 37 | 45 | <revision> |
| 38 | 46 | <revnumber>2.0.3</revnumber> |
| 39 | 47 | <date>2010-07-03</date> |
| @@ -1,6 +1,330 @@ | ||
| 1 | −<section id="FE_GET_PROPERTY"> | |
| 1 | +<section id="FE_GET_SET_PROPERTY"> | |
| 2 | 2 | <title>FE_GET_PROPERTY/FE_SET_PROPERTY</title> |
| 3 | 3 | |
| 4 | +<programlisting> | |
| 5 | +/* Reserved fields should be set to 0 */ | |
| 6 | +struct dtv_property { | |
| 7 | + __u32 cmd; | |
| 8 | + union { | |
| 9 | + __u32 data; | |
| 10 | + struct { | |
| 11 | + __u8 data[32]; | |
| 12 | + __u32 len; | |
| 13 | + __u32 reserved1[3]; | |
| 14 | + void *reserved2; | |
| 15 | + } buffer; | |
| 16 | + } u; | |
| 17 | + int result; | |
| 18 | +} __attribute__ ((packed)); | |
| 19 | + | |
| 20 | +/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ | |
| 21 | +#define DTV_IOCTL_MAX_MSGS 64 | |
| 22 | + | |
| 23 | +struct dtv_properties { | |
| 24 | + __u32 num; | |
| 25 | + struct dtv_property *props; | |
| 26 | +}; | |
| 27 | +</programlisting> | |
| 28 | + | |
| 29 | +<section id="FE_GET_PROPERTY"> | |
| 30 | +<title>FE_GET_PROPERTY</title> | |
| 31 | +<para>DESCRIPTION | |
| 32 | +</para> | |
| 33 | +<informaltable><tgroup cols="1"><tbody><row><entry | |
| 34 | + align="char"> | |
| 35 | +<para>This ioctl call returns one or more frontend properties. This call only | |
| 36 | + requires read-only access to the device.</para> | |
| 37 | +</entry> | |
| 38 | + </row></tbody></tgroup></informaltable> | |
| 39 | +<para>SYNOPSIS | |
| 40 | +</para> | |
| 41 | +<informaltable><tgroup cols="1"><tbody><row><entry | |
| 42 | + align="char"> | |
| 43 | +<para>int ioctl(int fd, int request = <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link>, | |
| 44 | + dtv_properties ⋆props);</para> | |
| 45 | +</entry> | |
| 46 | + </row></tbody></tgroup></informaltable> | |
| 47 | +<para>PARAMETERS | |
| 48 | +</para> | |
| 49 | +<informaltable><tgroup cols="2"><tbody><row><entry align="char"> | |
| 50 | +<para>int fd</para> | |
| 51 | +</entry><entry | |
| 52 | + align="char"> | |
| 53 | +<para>File descriptor returned by a previous call to open().</para> | |
| 54 | +</entry> | |
| 55 | + </row><row><entry | |
| 56 | + align="char"> | |
| 57 | +<para>int num</para> | |
| 58 | +</entry><entry | |
| 59 | + align="char"> | |
| 60 | +<para>Equals <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link> for this command.</para> | |
| 61 | +</entry> | |
| 62 | + </row><row><entry | |
| 63 | + align="char"> | |
| 64 | +<para>struct dtv_property *props</para> | |
| 65 | +</entry><entry | |
| 66 | + align="char"> | |
| 67 | +<para>Points to the location where the front-end property commands are stored.</para> | |
| 68 | +</entry> | |
| 69 | + </row></tbody></tgroup></informaltable> | |
| 70 | +<para>ERRORS</para> | |
| 71 | +<informaltable><tgroup cols="2"><tbody><row> | |
| 72 | + <entry align="char"><para>EINVAL</para></entry> | |
| 73 | + <entry align="char"><para>Invalid parameter(s) received or number of parameters out of the range.</para></entry> | |
| 74 | + </row><row> | |
| 75 | + <entry align="char"><para>ENOMEM</para></entry> | |
| 76 | + <entry align="char"><para>Out of memory.</para></entry> | |
| 77 | + </row><row> | |
| 78 | + <entry align="char"><para>EFAULT</para></entry> | |
| 79 | + <entry align="char"><para>Failure while copying data from/to userspace.</para></entry> | |
| 80 | + </row><row> | |
| 81 | + <entry align="char"><para>EOPNOTSUPP</para></entry> | |
| 82 | + <entry align="char"><para>Property type not supported.</para></entry> | |
| 83 | + </row></tbody></tgroup></informaltable> | |
| 84 | +</section> | |
| 85 | + | |
| 86 | +<section id="FE_SET_PROPERTY"> | |
| 87 | +<title>FE_SET_PROPERTY</title> | |
| 88 | +<para>DESCRIPTION | |
| 89 | +</para> | |
| 90 | +<informaltable><tgroup cols="1"><tbody><row><entry | |
| 91 | + align="char"> | |
| 92 | +<para>This ioctl call sets one or more frontend properties. This call only | |
| 93 | + requires read-only access to the device.</para> | |
| 94 | +</entry> | |
| 95 | + </row></tbody></tgroup></informaltable> | |
| 96 | +<para>SYNOPSIS | |
| 97 | +</para> | |
| 98 | +<informaltable><tgroup cols="1"><tbody><row><entry | |
| 99 | + align="char"> | |
| 100 | +<para>int ioctl(int fd, int request = <link linkend="FE_SET_PROPERTY">FE_SET_PROPERTY</link>, | |
| 101 | + dtv_properties ⋆props);</para> | |
| 102 | +</entry> | |
| 103 | + </row></tbody></tgroup></informaltable> | |
| 104 | +<para>PARAMETERS | |
| 105 | +</para> | |
| 106 | +<informaltable><tgroup cols="2"><tbody><row><entry align="char"> | |
| 107 | +<para>int fd</para> | |
| 108 | +</entry><entry | |
| 109 | + align="char"> | |
| 110 | +<para>File descriptor returned by a previous call to open().</para> | |
| 111 | +</entry> | |
| 112 | + </row><row><entry | |
| 113 | + align="char"> | |
| 114 | +<para>int num</para> | |
| 115 | +</entry><entry | |
| 116 | + align="char"> | |
| 117 | +<para>Equals <link linkend="FE_SET_PROPERTY">FE_SET_PROPERTY</link> for this command.</para> | |
| 118 | +</entry> | |
| 119 | + </row><row><entry | |
| 120 | + align="char"> | |
| 121 | +<para>struct dtv_property *props</para> | |
| 122 | +</entry><entry | |
| 123 | + align="char"> | |
| 124 | +<para>Points to the location where the front-end property commands are stored.</para> | |
| 125 | +</entry> | |
| 126 | + </row></tbody></tgroup></informaltable> | |
| 127 | +<para>ERRORS | |
| 128 | +</para> | |
| 129 | +<informaltable><tgroup cols="2"><tbody><row> | |
| 130 | + <entry align="char"><para>EINVAL</para></entry> | |
| 131 | + <entry align="char"><para>Invalid parameter(s) received or number of parameters out of the range.</para></entry> | |
| 132 | + </row><row> | |
| 133 | + <entry align="char"><para>ENOMEM</para></entry> | |
| 134 | + <entry align="char"><para>Out of memory.</para></entry> | |
| 135 | + </row><row> | |
| 136 | + <entry align="char"><para>EFAULT</para></entry> | |
| 137 | + <entry align="char"><para>Failure while copying data from/to userspace.</para></entry> | |
| 138 | + </row><row> | |
| 139 | + <entry align="char"><para>EOPNOTSUPP</para></entry> | |
| 140 | + <entry align="char"><para>Property type not supported.</para></entry> | |
| 141 | + </row></tbody></tgroup></informaltable> | |
| 142 | +</section> | |
| 143 | + | |
| 144 | +<section> | |
| 145 | + <title>Property types</title> | |
| 146 | +<para> | |
| 147 | +On <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY</link>/<link linkend="FE_SET_PROPERTY">FE_SET_PROPERTY</link>, | |
| 148 | +the actual action is determined by the dtv_property cmd/data pairs. With one single ioctl, is possible to | |
| 149 | +get/set up to 64 properties. The actual meaning of each property is described on the next sections. | |
| 150 | +</para> | |
| 151 | + | |
| 152 | +<para>The available frontend property types are:</para> | |
| 153 | +<programlisting> | |
| 154 | +#define DTV_UNDEFINED 0 | |
| 155 | +#define DTV_TUNE 1 | |
| 156 | +#define DTV_CLEAR 2 | |
| 157 | +#define DTV_FREQUENCY 3 | |
| 158 | +#define DTV_MODULATION 4 | |
| 159 | +#define DTV_BANDWIDTH_HZ 5 | |
| 160 | +#define DTV_INVERSION 6 | |
| 161 | +#define DTV_DISEQC_MASTER 7 | |
| 162 | +#define DTV_SYMBOL_RATE 8 | |
| 163 | +#define DTV_INNER_FEC 9 | |
| 164 | +#define DTV_VOLTAGE 10 | |
| 165 | +#define DTV_TONE 11 | |
| 166 | +#define DTV_PILOT 12 | |
| 167 | +#define DTV_ROLLOFF 13 | |
| 168 | +#define DTV_DISEQC_SLAVE_REPLY 14 | |
| 169 | +#define DTV_FE_CAPABILITY_COUNT 15 | |
| 170 | +#define DTV_FE_CAPABILITY 16 | |
| 171 | +#define DTV_DELIVERY_SYSTEM 17 | |
| 172 | +#define DTV_ISDBT_PARTIAL_RECEPTION 18 | |
| 173 | +#define DTV_ISDBT_SOUND_BROADCASTING 19 | |
| 174 | +#define DTV_ISDBT_SB_SUBCHANNEL_ID 20 | |
| 175 | +#define DTV_ISDBT_SB_SEGMENT_IDX 21 | |
| 176 | +#define DTV_ISDBT_SB_SEGMENT_COUNT 22 | |
| 177 | +#define DTV_ISDBT_LAYERA_FEC 23 | |
| 178 | +#define DTV_ISDBT_LAYERA_MODULATION 24 | |
| 179 | +#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25 | |
| 180 | +#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26 | |
| 181 | +#define DTV_ISDBT_LAYERB_FEC 27 | |
| 182 | +#define DTV_ISDBT_LAYERB_MODULATION 28 | |
| 183 | +#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29 | |
| 184 | +#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30 | |
| 185 | +#define DTV_ISDBT_LAYERC_FEC 31 | |
| 186 | +#define DTV_ISDBT_LAYERC_MODULATION 32 | |
| 187 | +#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33 | |
| 188 | +#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34 | |
| 189 | +#define DTV_API_VERSION 35 | |
| 190 | +#define DTV_CODE_RATE_HP 36 | |
| 191 | +#define DTV_CODE_RATE_LP 37 | |
| 192 | +#define DTV_GUARD_INTERVAL 38 | |
| 193 | +#define DTV_TRANSMISSION_MODE 39 | |
| 194 | +#define DTV_HIERARCHY 40 | |
| 195 | +#define DTV_ISDBT_LAYER_ENABLED 41 | |
| 196 | +#define DTV_ISDBS_TS_ID 42 | |
| 197 | +</programlisting> | |
| 198 | +</section> | |
| 199 | + | |
| 200 | +<section id="fe_property_common"> | |
| 201 | + <title>Parameters that are common to all Digital TV standards</title> | |
| 202 | + <section id="DTV_FREQUENCY"> | |
| 203 | + <title><constant>DTV_FREQUENCY</constant></title> | |
| 204 | + | |
| 205 | + <para>Central frequency of the channel, in HZ.</para> | |
| 206 | + | |
| 207 | + <para>Notes:</para> | |
| 208 | + <para>1)For ISDB-T, the channels are usually transmitted with an offset of 143kHz. | |
| 209 | + E.g. a valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of | |
| 210 | + the channel which is 6MHz.</para> | |
| 211 | + | |
| 212 | + <para>2)As in ISDB-Tsb the channel consists of only one or three segments the | |
| 213 | + frequency step is 429kHz, 3*429 respectively. As for ISDB-T the | |
| 214 | + central frequency of the channel is expected.</para> | |
| 215 | + </section> | |
| 216 | + | |
| 217 | + <section id="DTV_BANDWIDTH_HZ"> | |
| 218 | + <title><constant>DTV_BANDWIDTH_HZ</constant></title> | |
| 219 | + | |
| 220 | + <para>Bandwidth for the channel, in HZ.</para> | |
| 221 | + | |
| 222 | + <para>Possible values: | |
| 223 | + <constant>1712000</constant>, | |
| 224 | + <constant>5000000</constant>, | |
| 225 | + <constant>6000000</constant>, | |
| 226 | + <constant>7000000</constant>, | |
| 227 | + <constant>8000000</constant>, | |
| 228 | + <constant>10000000</constant>. | |
| 229 | + </para> | |
| 230 | + | |
| 231 | + <para>Notes:</para> | |
| 232 | + | |
| 233 | + <para>1) For ISDB-T it should be always 6000000Hz (6MHz)</para> | |
| 234 | + <para>2) For ISDB-Tsb it can vary depending on the number of connected segments</para> | |
| 235 | + <para>3) Bandwidth doesn't apply for DVB-C transmissions, as the bandwidth | |
| 236 | + for DVB-C depends on the symbol rate</para> | |
| 237 | + <para>4) Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from | |
| 238 | + other parameters (DTV_ISDBT_SB_SEGMENT_IDX, | |
| 239 | + DTV_ISDBT_SB_SEGMENT_COUNT).</para> | |
| 240 | + <para>5) DVB-T supports 6, 7 and 8MHz.</para> | |
| 241 | + <para>6) In addition, DVB-T2 supports 1.172, 5 and 10MHz.</para> | |
| 242 | + </section> | |
| 243 | + | |
| 244 | + <section id="DTV_DELIVERY_SYSTEM"> | |
| 245 | + <title><constant>DTV_DELIVERY_SYSTEM</constant></title> | |
| 246 | + | |
| 247 | + <para>Specifies the type of Delivery system</para> | |
| 248 | + | |
| 249 | + <para>Possible values: </para> | |
| 250 | +<programlisting> | |
| 251 | +typedef enum fe_delivery_system { | |
| 252 | + SYS_UNDEFINED, | |
| 253 | + SYS_DVBC_ANNEX_AC, | |
| 254 | + SYS_DVBC_ANNEX_B, | |
| 255 | + SYS_DVBT, | |
| 256 | + SYS_DSS, | |
| 257 | + SYS_DVBS, | |
| 258 | + SYS_DVBS2, | |
| 259 | + SYS_DVBH, | |
| 260 | + SYS_ISDBT, | |
| 261 | + SYS_ISDBS, | |
| 262 | + SYS_ISDBC, | |
| 263 | + SYS_ATSC, | |
| 264 | + SYS_ATSCMH, | |
| 265 | + SYS_DMBTH, | |
| 266 | + SYS_CMMB, | |
| 267 | + SYS_DAB, | |
| 268 | + SYS_DVBT2, | |
| 269 | +} fe_delivery_system_t; | |
| 270 | +</programlisting> | |
| 271 | + | |
| 272 | + </section> | |
| 273 | + | |
| 274 | + <section id="DTV_TRANSMISSION_MODE"> | |
| 275 | + <title><constant>DTV_TRANSMISSION_MODE</constant></title> | |
| 276 | + | |
| 277 | + <para>Specifies the number of carriers used by the standard</para> | |
| 278 | + | |
| 279 | + <para>Possible values are:</para> | |
| 280 | +<programlisting> | |
| 281 | +typedef enum fe_transmit_mode { | |
| 282 | + TRANSMISSION_MODE_2K, | |
| 283 | + TRANSMISSION_MODE_8K, | |
| 284 | + TRANSMISSION_MODE_AUTO, | |
| 285 | + TRANSMISSION_MODE_4K, | |
| 286 | + TRANSMISSION_MODE_1K, | |
| 287 | + TRANSMISSION_MODE_16K, | |
| 288 | + TRANSMISSION_MODE_32K, | |
| 289 | +} fe_transmit_mode_t; | |
| 290 | +</programlisting> | |
| 291 | + | |
| 292 | + <para>Notes:</para> | |
| 293 | + <para>1) ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called | |
| 294 | + 'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K</para> | |
| 295 | + | |
| 296 | + <para>2) If <constant>DTV_TRANSMISSION_MODE</constant> is set the <constant>TRANSMISSION_MODE_AUTO</constant> the | |
| 297 | + hardware will try to find the correct FFT-size (if capable) and will | |
| 298 | + use TMCC to fill in the missing parameters.</para> | |
| 299 | + <para>3) DVB-T specifies 2K and 8K as valid sizes.</para> | |
| 300 | + <para>4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K.</para> | |
| 301 | + </section> | |
| 302 | + | |
| 303 | + <section id="DTV_GUARD_INTERVAL"> | |
| 304 | + <title><constant>DTV_GUARD_INTERVAL</constant></title> | |
| 305 | + | |
| 306 | + <para>Possible values are:</para> | |
| 307 | +<programlisting> | |
| 308 | +typedef enum fe_guard_interval { | |
| 309 | + GUARD_INTERVAL_1_32, | |
| 310 | + GUARD_INTERVAL_1_16, | |
| 311 | + GUARD_INTERVAL_1_8, | |
| 312 | + GUARD_INTERVAL_1_4, | |
| 313 | + GUARD_INTERVAL_AUTO, | |
| 314 | + GUARD_INTERVAL_1_128, | |
| 315 | + GUARD_INTERVAL_19_128, | |
| 316 | + GUARD_INTERVAL_19_256, | |
| 317 | +} fe_guard_interval_t; | |
| 318 | +</programlisting> | |
| 319 | + | |
| 320 | + <para>Notes:</para> | |
| 321 | + <para>1) If <constant>DTV_GUARD_INTERVAL</constant> is set the <constant>GUARD_INTERVAL_AUTO</constant> the hardware will | |
| 322 | + try to find the correct guard interval (if capable) and will use TMCC to fill | |
| 323 | + in the missing parameters.</para> | |
| 324 | + <para>2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present</para> | |
| 325 | + </section> | |
| 326 | +</section> | |
| 327 | + | |
| 4 | 328 | <section id="isdbt"> |
| 5 | 329 | <title>ISDB-T frontend</title> |
| 6 | 330 | <para>This section describes shortly what are the possible parameters in the Linux |
| @@ -32,73 +356,6 @@ · 25 unmodified lines | ||
| 32 | 356 | |
| 33 | 357 | <para>Parameters used by ISDB-T and ISDB-Tsb.</para> |
| 34 | 358 | |
| 35 | − <section id="isdbt-parms"> | |
| 36 | − <title>Parameters that are common with DVB-T and ATSC</title> | |
| 37 | − | |
| 38 | − <section id="isdbt-freq"> | |
| 39 | − <title><constant>DTV_FREQUENCY</constant></title> | |
| 40 | − | |
| 41 | − <para>Central frequency of the channel.</para> | |
| 42 | − | |
| 43 | − <para>For ISDB-T the channels are usally transmitted with an offset of 143kHz. E.g. a | |
| 44 | − valid frequncy could be 474143 kHz. The stepping is bound to the bandwidth of | |
| 45 | − the channel which is 6MHz.</para> | |
| 46 | − | |
| 47 | − <para>As in ISDB-Tsb the channel consists of only one or three segments the | |
| 48 | − frequency step is 429kHz, 3*429 respectively. As for ISDB-T the | |
| 49 | − central frequency of the channel is expected.</para> | |
| 50 | − </section> | |
| 51 | − | |
| 52 | − <section id="isdbt-bw"> | |
| 53 | − <title><constant>DTV_BANDWIDTH_HZ</constant> (optional)</title> | |
| 54 | − | |
| 55 | − <para>Possible values:</para> | |
| 56 | − | |
| 57 | − <para>For ISDB-T it should be always 6000000Hz (6MHz)</para> | |
| 58 | − <para>For ISDB-Tsb it can vary depending on the number of connected segments</para> | |
| 59 | − | |
| 60 | − <para>Note: Hardware specific values might be given here, but standard | |
| 61 | − applications should not bother to set a value to this field as | |
| 62 | − standard demods are ignoring it anyway.</para> | |
| 63 | − | |
| 64 | − <para>Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from | |
| 65 | − other parameters (DTV_ISDBT_SB_SEGMENT_IDX, | |
| 66 | − DTV_ISDBT_SB_SEGMENT_COUNT).</para> | |
| 67 | − </section> | |
| 68 | − | |
| 69 | − <section id="isdbt-delivery-sys"> | |
| 70 | − <title><constant>DTV_DELIVERY_SYSTEM</constant></title> | |
| 71 | − | |
| 72 | − <para>Possible values: <constant>SYS_ISDBT</constant></para> | |
| 73 | − </section> | |
| 74 | − | |
| 75 | − <section id="isdbt-tx-mode"> | |
| 76 | − <title><constant>DTV_TRANSMISSION_MODE</constant></title> | |
| 77 | − | |
| 78 | − <para>ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called | |
| 79 | − 'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K</para> | |
| 80 | − | |
| 81 | − <para>Possible values: <constant>TRANSMISSION_MODE_2K</constant>, <constant>TRANSMISSION_MODE_8K</constant>, | |
| 82 | − <constant>TRANSMISSION_MODE_AUTO</constant>, <constant>TRANSMISSION_MODE_4K</constant></para> | |
| 83 | − | |
| 84 | − <para>If <constant>DTV_TRANSMISSION_MODE</constant> is set the <constant>TRANSMISSION_MODE_AUTO</constant> the | |
| 85 | − hardware will try to find the correct FFT-size (if capable) and will | |
| 86 | − use TMCC to fill in the missing parameters.</para> | |
| 87 | − | |
| 88 | − <para><constant>TRANSMISSION_MODE_4K</constant> is added at the same time as the other new parameters.</para> | |
| 89 | − </section> | |
| 90 | − | |
| 91 | − <section id="isdbt-guard-interval"> | |
| 92 | − <title><constant>DTV_GUARD_INTERVAL</constant></title> | |
| 93 | − | |
| 94 | − <para>Possible values: <constant>GUARD_INTERVAL_1_32</constant>, <constant>GUARD_INTERVAL_1_16</constant>, <constant>GUARD_INTERVAL_1_8</constant>, | |
| 95 | − <constant>GUARD_INTERVAL_1_4</constant>, <constant>GUARD_INTERVAL_AUTO</constant></para> | |
| 96 | − | |
| 97 | − <para>If <constant>DTV_GUARD_INTERVAL</constant> is set the <constant>GUARD_INTERVAL_AUTO</constant> the hardware will | |
| 98 | − try to find the correct guard interval (if capable) and will use TMCC to fill | |
| 99 | − in the missing parameters.</para> | |
| 100 | − </section> | |
| 101 | − </section> | |
| 102 | 359 | <section id="isdbt-new-parms"> |
| 103 | 360 | <title>ISDB-T only parameters</title> |
| 104 | 361 | |
| @@ -314,5 +571,20 @@ · 209 unmodified lines | ||
| 314 | 571 | </section> |
| 315 | 572 | </section> |
| 316 | 573 | </section> |
| 574 | + <section id="dvbt2-params"> | |
| 575 | + <title>DVB-T2 parameters</title> | |
| 576 | + | |
| 577 | + <para>This section covers parameters that apply only to the DVB-T2 delivery method. DVB-T2 | |
| 578 | + support is currently in the early stages development so expect this section to grow | |
| 579 | + and become more detailed with time.</para> | |
| 580 | + | |
| 581 | + <section id="dvbt2-plp-id"> | |
| 582 | + <title><constant>DTV_DVBT2_PLP_ID</constant></title> | |
| 583 | + | |
| 584 | + <para>DVB-T2 supports Physical Layer Pipes (PLP) to allow transmission of | |
| 585 | + many data types via a single multiplex. The API will soon support this | |
| 586 | + at which point this section will be expanded.</para> | |
| 587 | + </section> | |
| 588 | + </section> | |
| 317 | 589 | </section> |
| 318 | 590 | </section> |
| @@ -176,14 +176,20 @@ typedef enum fe_transmit_mode { · 175 unmodified lines | ||
| 176 | 176 | TRANSMISSION_MODE_2K, |
| 177 | 177 | TRANSMISSION_MODE_8K, |
| 178 | 178 | TRANSMISSION_MODE_AUTO, |
| 179 | − TRANSMISSION_MODE_4K | |
| 179 | + TRANSMISSION_MODE_4K, | |
| 180 | + TRANSMISSION_MODE_1K, | |
| 181 | + TRANSMISSION_MODE_16K, | |
| 182 | + TRANSMISSION_MODE_32K, | |
| 180 | 183 | } fe_transmit_mode_t; |
| 181 | 184 | |
| 182 | 185 | typedef enum fe_bandwidth { |
| 183 | 186 | BANDWIDTH_8_MHZ, |
| 184 | 187 | BANDWIDTH_7_MHZ, |
| 185 | 188 | BANDWIDTH_6_MHZ, |
| 186 | − BANDWIDTH_AUTO | |
| 189 | + BANDWIDTH_AUTO, | |
| 190 | + BANDWIDTH_5_MHZ, | |
| 191 | + BANDWIDTH_10_MHZ, | |
| 192 | + BANDWIDTH_1_712_MHZ, | |
| 187 | 193 | } fe_bandwidth_t; |
| 188 | 194 | |
| 189 | 195 | |
| @@ -192,7 +198,10 @@ typedef enum fe_guard_interval { · 2 unmodified lines | ||
| 192 | 198 | GUARD_INTERVAL_1_16, |
| 193 | 199 | GUARD_INTERVAL_1_8, |
| 194 | 200 | GUARD_INTERVAL_1_4, |
| 195 | − GUARD_INTERVAL_AUTO | |
| 201 | + GUARD_INTERVAL_AUTO, | |
| 202 | + GUARD_INTERVAL_1_128, | |
| 203 | + GUARD_INTERVAL_19_128, | |
| 204 | + GUARD_INTERVAL_19_256, | |
| 196 | 205 | } fe_guard_interval_t; |
| 197 | 206 | |
| 198 | 207 | |
| @@ -306,7 +315,9 @@ struct dvb_frontend_event { · 107 unmodified lines | ||
| 306 | 315 | |
| 307 | 316 | #define DTV_ISDBS_TS_ID 42 |
| 308 | 317 | |
| 309 | −#define DTV_MAX_COMMAND DTV_ISDBS_TS_ID | |
| 318 | +#define DTV_DVBT2_PLP_ID 43 | |
| 319 | + | |
| 320 | +#define DTV_MAX_COMMAND DTV_DVBT2_PLP_ID | |
| 310 | 321 | |
| 311 | 322 | typedef enum fe_pilot { |
| 312 | 323 | PILOT_ON, |
| @@ -338,6 +349,7 @@ typedef enum fe_delivery_system { · 25 unmodified lines | ||
| 338 | 349 | SYS_DMBTH, |
| 339 | 350 | SYS_CMMB, |
| 340 | 351 | SYS_DAB, |
| 352 | + SYS_DVBT2, | |
| 341 | 353 | } fe_delivery_system_t; |
| 342 | 354 | |
| 343 | 355 | struct dtv_cmds_h { |
| @@ -139,7 +139,7 @@ consistently to the DiSEqC commands as described in the DiSEqC spec.</para> · 138 unmodified lines | ||
| 139 | 139 | <section id="frontend_sec_tone"> |
| 140 | 140 | <title>SEC continuous tone</title> |
| 141 | 141 | |
| 142 | −<para>The continous 22KHz tone is usually used with non-DiSEqC capable LNBs to switch the | |
| 142 | +<para>The continuous 22KHz tone is usually used with non-DiSEqC capable LNBs to switch the | |
| 143 | 143 | high/low band of a dual-band LNB. When using DiSEqC epuipment this voltage has to |
| 144 | 144 | be switched consistently to the DiSEqC commands as described in the DiSEqC |
| 145 | 145 | spec.</para> |
| @@ -191,8 +191,8 @@ · 190 unmodified lines | ||
| 191 | 191 | <para> |
| 192 | 192 | Whenever an interrupt triggers, the lowlevel arch code calls into |
| 193 | 193 | the generic interrupt code by calling desc->handle_irq(). |
| 194 | − This highlevel IRQ handling function only uses desc->chip primitives | |
| 195 | − referenced by the assigned chip descriptor structure. | |
| 194 | + This highlevel IRQ handling function only uses desc->irq_data.chip | |
| 195 | + primitives referenced by the assigned chip descriptor structure. | |
| 196 | 196 | </para> |
| 197 | 197 | </sect1> |
| 198 | 198 | <sect1 id="Highlevel_Driver_API"> |
| @@ -206,11 +206,11 @@ · 7 unmodified lines | ||
| 206 | 206 | <listitem><para>enable_irq()</para></listitem> |
| 207 | 207 | <listitem><para>disable_irq_nosync() (SMP only)</para></listitem> |
| 208 | 208 | <listitem><para>synchronize_irq() (SMP only)</para></listitem> |
| 209 | − <listitem><para>set_irq_type()</para></listitem> | |
| 210 | − <listitem><para>set_irq_wake()</para></listitem> | |
| 211 | − <listitem><para>set_irq_data()</para></listitem> | |
| 212 | − <listitem><para>set_irq_chip()</para></listitem> | |
| 213 | − <listitem><para>set_irq_chip_data()</para></listitem> | |
| 209 | + <listitem><para>irq_set_irq_type()</para></listitem> | |
| 210 | + <listitem><para>irq_set_irq_wake()</para></listitem> | |
| 211 | + <listitem><para>irq_set_handler_data()</para></listitem> | |
| 212 | + <listitem><para>irq_set_chip()</para></listitem> | |
| 213 | + <listitem><para>irq_set_chip_data()</para></listitem> | |
| 214 | 214 | </itemizedlist> |
| 215 | 215 | See the autogenerated function documentation for details. |
| 216 | 216 | </para> |
| @@ -225,6 +225,8 @@ · 8 unmodified lines | ||
| 225 | 225 | <listitem><para>handle_fasteoi_irq</para></listitem> |
| 226 | 226 | <listitem><para>handle_simple_irq</para></listitem> |
| 227 | 227 | <listitem><para>handle_percpu_irq</para></listitem> |
| 228 | + <listitem><para>handle_edge_eoi_irq</para></listitem> | |
| 229 | + <listitem><para>handle_bad_irq</para></listitem> | |
| 228 | 230 | </itemizedlist> |
| 229 | 231 | The interrupt flow handlers (either predefined or architecture |
| 230 | 232 | specific) are assigned to specific interrupts by the architecture |
| @@ -241,13 +243,13 @@ · 10 unmodified lines | ||
| 241 | 243 | <programlisting> |
| 242 | 244 | default_enable(struct irq_data *data) |
| 243 | 245 | { |
| 244 | − desc->chip->irq_unmask(data); | |
| 246 | + desc->irq_data.chip->irq_unmask(data); | |
| 245 | 247 | } |
| 246 | 248 | |
| 247 | 249 | default_disable(struct irq_data *data) |
| 248 | 250 | { |
| 249 | 251 | if (!delay_disable(data)) |
| 250 | − desc->chip->irq_mask(data); | |
| 252 | + desc->irq_data.chip->irq_mask(data); | |
| 251 | 253 | } |
| 252 | 254 | |
| 253 | 255 | default_ack(struct irq_data *data) |
| @@ -284,9 +286,9 @@ noop(struct irq_data *data)) · 30 unmodified lines | ||
| 284 | 286 | <para> |
| 285 | 287 | The following control flow is implemented (simplified excerpt): |
| 286 | 288 | <programlisting> |
| 287 | −desc->chip->irq_mask(); | |
| 288 | −handle_IRQ_event(desc->action); | |
| 289 | −desc->chip->irq_unmask(); | |
| 289 | +desc->irq_data.chip->irq_mask_ack(); | |
| 290 | +handle_irq_event(desc->action); | |
| 291 | +desc->irq_data.chip->irq_unmask(); | |
| 290 | 292 | </programlisting> |
| 291 | 293 | </para> |
| 292 | 294 | </sect3> |
| @@ -300,8 +302,8 @@ desc->chip->irq_unmask(); · 7 unmodified lines | ||
| 300 | 302 | <para> |
| 301 | 303 | The following control flow is implemented (simplified excerpt): |
| 302 | 304 | <programlisting> |
| 303 | −handle_IRQ_event(desc->action); | |
| 304 | −desc->chip->irq_eoi(); | |
| 305 | +handle_irq_event(desc->action); | |
| 306 | +desc->irq_data.chip->irq_eoi(); | |
| 305 | 307 | </programlisting> |
| 306 | 308 | </para> |
| 307 | 309 | </sect3> |
| @@ -315,17 +317,17 @@ desc->chip->irq_eoi(); · 7 unmodified lines | ||
| 315 | 317 | The following control flow is implemented (simplified excerpt): |
| 316 | 318 | <programlisting> |
| 317 | 319 | if (desc->status & running) { |
| 318 | − desc->chip->irq_mask(); | |
| 320 | + desc->irq_data.chip->irq_mask_ack(); | |
| 319 | 321 | desc->status |= pending | masked; |
| 320 | 322 | return; |
| 321 | 323 | } |
| 322 | −desc->chip->irq_ack(); | |
| 324 | +desc->irq_data.chip->irq_ack(); | |
| 323 | 325 | desc->status |= running; |
| 324 | 326 | do { |
| 325 | 327 | if (desc->status & masked) |
| 326 | − desc->chip->irq_unmask(); | |
| 328 | + desc->irq_data.chip->irq_unmask(); | |
| 327 | 329 | desc->status &= ~pending; |
| 328 | − handle_IRQ_event(desc->action); | |
| 330 | + handle_irq_event(desc->action); | |
| 329 | 331 | } while (status & pending); |
| 330 | 332 | desc->status &= ~running; |
| 331 | 333 | </programlisting> |
| @@ -344,7 +346,7 @@ desc->status &= ~running; · 12 unmodified lines | ||
| 344 | 346 | <para> |
| 345 | 347 | The following control flow is implemented (simplified excerpt): |
| 346 | 348 | <programlisting> |
| 347 | −handle_IRQ_event(desc->action); | |
| 349 | +handle_irq_event(desc->action); | |
| 348 | 350 | </programlisting> |
| 349 | 351 | </para> |
| 350 | 352 | </sect3> |
| @@ -362,12 +364,29 @@ handle_IRQ_event(desc->action); · 11 unmodified lines | ||
| 362 | 364 | <para> |
| 363 | 365 | The following control flow is implemented (simplified excerpt): |
| 364 | 366 | <programlisting> |
| 365 | −handle_IRQ_event(desc->action); | |
| 366 | −if (desc->chip->irq_eoi) | |
| 367 | − desc->chip->irq_eoi(); | |
| 367 | +if (desc->irq_data.chip->irq_ack) | |
| 368 | + desc->irq_data.chip->irq_ack(); | |
| 369 | +handle_irq_event(desc->action); | |
| 370 | +if (desc->irq_data.chip->irq_eoi) | |
| 371 | + desc->irq_data.chip->irq_eoi(); | |
| 368 | 372 | </programlisting> |
| 369 | 373 | </para> |
| 370 | 374 | </sect3> |
| 375 | + <sect3 id="EOI_Edge_IRQ_flow_handler"> | |
| 376 | + <title>EOI Edge IRQ flow handler</title> | |
| 377 | + <para> | |
| 378 | + handle_edge_eoi_irq provides an abnomination of the edge | |
| 379 | + handler which is solely used to tame a badly wreckaged | |
| 380 | + irq controller on powerpc/cell. | |
| 381 | + </para> | |
| 382 | + </sect3> | |
| 383 | + <sect3 id="BAD_IRQ_flow_handler"> | |
| 384 | + <title>Bad IRQ flow handler</title> | |
| 385 | + <para> | |
| 386 | + handle_bad_irq is used for spurious interrupts which | |
| 387 | + have no real handler assigned.. | |
| 388 | + </para> | |
| 389 | + </sect3> | |
| 371 | 390 | </sect2> |
| 372 | 391 | <sect2 id="Quirks_and_optimizations"> |
| 373 | 392 | <title>Quirks and optimizations</title> |
| @@ -410,6 +429,7 @@ if (desc->chip->irq_eoi) · 36 unmodified lines | ||
| 410 | 429 | <listitem><para>irq_mask_ack() - Optional, recommended for performance</para></listitem> |
| 411 | 430 | <listitem><para>irq_mask()</para></listitem> |
| 412 | 431 | <listitem><para>irq_unmask()</para></listitem> |
| 432 | + <listitem><para>irq_eoi() - Optional, required for eoi flow handlers</para></listitem> | |
| 413 | 433 | <listitem><para>irq_retrigger() - Optional</para></listitem> |
| 414 | 434 | <listitem><para>irq_set_type() - Optional</para></listitem> |
| 415 | 435 | <listitem><para>irq_set_wake() - Optional</para></listitem> |
| @@ -424,32 +444,24 @@ if (desc->chip->irq_eoi) · 8 unmodified lines | ||
| 424 | 444 | <chapter id="doirq"> |
| 425 | 445 | <title>__do_IRQ entry point</title> |
| 426 | 446 | <para> |
| 427 | − The original implementation __do_IRQ() is an alternative entry | |
| 428 | − point for all types of interrupts. | |
| 447 | + The original implementation __do_IRQ() was an alternative entry | |
| 448 | + point for all types of interrupts. It not longer exists. | |
| 429 | 449 | </para> |
| 430 | 450 | <para> |
| 431 | 451 | This handler turned out to be not suitable for all |
| 432 | 452 | interrupt hardware and was therefore reimplemented with split |
| 433 | − functionality for egde/level/simple/percpu interrupts. This is not | |
| 453 | + functionality for edge/level/simple/percpu interrupts. This is not | |
| 434 | 454 | only a functional optimization. It also shortens code paths for |
| 435 | 455 | interrupts. |
| 436 | 456 | </para> |
| 437 | − <para> | |
| 438 | − To make use of the split implementation, replace the call to | |
| 439 | − __do_IRQ by a call to desc->handle_irq() and associate | |
| 440 | − the appropriate handler function to desc->handle_irq(). | |
| 441 | − In most cases the generic handler implementations should | |
| 442 | − be sufficient. | |
| 443 | − </para> | |
| 444 | 457 | </chapter> |
| 445 | 458 | |
| 446 | 459 | <chapter id="locking"> |
| 447 | 460 | <title>Locking on SMP</title> |
| 448 | 461 | <para> |
| 449 | 462 | The locking of chip registers is up to the architecture that |
| 450 | − defines the chip primitives. There is a chip->lock field that can be used | |
| 451 | − for serialization, but the generic layer does not touch it. The per-irq | |
| 452 | − structure is protected via desc->lock, by the generic layer. | |
| 463 | + defines the chip primitives. The per-irq structure is | |
| 464 | + protected via desc->lock, by the generic layer. | |
| 453 | 465 | </para> |
| 454 | 466 | </chapter> |
| 455 | 467 | <chapter id="structs"> |
| @@ -1763,7 +1763,7 @@ as it would be on UP. · 1762 unmodified lines | ||
| 1763 | 1763 | There is a furthur optimization possible here: remember our original |
| 1764 | 1764 | cache code, where there were no reference counts and the caller simply |
| 1765 | 1765 | held the lock whenever using the object? This is still possible: if |
| 1766 | −you hold the lock, noone can delete the object, so you don't need to | |
| 1766 | +you hold the lock, no one can delete the object, so you don't need to | |
| 1767 | 1767 | get and put the reference count. |
| 1768 | 1768 | </para> |
| 1769 | 1769 | |
| @@ -1032,7 +1032,7 @@ and other resources, etc. · 1031 unmodified lines | ||
| 1032 | 1032 | <listitem> |
| 1033 | 1033 | <para> |
| 1034 | 1034 | This is indicated by ICRC bit in the ERROR register and |
| 1035 | − means that corruption occurred during data transfer. Upto | |
| 1035 | + means that corruption occurred during data transfer. Up to | |
| 1036 | 1036 | ATA/ATAPI-7, the standard specifies that this bit is only |
| 1037 | 1037 | applicable to UDMA transfers but ATA/ATAPI-8 draft revision |
| 1038 | 1038 | 1f says that the bit may be applicable to multiword DMA and |
| @@ -1045,10 +1045,10 @@ and other resources, etc. · 6 unmodified lines | ||
| 1045 | 1045 | <term>ABRT error during data transfer or on completion</term> |
| 1046 | 1046 | <listitem> |
| 1047 | 1047 | <para> |
| 1048 | − Upto ATA/ATAPI-7, the standard specifies that ABRT could be | |
| 1048 | + Up to ATA/ATAPI-7, the standard specifies that ABRT could be | |
| 1049 | 1049 | set on ICRC errors and on cases where a device is not able |
| 1050 | 1050 | to complete a command. Combined with the fact that MWDMA |
| 1051 | − and PIO transfer errors aren't allowed to use ICRC bit upto | |
| 1051 | + and PIO transfer errors aren't allowed to use ICRC bit up to | |
| 1052 | 1052 | ATA/ATAPI-7, it seems to imply that ABRT bit alone could |
| 1053 | 1053 | indicate tranfer errors. |
| 1054 | 1054 | </para> |
| @@ -1122,7 +1122,7 @@ and other resources, etc. · 67 unmodified lines | ||
| 1122 | 1122 | <para> |
| 1123 | 1123 | Depending on commands, not all STATUS/ERROR bits are |
| 1124 | 1124 | applicable. These non-applicable bits are marked with |
| 1125 | − "na" in the output descriptions but upto ATA/ATAPI-7 | |
| 1125 | + "na" in the output descriptions but up to ATA/ATAPI-7 | |
| 1126 | 1126 | no definition of "na" can be found. However, |
| 1127 | 1127 | ATA/ATAPI-8 draft revision 1f describes "N/A" as |
| 1128 | 1128 | follows. |
| @@ -1507,7 +1507,7 @@ and other resources, etc. · 378 unmodified lines | ||
| 1507 | 1507 | |
| 1508 | 1508 | <listitem> |
| 1509 | 1509 | <para> |
| 1510 | − CHS set up with INITIALIZE DEVICE PARAMETERS (seldomly used) | |
| 1510 | + CHS set up with INITIALIZE DEVICE PARAMETERS (seldom used) | |
| 1511 | 1511 | </para> |
| 1512 | 1512 | </listitem> |
| 1513 | 1513 | |
| @@ -270,6 +270,7 @@ · 269 unmodified lines | ||
| 270 | 270 | <!ENTITY sub-write SYSTEM "v4l/func-write.xml"> |
| 271 | 271 | <!ENTITY sub-io SYSTEM "v4l/io.xml"> |
| 272 | 272 | <!ENTITY sub-grey SYSTEM "v4l/pixfmt-grey.xml"> |
| 273 | +<!ENTITY sub-m420 SYSTEM "v4l/pixfmt-m420.xml"> | |
| 273 | 274 | <!ENTITY sub-nv12 SYSTEM "v4l/pixfmt-nv12.xml"> |
| 274 | 275 | <!ENTITY sub-nv12m SYSTEM "v4l/pixfmt-nv12m.xml"> |
| 275 | 276 | <!ENTITY sub-nv12mt SYSTEM "v4l/pixfmt-nv12mt.xml"> |
| @@ -292,8 +293,11 @@ · 16 unmodified lines | ||
| 292 | 293 | <!ENTITY sub-yuyv SYSTEM "v4l/pixfmt-yuyv.xml"> |
| 293 | 294 | <!ENTITY sub-yvyu SYSTEM "v4l/pixfmt-yvyu.xml"> |
| 294 | 295 | <!ENTITY sub-srggb10 SYSTEM "v4l/pixfmt-srggb10.xml"> |
| 296 | +<!ENTITY sub-srggb12 SYSTEM "v4l/pixfmt-srggb12.xml"> | |
| 295 | 297 | <!ENTITY sub-srggb8 SYSTEM "v4l/pixfmt-srggb8.xml"> |
| 296 | 298 | <!ENTITY sub-y10 SYSTEM "v4l/pixfmt-y10.xml"> |
| 299 | +<!ENTITY sub-y12 SYSTEM "v4l/pixfmt-y12.xml"> | |
| 300 | +<!ENTITY sub-y10b SYSTEM "v4l/pixfmt-y10b.xml"> | |
| 297 | 301 | <!ENTITY sub-pixfmt SYSTEM "v4l/pixfmt.xml"> |
| 298 | 302 | <!ENTITY sub-cropcap SYSTEM "v4l/vidioc-cropcap.xml"> |
| 299 | 303 | <!ENTITY sub-dbg-g-register SYSTEM "v4l/vidioc-dbg-g-register.xml"> |
| @@ -370,9 +374,9 @@ · 70 unmodified lines | ||
| 370 | 374 | <!ENTITY sub-media-indices SYSTEM "media-indices.tmpl"> |
| 371 | 375 | |
| 372 | 376 | <!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml"> |
| 373 | −<!ENTITY sub-media-open SYSTEM "v4l/media-func-open.xml"> | |
| 374 | −<!ENTITY sub-media-close SYSTEM "v4l/media-func-close.xml"> | |
| 375 | −<!ENTITY sub-media-ioctl SYSTEM "v4l/media-func-ioctl.xml"> | |
| 377 | +<!ENTITY sub-media-func-open SYSTEM "v4l/media-func-open.xml"> | |
| 378 | +<!ENTITY sub-media-func-close SYSTEM "v4l/media-func-close.xml"> | |
| 379 | +<!ENTITY sub-media-func-ioctl SYSTEM "v4l/media-func-ioctl.xml"> | |
| 376 | 380 | <!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml"> |
| 377 | 381 | <!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml"> |
| 378 | 382 | <!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml"> |
| @@ -189,8 +189,7 @@ static void __iomem *baseaddr; · 188 unmodified lines | ||
| 189 | 189 | <title>Partition defines</title> |
| 190 | 190 | <para> |
| 191 | 191 | If you want to divide your device into partitions, then |
| 192 | − enable the configuration switch CONFIG_MTD_PARTITIONS and define | |
| 193 | − a partitioning scheme suitable to your board. | |
| 192 | + define a partitioning scheme suitable to your board. | |
| 194 | 193 | </para> |
| 195 | 194 | <programlisting> |
| 196 | 195 | #define NUM_PARTITIONS 2 |
| @@ -485,7 +484,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) · 288 unmodified lines | ||
| 485 | 484 | Reed-Solomon library. |
| 486 | 485 | </para> |
| 487 | 486 | <para> |
| 488 | − The ECC bytes must be placed immidiately after the data | |
| 487 | + The ECC bytes must be placed immediately after the data | |
| 489 | 488 | bytes in order to make the syndrome generator work. This |
| 490 | 489 | is contrary to the usual layout used by software ECC. The |
| 491 | 490 | separation of data and out of band area is not longer |
| @@ -629,7 +628,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) · 137 unmodified lines | ||
| 629 | 628 | holds the bad block table. Store a pointer to the pattern |
| 630 | 629 | in the pattern field. Further the length of the pattern has to be |
| 631 | 630 | stored in len and the offset in the spare area must be given |
| 632 | − in the offs member of the nand_bbt_descr stucture. For mirrored | |
| 631 | + in the offs member of the nand_bbt_descr structure. For mirrored | |
| 633 | 632 | bad block tables different patterns are mandatory.</para></listitem> |
| 634 | 633 | <listitem><para>Table creation</para> |
| 635 | 634 | <para>Set the option NAND_BBT_CREATE to enable the table creation |
| @@ -648,7 +647,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) · 12 unmodified lines | ||
| 648 | 647 | <listitem><para>Table version control</para> |
| 649 | 648 | <para>Set the option NAND_BBT_VERSION to enable the table version control. |
| 650 | 649 | It's highly recommended to enable this for mirrored tables with write |
| 651 | − support. It makes sure that the risk of loosing the bad block | |
| 650 | + support. It makes sure that the risk of losing the bad block | |
| 652 | 651 | table information is reduced to the loss of the information about the |
| 653 | 652 | one worn out block which should be marked bad. The version is stored in |
| 654 | 653 | 4 consecutive bytes in the spare area of the device. The position of |
| @@ -1060,19 +1059,19 @@ data in this page</entry> · 405 unmodified lines | ||
| 1060 | 1059 | <row> |
| 1061 | 1060 | <entry>0x3D</entry> |
| 1062 | 1061 | <entry>ECC byte 21</entry> |
| 1063 | −<entry>Error correction code byte 0 of the eigth 256 Bytes of data | |
| 1062 | +<entry>Error correction code byte 0 of the eighth 256 Bytes of data | |
| 1064 | 1063 | in this page</entry> |
| 1065 | 1064 | </row> |
| 1066 | 1065 | <row> |
| 1067 | 1066 | <entry>0x3E</entry> |
| 1068 | 1067 | <entry>ECC byte 22</entry> |
| 1069 | −<entry>Error correction code byte 1 of the eigth 256 Bytes of data | |
| 1068 | +<entry>Error correction code byte 1 of the eighth 256 Bytes of data | |
| 1070 | 1069 | in this page</entry> |
| 1071 | 1070 | </row> |
| 1072 | 1071 | <row> |
| 1073 | 1072 | <entry>0x3F</entry> |
| 1074 | 1073 | <entry>ECC byte 23</entry> |
| 1075 | −<entry>Error correction code byte 2 of the eigth 256 Bytes of data | |
| 1074 | +<entry>Error correction code byte 2 of the eighth 256 Bytes of data | |
| 1076 | 1075 | in this page</entry> |
| 1077 | 1076 | </row> |
| 1078 | 1077 | </tbody></tgroup></informaltable> |
| @@ -267,8 +267,8 @@ · 266 unmodified lines | ||
| 267 | 267 | <sect1 id="machine-constraint"> |
| 268 | 268 | <title>Constraints</title> |
| 269 | 269 | <para> |
| 270 | − As well as definining the connections the machine interface | |
| 271 | − also provides constraints definining the operations that | |
| 270 | + As well as defining the connections the machine interface | |
| 271 | + also provides constraints defining the operations that | |
| 272 | 272 | clients are allowed to perform and the parameters that may be |
| 273 | 273 | set. This is required since generally regulator devices will |
| 274 | 274 | offer more flexibility than it is safe to use on a given |
| @@ -797,7 +797,7 @@ framework to set up sysfs files for this region. Simply leave it alone. · 796 unmodified lines | ||
| 797 | 797 | perform some initialization. After that, your hardware |
| 798 | 798 | starts working and will generate an interrupt as soon |
| 799 | 799 | as it's finished, has some data available, or needs your |
| 800 | − attention because an error occured. | |
| 800 | + attention because an error occurred. | |
| 801 | 801 | </para> |
| 802 | 802 | <para> |
| 803 | 803 | <filename>/dev/uioX</filename> is a read-only file. A |
| @@ -690,7 +690,7 @@ usbdev_ioctl (int fd, int ifno, unsigned request, void *param) · 689 unmodified lines | ||
| 690 | 690 | </para><para> |
| 691 | 691 | This request lets kernel drivers talk to user mode code |
| 692 | 692 | through filesystem operations even when they don't create |
| 693 | − a charactor or block special device. | |
| 693 | + a character or block special device. | |
| 694 | 694 | It's also been used to do things like ask devices what |
| 695 | 695 | device special file should be used. |
| 696 | 696 | Two pre-defined ioctls are used |
| @@ -100,7 +100,7 @@ linux-kernel@vger.kernel.org, 2002-11-20. --></para> · 99 unmodified lines | ||
| 100 | 100 | |
| 101 | 101 | <para>By convention system administrators create various |
| 102 | 102 | character device special files with these major and minor numbers in |
| 103 | −the <filename>/dev</filename> directory. The names recomended for the | |
| 103 | +the <filename>/dev</filename> directory. The names recommended for the | |
| 104 | 104 | different V4L2 device types are listed in <xref linkend="devices" />. |
| 105 | 105 | </para> |
| 106 | 106 | |
| @@ -1243,7 +1243,7 @@ values are:</entry> · 1242 unmodified lines | ||
| 1243 | 1243 | </row><row><entry spanname="descr">Mutes the audio when |
| 1244 | 1244 | capturing. This is not done by muting audio hardware, which can still |
| 1245 | 1245 | produce a slight hiss, but in the encoder itself, guaranteeing a fixed |
| 1246 | −and reproducable audio bitstream. 0 = unmuted, 1 = muted.</entry> | |
| 1246 | +and reproducible audio bitstream. 0 = unmuted, 1 = muted.</entry> | |
| 1247 | 1247 | </row> |
| 1248 | 1248 | <row><entry></entry></row> |
| 1249 | 1249 | <row id="v4l2-mpeg-video-encoding"> |
| @@ -90,7 +90,7 @@ · 89 unmodified lines | ||
| 90 | 90 | processing hardware.</para> |
| 91 | 91 | |
| 92 | 92 | <figure id="pipeline-scaling"> |
| 93 | − <title>Image Format Negotation on Pipelines</title> | |
| 93 | + <title>Image Format Negotiation on Pipelines</title> | |
| 94 | 94 | <mediaobject> |
| 95 | 95 | <imageobject> |
| 96 | 96 | <imagedata fileref="pipeline.pdf" format="PS" /> |
| @@ -140,7 +140,7 @@ and is not locked sets the cid to the scaled value. · 139 unmodified lines | ||
| 140 | 140 | <para>int v4l2_get_control(int fd, int cid) - |
| 141 | 141 | This function returns a value of 0 - 65535, scaled to from the actual range |
| 142 | 142 | of the given v4l control id. when the cid does not exist, could not be |
| 143 | −accessed for some reason, or some error occured 0 is returned. | |
| 143 | +accessed for some reason, or some error occurred 0 is returned. | |
| 144 | 144 | </para></listitem> |
| 145 | 145 | </itemizedlist> |
| 146 | 146 | </section> |
| @@ -78,9 +78,9 @@ · 77 unmodified lines | ||
| 78 | 78 | <appendix id="media-user-func"> |
| 79 | 79 | <title>Function Reference</title> |
| 80 | 80 | <!-- Keep this alphabetically sorted. --> |
| 81 | − &sub-media-open; | |
| 82 | − &sub-media-close; | |
| 83 | − &sub-media-ioctl; | |
| 81 | + &sub-media-func-open; | |
| 82 | + &sub-media-func-close; | |
| 83 | + &sub-media-func-ioctl; | |
| 84 | 84 | <!-- All ioctls go here. --> |
| 85 | 85 | &sub-media-ioc-device-info; |
| 86 | 86 | &sub-media-ioc-enum-entities; |
| @@ -34,7 +34,7 @@ · 33 unmodified lines | ||
| 34 | 34 | <varlistentry> |
| 35 | 35 | <term><parameter>request</parameter></term> |
| 36 | 36 | <listitem> |
| 37 | − <para>MEDIA_IOC_ENUM_LINKS</para> | |
| 37 | + <para>MEDIA_IOC_SETUP_LINK</para> | |
| 38 | 38 | </listitem> |
| 39 | 39 | </varlistentry> |
| 40 | 40 | <varlistentry> |
| @@ -0,0 +1,147 @@ | ||
| 1 | + <refentry id="V4L2-PIX-FMT-M420"> | |
| 2 | + <refmeta> | |
| 3 | + <refentrytitle>V4L2_PIX_FMT_M420 ('M420')</refentrytitle> | |
| 4 | + &manvol; | |
| 5 | + </refmeta> | |
| 6 | + <refnamediv> | |
| 7 | + <refname><constant>V4L2_PIX_FMT_M420</constant></refname> | |
| 8 | + <refpurpose>Format with ½ horizontal and vertical chroma | |
| 9 | + resolution, also known as YUV 4:2:0. Hybrid plane line-interleaved | |
| 10 | + layout.</refpurpose> | |
| 11 | + </refnamediv> | |
| 12 | + <refsect1> | |
| 13 | + <title>Description</title> | |
| 14 | + | |
| 15 | + <para>M420 is a YUV format with ½ horizontal and vertical chroma | |
| 16 | + subsampling (YUV 4:2:0). Pixels are organized as interleaved luma and | |
| 17 | + chroma planes. Two lines of luma data are followed by one line of chroma | |
| 18 | + data.</para> | |
| 19 | + <para>The luma plane has one byte per pixel. The chroma plane contains | |
| 20 | + interleaved CbCr pixels subsampled by ½ in the horizontal and | |
| 21 | + vertical directions. Each CbCr pair belongs to four pixels. For example, | |
| 22 | +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to | |
| 23 | +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>, | |
| 24 | +Y'<subscript>10</subscript>, Y'<subscript>11</subscript>.</para> | |
| 25 | + | |
| 26 | + <para>All line lengths are identical: if the Y lines include pad bytes | |
| 27 | + so do the CbCr lines.</para> | |
| 28 | + | |
| 29 | + <example> | |
| 30 | + <title><constant>V4L2_PIX_FMT_M420</constant> 4 × 4 | |
| 31 | +pixel image</title> | |
| 32 | + | |
| 33 | + <formalpara> | |
| 34 | + <title>Byte Order.</title> | |
| 35 | + <para>Each cell is one byte. | |
| 36 | + <informaltable frame="none"> | |
| 37 | + <tgroup cols="5" align="center"> | |
| 38 | + <colspec align="left" colwidth="2*" /> | |
| 39 | + <tbody valign="top"> | |
| 40 | + <row> | |
| 41 | + <entry>start + 0:</entry> | |
| 42 | + <entry>Y'<subscript>00</subscript></entry> | |
| 43 | + <entry>Y'<subscript>01</subscript></entry> | |
| 44 | + <entry>Y'<subscript>02</subscript></entry> | |
| 45 | + <entry>Y'<subscript>03</subscript></entry> | |
| 46 | + </row> | |
| 47 | + <row> | |
| 48 | + <entry>start + 4:</entry> | |
| 49 | + <entry>Y'<subscript>10</subscript></entry> | |
| 50 | + <entry>Y'<subscript>11</subscript></entry> | |
| 51 | + <entry>Y'<subscript>12</subscript></entry> | |
| 52 | + <entry>Y'<subscript>13</subscript></entry> | |
| 53 | + </row> | |
| 54 | + <row> | |
| 55 | + <entry>start + 8:</entry> | |
| 56 | + <entry>Cb<subscript>00</subscript></entry> | |
| 57 | + <entry>Cr<subscript>00</subscript></entry> | |
| 58 | + <entry>Cb<subscript>01</subscript></entry> | |
| 59 | + <entry>Cr<subscript>01</subscript></entry> | |
| 60 | + </row> | |
| 61 | + <row> | |
| 62 | + <entry>start + 16:</entry> | |
| 63 | + <entry>Y'<subscript>20</subscript></entry> | |
| 64 | + <entry>Y'<subscript>21</subscript></entry> | |
| 65 | + <entry>Y'<subscript>22</subscript></entry> | |
| 66 | + <entry>Y'<subscript>23</subscript></entry> | |
| 67 | + </row> | |
| 68 | + <row> | |
| 69 | + <entry>start + 20:</entry> | |
| 70 | + <entry>Y'<subscript>30</subscript></entry> | |
| 71 | + <entry>Y'<subscript>31</subscript></entry> | |
| 72 | + <entry>Y'<subscript>32</subscript></entry> | |
| 73 | + <entry>Y'<subscript>33</subscript></entry> | |
| 74 | + </row> | |
| 75 | + <row> | |
| 76 | + <entry>start + 24:</entry> | |
| 77 | + <entry>Cb<subscript>10</subscript></entry> | |
| 78 | + <entry>Cr<subscript>10</subscript></entry> | |
| 79 | + <entry>Cb<subscript>11</subscript></entry> | |
| 80 | + <entry>Cr<subscript>11</subscript></entry> | |
| 81 | + </row> | |
| 82 | + </tbody> | |
| 83 | + </tgroup> | |
| 84 | + </informaltable> | |
| 85 | + </para> | |
| 86 | + </formalpara> | |
| 87 | + | |
| 88 | + <formalpara> | |
| 89 | + <title>Color Sample Location.</title> | |
| 90 | + <para> | |
| 91 | + <informaltable frame="none"> | |
| 92 | + <tgroup cols="7" align="center"> | |
| 93 | + <tbody valign="top"> | |
| 94 | + <row> | |
| 95 | + <entry></entry> | |
| 96 | + <entry>0</entry><entry></entry><entry>1</entry><entry></entry> | |
| 97 | + <entry>2</entry><entry></entry><entry>3</entry> | |
| 98 | + </row> | |
| 99 | + <row> | |
| 100 | + <entry>0</entry> | |
| 101 | + <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> | |
| 102 | + <entry>Y</entry><entry></entry><entry>Y</entry> | |
| 103 | + </row> | |
| 104 | + <row> | |
| 105 | + <entry></entry> | |
| 106 | + <entry></entry><entry>C</entry><entry></entry><entry></entry> | |
| 107 | + <entry></entry><entry>C</entry><entry></entry> | |
| 108 | + </row> | |
| 109 | + <row> | |
| 110 | + <entry>1</entry> | |
| 111 | + <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> | |
| 112 | + <entry>Y</entry><entry></entry><entry>Y</entry> | |
| 113 | + </row> | |
| 114 | + <row> | |
| 115 | + <entry></entry> | |
| 116 | + </row> | |
| 117 | + <row> | |
| 118 | + <entry>2</entry> | |
| 119 | + <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> | |
| 120 | + <entry>Y</entry><entry></entry><entry>Y</entry> | |
| 121 | + </row> | |
| 122 | + <row> | |
| 123 | + <entry></entry> | |
| 124 | + <entry></entry><entry>C</entry><entry></entry><entry></entry> | |
| 125 | + <entry></entry><entry>C</entry><entry></entry> | |
| 126 | + </row> | |
| 127 | + <row> | |
| 128 | + <entry>3</entry> | |
| 129 | + <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry> | |
| 130 | + <entry>Y</entry><entry></entry><entry>Y</entry> | |
| 131 | + </row> | |
| 132 | + </tbody> | |
| 133 | + </tgroup> | |
| 134 | + </informaltable> | |
| 135 | + </para> | |
| 136 | + </formalpara> | |
| 137 | + </example> | |
| 138 | + </refsect1> | |
| 139 | + </refentry> | |
| 140 | + | |
| 141 | + <!-- | |
| 142 | +Local Variables: | |
| 143 | +mode: sgml | |
| 144 | +sgml-parent-document: "pixfmt.sgml" | |
| 145 | +indent-tabs-mode: nil | |
| 146 | +End: | |
| 147 | + --> | |
| @@ -0,0 +1,43 @@ | ||
| 1 | +<refentry id="V4L2-PIX-FMT-Y10BPACK"> | |
| 2 | + <refmeta> | |
| 3 | + <refentrytitle>V4L2_PIX_FMT_Y10BPACK ('Y10B')</refentrytitle> | |
| 4 | + &manvol; | |
| 5 | + </refmeta> | |
| 6 | + <refnamediv> | |
| 7 | + <refname><constant>V4L2_PIX_FMT_Y10BPACK</constant></refname> | |
| 8 | + <refpurpose>Grey-scale image as a bit-packed array</refpurpose> | |
| 9 | + </refnamediv> | |
| 10 | + <refsect1> | |
| 11 | + <title>Description</title> | |
| 12 | + | |
| 13 | + <para>This is a packed grey-scale image format with a depth of 10 bits per | |
| 14 | + pixel. Pixels are stored in a bit-packed array of 10bit bits per pixel, | |
| 15 | + with no padding between them and with the most significant bits coming | |
| 16 | + first from the left.</para> | |
| 17 | + | |
| 18 | + <example> | |
| 19 | + <title><constant>V4L2_PIX_FMT_Y10BPACK</constant> 4 pixel data stream taking 5 bytes</title> | |
| 20 | + | |
| 21 | + <formalpara> | |
| 22 | + <title>Bit-packed representation</title> | |
| 23 | + <para>pixels cross the byte boundary and have a ratio of 5 bytes for each 4 | |
| 24 | + pixels. | |
| 25 | + <informaltable frame="all"> | |
| 26 | + <tgroup cols="5" align="center"> | |
| 27 | + <colspec align="left" colwidth="2*" /> | |
| 28 | + <tbody valign="top"> | |
| 29 | + <row> | |
| 30 | + <entry>Y'<subscript>00[9:2]</subscript></entry> | |
| 31 | + <entry>Y'<subscript>00[1:0]</subscript>Y'<subscript>01[9:4]</subscript></entry> | |
| 32 | + <entry>Y'<subscript>01[3:0]</subscript>Y'<subscript>02[9:6]</subscript></entry> | |
| 33 | + <entry>Y'<subscript>02[5:0]</subscript>Y'<subscript>03[9:8]</subscript></entry> | |
| 34 | + <entry>Y'<subscript>03[7:0]</subscript></entry> | |
| 35 | + </row> | |
| 36 | + </tbody> | |
| 37 | + </tgroup> | |
| 38 | + </informaltable> | |
| 39 | + </para> | |
| 40 | + </formalpara> | |
| 41 | + </example> | |
| 42 | + </refsect1> | |
| 43 | +</refentry> | |
| @@ -0,0 +1,79 @@ | ||
| 1 | +<refentry id="V4L2-PIX-FMT-Y12"> | |
| 2 | + <refmeta> | |
| 3 | + <refentrytitle>V4L2_PIX_FMT_Y12 ('Y12 ')</refentrytitle> | |
| 4 | + &manvol; | |
| 5 | + </refmeta> | |
| 6 | + <refnamediv> | |
| 7 | + <refname><constant>V4L2_PIX_FMT_Y12</constant></refname> | |
| 8 | + <refpurpose>Grey-scale image</refpurpose> | |
| 9 | + </refnamediv> | |
| 10 | + <refsect1> | |
| 11 | + <title>Description</title> | |
| 12 | + | |
| 13 | + <para>This is a grey-scale image with a depth of 12 bits per pixel. Pixels | |
| 14 | +are stored in 16-bit words with unused high bits padded with 0. The least | |
| 15 | +significant byte is stored at lower memory addresses (little-endian).</para> | |
| 16 | + | |
| 17 | + <example> | |
| 18 | + <title><constant>V4L2_PIX_FMT_Y12</constant> 4 × 4 | |
| 19 | +pixel image</title> | |
| 20 | + | |
| 21 | + <formalpara> | |
| 22 | + <title>Byte Order.</title> | |
| 23 | + <para>Each cell is one byte. | |
| 24 | + <informaltable frame="none"> | |
| 25 | + <tgroup cols="9" align="center"> | |
| 26 | + <colspec align="left" colwidth="2*" /> | |
| 27 | + <tbody valign="top"> | |
| 28 | + <row> | |
| 29 | + <entry>start + 0:</entry> | |
| 30 | + <entry>Y'<subscript>00low</subscript></entry> | |
| 31 | + <entry>Y'<subscript>00high</subscript></entry> | |
| 32 | + <entry>Y'<subscript>01low</subscript></entry> | |
| 33 | + <entry>Y'<subscript>01high</subscript></entry> | |
| 34 | + <entry>Y'<subscript>02low</subscript></entry> | |
| 35 | + <entry>Y'<subscript>02high</subscript></entry> | |
| 36 | + <entry>Y'<subscript>03low</subscript></entry> | |
| 37 | + <entry>Y'<subscript>03high</subscript></entry> | |
| 38 | + </row> | |
| 39 | + <row> | |
| 40 | + <entry>start + 8:</entry> | |
| 41 | + <entry>Y'<subscript>10low</subscript></entry> | |
| 42 | + <entry>Y'<subscript>10high</subscript></entry> | |
| 43 | + <entry>Y'<subscript>11low</subscript></entry> | |
| 44 | + <entry>Y'<subscript>11high</subscript></entry> | |
| 45 | + <entry>Y'<subscript>12low</subscript></entry> | |
| 46 | + <entry>Y'<subscript>12high</subscript></entry> | |
| 47 | + <entry>Y'<subscript>13low</subscript></entry> | |
| 48 | + <entry>Y'<subscript>13high</subscript></entry> | |
| 49 | + </row> | |
| 50 | + <row> | |
| 51 | + <entry>start + 16:</entry> | |
| 52 | + <entry>Y'<subscript>20low</subscript></entry> | |
| 53 | + <entry>Y'<subscript>20high</subscript></entry> | |
| 54 | + <entry>Y'<subscript>21low</subscript></entry> | |
| 55 | + <entry>Y'<subscript>21high</subscript></entry> | |
| 56 | + <entry>Y'<subscript>22low</subscript></entry> | |
| 57 | + <entry>Y'<subscript>22high</subscript></entry> | |
| 58 | + <entry>Y'<subscript>23low</subscript></entry> | |
| 59 | + <entry>Y'<subscript>23high</subscript></entry> | |
| 60 | + </row> | |
| 61 | + <row> | |
| 62 | + <entry>start + 24:</entry> | |
| 63 | + <entry>Y'<subscript>30low</subscript></entry> | |
| 64 | + <entry>Y'<subscript>30high</subscript></entry> | |
| 65 | + <entry>Y'<subscript>31low</subscript></entry> | |
| 66 | + <entry>Y'<subscript>31high</subscript></entry> | |
| 67 | + <entry>Y'<subscript>32low</subscript></entry> | |
| 68 | + <entry>Y'<subscript>32high</subscript></entry> | |
| 69 | + <entry>Y'<subscript>33low</subscript></entry> | |
| 70 | + <entry>Y'<subscript>33high</subscript></entry> | |
| 71 | + </row> | |
| 72 | + </tbody> | |
| 73 | + </tgroup> | |
| 74 | + </informaltable> | |
| 75 | + </para> | |
| 76 | + </formalpara> | |
| 77 | + </example> | |
| 78 | + </refsect1> | |
| 79 | +</refentry> | |
| @@ -673,6 +673,7 @@ access the palette, this must be done with ioctls of the Linux framebuffer API.< · 672 unmodified lines | ||
| 673 | 673 | &sub-srggb8; |
| 674 | 674 | &sub-sbggr16; |
| 675 | 675 | &sub-srggb10; |
| 676 | + &sub-srggb12; | |
| 676 | 677 | </section> |
| 677 | 678 | |
| 678 | 679 | <section id="yuv-formats"> |
| @@ -696,6 +697,8 @@ information.</para> · 17 unmodified lines | ||
| 696 | 697 | &sub-packed-yuv; |
| 697 | 698 | &sub-grey; |
| 698 | 699 | &sub-y10; |
| 700 | + &sub-y12; | |
| 701 | + &sub-y10b; | |
| 699 | 702 | &sub-y16; |
| 700 | 703 | &sub-yuyv; |
| 701 | 704 | &sub-uyvy; |
| @@ -711,6 +714,7 @@ information.</para> · 9 unmodified lines | ||
| 711 | 714 | &sub-nv12m; |
| 712 | 715 | &sub-nv12mt; |
| 713 | 716 | &sub-nv16; |
| 717 | + &sub-m420; | |
| 714 | 718 | </section> |
| 715 | 719 | |
| 716 | 720 | <section> |
| @@ -133,7 +133,7 @@ different IR's. Due to that, V4L2 API now specifies a standard for mapping Media · 132 unmodified lines | ||
| 133 | 133 | <row><entry><constant>KEY_LEFT</constant></entry><entry>Left key</entry><entry>LEFT</entry></row> |
| 134 | 134 | <row><entry><constant>KEY_RIGHT</constant></entry><entry>Right key</entry><entry>RIGHT</entry></row> |
| 135 | 135 | |
| 136 | −<row><entry><emphasis role="bold">Miscelaneous keys</emphasis></entry></row> | |
| 136 | +<row><entry><emphasis role="bold">Miscellaneous keys</emphasis></entry></row> | |
| 137 | 137 | |
| 138 | 138 | <row><entry><constant>KEY_DOT</constant></entry><entry>Return a dot</entry><entry>.</entry></row> |
| 139 | 139 | <row><entry><constant>KEY_FN</constant></entry><entry>Select a function</entry><entry>FUNCTION</entry></row> |
| @@ -456,6 +456,23 @@ · 455 unmodified lines | ||
| 456 | 456 | <entry>b<subscript>1</subscript></entry> |
| 457 | 457 | <entry>b<subscript>0</subscript></entry> |
| 458 | 458 | </row> |
| 459 | + <row id="V4L2-MBUS-FMT-SGBRG8-1X8"> | |
| 460 | + <entry>V4L2_MBUS_FMT_SGBRG8_1X8</entry> | |
| 461 | + <entry>0x3013</entry> | |
| 462 | + <entry></entry> | |
| 463 | + <entry>-</entry> | |
| 464 | + <entry>-</entry> | |
| 465 | + <entry>-</entry> | |
| 466 | + <entry>-</entry> | |
| 467 | + <entry>g<subscript>7</subscript></entry> | |
| 468 | + <entry>g<subscript>6</subscript></entry> | |
| 469 | + <entry>g<subscript>5</subscript></entry> | |
| 470 | + <entry>g<subscript>4</subscript></entry> | |
| 471 | + <entry>g<subscript>3</subscript></entry> | |
| 472 | + <entry>g<subscript>2</subscript></entry> | |
| 473 | + <entry>g<subscript>1</subscript></entry> | |
| 474 | + <entry>g<subscript>0</subscript></entry> | |
| 475 | + </row> | |
| 459 | 476 | <row id="V4L2-MBUS-FMT-SGRBG8-1X8"> |
| 460 | 477 | <entry>V4L2_MBUS_FMT_SGRBG8_1X8</entry> |
| 461 | 478 | <entry>0x3002</entry> |
| @@ -473,6 +490,23 @@ · 11 unmodified lines | ||
| 473 | 490 | <entry>g<subscript>1</subscript></entry> |
| 474 | 491 | <entry>g<subscript>0</subscript></entry> |
| 475 | 492 | </row> |
| 493 | + <row id="V4L2-MBUS-FMT-SRGGB8-1X8"> | |
| 494 | + <entry>V4L2_MBUS_FMT_SRGGB8_1X8</entry> | |
| 495 | + <entry>0x3014</entry> | |
| 496 | + <entry></entry> | |
| 497 | + <entry>-</entry> | |
| 498 | + <entry>-</entry> | |
| 499 | + <entry>-</entry> | |
| 500 | + <entry>-</entry> | |
| 501 | + <entry>r<subscript>7</subscript></entry> | |
| 502 | + <entry>r<subscript>6</subscript></entry> | |
| 503 | + <entry>r<subscript>5</subscript></entry> | |
| 504 | + <entry>r<subscript>4</subscript></entry> | |
| 505 | + <entry>r<subscript>3</subscript></entry> | |
| 506 | + <entry>r<subscript>2</subscript></entry> | |
| 507 | + <entry>r<subscript>1</subscript></entry> | |
| 508 | + <entry>r<subscript>0</subscript></entry> | |
| 509 | + </row> | |
| 476 | 510 | <row id="V4L2-MBUS-FMT-SBGGR10-DPCM8-1X8"> |
| 477 | 511 | <entry>V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8</entry> |
| 478 | 512 | <entry>0x300b</entry> |
| @@ -2159,6 +2193,31 @@ · 1680 unmodified lines | ||
| 2159 | 2193 | <entry>u<subscript>1</subscript></entry> |
| 2160 | 2194 | <entry>u<subscript>0</subscript></entry> |
| 2161 | 2195 | </row> |
| 2196 | + <row id="V4L2-MBUS-FMT-Y12-1X12"> | |
| 2197 | + <entry>V4L2_MBUS_FMT_Y12_1X12</entry> | |
| 2198 | + <entry>0x2013</entry> | |
| 2199 | + <entry></entry> | |
| 2200 | + <entry>-</entry> | |
| 2201 | + <entry>-</entry> | |
| 2202 | + <entry>-</entry> | |
| 2203 | + <entry>-</entry> | |
| 2204 | + <entry>-</entry> | |
| 2205 | + <entry>-</entry> | |
| 2206 | + <entry>-</entry> | |
| 2207 | + <entry>-</entry> | |
| 2208 | + <entry>y<subscript>11</subscript></entry> | |
| 2209 | + <entry>y<subscript>10</subscript></entry> | |
| 2210 | + <entry>y<subscript>9</subscript></entry> | |
| 2211 | + <entry>y<subscript>8</subscript></entry> | |
| 2212 | + <entry>y<subscript>7</subscript></entry> | |
| 2213 | + <entry>y<subscript>6</subscript></entry> | |
| 2214 | + <entry>y<subscript>5</subscript></entry> | |
| 2215 | + <entry>y<subscript>4</subscript></entry> | |
| 2216 | + <entry>y<subscript>3</subscript></entry> | |
| 2217 | + <entry>y<subscript>2</subscript></entry> | |
| 2218 | + <entry>y<subscript>1</subscript></entry> | |
| 2219 | + <entry>y<subscript>0</subscript></entry> | |
| 2220 | + </row> | |
| 2162 | 2221 | <row id="V4L2-MBUS-FMT-UYVY8-1X16"> |
| 2163 | 2222 | <entry>V4L2_MBUS_FMT_UYVY8_1X16</entry> |
| 2164 | 2223 | <entry>0x200f</entry> |
| @@ -2463,5 +2522,51 @@ · 298 unmodified lines | ||
| 2463 | 2522 | </tgroup> |
| 2464 | 2523 | </table> |
| 2465 | 2524 | </section> |
| 2525 | + | |
| 2526 | + <section> | |
| 2527 | + <title>JPEG Compressed Formats</title> | |
| 2528 | + | |
| 2529 | + <para>Those data formats consist of an ordered sequence of 8-bit bytes | |
| 2530 | + obtained from JPEG compression process. Additionally to the | |
| 2531 | + <constant>_JPEG</constant> prefix the format code is made of | |
| 2532 | + the following information. | |
| 2533 | + <itemizedlist> | |
| 2534 | + <listitem><para>The number of bus samples per entropy encoded byte.</para></listitem> | |
| 2535 | + <listitem><para>The bus width.</para></listitem> | |
| 2536 | + </itemizedlist> | |
| 2537 | + </para> | |
| 2538 | + | |
| 2539 | + <para>For instance, for a JPEG baseline process and an 8-bit bus width | |
| 2540 | + the format will be named <constant>V4L2_MBUS_FMT_JPEG_1X8</constant>. | |
| 2541 | + </para> | |
| 2542 | + | |
| 2543 | + <para>The following table lists existing JPEG compressed formats.</para> | |
| 2544 | + | |
| 2545 | + <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-jpeg"> | |
| 2546 | + <title>JPEG Formats</title> | |
| 2547 | + <tgroup cols="3"> | |
| 2548 | + <colspec colname="id" align="left" /> | |
| 2549 | + <colspec colname="code" align="left"/> | |
| 2550 | + <colspec colname="remarks" align="left"/> | |
| 2551 | + <thead> | |
| 2552 | + <row> | |
| 2553 | + <entry>Identifier</entry> | |
| 2554 | + <entry>Code</entry> | |
| 2555 | + <entry>Remarks</entry> | |
| 2556 | + </row> | |
| 2557 | + </thead> | |
| 2558 | + <tbody valign="top"> | |
| 2559 | + <row id="V4L2-MBUS-FMT-JPEG-1X8"> | |
| 2560 | + <entry>V4L2_MBUS_FMT_JPEG_1X8</entry> | |
| 2561 | + <entry>0x4001</entry> | |
| 2562 | + <entry>Besides of its usage for the parallel bus this format is | |
| 2563 | + recommended for transmission of JPEG data over MIPI CSI bus | |
| 2564 | + using the User Defined 8-bit Data types. | |
| 2565 | + </entry> | |
| 2566 | + </row> | |
| 2567 | + </tbody> | |
| 2568 | + </tgroup> | |
| 2569 | + </table> | |
| 2570 | + </section> | |
| 2466 | 2571 | </section> |
| 2467 | 2572 | </section> |
| @@ -311,6 +311,9 @@ struct <link linkend="v4l2-pix-format">v4l2_pix_format</link> { · 310 unmodified lines | ||
| 311 | 311 | #define <link linkend="V4L2-PIX-FMT-Y10">V4L2_PIX_FMT_Y10</link> v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ |
| 312 | 312 | #define <link linkend="V4L2-PIX-FMT-Y16">V4L2_PIX_FMT_Y16</link> v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ |
| 313 | 313 | |
| 314 | +/* Grey bit-packed formats */ | |
| 315 | +#define <link linkend="V4L2-PIX-FMT-Y10BPACK">V4L2_PIX_FMT_Y10BPACK</link> v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ | |
| 316 | + | |
| 314 | 317 | /* Palette formats */ |
| 315 | 318 | #define <link linkend="V4L2-PIX-FMT-PAL8">V4L2_PIX_FMT_PAL8</link> v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ |
| 316 | 319 | |
| @@ -333,6 +336,7 @@ struct <link linkend="v4l2-pix-format">v4l2_pix_format</link> { · 16 unmodified lines | ||
| 333 | 336 | #define <link linkend="V4L2-PIX-FMT-YUV420">V4L2_PIX_FMT_YUV420</link> v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ |
| 334 | 337 | #define <link linkend="V4L2-PIX-FMT-HI240">V4L2_PIX_FMT_HI240</link> v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ |
| 335 | 338 | #define <link linkend="V4L2-PIX-FMT-HM12">V4L2_PIX_FMT_HM12</link> v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ |
| 339 | +#define <link linkend="V4L2-PIX-FMT-M420">V4L2_PIX_FMT_M420</link> v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */ | |
| 336 | 340 | |
| 337 | 341 | /* two planes -- one Y, one Cr + Cb interleaved */ |
| 338 | 342 | #define <link linkend="V4L2-PIX-FMT-NV12">V4L2_PIX_FMT_NV12</link> v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ |
| @@ -4784,7 +4784,7 @@ struct _snd_pcm_runtime { · 4783 unmodified lines | ||
| 4784 | 4784 | FM registers can be directly accessed through the direct-FM API, |
| 4785 | 4785 | defined in <filename><sound/asound_fm.h></filename>. In |
| 4786 | 4786 | ALSA native mode, FM registers are accessed through |
| 4787 | − the Hardware-Dependant Device direct-FM extension API, whereas in | |
| 4787 | + the Hardware-Dependent Device direct-FM extension API, whereas in | |
| 4788 | 4788 | OSS compatible mode, FM registers can be accessed with the OSS |
| 4789 | 4789 | direct-FM compatible API in <filename>/dev/dmfmX</filename> device. |
| 4790 | 4790 | </para> |
| @@ -209,7 +209,7 @@ tools. One such tool that is particularly recommended is the Linux · 208 unmodified lines | ||
| 209 | 209 | Cross-Reference project, which is able to present source code in a |
| 210 | 210 | self-referential, indexed webpage format. An excellent up-to-date |
| 211 | 211 | repository of the kernel code may be found at: |
| 212 | − http://users.sosdg.org/~qiyong/lxr/ | |
| 212 | + http://lxr.linux.no/+trees | |
| 213 | 213 | |
| 214 | 214 | |
| 215 | 215 | The development process |
| @@ -4,10 +4,11 @@ ChangeLog: · 3 unmodified lines | ||
| 4 | 4 | |
| 5 | 5 | SMP IRQ affinity |
| 6 | 6 | |
| 7 | −/proc/irq/IRQ#/smp_affinity specifies which target CPUs are permitted | |
| 8 | −for a given IRQ source. It's a bitmask of allowed CPUs. It's not allowed | |
| 9 | −to turn off all CPUs, and if an IRQ controller does not support IRQ | |
| 10 | −affinity then the value will not change from the default 0xffffffff. | |
| 7 | +/proc/irq/IRQ#/smp_affinity and /proc/irq/IRQ#/smp_affinity_list specify | |
| 8 | +which target CPUs are permitted for a given IRQ source. It's a bitmask | |
| 9 | +(smp_affinity) or cpu list (smp_affinity_list) of allowed CPUs. It's not | |
| 10 | +allowed to turn off all CPUs, and if an IRQ controller does not support | |
| 11 | +IRQ affinity then the value will not change from the default of all cpus. | |
| 11 | 12 | |
| 12 | 13 | /proc/irq/default_smp_affinity specifies default affinity mask that applies |
| 13 | 14 | to all non-active IRQs. Once IRQ is allocated/activated its affinity bitmask |
| @@ -54,3 +55,11 @@ round-trip min/avg/max = 0.1/0.5/585.4 ms · 40 unmodified lines | ||
| 54 | 55 | This time around IRQ44 was delivered only to the last four processors. |
| 55 | 56 | i.e counters for the CPU0-3 did not change. |
| 56 | 57 | |
| 58 | +Here is an example of limiting that same irq (44) to cpus 1024 to 1031: | |
| 59 | + | |
| 60 | +[root@moon 44]# echo 1024-1031 > smp_affinity | |
| 61 | +[root@moon 44]# cat smp_affinity | |
| 62 | +1024-1031 | |
| 63 | + | |
| 64 | +Note that to do this with a bitmask would require 32 bitmasks of zero | |
| 65 | +to follow the pertinent one. | |
| @@ -253,8 +253,8 @@ In constrast, MSI is restricted to a maximum of 32 interrupts (and · 252 unmodified lines | ||
| 253 | 253 | must be a power of two). In addition, the MSI interrupt vectors must |
| 254 | 254 | be allocated consecutively, so the system may not be able to allocate |
| 255 | 255 | as many vectors for MSI as it could for MSI-X. On some platforms, MSI |
| 256 | −interrupts must all be targetted at the same set of CPUs whereas MSI-X | |
| 257 | −interrupts can all be targetted at different CPUs. | |
| 256 | +interrupts must all be targeted at the same set of CPUs whereas MSI-X | |
| 257 | +interrupts can all be targeted at different CPUs. | |
| 258 | 258 | |
| 259 | 259 | 4.5.2 Spinlocks |
| 260 | 260 | |
| @@ -21,7 +21,7 @@ rcu.txt · 20 unmodified lines | ||
| 21 | 21 | RTFP.txt |
| 22 | 22 | - List of RCU papers (bibliography) going back to 1980. |
| 23 | 23 | stallwarn.txt |
| 24 | − - RCU CPU stall warnings (CONFIG_RCU_CPU_STALL_DETECTOR) | |
| 24 | + - RCU CPU stall warnings (module parameter rcu_cpu_stall_suppress) | |
| 25 | 25 | torture.txt |
| 26 | 26 | - RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST) |
| 27 | 27 | trace.txt |
| @@ -1,22 +1,25 @@ | ||
| 1 | 1 | Using RCU's CPU Stall Detector |
| 2 | 2 | |
| 3 | −The CONFIG_RCU_CPU_STALL_DETECTOR kernel config parameter enables | |
| 4 | −RCU's CPU stall detector, which detects conditions that unduly delay | |
| 5 | −RCU grace periods. The stall detector's idea of what constitutes | |
| 6 | −"unduly delayed" is controlled by a set of C preprocessor macros: | |
| 3 | +The rcu_cpu_stall_suppress module parameter enables RCU's CPU stall | |
| 4 | +detector, which detects conditions that unduly delay RCU grace periods. | |
| 5 | +This module parameter enables CPU stall detection by default, but | |
| 6 | +may be overridden via boot-time parameter or at runtime via sysfs. | |
| 7 | +The stall detector's idea of what constitutes "unduly delayed" is | |
| 8 | +controlled by a set of kernel configuration variables and cpp macros: | |
| 7 | 9 | |
| 8 | −RCU_SECONDS_TILL_STALL_CHECK | |
| 10 | +CONFIG_RCU_CPU_STALL_TIMEOUT | |
| 9 | 11 | |
| 10 | − This macro defines the period of time that RCU will wait from | |
| 11 | − the beginning of a grace period until it issues an RCU CPU | |
| 12 | − stall warning. This time period is normally ten seconds. | |
| 12 | + This kernel configuration parameter defines the period of time | |
| 13 | + that RCU will wait from the beginning of a grace period until it | |
| 14 | + issues an RCU CPU stall warning. This time period is normally | |
| 15 | + ten seconds. | |
| 13 | 16 | |
| 14 | 17 | RCU_SECONDS_TILL_STALL_RECHECK |
| 15 | 18 | |
| 16 | 19 | This macro defines the period of time that RCU will wait after |
| 17 | 20 | issuing a stall warning until it issues another stall warning |
| 18 | − for the same stall. This time period is normally set to thirty | |
| 19 | − seconds. | |
| 21 | + for the same stall. This time period is normally set to three | |
| 22 | + times the check interval plus thirty seconds. | |
| 20 | 23 | |
| 21 | 24 | RCU_STALL_RAT_DELAY |
| 22 | 25 | |
| @@ -10,34 +10,46 @@ for rcutree and next for rcutiny. · 9 unmodified lines | ||
| 10 | 10 | |
| 11 | 11 | CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats |
| 12 | 12 | |
| 13 | −These implementations of RCU provides five debugfs files under the | |
| 14 | −top-level directory RCU: rcu/rcudata (which displays fields in struct | |
| 15 | −rcu_data), rcu/rcudata.csv (which is a .csv spreadsheet version of | |
| 16 | −rcu/rcudata), rcu/rcugp (which displays grace-period counters), | |
| 17 | −rcu/rcuhier (which displays the struct rcu_node hierarchy), and | |
| 18 | −rcu/rcu_pending (which displays counts of the reasons that the | |
| 19 | −rcu_pending() function decided that there was core RCU work to do). | |
| 13 | +These implementations of RCU provides several debugfs files under the | |
| 14 | +top-level directory "rcu": | |
| 15 | + | |
| 16 | +rcu/rcudata: | |
| 17 | + Displays fields in struct rcu_data. | |
| 18 | +rcu/rcudata.csv: | |
| 19 | + Comma-separated values spreadsheet version of rcudata. | |
| 20 | +rcu/rcugp: | |
| 21 | + Displays grace-period counters. | |
| 22 | +rcu/rcuhier: | |
| 23 | + Displays the struct rcu_node hierarchy. | |
| 24 | +rcu/rcu_pending: | |
| 25 | + Displays counts of the reasons rcu_pending() decided that RCU had | |
| 26 | + work to do. | |
| 27 | +rcu/rcutorture: | |
| 28 | + Displays rcutorture test progress. | |
| 29 | +rcu/rcuboost: | |
| 30 | + Displays RCU boosting statistics. Only present if | |
| 31 | + CONFIG_RCU_BOOST=y. | |
| 20 | 32 | |
| 21 | 33 | The output of "cat rcu/rcudata" looks as follows: |
| 22 | 34 | |
| 23 | 35 | rcu_sched: |
| 24 | − 0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10 | |
| 25 | − 1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10 | |
| 26 | − 2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10 | |
| 27 | − 3 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=6681/1 dn=0 df=1545 of=0 ri=0 ql=0 b=10 | |
| 28 | − 4 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1003/1 dn=0 df=1992 of=0 ri=0 ql=0 b=10 | |
| 29 | − 5 c=17829 g=17830 pq=1 pqc=17829 qp=1 dt=3887/1 dn=0 df=3331 of=0 ri=4 ql=2 b=10 | |
| 30 | − 6 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=859/1 dn=0 df=3224 of=0 ri=0 ql=0 b=10 | |
| 31 | − 7 c=17829 g=17830 pq=0 pqc=17829 qp=1 dt=3761/1 dn=0 df=1818 of=0 ri=0 ql=2 b=10 | |
| 36 | + 0 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=545/1/0 df=50 of=0 ri=0 ql=163 qs=NRW. kt=0/W/0 ktl=ebc3 b=10 ci=153737 co=0 ca=0 | |
| 37 | + 1 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=967/1/0 df=58 of=0 ri=0 ql=634 qs=NRW. kt=0/W/1 ktl=58c b=10 ci=191037 co=0 ca=0 | |
| 38 | + 2 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=1081/1/0 df=175 of=0 ri=0 ql=74 qs=N.W. kt=0/W/2 ktl=da94 b=10 ci=75991 co=0 ca=0 | |
| 39 | + 3 c=20942 g=20943 pq=1 pqc=20942 qp=1 dt=1846/0/0 df=404 of=0 ri=0 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=72261 co=0 ca=0 | |
| 40 | + 4 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=369/1/0 df=83 of=0 ri=0 ql=48 qs=N.W. kt=0/W/4 ktl=e0e7 b=10 ci=128365 co=0 ca=0 | |
| 41 | + 5 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=381/1/0 df=64 of=0 ri=0 ql=169 qs=NRW. kt=0/W/5 ktl=fb2f b=10 ci=164360 co=0 ca=0 | |
| 42 | + 6 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=1037/1/0 df=183 of=0 ri=0 ql=62 qs=N.W. kt=0/W/6 ktl=d2ad b=10 ci=65663 co=0 ca=0 | |
| 43 | + 7 c=20897 g=20897 pq=1 pqc=20896 qp=0 dt=1572/0/0 df=382 of=0 ri=0 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=75006 co=0 ca=0 | |
| 32 | 44 | rcu_bh: |
| 33 | − 0 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=10951/1 dn=0 df=0 of=0 ri=0 ql=0 b=10 | |
| 34 | − 1 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=16117/1 dn=0 df=13 of=0 ri=0 ql=0 b=10 | |
| 35 | − 2 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=1445/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | |
| 36 | − 3 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=6681/1 dn=0 df=9 of=0 ri=0 ql=0 b=10 | |
| 37 | − 4 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=1003/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | |
| 38 | − 5 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=3887/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | |
| 39 | − 6 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=859/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | |
| 40 | − 7 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=3761/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | |
| 45 | + 0 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=545/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/0 ktl=ebc3 b=10 ci=0 co=0 ca=0 | |
| 46 | + 1 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=967/1/0 df=3 of=0 ri=1 ql=0 qs=.... kt=0/W/1 ktl=58c b=10 ci=151 co=0 ca=0 | |
| 47 | + 2 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1081/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/2 ktl=da94 b=10 ci=0 co=0 ca=0 | |
| 48 | + 3 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1846/0/0 df=8 of=0 ri=1 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=0 co=0 ca=0 | |
| 49 | + 4 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=369/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/4 ktl=e0e7 b=10 ci=0 co=0 ca=0 | |
| 50 | + 5 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=381/1/0 df=4 of=0 ri=1 ql=0 qs=.... kt=0/W/5 ktl=fb2f b=10 ci=0 co=0 ca=0 | |
| 51 | + 6 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1037/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/6 ktl=d2ad b=10 ci=0 co=0 ca=0 | |
| 52 | + 7 c=1474 g=1474 pq=1 pqc=1473 qp=0 dt=1572/0/0 df=8 of=0 ri=1 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=0 co=0 ca=0 | |
| 41 | 53 | |
| 42 | 54 | The first section lists the rcu_data structures for rcu_sched, the second |
| 43 | 55 | for rcu_bh. Note that CONFIG_TREE_PREEMPT_RCU kernels will have an |
| @@ -52,17 +64,18 @@ o The number at the beginning of each line is the CPU number. · 8 unmodified lines | ||
| 52 | 64 | substantially larger than the number of actual CPUs. |
| 53 | 65 | |
| 54 | 66 | o "c" is the count of grace periods that this CPU believes have |
| 55 | − completed. CPUs in dynticks idle mode may lag quite a ways | |
| 56 | − behind, for example, CPU 4 under "rcu_sched" above, which has | |
| 57 | − slept through the past 25 RCU grace periods. It is not unusual | |
| 58 | − to see CPUs lagging by thousands of grace periods. | |
| 67 | + completed. Offlined CPUs and CPUs in dynticks idle mode may | |
| 68 | + lag quite a ways behind, for example, CPU 6 under "rcu_sched" | |
| 69 | + above, which has been offline through not quite 40,000 RCU grace | |
| 70 | + periods. It is not unusual to see CPUs lagging by thousands of | |
| 71 | + grace periods. | |
| 59 | 72 | |
| 60 | 73 | o "g" is the count of grace periods that this CPU believes have |
| 61 | − started. Again, CPUs in dynticks idle mode may lag behind. | |
| 62 | − If the "c" and "g" values are equal, this CPU has already | |
| 63 | − reported a quiescent state for the last RCU grace period that | |
| 64 | − it is aware of, otherwise, the CPU believes that it owes RCU a | |
| 65 | − quiescent state. | |
| 74 | + started. Again, offlined CPUs and CPUs in dynticks idle mode | |
| 75 | + may lag behind. If the "c" and "g" values are equal, this CPU | |
| 76 | + has already reported a quiescent state for the last RCU grace | |
| 77 | + period that it is aware of, otherwise, the CPU believes that it | |
| 78 | + owes RCU a quiescent state. | |
| 66 | 79 | |
| 67 | 80 | o "pq" indicates that this CPU has passed through a quiescent state |
| 68 | 81 | for the current grace period. It is possible for "pq" to be |
| @@ -81,22 +94,16 @@ o "pqc" indicates which grace period the last-observed quiescent · 12 unmodified lines | ||
| 81 | 94 | the next grace period! |
| 82 | 95 | |
| 83 | 96 | o "qp" indicates that RCU still expects a quiescent state from |
| 84 | − this CPU. | |
| 97 | + this CPU. Offlined CPUs and CPUs in dyntick idle mode might | |
| 98 | + well have qp=1, which is OK: RCU is still ignoring them. | |
| 85 | 99 | |
| 86 | 100 | o "dt" is the current value of the dyntick counter that is incremented |
| 87 | 101 | when entering or leaving dynticks idle state, either by the |
| 88 | − scheduler or by irq. The number after the "/" is the interrupt | |
| 89 | − nesting depth when in dyntick-idle state, or one greater than | |
| 90 | − the interrupt-nesting depth otherwise. | |
| 91 | − | |
| 92 | − This field is displayed only for CONFIG_NO_HZ kernels. | |
| 93 | − | |
| 94 | −o "dn" is the current value of the dyntick counter that is incremented | |
| 95 | − when entering or leaving dynticks idle state via NMI. If both | |
| 96 | − the "dt" and "dn" values are even, then this CPU is in dynticks | |
| 97 | − idle mode and may be ignored by RCU. If either of these two | |
| 98 | − counters is odd, then RCU must be alert to the possibility of | |
| 99 | − an RCU read-side critical section running on this CPU. | |
| 102 | + scheduler or by irq. This number is even if the CPU is in | |
| 103 | + dyntick idle mode and odd otherwise. The number after the first | |
| 104 | + "/" is the interrupt nesting depth when in dyntick-idle state, | |
| 105 | + or one greater than the interrupt-nesting depth otherwise. | |
| 106 | + The number after the second "/" is the NMI nesting depth. | |
| 100 | 107 | |
| 101 | 108 | This field is displayed only for CONFIG_NO_HZ kernels. |
| 102 | 109 | |
| @@ -108,7 +115,7 @@ o "df" is the number of times that some other CPU has forced a · 5 unmodified lines | ||
| 108 | 115 | |
| 109 | 116 | o "of" is the number of times that some other CPU has forced a |
| 110 | 117 | quiescent state on behalf of this CPU due to this CPU being |
| 111 | − offline. In a perfect world, this might neve happen, but it | |
| 118 | + offline. In a perfect world, this might never happen, but it | |
| 112 | 119 | turns out that offlining and onlining a CPU can take several grace |
| 113 | 120 | periods, and so there is likely to be an extended period of time |
| 114 | 121 | when RCU believes that the CPU is online when it really is not. |
| @@ -125,6 +132,62 @@ o "ql" is the number of RCU callbacks currently residing on · 10 unmodified lines | ||
| 125 | 132 | of what state they are in (new, waiting for grace period to |
| 126 | 133 | start, waiting for grace period to end, ready to invoke). |
| 127 | 134 | |
| 135 | +o "qs" gives an indication of the state of the callback queue | |
| 136 | + with four characters: | |
| 137 | + | |
| 138 | + "N" Indicates that there are callbacks queued that are not | |
| 139 | + ready to be handled by the next grace period, and thus | |
| 140 | + will be handled by the grace period following the next | |
| 141 | + one. | |
| 142 | + | |
| 143 | + "R" Indicates that there are callbacks queued that are | |
| 144 | + ready to be handled by the next grace period. | |
| 145 | + | |
| 146 | + "W" Indicates that there are callbacks queued that are | |
| 147 | + waiting on the current grace period. | |
| 148 | + | |
| 149 | + "D" Indicates that there are callbacks queued that have | |
| 150 | + already been handled by a prior grace period, and are | |
| 151 | + thus waiting to be invoked. Note that callbacks in | |
| 152 | + the process of being invoked are not counted here. | |
| 153 | + Callbacks in the process of being invoked are those | |
| 154 | + that have been removed from the rcu_data structures | |
| 155 | + queues by rcu_do_batch(), but which have not yet been | |
| 156 | + invoked. | |
| 157 | + | |
| 158 | + If there are no callbacks in a given one of the above states, | |
| 159 | + the corresponding character is replaced by ".". | |
| 160 | + | |
| 161 | +o "kt" is the per-CPU kernel-thread state. The digit preceding | |
| 162 | + the first slash is zero if there is no work pending and 1 | |
| 163 | + otherwise. The character between the first pair of slashes is | |
| 164 | + as follows: | |
| 165 | + | |
| 166 | + "S" The kernel thread is stopped, in other words, all | |
| 167 | + CPUs corresponding to this rcu_node structure are | |
| 168 | + offline. | |
| 169 | + | |
| 170 | + "R" The kernel thread is running. | |
| 171 | + | |
| 172 | + "W" The kernel thread is waiting because there is no work | |
| 173 | + for it to do. | |
| 174 | + | |
| 175 | + "O" The kernel thread is waiting because it has been | |
| 176 | + forced off of its designated CPU or because its | |
| 177 | + ->cpus_allowed mask permits it to run on other than | |
| 178 | + its designated CPU. | |
| 179 | + | |
| 180 | + "Y" The kernel thread is yielding to avoid hogging CPU. | |
| 181 | + | |
| 182 | + "?" Unknown value, indicates a bug. | |
| 183 | + | |
| 184 | + The number after the final slash is the CPU that the kthread | |
| 185 | + is actually running on. | |
| 186 | + | |
| 187 | +o "ktl" is the low-order 16 bits (in hexadecimal) of the count of | |
| 188 | + the number of times that this CPU's per-CPU kthread has gone | |
| 189 | + through its loop servicing invoke_rcu_cpu_kthread() requests. | |
| 190 | + | |
| 128 | 191 | o "b" is the batch limit for this CPU. If more than this number |
| 129 | 192 | of RCU callbacks is ready to invoke, then the remainder will |
| 130 | 193 | be deferred. |
| @@ -174,14 +237,14 @@ o "gpnum" is the number of grace periods that have started. It is · 43 unmodified lines | ||
| 174 | 237 | The output of "cat rcu/rcuhier" looks as follows, with very long lines: |
| 175 | 238 | |
| 176 | 239 | c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 |
| 177 | −1/1 .>. 0:127 ^0 | |
| 178 | −3/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3 | |
| 179 | −3/3f .>. 0:5 ^0 2/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3 | |
| 240 | +1/1 ..>. 0:127 ^0 | |
| 241 | +3/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3 | |
| 242 | +3/3f ..>. 0:5 ^0 2/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3 | |
| 180 | 243 | rcu_bh: |
| 181 | 244 | c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 |
| 182 | −0/1 .>. 0:127 ^0 | |
| 183 | −0/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3 | |
| 184 | −0/3f .>. 0:5 ^0 0/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3 | |
| 245 | +0/1 ..>. 0:127 ^0 | |
| 246 | +0/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3 | |
| 247 | +0/3f ..>. 0:5 ^0 0/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3 | |
| 185 | 248 | |
| 186 | 249 | This is once again split into "rcu_sched" and "rcu_bh" portions, |
| 187 | 250 | and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional |
| @@ -240,13 +303,20 @@ o Each element of the form "1/1 0:127 ^0" represents one struct · 52 unmodified lines | ||
| 240 | 303 | current grace period. |
| 241 | 304 | |
| 242 | 305 | o The characters separated by the ">" indicate the state |
| 243 | − of the blocked-tasks lists. A "T" preceding the ">" | |
| 306 | + of the blocked-tasks lists. A "G" preceding the ">" | |
| 244 | 307 | indicates that at least one task blocked in an RCU |
| 245 | 308 | read-side critical section blocks the current grace |
| 246 | − period, while a "." preceding the ">" indicates otherwise. | |
| 247 | − The character following the ">" indicates similarly for | |
| 248 | − the next grace period. A "T" should appear in this | |
| 249 | − field only for rcu-preempt. | |
| 309 | + period, while a "E" preceding the ">" indicates that | |
| 310 | + at least one task blocked in an RCU read-side critical | |
| 311 | + section blocks the current expedited grace period. | |
| 312 | + A "T" character following the ">" indicates that at | |
| 313 | + least one task is blocked within an RCU read-side | |
| 314 | + critical section, regardless of whether any current | |
| 315 | + grace period (expedited or normal) is inconvenienced. | |
| 316 | + A "." character appears if the corresponding condition | |
| 317 | + does not hold, so that "..>." indicates that no tasks | |
| 318 | + are blocked. In contrast, "GE>T" indicates maximal | |
| 319 | + inconvenience from blocked tasks. | |
| 250 | 320 | |
| 251 | 321 | o The numbers separated by the ":" are the range of CPUs |
| 252 | 322 | served by this struct rcu_node. This can be helpful |
| @@ -328,6 +398,113 @@ o "nn" is the number of times that this CPU needed nothing. Alert · 75 unmodified lines | ||
| 328 | 398 | is due to short-circuit evaluation in rcu_pending(). |
| 329 | 399 | |
| 330 | 400 | |
| 401 | +The output of "cat rcu/rcutorture" looks as follows: | |
| 402 | + | |
| 403 | +rcutorture test sequence: 0 (test in progress) | |
| 404 | +rcutorture update version number: 615 | |
| 405 | + | |
| 406 | +The first line shows the number of rcutorture tests that have completed | |
| 407 | +since boot. If a test is currently running, the "(test in progress)" | |
| 408 | +string will appear as shown above. The second line shows the number of | |
| 409 | +update cycles that the current test has started, or zero if there is | |
| 410 | +no test in progress. | |
| 411 | + | |
| 412 | + | |
| 413 | +The output of "cat rcu/rcuboost" looks as follows: | |
| 414 | + | |
| 415 | +0:5 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f | |
| 416 | + balk: nt=0 egt=989 bt=0 nb=0 ny=0 nos=16 | |
| 417 | +6:7 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f | |
| 418 | + balk: nt=0 egt=225 bt=0 nb=0 ny=0 nos=6 | |
| 419 | + | |
| 420 | +This information is output only for rcu_preempt. Each two-line entry | |
| 421 | +corresponds to a leaf rcu_node strcuture. The fields are as follows: | |
| 422 | + | |
| 423 | +o "n:m" is the CPU-number range for the corresponding two-line | |
| 424 | + entry. In the sample output above, the first entry covers | |
| 425 | + CPUs zero through five and the second entry covers CPUs 6 | |
| 426 | + and 7. | |
| 427 | + | |
| 428 | +o "tasks=TNEB" gives the state of the various segments of the | |
| 429 | + rnp->blocked_tasks list: | |
| 430 | + | |
| 431 | + "T" This indicates that there are some tasks that blocked | |
| 432 | + while running on one of the corresponding CPUs while | |
| 433 | + in an RCU read-side critical section. | |
| 434 | + | |
| 435 | + "N" This indicates that some of the blocked tasks are preventing | |
| 436 | + the current normal (non-expedited) grace period from | |
| 437 | + completing. | |
| 438 | + | |
| 439 | + "E" This indicates that some of the blocked tasks are preventing | |
| 440 | + the current expedited grace period from completing. | |
| 441 | + | |
| 442 | + "B" This indicates that some of the blocked tasks are in | |
| 443 | + need of RCU priority boosting. | |
| 444 | + | |
| 445 | + Each character is replaced with "." if the corresponding | |
| 446 | + condition does not hold. | |
| 447 | + | |
| 448 | +o "kt" is the state of the RCU priority-boosting kernel | |
| 449 | + thread associated with the corresponding rcu_node structure. | |
| 450 | + The state can be one of the following: | |
| 451 | + | |
| 452 | + "S" The kernel thread is stopped, in other words, all | |
| 453 | + CPUs corresponding to this rcu_node structure are | |
| 454 | + offline. | |
| 455 | + | |
| 456 | + "R" The kernel thread is running. | |
| 457 | + | |
| 458 | + "W" The kernel thread is waiting because there is no work | |
| 459 | + for it to do. | |
| 460 | + | |
| 461 | + "Y" The kernel thread is yielding to avoid hogging CPU. | |
| 462 | + | |
| 463 | + "?" Unknown value, indicates a bug. | |
| 464 | + | |
| 465 | +o "ntb" is the number of tasks boosted. | |
| 466 | + | |
| 467 | +o "neb" is the number of tasks boosted in order to complete an | |
| 468 | + expedited grace period. | |
| 469 | + | |
| 470 | +o "nnb" is the number of tasks boosted in order to complete a | |
| 471 | + normal (non-expedited) grace period. When boosting a task | |
| 472 | + that was blocking both an expedited and a normal grace period, | |
| 473 | + it is counted against the expedited total above. | |
| 474 | + | |
| 475 | +o "j" is the low-order 16 bits of the jiffies counter in | |
| 476 | + hexadecimal. | |
| 477 | + | |
| 478 | +o "bt" is the low-order 16 bits of the value that the jiffies | |
| 479 | + counter will have when we next start boosting, assuming that | |
| 480 | + the current grace period does not end beforehand. This is | |
| 481 | + also in hexadecimal. | |
| 482 | + | |
| 483 | +o "balk: nt" counts the number of times we didn't boost (in | |
| 484 | + other words, we balked) even though it was time to boost because | |
| 485 | + there were no blocked tasks to boost. This situation occurs | |
| 486 | + when there is one blocked task on one rcu_node structure and | |
| 487 | + none on some other rcu_node structure. | |
| 488 | + | |
| 489 | +o "egt" counts the number of times we balked because although | |
| 490 | + there were blocked tasks, none of them were blocking the | |
| 491 | + current grace period, whether expedited or otherwise. | |
| 492 | + | |
| 493 | +o "bt" counts the number of times we balked because boosting | |
| 494 | + had already been initiated for the current grace period. | |
| 495 | + | |
| 496 | +o "nb" counts the number of times we balked because there | |
| 497 | + was at least one task blocking the current non-expedited grace | |
| 498 | + period that never had blocked. If it is already running, it | |
| 499 | + just won't help to boost its priority! | |
| 500 | + | |
| 501 | +o "ny" counts the number of times we balked because it was | |
| 502 | + not yet time to start boosting. | |
| 503 | + | |
| 504 | +o "nos" counts the number of times we balked for other | |
| 505 | + reasons, e.g., the grace period ended first. | |
| 506 | + | |
| 507 | + | |
| 331 | 508 | CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats |
| 332 | 509 | |
| 333 | 510 | These implementations of RCU provides a single debugfs file under the |
| @@ -394,9 +571,9 @@ o "neb" is the number of expedited grace periods that have had · 60 unmodified lines | ||
| 394 | 571 | o "nnb" is the number of normal grace periods that have had |
| 395 | 572 | to resort to RCU priority boosting since boot. |
| 396 | 573 | |
| 397 | −o "j" is the low-order 12 bits of the jiffies counter in hexadecimal. | |
| 574 | +o "j" is the low-order 16 bits of the jiffies counter in hexadecimal. | |
| 398 | 575 | |
| 399 | −o "bt" is the low-order 12 bits of the value that the jiffies counter | |
| 576 | +o "bt" is the low-order 16 bits of the value that the jiffies counter | |
| 400 | 577 | will have at the next time that boosting is scheduled to begin. |
| 401 | 578 | |
| 402 | 579 | o In the line beginning with "normal balk", the fields are as follows: |
| @@ -28,7 +28,7 @@ expect these delays to be short, measurable in days, not weeks or months. · 27 unmodified lines | ||
| 28 | 28 | A disclosure date is negotiated by the security team working with the |
| 29 | 29 | bug submitter as well as vendors. However, the kernel security team |
| 30 | 30 | holds the final say when setting a disclosure date. The timeframe for |
| 31 | −disclosure is from immediate (esp. if it's already publically known) | |
| 31 | +disclosure is from immediate (esp. if it's already publicly known) | |
| 32 | 32 | to a few weeks. As a basic default policy, we expect report date to |
| 33 | 33 | disclosure date to be on the order of 7 days. |
| 34 | 34 | |
| @@ -101,7 +101,7 @@ PM support: Since Linux is used on many portable and desktop systems, your · 100 unmodified lines | ||
| 101 | 101 | complete overview of the power management issues related to |
| 102 | 102 | drivers see Documentation/power/devices.txt . |
| 103 | 103 | |
| 104 | −Control: In general if there is active maintainance of a driver by | |
| 104 | +Control: In general if there is active maintenance of a driver by | |
| 105 | 105 | the author then patches will be redirected to them unless |
| 106 | 106 | they are totally obvious and without need of checking. |
| 107 | 107 | If you want to be the contact and update point for the |
| @@ -714,10 +714,11 @@ Jeff Garzik, "Linux kernel patch submission format". · 713 unmodified lines | ||
| 714 | 714 | <http://linux.yyz.us/patch-format.html> |
| 715 | 715 | |
| 716 | 716 | Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer". |
| 717 | − <http://www.kroah.com/log/2005/03/31/> | |
| 718 | − <http://www.kroah.com/log/2005/07/08/> | |
| 719 | − <http://www.kroah.com/log/2005/10/19/> | |
| 720 | − <http://www.kroah.com/log/2006/01/11/> | |
| 717 | + <http://www.kroah.com/log/linux/maintainer.html> | |
| 718 | + <http://www.kroah.com/log/linux/maintainer-02.html> | |
| 719 | + <http://www.kroah.com/log/linux/maintainer-03.html> | |
| 720 | + <http://www.kroah.com/log/linux/maintainer-04.html> | |
| 721 | + <http://www.kroah.com/log/linux/maintainer-05.html> | |
| 721 | 722 | |
| 722 | 723 | NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people! |
| 723 | 724 | <http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2> |
| @@ -729,7 +730,7 @@ Linus Torvalds's mail on the canonical patch format: · 5 unmodified lines | ||
| 729 | 730 | <http://lkml.org/lkml/2005/4/7/183> |
| 730 | 731 | |
| 731 | 732 | Andi Kleen, "On submitting kernel patches" |
| 732 | − Some strategies to get difficult or controversal changes in. | |
| 733 | + Some strategies to get difficult or controversial changes in. | |
| 733 | 734 | http://halobates.de/on-submitting-patches.pdf |
| 734 | 735 | |
| 735 | 736 | -- |
| @@ -177,6 +177,8 @@ static int get_family_id(int sd) · 176 unmodified lines | ||
| 177 | 177 | rc = send_cmd(sd, GENL_ID_CTRL, getpid(), CTRL_CMD_GETFAMILY, |
| 178 | 178 | CTRL_ATTR_FAMILY_NAME, (void *)name, |
| 179 | 179 | strlen(TASKSTATS_GENL_NAME)+1); |
| 180 | + if (rc < 0) | |
| 181 | + return 0; /* sendto() failure? */ | |
| 180 | 182 | |
| 181 | 183 | rep_len = recv(sd, &ans, sizeof(ans), 0); |
| 182 | 184 | if (ans.n.nlmsg_type == NLMSG_ERROR || |
| @@ -191,30 +193,37 @@ static int get_family_id(int sd) · 8 unmodified lines | ||
| 191 | 193 | return id; |
| 192 | 194 | } |
| 193 | 195 | |
| 196 | +#define average_ms(t, c) (t / 1000000ULL / (c ? c : 1)) | |
| 197 | + | |
| 194 | 198 | static void print_delayacct(struct taskstats *t) |
| 195 | 199 | { |
| 196 | − printf("\n\nCPU %15s%15s%15s%15s\n" | |
| 197 | − " %15llu%15llu%15llu%15llu\n" | |
| 198 | − "IO %15s%15s\n" | |
| 199 | − " %15llu%15llu\n" | |
| 200 | − "SWAP %15s%15s\n" | |
| 201 | − " %15llu%15llu\n" | |
| 202 | − "RECLAIM %12s%15s\n" | |
| 203 | − " %15llu%15llu\n", | |
| 204 | − "count", "real total", "virtual total", "delay total", | |
| 200 | + printf("\n\nCPU %15s%15s%15s%15s%15s\n" | |
| 201 | + " %15llu%15llu%15llu%15llu%15.3fms\n" | |
| 202 | + "IO %15s%15s%15s\n" | |
| 203 | + " %15llu%15llu%15llums\n" | |
| 204 | + "SWAP %15s%15s%15s\n" | |
| 205 | + " %15llu%15llu%15llums\n" | |
| 206 | + "RECLAIM %12s%15s%15s\n" | |
| 207 | + " %15llu%15llu%15llums\n", | |
| 208 | + "count", "real total", "virtual total", | |
| 209 | + "delay total", "delay average", | |
| 205 | 210 | (unsigned long long)t->cpu_count, |
| 206 | 211 | (unsigned long long)t->cpu_run_real_total, |
| 207 | 212 | (unsigned long long)t->cpu_run_virtual_total, |
| 208 | 213 | (unsigned long long)t->cpu_delay_total, |
| 209 | − "count", "delay total", | |
| 214 | + average_ms((double)t->cpu_delay_total, t->cpu_count), | |
| 215 | + "count", "delay total", "delay average", | |
| 210 | 216 | (unsigned long long)t->blkio_count, |
| 211 | 217 | (unsigned long long)t->blkio_delay_total, |
| 212 | − "count", "delay total", | |
| 218 | + average_ms(t->blkio_delay_total, t->blkio_count), | |
| 219 | + "count", "delay total", "delay average", | |
| 213 | 220 | (unsigned long long)t->swapin_count, |
| 214 | 221 | (unsigned long long)t->swapin_delay_total, |
| 215 | − "count", "delay total", | |
| 222 | + average_ms(t->swapin_delay_total, t->swapin_count), | |
| 223 | + "count", "delay total", "delay average", | |
| 216 | 224 | (unsigned long long)t->freepages_count, |
| 217 | − (unsigned long long)t->freepages_delay_total); | |
| 225 | + (unsigned long long)t->freepages_delay_total, | |
| 226 | + average_ms(t->freepages_delay_total, t->freepages_count)); | |
| 218 | 227 | } |
| 219 | 228 | |
| 220 | 229 | static void task_context_switch_counts(struct taskstats *t) |
| @@ -433,8 +442,6 @@ int main(int argc, char *argv[]) · 212 unmodified lines | ||
| 433 | 442 | } |
| 434 | 443 | |
| 435 | 444 | do { |
| 436 | − int i; | |
| 437 | − | |
| 438 | 445 | rep_len = recv(nl_sd, &msg, sizeof(msg), 0); |
| 439 | 446 | PRINTF("received %d bytes\n", rep_len); |
| 440 | 447 | |
| @@ -459,7 +466,6 @@ int main(int argc, char *argv[]) · 18 unmodified lines | ||
| 459 | 466 | |
| 460 | 467 | na = (struct nlattr *) GENLMSG_DATA(&msg); |
| 461 | 468 | len = 0; |
| 462 | − i = 0; | |
| 463 | 469 | while (len < rep_len) { |
| 464 | 470 | len += NLA_ALIGN(na->nla_len); |
| 465 | 471 | switch (na->nla_type) { |
| @@ -66,3 +66,8 @@ Note: We can use a kernel with multiple custom ACPI method running, · 65 unmodified lines | ||
| 66 | 66 | But each individual write to debugfs can implement a SINGLE |
| 67 | 67 | method override. i.e. if we want to insert/override multiple |
| 68 | 68 | ACPI methods, we need to redo step c) ~ g) for multiple times. |
| 69 | + | |
| 70 | +Note: Be aware that root can mis-use this driver to modify arbitrary | |
| 71 | + memory and gain additional rights, if root's privileges got | |
| 72 | + restricted (for example if root is not allowed to load additional | |
| 73 | + modules after boot). | |
| @@ -65,13 +65,19 @@ looks at the connected hardware is beyond the scope of this document. · 64 unmodified lines | ||
| 65 | 65 | The boot loader must ultimately be able to provide a MACH_TYPE_xxx |
| 66 | 66 | value to the kernel. (see linux/arch/arm/tools/mach-types). |
| 67 | 67 | |
| 68 | − | |
| 69 | −4. Setup the kernel tagged list | |
| 70 | −------------------------------- | |
| 68 | +4. Setup boot data | |
| 69 | +------------------ | |
| 71 | 70 | |
| 72 | 71 | Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED |
| 73 | 72 | New boot loaders: MANDATORY |
| 74 | 73 | |
| 74 | +The boot loader must provide either a tagged list or a dtb image for | |
| 75 | +passing configuration data to the kernel. The physical address of the | |
| 76 | +boot data is passed to the kernel in register r2. | |
| 77 | + | |
| 78 | +4a. Setup the kernel tagged list | |
| 79 | +-------------------------------- | |
| 80 | + | |
| 75 | 81 | The boot loader must create and initialise the kernel tagged list. |
| 76 | 82 | A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE. |
| 77 | 83 | The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag |
| @@ -101,6 +107,24 @@ The tagged list must be placed in a region of memory where neither · 23 unmodified lines | ||
| 101 | 107 | the kernel decompressor nor initrd 'bootp' program will overwrite |
| 102 | 108 | it. The recommended placement is in the first 16KiB of RAM. |
| 103 | 109 | |
| 110 | +4b. Setup the device tree | |
| 111 | +------------------------- | |
| 112 | + | |
| 113 | +The boot loader must load a device tree image (dtb) into system ram | |
| 114 | +at a 64bit aligned address and initialize it with the boot data. The | |
| 115 | +dtb format is documented in Documentation/devicetree/booting-without-of.txt. | |
| 116 | +The kernel will look for the dtb magic value of 0xd00dfeed at the dtb | |
| 117 | +physical address to determine if a dtb has been passed instead of a | |
| 118 | +tagged list. | |
| 119 | + | |
| 120 | +The boot loader must pass at a minimum the size and location of the | |
| 121 | +system memory, and the root filesystem location. The dtb must be | |
| 122 | +placed in a region of memory where the kernel decompressor will not | |
| 123 | +overwrite it. The recommended placement is in the first 16KiB of RAM | |
| 124 | +with the caveat that it may not be located at physical address 0 since | |
| 125 | +the kernel interprets a value of 0 in r2 to mean neither a tagged list | |
| 126 | +nor a dtb were passed. | |
| 127 | + | |
| 104 | 128 | 5. Calling the kernel image |
| 105 | 129 | --------------------------- |
| 106 | 130 | |
| @@ -125,7 +149,8 @@ In either case, the following conditions must be met: · 18 unmodified lines | ||
| 125 | 149 | - CPU register settings |
| 126 | 150 | r0 = 0, |
| 127 | 151 | r1 = machine type number discovered in (3) above. |
| 128 | − r2 = physical address of tagged list in system RAM. | |
| 152 | + r2 = physical address of tagged list in system RAM, or | |
| 153 | + physical address of device tree block (dtb) in system RAM | |
| 129 | 154 | |
| 130 | 155 | - CPU mode |
| 131 | 156 | All forms of interrupts must be disabled (IRQs and FIQs) |
| @@ -36,7 +36,7 @@ Linux currently supports the following features on the IXP4xx chips: · 35 unmodified lines | ||
| 36 | 36 | - Timers (watchdog, OS) |
| 37 | 37 | |
| 38 | 38 | The following components of the chips are not supported by Linux and |
| 39 | −require the use of Intel's propietary CSR softare: | |
| 39 | +require the use of Intel's proprietary CSR softare: | |
| 40 | 40 | |
| 41 | 41 | - USB device interface |
| 42 | 42 | - Network interfaces (HSS, Utopia, NPEs, etc) |
| @@ -47,7 +47,7 @@ software from: · 4 unmodified lines | ||
| 47 | 47 | |
| 48 | 48 | http://developer.intel.com/design/network/products/npfamily/ixp425.htm |
| 49 | 49 | |
| 50 | −DO NOT POST QUESTIONS TO THE LINUX MAILING LISTS REGARDING THE PROPIETARY | |
| 50 | +DO NOT POST QUESTIONS TO THE LINUX MAILING LISTS REGARDING THE PROPRIETARY | |
| 51 | 51 | SOFTWARE. |
| 52 | 52 | |
| 53 | 53 | There are several websites that provide directions/pointers on using |
| @@ -116,7 +116,7 @@ Configuration · 115 unmodified lines | ||
| 116 | 116 | Allows the entire memory to be checksummed before and after the |
| 117 | 117 | suspend to see if there has been any corruption of the contents. |
| 118 | 118 | |
| 119 | − Note, the time to calculate the CRC is dependant on the CPU speed | |
| 119 | + Note, the time to calculate the CRC is dependent on the CPU speed | |
| 120 | 120 | and the size of memory. For an 64Mbyte RAM area on an 200MHz |
| 121 | 121 | S3C2410, this can take approximately 4 seconds to complete. |
| 122 | 122 | |
| @@ -5,7 +5,7 @@ Introduction · 4 unmodified lines | ||
| 5 | 5 | ------------ |
| 6 | 6 | |
| 7 | 7 | This outlines the Samsung GPIO implementation and the architecture |
| 8 | −specfic calls provided alongisde the drivers/gpio core. | |
| 8 | +specific calls provided alongisde the drivers/gpio core. | |
| 9 | 9 | |
| 10 | 10 | |
| 11 | 11 | S3C24XX (Legacy) |
| @@ -14,7 +14,6 @@ Introduction · 13 unmodified lines | ||
| 14 | 14 | - S3C24XX: See Documentation/arm/Samsung-S3C24XX/Overview.txt for full list |
| 15 | 15 | - S3C64XX: S3C6400 and S3C6410 |
| 16 | 16 | - S5P6440 |
| 17 | − - S5P6442 | |
| 18 | 17 | - S5PC100 |
| 19 | 18 | - S5PC110 / S5PV210 |
| 20 | 19 | |
| @@ -36,7 +35,6 @@ Configuration · 15 unmodified lines | ||
| 36 | 35 | unifying all the SoCs into one kernel. |
| 37 | 36 | |
| 38 | 37 | s5p6440_defconfig - S5P6440 specific default configuration |
| 39 | − s5p6442_defconfig - S5P6442 specific default configuration | |
| 40 | 38 | s5pc100_defconfig - S5PC100 specific default configuration |
| 41 | 39 | s5pc110_defconfig - S5PC110 specific default configuration |
| 42 | 40 | s5pv210_defconfig - S5PV210 specific default configuration |
| @@ -12,7 +12,7 @@ Also, it should be made opaque such that any kind of cast to a normal · 11 unmodified lines | ||
| 12 | 12 | C integer type will fail. Something like the following should |
| 13 | 13 | suffice: |
| 14 | 14 | |
| 15 | − typedef struct { volatile int counter; } atomic_t; | |
| 15 | + typedef struct { int counter; } atomic_t; | |
| 16 | 16 | |
| 17 | 17 | Historically, counter has been declared volatile. This is now discouraged. |
| 18 | 18 | See Documentation/volatile-considered-harmful.txt for the complete rationale. |
| @@ -497,7 +497,7 @@ The scatter gather list is in the form of an array of <page, offset, len> · 496 unmodified lines | ||
| 497 | 497 | entries with their corresponding dma address mappings filled in at the |
| 498 | 498 | appropriate time. As an optimization, contiguous physical pages can be |
| 499 | 499 | covered by a single entry where <page> refers to the first page and <len> |
| 500 | −covers the range of pages (upto 16 contiguous pages could be covered this | |
| 500 | +covers the range of pages (up to 16 contiguous pages could be covered this | |
| 501 | 501 | way). There is a helper routine (blk_rq_map_sg) which drivers can use to build |
| 502 | 502 | the sg list. |
| 503 | 503 | |
| @@ -565,7 +565,7 @@ struct request { · 61 unmodified lines | ||
| 565 | 565 | . |
| 566 | 566 | int tag; /* command tag associated with request */ |
| 567 | 567 | void *special; /* same as before */ |
| 568 | − char *buffer; /* valid only for low memory buffers upto | |
| 568 | + char *buffer; /* valid only for low memory buffers up to | |
| 569 | 569 | current_nr_sectors */ |
| 570 | 570 | . |
| 571 | 571 | . |
| @@ -169,3 +169,18 @@ is issued which positions the tape to a known position. Typically you · 168 unmodified lines | ||
| 169 | 169 | must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example) |
| 170 | 170 | before i/o can proceed again to a tape drive which was reset. |
| 171 | 171 | |
| 172 | +There is a cciss_tape_cmds module parameter which can be used to make cciss | |
| 173 | +allocate more commands for use by tape drives. Ordinarily only a few commands | |
| 174 | +(6) are allocated for tape drives because tape drives are slow and | |
| 175 | +infrequently used and the primary purpose of Smart Array controllers is to | |
| 176 | +act as a RAID controller for disk drives, so the vast majority of commands | |
| 177 | +are allocated for disk devices. However, if you have more than a few tape | |
| 178 | +drives attached to a smart array, the default number of commands may not be | |
| 179 | +enought (for example, if you have 8 tape drives, you could only rewind 6 | |
| 180 | +at one time with the default number of commands.) The cciss_tape_cmds module | |
| 181 | +parameter allows more commands (up to 16 more) to be allocated for use by | |
| 182 | +tape drives. For example: | |
| 183 | + | |
| 184 | + insmod cciss.ko cciss_tape_cmds=16 | |
| 185 | + | |
| 186 | +Or, as a kernel boot parameter passed in via grub: cciss.cciss_tape_cmds=8 | |
| @@ -16,7 +16,7 @@ on all processors in the system. Don't let this scare you into · 15 unmodified lines | ||
| 16 | 16 | thinking SMP cache/tlb flushing must be so inefficient, this is in |
| 17 | 17 | fact an area where many optimizations are possible. For example, |
| 18 | 18 | if it can be proven that a user address space has never executed |
| 19 | −on a cpu (see vma->cpu_vm_mask), one need not perform a flush | |
| 19 | +on a cpu (see mm_cpumask()), one need not perform a flush | |
| 20 | 20 | for this address space on that cpu. |
| 21 | 21 | |
| 22 | 22 | First, the TLB flushing interfaces, since they are the simplest. The |
| @@ -110,22 +110,22 @@ university server with various users - students, professors, system · 109 unmodified lines | ||
| 110 | 110 | tasks etc. The resource planning for this server could be along the |
| 111 | 111 | following lines: |
| 112 | 112 | |
| 113 | − CPU : Top cpuset | |
| 113 | + CPU : "Top cpuset" | |
| 114 | 114 | / \ |
| 115 | 115 | CPUSet1 CPUSet2 |
| 116 | − | | | |
| 117 | − (Profs) (Students) | |
| 116 | + | | | |
| 117 | + (Professors) (Students) | |
| 118 | 118 | |
| 119 | 119 | In addition (system tasks) are attached to topcpuset (so |
| 120 | 120 | that they can run anywhere) with a limit of 20% |
| 121 | 121 | |
| 122 | − Memory : Professors (50%), students (30%), system (20%) | |
| 122 | + Memory : Professors (50%), Students (30%), system (20%) | |
| 123 | 123 | |
| 124 | − Disk : Prof (50%), students (30%), system (20%) | |
| 124 | + Disk : Professors (50%), Students (30%), system (20%) | |
| 125 | 125 | |
| 126 | 126 | Network : WWW browsing (20%), Network File System (60%), others (20%) |
| 127 | 127 | / \ |
| 128 | − Prof (15%) students (5%) | |
| 128 | + Professors (15%) students (5%) | |
| 129 | 129 | |
| 130 | 130 | Browsers like Firefox/Lynx go into the WWW network class, while (k)nfsd go |
| 131 | 131 | into NFS network class. |
| @@ -236,7 +236,8 @@ containing the following files describing that cgroup: · 104 unmodified lines | ||
| 236 | 236 | - cgroup.procs: list of tgids in the cgroup. This list is not |
| 237 | 237 | guaranteed to be sorted or free of duplicate tgids, and userspace |
| 238 | 238 | should sort/uniquify the list if this property is required. |
| 239 | − This is a read-only file, for now. | |
| 239 | + Writing a thread group id into this file moves all threads in that | |
| 240 | + group into this cgroup. | |
| 240 | 241 | - notify_on_release flag: run the release agent on exit? |
| 241 | 242 | - release_agent: the path to use for release notifications (this file |
| 242 | 243 | exists in the top cgroup only) |
| @@ -430,6 +431,12 @@ You can attach the current shell task by echoing 0: · 187 unmodified lines | ||
| 430 | 431 | |
| 431 | 432 | # echo 0 > tasks |
| 432 | 433 | |
| 434 | +You can use the cgroup.procs file instead of the tasks file to move all | |
| 435 | +threads in a threadgroup at once. Echoing the pid of any task in a | |
| 436 | +threadgroup to cgroup.procs causes all tasks in that threadgroup to be | |
| 437 | +be attached to the cgroup. Writing 0 to cgroup.procs moves all tasks | |
| 438 | +in the writing task's threadgroup. | |
| 439 | + | |
| 433 | 440 | Note: Since every task is always a member of exactly one cgroup in each |
| 434 | 441 | mounted hierarchy, to remove a task from its current cgroup you must |
| 435 | 442 | move it into a new cgroup (possibly the root cgroup) by writing to the |
| @@ -575,7 +582,7 @@ rmdir() will fail with it. From this behavior, pre_destroy() can be · 139 unmodified lines | ||
| 575 | 582 | called multiple times against a cgroup. |
| 576 | 583 | |
| 577 | 584 | int can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, |
| 578 | − struct task_struct *task, bool threadgroup) | |
| 585 | + struct task_struct *task) | |
| 579 | 586 | (cgroup_mutex held by caller) |
| 580 | 587 | |
| 581 | 588 | Called prior to moving a task into a cgroup; if the subsystem |
| @@ -584,9 +591,14 @@ task is passed, then a successful result indicates that *any* · 2 unmodified lines | ||
| 584 | 591 | unspecified task can be moved into the cgroup. Note that this isn't |
| 585 | 592 | called on a fork. If this method returns 0 (success) then this should |
| 586 | 593 | remain valid while the caller holds cgroup_mutex and it is ensured that either |
| 587 | −attach() or cancel_attach() will be called in future. If threadgroup is | |
| 588 | −true, then a successful result indicates that all threads in the given | |
| 589 | −thread's threadgroup can be moved together. | |
| 594 | +attach() or cancel_attach() will be called in future. | |
| 595 | + | |
| 596 | +int can_attach_task(struct cgroup *cgrp, struct task_struct *tsk); | |
| 597 | +(cgroup_mutex held by caller) | |
| 598 | + | |
| 599 | +As can_attach, but for operations that must be run once per task to be | |
| 600 | +attached (possibly many when using cgroup_attach_proc). Called after | |
| 601 | +can_attach. | |
| 590 | 602 | |
| 591 | 603 | void cancel_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, |
| 592 | 604 | struct task_struct *task, bool threadgroup) |
| @@ -598,15 +610,24 @@ function, so that the subsystem can implement a rollback. If not, not necessary. · 5 unmodified lines | ||
| 598 | 610 | This will be called only about subsystems whose can_attach() operation have |
| 599 | 611 | succeeded. |
| 600 | 612 | |
| 613 | +void pre_attach(struct cgroup *cgrp); | |
| 614 | +(cgroup_mutex held by caller) | |
| 615 | + | |
| 616 | +For any non-per-thread attachment work that needs to happen before | |
| 617 | +attach_task. Needed by cpuset. | |
| 618 | + | |
| 601 | 619 | void attach(struct cgroup_subsys *ss, struct cgroup *cgrp, |
| 602 | − struct cgroup *old_cgrp, struct task_struct *task, | |
| 603 | − bool threadgroup) | |
| 620 | + struct cgroup *old_cgrp, struct task_struct *task) | |
| 604 | 621 | (cgroup_mutex held by caller) |
| 605 | 622 | |
| 606 | 623 | Called after the task has been attached to the cgroup, to allow any |
| 607 | 624 | post-attachment activity that requires memory allocations or blocking. |
| 608 | −If threadgroup is true, the subsystem should take care of all threads | |
| 609 | −in the specified thread's threadgroup. Currently does not support any | |
| 625 | + | |
| 626 | +void attach_task(struct cgroup *cgrp, struct task_struct *tsk); | |
| 627 | +(cgroup_mutex held by caller) | |
| 628 | + | |
| 629 | +As attach, but for operations that must be run once per task to be attached, | |
| 630 | +like can_attach_task. Called before attach. Currently does not support any | |
| 610 | 631 | subsystem that might need the old_cgrp for every thread in the group. |
| 611 | 632 | |
| 612 | 633 | void fork(struct cgroup_subsy *ss, struct task_struct *task) |
| @@ -630,7 +651,7 @@ always handled well. · 17 unmodified lines | ||
| 630 | 651 | void post_clone(struct cgroup_subsys *ss, struct cgroup *cgrp) |
| 631 | 652 | (cgroup_mutex held by caller) |
| 632 | 653 | |
| 633 | −Called at the end of cgroup_clone() to do any parameter | |
| 654 | +Called during cgroup_create() to do any parameter | |
| 634 | 655 | initialization which might be required before a task could attach. For |
| 635 | 656 | example in cpusets, no task may attach before 'cpus' and 'mems' are set |
| 636 | 657 | up. |
| @@ -52,8 +52,10 @@ Brief summary of control files. · 51 unmodified lines | ||
| 52 | 52 | tasks # attach a task(thread) and show list of threads |
| 53 | 53 | cgroup.procs # show list of processes |
| 54 | 54 | cgroup.event_control # an interface for event_fd() |
| 55 | − memory.usage_in_bytes # show current memory(RSS+Cache) usage. | |
| 56 | − memory.memsw.usage_in_bytes # show current memory+Swap usage | |
| 55 | + memory.usage_in_bytes # show current res_counter usage for memory | |
| 56 | + (See 5.5 for details) | |
| 57 | + memory.memsw.usage_in_bytes # show current res_counter usage for memory+Swap | |
| 58 | + (See 5.5 for details) | |
| 57 | 59 | memory.limit_in_bytes # set/show limit of memory usage |
| 58 | 60 | memory.memsw.limit_in_bytes # set/show limit of memory+Swap usage |
| 59 | 61 | memory.failcnt # show the number of memory usage hits limits |
| @@ -453,6 +455,15 @@ memory under it will be reclaimed. · 393 unmodified lines | ||
| 453 | 455 | You can reset failcnt by writing 0 to failcnt file. |
| 454 | 456 | # echo 0 > .../memory.failcnt |
| 455 | 457 | |
| 458 | +5.5 usage_in_bytes | |
| 459 | + | |
| 460 | +For efficiency, as other kernel components, memory cgroup uses some optimization | |
| 461 | +to avoid unnecessary cacheline false sharing. usage_in_bytes is affected by the | |
| 462 | +method and doesn't show 'exact' value of memory(and swap) usage, it's an fuzz | |
| 463 | +value for efficient access. (Of course, when necessary, it's synchronized.) | |
| 464 | +If you want to know more exact memory usage, you should use RSS+CACHE(+SWAP) | |
| 465 | +value in memory.stat(see 5.2). | |
| 466 | + | |
| 456 | 467 | 6. Hierarchy support |
| 457 | 468 | |
| 458 | 469 | The memory controller supports a deep hierarchy and hierarchical accounting. |
| @@ -196,7 +196,7 @@ the state as 0 when a cpu if offline and 1 when its online. · 195 unmodified lines | ||
| 196 | 196 | #To display the current cpu state. |
| 197 | 197 | #cat /sys/devices/system/cpu/cpuX/online |
| 198 | 198 | |
| 199 | −Q: Why cant i remove CPU0 on some systems? | |
| 199 | +Q: Why can't i remove CPU0 on some systems? | |
| 200 | 200 | A: Some architectures may have some special dependency on a certain CPU. |
| 201 | 201 | |
| 202 | 202 | For e.g in IA64 platforms we have ability to sent platform interrupts to the |
| @@ -62,7 +62,7 @@ image file and then arrange all these packets back to back in to one single · 61 unmodified lines | ||
| 62 | 62 | file. |
| 63 | 63 | This file is then copied to /sys/class/firmware/dell_rbu/data. |
| 64 | 64 | Once this file gets to the driver, the driver extracts packet_size data from |
| 65 | −the file and spreads it accross the physical memory in contiguous packet_sized | |
| 65 | +the file and spreads it across the physical memory in contiguous packet_sized | |
| 66 | 66 | space. |
| 67 | 67 | This method makes sure that all the packets get to the driver in a single operation. |
| 68 | 68 | |
| @@ -37,7 +37,7 @@ Algorithm · 36 unmodified lines | ||
| 37 | 37 | ========= |
| 38 | 38 | |
| 39 | 39 | dm-service-time adds the I/O size to 'in-flight-size' when the I/O is |
| 40 | −dispatched and substracts when completed. | |
| 40 | +dispatched and subtracts when completed. | |
| 41 | 41 | Basically, dm-service-time selects a path having minimum service time |
| 42 | 42 | which is calculated by: |
| 43 | 43 | |
| @@ -0,0 +1,397 @@ | ||
| 1 | +===================================================================== | |
| 2 | +SEC 4 Device Tree Binding | |
| 3 | +Copyright (C) 2008-2011 Freescale Semiconductor Inc. | |
| 4 | + | |
| 5 | + CONTENTS | |
| 6 | + -Overview | |
| 7 | + -SEC 4 Node | |
| 8 | + -Job Ring Node | |
| 9 | + -Run Time Integrity Check (RTIC) Node | |
| 10 | + -Run Time Integrity Check (RTIC) Memory Node | |
| 11 | + -Secure Non-Volatile Storage (SNVS) Node | |
| 12 | + -Full Example | |
| 13 | + | |
| 14 | +NOTE: the SEC 4 is also known as Freescale's Cryptographic Accelerator | |
| 15 | +Accelerator and Assurance Module (CAAM). | |
| 16 | + | |
| 17 | +===================================================================== | |
| 18 | +Overview | |
| 19 | + | |
| 20 | +DESCRIPTION | |
| 21 | + | |
| 22 | +SEC 4 h/w can process requests from 2 types of sources. | |
| 23 | +1. DPAA Queue Interface (HW interface between Queue Manager & SEC 4). | |
| 24 | +2. Job Rings (HW interface between cores & SEC 4 registers). | |
| 25 | + | |
| 26 | +High Speed Data Path Configuration: | |
| 27 | + | |
| 28 | +HW interface between QM & SEC 4 and also BM & SEC 4, on DPAA-enabled parts | |
| 29 | +such as the P4080. The number of simultaneous dequeues the QI can make is | |
| 30 | +equal to the number of Descriptor Controller (DECO) engines in a particular | |
| 31 | +SEC version. E.g., the SEC 4.0 in the P4080 has 5 DECOs and can thus | |
| 32 | +dequeue from 5 subportals simultaneously. | |
| 33 | + | |
| 34 | +Job Ring Data Path Configuration: | |
| 35 | + | |
| 36 | +Each JR is located on a separate 4k page, they may (or may not) be made visible | |
| 37 | +in the memory partition devoted to a particular core. The P4080 has 4 JRs, so | |
| 38 | +up to 4 JRs can be configured; and all 4 JRs process requests in parallel. | |
| 39 | + | |
| 40 | +===================================================================== | |
| 41 | +SEC 4 Node | |
| 42 | + | |
| 43 | +Description | |
| 44 | + | |
| 45 | + Node defines the base address of the SEC 4 block. | |
| 46 | + This block specifies the address range of all global | |
| 47 | + configuration registers for the SEC 4 block. It | |
| 48 | + also receives interrupts from the Run Time Integrity Check | |
| 49 | + (RTIC) function within the SEC 4 block. | |
| 50 | + | |
| 51 | +PROPERTIES | |
| 52 | + | |
| 53 | + - compatible | |
| 54 | + Usage: required | |
| 55 | + Value type: <string> | |
| 56 | + Definition: Must include "fsl,sec-v4.0" | |
| 57 | + | |
| 58 | + - #address-cells | |
| 59 | + Usage: required | |
| 60 | + Value type: <u32> | |
| 61 | + Definition: A standard property. Defines the number of cells | |
| 62 | + for representing physical addresses in child nodes. | |
| 63 | + | |
| 64 | + - #size-cells | |
| 65 | + Usage: required | |
| 66 | + Value type: <u32> | |
| 67 | + Definition: A standard property. Defines the number of cells | |
| 68 | + for representing the size of physical addresses in | |
| 69 | + child nodes. | |
| 70 | + | |
| 71 | + - reg | |
| 72 | + Usage: required | |
| 73 | + Value type: <prop-encoded-array> | |
| 74 | + Definition: A standard property. Specifies the physical | |
| 75 | + address and length of the SEC4 configuration registers. | |
| 76 | + registers | |
| 77 | + | |
| 78 | + - ranges | |
| 79 | + Usage: required | |
| 80 | + Value type: <prop-encoded-array> | |
| 81 | + Definition: A standard property. Specifies the physical address | |
| 82 | + range of the SEC 4.0 register space (-SNVS not included). A | |
| 83 | + triplet that includes the child address, parent address, & | |
| 84 | + length. | |
| 85 | + | |
| 86 | + - interrupts | |
| 87 | + Usage: required | |
| 88 | + Value type: <prop_encoded-array> | |
| 89 | + Definition: Specifies the interrupts generated by this | |
| 90 | + device. The value of the interrupts property | |
| 91 | + consists of one interrupt specifier. The format | |
| 92 | + of the specifier is defined by the binding document | |
| 93 | + describing the node's interrupt parent. | |
| 94 | + | |
| 95 | + - interrupt-parent | |
| 96 | + Usage: (required if interrupt property is defined) | |
| 97 | + Value type: <phandle> | |
| 98 | + Definition: A single <phandle> value that points | |
| 99 | + to the interrupt parent to which the child domain | |
| 100 | + is being mapped. | |
| 101 | + | |
| 102 | + Note: All other standard properties (see the ePAPR) are allowed | |
| 103 | + but are optional. | |
| 104 | + | |
| 105 | + | |
| 106 | +EXAMPLE | |
| 107 | + crypto@300000 { | |
| 108 | + compatible = "fsl,sec-v4.0"; | |
| 109 | + #address-cells = <1>; | |
| 110 | + #size-cells = <1>; | |
| 111 | + reg = <0x300000 0x10000>; | |
| 112 | + ranges = <0 0x300000 0x10000>; | |
| 113 | + interrupt-parent = <&mpic>; | |
| 114 | + interrupts = <92 2>; | |
| 115 | + }; | |
| 116 | + | |
| 117 | +===================================================================== | |
| 118 | +Job Ring (JR) Node | |
| 119 | + | |
| 120 | + Child of the crypto node defines data processing interface to SEC 4 | |
| 121 | + across the peripheral bus for purposes of processing | |
| 122 | + cryptographic descriptors. The specified address | |
| 123 | + range can be made visible to one (or more) cores. | |
| 124 | + The interrupt defined for this node is controlled within | |
| 125 | + the address range of this node. | |
| 126 | + | |
| 127 | + - compatible | |
| 128 | + Usage: required | |
| 129 | + Value type: <string> | |
| 130 | + Definition: Must include "fsl,sec-v4.0-job-ring" | |
| 131 | + | |
| 132 | + - reg | |
| 133 | + Usage: required | |
| 134 | + Value type: <prop-encoded-array> | |
| 135 | + Definition: Specifies a two JR parameters: an offset from | |
| 136 | + the parent physical address and the length the JR registers. | |
| 137 | + | |
| 138 | + - fsl,liodn | |
| 139 | + Usage: optional-but-recommended | |
| 140 | + Value type: <prop-encoded-array> | |
| 141 | + Definition: | |
| 142 | + Specifies the LIODN to be used in conjunction with | |
| 143 | + the ppid-to-liodn table that specifies the PPID to LIODN mapping. | |
| 144 | + Needed if the PAMU is used. Value is a 12 bit value | |
| 145 | + where value is a LIODN ID for this JR. This property is | |
| 146 | + normally set by boot firmware. | |
| 147 | + | |
| 148 | + - interrupts | |
| 149 | + Usage: required | |
| 150 | + Value type: <prop_encoded-array> | |
| 151 | + Definition: Specifies the interrupts generated by this | |
| 152 | + device. The value of the interrupts property | |
| 153 | + consists of one interrupt specifier. The format | |
| 154 | + of the specifier is defined by the binding document | |
| 155 | + describing the node's interrupt parent. | |
| 156 | + | |
| 157 | + - interrupt-parent | |
| 158 | + Usage: (required if interrupt property is defined) | |
| 159 | + Value type: <phandle> | |
| 160 | + Definition: A single <phandle> value that points | |
| 161 | + to the interrupt parent to which the child domain | |
| 162 | + is being mapped. | |
| 163 | + | |
| 164 | +EXAMPLE | |
| 165 | + jr@1000 { | |
| 166 | + compatible = "fsl,sec-v4.0-job-ring"; | |
| 167 | + reg = <0x1000 0x1000>; | |
| 168 | + fsl,liodn = <0x081>; | |
| 169 | + interrupt-parent = <&mpic>; | |
| 170 | + interrupts = <88 2>; | |
| 171 | + }; | |
| 172 | + | |
| 173 | + | |
| 174 | +===================================================================== | |
| 175 | +Run Time Integrity Check (RTIC) Node | |
| 176 | + | |
| 177 | + Child node of the crypto node. Defines a register space that | |
| 178 | + contains up to 5 sets of addresses and their lengths (sizes) that | |
| 179 | + will be checked at run time. After an initial hash result is | |
| 180 | + calculated, these addresses are checked by HW to monitor any | |
| 181 | + change. If any memory is modified, a Security Violation is | |
| 182 | + triggered (see SNVS definition). | |
| 183 | + | |
| 184 | + | |
| 185 | + - compatible | |
| 186 | + Usage: required | |
| 187 | + Value type: <string> | |
| 188 | + Definition: Must include "fsl,sec-v4.0-rtic". | |
| 189 | + | |
| 190 | + - #address-cells | |
| 191 | + Usage: required | |
| 192 | + Value type: <u32> | |
| 193 | + Definition: A standard property. Defines the number of cells | |
| 194 | + for representing physical addresses in child nodes. Must | |
| 195 | + have a value of 1. | |
| 196 | + | |
| 197 | + - #size-cells | |
| 198 | + Usage: required | |
| 199 | + Value type: <u32> | |
| 200 | + Definition: A standard property. Defines the number of cells | |
| 201 | + for representing the size of physical addresses in | |
| 202 | + child nodes. Must have a value of 1. | |
| 203 | + | |
| 204 | + - reg | |
| 205 | + Usage: required | |
| 206 | + Value type: <prop-encoded-array> | |
| 207 | + Definition: A standard property. Specifies a two parameters: | |
| 208 | + an offset from the parent physical address and the length | |
| 209 | + the SEC4 registers. | |
| 210 | + | |
| 211 | + - ranges | |
| 212 | + Usage: required | |
| 213 | + Value type: <prop-encoded-array> | |
| 214 | + Definition: A standard property. Specifies the physical address | |
| 215 | + range of the SEC 4 register space (-SNVS not included). A | |
| 216 | + triplet that includes the child address, parent address, & | |
| 217 | + length. | |
| 218 | + | |
| 219 | +EXAMPLE | |
| 220 | + rtic@6000 { | |
| 221 | + compatible = "fsl,sec-v4.0-rtic"; | |
| 222 | + #address-cells = <1>; | |
| 223 | + #size-cells = <1>; | |
| 224 | + reg = <0x6000 0x100>; | |
| 225 | + ranges = <0x0 0x6100 0xe00>; | |
| 226 | + }; | |
| 227 | + | |
| 228 | +===================================================================== | |
| 229 | +Run Time Integrity Check (RTIC) Memory Node | |
| 230 | + A child node that defines individual RTIC memory regions that are used to | |
| 231 | + perform run-time integrity check of memory areas that should not modified. | |
| 232 | + The node defines a register that contains the memory address & | |
| 233 | + length (combined) and a second register that contains the hash result | |
| 234 | + in big endian format. | |
| 235 | + | |
| 236 | + - compatible | |
| 237 | + Usage: required | |
| 238 | + Value type: <string> | |
| 239 | + Definition: Must include "fsl,sec-v4.0-rtic-memory". | |
| 240 | + | |
| 241 | + - reg | |
| 242 | + Usage: required | |
| 243 | + Value type: <prop-encoded-array> | |
| 244 | + Definition: A standard property. Specifies two parameters: | |
| 245 | + an offset from the parent physical address and the length: | |
| 246 | + | |
| 247 | + 1. The location of the RTIC memory address & length registers. | |
| 248 | + 2. The location RTIC hash result. | |
| 249 | + | |
| 250 | + - fsl,rtic-region | |
| 251 | + Usage: optional-but-recommended | |
| 252 | + Value type: <prop-encoded-array> | |
| 253 | + Definition: | |
| 254 | + Specifies the HW address (36 bit address) for this region | |
| 255 | + followed by the length of the HW partition to be checked; | |
| 256 | + the address is represented as a 64 bit quantity followed | |
| 257 | + by a 32 bit length. | |
| 258 | + | |
| 259 | + - fsl,liodn | |
| 260 | + Usage: optional-but-recommended | |
| 261 | + Value type: <prop-encoded-array> | |
| 262 | + Definition: | |
| 263 | + Specifies the LIODN to be used in conjunction with | |
| 264 | + the ppid-to-liodn table that specifies the PPID to LIODN | |
| 265 | + mapping. Needed if the PAMU is used. Value is a 12 bit value | |
| 266 | + where value is a LIODN ID for this RTIC memory region. This | |
| 267 | + property is normally set by boot firmware. | |
| 268 | + | |
| 269 | +EXAMPLE | |
| 270 | + rtic-a@0 { | |
| 271 | + compatible = "fsl,sec-v4.0-rtic-memory"; | |
| 272 | + reg = <0x00 0x20 0x100 0x80>; | |
| 273 | + fsl,liodn = <0x03c>; | |
| 274 | + fsl,rtic-region = <0x12345678 0x12345678 0x12345678>; | |
| 275 | + }; | |
| 276 | + | |
| 277 | +===================================================================== | |
| 278 | +Secure Non-Volatile Storage (SNVS) Node | |
| 279 | + | |
| 280 | + Node defines address range and the associated | |
| 281 | + interrupt for the SNVS function. This function | |
| 282 | + monitors security state information & reports | |
| 283 | + security violations. | |
| 284 | + | |
| 285 | + - compatible | |
| 286 | + Usage: required | |
| 287 | + Value type: <string> | |
| 288 | + Definition: Must include "fsl,sec-v4.0-mon". | |
| 289 | + | |
| 290 | + - reg | |
| 291 | + Usage: required | |
| 292 | + Value type: <prop-encoded-array> | |
| 293 | + Definition: A standard property. Specifies the physical | |
| 294 | + address and length of the SEC4 configuration | |
| 295 | + registers. | |
| 296 | + | |
| 297 | + - interrupts | |
| 298 | + Usage: required | |
| 299 | + Value type: <prop_encoded-array> | |
| 300 | + Definition: Specifies the interrupts generated by this | |
| 301 | + device. The value of the interrupts property | |
| 302 | + consists of one interrupt specifier. The format | |
| 303 | + of the specifier is defined by the binding document | |
| 304 | + describing the node's interrupt parent. | |
| 305 | + | |
| 306 | + - interrupt-parent | |
| 307 | + Usage: (required if interrupt property is defined) | |
| 308 | + Value type: <phandle> | |
| 309 | + Definition: A single <phandle> value that points | |
| 310 | + to the interrupt parent to which the child domain | |
| 311 | + is being mapped. | |
| 312 | + | |
| 313 | +EXAMPLE | |
| 314 | + sec_mon@314000 { | |
| 315 | + compatible = "fsl,sec-v4.0-mon"; | |
| 316 | + reg = <0x314000 0x1000>; | |
| 317 | + interrupt-parent = <&mpic>; | |
| 318 | + interrupts = <93 2>; | |
| 319 | + }; | |
| 320 | + | |
| 321 | +===================================================================== | |
| 322 | +FULL EXAMPLE | |
| 323 | + | |
| 324 | + crypto: crypto@300000 { | |
| 325 | + compatible = "fsl,sec-v4.0"; | |
| 326 | + #address-cells = <1>; | |
| 327 | + #size-cells = <1>; | |
| 328 | + reg = <0x300000 0x10000>; | |
| 329 | + ranges = <0 0x300000 0x10000>; | |
| 330 | + interrupt-parent = <&mpic>; | |
| 331 | + interrupts = <92 2>; | |
| 332 | + | |
| 333 | + sec_jr0: jr@1000 { | |
| 334 | + compatible = "fsl,sec-v4.0-job-ring"; | |
| 335 | + reg = <0x1000 0x1000>; | |
| 336 | + interrupt-parent = <&mpic>; | |
| 337 | + interrupts = <88 2>; | |
| 338 | + }; | |
| 339 | + | |
| 340 | + sec_jr1: jr@2000 { | |
| 341 | + compatible = "fsl,sec-v4.0-job-ring"; | |
| 342 | + reg = <0x2000 0x1000>; | |
| 343 | + interrupt-parent = <&mpic>; | |
| 344 | + interrupts = <89 2>; | |
| 345 | + }; | |
| 346 | + | |
| 347 | + sec_jr2: jr@3000 { | |
| 348 | + compatible = "fsl,sec-v4.0-job-ring"; | |
| 349 | + reg = <0x3000 0x1000>; | |
| 350 | + interrupt-parent = <&mpic>; | |
| 351 | + interrupts = <90 2>; | |
| 352 | + }; | |
| 353 | + | |
| 354 | + sec_jr3: jr@4000 { | |
| 355 | + compatible = "fsl,sec-v4.0-job-ring"; | |
| 356 | + reg = <0x4000 0x1000>; | |
| 357 | + interrupt-parent = <&mpic>; | |
| 358 | + interrupts = <91 2>; | |
| 359 | + }; | |
| 360 | + | |
| 361 | + rtic@6000 { | |
| 362 | + compatible = "fsl,sec-v4.0-rtic"; | |
| 363 | + #address-cells = <1>; | |
| 364 | + #size-cells = <1>; | |
| 365 | + reg = <0x6000 0x100>; | |
| 366 | + ranges = <0x0 0x6100 0xe00>; | |
| 367 | + | |
| 368 | + rtic_a: rtic-a@0 { | |
| 369 | + compatible = "fsl,sec-v4.0-rtic-memory"; | |
| 370 | + reg = <0x00 0x20 0x100 0x80>; | |
| 371 | + }; | |
| 372 | + | |
| 373 | + rtic_b: rtic-b@20 { | |
| 374 | + compatible = "fsl,sec-v4.0-rtic-memory"; | |
| 375 | + reg = <0x20 0x20 0x200 0x80>; | |
| 376 | + }; | |
| 377 | + | |
| 378 | + rtic_c: rtic-c@40 { | |
| 379 | + compatible = "fsl,sec-v4.0-rtic-memory"; | |
| 380 | + reg = <0x40 0x20 0x300 0x80>; | |
| 381 | + }; | |
| 382 | + | |
| 383 | + rtic_d: rtic-d@60 { | |
| 384 | + compatible = "fsl,sec-v4.0-rtic-memory"; | |
| 385 | + reg = <0x60 0x20 0x500 0x80>; | |
| 386 | + }; | |
| 387 | + }; | |
| 388 | + }; | |
| 389 | + | |
| 390 | + sec_mon: sec_mon@314000 { | |
| 391 | + compatible = "fsl,sec-v4.0-mon"; | |
| 392 | + reg = <0x314000 0x1000>; | |
| 393 | + interrupt-parent = <&mpic>; | |
| 394 | + interrupts = <93 2>; | |
| 395 | + }; | |
| 396 | + | |
| 397 | +===================================================================== | |
| @@ -18,9 +18,9 @@ Optional properties: · 17 unmodified lines | ||
| 18 | 18 | - edid : verbatim EDID data block describing attached display. |
| 19 | 19 | Data from the detailed timing descriptor will be used to |
| 20 | 20 | program the display controller. |
| 21 | −- little-endian: availiable on big endian systems, to | |
| 21 | +- little-endian: available on big endian systems, to | |
| 22 | 22 | set different foreign endian. |
| 23 | −- big-endian: availiable on little endian systems, to | |
| 23 | +- big-endian: available on little endian systems, to | |
| 24 | 24 | set different foreign endian. |
| 25 | 25 | |
| 26 | 26 | Example for MPC5200: |
| @@ -15,7 +15,7 @@ Optional properties: · 14 unmodified lines | ||
| 15 | 15 | - gpios : may specify optional GPIOs connected to the Ready-Not-Busy pins |
| 16 | 16 | (R/B#). For multi-chip devices, "n" GPIO definitions are required |
| 17 | 17 | according to the number of chips. |
| 18 | −- chip-delay : chip dependent delay for transfering data from array to | |
| 18 | +- chip-delay : chip dependent delay for transferring data from array to | |
| 19 | 19 | read registers (tR). Required if property "gpios" is not used |
| 20 | 20 | (R/B# pins not connected). |
| 21 | 21 | |
| @@ -0,0 +1,61 @@ | ||
| 1 | +CAN Device Tree Bindings | |
| 2 | +------------------------ | |
| 3 | +2011 Freescale Semiconductor, Inc. | |
| 4 | + | |
| 5 | +fsl,flexcan-v1.0 nodes | |
| 6 | +----------------------- | |
| 7 | +In addition to the required compatible-, reg- and interrupt-properties, you can | |
| 8 | +also specify which clock source shall be used for the controller. | |
| 9 | + | |
| 10 | +CPI Clock- Can Protocol Interface Clock | |
| 11 | + This CLK_SRC bit of CTRL(control register) selects the clock source to | |
| 12 | + the CAN Protocol Interface(CPI) to be either the peripheral clock | |
| 13 | + (driven by the PLL) or the crystal oscillator clock. The selected clock | |
| 14 | + is the one fed to the prescaler to generate the Serial Clock (Sclock). | |
| 15 | + The PRESDIV field of CTRL(control register) controls a prescaler that | |
| 16 | + generates the Serial Clock (Sclock), whose period defines the | |
| 17 | + time quantum used to compose the CAN waveform. | |
| 18 | + | |
| 19 | +Can Engine Clock Source | |
| 20 | + There are two sources for CAN clock | |
| 21 | + - Platform Clock It represents the bus clock | |
| 22 | + - Oscillator Clock | |
| 23 | + | |
| 24 | + Peripheral Clock (PLL) | |
| 25 | + -------------- | |
| 26 | + | | |
| 27 | + --------- ------------- | |
| 28 | + | |CPI Clock | Prescaler | Sclock | |
| 29 | + | |---------------->| (1.. 256) |------------> | |
| 30 | + --------- ------------- | |
| 31 | + | | | |
| 32 | + -------------- ---------------------CLK_SRC | |
| 33 | + Oscillator Clock | |
| 34 | + | |
| 35 | +- fsl,flexcan-clock-source : CAN Engine Clock Source.This property selects | |
| 36 | + the peripheral clock. PLL clock is fed to the | |
| 37 | + prescaler to generate the Serial Clock (Sclock). | |
| 38 | + Valid values are "oscillator" and "platform" | |
| 39 | + "oscillator": CAN engine clock source is oscillator clock. | |
| 40 | + "platform" The CAN engine clock source is the bus clock | |
| 41 | + (platform clock). | |
| 42 | + | |
| 43 | +- fsl,flexcan-clock-divider : for the reference and system clock, an additional | |
| 44 | + clock divider can be specified. | |
| 45 | +- clock-frequency: frequency required to calculate the bitrate for FlexCAN. | |
| 46 | + | |
| 47 | +Note: | |
| 48 | + - v1.0 of flexcan-v1.0 represent the IP block version for P1010 SOC. | |
| 49 | + - P1010 does not have oscillator as the Clock Source.So the default | |
| 50 | + Clock Source is platform clock. | |
| 51 | +Examples: | |
| 52 | + | |
| 53 | + can0@1c000 { | |
| 54 | + compatible = "fsl,flexcan-v1.0"; | |
| 55 | + reg = <0x1c000 0x1000>; | |
| 56 | + interrupts = <48 0x2>; | |
| 57 | + interrupt-parent = <&mpic>; | |
| 58 | + fsl,flexcan-clock-source = "platform"; | |
| 59 | + fsl,flexcan-clock-divider = <2>; | |
| 60 | + clock-frequency = <fixed by u-boot>; | |
| 61 | + }; | |
| @@ -39,7 +39,7 @@ Optional properties: · 38 unmodified lines | ||
| 39 | 39 | |
| 40 | 40 | - nxp,no-comparator-bypass : Allows to disable the CAN input comperator. |
| 41 | 41 | |
| 42 | −For futher information, please have a look to the SJA1000 data sheet. | |
| 42 | +For further information, please have a look to the SJA1000 data sheet. | |
| 43 | 43 | |
| 44 | 44 | Examples: |
| 45 | 45 | |
| @@ -74,3 +74,57 @@ Example: · 73 unmodified lines | ||
| 74 | 74 | interrupt-parent = <&mpic>; |
| 75 | 75 | phy-handle = <&phy0> |
| 76 | 76 | }; |
| 77 | + | |
| 78 | +* Gianfar PTP clock nodes | |
| 79 | + | |
| 80 | +General Properties: | |
| 81 | + | |
| 82 | + - compatible Should be "fsl,etsec-ptp" | |
| 83 | + - reg Offset and length of the register set for the device | |
| 84 | + - interrupts There should be at least two interrupts. Some devices | |
| 85 | + have as many as four PTP related interrupts. | |
| 86 | + | |
| 87 | +Clock Properties: | |
| 88 | + | |
| 89 | + - fsl,tclk-period Timer reference clock period in nanoseconds. | |
| 90 | + - fsl,tmr-prsc Prescaler, divides the output clock. | |
| 91 | + - fsl,tmr-add Frequency compensation value. | |
| 92 | + - fsl,tmr-fiper1 Fixed interval period pulse generator. | |
| 93 | + - fsl,tmr-fiper2 Fixed interval period pulse generator. | |
| 94 | + - fsl,max-adj Maximum frequency adjustment in parts per billion. | |
| 95 | + | |
| 96 | + These properties set the operational parameters for the PTP | |
| 97 | + clock. You must choose these carefully for the clock to work right. | |
| 98 | + Here is how to figure good values: | |
| 99 | + | |
| 100 | + TimerOsc = system clock MHz | |
| 101 | + tclk_period = desired clock period nanoseconds | |
| 102 | + NominalFreq = 1000 / tclk_period MHz | |
| 103 | + FreqDivRatio = TimerOsc / NominalFreq (must be greater that 1.0) | |
| 104 | + tmr_add = ceil(2^32 / FreqDivRatio) | |
| 105 | + OutputClock = NominalFreq / tmr_prsc MHz | |
| 106 | + PulseWidth = 1 / OutputClock microseconds | |
| 107 | + FiperFreq1 = desired frequency in Hz | |
| 108 | + FiperDiv1 = 1000000 * OutputClock / FiperFreq1 | |
| 109 | + tmr_fiper1 = tmr_prsc * tclk_period * FiperDiv1 - tclk_period | |
| 110 | + max_adj = 1000000000 * (FreqDivRatio - 1.0) - 1 | |
| 111 | + | |
| 112 | + The calculation for tmr_fiper2 is the same as for tmr_fiper1. The | |
| 113 | + driver expects that tmr_fiper1 will be correctly set to produce a 1 | |
| 114 | + Pulse Per Second (PPS) signal, since this will be offered to the PPS | |
| 115 | + subsystem to synchronize the Linux clock. | |
| 116 | + | |
| 117 | +Example: | |
| 118 | + | |
| 119 | + ptp_clock@24E00 { | |
| 120 | + compatible = "fsl,etsec-ptp"; | |
| 121 | + reg = <0x24E00 0xB0>; | |
| 122 | + interrupts = <12 0x8 13 0x8>; | |
| 123 | + interrupt-parent = < &ipic >; | |
| 124 | + fsl,tclk-period = <10>; | |
| 125 | + fsl,tmr-prsc = <100>; | |
| 126 | + fsl,tmr-add = <0x999999A4>; | |
| 127 | + fsl,tmr-fiper1 = <0x3B9AC9F6>; | |
| 128 | + fsl,tmr-fiper2 = <0x00018696>; | |
| 129 | + fsl,max-adj = <659999998>; | |
| 130 | + }; | |
| @@ -0,0 +1,76 @@ | ||
| 1 | +Integrated Flash Controller | |
| 2 | + | |
| 3 | +Properties: | |
| 4 | +- name : Should be ifc | |
| 5 | +- compatible : should contain "fsl,ifc". The version of the integrated | |
| 6 | + flash controller can be found in the IFC_REV register at | |
| 7 | + offset zero. | |
| 8 | + | |
| 9 | +- #address-cells : Should be either two or three. The first cell is the | |
| 10 | + chipselect number, and the remaining cells are the | |
| 11 | + offset into the chipselect. | |
| 12 | +- #size-cells : Either one or two, depending on how large each chipselect | |
| 13 | + can be. | |
| 14 | +- reg : Offset and length of the register set for the device | |
| 15 | +- interrupts : IFC has two interrupts. The first one is the "common" | |
| 16 | + interrupt(CM_EVTER_STAT), and second is the NAND interrupt | |
| 17 | + (NAND_EVTER_STAT). | |
| 18 | + | |
| 19 | +- ranges : Each range corresponds to a single chipselect, and covers | |
| 20 | + the entire access window as configured. | |
| 21 | + | |
| 22 | +Child device nodes describe the devices connected to IFC such as NOR (e.g. | |
| 23 | +cfi-flash) and NAND (fsl,ifc-nand). There might be board specific devices | |
| 24 | +like FPGAs, CPLDs, etc. | |
| 25 | + | |
| 26 | +Example: | |
| 27 | + | |
| 28 | + ifc@ffe1e000 { | |
| 29 | + compatible = "fsl,ifc", "simple-bus"; | |
| 30 | + #address-cells = <2>; | |
| 31 | + #size-cells = <1>; | |
| 32 | + reg = <0x0 0xffe1e000 0 0x2000>; | |
| 33 | + interrupts = <16 2 19 2>; | |
| 34 | + | |
| 35 | + /* NOR, NAND Flashes and CPLD on board */ | |
| 36 | + ranges = <0x0 0x0 0x0 0xee000000 0x02000000 | |
| 37 | + 0x1 0x0 0x0 0xffa00000 0x00010000 | |
| 38 | + 0x3 0x0 0x0 0xffb00000 0x00020000>; | |
| 39 | + | |
| 40 | + flash@0,0 { | |
| 41 | + #address-cells = <1>; | |
| 42 | + #size-cells = <1>; | |
| 43 | + compatible = "cfi-flash"; | |
| 44 | + reg = <0x0 0x0 0x2000000>; | |
| 45 | + bank-width = <2>; | |
| 46 | + device-width = <1>; | |
| 47 | + | |
| 48 | + partition@0 { | |
| 49 | + /* 32MB for user data */ | |
| 50 | + reg = <0x0 0x02000000>; | |
| 51 | + label = "NOR Data"; | |
| 52 | + }; | |
| 53 | + }; | |
| 54 | + | |
| 55 | + flash@1,0 { | |
| 56 | + #address-cells = <1>; | |
| 57 | + #size-cells = <1>; | |
| 58 | + compatible = "fsl,ifc-nand"; | |
| 59 | + reg = <0x1 0x0 0x10000>; | |
| 60 | + | |
| 61 | + partition@0 { | |
| 62 | + /* This location must not be altered */ | |
| 63 | + /* 1MB for u-boot Bootloader Image */ | |
| 64 | + reg = <0x0 0x00100000>; | |
| 65 | + label = "NAND U-Boot Image"; | |
| 66 | + read-only; | |
| 67 | + }; | |
| 68 | + }; | |
| 69 | + | |
| 70 | + cpld@3,0 { | |
| 71 | + #address-cells = <1>; | |
| 72 | + #size-cells = <1>; | |
| 73 | + compatible = "fsl,p1010rdb-cpld"; | |
| 74 | + reg = <0x3 0x0 0x000001f>; | |
| 75 | + }; | |
| 76 | + }; | |
| @@ -0,0 +1,38 @@ | ||
| 1 | +* Freescale MPIC timers | |
| 2 | + | |
| 3 | +Required properties: | |
| 4 | +- compatible: "fsl,mpic-global-timer" | |
| 5 | + | |
| 6 | +- reg : Contains two regions. The first is the main timer register bank | |
| 7 | + (GTCCRxx, GTBCRxx, GTVPRxx, GTDRxx). The second is the timer control | |
| 8 | + register (TCRx) for the group. | |
| 9 | + | |
| 10 | +- fsl,available-ranges: use <start count> style section to define which | |
| 11 | + timer interrupts can be used. This property is optional; without this, | |
| 12 | + all timers within the group can be used. | |
| 13 | + | |
| 14 | +- interrupts: one interrupt per timer in the group, in order, starting | |
| 15 | + with timer zero. If timer-available-ranges is present, only the | |
| 16 | + interrupts that correspond to available timers shall be present. | |
| 17 | + | |
| 18 | +Example: | |
| 19 | + /* Note that this requires #interrupt-cells to be 4 */ | |
| 20 | + timer0: timer@41100 { | |
| 21 | + compatible = "fsl,mpic-global-timer"; | |
| 22 | + reg = <0x41100 0x100 0x41300 4>; | |
| 23 | + | |
| 24 | + /* Another AMP partition is using timers 0 and 1 */ | |
| 25 | + fsl,available-ranges = <2 2>; | |
| 26 | + | |
| 27 | + interrupts = <2 0 3 0 | |
| 28 | + 3 0 3 0>; | |
| 29 | + }; | |
| 30 | + | |
| 31 | + timer1: timer@42100 { | |
| 32 | + compatible = "fsl,mpic-global-timer"; | |
| 33 | + reg = <0x42100 0x100 0x42300 4>; | |
| 34 | + interrupts = <4 0 3 0 | |
| 35 | + 5 0 3 0 | |
| 36 | + 6 0 3 0 | |
| 37 | + 7 0 3 0>; | |
| 38 | + }; | |
| @@ -190,7 +190,7 @@ EXAMPLE 4 · 189 unmodified lines | ||
| 190 | 190 | */ |
| 191 | 191 | timer0: timer@41100 { |
| 192 | 192 | compatible = "fsl,mpic-global-timer"; |
| 193 | − reg = <0x41100 0x100>; | |
| 193 | + reg = <0x41100 0x100 0x41300 4>; | |
| 194 | 194 | interrupts = <0 0 3 0 |
| 195 | 195 | 1 0 3 0 |
| 196 | 196 | 2 0 3 0 |
| @@ -199,7 +199,7 @@ EXAMPLE 4 · 2 unmodified lines | ||
| 199 | 199 | |
| 200 | 200 | EXAMPLE 5 |
| 201 | 201 | /* |
| 202 | − * Definition of an error interrupt (interupt type 1). | |
| 202 | + * Definition of an error interrupt (interrupt type 1). | |
| 203 | 203 | * SoC interrupt number is 16 and the specific error |
| 204 | 204 | * interrupt bit in the error interrupt summary register |
| 205 | 205 | * is 23. |
| @@ -127,7 +127,7 @@ Nintendo Wii device tree · 126 unmodified lines | ||
| 127 | 127 | - reg : should contain the SDHCI registers location and length |
| 128 | 128 | - interrupts : should contain the SDHCI interrupt |
| 129 | 129 | |
| 130 | −1.j) The Inter-Processsor Communication (IPC) node | |
| 130 | +1.j) The Inter-Processor Communication (IPC) node | |
| 131 | 131 | |
| 132 | 132 | Represent the Inter-Processor Communication interface. This interface |
| 133 | 133 | enables communications between the Broadway and the Starlet processors. |
| @@ -12,8 +12,9 @@ Table of Contents · 11 unmodified lines | ||
| 12 | 12 | ================= |
| 13 | 13 | |
| 14 | 14 | I - Introduction |
| 15 | − 1) Entry point for arch/powerpc | |
| 16 | − 2) Entry point for arch/x86 | |
| 15 | + 1) Entry point for arch/arm | |
| 16 | + 2) Entry point for arch/powerpc | |
| 17 | + 3) Entry point for arch/x86 | |
| 17 | 18 | |
| 18 | 19 | II - The DT block format |
| 19 | 20 | 1) Header |
| @@ -138,7 +139,7 @@ and properties to be present. This will be described in detail in · 118 unmodified lines | ||
| 138 | 139 | section III, but, for example, the kernel does not require you to |
| 139 | 140 | create a node for every PCI device in the system. It is a requirement |
| 140 | 141 | to have a node for PCI host bridges in order to provide interrupt |
| 141 | −routing informations and memory/IO ranges, among others. It is also | |
| 142 | +routing information and memory/IO ranges, among others. It is also | |
| 142 | 143 | recommended to define nodes for on chip devices and other buses that |
| 143 | 144 | don't specifically fit in an existing OF specification. This creates a |
| 144 | 145 | great flexibility in the way the kernel can then probe those and match |
| @@ -148,7 +149,46 @@ upgrades without significantly impacting the kernel code or cluttering · 3 unmodified lines | ||
| 148 | 149 | it with special cases. |
| 149 | 150 | |
| 150 | 151 | |
| 151 | −1) Entry point for arch/powerpc | |
| 152 | +1) Entry point for arch/arm | |
| 153 | +--------------------------- | |
| 154 | + | |
| 155 | + There is one single entry point to the kernel, at the start | |
| 156 | + of the kernel image. That entry point supports two calling | |
| 157 | + conventions. A summary of the interface is described here. A full | |
| 158 | + description of the boot requirements is documented in | |
| 159 | + Documentation/arm/Booting | |
| 160 | + | |
| 161 | + a) ATAGS interface. Minimal information is passed from firmware | |
| 162 | + to the kernel with a tagged list of predefined parameters. | |
| 163 | + | |
| 164 | + r0 : 0 | |
| 165 | + | |
| 166 | + r1 : Machine type number | |
| 167 | + | |
| 168 | + r2 : Physical address of tagged list in system RAM | |
| 169 | + | |
| 170 | + b) Entry with a flattened device-tree block. Firmware loads the | |
| 171 | + physical address of the flattened device tree block (dtb) into r2, | |
| 172 | + r1 is not used, but it is considered good practise to use a valid | |
| 173 | + machine number as described in Documentation/arm/Booting. | |
| 174 | + | |
| 175 | + r0 : 0 | |
| 176 | + | |
| 177 | + r1 : Valid machine type number. When using a device tree, | |
| 178 | + a single machine type number will often be assigned to | |
| 179 | + represent a class or family of SoCs. | |
| 180 | + | |
| 181 | + r2 : physical pointer to the device-tree block | |
| 182 | + (defined in chapter II) in RAM. Device tree can be located | |
| 183 | + anywhere in system RAM, but it should be aligned on a 64 bit | |
| 184 | + boundary. | |
| 185 | + | |
| 186 | + The kernel will differentiate between ATAGS and device tree booting by | |
| 187 | + reading the memory pointed to by r2 and looking for either the flattened | |
| 188 | + device tree block magic value (0xd00dfeed) or the ATAG_CORE value at | |
| 189 | + offset 0x4 from r2 (0x54410001). | |
| 190 | + | |
| 191 | +2) Entry point for arch/powerpc | |
| 152 | 192 | ------------------------------- |
| 153 | 193 | |
| 154 | 194 | There is one single entry point to the kernel, at the start |
| @@ -226,7 +266,7 @@ it with special cases. · 71 unmodified lines | ||
| 226 | 266 | cannot support both configurations with Book E and configurations |
| 227 | 267 | with classic Powerpc architectures. |
| 228 | 268 | |
| 229 | −2) Entry point for arch/x86 | |
| 269 | +3) Entry point for arch/x86 | |
| 230 | 270 | ------------------------------- |
| 231 | 271 | |
| 232 | 272 | There is one single 32bit entry point to the kernel at code32_start, |
| @@ -385,7 +425,7 @@ struct boot_param_header { · 152 unmodified lines | ||
| 385 | 425 | among others, by kexec. If you are on an SMP system, this value |
| 386 | 426 | should match the content of the "reg" property of the CPU node in |
| 387 | 427 | the device-tree corresponding to the CPU calling the kernel entry |
| 388 | − point (see further chapters for more informations on the required | |
| 428 | + point (see further chapters for more information on the required | |
| 389 | 429 | device-tree contents) |
| 390 | 430 | |
| 391 | 431 | - size_dt_strings |
| @@ -553,7 +593,7 @@ looks like in practice. · 161 unmodified lines | ||
| 553 | 593 | |
| 554 | 594 | This tree is almost a minimal tree. It pretty much contains the |
| 555 | 595 | minimal set of required nodes and properties to boot a linux kernel; |
| 556 | −that is, some basic model informations at the root, the CPUs, and the | |
| 596 | +that is, some basic model information at the root, the CPUs, and the | |
| 557 | 597 | physical memory layout. It also includes misc information passed |
| 558 | 598 | through /chosen, like in this example, the platform type (mandatory) |
| 559 | 599 | and the kernel command line arguments (optional). |
| @@ -1 +1,96 @@ | ||
| 1 | −See Documentation/crypto/async-tx-api.txt | |
| 1 | + DMA Engine API Guide | |
| 2 | + ==================== | |
| 3 | + | |
| 4 | + Vinod Koul <vinod dot koul at intel.com> | |
| 5 | + | |
| 6 | +NOTE: For DMA Engine usage in async_tx please see: | |
| 7 | + Documentation/crypto/async-tx-api.txt | |
| 8 | + | |
| 9 | + | |
| 10 | +Below is a guide to device driver writers on how to use the Slave-DMA API of the | |
| 11 | +DMA Engine. This is applicable only for slave DMA usage only. | |
| 12 | + | |
| 13 | +The slave DMA usage consists of following steps | |
| 14 | +1. Allocate a DMA slave channel | |
| 15 | +2. Set slave and controller specific parameters | |
| 16 | +3. Get a descriptor for transaction | |
| 17 | +4. Submit the transaction and wait for callback notification | |
| 18 | + | |
| 19 | +1. Allocate a DMA slave channel | |
| 20 | +Channel allocation is slightly different in the slave DMA context, client | |
| 21 | +drivers typically need a channel from a particular DMA controller only and even | |
| 22 | +in some cases a specific channel is desired. To request a channel | |
| 23 | +dma_request_channel() API is used. | |
| 24 | + | |
| 25 | +Interface: | |
| 26 | +struct dma_chan *dma_request_channel(dma_cap_mask_t mask, | |
| 27 | + dma_filter_fn filter_fn, | |
| 28 | + void *filter_param); | |
| 29 | +where dma_filter_fn is defined as: | |
| 30 | +typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param); | |
| 31 | + | |
| 32 | +When the optional 'filter_fn' parameter is set to NULL dma_request_channel | |
| 33 | +simply returns the first channel that satisfies the capability mask. Otherwise, | |
| 34 | +when the mask parameter is insufficient for specifying the necessary channel, | |
| 35 | +the filter_fn routine can be used to disposition the available channels in the | |
| 36 | +system. The filter_fn routine is called once for each free channel in the | |
| 37 | +system. Upon seeing a suitable channel filter_fn returns DMA_ACK which flags | |
| 38 | +that channel to be the return value from dma_request_channel. A channel | |
| 39 | +allocated via this interface is exclusive to the caller, until | |
| 40 | +dma_release_channel() is called. | |
| 41 | + | |
| 42 | +2. Set slave and controller specific parameters | |
| 43 | +Next step is always to pass some specific information to the DMA driver. Most of | |
| 44 | +the generic information which a slave DMA can use is in struct dma_slave_config. | |
| 45 | +It allows the clients to specify DMA direction, DMA addresses, bus widths, DMA | |
| 46 | +burst lengths etc. If some DMA controllers have more parameters to be sent then | |
| 47 | +they should try to embed struct dma_slave_config in their controller specific | |
| 48 | +structure. That gives flexibility to client to pass more parameters, if | |
| 49 | +required. | |
| 50 | + | |
| 51 | +Interface: | |
| 52 | +int dmaengine_slave_config(struct dma_chan *chan, | |
| 53 | + struct dma_slave_config *config) | |
| 54 | + | |
| 55 | +3. Get a descriptor for transaction | |
| 56 | +For slave usage the various modes of slave transfers supported by the | |
| 57 | +DMA-engine are: | |
| 58 | +slave_sg - DMA a list of scatter gather buffers from/to a peripheral | |
| 59 | +dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the | |
| 60 | + operation is explicitly stopped. | |
| 61 | +The non NULL return of this transfer API represents a "descriptor" for the given | |
| 62 | +transaction. | |
| 63 | + | |
| 64 | +Interface: | |
| 65 | +struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_sg)( | |
| 66 | + struct dma_chan *chan, | |
| 67 | + struct scatterlist *dst_sg, unsigned int dst_nents, | |
| 68 | + struct scatterlist *src_sg, unsigned int src_nents, | |
| 69 | + unsigned long flags); | |
| 70 | +struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)( | |
| 71 | + struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, | |
| 72 | + size_t period_len, enum dma_data_direction direction); | |
| 73 | + | |
| 74 | +4. Submit the transaction and wait for callback notification | |
| 75 | +To schedule the transaction to be scheduled by dma device, the "descriptor" | |
| 76 | +returned in above (3) needs to be submitted. | |
| 77 | +To tell the dma driver that a transaction is ready to be serviced, the | |
| 78 | +descriptor->submit() callback needs to be invoked. This chains the descriptor to | |
| 79 | +the pending queue. | |
| 80 | +The transactions in the pending queue can be activated by calling the | |
| 81 | +issue_pending API. If channel is idle then the first transaction in queue is | |
| 82 | +started and subsequent ones queued up. | |
| 83 | +On completion of the DMA operation the next in queue is submitted and a tasklet | |
| 84 | +triggered. The tasklet would then call the client driver completion callback | |
| 85 | +routine for notification, if set. | |
| 86 | +Interface: | |
| 87 | +void dma_async_issue_pending(struct dma_chan *chan); | |
| 88 | + | |
| 89 | +============================================================================== | |
| 90 | + | |
| 91 | +Additional usage notes for dma driver writers | |
| 92 | +1/ Although DMA engine specifies that completion callback routines cannot submit | |
| 93 | +any new operations, but typically for slave DMA subsequent transaction may not | |
| 94 | +be available for submit prior to callback routine being called. This requirement | |
| 95 | +is not a requirement for DMA-slave devices. But they should take care to drop | |
| 96 | +the spin-lock they might be holding before calling the callback routine | |
| @@ -1,6 +1,8 @@ | ||
| 1 | 1 | *.a |
| 2 | 2 | *.aux |
| 3 | 3 | *.bin |
| 4 | +*.bz2 | |
| 5 | +*.cis | |
| 4 | 6 | *.cpio |
| 5 | 7 | *.csp |
| 6 | 8 | *.dsp |
| @@ -8,6 +10,8 @@ · 1 unmodified line | ||
| 8 | 10 | *.elf |
| 9 | 11 | *.eps |
| 10 | 12 | *.fw |
| 13 | +*.gcno | |
| 14 | +*.gcov | |
| 11 | 15 | *.gen.S |
| 12 | 16 | *.gif |
| 13 | 17 | *.grep |
| @@ -19,14 +23,20 @@ · 5 unmodified lines | ||
| 19 | 23 | *.ko |
| 20 | 24 | *.log |
| 21 | 25 | *.lst |
| 26 | +*.lzma | |
| 27 | +*.lzo | |
| 28 | +*.mo | |
| 22 | 29 | *.moc |
| 23 | 30 | *.mod.c |
| 24 | 31 | *.o |
| 25 | 32 | *.o.* |
| 33 | +*.order | |
| 26 | 34 | *.orig |
| 27 | 35 | *.out |
| 36 | +*.patch | |
| 28 | 37 | |
| 29 | 38 | *.png |
| 39 | +*.pot | |
| 30 | 40 | *.ps |
| 31 | 41 | *.rej |
| 32 | 42 | *.s |
| @@ -39,16 +49,22 @@ · 6 unmodified lines | ||
| 39 | 49 | *.tex |
| 40 | 50 | *.ver |
| 41 | 51 | *.xml |
| 52 | +*.xz | |
| 42 | 53 | *_MODULES |
| 43 | 54 | *_vga16.c |
| 44 | 55 | *~ |
| 56 | +\#*# | |
| 45 | 57 | *.9 |
| 46 | −*.9.gz | |
| 47 | 58 | .* |
| 59 | +.*.d | |
| 48 | 60 | .mm |
| 49 | 61 | 53c700_d.h |
| 50 | 62 | CVS |
| 51 | 63 | ChangeSet |
| 64 | +GPATH | |
| 65 | +GRTAGS | |
| 66 | +GSYMS | |
| 67 | +GTAGS | |
| 52 | 68 | Image |
| 53 | 69 | Kerntypes |
| 54 | 70 | Module.markers |
| @@ -57,15 +73,14 @@ PENDING · 2 unmodified lines | ||
| 57 | 73 | SCCS |
| 58 | 74 | System.map* |
| 59 | 75 | TAGS |
| 76 | +aconf | |
| 77 | +af_names.h | |
| 60 | 78 | aic7*reg.h* |
| 61 | 79 | aic7*reg_print.c* |
| 62 | 80 | aic7*seq.h* |
| 63 | 81 | aicasm |
| 64 | 82 | aicdb.h* |
| 65 | −altivec1.c | |
| 66 | −altivec2.c | |
| 67 | −altivec4.c | |
| 68 | −altivec8.c | |
| 83 | +altivec*.c | |
| 69 | 84 | asm-offsets.h |
| 70 | 85 | asm_offsets.h |
| 71 | 86 | autoconf.h* |
| @@ -80,6 +95,7 @@ btfixupprep · 8 unmodified lines | ||
| 80 | 95 | build |
| 81 | 96 | bvmlinux |
| 82 | 97 | bzImage* |
| 98 | +capability_names.h | |
| 83 | 99 | capflags.c |
| 84 | 100 | classlist.h* |
| 85 | 101 | comp*.log |
| @@ -88,7 +104,8 @@ conf · 2 unmodified lines | ||
| 88 | 104 | config |
| 89 | 105 | config-* |
| 90 | 106 | config_data.h* |
| 91 | −config_data.gz* | |
| 107 | +config.mak | |
| 108 | +config.mak.autogen | |
| 92 | 109 | conmakehash |
| 93 | 110 | consolemap_deftbl.c* |
| 94 | 111 | cpustr.h |
| @@ -96,7 +113,9 @@ crc32table.h* · 1 unmodified line | ||
| 96 | 113 | cscope.* |
| 97 | 114 | defkeymap.c |
| 98 | 115 | devlist.h* |
| 116 | +dnotify_test | |
| 99 | 117 | docproc |
| 118 | +dslm | |
| 100 | 119 | elf2ecoff |
| 101 | 120 | elfconfig.h* |
| 102 | 121 | evergreen_reg_safe.h |
| @@ -105,6 +124,7 @@ flask.h · 2 unmodified lines | ||
| 105 | 124 | fore200e_mkfirm |
| 106 | 125 | fore200e_pca_fw.c* |
| 107 | 126 | gconf |
| 127 | +gconf.glade.h | |
| 108 | 128 | gen-devlist |
| 109 | 129 | gen_crc32table |
| 110 | 130 | gen_init_cpio |
| @@ -112,11 +132,12 @@ generated · 1 unmodified line | ||
| 112 | 132 | genheaders |
| 113 | 133 | genksyms |
| 114 | 134 | *_gray256.c |
| 135 | +hpet_example | |
| 136 | +hugepage-mmap | |
| 137 | +hugepage-shm | |
| 115 | 138 | ihex2fw |
| 116 | 139 | ikconfig.h* |
| 117 | 140 | inat-tables.c |
| 118 | −initramfs_data.cpio | |
| 119 | −initramfs_data.cpio.gz | |
| 120 | 141 | initramfs_list |
| 121 | 142 | int16.c |
| 122 | 143 | int1.c |
| @@ -133,15 +154,19 @@ kxgettext · 10 unmodified lines | ||
| 133 | 154 | lkc_defs.h |
| 134 | 155 | lex.c |
| 135 | 156 | lex.*.c |
| 157 | +linux | |
| 136 | 158 | logo_*.c |
| 137 | 159 | logo_*_clut224.c |
| 138 | 160 | logo_*_mono.c |
| 139 | 161 | lxdialog |
| 162 | +mach | |
| 140 | 163 | mach-types |
| 141 | 164 | mach-types.h |
| 142 | 165 | machtypes.h |
| 143 | 166 | map |
| 167 | +map_hugetlb | |
| 144 | 168 | maui_boot.h |
| 169 | +media | |
| 145 | 170 | mconf |
| 146 | 171 | miboot* |
| 147 | 172 | mk_elfconfig |
| @@ -150,23 +175,29 @@ mkbugboot · 2 unmodified lines | ||
| 150 | 175 | mkcpustr |
| 151 | 176 | mkdep |
| 152 | 177 | mkprep |
| 178 | +mkregtable | |
| 153 | 179 | mktables |
| 154 | 180 | mktree |
| 155 | 181 | modpost |
| 156 | 182 | modules.builtin |
| 157 | 183 | modules.order |
| 158 | 184 | modversions.h* |
| 185 | +nconf | |
| 159 | 186 | ncscope.* |
| 160 | 187 | offset.h |
| 161 | 188 | offsets.h |
| 162 | 189 | oui.c* |
| 190 | +page-types | |
| 163 | 191 | parse.c |
| 164 | 192 | parse.h |
| 165 | 193 | patches* |
| 166 | 194 | pca200e.bin |
| 167 | 195 | pca200e_ecd.bin2 |
| 168 | −piggy.gz | |
| 196 | +perf.data | |
| 197 | +perf.data.old | |
| 198 | +perf-archive | |
| 169 | 199 | piggyback |
| 200 | +piggy.gzip | |
| 170 | 201 | piggy.S |
| 171 | 202 | pnmtologo |
| 172 | 203 | ppc_defs.h* |
| @@ -177,10 +208,9 @@ r200_reg_safe.h · 4 unmodified lines | ||
| 177 | 208 | r300_reg_safe.h |
| 178 | 209 | r420_reg_safe.h |
| 179 | 210 | r600_reg_safe.h |
| 180 | −raid6altivec*.c | |
| 181 | −raid6int*.c | |
| 182 | −raid6tables.c | |
| 211 | +recordmcount | |
| 183 | 212 | relocs |
| 213 | +rlim_names.h | |
| 184 | 214 | rn50_reg_safe.h |
| 185 | 215 | rs600_reg_safe.h |
| 186 | 216 | rv515_reg_safe.h |
| @@ -194,6 +224,7 @@ split-include · 7 unmodified lines | ||
| 194 | 224 | syscalltab.h |
| 195 | 225 | tables.c |
| 196 | 226 | tags |
| 227 | +test_get_len | |
| 197 | 228 | tftpboot.img |
| 198 | 229 | timeconst.h |
| 199 | 230 | times.h* |
| @@ -210,10 +241,13 @@ vdso32.so.dbg · 10 unmodified lines | ||
| 210 | 241 | vdso64.lds |
| 211 | 242 | vdso64.so.dbg |
| 212 | 243 | version.h* |
| 244 | +vmImage | |
| 213 | 245 | vmlinux |
| 214 | 246 | vmlinux-* |
| 215 | 247 | vmlinux.aout |
| 248 | +vmlinux.bin.all | |
| 216 | 249 | vmlinux.lds |
| 250 | +vmlinuz | |
| 217 | 251 | voffset.h |
| 218 | 252 | vsyscall.lds |
| 219 | 253 | vsyscall_32.lds |
| @@ -3,24 +3,7 @@ Bus Types · 2 unmodified lines | ||
| 3 | 3 | |
| 4 | 4 | Definition |
| 5 | 5 | ~~~~~~~~~~ |
| 6 | − | |
| 7 | −struct bus_type { | |
| 8 | − char * name; | |
| 9 | − | |
| 10 | − struct subsystem subsys; | |
| 11 | − struct kset drivers; | |
| 12 | − struct kset devices; | |
| 13 | − | |
| 14 | − struct bus_attribute * bus_attrs; | |
| 15 | − struct device_attribute * dev_attrs; | |
| 16 | − struct driver_attribute * drv_attrs; | |
| 17 | − | |
| 18 | − int (*match)(struct device * dev, struct device_driver * drv); | |
| 19 | − int (*hotplug) (struct device *dev, char **envp, | |
| 20 | − int num_envp, char *buffer, int buffer_size); | |
| 21 | − int (*suspend)(struct device * dev, pm_message_t state); | |
| 22 | − int (*resume)(struct device * dev); | |
| 23 | −}; | |
| 6 | +See the kerneldoc for the struct bus_type. | |
| 24 | 7 | |
| 25 | 8 | int bus_register(struct bus_type * bus); |
| 26 | 9 | |
| @@ -27,22 +27,7 @@ The device class structure looks like: · 26 unmodified lines | ||
| 27 | 27 | typedef int (*devclass_add)(struct device *); |
| 28 | 28 | typedef void (*devclass_remove)(struct device *); |
| 29 | 29 | |
| 30 | −struct device_class { | |
| 31 | − char * name; | |
| 32 | − rwlock_t lock; | |
| 33 | − u32 devnum; | |
| 34 | − struct list_head node; | |
| 35 | − | |
| 36 | − struct list_head drivers; | |
| 37 | − struct list_head intf_list; | |
| 38 | − | |
| 39 | − struct driver_dir_entry dir; | |
| 40 | − struct driver_dir_entry device_dir; | |
| 41 | − struct driver_dir_entry driver_dir; | |
| 42 | − | |
| 43 | − devclass_add add_device; | |
| 44 | − devclass_remove remove_device; | |
| 45 | −}; | |
| 30 | +See the kerneldoc for the struct class. | |
| 46 | 31 | |
| 47 | 32 | A typical device class definition would look like: |
| 48 | 33 | |
| @@ -2,96 +2,7 @@ · 1 unmodified line | ||
| 2 | 2 | The Basic Device Structure |
| 3 | 3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 4 | 4 | |
| 5 | −struct device { | |
| 6 | − struct list_head g_list; | |
| 7 | − struct list_head node; | |
| 8 | − struct list_head bus_list; | |
| 9 | − struct list_head driver_list; | |
| 10 | − struct list_head intf_list; | |
| 11 | − struct list_head children; | |
| 12 | − struct device * parent; | |
| 13 | − | |
| 14 | − char name[DEVICE_NAME_SIZE]; | |
| 15 | − char bus_id[BUS_ID_SIZE]; | |
| 16 | − | |
| 17 | − spinlock_t lock; | |
| 18 | − atomic_t refcount; | |
| 19 | − | |
| 20 | − struct bus_type * bus; | |
| 21 | − struct driver_dir_entry dir; | |
| 22 | − | |
| 23 | − u32 class_num; | |
| 24 | − | |
| 25 | − struct device_driver *driver; | |
| 26 | − void *driver_data; | |
| 27 | − void *platform_data; | |
| 28 | − | |
| 29 | − u32 current_state; | |
| 30 | − unsigned char *saved_state; | |
| 31 | − | |
| 32 | − void (*release)(struct device * dev); | |
| 33 | −}; | |
| 34 | − | |
| 35 | −Fields | |
| 36 | −~~~~~~ | |
| 37 | −g_list: Node in the global device list. | |
| 38 | − | |
| 39 | −node: Node in device's parent's children list. | |
| 40 | − | |
| 41 | −bus_list: Node in device's bus's devices list. | |
| 42 | − | |
| 43 | −driver_list: Node in device's driver's devices list. | |
| 44 | − | |
| 45 | −intf_list: List of intf_data. There is one structure allocated for | |
| 46 | − each interface that the device supports. | |
| 47 | − | |
| 48 | −children: List of child devices. | |
| 49 | − | |
| 50 | −parent: *** FIXME *** | |
| 51 | − | |
| 52 | −name: ASCII description of device. | |
| 53 | − Example: " 3Com Corporation 3c905 100BaseTX [Boomerang]" | |
| 54 | − | |
| 55 | −bus_id: ASCII representation of device's bus position. This | |
| 56 | − field should be a name unique across all devices on the | |
| 57 | − bus type the device belongs to. | |
| 58 | − | |
| 59 | − Example: PCI bus_ids are in the form of | |
| 60 | − <bus number>:<slot number>.<function number> | |
| 61 | − This name is unique across all PCI devices in the system. | |
| 62 | − | |
| 63 | −lock: Spinlock for the device. | |
| 64 | − | |
| 65 | −refcount: Reference count on the device. | |
| 66 | − | |
| 67 | −bus: Pointer to struct bus_type that device belongs to. | |
| 68 | − | |
| 69 | −dir: Device's sysfs directory. | |
| 70 | − | |
| 71 | −class_num: Class-enumerated value of the device. | |
| 72 | − | |
| 73 | −driver: Pointer to struct device_driver that controls the device. | |
| 74 | − | |
| 75 | −driver_data: Driver-specific data. | |
| 76 | − | |
| 77 | −platform_data: Platform data specific to the device. | |
| 78 | − | |
| 79 | − Example: for devices on custom boards, as typical of embedded | |
| 80 | − and SOC based hardware, Linux often uses platform_data to point | |
| 81 | − to board-specific structures describing devices and how they | |
| 82 | − are wired. That can include what ports are available, chip | |
| 83 | − variants, which GPIO pins act in what additional roles, and so | |
| 84 | − on. This shrinks the "Board Support Packages" (BSPs) and | |
| 85 | − minimizes board-specific #ifdefs in drivers. | |
| 86 | − | |
| 87 | −current_state: Current power state of the device. | |
| 88 | − | |
| 89 | −saved_state: Pointer to saved state of the device. This is usable by | |
| 90 | − the device driver controlling the device. | |
| 91 | − | |
| 92 | −release: Callback to free the device after all references have | |
| 93 | − gone away. This should be set by the allocator of the | |
| 94 | − device (i.e. the bus driver that discovered the device). | |
| 5 | +See the kerneldoc for the struct device. | |
| 95 | 6 | |
| 96 | 7 | |
| 97 | 8 | Programming Interface |
| @@ -1,23 +1,7 @@ | ||
| 1 | 1 | |
| 2 | 2 | Device Drivers |
| 3 | 3 | |
| 4 | −struct device_driver { | |
| 5 | − char * name; | |
| 6 | − struct bus_type * bus; | |
| 7 | − | |
| 8 | − struct completion unloaded; | |
| 9 | − struct kobject kobj; | |
| 10 | − list_t devices; | |
| 11 | − | |
| 12 | − struct module *owner; | |
| 13 | − | |
| 14 | − int (*probe) (struct device * dev); | |
| 15 | − int (*remove) (struct device * dev); | |
| 16 | − | |
| 17 | − int (*suspend) (struct device * dev, pm_message_t state); | |
| 18 | − int (*resume) (struct device * dev); | |
| 19 | −}; | |
| 20 | − | |
| 4 | +See the kerneldoc for the struct device_driver. | |
| 21 | 5 | |
| 22 | 6 | |
| 23 | 7 | Allocation |
| @@ -138,7 +138,7 @@ Hotplug is able to load the driver, when it is needed (because you plugged · 137 unmodified lines | ||
| 138 | 138 | in the device). |
| 139 | 139 | |
| 140 | 140 | If you want to enable debug output, you have to load the driver manually and |
| 141 | −from withing the dvb-kernel cvs repository. | |
| 141 | +from within the dvb-kernel cvs repository. | |
| 142 | 142 | |
| 143 | 143 | first have a look, which debug level are available: |
| 144 | 144 | |
| @@ -47,7 +47,7 @@ so on. · 46 unmodified lines | ||
| 47 | 47 | |
| 48 | 48 | * CI modules that are supported |
| 49 | 49 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 50 | −The CI module support is largely dependant upon the firmware on the cards | |
| 50 | +The CI module support is largely dependent upon the firmware on the cards | |
| 51 | 51 | Some cards do support almost all of the available CI modules. There is |
| 52 | 52 | nothing much that can be done in order to make additional CI modules |
| 53 | 53 | working with these cards. |
| @@ -106,7 +106,7 @@ Some very frequently asked questions about linuxtv-dvb · 105 unmodified lines | ||
| 106 | 106 | 5. The dvb_net device doesn't give me any packets at all |
| 107 | 107 | |
| 108 | 108 | Run tcpdump on the dvb0_0 interface. This sets the interface |
| 109 | − into promiscous mode so it accepts any packets from the PID | |
| 109 | + into promiscuous mode so it accepts any packets from the PID | |
| 110 | 110 | you have configured with the dvbnet utility. Check if there |
| 111 | 111 | are any packets with the IP addr and MAC addr you have |
| 112 | 112 | configured with ifconfig. |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | The DVB subsystem currently registers to the sysfs subsystem using the |
| 2 | 2 | "class_simple" interface. |
| 3 | 3 | |
| 4 | −This means that only the basic informations like module loading parameters | |
| 4 | +This means that only the basic information like module loading parameters | |
| 5 | 5 | are presented through sysfs. Other things that might be interesting are |
| 6 | 6 | currently *not* available. |
| 7 | 7 | |
| @@ -311,7 +311,7 @@ Total Correctable Errors count attribute file: · 310 unmodified lines | ||
| 311 | 311 | 'ce_noinfo_count' |
| 312 | 312 | |
| 313 | 313 | This attribute file displays the number of CEs that |
| 314 | − have occurred wherewith no informations as to which DIMM slot | |
| 314 | + have occurred wherewith no information as to which DIMM slot | |
| 315 | 315 | is having errors. Memory is handicapped, but operational, |
| 316 | 316 | yet no information is available to indicate which slot |
| 317 | 317 | the failing memory is in. This count field should be also |
| @@ -741,7 +741,7 @@ were done at i7core_edac driver. This chapter will cover those differences · 423 unmodified lines | ||
| 741 | 741 | As EDAC API maps the minimum unity is csrows, the driver sequencially |
| 742 | 742 | maps channel/dimm into different csrows. |
| 743 | 743 | |
| 744 | − For example, suposing the following layout: | |
| 744 | + For example, supposing the following layout: | |
| 745 | 745 | Ch0 phy rd0, wr0 (0x063f4031): 2 ranks, UDIMMs |
| 746 | 746 | dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400 |
| 747 | 747 | dimm 1 1024 Mb offset: 4, bank: 8, rank: 1, row: 0x4000, col: 0x400 |
| @@ -84,7 +84,7 @@ struct eisa_driver { · 83 unmodified lines | ||
| 84 | 84 | |
| 85 | 85 | id_table : an array of NULL terminated EISA id strings, |
| 86 | 86 | followed by an empty string. Each string can |
| 87 | − optionally be paired with a driver-dependant value | |
| 87 | + optionally be paired with a driver-dependent value | |
| 88 | 88 | (driver_data). |
| 89 | 89 | |
| 90 | 90 | driver : a generic driver, such as described in |
| @@ -204,7 +204,7 @@ Notes: · 203 unmodified lines | ||
| 204 | 204 | |
| 205 | 205 | supported_output_devices |
| 206 | 206 | |
| 207 | − This read-only file contains a full ',' seperated list containing all | |
| 207 | + This read-only file contains a full ',' separated list containing all | |
| 208 | 208 | output devices that could be available on your platform. It is likely |
| 209 | 209 | that not all of those have a connector on your hardware but it should |
| 210 | 210 | provide a good starting point to figure out which of those names match |
| @@ -225,7 +225,7 @@ Notes: · 14 unmodified lines | ||
| 225 | 225 | This can happen for example if only one (the other) iga is used. |
| 226 | 226 | Writing to these files allows adjusting the output devices during |
| 227 | 227 | runtime. One can add new devices, remove existing ones or switch |
| 228 | − between igas. Essentially you can write a ',' seperated list of device | |
| 228 | + between igas. Essentially you can write a ',' separated list of device | |
| 229 | 229 | names (or a single one) in the same format as the output to those |
| 230 | 230 | files. You can add a '+' or '-' as a prefix allowing simple addition |
| 231 | 231 | and removal of devices. So a prefix '+' adds the devices from your list |
| @@ -6,6 +6,42 @@ be removed from this file. · 5 unmodified lines | ||
| 6 | 6 | |
| 7 | 7 | --------------------------- |
| 8 | 8 | |
| 9 | +What: x86 floppy disable_hlt | |
| 10 | +When: 2012 | |
| 11 | +Why: ancient workaround of dubious utility clutters the | |
| 12 | + code used by everybody else. | |
| 13 | +Who: Len Brown <len.brown@intel.com> | |
| 14 | + | |
| 15 | +--------------------------- | |
| 16 | + | |
| 17 | +What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle | |
| 18 | +When: 2012 | |
| 19 | +Why: This optional sub-feature of APM is of dubious reliability, | |
| 20 | + and ancient APM laptops are likely better served by calling HLT. | |
| 21 | + Deleting CONFIG_APM_CPU_IDLE allows x86 to stop exporting | |
| 22 | + the pm_idle function pointer to modules. | |
| 23 | +Who: Len Brown <len.brown@intel.com> | |
| 24 | + | |
| 25 | +---------------------------- | |
| 26 | + | |
| 27 | +What: x86_32 "no-hlt" cmdline param | |
| 28 | +When: 2012 | |
| 29 | +Why: remove a branch from idle path, simplify code used by everybody. | |
| 30 | + This option disabled the use of HLT in idle and machine_halt() | |
| 31 | + for hardware that was flakey 15-years ago. Today we have | |
| 32 | + "idle=poll" that removed HLT from idle, and so if such a machine | |
| 33 | + is still running the upstream kernel, "idle=poll" is likely sufficient. | |
| 34 | +Who: Len Brown <len.brown@intel.com> | |
| 35 | + | |
| 36 | +---------------------------- | |
| 37 | + | |
| 38 | +What: x86 "idle=mwait" cmdline param | |
| 39 | +When: 2012 | |
| 40 | +Why: simplify x86 idle code | |
| 41 | +Who: Len Brown <len.brown@intel.com> | |
| 42 | + | |
| 43 | +---------------------------- | |
| 44 | + | |
| 9 | 45 | What: PRISM54 |
| 10 | 46 | When: 2.6.34 |
| 11 | 47 | |
| @@ -35,17 +71,6 @@ Who: Luis R. Rodriguez <lrodriguez@atheros.com> · 23 unmodified lines | ||
| 35 | 71 | |
| 36 | 72 | --------------------------- |
| 37 | 73 | |
| 38 | −What: AR9170USB | |
| 39 | −When: 2.6.40 | |
| 40 | − | |
| 41 | −Why: This driver is deprecated and the firmware is no longer | |
| 42 | − maintained. The replacement driver "carl9170" has been | |
| 43 | − around for a while, so the devices are still supported. | |
| 44 | − | |
| 45 | −Who: Christian Lamparter <chunkeey@googlemail.com> | |
| 46 | − | |
| 47 | −--------------------------- | |
| 48 | − | |
| 49 | 74 | What: IRQF_SAMPLE_RANDOM |
| 50 | 75 | Check: IRQF_SAMPLE_RANDOM |
| 51 | 76 | When: July 2009 |
| @@ -226,7 +251,7 @@ Who: Zhang Rui <rui.zhang@intel.com> · 174 unmodified lines | ||
| 226 | 251 | What: CONFIG_ACPI_PROCFS_POWER |
| 227 | 252 | When: 2.6.39 |
| 228 | 253 | Why: sysfs I/F for ACPI power devices, including AC and Battery, |
| 229 | − has been working in upstream kenrel since 2.6.24, Sep 2007. | |
| 254 | + has been working in upstream kernel since 2.6.24, Sep 2007. | |
| 230 | 255 | In 2.6.37, we make the sysfs I/F always built in and this option |
| 231 | 256 | disabled by default. |
| 232 | 257 | Remove this option and the ACPI power procfs interface in 2.6.39. |
| @@ -273,16 +298,6 @@ Who: Michael Buesch <mb@bu3sch.de> · 40 unmodified lines | ||
| 273 | 298 | |
| 274 | 299 | --------------------------- |
| 275 | 300 | |
| 276 | −What: /sys/o2cb symlink | |
| 277 | −When: January 2010 | |
| 278 | −Why: /sys/fs/o2cb is the proper location for this information - /sys/o2cb | |
| 279 | − exists as a symlink for backwards compatibility for old versions of | |
| 280 | − ocfs2-tools. 2 years should be sufficient time to phase in new versions | |
| 281 | − which know to look in /sys/fs/o2cb. | |
| 282 | −Who: ocfs2-devel@oss.oracle.com | |
| 283 | − | |
| 284 | −--------------------------- | |
| 285 | − | |
| 286 | 301 | What: Ability for non root users to shm_get hugetlb pages based on mlock |
| 287 | 302 | resource limits |
| 288 | 303 | When: 2.6.31 |
| @@ -387,26 +402,6 @@ Who: Tejun Heo <tj@kernel.org> · 98 unmodified lines | ||
| 387 | 402 | |
| 388 | 403 | ---------------------------- |
| 389 | 404 | |
| 390 | −What: Support for lcd_switch and display_get in asus-laptop driver | |
| 391 | −When: March 2010 | |
| 392 | −Why: These two features use non-standard interfaces. There are the | |
| 393 | − only features that really need multiple path to guess what's | |
| 394 | − the right method name on a specific laptop. | |
| 395 | − | |
| 396 | − Removing them will allow to remove a lot of code an significantly | |
| 397 | − clean the drivers. | |
| 398 | − | |
| 399 | − This will affect the backlight code which won't be able to know | |
| 400 | − if the backlight is on or off. The platform display file will also be | |
| 401 | − write only (like the one in eeepc-laptop). | |
| 402 | − | |
| 403 | − This should'nt affect a lot of user because they usually know | |
| 404 | − when their display is on or off. | |
| 405 | − | |
| 406 | −Who: Corentin Chary <corentin.chary@gmail.com> | |
| 407 | − | |
| 408 | −---------------------------- | |
| 409 | − | |
| 410 | 405 | What: sysfs-class-rfkill state file |
| 411 | 406 | When: Feb 2014 |
| 412 | 407 | Files: net/rfkill/core.c |
| @@ -425,16 +420,6 @@ Who: anybody or Florian Mickler <florian@mickler.org> · 12 unmodified lines | ||
| 425 | 420 | |
| 426 | 421 | ---------------------------- |
| 427 | 422 | |
| 428 | −What: capifs | |
| 429 | −When: February 2011 | |
| 430 | −Files: drivers/isdn/capi/capifs.* | |
| 431 | −Why: udev fully replaces this special file system that only contains CAPI | |
| 432 | − NCCI TTY device nodes. User space (pppdcapiplugin) works without | |
| 433 | − noticing the difference. | |
| 434 | −Who: Jan Kiszka <jan.kiszka@web.de> | |
| 435 | − | |
| 436 | −---------------------------- | |
| 437 | − | |
| 438 | 423 | What: KVM paravirt mmu host support |
| 439 | 424 | When: January 2011 |
| 440 | 425 | Why: The paravirt mmu host support is slower than non-paravirt mmu, both |
| @@ -480,14 +465,6 @@ Who: Thomas Gleixner <tglx@linutronix.de> · 39 unmodified lines | ||
| 480 | 465 | |
| 481 | 466 | ---------------------------- |
| 482 | 467 | |
| 483 | −What: The acpi_sleep=s4_nonvs command line option | |
| 484 | −When: 2.6.37 | |
| 485 | −Files: arch/x86/kernel/acpi/sleep.c | |
| 486 | −Why: superseded by acpi_sleep=nonvs | |
| 487 | −Who: Rafael J. Wysocki <rjw@sisk.pl> | |
| 488 | − | |
| 489 | −---------------------------- | |
| 490 | − | |
| 491 | 468 | What: PCI DMA unmap state API |
| 492 | 469 | When: August 2012 |
| 493 | 470 | Why: PCI DMA unmap state API (include/linux/pci-dma.h) was replaced |
| @@ -600,3 +577,26 @@ Why: These legacy callbacks should no longer be used as i2c-core offers · 106 unmodified lines | ||
| 600 | 577 | Who: Jean Delvare <khali@linux-fr.org> |
| 601 | 578 | |
| 602 | 579 | ---------------------------- |
| 580 | + | |
| 581 | +What: Support for UVCIOC_CTRL_ADD in the uvcvideo driver | |
| 582 | +When: 2.6.42 | |
| 583 | +Why: The information passed to the driver by this ioctl is now queried | |
| 584 | + dynamically from the device. | |
| 585 | +Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | |
| 586 | + | |
| 587 | +---------------------------- | |
| 588 | + | |
| 589 | +What: Support for UVCIOC_CTRL_MAP_OLD in the uvcvideo driver | |
| 590 | +When: 2.6.42 | |
| 591 | +Why: Used only by applications compiled against older driver versions. | |
| 592 | + Superseded by UVCIOC_CTRL_MAP which supports V4L2 menu controls. | |
| 593 | +Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | |
| 594 | + | |
| 595 | +---------------------------- | |
| 596 | + | |
| 597 | +What: Support for UVCIOC_CTRL_GET and UVCIOC_CTRL_SET in the uvcvideo driver | |
| 598 | +When: 2.6.42 | |
| 599 | +Why: Superseded by the UVCIOC_CTRL_QUERY ioctl. | |
| 600 | +Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com> | |
| 601 | + | |
| 602 | +---------------------------- | |
| @@ -25,6 +25,8 @@ Other applications are described in the following papers: · 24 unmodified lines | ||
| 25 | 25 | http://xcpu.org/papers/cellfs-talk.pdf |
| 26 | 26 | * PROSE I/O: Using 9p to enable Application Partitions |
| 27 | 27 | http://plan9.escet.urjc.es/iwp9/cready/PROSE_iwp9_2006.pdf |
| 28 | + * VirtFS: A Virtualization Aware File System pass-through | |
| 29 | + http://goo.gl/3WPDg | |
| 28 | 30 | |
| 29 | 31 | USAGE |
| 30 | 32 | ===== |
| @@ -130,31 +132,20 @@ OPTIONS · 99 unmodified lines | ||
| 130 | 132 | RESOURCES |
| 131 | 133 | ========= |
| 132 | 134 | |
| 133 | −Our current recommendation is to use Inferno (http://www.vitanuova.com/nferno/index.html) | |
| 134 | −as the 9p server. You can start a 9p server under Inferno by issuing the | |
| 135 | −following command: | |
| 136 | − ; styxlisten -A tcp!*!564 export '#U*' | |
| 135 | +Protocol specifications are maintained on github: | |
| 136 | +http://ericvh.github.com/9p-rfc/ | |
| 137 | 137 | |
| 138 | −The -A specifies an unauthenticated export. The 564 is the port # (you may | |
| 139 | −have to choose a higher port number if running as a normal user). The '#U*' | |
| 140 | −specifies exporting the root of the Linux name space. You may specify a | |
| 141 | −subset of the namespace by extending the path: '#U*'/tmp would just export | |
| 142 | −/tmp. For more information, see the Inferno manual pages covering styxlisten | |
| 143 | −and export. | |
| 138 | +9p client and server implementations are listed on | |
| 139 | +http://9p.cat-v.org/implementations | |
| 144 | 140 | |
| 145 | −A Linux version of the 9p server is now maintained under the npfs project | |
| 146 | −on sourceforge (http://sourceforge.net/projects/npfs). The currently | |
| 147 | −maintained version is the single-threaded version of the server (named spfs) | |
| 148 | −available from the same SVN repository. | |
| 141 | +A 9p2000.L server is being developed by LLNL and can be found | |
| 142 | +at http://code.google.com/p/diod/ | |
| 149 | 143 | |
| 150 | 144 | There are user and developer mailing lists available through the v9fs project |
| 151 | 145 | on sourceforge (http://sourceforge.net/projects/v9fs). |
| 152 | 146 | |
| 153 | −A stand-alone version of the module (which should build for any 2.6 kernel) | |
| 154 | −is available via (http://github.com/ericvh/9p-sac/tree/master) | |
| 155 | − | |
| 156 | −News and other information is maintained on SWiK (http://swik.net/v9fs) | |
| 157 | −and the Wiki (http://sf.net/apps/mediawiki/v9fs/index.php). | |
| 147 | +News and other information is maintained on a Wiki. | |
| 148 | +(http://sf.net/apps/mediawiki/v9fs/index.php). | |
| 158 | 149 | |
| 159 | 150 | Bug reports may be issued through the kernel.org bugzilla |
| 160 | 151 | (http://bugzilla.kernel.org) |
| @@ -104,7 +104,7 @@ of the locking scheme for directory operations. · 103 unmodified lines | ||
| 104 | 104 | prototypes: |
| 105 | 105 | struct inode *(*alloc_inode)(struct super_block *sb); |
| 106 | 106 | void (*destroy_inode)(struct inode *); |
| 107 | − void (*dirty_inode) (struct inode *); | |
| 107 | + void (*dirty_inode) (struct inode *, int flags); | |
| 108 | 108 | int (*write_inode) (struct inode *, struct writeback_control *wbc); |
| 109 | 109 | int (*drop_inode) (struct inode *); |
| 110 | 110 | void (*evict_inode) (struct inode *); |
| @@ -126,7 +126,7 @@ locking rules: · 15 unmodified lines | ||
| 126 | 126 | s_umount |
| 127 | 127 | alloc_inode: |
| 128 | 128 | destroy_inode: |
| 129 | −dirty_inode: (must not sleep) | |
| 129 | +dirty_inode: | |
| 130 | 130 | write_inode: |
| 131 | 131 | drop_inode: !!!inode->i_lock!!! |
| 132 | 132 | evict_inode: |
| @@ -309,7 +309,7 @@ ioctlfd field set to the descriptor obtained from the open call. · 308 unmodified lines | ||
| 309 | 309 | AUTOFS_DEV_IOCTL_TIMEOUT_CMD |
| 310 | 310 | ---------------------------- |
| 311 | 311 | |
| 312 | −Set the expire timeout for mounts withing an autofs mount point. | |
| 312 | +Set the expire timeout for mounts within an autofs mount point. | |
| 313 | 313 | |
| 314 | 314 | The call requires an initialized struct autofs_dev_ioctl with the |
| 315 | 315 | ioctlfd field set to the descriptor obtained from the open call. |
| @@ -95,7 +95,7 @@ restraints as possible on how an index is structured and where it is placed in · 94 unmodified lines | ||
| 95 | 95 | the tree. The netfs can even mix indices and data files at the same level, but |
| 96 | 96 | it's not recommended. |
| 97 | 97 | |
| 98 | −Each index entry consists of a key of indeterminate length plus some auxilliary | |
| 98 | +Each index entry consists of a key of indeterminate length plus some auxiliary | |
| 99 | 99 | data, also of indeterminate length. |
| 100 | 100 | |
| 101 | 101 | There are some limits on indices: |
| @@ -203,23 +203,23 @@ This has the following fields: · 101 unmodified lines | ||
| 203 | 203 | |
| 204 | 204 | If the function is absent, a file size of 0 is assumed. |
| 205 | 205 | |
| 206 | − (6) A function to retrieve auxilliary data from the netfs [optional]. | |
| 206 | + (6) A function to retrieve auxiliary data from the netfs [optional]. | |
| 207 | 207 | |
| 208 | 208 | This function will be called with the netfs data that was passed to the |
| 209 | − cookie acquisition function and the maximum length of auxilliary data that | |
| 210 | − it may provide. It should write the auxilliary data into the given buffer | |
| 209 | + cookie acquisition function and the maximum length of auxiliary data that | |
| 210 | + it may provide. It should write the auxiliary data into the given buffer | |
| 211 | 211 | and return the quantity it wrote. |
| 212 | 212 | |
| 213 | − If this function is absent, the auxilliary data length will be set to 0. | |
| 213 | + If this function is absent, the auxiliary data length will be set to 0. | |
| 214 | 214 | |
| 215 | − The length of the auxilliary data buffer may be dependent on the key | |
| 215 | + The length of the auxiliary data buffer may be dependent on the key | |
| 216 | 216 | length. A netfs mustn't rely on being able to provide more than 400 bytes |
| 217 | 217 | for both. |
| 218 | 218 | |
| 219 | − (7) A function to check the auxilliary data [optional]. | |
| 219 | + (7) A function to check the auxiliary data [optional]. | |
| 220 | 220 | |
| 221 | 221 | This function will be called to check that a match found in the cache for |
| 222 | − this object is valid. For instance with AFS it could check the auxilliary | |
| 222 | + this object is valid. For instance with AFS it could check the auxiliary | |
| 223 | 223 | data against the data version number returned by the server to determine |
| 224 | 224 | whether the index entry in a cache is still valid. |
| 225 | 225 | |
| @@ -232,7 +232,7 @@ This has the following fields: · 6 unmodified lines | ||
| 232 | 232 | (*) FSCACHE_CHECKAUX_NEEDS_UPDATE - the entry requires update |
| 233 | 233 | (*) FSCACHE_CHECKAUX_OBSOLETE - the entry should be deleted |
| 234 | 234 | |
| 235 | − This function can also be used to extract data from the auxilliary data in | |
| 235 | + This function can also be used to extract data from the auxiliary data in | |
| 236 | 236 | the cache and copy it into the netfs's structures. |
| 237 | 237 | |
| 238 | 238 | (8) A pair of functions to manage contexts for the completion callback |
| @@ -409,7 +409,7 @@ As a consequence of this, default_groups cannot be removed directly via · 408 unmodified lines | ||
| 409 | 409 | rmdir(2). They also are not considered when rmdir(2) on the parent |
| 410 | 410 | group is checking for children. |
| 411 | 411 | |
| 412 | −[Dependant Subsystems] | |
| 412 | +[Dependent Subsystems] | |
| 413 | 413 | |
| 414 | 414 | Sometimes other drivers depend on particular configfs items. For |
| 415 | 415 | example, ocfs2 mounts depend on a heartbeat region item. If that |
| @@ -464,9 +464,8 @@ static int __init configfs_example_init(void) · 463 unmodified lines | ||
| 464 | 464 | return 0; |
| 465 | 465 | |
| 466 | 466 | out_unregister: |
| 467 | − for (; i >= 0; i--) { | |
| 467 | + for (i--; i >= 0; i--) | |
| 468 | 468 | configfs_unregister_subsystem(example_subsys[i]); |
| 469 | − } | |
| 470 | 469 | |
| 471 | 470 | return ret; |
| 472 | 471 | } |
| @@ -475,9 +474,8 @@ static void __exit configfs_example_exit(void) · 2 unmodified lines | ||
| 475 | 474 | { |
| 476 | 475 | int i; |
| 477 | 476 | |
| 478 | − for (i = 0; example_subsys[i]; i++) { | |
| 477 | + for (i = 0; example_subsys[i]; i++) | |
| 479 | 478 | configfs_unregister_subsystem(example_subsys[i]); |
| 480 | − } | |
| 481 | 479 | } |
| 482 | 480 | |
| 483 | 481 | module_init(configfs_example_init); |
| @@ -427,9 +427,8 @@ static int __init configfs_example_init(void) · 426 unmodified lines | ||
| 427 | 427 | return 0; |
| 428 | 428 | |
| 429 | 429 | out_unregister: |
| 430 | − for (; i >= 0; i--) { | |
| 430 | + for (i--; i >= 0; i--) | |
| 431 | 431 | configfs_unregister_subsystem(example_subsys[i]); |
| 432 | − } | |
| 433 | 432 | |
| 434 | 433 | return ret; |
| 435 | 434 | } |
| @@ -438,9 +437,8 @@ static void __exit configfs_example_exit(void) · 2 unmodified lines | ||
| 438 | 437 | { |
| 439 | 438 | int i; |
| 440 | 439 | |
| 441 | − for (i = 0; example_subsys[i]; i++) { | |
| 440 | + for (i = 0; example_subsys[i]; i++) | |
| 442 | 441 | configfs_unregister_subsystem(example_subsys[i]); |
| 443 | − } | |
| 444 | 442 | } |
| 445 | 443 | |
| 446 | 444 | module_init(configfs_example_init); |
| @@ -97,7 +97,7 @@ Note: More extensive information for getting started with ext4 can be · 96 unmodified lines | ||
| 97 | 97 | * Inode allocation using large virtual block groups via flex_bg |
| 98 | 98 | * delayed allocation |
| 99 | 99 | * large block (up to pagesize) support |
| 100 | −* efficent new ordered mode in JBD2 and ext4(avoid using buffer head to force | |
| 100 | +* efficient new ordered mode in JBD2 and ext4(avoid using buffer head to force | |
| 101 | 101 | the ordering) |
| 102 | 102 | |
| 103 | 103 | [1] Filesystems with a block size of 1k may see a limit imposed by the |
| @@ -106,7 +106,7 @@ directory hash tree having a maximum depth of two. · 2 unmodified lines | ||
| 106 | 106 | 2.2 Candidate features for future inclusion |
| 107 | 107 | |
| 108 | 108 | * Online defrag (patches available but not well tested) |
| 109 | −* reduced mke2fs time via lazy itable initialization in conjuction with | |
| 109 | +* reduced mke2fs time via lazy itable initialization in conjunction with | |
| 110 | 110 | the uninit_bg feature (capability to do this is available in e2fsprogs |
| 111 | 111 | but a kernel thread to do lazy zeroing of unused inode table blocks |
| 112 | 112 | after filesystem is first mounted is required for safety) |
| @@ -226,10 +226,6 @@ acl Enables POSIX Access Control Lists support. · 113 unmodified lines | ||
| 226 | 226 | noacl This option disables POSIX Access Control List |
| 227 | 227 | support. |
| 228 | 228 | |
| 229 | −reservation | |
| 230 | − | |
| 231 | −noreservation | |
| 232 | − | |
| 233 | 229 | bsddf (*) Make 'df' act like BSD. |
| 234 | 230 | minixdf Make 'df' act like Minix. |
| 235 | 231 | |
| @@ -62,7 +62,7 @@ be fixed. · 61 unmodified lines | ||
| 62 | 62 | |
| 63 | 63 | The REMOVE uevent is generated at the end of an unsuccessful mount |
| 64 | 64 | or at the end of a umount of the filesystem. All REMOVE uevents will |
| 65 | −have been preceeded by at least an ADD uevent for the same fileystem, | |
| 65 | +have been preceded by at least an ADD uevent for the same fileystem, | |
| 66 | 66 | and unlike the other uevents is generated automatically by the kernel's |
| 67 | 67 | kobject subsystem. |
| 68 | 68 | |
| @@ -11,7 +11,7 @@ their I/O so file system consistency is maintained. One of the nifty · 10 unmodified lines | ||
| 11 | 11 | features of GFS is perfect consistency -- changes made to the file system |
| 12 | 12 | on one machine show up immediately on all other machines in the cluster. |
| 13 | 13 | |
| 14 | −GFS uses interchangable inter-node locking mechanisms, the currently | |
| 14 | +GFS uses interchangeable inter-node locking mechanisms, the currently | |
| 15 | 15 | supported mechanisms are: |
| 16 | 16 | |
| 17 | 17 | lock_nolock -- allows gfs to be used as a local file system |
| @@ -47,8 +47,8 @@ request-key will find the first matching line and corresponding program. In · 46 unmodified lines | ||
| 47 | 47 | this case, /some/other/program will handle all uid lookups and |
| 48 | 48 | /usr/sbin/nfs.idmap will handle gid, user, and group lookups. |
| 49 | 49 | |
| 50 | −See <file:Documentation/keys-request-keys.txt> for more information about the | |
| 51 | −request-key function. | |
| 50 | +See <file:Documentation/security/keys-request-keys.txt> for more information | |
| 51 | +about the request-key function. | |
| 52 | 52 | |
| 53 | 53 | |
| 54 | 54 | ========= |
| @@ -350,7 +350,7 @@ Note the "Should sync?" parameter "nosync" means that the two mirrors are · 349 unmodified lines | ||
| 350 | 350 | already in sync which will be the case on a clean shutdown of Windows. If the |
| 351 | 351 | mirrors are not clean, you can specify the "sync" option instead of "nosync" |
| 352 | 352 | and the Device-Mapper driver will then copy the entirety of the "Source Device" |
| 353 | −to the "Target Device" or if you specified multipled target devices to all of | |
| 353 | +to the "Target Device" or if you specified multiple target devices to all of | |
| 354 | 354 | them. |
| 355 | 355 | |
| 356 | 356 | Once you have your table, save it in a file somewhere (e.g. /etc/ntfsvolume1), |
| @@ -46,9 +46,15 @@ errors=panic Panic and halt the machine if an error occurs. · 45 unmodified lines | ||
| 46 | 46 | intr (*) Allow signals to interrupt cluster operations. |
| 47 | 47 | nointr Do not allow signals to interrupt cluster |
| 48 | 48 | operations. |
| 49 | +noatime Do not update access time. | |
| 50 | +relatime(*) Update atime if the previous atime is older than | |
| 51 | + mtime or ctime | |
| 52 | +strictatime Always update atime, but the minimum update interval | |
| 53 | + is specified by atime_quantum. | |
| 49 | 54 | atime_quantum=60(*) OCFS2 will not update atime unless this number |
| 50 | 55 | of seconds has passed since the last update. |
| 51 | − Set to zero to always update atime. | |
| 56 | + Set to zero to always update atime. This option need | |
| 57 | + work with strictatime. | |
| 52 | 58 | data=ordered (*) All data are forced directly out to the main file |
| 53 | 59 | system prior to its metadata being committed to the |
| 54 | 60 | journal. |
| @@ -80,7 +86,7 @@ user_xattr (*) Enables Extended User Attributes. · 25 unmodified lines | ||
| 80 | 86 | nouser_xattr Disables Extended User Attributes. |
| 81 | 87 | acl Enables POSIX Access Control Lists support. |
| 82 | 88 | noacl (*) Disables POSIX Access Control Lists support. |
| 83 | −resv_level=2 (*) Set how agressive allocation reservations will be. | |
| 89 | +resv_level=2 (*) Set how aggressive allocation reservations will be. | |
| 84 | 90 | Valid values are between 0 (reservations off) to 8 |
| 85 | 91 | (maximum space for reservations). |
| 86 | 92 | dir_resv_level= (*) By default, directory reservations will scale with file |
| @@ -42,7 +42,7 @@ Path walking overview · 41 unmodified lines | ||
| 42 | 42 | A name string specifies a start (root directory, cwd, fd-relative) and a |
| 43 | 43 | sequence of elements (directory entry names), which together refer to a path in |
| 44 | 44 | the namespace. A path is represented as a (dentry, vfsmount) tuple. The name |
| 45 | −elements are sub-strings, seperated by '/'. | |
| 45 | +elements are sub-strings, separated by '/'. | |
| 46 | 46 | |
| 47 | 47 | Name lookups will want to find a particular path that a name string refers to |
| 48 | 48 | (usually the final element, or parent of final element). This is done by taking |
| @@ -354,7 +354,7 @@ vfstest 24185492 4945 708725(2.9%) 1076136(4.4%) 0 2651 · 305 unmodified lines | ||
| 354 | 354 | |
| 355 | 355 | What this shows is that failed rcu-walk lookups, ie. ones that are restarted |
| 356 | 356 | entirely with ref-walk, are quite rare. Even the "vfstest" case which |
| 357 | −specifically has concurrent renames/mkdir/rmdir/ creat/unlink/etc to excercise | |
| 357 | +specifically has concurrent renames/mkdir/rmdir/ creat/unlink/etc to exercise | |
| 358 | 358 | such races is not showing a huge amount of restarts. |
| 359 | 359 | |
| 360 | 360 | Dropping from rcu-walk to ref-walk mean that we have encountered a dentry where |
| @@ -20,7 +20,7 @@ Commands can be embedded into transaction command (which in turn has own command · 19 unmodified lines | ||
| 20 | 20 | so one can extend protocol as needed without breaking backward compatibility as long |
| 21 | 21 | as old commands are supported. All string lengths include tail 0 byte. |
| 22 | 22 | |
| 23 | −All commans are transfered over the network in big-endian. CPU endianess is used at the end peers. | |
| 23 | +All commands are transferred over the network in big-endian. CPU endianess is used at the end peers. | |
| 24 | 24 | |
| 25 | 25 | @cmd - command number, which specifies command to be processed. Following |
| 26 | 26 | commands are used currently: |
| @@ -543,7 +543,7 @@ just those considered 'most important'. The new vectors are: · 542 unmodified lines | ||
| 543 | 543 | their statistics are used by kernel developers and interested users to |
| 544 | 544 | determine the occurrence of interrupts of the given type. |
| 545 | 545 | |
| 546 | −The above IRQ vectors are displayed only when relevent. For example, | |
| 546 | +The above IRQ vectors are displayed only when relevant. For example, | |
| 547 | 547 | the threshold vector does not exist on x86_64 platforms. Others are |
| 548 | 548 | suppressed when the system is a uniprocessor. As of this writing, only |
| 549 | 549 | i386 and x86_64 platforms support the new IRQ vector displays. |
| @@ -574,6 +574,12 @@ The contents of each smp_affinity file is the same by default: · 24 unmodified lines | ||
| 574 | 574 | > cat /proc/irq/0/smp_affinity |
| 575 | 575 | ffffffff |
| 576 | 576 | |
| 577 | +There is an alternate interface, smp_affinity_list which allows specifying | |
| 578 | +a cpu range instead of a bitmask: | |
| 579 | + | |
| 580 | + > cat /proc/irq/0/smp_affinity_list | |
| 581 | + 1024-1031 | |
| 582 | + | |
| 577 | 583 | The default_smp_affinity mask applies to all non-active IRQs, which are the |
| 578 | 584 | IRQs which have not yet been allocated/activated, and hence which lack a |
| 579 | 585 | /proc/irq/[0-9]* directory. |
| @@ -583,12 +589,13 @@ reports itself as being attached. This hardware locality information does not · 3 unmodified lines | ||
| 583 | 589 | include information about any possible driver locality preference. |
| 584 | 590 | |
| 585 | 591 | prof_cpu_mask specifies which CPUs are to be profiled by the system wide |
| 586 | −profiler. Default value is ffffffff (all cpus). | |
| 592 | +profiler. Default value is ffffffff (all cpus if there are only 32 of them). | |
| 587 | 593 | |
| 588 | 594 | The way IRQs are routed is handled by the IO-APIC, and it's Round Robin |
| 589 | 595 | between all the CPUs which are allowed to handle it. As usual the kernel has |
| 590 | 596 | more info than you and does a better job than you, so the defaults are the |
| 591 | −best choice for almost everyone. | |
| 597 | +best choice for almost everyone. [Note this applies only to those IO-APIC's | |
| 598 | +that support "Round Robin" interrupt distribution.] | |
| 592 | 599 | |
| 593 | 600 | There are three more important subdirectories in /proc: net, scsi, and sys. |
| 594 | 601 | The general rule is that the contents, or even the existence of these |
| @@ -836,7 +843,6 @@ Provides counts of softirq handlers serviced since boot time, for each cpu. · 241 unmodified lines | ||
| 836 | 843 | TASKLET: 0 0 0 290 |
| 837 | 844 | SCHED: 27035 26983 26971 26746 |
| 838 | 845 | HRTIMER: 0 0 0 0 |
| 839 | − RCU: 1678 1769 2178 2250 | |
| 840 | 846 | |
| 841 | 847 | |
| 842 | 848 | 1.3 IDE devices in /proc/ide |
| @@ -1202,7 +1208,7 @@ The columns are: · 359 unmodified lines | ||
| 1202 | 1208 | W = can do write operations |
| 1203 | 1209 | U = can do unblank |
| 1204 | 1210 | flags E = it is enabled |
| 1205 | − C = it is prefered console | |
| 1211 | + C = it is preferred console | |
| 1206 | 1212 | B = it is primary boot console |
| 1207 | 1213 | p = it is used for printk buffer |
| 1208 | 1214 | b = it is not a TTY but a Braille device |
| @@ -1331,7 +1337,7 @@ NOTICE: /proc/<pid>/oom_adj is deprecated and will be removed, please see · 122 unmodified lines | ||
| 1331 | 1337 | Documentation/feature-removal-schedule.txt. |
| 1332 | 1338 | |
| 1333 | 1339 | Caveat: when a parent task is selected, the oom killer will sacrifice any first |
| 1334 | −generation children with seperate address spaces instead, if possible. This | |
| 1340 | +generation children with separate address spaces instead, if possible. This | |
| 1335 | 1341 | avoids servers and important system daemons from being killed and loses the |
| 1336 | 1342 | minimal amount of work. |
| 1337 | 1343 | |
| @@ -219,7 +219,7 @@ or if it is stored out of line (in which case the value field stores a · 218 unmodified lines | ||
| 219 | 219 | reference to where the actual value is stored). This allows large values |
| 220 | 220 | to be stored out of line improving scanning and lookup performance and it |
| 221 | 221 | also allows values to be de-duplicated, the value being stored once, and |
| 222 | −all other occurences holding an out of line reference to that value. | |
| 222 | +all other occurrences holding an out of line reference to that value. | |
| 223 | 223 | |
| 224 | 224 | The xattr lists are packed into compressed 8K metadata blocks. |
| 225 | 225 | To reduce overhead in inodes, rather than storing the on-disk |
| @@ -62,7 +62,7 @@ values of the same type. · 61 unmodified lines | ||
| 62 | 62 | |
| 63 | 63 | Mixing types, expressing multiple lines of data, and doing fancy |
| 64 | 64 | formatting of data is heavily frowned upon. Doing these things may get |
| 65 | −you publically humiliated and your code rewritten without notice. | |
| 65 | +you publicly humiliated and your code rewritten without notice. | |
| 66 | 66 | |
| 67 | 67 | |
| 68 | 68 | An attribute definition is simply: |
| @@ -115,28 +115,8 @@ ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs · 114 unmodified lines | ||
| 115 | 115 | Module Parameters for Debugging |
| 116 | 116 | =============================== |
| 117 | 117 | |
| 118 | −When UBIFS has been compiled with debugging enabled, there are 3 module | |
| 118 | +When UBIFS has been compiled with debugging enabled, there are 2 module | |
| 119 | 119 | parameters that are available to control aspects of testing and debugging. |
| 120 | −The parameters are unsigned integers where each bit controls an option. | |
| 121 | −The parameters are: | |
| 122 | − | |
| 123 | −debug_msgs Selects which debug messages to display, as follows: | |
| 124 | − | |
| 125 | − Message Type Flag value | |
| 126 | − | |
| 127 | − General messages 1 | |
| 128 | − Journal messages 2 | |
| 129 | − Mount messages 4 | |
| 130 | − Commit messages 8 | |
| 131 | − LEB search messages 16 | |
| 132 | − Budgeting messages 32 | |
| 133 | − Garbage collection messages 64 | |
| 134 | − Tree Node Cache (TNC) messages 128 | |
| 135 | − LEB properties (lprops) messages 256 | |
| 136 | − Input/output messages 512 | |
| 137 | − Log messages 1024 | |
| 138 | − Scan messages 2048 | |
| 139 | − Recovery messages 4096 | |
| 140 | 120 | |
| 141 | 121 | debug_chks Selects extra checks that UBIFS can do while running: |
| 142 | 122 | |
| @@ -154,11 +134,9 @@ debug_tsts Selects a mode of testing, as follows: · 11 unmodified lines | ||
| 154 | 134 | |
| 155 | 135 | Test mode Flag value |
| 156 | 136 | |
| 157 | − Force in-the-gaps method 2 | |
| 158 | 137 | Failure mode for recovery testing 4 |
| 159 | 138 | |
| 160 | −For example, set debug_msgs to 5 to display General messages and Mount | |
| 161 | −messages. | |
| 139 | +For example, set debug_chks to 3 to enable general and TNC checks. | |
| 162 | 140 | |
| 163 | 141 | |
| 164 | 142 | References |
| @@ -97,7 +97,7 @@ functions: · 96 unmodified lines | ||
| 97 | 97 | The passed struct file_system_type describes your filesystem. When a |
| 98 | 98 | request is made to mount a filesystem onto a directory in your namespace, |
| 99 | 99 | the VFS will call the appropriate mount() method for the specific |
| 100 | −filesystem. New vfsmount refering to the tree returned by ->mount() | |
| 100 | +filesystem. New vfsmount referring to the tree returned by ->mount() | |
| 101 | 101 | will be attached to the mountpoint, so that when pathname resolution |
| 102 | 102 | reaches the mountpoint it will jump into the root of that vfsmount. |
| 103 | 103 | |
| @@ -211,7 +211,7 @@ struct super_operations { · 107 unmodified lines | ||
| 211 | 211 | struct inode *(*alloc_inode)(struct super_block *sb); |
| 212 | 212 | void (*destroy_inode)(struct inode *); |
| 213 | 213 | |
| 214 | − void (*dirty_inode) (struct inode *); | |
| 214 | + void (*dirty_inode) (struct inode *, int flags); | |
| 215 | 215 | int (*write_inode) (struct inode *, int); |
| 216 | 216 | void (*drop_inode) (struct inode *); |
| 217 | 217 | void (*delete_inode) (struct inode *); |
| @@ -42,7 +42,7 @@ the aggregation of all the previous changes currently held only in the log. · 41 unmodified lines | ||
| 42 | 42 | This relogging technique also allows objects to be moved forward in the log so |
| 43 | 43 | that an object being relogged does not prevent the tail of the log from ever |
| 44 | 44 | moving forward. This can be seen in the table above by the changing |
| 45 | −(increasing) LSN of each subsquent transaction - the LSN is effectively a | |
| 45 | +(increasing) LSN of each subsequent transaction - the LSN is effectively a | |
| 46 | 46 | direct encoding of the location in the log of the transaction. |
| 47 | 47 | |
| 48 | 48 | This relogging is also used to implement long-running, multiple-commit |
| @@ -338,7 +338,7 @@ the same time another transaction modifies the item and inserts the log item · 289 unmodified lines | ||
| 338 | 338 | into the new CIL, then checkpoint transaction commit code cannot use log items |
| 339 | 339 | to store the list of log vectors that need to be written into the transaction. |
| 340 | 340 | Hence log vectors need to be able to be chained together to allow them to be |
| 341 | −detatched from the log items. That is, when the CIL is flushed the memory | |
| 341 | +detached from the log items. That is, when the CIL is flushed the memory | |
| 342 | 342 | buffer and log vector attached to each log item needs to be attached to the |
| 343 | 343 | checkpoint context so that the log item can be released. In diagrammatic form, |
| 344 | 344 | the CIL would look like this before the flush: |
| @@ -577,7 +577,7 @@ only becomes unpinned when all the transactions complete and there are no · 232 unmodified lines | ||
| 577 | 577 | pending transactions. Thus the pinning and unpinning of a log item is symmetric |
| 578 | 578 | as there is a 1:1 relationship with transaction commit and log item completion. |
| 579 | 579 | |
| 580 | −For delayed logging, however, we have an assymetric transaction commit to | |
| 580 | +For delayed logging, however, we have an asymmetric transaction commit to | |
| 581 | 581 | completion relationship. Every time an object is relogged in the CIL it goes |
| 582 | 582 | through the commit process without a corresponding completion being registered. |
| 583 | 583 | That is, we now have a many-to-one relationship between transaction commit and |
| @@ -780,7 +780,7 @@ With delayed logging, there are new steps inserted into the life cycle: · 196 unmodified lines | ||
| 780 | 780 | From this, it can be seen that the only life cycle differences between the two |
| 781 | 781 | logging methods are in the middle of the life cycle - they still have the same |
| 782 | 782 | beginning and end and execution constraints. The only differences are in the |
| 783 | −commiting of the log items to the log itself and the completion processing. | |
| 783 | +committing of the log items to the log itself and the completion processing. | |
| 784 | 784 | Hence delayed logging should not introduce any constraints on log item |
| 785 | 785 | behaviour, allocation or freeing that don't already exist. |
| 786 | 786 | |
| @@ -39,6 +39,12 @@ When mounting an XFS filesystem, the following options are accepted. · 38 unmodified lines | ||
| 39 | 39 | drive level write caching to be enabled, for devices that |
| 40 | 40 | support write barriers. |
| 41 | 41 | |
| 42 | + discard | |
| 43 | + Issue command to let the block device reclaim space freed by the | |
| 44 | + filesystem. This is useful for SSD devices, thinly provisioned | |
| 45 | + LUNs and virtual machine images, but may have a performance | |
| 46 | + impact. This option is incompatible with the nodelaylog option. | |
| 47 | + | |
| 42 | 48 | dmapi |
| 43 | 49 | Enable the DMAPI (Data Management API) event callouts. |
| 44 | 50 | Use with the "mtpt" option. |
| @@ -66,10 +66,10 @@ trick is to ensure that any needed memory allocations are done before · 65 unmodified lines | ||
| 66 | 66 | entering atomic context, using: |
| 67 | 67 | |
| 68 | 68 | int flex_array_prealloc(struct flex_array *array, unsigned int start, |
| 69 | − unsigned int end, gfp_t flags); | |
| 69 | + unsigned int nr_elements, gfp_t flags); | |
| 70 | 70 | |
| 71 | 71 | This function will ensure that memory for the elements indexed in the range |
| 72 | −defined by start and end has been allocated. Thereafter, a | |
| 72 | +defined by start and nr_elements has been allocated. Thereafter, a | |
| 73 | 73 | flex_array_put() call on an element in that range is guaranteed not to |
| 74 | 74 | block. |
| 75 | 75 | |
File renamed without changes.
| @@ -0,0 +1,119 @@ | ||
| 1 | + HIDRAW - Raw Access to USB and Bluetooth Human Interface Devices | |
| 2 | + ================================================================== | |
| 3 | + | |
| 4 | +The hidraw driver provides a raw interface to USB and Bluetooth Human | |
| 5 | +Interface Devices (HIDs). It differs from hiddev in that reports sent and | |
| 6 | +received are not parsed by the HID parser, but are sent to and received from | |
| 7 | +the device unmodified. | |
| 8 | + | |
| 9 | +Hidraw should be used if the userspace application knows exactly how to | |
| 10 | +communicate with the hardware device, and is able to construct the HID | |
| 11 | +reports manually. This is often the case when making userspace drivers for | |
| 12 | +custom HID devices. | |
| 13 | + | |
| 14 | +Hidraw is also useful for communicating with non-conformant HID devices | |
| 15 | +which send and receive data in a way that is inconsistent with their report | |
| 16 | +descriptors. Because hiddev parses reports which are sent and received | |
| 17 | +through it, checking them against the device's report descriptor, such | |
| 18 | +communication with these non-conformant devices is impossible using hiddev. | |
| 19 | +Hidraw is the only alternative, short of writing a custom kernel driver, for | |
| 20 | +these non-conformant devices. | |
| 21 | + | |
| 22 | +A benefit of hidraw is that its use by userspace applications is independent | |
| 23 | +of the underlying hardware type. Currently, Hidraw is implemented for USB | |
| 24 | +and Bluetooth. In the future, as new hardware bus types are developed which | |
| 25 | +use the HID specification, hidraw will be expanded to add support for these | |
| 26 | +new bus types. | |
| 27 | + | |
| 28 | +Hidraw uses a dynamic major number, meaning that udev should be relied on to | |
| 29 | +create hidraw device nodes. Udev will typically create the device nodes | |
| 30 | +directly under /dev (eg: /dev/hidraw0). As this location is distribution- | |
| 31 | +and udev rule-dependent, applications should use libudev to locate hidraw | |
| 32 | +devices attached to the system. There is a tutorial on libudev with a | |
| 33 | +working example at: | |
| 34 | + http://www.signal11.us/oss/udev/ | |
| 35 | + | |
| 36 | +The HIDRAW API | |
| 37 | +--------------- | |
| 38 | + | |
| 39 | +read() | |
| 40 | +------- | |
| 41 | +read() will read a queued report received from the HID device. On USB | |
| 42 | +devices, the reports read using read() are the reports sent from the device | |
| 43 | +on the INTERRUPT IN endpoint. By default, read() will block until there is | |
| 44 | +a report available to be read. read() can be made non-blocking, by passing | |
| 45 | +the O_NONBLOCK flag to open(), or by setting the O_NONBLOCK flag using | |
| 46 | +fcntl(). | |
| 47 | + | |
| 48 | +On a device which uses numbered reports, the first byte of the returned data | |
| 49 | +will be the report number; the report data follows, beginning in the second | |
| 50 | +byte. For devices which do not use numbered reports, the report data | |
| 51 | +will begin at the first byte. | |
| 52 | + | |
| 53 | +write() | |
| 54 | +-------- | |
| 55 | +The write() function will write a report to the device. For USB devices, if | |
| 56 | +the device has an INTERRUPT OUT endpoint, the report will be sent on that | |
| 57 | +endpoint. If it does not, the report will be sent over the control endpoint, | |
| 58 | +using a SET_REPORT transfer. | |
| 59 | + | |
| 60 | +The first byte of the buffer passed to write() should be set to the report | |
| 61 | +number. If the device does not use numbered reports, the first byte should | |
| 62 | +be set to 0. The report data itself should begin at the second byte. | |
| 63 | + | |
| 64 | +ioctl() | |
| 65 | +-------- | |
| 66 | +Hidraw supports the following ioctls: | |
| 67 | + | |
| 68 | +HIDIOCGRDESCSIZE: Get Report Descriptor Size | |
| 69 | +This ioctl will get the size of the device's report descriptor. | |
| 70 | + | |
| 71 | +HIDIOCGRDESC: Get Report Descriptor | |
| 72 | +This ioctl returns the device's report descriptor using a | |
| 73 | +hidraw_report_descriptor struct. Make sure to set the size field of the | |
| 74 | +hidraw_report_descriptor struct to the size returned from HIDIOCGRDESCSIZE. | |
| 75 | + | |
| 76 | +HIDIOCGRAWINFO: Get Raw Info | |
| 77 | +This ioctl will return a hidraw_devinfo struct containing the bus type, the | |
| 78 | +vendor ID (VID), and product ID (PID) of the device. The bus type can be one | |
| 79 | +of: | |
| 80 | + BUS_USB | |
| 81 | + BUS_HIL | |
| 82 | + BUS_BLUETOOTH | |
| 83 | + BUS_VIRTUAL | |
| 84 | +which are defined in linux/input.h. | |
| 85 | + | |
| 86 | +HIDIOCGRAWNAME(len): Get Raw Name | |
| 87 | +This ioctl returns a string containing the vendor and product strings of | |
| 88 | +the device. The returned string is Unicode, UTF-8 encoded. | |
| 89 | + | |
| 90 | +HIDIOCGRAWPHYS(len): Get Physical Address | |
| 91 | +This ioctl returns a string representing the physical address of the device. | |
| 92 | +For USB devices, the string contains the physical path to the device (the | |
| 93 | +USB controller, hubs, ports, etc). For Bluetooth devices, the string | |
| 94 | +contains the hardware (MAC) address of the device. | |
| 95 | + | |
| 96 | +HIDIOCSFEATURE(len): Send a Feature Report | |
| 97 | +This ioctl will send a feature report to the device. Per the HID | |
| 98 | +specification, feature reports are always sent using the control endpoint. | |
| 99 | +Set the first byte of the supplied buffer to the report number. For devices | |
| 100 | +which do not use numbered reports, set the first byte to 0. The report data | |
| 101 | +begins in the second byte. Make sure to set len accordingly, to one more | |
| 102 | +than the length of the report (to account for the report number). | |
| 103 | + | |
| 104 | +HIDIOCGFEATURE(len): Get a Feature Report | |
| 105 | +This ioctl will request a feature report from the device using the control | |
| 106 | +endpoint. The first byte of the supplied buffer should be set to the report | |
| 107 | +number of the requested report. For devices which do not use numbered | |
| 108 | +reports, set the first byte to 0. The report will be returned starting at | |
| 109 | +the first byte of the buffer (ie: the report number is not returned). | |
| 110 | + | |
| 111 | +Example | |
| 112 | +--------- | |
| 113 | +In samples/, find hid-example.c, which shows examples of read(), write(), | |
| 114 | +and all the ioctls for hidraw. The code may be used by anyone for any | |
| 115 | +purpose, and can serve as a starting point for developing applications using | |
| 116 | +hidraw. | |
| 117 | + | |
| 118 | +Document by: | |
| 119 | + Alan Ott <alan@signal11.us>, Signal 11 Software | |
| @@ -78,7 +78,7 @@ motherboards (most modern Abit motherboards). · 77 unmodified lines | ||
| 78 | 78 | |
| 79 | 79 | The first and second revision of the uGuru chip in reality is a Winbond |
| 80 | 80 | W83L950D in disguise (despite Abit claiming it is "a new microprocessor |
| 81 | −designed by the ABIT Engineers"). Unfortunatly this doesn't help since the | |
| 81 | +designed by the ABIT Engineers"). Unfortunately this doesn't help since the | |
| 82 | 82 | W83L950D is a generic microcontroller with a custom Abit application running |
| 83 | 83 | on it. |
| 84 | 84 | |
| @@ -5,9 +5,9 @@ First of all, what I know about uGuru is no fact based on any help, hints or · 4 unmodified lines | ||
| 5 | 5 | datasheet from Abit. The data I have got on uGuru have I assembled through |
| 6 | 6 | my weak knowledge in "backwards engineering". |
| 7 | 7 | And just for the record, you may have noticed uGuru isn't a chip developed by |
| 8 | −Abit, as they claim it to be. It's realy just an microprocessor (uC) created by | |
| 8 | +Abit, as they claim it to be. It's really just an microprocessor (uC) created by | |
| 9 | 9 | Winbond (W83L950D). And no, reading the manual for this specific uC or |
| 10 | −mailing Windbond for help won't give any usefull data about uGuru, as it is | |
| 10 | +mailing Windbond for help won't give any useful data about uGuru, as it is | |
| 11 | 11 | the program inside the uC that is responding to calls. |
| 12 | 12 | |
| 13 | 13 | Olle Sandberg <ollebull@gmail.com>, 2005-05-25 |
| @@ -41,7 +41,7 @@ later on attached again data-port will hold 0x08, more about this later. · 27 unmodified lines | ||
| 41 | 41 | |
| 42 | 42 | After wider testing of the Linux kernel driver some variants of the uGuru have |
| 43 | 43 | turned up which will hold 0x00 instead of 0xAC at the CMD port, thus we also |
| 44 | −have to test CMD for two different values. On these uGuru's DATA will initally | |
| 44 | +have to test CMD for two different values. On these uGuru's DATA will initially | |
| 45 | 45 | hold 0x09 and will only hold 0x08 after reading CMD first, so CMD must be read |
| 46 | 46 | first! |
| 47 | 47 | |
| @@ -308,5 +308,5 @@ the voltage / clock programming out, I tried reading and only reading banks · 260 unmodified lines | ||
| 308 | 308 | resulted in a _permanent_ reprogramming of the voltages, luckily I had the |
| 309 | 309 | sensors part configured so that it would shutdown my system on any out of spec |
| 310 | 310 | voltages which proprably safed my computer (after a reboot I managed to |
| 311 | −immediatly enter the bios and reload the defaults). This probably means that | |
| 311 | +immediately enter the bios and reload the defaults). This probably means that | |
| 312 | 312 | the read/write cycle for the non sensor part is different from the sensor part. |
| @@ -47,7 +47,7 @@ This driver supports the hardware monitoring features of the third revision of · 46 unmodified lines | ||
| 47 | 47 | the Abit uGuru chip, found on recent Abit uGuru featuring motherboards. |
| 48 | 48 | |
| 49 | 49 | The 3rd revision of the uGuru chip in reality is a Winbond W83L951G. |
| 50 | −Unfortunatly this doesn't help since the W83L951G is a generic microcontroller | |
| 50 | +Unfortunately this doesn't help since the W83L951G is a generic microcontroller | |
| 51 | 51 | with a custom Abit application running on it. |
| 52 | 52 | |
| 53 | 53 | Despite Abit not releasing any information regarding the uGuru revision 3, |
| @@ -14,10 +14,6 @@ Supported chips: · 13 unmodified lines | ||
| 14 | 14 | Prefix: 'gl523sm' |
| 15 | 15 | Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e |
| 16 | 16 | Datasheet: |
| 17 | − * Intel Xeon Processor | |
| 18 | − Prefix: - any other - may require 'force_adm1021' parameter | |
| 19 | − Addresses scanned: none | |
| 20 | − Datasheet: Publicly available at Intel website | |
| 21 | 17 | * Maxim MAX1617 |
| 22 | 18 | Prefix: 'max1617' |
| 23 | 19 | Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e |
| @@ -91,21 +87,27 @@ will do no harm, but will return 'old' values. It is possible to make · 67 unmodified lines | ||
| 91 | 87 | ADM1021-clones do faster measurements, but there is really no good reason |
| 92 | 88 | for that. |
| 93 | 89 | |
| 94 | −Xeon support | |
| 95 | −------------ | |
| 96 | 90 | |
| 97 | −Some Xeon processors have real max1617, adm1021, or compatible chips | |
| 98 | −within them, with two temperature sensors. | |
| 91 | +Netburst-based Xeon support | |
| 92 | +--------------------------- | |
| 99 | 93 | |
| 100 | −Other Xeons have chips with only one sensor. | |
| 94 | +Some Xeon processors based on the Netburst (early Pentium 4, from 2001 to | |
| 95 | +2003) microarchitecture had real MAX1617, ADM1021, or compatible chips | |
| 96 | +within them, with two temperature sensors. Other Xeon processors of this | |
| 97 | +era (with 400 MHz FSB) had chips with only one temperature sensor. | |
| 101 | 98 | |
| 102 | −If you have a Xeon, and the adm1021 module loads, and both temperatures | |
| 103 | −appear valid, then things are good. | |
| 99 | +If you have such an old Xeon, and you get two valid temperatures when | |
| 100 | +loading the adm1021 module, then things are good. | |
| 104 | 101 | |
| 105 | −If the adm1021 module doesn't load, you should try this: | |
| 106 | − modprobe adm1021 force_adm1021=BUS,ADDRESS | |
| 107 | − ADDRESS can only be 0x18, 0x1a, 0x29, 0x2b, 0x4c, or 0x4e. | |
| 102 | +If nothing happens when loading the adm1021 module, and you are certain | |
| 103 | +that your specific Xeon processor model includes compatible sensors, you | |
| 104 | +will have to explicitly instantiate the sensor chips from user-space. See | |
| 105 | +method 4 in Documentation/i2c/instantiating-devices. Possible slave | |
| 106 | +addresses are 0x18, 0x1a, 0x29, 0x2b, 0x4c, or 0x4e. It is likely that | |
| 107 | +only temp2 will be correct and temp1 will have to be ignored. | |
| 108 | 108 | |
| 109 | −If you have dual Xeons you may have appear to have two separate | |
| 110 | −adm1021-compatible chips, or two single-temperature sensors, at distinct | |
| 111 | −addresses. | |
| 109 | +Previous generations of the Xeon processor (based on Pentium II/III) | |
| 110 | +didn't have these sensors. Next generations of Xeon processors (533 MHz | |
| 111 | +FSB and faster) lost them, until the Core-based generation which | |
| 112 | +introduced integrated digital thermal sensors. These are supported by | |
| 113 | +the coretemp driver. | |
| @@ -0,0 +1,60 @@ | ||
| 1 | +Kernel driver adm1275 | |
| 2 | +===================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * Analog Devices ADM1275 | |
| 6 | + Prefix: 'adm1275' | |
| 7 | + Addresses scanned: - | |
| 8 | + Datasheet: www.analog.com/static/imported-files/data_sheets/ADM1275.pdf | |
| 9 | + | |
| 10 | +Author: Guenter Roeck <guenter.roeck@ericsson.com> | |
| 11 | + | |
| 12 | + | |
| 13 | +Description | |
| 14 | +----------- | |
| 15 | + | |
| 16 | +This driver supports hardware montoring for Analog Devices ADM1275 Hot-Swap | |
| 17 | +Controller and Digital Power Monitor. | |
| 18 | + | |
| 19 | +The ADM1275 is a hot-swap controller that allows a circuit board to be removed | |
| 20 | +from or inserted into a live backplane. It also features current and voltage | |
| 21 | +readback via an integrated 12-bit analog-to-digital converter (ADC), accessed | |
| 22 | +using a PMBus. interface. | |
| 23 | + | |
| 24 | +The driver is a client driver to the core PMBus driver. Please see | |
| 25 | +Documentation/hwmon/pmbus for details on PMBus client drivers. | |
| 26 | + | |
| 27 | + | |
| 28 | +Usage Notes | |
| 29 | +----------- | |
| 30 | + | |
| 31 | +This driver does not auto-detect devices. You will have to instantiate the | |
| 32 | +devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 33 | +details. | |
| 34 | + | |
| 35 | + | |
| 36 | +Platform data support | |
| 37 | +--------------------- | |
| 38 | + | |
| 39 | +The driver supports standard PMBus driver platform data. Please see | |
| 40 | +Documentation/hwmon/pmbus for details. | |
| 41 | + | |
| 42 | + | |
| 43 | +Sysfs entries | |
| 44 | +------------- | |
| 45 | + | |
| 46 | +The following attributes are supported. Limits are read-write; all other | |
| 47 | +attributes are read-only. | |
| 48 | + | |
| 49 | +in1_label "vin1" or "vout1" depending on chip variant and | |
| 50 | + configuration. | |
| 51 | +in1_input Measured voltage. From READ_VOUT register. | |
| 52 | +in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. | |
| 53 | +in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. | |
| 54 | +in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. | |
| 55 | +in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. | |
| 56 | + | |
| 57 | +curr1_label "iout1" | |
| 58 | +curr1_input Measured current. From READ_IOUT register. | |
| 59 | +curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register. | |
| 60 | +curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register. | |
| @@ -15,8 +15,13 @@ Author: Rudolf Marek · 14 unmodified lines | ||
| 15 | 15 | |
| 16 | 16 | Description |
| 17 | 17 | ----------- |
| 18 | +This driver permits reading the DTS (Digital Temperature Sensor) embedded | |
| 19 | +inside Intel CPUs. This driver can read both the per-core and per-package | |
| 20 | +temperature using the appropriate sensors. The per-package sensor is new; | |
| 21 | +as of now, it is present only in the SandyBridge platform. The driver will | |
| 22 | +show the temperature of all cores inside a package under a single device | |
| 23 | +directory inside hwmon. | |
| 18 | 24 | |
| 19 | −This driver permits reading temperature sensor embedded inside Intel Core CPU. | |
| 20 | 25 | Temperature is measured in degrees Celsius and measurement resolution is |
| 21 | 26 | 1 degree C. Valid temperatures are from 0 to TjMax degrees C, because |
| 22 | 27 | the actual value of temperature register is in fact a delta from TjMax. |
| @@ -27,13 +32,15 @@ mechanism will perform actions to forcibly cool down the processor. Alarm · 4 unmodified lines | ||
| 27 | 32 | may be raised, if the temperature grows enough (more than TjMax) to trigger |
| 28 | 33 | the Out-Of-Spec bit. Following table summarizes the exported sysfs files: |
| 29 | 34 | |
| 30 | −temp1_input - Core temperature (in millidegrees Celsius). | |
| 31 | −temp1_max - All cooling devices should be turned on (on Core2). | |
| 32 | −temp1_crit - Maximum junction temperature (in millidegrees Celsius). | |
| 33 | −temp1_crit_alarm - Set when Out-of-spec bit is set, never clears. | |
| 35 | +All Sysfs entries are named with their core_id (represented here by 'X'). | |
| 36 | +tempX_input - Core temperature (in millidegrees Celsius). | |
| 37 | +tempX_max - All cooling devices should be turned on (on Core2). | |
| 38 | +tempX_crit - Maximum junction temperature (in millidegrees Celsius). | |
| 39 | +tempX_crit_alarm - Set when Out-of-spec bit is set, never clears. | |
| 34 | 40 | Correct CPU operation is no longer guaranteed. |
| 35 | −temp1_label - Contains string "Core X", where X is processor | |
| 36 | − number. | |
| 41 | +tempX_label - Contains string "Core X", where X is processor | |
| 42 | + number. For Package temp, this will be "Physical id Y", | |
| 43 | + where Y is the package number. | |
| 37 | 44 | |
| 38 | 45 | The TjMax temperature is set to 85 degrees C if undocumented model specific |
| 39 | 46 | register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as |
| @@ -0,0 +1,42 @@ | ||
| 1 | +Kernel driver emc6w201 | |
| 2 | +====================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * SMSC EMC6W201 | |
| 6 | + Prefix: 'emc6w201' | |
| 7 | + Addresses scanned: I2C 0x2c, 0x2d, 0x2e | |
| 8 | + Datasheet: Not public | |
| 9 | + | |
| 10 | +Author: Jean Delvare <khali@linux-fr.org> | |
| 11 | + | |
| 12 | + | |
| 13 | +Description | |
| 14 | +----------- | |
| 15 | + | |
| 16 | +From the datasheet: | |
| 17 | + | |
| 18 | +"The EMC6W201 is an environmental monitoring device with automatic fan | |
| 19 | +control capability and enhanced system acoustics for noise suppression. | |
| 20 | +This ACPI compliant device provides hardware monitoring for up to six | |
| 21 | +voltages (including its own VCC) and five external thermal sensors, | |
| 22 | +measures the speed of up to five fans, and controls the speed of | |
| 23 | +multiple DC fans using three Pulse Width Modulator (PWM) outputs. Note | |
| 24 | +that it is possible to control more than three fans by connecting two | |
| 25 | +fans to one PWM output. The EMC6W201 will be available in a 36-pin | |
| 26 | +QFN package." | |
| 27 | + | |
| 28 | +The device is functionally close to the EMC6D100 series, but is | |
| 29 | +register-incompatible. | |
| 30 | + | |
| 31 | +The driver currently only supports the monitoring of the voltages, | |
| 32 | +temperatures and fan speeds. Limits can be changed. Alarms are not | |
| 33 | +supported, and neither is fan speed control. | |
| 34 | + | |
| 35 | + | |
| 36 | +Known Systems With EMC6W201 | |
| 37 | +--------------------------- | |
| 38 | + | |
| 39 | +The EMC6W201 is a rare device, only found on a few systems, made in | |
| 40 | +2005 and 2006. Known systems with this device: | |
| 41 | +* Dell Precision 670 workstation | |
| 42 | +* Gigabyte 2CEWH mainboard | |
| @@ -6,6 +6,10 @@ Supported chips: · 5 unmodified lines | ||
| 6 | 6 | Prefix: 'f71808e' |
| 7 | 7 | Addresses scanned: none, address read from Super I/O config space |
| 8 | 8 | Datasheet: Not public |
| 9 | + * Fintek F71808A | |
| 10 | + Prefix: 'f71808a' | |
| 11 | + Addresses scanned: none, address read from Super I/O config space | |
| 12 | + Datasheet: Not public | |
| 9 | 13 | * Fintek F71858FG |
| 10 | 14 | Prefix: 'f71858fg' |
| 11 | 15 | Addresses scanned: none, address read from Super I/O config space |
| @@ -0,0 +1,37 @@ | ||
| 1 | +Kernel driver fam15h_power | |
| 2 | +========================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | +* AMD Family 15h Processors | |
| 6 | + | |
| 7 | + Prefix: 'fam15h_power' | |
| 8 | + Addresses scanned: PCI space | |
| 9 | + Datasheets: | |
| 10 | + BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors | |
| 11 | + (not yet published) | |
| 12 | + | |
| 13 | +Author: Andreas Herrmann <andreas.herrmann3@amd.com> | |
| 14 | + | |
| 15 | +Description | |
| 16 | +----------- | |
| 17 | + | |
| 18 | +This driver permits reading of registers providing power information | |
| 19 | +of AMD Family 15h processors. | |
| 20 | + | |
| 21 | +For AMD Family 15h processors the following power values can be | |
| 22 | +calculated using different processor northbridge function registers: | |
| 23 | + | |
| 24 | +* BasePwrWatts: Specifies in watts the maximum amount of power | |
| 25 | + consumed by the processor for NB and logic external to the core. | |
| 26 | +* ProcessorPwrWatts: Specifies in watts the maximum amount of power | |
| 27 | + the processor can support. | |
| 28 | +* CurrPwrWatts: Specifies in watts the current amount of power being | |
| 29 | + consumed by the processor. | |
| 30 | + | |
| 31 | +This driver provides ProcessorPwrWatts and CurrPwrWatts: | |
| 32 | +* power1_crit (ProcessorPwrWatts) | |
| 33 | +* power1_input (CurrPwrWatts) | |
| 34 | + | |
| 35 | +On multi-node processors the calculated value is for the entire | |
| 36 | +package and not for a single node. Thus the driver creates sysfs | |
| 37 | +attributes only for internal node0 of a multi-node processor. | |
| @@ -11,6 +11,7 @@ Supported chips: · 10 unmodified lines | ||
| 11 | 11 | Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) |
| 12 | 12 | * AMD Family 12h processors: "Llano" |
| 13 | 13 | * AMD Family 14h processors: "Brazos" (C/E/G-Series) |
| 14 | +* AMD Family 15h processors: "Bulldozer" | |
| 14 | 15 | |
| 15 | 16 | Prefix: 'k10temp' |
| 16 | 17 | Addresses scanned: PCI space |
| @@ -40,7 +41,7 @@ Description · 23 unmodified lines | ||
| 40 | 41 | ----------- |
| 41 | 42 | |
| 42 | 43 | This driver permits reading of the internal temperature sensor of AMD |
| 43 | −Family 10h/11h/12h/14h processors. | |
| 44 | +Family 10h/11h/12h/14h/15h processors. | |
| 44 | 45 | |
| 45 | 46 | All these processors have a sensor, but on those for Socket F or AM2+, |
| 46 | 47 | the sensor may return inconsistent values (erratum 319). The driver |
| @@ -32,6 +32,16 @@ Supported chips: · 31 unmodified lines | ||
| 32 | 32 | Addresses scanned: I2C 0x4c and 0x4d |
| 33 | 33 | Datasheet: Publicly available at the ON Semiconductor website |
| 34 | 34 | http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461 |
| 35 | + * Analog Devices ADT7461A | |
| 36 | + Prefix: 'adt7461a' | |
| 37 | + Addresses scanned: I2C 0x4c and 0x4d | |
| 38 | + Datasheet: Publicly available at the ON Semiconductor website | |
| 39 | + http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461A | |
| 40 | + * ON Semiconductor NCT1008 | |
| 41 | + Prefix: 'nct1008' | |
| 42 | + Addresses scanned: I2C 0x4c and 0x4d | |
| 43 | + Datasheet: Publicly available at the ON Semiconductor website | |
| 44 | + http://www.onsemi.com/PowerSolutions/product.do?id=NCT1008 | |
| 35 | 45 | * Maxim MAX6646 |
| 36 | 46 | Prefix: 'max6646' |
| 37 | 47 | Addresses scanned: I2C 0x4d |
| @@ -149,7 +159,7 @@ ADM1032: · 111 unmodified lines | ||
| 149 | 159 | * ALERT is triggered by open remote sensor. |
| 150 | 160 | * SMBus PEC support for Write Byte and Receive Byte transactions. |
| 151 | 161 | |
| 152 | −ADT7461: | |
| 162 | +ADT7461, ADT7461A, NCT1008: | |
| 153 | 163 | * Extended temperature range (breaks compatibility) |
| 154 | 164 | * Lower resolution for remote temperature |
| 155 | 165 | |
| @@ -195,9 +205,9 @@ are exported, one for each channel, but these values are of course linked. · 39 unmodified lines | ||
| 195 | 205 | Only the local hysteresis can be set from user-space, and the same delta |
| 196 | 206 | applies to the remote hysteresis. |
| 197 | 207 | |
| 198 | −The lm90 driver will not update its values more frequently than every | |
| 199 | −other second; reading them more often will do no harm, but will return | |
| 200 | −'old' values. | |
| 208 | +The lm90 driver will not update its values more frequently than configured with | |
| 209 | +the update_interval attribute; reading them more often will do no harm, but will | |
| 210 | +return 'old' values. | |
| 201 | 211 | |
| 202 | 212 | SMBus Alert Support |
| 203 | 213 | ------------------- |
| @@ -205,11 +215,12 @@ SMBus Alert Support · 1 unmodified line | ||
| 205 | 215 | This driver has basic support for SMBus alert. When an alert is received, |
| 206 | 216 | the status register is read and the faulty temperature channel is logged. |
| 207 | 217 | |
| 208 | −The Analog Devices chips (ADM1032 and ADT7461) do not implement the SMBus | |
| 209 | −alert protocol properly so additional care is needed: the ALERT output is | |
| 210 | −disabled when an alert is received, and is re-enabled only when the alarm | |
| 211 | −is gone. Otherwise the chip would block alerts from other chips in the bus | |
| 212 | −as long as the alarm is active. | |
| 218 | +The Analog Devices chips (ADM1032, ADT7461 and ADT7461A) and ON | |
| 219 | +Semiconductor chips (NCT1008) do not implement the SMBus alert protocol | |
| 220 | +properly so additional care is needed: the ALERT output is disabled when | |
| 221 | +an alert is received, and is re-enabled only when the alarm is gone. | |
| 222 | +Otherwise the chip would block alerts from other chips in the bus as long | |
| 223 | +as the alarm is active. | |
| 213 | 224 | |
| 214 | 225 | PEC Support |
| 215 | 226 | ----------- |
| @@ -0,0 +1,62 @@ | ||
| 1 | +Kernel driver max16064 | |
| 2 | +====================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * Maxim MAX16064 | |
| 6 | + Prefix: 'max16064' | |
| 7 | + Addresses scanned: - | |
| 8 | + Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX16064.pdf | |
| 9 | + | |
| 10 | +Author: Guenter Roeck <guenter.roeck@ericsson.com> | |
| 11 | + | |
| 12 | + | |
| 13 | +Description | |
| 14 | +----------- | |
| 15 | + | |
| 16 | +This driver supports hardware montoring for Maxim MAX16064 Quad Power-Supply | |
| 17 | +Controller with Active-Voltage Output Control and PMBus Interface. | |
| 18 | + | |
| 19 | +The driver is a client driver to the core PMBus driver. | |
| 20 | +Please see Documentation/hwmon/pmbus for details on PMBus client drivers. | |
| 21 | + | |
| 22 | + | |
| 23 | +Usage Notes | |
| 24 | +----------- | |
| 25 | + | |
| 26 | +This driver does not auto-detect devices. You will have to instantiate the | |
| 27 | +devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 28 | +details. | |
| 29 | + | |
| 30 | + | |
| 31 | +Platform data support | |
| 32 | +--------------------- | |
| 33 | + | |
| 34 | +The driver supports standard PMBus driver platform data. | |
| 35 | + | |
| 36 | + | |
| 37 | +Sysfs entries | |
| 38 | +------------- | |
| 39 | + | |
| 40 | +The following attributes are supported. Limits are read-write; all other | |
| 41 | +attributes are read-only. | |
| 42 | + | |
| 43 | +in[1-4]_label "vout[1-4]" | |
| 44 | +in[1-4]_input Measured voltage. From READ_VOUT register. | |
| 45 | +in[1-4]_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. | |
| 46 | +in[1-4]_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. | |
| 47 | +in[1-4]_lcrit Critical minumum Voltage. VOUT_UV_FAULT_LIMIT register. | |
| 48 | +in[1-4]_crit Critical maximum voltage. From VOUT_OV_FAULT_LIMIT register. | |
| 49 | +in[1-4]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. | |
| 50 | +in[1-4]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. | |
| 51 | +in[1-4]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. | |
| 52 | +in[1-4]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. | |
| 53 | + | |
| 54 | +temp1_input Measured temperature. From READ_TEMPERATURE_1 register. | |
| 55 | +temp1_max Maximum temperature. From OT_WARN_LIMIT register. | |
| 56 | +temp1_crit Critical high temperature. From OT_FAULT_LIMIT register. | |
| 57 | +temp1_max_alarm Chip temperature high alarm. Set by comparing | |
| 58 | + READ_TEMPERATURE_1 with OT_WARN_LIMIT if TEMP_OT_WARNING | |
| 59 | + status is set. | |
| 60 | +temp1_crit_alarm Chip temperature critical high alarm. Set by comparing | |
| 61 | + READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT | |
| 62 | + status is set. | |
| @@ -0,0 +1,98 @@ | ||
| 1 | +Kernel driver max16065 | |
| 2 | +====================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * Maxim MAX16065, MAX16066 | |
| 6 | + Prefixes: 'max16065', 'max16066' | |
| 7 | + Addresses scanned: - | |
| 8 | + Datasheet: | |
| 9 | + http://datasheets.maxim-ic.com/en/ds/MAX16065-MAX16066.pdf | |
| 10 | + * Maxim MAX16067 | |
| 11 | + Prefix: 'max16067' | |
| 12 | + Addresses scanned: - | |
| 13 | + Datasheet: | |
| 14 | + http://datasheets.maxim-ic.com/en/ds/MAX16067.pdf | |
| 15 | + * Maxim MAX16068 | |
| 16 | + Prefix: 'max16068' | |
| 17 | + Addresses scanned: - | |
| 18 | + Datasheet: | |
| 19 | + http://datasheets.maxim-ic.com/en/ds/MAX16068.pdf | |
| 20 | + * Maxim MAX16070/MAX16071 | |
| 21 | + Prefixes: 'max16070', 'max16071' | |
| 22 | + Addresses scanned: - | |
| 23 | + Datasheet: | |
| 24 | + http://datasheets.maxim-ic.com/en/ds/MAX16070-MAX16071.pdf | |
| 25 | + | |
| 26 | + | |
| 27 | +Author: Guenter Roeck <guenter.roeck@ericsson.com> | |
| 28 | + | |
| 29 | + | |
| 30 | +Description | |
| 31 | +----------- | |
| 32 | + | |
| 33 | +[From datasheets] The MAX16065/MAX16066 flash-configurable system managers | |
| 34 | +monitor and sequence multiple system voltages. The MAX16065/MAX16066 can also | |
| 35 | +accurately monitor (+/-2.5%) one current channel using a dedicated high-side | |
| 36 | +current-sense amplifier. The MAX16065 manages up to twelve system voltages | |
| 37 | +simultaneously, and the MAX16066 manages up to eight supply voltages. | |
| 38 | + | |
| 39 | +The MAX16067 flash-configurable system manager monitors and sequences multiple | |
| 40 | +system voltages. The MAX16067 manages up to six system voltages simultaneously. | |
| 41 | + | |
| 42 | +The MAX16068 flash-configurable system manager monitors and manages up to six | |
| 43 | +system voltages simultaneously. | |
| 44 | + | |
| 45 | +The MAX16070/MAX16071 flash-configurable system monitors supervise multiple | |
| 46 | +system voltages. The MAX16070/MAX16071 can also accurately monitor (+/-2.5%) | |
| 47 | +one current channel using a dedicated high-side current-sense amplifier. The | |
| 48 | +MAX16070 monitors up to twelve system voltages simultaneously, and the MAX16071 | |
| 49 | +monitors up to eight supply voltages. | |
| 50 | + | |
| 51 | +Each monitored channel has its own low and high critical limits. MAX16065, | |
| 52 | +MAX16066, MAX16070, and MAX16071 support an additional limit which is | |
| 53 | +configurable as either low or high secondary limit. MAX16065, MAX16066, | |
| 54 | +MAX16070, and MAX16071 also support supply current monitoring. | |
| 55 | + | |
| 56 | + | |
| 57 | +Usage Notes | |
| 58 | +----------- | |
| 59 | + | |
| 60 | +This driver does not probe for devices, since there is no register which | |
| 61 | +can be safely used to identify the chip. You will have to instantiate | |
| 62 | +the devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 63 | +details. | |
| 64 | + | |
| 65 | + | |
| 66 | +Sysfs entries | |
| 67 | +------------- | |
| 68 | + | |
| 69 | +in[0-11]_input Input voltage measurements. | |
| 70 | + | |
| 71 | +in12_input Voltage on CSP (Current Sense Positive) pin. | |
| 72 | + Only if the chip supports current sensing and if | |
| 73 | + current sensing is enabled. | |
| 74 | + | |
| 75 | +in[0-11]_min Low warning limit. | |
| 76 | + Supported on MAX16065, MAX16066, MAX16070, and MAX16071 | |
| 77 | + only. | |
| 78 | + | |
| 79 | +in[0-11]_max High warning limit. | |
| 80 | + Supported on MAX16065, MAX16066, MAX16070, and MAX16071 | |
| 81 | + only. | |
| 82 | + | |
| 83 | + Either low or high warning limits are supported | |
| 84 | + (depending on chip configuration), but not both. | |
| 85 | + | |
| 86 | +in[0-11]_lcrit Low critical limit. | |
| 87 | + | |
| 88 | +in[0-11]_crit High critical limit. | |
| 89 | + | |
| 90 | +in[0-11]_alarm Input voltage alarm. | |
| 91 | + | |
| 92 | +curr1_input Current sense input; only if the chip supports current | |
| 93 | + sensing and if current sensing is enabled. | |
| 94 | + Displayed current assumes 0.001 Ohm current sense | |
| 95 | + resistor. | |
| 96 | + | |
| 97 | +curr1_alarm Overcurrent alarm; only if the chip supports current | |
| 98 | + sensing and if current sensing is enabled. | |
| @@ -0,0 +1,79 @@ | ||
| 1 | +Kernel driver max34440 | |
| 2 | +====================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * Maxim MAX34440 | |
| 6 | + Prefixes: 'max34440' | |
| 7 | + Addresses scanned: - | |
| 8 | + Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX34440.pdf | |
| 9 | + * Maxim MAX34441 | |
| 10 | + PMBus 5-Channel Power-Supply Manager and Intelligent Fan Controller | |
| 11 | + Prefixes: 'max34441' | |
| 12 | + Addresses scanned: - | |
| 13 | + Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX34441.pdf | |
| 14 | + | |
| 15 | +Author: Guenter Roeck <guenter.roeck@ericsson.com> | |
| 16 | + | |
| 17 | + | |
| 18 | +Description | |
| 19 | +----------- | |
| 20 | + | |
| 21 | +This driver supports hardware montoring for Maxim MAX34440 PMBus 6-Channel | |
| 22 | +Power-Supply Manager and MAX34441 PMBus 5-Channel Power-Supply Manager | |
| 23 | +and Intelligent Fan Controller. | |
| 24 | + | |
| 25 | +The driver is a client driver to the core PMBus driver. Please see | |
| 26 | +Documentation/hwmon/pmbus for details on PMBus client drivers. | |
| 27 | + | |
| 28 | + | |
| 29 | +Usage Notes | |
| 30 | +----------- | |
| 31 | + | |
| 32 | +This driver does not auto-detect devices. You will have to instantiate the | |
| 33 | +devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 34 | +details. | |
| 35 | + | |
| 36 | + | |
| 37 | +Platform data support | |
| 38 | +--------------------- | |
| 39 | + | |
| 40 | +The driver supports standard PMBus driver platform data. | |
| 41 | + | |
| 42 | + | |
| 43 | +Sysfs entries | |
| 44 | +------------- | |
| 45 | + | |
| 46 | +The following attributes are supported. Limits are read-write; all other | |
| 47 | +attributes are read-only. | |
| 48 | + | |
| 49 | +in[1-6]_label "vout[1-6]". | |
| 50 | +in[1-6]_input Measured voltage. From READ_VOUT register. | |
| 51 | +in[1-6]_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. | |
| 52 | +in[1-6]_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. | |
| 53 | +in[1-6]_lcrit Critical minumum Voltage. VOUT_UV_FAULT_LIMIT register. | |
| 54 | +in[1-6]_crit Critical maximum voltage. From VOUT_OV_FAULT_LIMIT register. | |
| 55 | +in[1-6]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. | |
| 56 | +in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. | |
| 57 | +in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. | |
| 58 | +in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. | |
| 59 | + | |
| 60 | +curr[1-6]_label "iout[1-6]". | |
| 61 | +curr[1-6]_input Measured current. From READ_IOUT register. | |
| 62 | +curr[1-6]_max Maximum current. From IOUT_OC_WARN_LIMIT register. | |
| 63 | +curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. | |
| 64 | +curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status. | |
| 65 | +curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. | |
| 66 | + | |
| 67 | + in6 and curr6 attributes only exist for MAX34440. | |
| 68 | + | |
| 69 | +temp[1-8]_input Measured temperatures. From READ_TEMPERATURE_1 register. | |
| 70 | + temp1 is the chip's internal temperature. temp2..temp5 | |
| 71 | + are remote I2C temperature sensors. For MAX34441, temp6 | |
| 72 | + is a remote thermal-diode sensor. For MAX34440, temp6..8 | |
| 73 | + are remote I2C temperature sensors. | |
| 74 | +temp[1-8]_max Maximum temperature. From OT_WARN_LIMIT register. | |
| 75 | +temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register. | |
| 76 | +temp[1-8]_max_alarm Temperature high alarm. | |
| 77 | +temp[1-8]_crit_alarm Temperature critical high alarm. | |
| 78 | + | |
| 79 | + temp7 and temp8 attributes only exist for MAX34440. | |
| @@ -0,0 +1,21 @@ | ||
| 1 | +Kernel driver max6642 | |
| 2 | +===================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * Maxim MAX6642 | |
| 6 | + Prefix: 'max6642' | |
| 7 | + Addresses scanned: I2C 0x48-0x4f | |
| 8 | + Datasheet: Publicly available at the Maxim website | |
| 9 | + http://datasheets.maxim-ic.com/en/ds/MAX6642.pdf | |
| 10 | + | |
| 11 | +Authors: | |
| 12 | + Per Dalen <per.dalen@appeartv.com> | |
| 13 | + | |
| 14 | +Description | |
| 15 | +----------- | |
| 16 | + | |
| 17 | +The MAX6642 is a digital temperature sensor. It senses its own temperature as | |
| 18 | +well as the temperature on one external diode. | |
| 19 | + | |
| 20 | +All temperature values are given in degrees Celsius. Resolution | |
| 21 | +is 0.25 degree for the local temperature and for the remote temperature. | |
| @@ -2,9 +2,13 @@ Kernel driver max6650 · 1 unmodified line | ||
| 2 | 2 | ===================== |
| 3 | 3 | |
| 4 | 4 | Supported chips: |
| 5 | − * Maxim 6650 / 6651 | |
| 5 | + * Maxim MAX6650 | |
| 6 | 6 | Prefix: 'max6650' |
| 7 | − Addresses scanned: I2C 0x1b, 0x1f, 0x48, 0x4b | |
| 7 | + Addresses scanned: none | |
| 8 | + Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf | |
| 9 | + * Maxim MAX6651 | |
| 10 | + Prefix: 'max6651' | |
| 11 | + Addresses scanned: none | |
| 8 | 12 | Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf |
| 9 | 13 | |
| 10 | 14 | Authors: |
| @@ -15,10 +19,10 @@ Authors: · 4 unmodified lines | ||
| 15 | 19 | Description |
| 16 | 20 | ----------- |
| 17 | 21 | |
| 18 | −This driver implements support for the Maxim 6650/6651 | |
| 22 | +This driver implements support for the Maxim MAX6650 and MAX6651. | |
| 19 | 23 | |
| 20 | −The 2 devices are very similar, but the Maxim 6550 has a reduced feature | |
| 21 | −set, e.g. only one fan-input, instead of 4 for the 6651. | |
| 24 | +The 2 devices are very similar, but the MAX6550 has a reduced feature | |
| 25 | +set, e.g. only one fan-input, instead of 4 for the MAX6651. | |
| 22 | 26 | |
| 23 | 27 | The driver is not able to distinguish between the 2 devices. |
| 24 | 28 | |
| @@ -36,6 +40,13 @@ fan1_div rw sets the speed range the inputs can handle. Legal · 11 unmodified lines | ||
| 36 | 40 | values are 1, 2, 4, and 8. Use lower values for |
| 37 | 41 | faster fans. |
| 38 | 42 | |
| 43 | +Usage notes | |
| 44 | +----------- | |
| 45 | + | |
| 46 | +This driver does not auto-detect devices. You will have to instantiate the | |
| 47 | +devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 48 | +details. | |
| 49 | + | |
| 39 | 50 | Module parameters |
| 40 | 51 | ----------------- |
| 41 | 52 | |
| @@ -0,0 +1,69 @@ | ||
| 1 | +Kernel driver max8688 | |
| 2 | +===================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * Maxim MAX8688 | |
| 6 | + Prefix: 'max8688' | |
| 7 | + Addresses scanned: - | |
| 8 | + Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX8688.pdf | |
| 9 | + | |
| 10 | +Author: Guenter Roeck <guenter.roeck@ericsson.com> | |
| 11 | + | |
| 12 | + | |
| 13 | +Description | |
| 14 | +----------- | |
| 15 | + | |
| 16 | +This driver supports hardware montoring for Maxim MAX8688 Digital Power-Supply | |
| 17 | +Controller/Monitor with PMBus Interface. | |
| 18 | + | |
| 19 | +The driver is a client driver to the core PMBus driver. Please see | |
| 20 | +Documentation/hwmon/pmbus for details on PMBus client drivers. | |
| 21 | + | |
| 22 | + | |
| 23 | +Usage Notes | |
| 24 | +----------- | |
| 25 | + | |
| 26 | +This driver does not auto-detect devices. You will have to instantiate the | |
| 27 | +devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 28 | +details. | |
| 29 | + | |
| 30 | + | |
| 31 | +Platform data support | |
| 32 | +--------------------- | |
| 33 | + | |
| 34 | +The driver supports standard PMBus driver platform data. | |
| 35 | + | |
| 36 | + | |
| 37 | +Sysfs entries | |
| 38 | +------------- | |
| 39 | + | |
| 40 | +The following attributes are supported. Limits are read-write; all other | |
| 41 | +attributes are read-only. | |
| 42 | + | |
| 43 | +in1_label "vout1" | |
| 44 | +in1_input Measured voltage. From READ_VOUT register. | |
| 45 | +in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. | |
| 46 | +in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. | |
| 47 | +in1_lcrit Critical minumum Voltage. VOUT_UV_FAULT_LIMIT register. | |
| 48 | +in1_crit Critical maximum voltage. From VOUT_OV_FAULT_LIMIT register. | |
| 49 | +in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. | |
| 50 | +in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. | |
| 51 | +in1_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. | |
| 52 | +in1_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. | |
| 53 | + | |
| 54 | +curr1_label "iout1" | |
| 55 | +curr1_input Measured current. From READ_IOUT register. | |
| 56 | +curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register. | |
| 57 | +curr1_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. | |
| 58 | +curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register. | |
| 59 | +curr1_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. | |
| 60 | + | |
| 61 | +temp1_input Measured temperature. From READ_TEMPERATURE_1 register. | |
| 62 | +temp1_max Maximum temperature. From OT_WARN_LIMIT register. | |
| 63 | +temp1_crit Critical high temperature. From OT_FAULT_LIMIT register. | |
| 64 | +temp1_max_alarm Chip temperature high alarm. Set by comparing | |
| 65 | + READ_TEMPERATURE_1 with OT_WARN_LIMIT if TEMP_OT_WARNING | |
| 66 | + status is set. | |
| 67 | +temp1_crit_alarm Chip temperature critical high alarm. Set by comparing | |
| 68 | + READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT | |
| 69 | + status is set. | |
| @@ -1,36 +0,0 @@ | ||
| 1 | −Kernel driver pkgtemp | |
| 2 | −====================== | |
| 3 | − | |
| 4 | −Supported chips: | |
| 5 | − * Intel family | |
| 6 | − Prefix: 'pkgtemp' | |
| 7 | − CPUID: | |
| 8 | − Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual | |
| 9 | − Volume 3A: System Programming Guide | |
| 10 | − | |
| 11 | −Author: Fenghua Yu | |
| 12 | − | |
| 13 | −Description | |
| 14 | −----------- | |
| 15 | − | |
| 16 | −This driver permits reading package level temperature sensor embedded inside | |
| 17 | −Intel CPU package. The sensors can be in core, uncore, memory controller, or | |
| 18 | −other components in a package. The feature is first implemented in Intel Sandy | |
| 19 | −Bridge platform. | |
| 20 | − | |
| 21 | −Temperature is measured in degrees Celsius and measurement resolution is | |
| 22 | −1 degree C. Valid temperatures are from 0 to TjMax degrees C, because the actual | |
| 23 | −value of temperature register is in fact a delta from TjMax. | |
| 24 | − | |
| 25 | −Temperature known as TjMax is the maximum junction temperature of package. | |
| 26 | −We get this from MSR_IA32_TEMPERATURE_TARGET. If the MSR is not accessible, | |
| 27 | −we define TjMax as 100 degrees Celsius. At this temperature, protection | |
| 28 | −mechanism will perform actions to forcibly cool down the package. Alarm | |
| 29 | −may be raised, if the temperature grows enough (more than TjMax) to trigger | |
| 30 | −the Out-Of-Spec bit. Following table summarizes the exported sysfs files: | |
| 31 | − | |
| 32 | −temp1_input - Package temperature (in millidegrees Celsius). | |
| 33 | −temp1_max - All cooling devices should be turned on. | |
| 34 | −temp1_crit - Maximum junction temperature (in millidegrees Celsius). | |
| 35 | −temp1_crit_alarm - Set when Out-of-spec bit is set, never clears. | |
| 36 | − Correct CPU operation is no longer guaranteed. | |
| @@ -13,26 +13,6 @@ Supported chips: · 12 unmodified lines | ||
| 13 | 13 | Prefix: 'ltc2978' |
| 14 | 14 | Addresses scanned: - |
| 15 | 15 | Datasheet: http://cds.linear.com/docs/Datasheet/2978fa.pdf |
| 16 | − * Maxim MAX16064 | |
| 17 | − Quad Power-Supply Controller | |
| 18 | − Prefix: 'max16064' | |
| 19 | − Addresses scanned: - | |
| 20 | − Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX16064.pdf | |
| 21 | − * Maxim MAX34440 | |
| 22 | − PMBus 6-Channel Power-Supply Manager | |
| 23 | − Prefixes: 'max34440' | |
| 24 | − Addresses scanned: - | |
| 25 | − Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX34440.pdf | |
| 26 | − * Maxim MAX34441 | |
| 27 | − PMBus 5-Channel Power-Supply Manager and Intelligent Fan Controller | |
| 28 | − Prefixes: 'max34441' | |
| 29 | − Addresses scanned: - | |
| 30 | − Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX34441.pdf | |
| 31 | − * Maxim MAX8688 | |
| 32 | − Digital Power-Supply Controller/Monitor | |
| 33 | − Prefix: 'max8688' | |
| 34 | − Addresses scanned: - | |
| 35 | − Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX8688.pdf | |
| 36 | 16 | * Generic PMBus devices |
| 37 | 17 | Prefix: 'pmbus' |
| 38 | 18 | Addresses scanned: - |
| @@ -150,11 +130,11 @@ The following attributes are supported. Limits are read-write; all other · 111 unmodified lines | ||
| 150 | 130 | attributes are read-only. |
| 151 | 131 | |
| 152 | 132 | inX_input Measured voltage. From READ_VIN or READ_VOUT register. |
| 153 | −inX_min Minumum Voltage. | |
| 133 | +inX_min Minimum Voltage. | |
| 154 | 134 | From VIN_UV_WARN_LIMIT or VOUT_UV_WARN_LIMIT register. |
| 155 | 135 | inX_max Maximum voltage. |
| 156 | 136 | From VIN_OV_WARN_LIMIT or VOUT_OV_WARN_LIMIT register. |
| 157 | −inX_lcrit Critical minumum Voltage. | |
| 137 | +inX_lcrit Critical minimum Voltage. | |
| 158 | 138 | From VIN_UV_FAULT_LIMIT or VOUT_UV_FAULT_LIMIT register. |
| 159 | 139 | inX_crit Critical maximum voltage. |
| 160 | 140 | From VIN_OV_FAULT_LIMIT or VOUT_OV_FAULT_LIMIT register. |
| @@ -169,17 +149,19 @@ inX_label "vin", "vcap", or "voutY" · 8 unmodified lines | ||
| 169 | 149 | currX_input Measured current. From READ_IIN or READ_IOUT register. |
| 170 | 150 | currX_max Maximum current. |
| 171 | 151 | From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT register. |
| 172 | −currX_lcrit Critical minumum output current. | |
| 152 | +currX_lcrit Critical minimum output current. | |
| 173 | 153 | From IOUT_UC_FAULT_LIMIT register. |
| 174 | 154 | currX_crit Critical maximum current. |
| 175 | 155 | From IIN_OC_FAULT_LIMIT or IOUT_OC_FAULT_LIMIT register. |
| 176 | 156 | currX_alarm Current high alarm. |
| 177 | 157 | From IIN_OC_WARNING or IOUT_OC_WARNING status. |
| 158 | +currX_max_alarm Current high alarm. | |
| 159 | + From IIN_OC_WARN_LIMIT or IOUT_OC_WARN_LIMIT status. | |
| 178 | 160 | currX_lcrit_alarm Output current critical low alarm. |
| 179 | 161 | From IOUT_UC_FAULT status. |
| 180 | 162 | currX_crit_alarm Current critical high alarm. |
| 181 | 163 | From IIN_OC_FAULT or IOUT_OC_FAULT status. |
| 182 | −currX_label "iin" or "vinY" | |
| 164 | +currX_label "iin" or "ioutY" | |
| 183 | 165 | |
| 184 | 166 | powerX_input Measured power. From READ_PIN or READ_POUT register. |
| 185 | 167 | powerX_cap Output power cap. From POUT_MAX register. |
| @@ -193,13 +175,13 @@ powerX_crit_alarm Output power critical high alarm. · 7 unmodified lines | ||
| 193 | 175 | From POUT_OP_FAULT status. |
| 194 | 176 | powerX_label "pin" or "poutY" |
| 195 | 177 | |
| 196 | −tempX_input Measured tempererature. | |
| 178 | +tempX_input Measured temperature. | |
| 197 | 179 | From READ_TEMPERATURE_X register. |
| 198 | −tempX_min Mimimum tempererature. From UT_WARN_LIMIT register. | |
| 199 | −tempX_max Maximum tempererature. From OT_WARN_LIMIT register. | |
| 200 | −tempX_lcrit Critical low tempererature. | |
| 180 | +tempX_min Mimimum temperature. From UT_WARN_LIMIT register. | |
| 181 | +tempX_max Maximum temperature. From OT_WARN_LIMIT register. | |
| 182 | +tempX_lcrit Critical low temperature. | |
| 201 | 183 | From UT_FAULT_LIMIT register. |
| 202 | −tempX_crit Critical high tempererature. | |
| 184 | +tempX_crit Critical high temperature. | |
| 203 | 185 | From OT_FAULT_LIMIT register. |
| 204 | 186 | tempX_min_alarm Chip temperature low alarm. Set by comparing |
| 205 | 187 | READ_TEMPERATURE_X with UT_WARN_LIMIT if |
| @@ -0,0 +1,74 @@ | ||
| 1 | +Kernel driver sht15 | |
| 2 | +=================== | |
| 3 | + | |
| 4 | +Authors: | |
| 5 | + * Wouter Horre | |
| 6 | + * Jonathan Cameron | |
| 7 | + * Vivien Didelot <vivien.didelot@savoirfairelinux.com> | |
| 8 | + * Jerome Oufella <jerome.oufella@savoirfairelinux.com> | |
| 9 | + | |
| 10 | +Supported chips: | |
| 11 | + * Sensirion SHT10 | |
| 12 | + Prefix: 'sht10' | |
| 13 | + | |
| 14 | + * Sensirion SHT11 | |
| 15 | + Prefix: 'sht11' | |
| 16 | + | |
| 17 | + * Sensirion SHT15 | |
| 18 | + Prefix: 'sht15' | |
| 19 | + | |
| 20 | + * Sensirion SHT71 | |
| 21 | + Prefix: 'sht71' | |
| 22 | + | |
| 23 | + * Sensirion SHT75 | |
| 24 | + Prefix: 'sht75' | |
| 25 | + | |
| 26 | +Datasheet: Publicly available at the Sensirion website | |
| 27 | +http://www.sensirion.ch/en/pdf/product_information/Datasheet-humidity-sensor-SHT1x.pdf | |
| 28 | + | |
| 29 | +Description | |
| 30 | +----------- | |
| 31 | + | |
| 32 | +The SHT10, SHT11, SHT15, SHT71, and SHT75 are humidity and temperature | |
| 33 | +sensors. | |
| 34 | + | |
| 35 | +The devices communicate using two GPIO lines. | |
| 36 | + | |
| 37 | +Supported resolutions for the measurements are 14 bits for temperature and 12 | |
| 38 | +bits for humidity, or 12 bits for temperature and 8 bits for humidity. | |
| 39 | + | |
| 40 | +The humidity calibration coefficients are programmed into an OTP memory on the | |
| 41 | +chip. These coefficients are used to internally calibrate the signals from the | |
| 42 | +sensors. Disabling the reload of those coefficients allows saving 10ms for each | |
| 43 | +measurement and decrease power consumption, while loosing on precision. | |
| 44 | + | |
| 45 | +Some options may be set directly in the sht15_platform_data structure | |
| 46 | +or via sysfs attributes. | |
| 47 | + | |
| 48 | +Notes: | |
| 49 | + * The regulator supply name is set to "vcc". | |
| 50 | + * If a CRC validation fails, a soft reset command is sent, which resets | |
| 51 | + status register to its hardware default value, but the driver will try to | |
| 52 | + restore the previous device configuration. | |
| 53 | + | |
| 54 | +Platform data | |
| 55 | +------------- | |
| 56 | + | |
| 57 | +* checksum: | |
| 58 | + set it to true to enable CRC validation of the readings (default to false). | |
| 59 | +* no_otp_reload: | |
| 60 | + flag to indicate not to reload from OTP (default to false). | |
| 61 | +* low_resolution: | |
| 62 | + flag to indicate the temp/humidity resolution to use (default to false). | |
| 63 | + | |
| 64 | +Sysfs interface | |
| 65 | +--------------- | |
| 66 | + | |
| 67 | +* temp1_input: temperature input | |
| 68 | +* humidity1_input: humidity input | |
| 69 | +* heater_enable: write 1 in this attribute to enable the on-chip heater, | |
| 70 | + 0 to disable it. Be careful not to enable the heater | |
| 71 | + for too long. | |
| 72 | +* temp1_fault: if 1, this means that the voltage is low (below 2.47V) and | |
| 73 | + measurement may be invalid. | |
| 74 | +* humidity1_fault: same as temp1_fault. | |
| @@ -150,8 +150,8 @@ in8_crit_alarm Channel F critical alarm · 149 unmodified lines | ||
| 150 | 150 | in9_crit_alarm AIN1 critical alarm |
| 151 | 151 | in10_crit_alarm AIN2 critical alarm |
| 152 | 152 | |
| 153 | −temp1_input Chip tempererature | |
| 154 | −temp1_min Mimimum chip tempererature | |
| 155 | −temp1_max Maximum chip tempererature | |
| 156 | −temp1_crit Critical chip tempererature | |
| 153 | +temp1_input Chip temperature | |
| 154 | +temp1_min Mimimum chip temperature | |
| 155 | +temp1_max Maximum chip temperature | |
| 156 | +temp1_crit Critical chip temperature | |
| 157 | 157 | temp1_crit_alarm Temperature critical alarm |
| @@ -0,0 +1,109 @@ | ||
| 1 | + How to Get Your Patch Accepted Into the Hwmon Subsystem | |
| 2 | + ------------------------------------------------------- | |
| 3 | + | |
| 4 | +This text is is a collection of suggestions for people writing patches or | |
| 5 | +drivers for the hwmon subsystem. Following these suggestions will greatly | |
| 6 | +increase the chances of your change being accepted. | |
| 7 | + | |
| 8 | + | |
| 9 | +1. General | |
| 10 | +---------- | |
| 11 | + | |
| 12 | +* It should be unnecessary to mention, but please read and follow | |
| 13 | + Documentation/SubmitChecklist | |
| 14 | + Documentation/SubmittingDrivers | |
| 15 | + Documentation/SubmittingPatches | |
| 16 | + Documentation/CodingStyle | |
| 17 | + | |
| 18 | +* If your patch generates checkpatch warnings, please refrain from explanations | |
| 19 | + such as "I don't like that coding style". Keep in mind that each unnecessary | |
| 20 | + warning helps hiding a real problem. If you don't like the kernel coding | |
| 21 | + style, don't write kernel drivers. | |
| 22 | + | |
| 23 | +* Please test your patch thoroughly. We are not your test group. | |
| 24 | + Sometimes a patch can not or not completely be tested because of missing | |
| 25 | + hardware. In such cases, you should test-build the code on at least one | |
| 26 | + architecture. If run-time testing was not achieved, it should be written | |
| 27 | + explicitly below the patch header. | |
| 28 | + | |
| 29 | +* If your patch (or the driver) is affected by configuration options such as | |
| 30 | + CONFIG_SMP or CONFIG_HOTPLUG, make sure it compiles for all configuration | |
| 31 | + variants. | |
| 32 | + | |
| 33 | + | |
| 34 | +2. Adding functionality to existing drivers | |
| 35 | +------------------------------------------- | |
| 36 | + | |
| 37 | +* Make sure the documentation in Documentation/hwmon/<driver_name> is up to | |
| 38 | + date. | |
| 39 | + | |
| 40 | +* Make sure the information in Kconfig is up to date. | |
| 41 | + | |
| 42 | +* If the added functionality requires some cleanup or structural changes, split | |
| 43 | + your patch into a cleanup part and the actual addition. This makes it easier | |
| 44 | + to review your changes, and to bisect any resulting problems. | |
| 45 | + | |
| 46 | +* Never mix bug fixes, cleanup, and functional enhancements in a single patch. | |
| 47 | + | |
| 48 | + | |
| 49 | +3. New drivers | |
| 50 | +-------------- | |
| 51 | + | |
| 52 | +* Running your patch or driver file(s) through checkpatch does not mean its | |
| 53 | + formatting is clean. If unsure about formatting in your new driver, run it | |
| 54 | + through Lindent. Lindent is not perfect, and you may have to do some minor | |
| 55 | + cleanup, but it is a good start. | |
| 56 | + | |
| 57 | +* Consider adding yourself to MAINTAINERS. | |
| 58 | + | |
| 59 | +* Document the driver in Documentation/hwmon/<driver_name>. | |
| 60 | + | |
| 61 | +* Add the driver to Kconfig and Makefile in alphabetical order. | |
| 62 | + | |
| 63 | +* Make sure that all dependencies are listed in Kconfig. For new drivers, it | |
| 64 | + is most likely prudent to add a dependency on EXPERIMENTAL. | |
| 65 | + | |
| 66 | +* Avoid forward declarations if you can. Rearrange the code if necessary. | |
| 67 | + | |
| 68 | +* Avoid calculations in macros and macro-generated functions. While such macros | |
| 69 | + may save a line or so in the source, it obfuscates the code and makes code | |
| 70 | + review more difficult. It may also result in code which is more complicated | |
| 71 | + than necessary. Use inline functions or just regular functions instead. | |
| 72 | + | |
| 73 | +* If the driver has a detect function, make sure it is silent. Debug messages | |
| 74 | + and messages printed after a successful detection are acceptable, but it | |
| 75 | + must not print messages such as "Chip XXX not found/supported". | |
| 76 | + | |
| 77 | + Keep in mind that the detect function will run for all drivers supporting an | |
| 78 | + address if a chip is detected on that address. Unnecessary messages will just | |
| 79 | + pollute the kernel log and not provide any value. | |
| 80 | + | |
| 81 | +* Provide a detect function if and only if a chip can be detected reliably. | |
| 82 | + | |
| 83 | +* Avoid writing to chip registers in the detect function. If you have to write, | |
| 84 | + only do it after you have already gathered enough data to be certain that the | |
| 85 | + detection is going to be successful. | |
| 86 | + | |
| 87 | + Keep in mind that the chip might not be what your driver believes it is, and | |
| 88 | + writing to it might cause a bad misconfiguration. | |
| 89 | + | |
| 90 | +* Make sure there are no race conditions in the probe function. Specifically, | |
| 91 | + completely initialize your chip first, then create sysfs entries and register | |
| 92 | + with the hwmon subsystem. | |
| 93 | + | |
| 94 | +* Do not provide support for deprecated sysfs attributes. | |
| 95 | + | |
| 96 | +* Do not create non-standard attributes unless really needed. If you have to use | |
| 97 | + non-standard attributes, or you believe you do, discuss it on the mailing list | |
| 98 | + first. Either case, provide a detailed explanation why you need the | |
| 99 | + non-standard attribute(s). | |
| 100 | + Standard attributes are specified in Documentation/hwmon/sysfs-interface. | |
| 101 | + | |
| 102 | +* When deciding which sysfs attributes to support, look at the chip's | |
| 103 | + capabilities. While we do not expect your driver to support everything the | |
| 104 | + chip may offer, it should at least support all limits and alarms. | |
| 105 | + | |
| 106 | +* Last but not least, please check if a driver for your chip already exists | |
| 107 | + before starting to write a new driver. Especially for temperature sensors, | |
| 108 | + new chips are often variants of previously released chips. In some cases, | |
| 109 | + a presumably new chip may simply have been relabeled. | |
| @@ -579,7 +579,7 @@ channel should not be trusted. · 578 unmodified lines | ||
| 579 | 579 | fan[1-*]_fault |
| 580 | 580 | temp[1-*]_fault |
| 581 | 581 | Input fault condition |
| 582 | − 0: no fault occured | |
| 582 | + 0: no fault occurred | |
| 583 | 583 | 1: fault condition |
| 584 | 584 | RO |
| 585 | 585 | |
| @@ -0,0 +1,110 @@ | ||
| 1 | +Kernel driver ucd9000 | |
| 2 | +===================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * TI UCD90120, UCD90124, UCD9090, and UCD90910 | |
| 6 | + Prefixes: 'ucd90120', 'ucd90124', 'ucd9090', 'ucd90910' | |
| 7 | + Addresses scanned: - | |
| 8 | + Datasheets: | |
| 9 | + http://focus.ti.com/lit/ds/symlink/ucd90120.pdf | |
| 10 | + http://focus.ti.com/lit/ds/symlink/ucd90124.pdf | |
| 11 | + http://focus.ti.com/lit/ds/symlink/ucd9090.pdf | |
| 12 | + http://focus.ti.com/lit/ds/symlink/ucd90910.pdf | |
| 13 | + | |
| 14 | +Author: Guenter Roeck <guenter.roeck@ericsson.com> | |
| 15 | + | |
| 16 | + | |
| 17 | +Description | |
| 18 | +----------- | |
| 19 | + | |
| 20 | +From datasheets: | |
| 21 | + | |
| 22 | +The UCD90120 Power Supply Sequencer and System Health Monitor monitors and | |
| 23 | +sequences up to 12 independent voltage rails. The device integrates a 12-bit | |
| 24 | +ADC with a 2.5V internal reference for monitoring up to 13 power supply voltage, | |
| 25 | +current, or temperature inputs. | |
| 26 | + | |
| 27 | +The UCD90124 is a 12-rail PMBus/I2C addressable power-supply sequencer and | |
| 28 | +system-health monitor. The device integrates a 12-bit ADC for monitoring up to | |
| 29 | +13 power-supply voltage, current, or temperature inputs. Twenty-six GPIO pins | |
| 30 | +can be used for power supply enables, power-on reset signals, external | |
| 31 | +interrupts, cascading, or other system functions. Twelve of these pins offer PWM | |
| 32 | +functionality. Using these pins, the UCD90124 offers support for fan control, | |
| 33 | +margining, and general-purpose PWM functions. | |
| 34 | + | |
| 35 | +The UCD9090 is a 10-rail PMBus/I2C addressable power-supply sequencer and | |
| 36 | +monitor. The device integrates a 12-bit ADC for monitoring up to 10 power-supply | |
| 37 | +voltage inputs. Twenty-three GPIO pins can be used for power supply enables, | |
| 38 | +power-on reset signals, external interrupts, cascading, or other system | |
| 39 | +functions. Ten of these pins offer PWM functionality. Using these pins, the | |
| 40 | +UCD9090 offers support for margining, and general-purpose PWM functions. | |
| 41 | + | |
| 42 | +The UCD90910 is a ten-rail I2C / PMBus addressable power-supply sequencer and | |
| 43 | +system-health monitor. The device integrates a 12-bit ADC for monitoring up to | |
| 44 | +13 power-supply voltage, current, or temperature inputs. | |
| 45 | + | |
| 46 | +This driver is a client driver to the core PMBus driver. Please see | |
| 47 | +Documentation/hwmon/pmbus for details on PMBus client drivers. | |
| 48 | + | |
| 49 | + | |
| 50 | +Usage Notes | |
| 51 | +----------- | |
| 52 | + | |
| 53 | +This driver does not auto-detect devices. You will have to instantiate the | |
| 54 | +devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 55 | +details. | |
| 56 | + | |
| 57 | + | |
| 58 | +Platform data support | |
| 59 | +--------------------- | |
| 60 | + | |
| 61 | +The driver supports standard PMBus driver platform data. Please see | |
| 62 | +Documentation/hwmon/pmbus for details. | |
| 63 | + | |
| 64 | + | |
| 65 | +Sysfs entries | |
| 66 | +------------- | |
| 67 | + | |
| 68 | +The following attributes are supported. Limits are read-write; all other | |
| 69 | +attributes are read-only. | |
| 70 | + | |
| 71 | +in[1-12]_label "vout[1-12]". | |
| 72 | +in[1-12]_input Measured voltage. From READ_VOUT register. | |
| 73 | +in[1-12]_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. | |
| 74 | +in[1-12]_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. | |
| 75 | +in[1-12]_lcrit Critical minumum Voltage. VOUT_UV_FAULT_LIMIT register. | |
| 76 | +in[1-12]_crit Critical maximum voltage. From VOUT_OV_FAULT_LIMIT register. | |
| 77 | +in[1-12]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. | |
| 78 | +in[1-12]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. | |
| 79 | +in[1-12]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. | |
| 80 | +in[1-12]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. | |
| 81 | + | |
| 82 | +curr[1-12]_label "iout[1-12]". | |
| 83 | +curr[1-12]_input Measured current. From READ_IOUT register. | |
| 84 | +curr[1-12]_max Maximum current. From IOUT_OC_WARN_LIMIT register. | |
| 85 | +curr[1-12]_lcrit Critical minumum output current. From IOUT_UC_FAULT_LIMIT | |
| 86 | + register. | |
| 87 | +curr[1-12]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. | |
| 88 | +curr[1-12]_max_alarm Current high alarm. From IOUT_OC_WARNING status. | |
| 89 | +curr[1-12]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. | |
| 90 | + | |
| 91 | + For each attribute index, either voltage or current is | |
| 92 | + reported, but not both. If voltage or current is | |
| 93 | + reported depends on the chip configuration. | |
| 94 | + | |
| 95 | +temp[1-2]_input Measured temperatures. From READ_TEMPERATURE_1 and | |
| 96 | + READ_TEMPERATURE_2 registers. | |
| 97 | +temp[1-2]_max Maximum temperature. From OT_WARN_LIMIT register. | |
| 98 | +temp[1-2]_crit Critical high temperature. From OT_FAULT_LIMIT register. | |
| 99 | +temp[1-2]_max_alarm Temperature high alarm. | |
| 100 | +temp[1-2]_crit_alarm Temperature critical high alarm. | |
| 101 | + | |
| 102 | +fan[1-4]_input Fan RPM. | |
| 103 | +fan[1-4]_alarm Fan alarm. | |
| 104 | +fan[1-4]_fault Fan fault. | |
| 105 | + | |
| 106 | + Fan attributes are only available on chips supporting | |
| 107 | + fan control (UCD90124, UCD90910). Attribute files are | |
| 108 | + created only for enabled fans. | |
| 109 | + Note that even though UCD90910 supports up to 10 fans, | |
| 110 | + only up to four fans are currently supported. | |
| @@ -0,0 +1,112 @@ | ||
| 1 | +Kernel driver ucd9200 | |
| 2 | +===================== | |
| 3 | + | |
| 4 | +Supported chips: | |
| 5 | + * TI UCD9220, UCD9222, UCD9224, UCD9240, UCD9244, UCD9246, and UCD9248 | |
| 6 | + Prefixes: 'ucd9220', 'ucd9222', 'ucd9224', 'ucd9240', 'ucd9244', 'ucd9246', | |
| 7 | + 'ucd9248' | |
| 8 | + Addresses scanned: - | |
| 9 | + Datasheets: | |
| 10 | + http://focus.ti.com/lit/ds/symlink/ucd9220.pdf | |
| 11 | + http://focus.ti.com/lit/ds/symlink/ucd9222.pdf | |
| 12 | + http://focus.ti.com/lit/ds/symlink/ucd9224.pdf | |
| 13 | + http://focus.ti.com/lit/ds/symlink/ucd9240.pdf | |
| 14 | + http://focus.ti.com/lit/ds/symlink/ucd9244.pdf | |
| 15 | + http://focus.ti.com/lit/ds/symlink/ucd9246.pdf | |
| 16 | + http://focus.ti.com/lit/ds/symlink/ucd9248.pdf | |
| 17 | + | |
| 18 | +Author: Guenter Roeck <guenter.roeck@ericsson.com> | |
| 19 | + | |
| 20 | + | |
| 21 | +Description | |
| 22 | +----------- | |
| 23 | + | |
| 24 | +[From datasheets] UCD9220, UCD9222, UCD9224, UCD9240, UCD9244, UCD9246, and | |
| 25 | +UCD9248 are multi-rail, multi-phase synchronous buck digital PWM controllers | |
| 26 | +designed for non-isolated DC/DC power applications. The devices integrate | |
| 27 | +dedicated circuitry for DC/DC loop management with flash memory and a serial | |
| 28 | +interface to support configuration, monitoring and management. | |
| 29 | + | |
| 30 | +This driver is a client driver to the core PMBus driver. Please see | |
| 31 | +Documentation/hwmon/pmbus for details on PMBus client drivers. | |
| 32 | + | |
| 33 | + | |
| 34 | +Usage Notes | |
| 35 | +----------- | |
| 36 | + | |
| 37 | +This driver does not auto-detect devices. You will have to instantiate the | |
| 38 | +devices explicitly. Please see Documentation/i2c/instantiating-devices for | |
| 39 | +details. | |
| 40 | + | |
| 41 | + | |
| 42 | +Platform data support | |
| 43 | +--------------------- | |
| 44 | + | |
| 45 | +The driver supports standard PMBus driver platform data. Please see | |
| 46 | +Documentation/hwmon/pmbus for details. | |
| 47 | + | |
| 48 | + | |
| 49 | +Sysfs entries | |
| 50 | +------------- | |
| 51 | + | |
| 52 | +The following attributes are supported. Limits are read-write; all other | |
| 53 | +attributes are read-only. | |
| 54 | + | |
| 55 | +in1_label "vin". | |
| 56 | +in1_input Measured voltage. From READ_VIN register. | |
| 57 | +in1_min Minumum Voltage. From VIN_UV_WARN_LIMIT register. | |
| 58 | +in1_max Maximum voltage. From VIN_OV_WARN_LIMIT register. | |
| 59 | +in1_lcrit Critical minumum Voltage. VIN_UV_FAULT_LIMIT register. | |
| 60 | +in1_crit Critical maximum voltage. From VIN_OV_FAULT_LIMIT register. | |
| 61 | +in1_min_alarm Voltage low alarm. From VIN_UV_WARNING status. | |
| 62 | +in1_max_alarm Voltage high alarm. From VIN_OV_WARNING status. | |
| 63 | +in1_lcrit_alarm Voltage critical low alarm. From VIN_UV_FAULT status. | |
| 64 | +in1_crit_alarm Voltage critical high alarm. From VIN_OV_FAULT status. | |
| 65 | + | |
| 66 | +in[2-5]_label "vout[1-4]". | |
| 67 | +in[2-5]_input Measured voltage. From READ_VOUT register. | |
| 68 | +in[2-5]_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. | |
| 69 | +in[2-5]_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. | |
| 70 | +in[2-5]_lcrit Critical minumum Voltage. VOUT_UV_FAULT_LIMIT register. | |
| 71 | +in[2-5]_crit Critical maximum voltage. From VOUT_OV_FAULT_LIMIT register. | |
| 72 | +in[2-5]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. | |
| 73 | +in[2-5]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. | |
| 74 | +in[2-5]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. | |
| 75 | +in[2-5]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. | |
| 76 | + | |
| 77 | +curr1_label "iin". | |
| 78 | +curr1_input Measured current. From READ_IIN register. | |
| 79 | + | |
| 80 | +curr[2-5]_label "iout[1-4]". | |
| 81 | +curr[2-5]_input Measured current. From READ_IOUT register. | |
| 82 | +curr[2-5]_max Maximum current. From IOUT_OC_WARN_LIMIT register. | |
| 83 | +curr[2-5]_lcrit Critical minumum output current. From IOUT_UC_FAULT_LIMIT | |
| 84 | + register. | |
| 85 | +curr[2-5]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. | |
| 86 | +curr[2-5]_max_alarm Current high alarm. From IOUT_OC_WARNING status. | |
| 87 | +curr[2-5]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. | |
| 88 | + | |
| 89 | +power1_input Measured input power. From READ_PIN register. | |
| 90 | +power1_label "pin" | |
| 91 | + | |
| 92 | +power[2-5]_input Measured output power. From READ_POUT register. | |
| 93 | +power[2-5]_label "pout[1-4]" | |
| 94 | + | |
| 95 | + The number of output voltage, current, and power | |
| 96 | + attribute sets is determined by the number of enabled | |
| 97 | + rails. See chip datasheets for details. | |
| 98 | + | |
| 99 | +temp[1-5]_input Measured temperatures. From READ_TEMPERATURE_1 and | |
| 100 | + READ_TEMPERATURE_2 registers. | |
| 101 | + temp1 is the chip internal temperature. temp[2-5] are | |
| 102 | + rail temperatures. temp[2-5] attributes are only | |
| 103 | + created for enabled rails. See chip datasheets for | |
| 104 | + details. | |
| 105 | +temp[1-5]_max Maximum temperature. From OT_WARN_LIMIT register. | |
| 106 | +temp[1-5]_crit Critical high temperature. From OT_FAULT_LIMIT register. | |
| 107 | +temp[1-5]_max_alarm Temperature high alarm. | |
| 108 | +temp[1-5]_crit_alarm Temperature critical high alarm. | |
| 109 | + | |
| 110 | +fan1_input Fan RPM. ucd9240 only. | |
| 111 | +fan1_alarm Fan alarm. ucd9240 only. | |
| 112 | +fan1_fault Fan fault. ucd9240 only. | |
| @@ -403,7 +403,7 @@ found out the following values do work as a form of coarse pwm: · 402 unmodified lines | ||
| 403 | 403 | |
| 404 | 404 | 0x80 - seems to turn fans off after some time(1-2 minutes)... might be |
| 405 | 405 | some form of auto-fan-control based on temp? hmm (Qfan? this mobo is an |
| 406 | −old ASUS, it isn't marketed as Qfan. Maybe some beta pre-attemp at Qfan | |
| 406 | +old ASUS, it isn't marketed as Qfan. Maybe some beta pre-attempt at Qfan | |
| 407 | 407 | that was dropped at the BIOS) |
| 408 | 408 | 0x81 - off |
| 409 | 409 | 0x82 - slightly "on-ner" than off, but my fans do not get to move. I can |
| @@ -93,7 +93,7 @@ The sysfs interface to the beep bitmask has migrated from the original legacy · 92 unmodified lines | ||
| 93 | 93 | method of a single sysfs beep_mask file to a newer method using multiple |
| 94 | 94 | *_beep files as described in .../Documentation/hwmon/sysfs-interface. |
| 95 | 95 | |
| 96 | −A similar change has occured for the bitmap corresponding to the alarms. The | |
| 96 | +A similar change has occurred for the bitmap corresponding to the alarms. The | |
| 97 | 97 | original legacy method used a single sysfs alarms file containing a bitmap |
| 98 | 98 | of triggered alarms. The newer method uses multiple sysfs *_alarm files |
| 99 | 99 | (again following the pattern described in sysfs-interface). |
| @@ -19,6 +19,7 @@ Supported adapters: · 18 unmodified lines | ||
| 19 | 19 | * Intel 6 Series (PCH) |
| 20 | 20 | * Intel Patsburg (PCH) |
| 21 | 21 | * Intel DH89xxCC (PCH) |
| 22 | + * Intel Panther Point (PCH) | |
| 22 | 23 | Datasheets: Publicly available at the Intel website |
| 23 | 24 | |
| 24 | 25 | On Intel Patsburg and later chipsets, both the normal host SMBus controller |
| @@ -4,7 +4,7 @@ Author: Jean Delvare <khali@linux-fr.org> · 3 unmodified lines | ||
| 4 | 4 | |
| 5 | 5 | This driver is a light version of i2c-parport. It doesn't depend |
| 6 | 6 | on the parport driver, and uses direct I/O access instead. This might be |
| 7 | −prefered on embedded systems where wasting memory for the clean but heavy | |
| 7 | +preferred on embedded systems where wasting memory for the clean but heavy | |
| 8 | 8 | parport handling is not an option. The drawback is a reduced portability |
| 9 | 9 | and the impossibility to daisy-chain other parallel port devices. |
| 10 | 10 | |
| @@ -35,7 +35,7 @@ or perhaps this... · 34 unmodified lines | ||
| 35 | 35 | |
| 36 | 36 | (kernel versions later than 2.4.18 may fill in the "Unknown"s) |
| 37 | 37 | |
| 38 | −If you cant see it please look on quirk_sis_96x_smbus | |
| 38 | +If you can't see it please look on quirk_sis_96x_smbus | |
| 39 | 39 | (drivers/pci/quirks.c) (also if southbridge detection fails) |
| 40 | 40 | |
| 41 | 41 | I suspect that this driver could be made to work for the following SiS |
| @@ -13,7 +13,7 @@ Currently supported devices are: · 12 unmodified lines | ||
| 13 | 13 | |
| 14 | 14 | * TAOS TSL2550 EVM |
| 15 | 15 | |
| 16 | −For addtional information on TAOS products, please see | |
| 16 | +For additional information on TAOS products, please see | |
| 17 | 17 | http://www.taosinc.com/ |
| 18 | 18 | |
| 19 | 19 | |
| @@ -38,7 +38,7 @@ static struct i2c_driver foo_driver = { · 37 unmodified lines | ||
| 38 | 38 | .name = "foo", |
| 39 | 39 | }, |
| 40 | 40 | |
| 41 | − .id_table = foo_ids, | |
| 41 | + .id_table = foo_idtable, | |
| 42 | 42 | .probe = foo_probe, |
| 43 | 43 | .remove = foo_remove, |
| 44 | 44 | /* if device autodetection is needed: */ |
| @@ -53,7 +53,7 @@ Symbios Logic (Now LSI) · 52 unmodified lines | ||
| 53 | 53 | BoxHill Corporation |
| 54 | 54 | Loan of initial FibreChannel disk array used for development work. |
| 55 | 55 | |
| 56 | −European Comission | |
| 56 | +European Commission | |
| 57 | 57 | Funding the work done by the University of Helsinki |
| 58 | 58 | |
| 59 | 59 | SysKonnect |
| @@ -177,7 +177,7 @@ static int scan_rom(char *path, char *file) · 176 unmodified lines | ||
| 177 | 177 | |
| 178 | 178 | /* |
| 179 | 179 | * It's OK if the ROM is unreadable. Maybe there |
| 180 | − * is no ROM, or some other error ocurred. The | |
| 180 | + * is no ROM, or some other error occurred. The | |
| 181 | 181 | * important thing is that no MCA happened. |
| 182 | 182 | */ |
| 183 | 183 | if (rc > 0) |
| @@ -34,7 +34,8 @@ Contents · 33 unmodified lines | ||
| 34 | 34 | Currently the Linux Elantech touchpad driver is aware of two different |
| 35 | 35 | hardware versions unimaginatively called version 1 and version 2. Version 1 |
| 36 | 36 | is found in "older" laptops and uses 4 bytes per packet. Version 2 seems to |
| 37 | −be introduced with the EeePC and uses 6 bytes per packet. | |
| 37 | +be introduced with the EeePC and uses 6 bytes per packet, and provides | |
| 38 | +additional features such as position of two fingers, and width of the touch. | |
| 38 | 39 | |
| 39 | 40 | The driver tries to support both hardware versions and should be compatible |
| 40 | 41 | with the Xorg Synaptics touchpad driver and its graphical configuration |
| @@ -94,18 +95,44 @@ Currently the Linux Elantech touchpad driver provides two extra knobs under · 53 unmodified lines | ||
| 94 | 95 | can check these bits and reject any packet that appears corrupted. Using |
| 95 | 96 | this knob you can bypass that check. |
| 96 | 97 | |
| 97 | − It is not known yet whether hardware version 2 provides the same parity | |
| 98 | − bits. Hence checking is disabled by default. Currently even turning it on | |
| 99 | − will do nothing. | |
| 100 | − | |
| 98 | + Hardware version 2 does not provide the same parity bits. Only some basic | |
| 99 | + data consistency checking can be done. For now checking is disabled by | |
| 100 | + default. Currently even turning it on will do nothing. | |
| 101 | 101 | |
| 102 | 102 | ///////////////////////////////////////////////////////////////////////////// |
| 103 | 103 | |
| 104 | +3. Differentiating hardware versions | |
| 105 | + ================================= | |
| 106 | + | |
| 107 | +To detect the hardware version, read the version number as param[0].param[1].param[2] | |
| 108 | + | |
| 109 | + 4 bytes version: (after the arrow is the name given in the Dell-provided driver) | |
| 110 | + 02.00.22 => EF013 | |
| 111 | + 02.06.00 => EF019 | |
| 112 | +In the wild, there appear to be more versions, such as 00.01.64, 01.00.21, | |
| 113 | +02.00.00, 02.00.04, 02.00.06. | |
| 114 | + | |
| 115 | + 6 bytes: | |
| 116 | + 02.00.30 => EF113 | |
| 117 | + 02.08.00 => EF023 | |
| 118 | + 02.08.XX => EF123 | |
| 119 | + 02.0B.00 => EF215 | |
| 120 | + 04.01.XX => Scroll_EF051 | |
| 121 | + 04.02.XX => EF051 | |
| 122 | +In the wild, there appear to be more versions, such as 04.03.01, 04.04.11. There | |
| 123 | +appears to be almost no difference, except for EF113, which does not report | |
| 124 | +pressure/width and has different data consistency checks. | |
| 125 | + | |
| 126 | +Probably all the versions with param[0] <= 01 can be considered as | |
| 127 | +4 bytes/firmware 1. The versions < 02.08.00, with the exception of 02.00.30, as | |
| 128 | +4 bytes/firmware 2. Everything >= 02.08.00 can be considered as 6 bytes. | |
| 129 | + | |
| 130 | +///////////////////////////////////////////////////////////////////////////// | |
| 104 | 131 | |
| 105 | −3. Hardware version 1 | |
| 132 | +4. Hardware version 1 | |
| 106 | 133 | ================== |
| 107 | 134 | |
| 108 | −3.1 Registers | |
| 135 | +4.1 Registers | |
| 109 | 136 | ~~~~~~~~~ |
| 110 | 137 | |
| 111 | 138 | By echoing a hexadecimal value to a register it contents can be altered. |
| @@ -168,7 +195,7 @@ For example: · 56 unmodified lines | ||
| 168 | 195 | smart edge activation area width? |
| 169 | 196 | |
| 170 | 197 | |
| 171 | −3.2 Native relative mode 4 byte packet format | |
| 198 | +4.2 Native relative mode 4 byte packet format | |
| 172 | 199 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 173 | 200 | |
| 174 | 201 | byte 0: |
| @@ -226,9 +253,13 @@ byte 3: · 51 unmodified lines | ||
| 226 | 253 | positive = down |
| 227 | 254 | |
| 228 | 255 | |
| 229 | −3.3 Native absolute mode 4 byte packet format | |
| 256 | +4.3 Native absolute mode 4 byte packet format | |
| 230 | 257 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 231 | 258 | |
| 259 | +EF013 and EF019 have a special behaviour (due to a bug in the firmware?), and | |
| 260 | +when 1 finger is touching, the first 2 position reports must be discarded. | |
| 261 | +This counting is reset whenever a different number of fingers is reported. | |
| 262 | + | |
| 232 | 263 | byte 0: |
| 233 | 264 | firmware version 1.x: |
| 234 | 265 | |
| @@ -279,11 +310,11 @@ byte 3: · 44 unmodified lines | ||
| 279 | 310 | ///////////////////////////////////////////////////////////////////////////// |
| 280 | 311 | |
| 281 | 312 | |
| 282 | −4. Hardware version 2 | |
| 313 | +5. Hardware version 2 | |
| 283 | 314 | ================== |
| 284 | 315 | |
| 285 | 316 | |
| 286 | −4.1 Registers | |
| 317 | +5.1 Registers | |
| 287 | 318 | ~~~~~~~~~ |
| 288 | 319 | |
| 289 | 320 | By echoing a hexadecimal value to a register it contents can be altered. |
| @@ -316,16 +347,41 @@ For example: · 26 unmodified lines | ||
| 316 | 347 | 0x7f = never i.e. tap again to release) |
| 317 | 348 | |
| 318 | 349 | |
| 319 | −4.2 Native absolute mode 6 byte packet format | |
| 350 | +5.2 Native absolute mode 6 byte packet format | |
| 320 | 351 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 321 | − | |
| 322 | −4.2.1 One finger touch | |
| 352 | +5.2.1 Parity checking and packet re-synchronization | |
| 353 | +There is no parity checking, however some consistency checks can be performed. | |
| 354 | + | |
| 355 | +For instance for EF113: | |
| 356 | + SA1= packet[0]; | |
| 357 | + A1 = packet[1]; | |
| 358 | + B1 = packet[2]; | |
| 359 | + SB1= packet[3]; | |
| 360 | + C1 = packet[4]; | |
| 361 | + D1 = packet[5]; | |
| 362 | + if( (((SA1 & 0x3C) != 0x3C) && ((SA1 & 0xC0) != 0x80)) || // check Byte 1 | |
| 363 | + (((SA1 & 0x0C) != 0x0C) && ((SA1 & 0xC0) == 0x80)) || // check Byte 1 (one finger pressed) | |
| 364 | + (((SA1 & 0xC0) != 0x80) && (( A1 & 0xF0) != 0x00)) || // check Byte 2 | |
| 365 | + (((SB1 & 0x3E) != 0x38) && ((SA1 & 0xC0) != 0x80)) || // check Byte 4 | |
| 366 | + (((SB1 & 0x0E) != 0x08) && ((SA1 & 0xC0) == 0x80)) || // check Byte 4 (one finger pressed) | |
| 367 | + (((SA1 & 0xC0) != 0x80) && (( C1 & 0xF0) != 0x00)) ) // check Byte 5 | |
| 368 | + // error detected | |
| 369 | + | |
| 370 | +For all the other ones, there are just a few constant bits: | |
| 371 | + if( ((packet[0] & 0x0C) != 0x04) || | |
| 372 | + ((packet[3] & 0x0f) != 0x02) ) | |
| 373 | + // error detected | |
| 374 | + | |
| 375 | + | |
| 376 | +In case an error is detected, all the packets are shifted by one (and packet[0] is discarded). | |
| 377 | + | |
| 378 | +5.2.1 One/Three finger touch | |
| 323 | 379 | ~~~~~~~~~~~~~~~~ |
| 324 | 380 | |
| 325 | 381 | byte 0: |
| 326 | 382 | |
| 327 | 383 | bit 7 6 5 4 3 2 1 0 |
| 328 | − n1 n0 . . . . R L | |
| 384 | + n1 n0 w3 w2 . . R L | |
| 329 | 385 | |
| 330 | 386 | L, R = 1 when Left, Right mouse button pressed |
| 331 | 387 | n1..n0 = numbers of fingers on touchpad |
| @@ -333,24 +389,40 @@ byte 0: · 1 unmodified line | ||
| 333 | 389 | byte 1: |
| 334 | 390 | |
| 335 | 391 | bit 7 6 5 4 3 2 1 0 |
| 336 | − . . . . . x10 x9 x8 | |
| 392 | + p7 p6 p5 p4 . x10 x9 x8 | |
| 337 | 393 | |
| 338 | 394 | byte 2: |
| 339 | 395 | |
| 340 | 396 | bit 7 6 5 4 3 2 1 0 |
| 341 | − x7 x6 x5 x4 x4 x2 x1 x0 | |
| 397 | + x7 x6 x5 x4 x3 x2 x1 x0 | |
| 342 | 398 | |
| 343 | 399 | x10..x0 = absolute x value (horizontal) |
| 344 | 400 | |
| 345 | 401 | byte 3: |
| 346 | 402 | |
| 347 | 403 | bit 7 6 5 4 3 2 1 0 |
| 348 | − . . . . . . . . | |
| 404 | + n4 vf w1 w0 . . . b2 | |
| 405 | + | |
| 406 | + n4 = set if more than 3 fingers (only in 3 fingers mode) | |
| 407 | + vf = a kind of flag ? (only on EF123, 0 when finger is over one | |
| 408 | + of the buttons, 1 otherwise) | |
| 409 | + w3..w0 = width of the finger touch (not EF113) | |
| 410 | + b2 (on EF113 only, 0 otherwise), b2.R.L indicates one button pressed: | |
| 411 | + 0 = none | |
| 412 | + 1 = Left | |
| 413 | + 2 = Right | |
| 414 | + 3 = Middle (Left and Right) | |
| 415 | + 4 = Forward | |
| 416 | + 5 = Back | |
| 417 | + 6 = Another one | |
| 418 | + 7 = Another one | |
| 349 | 419 | |
| 350 | 420 | byte 4: |
| 351 | 421 | |
| 352 | 422 | bit 7 6 5 4 3 2 1 0 |
| 353 | − . . . . . . y9 y8 | |
| 423 | + p3 p1 p2 p0 . . y9 y8 | |
| 424 | + | |
| 425 | + p7..p0 = pressure (not EF113) | |
| 354 | 426 | |
| 355 | 427 | byte 5: |
| 356 | 428 | |
| @@ -363,6 +435,11 @@ byte 5: · 6 unmodified lines | ||
| 363 | 435 | 4.2.2 Two finger touch |
| 364 | 436 | ~~~~~~~~~~~~~~~~ |
| 365 | 437 | |
| 438 | +Note that the two pairs of coordinates are not exactly the coordinates of the | |
| 439 | +two fingers, but only the pair of the lower-left and upper-right coordinates. | |
| 440 | +So the actual fingers might be situated on the other diagonal of the square | |
| 441 | +defined by these two points. | |
| 442 | + | |
| 366 | 443 | byte 0: |
| 367 | 444 | |
| 368 | 445 | bit 7 6 5 4 3 2 1 0 |
| @@ -376,14 +453,14 @@ byte 1: · 7 unmodified lines | ||
| 376 | 453 | bit 7 6 5 4 3 2 1 0 |
| 377 | 454 | ax7 ax6 ax5 ax4 ax3 ax2 ax1 ax0 |
| 378 | 455 | |
| 379 | − ax8..ax0 = first finger absolute x value | |
| 456 | + ax8..ax0 = lower-left finger absolute x value | |
| 380 | 457 | |
| 381 | 458 | byte 2: |
| 382 | 459 | |
| 383 | 460 | bit 7 6 5 4 3 2 1 0 |
| 384 | 461 | ay7 ay6 ay5 ay4 ay3 ay2 ay1 ay0 |
| 385 | 462 | |
| 386 | − ay8..ay0 = first finger absolute y value | |
| 463 | + ay8..ay0 = lower-left finger absolute y value | |
| 387 | 464 | |
| 388 | 465 | byte 3: |
| 389 | 466 | |
| @@ -395,11 +472,11 @@ byte 4: · 5 unmodified lines | ||
| 395 | 472 | bit 7 6 5 4 3 2 1 0 |
| 396 | 473 | bx7 bx6 bx5 bx4 bx3 bx2 bx1 bx0 |
| 397 | 474 | |
| 398 | − bx8..bx0 = second finger absolute x value | |
| 475 | + bx8..bx0 = upper-right finger absolute x value | |
| 399 | 476 | |
| 400 | 477 | byte 5: |
| 401 | 478 | |
| 402 | 479 | bit 7 6 5 4 3 2 1 0 |
| 403 | 480 | by7 by8 by5 by4 by3 by2 by1 by0 |
| 404 | 481 | |
| 405 | − by8..by0 = second finger absolute y value | |
| 482 | + by8..by0 = upper-right finger absolute y value | |
| @@ -0,0 +1,262 @@ | ||
| 1 | +The input protocol uses a map of types and codes to express input device values | |
| 2 | +to userspace. This document describes the types and codes and how and when they | |
| 3 | +may be used. | |
| 4 | + | |
| 5 | +A single hardware event generates multiple input events. Each input event | |
| 6 | +contains the new value of a single data item. A special event type, EV_SYN, is | |
| 7 | +used to separate input events into packets of input data changes occurring at | |
| 8 | +the same moment in time. In the following, the term "event" refers to a single | |
| 9 | +input event encompassing a type, code, and value. | |
| 10 | + | |
| 11 | +The input protocol is a stateful protocol. Events are emitted only when values | |
| 12 | +of event codes have changed. However, the state is maintained within the Linux | |
| 13 | +input subsystem; drivers do not need to maintain the state and may attempt to | |
| 14 | +emit unchanged values without harm. Userspace may obtain the current state of | |
| 15 | +event code values using the EVIOCG* ioctls defined in linux/input.h. The event | |
| 16 | +reports supported by a device are also provided by sysfs in | |
| 17 | +class/input/event*/device/capabilities/, and the properties of a device are | |
| 18 | +provided in class/input/event*/device/properties. | |
| 19 | + | |
| 20 | +Types: | |
| 21 | +========== | |
| 22 | +Types are groupings of codes under a logical input construct. Each type has a | |
| 23 | +set of applicable codes to be used in generating events. See the Codes section | |
| 24 | +for details on valid codes for each type. | |
| 25 | + | |
| 26 | +* EV_SYN: | |
| 27 | + - Used as markers to separate events. Events may be separated in time or in | |
| 28 | + space, such as with the multitouch protocol. | |
| 29 | + | |
| 30 | +* EV_KEY: | |
| 31 | + - Used to describe state changes of keyboards, buttons, or other key-like | |
| 32 | + devices. | |
| 33 | + | |
| 34 | +* EV_REL: | |
| 35 | + - Used to describe relative axis value changes, e.g. moving the mouse 5 units | |
| 36 | + to the left. | |
| 37 | + | |
| 38 | +* EV_ABS: | |
| 39 | + - Used to describe absolute axis value changes, e.g. describing the | |
| 40 | + coordinates of a touch on a touchscreen. | |
| 41 | + | |
| 42 | +* EV_MSC: | |
| 43 | + - Used to describe miscellaneous input data that do not fit into other types. | |
| 44 | + | |
| 45 | +* EV_SW: | |
| 46 | + - Used to describe binary state input switches. | |
| 47 | + | |
| 48 | +* EV_LED: | |
| 49 | + - Used to turn LEDs on devices on and off. | |
| 50 | + | |
| 51 | +* EV_SND: | |
| 52 | + - Used to output sound to devices. | |
| 53 | + | |
| 54 | +* EV_REP: | |
| 55 | + - Used for autorepeating devices. | |
| 56 | + | |
| 57 | +* EV_FF: | |
| 58 | + - Used to send force feedback commands to an input device. | |
| 59 | + | |
| 60 | +* EV_PWR: | |
| 61 | + - A special type for power button and switch input. | |
| 62 | + | |
| 63 | +* EV_FF_STATUS: | |
| 64 | + - Used to receive force feedback device status. | |
| 65 | + | |
| 66 | +Codes: | |
| 67 | +========== | |
| 68 | +Codes define the precise type of event. | |
| 69 | + | |
| 70 | +EV_SYN: | |
| 71 | +---------- | |
| 72 | +EV_SYN event values are undefined. Their usage is defined only by when they are | |
| 73 | +sent in the evdev event stream. | |
| 74 | + | |
| 75 | +* SYN_REPORT: | |
| 76 | + - Used to synchronize and separate events into packets of input data changes | |
| 77 | + occurring at the same moment in time. For example, motion of a mouse may set | |
| 78 | + the REL_X and REL_Y values for one motion, then emit a SYN_REPORT. The next | |
| 79 | + motion will emit more REL_X and REL_Y values and send another SYN_REPORT. | |
| 80 | + | |
| 81 | +* SYN_CONFIG: | |
| 82 | + - TBD | |
| 83 | + | |
| 84 | +* SYN_MT_REPORT: | |
| 85 | + - Used to synchronize and separate touch events. See the | |
| 86 | + multi-touch-protocol.txt document for more information. | |
| 87 | + | |
| 88 | +* SYN_DROPPED: | |
| 89 | + - Used to indicate buffer overrun in the evdev client's event queue. | |
| 90 | + Client should ignore all events up to and including next SYN_REPORT | |
| 91 | + event and query the device (using EVIOCG* ioctls) to obtain its | |
| 92 | + current state. | |
| 93 | + | |
| 94 | +EV_KEY: | |
| 95 | +---------- | |
| 96 | +EV_KEY events take the form KEY_<name> or BTN_<name>. For example, KEY_A is used | |
| 97 | +to represent the 'A' key on a keyboard. When a key is depressed, an event with | |
| 98 | +the key's code is emitted with value 1. When the key is released, an event is | |
| 99 | +emitted with value 0. Some hardware send events when a key is repeated. These | |
| 100 | +events have a value of 2. In general, KEY_<name> is used for keyboard keys, and | |
| 101 | +BTN_<name> is used for other types of momentary switch events. | |
| 102 | + | |
| 103 | +A few EV_KEY codes have special meanings: | |
| 104 | + | |
| 105 | +* BTN_TOOL_<name>: | |
| 106 | + - These codes are used in conjunction with input trackpads, tablets, and | |
| 107 | + touchscreens. These devices may be used with fingers, pens, or other tools. | |
| 108 | + When an event occurs and a tool is used, the corresponding BTN_TOOL_<name> | |
| 109 | + code should be set to a value of 1. When the tool is no longer interacting | |
| 110 | + with the input device, the BTN_TOOL_<name> code should be reset to 0. All | |
| 111 | + trackpads, tablets, and touchscreens should use at least one BTN_TOOL_<name> | |
| 112 | + code when events are generated. | |
| 113 | + | |
| 114 | +* BTN_TOUCH: | |
| 115 | + BTN_TOUCH is used for touch contact. While an input tool is determined to be | |
| 116 | + within meaningful physical contact, the value of this property must be set | |
| 117 | + to 1. Meaningful physical contact may mean any contact, or it may mean | |
| 118 | + contact conditioned by an implementation defined property. For example, a | |
| 119 | + touchpad may set the value to 1 only when the touch pressure rises above a | |
| 120 | + certain value. BTN_TOUCH may be combined with BTN_TOOL_<name> codes. For | |
| 121 | + example, a pen tablet may set BTN_TOOL_PEN to 1 and BTN_TOUCH to 0 while the | |
| 122 | + pen is hovering over but not touching the tablet surface. | |
| 123 | + | |
| 124 | +Note: For appropriate function of the legacy mousedev emulation driver, | |
| 125 | +BTN_TOUCH must be the first evdev code emitted in a synchronization frame. | |
| 126 | + | |
| 127 | +Note: Historically a touch device with BTN_TOOL_FINGER and BTN_TOUCH was | |
| 128 | +interpreted as a touchpad by userspace, while a similar device without | |
| 129 | +BTN_TOOL_FINGER was interpreted as a touchscreen. For backwards compatibility | |
| 130 | +with current userspace it is recommended to follow this distinction. In the | |
| 131 | +future, this distinction will be deprecated and the device properties ioctl | |
| 132 | +EVIOCGPROP, defined in linux/input.h, will be used to convey the device type. | |
| 133 | + | |
| 134 | +* BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP: | |
| 135 | + - These codes denote one, two, three, and four finger interaction on a | |
| 136 | + trackpad or touchscreen. For example, if the user uses two fingers and moves | |
| 137 | + them on the touchpad in an effort to scroll content on screen, | |
| 138 | + BTN_TOOL_DOUBLETAP should be set to value 1 for the duration of the motion. | |
| 139 | + Note that all BTN_TOOL_<name> codes and the BTN_TOUCH code are orthogonal in | |
| 140 | + purpose. A trackpad event generated by finger touches should generate events | |
| 141 | + for one code from each group. At most only one of these BTN_TOOL_<name> | |
| 142 | + codes should have a value of 1 during any synchronization frame. | |
| 143 | + | |
| 144 | +Note: Historically some drivers emitted multiple of the finger count codes with | |
| 145 | +a value of 1 in the same synchronization frame. This usage is deprecated. | |
| 146 | + | |
| 147 | +Note: In multitouch drivers, the input_mt_report_finger_count() function should | |
| 148 | +be used to emit these codes. Please see multi-touch-protocol.txt for details. | |
| 149 | + | |
| 150 | +EV_REL: | |
| 151 | +---------- | |
| 152 | +EV_REL events describe relative changes in a property. For example, a mouse may | |
| 153 | +move to the left by a certain number of units, but its absolute position in | |
| 154 | +space is unknown. If the absolute position is known, EV_ABS codes should be used | |
| 155 | +instead of EV_REL codes. | |
| 156 | + | |
| 157 | +A few EV_REL codes have special meanings: | |
| 158 | + | |
| 159 | +* REL_WHEEL, REL_HWHEEL: | |
| 160 | + - These codes are used for vertical and horizontal scroll wheels, | |
| 161 | + respectively. | |
| 162 | + | |
| 163 | +EV_ABS: | |
| 164 | +---------- | |
| 165 | +EV_ABS events describe absolute changes in a property. For example, a touchpad | |
| 166 | +may emit coordinates for a touch location. | |
| 167 | + | |
| 168 | +A few EV_ABS codes have special meanings: | |
| 169 | + | |
| 170 | +* ABS_DISTANCE: | |
| 171 | + - Used to describe the distance of a tool from an interaction surface. This | |
| 172 | + event should only be emitted while the tool is hovering, meaning in close | |
| 173 | + proximity of the device and while the value of the BTN_TOUCH code is 0. If | |
| 174 | + the input device may be used freely in three dimensions, consider ABS_Z | |
| 175 | + instead. | |
| 176 | + | |
| 177 | +* ABS_MT_<name>: | |
| 178 | + - Used to describe multitouch input events. Please see | |
| 179 | + multi-touch-protocol.txt for details. | |
| 180 | + | |
| 181 | +EV_SW: | |
| 182 | +---------- | |
| 183 | +EV_SW events describe stateful binary switches. For example, the SW_LID code is | |
| 184 | +used to denote when a laptop lid is closed. | |
| 185 | + | |
| 186 | +Upon binding to a device or resuming from suspend, a driver must report | |
| 187 | +the current switch state. This ensures that the device, kernel, and userspace | |
| 188 | +state is in sync. | |
| 189 | + | |
| 190 | +Upon resume, if the switch state is the same as before suspend, then the input | |
| 191 | +subsystem will filter out the duplicate switch state reports. The driver does | |
| 192 | +not need to keep the state of the switch at any time. | |
| 193 | + | |
| 194 | +EV_MSC: | |
| 195 | +---------- | |
| 196 | +EV_MSC events are used for input and output events that do not fall under other | |
| 197 | +categories. | |
| 198 | + | |
| 199 | +EV_LED: | |
| 200 | +---------- | |
| 201 | +EV_LED events are used for input and output to set and query the state of | |
| 202 | +various LEDs on devices. | |
| 203 | + | |
| 204 | +EV_REP: | |
| 205 | +---------- | |
| 206 | +EV_REP events are used for specifying autorepeating events. | |
| 207 | + | |
| 208 | +EV_SND: | |
| 209 | +---------- | |
| 210 | +EV_SND events are used for sending sound commands to simple sound output | |
| 211 | +devices. | |
| 212 | + | |
| 213 | +EV_FF: | |
| 214 | +---------- | |
| 215 | +EV_FF events are used to initialize a force feedback capable device and to cause | |
| 216 | +such device to feedback. | |
| 217 | + | |
| 218 | +EV_PWR: | |
| 219 | +---------- | |
| 220 | +EV_PWR events are a special type of event used specifically for power | |
| 221 | +mangement. Its usage is not well defined. To be addressed later. | |
| 222 | + | |
| 223 | +Guidelines: | |
| 224 | +========== | |
| 225 | +The guidelines below ensure proper single-touch and multi-finger functionality. | |
| 226 | +For multi-touch functionality, see the multi-touch-protocol.txt document for | |
| 227 | +more information. | |
| 228 | + | |
| 229 | +Mice: | |
| 230 | +---------- | |
| 231 | +REL_{X,Y} must be reported when the mouse moves. BTN_LEFT must be used to report | |
| 232 | +the primary button press. BTN_{MIDDLE,RIGHT,4,5,etc.} should be used to report | |
| 233 | +further buttons of the device. REL_WHEEL and REL_HWHEEL should be used to report | |
| 234 | +scroll wheel events where available. | |
| 235 | + | |
| 236 | +Touchscreens: | |
| 237 | +---------- | |
| 238 | +ABS_{X,Y} must be reported with the location of the touch. BTN_TOUCH must be | |
| 239 | +used to report when a touch is active on the screen. | |
| 240 | +BTN_{MOUSE,LEFT,MIDDLE,RIGHT} must not be reported as the result of touch | |
| 241 | +contact. BTN_TOOL_<name> events should be reported where possible. | |
| 242 | + | |
| 243 | +Trackpads: | |
| 244 | +---------- | |
| 245 | +Legacy trackpads that only provide relative position information must report | |
| 246 | +events like mice described above. | |
| 247 | + | |
| 248 | +Trackpads that provide absolute touch position must report ABS_{X,Y} for the | |
| 249 | +location of the touch. BTN_TOUCH should be used to report when a touch is active | |
| 250 | +on the trackpad. Where multi-finger support is available, BTN_TOOL_<name> should | |
| 251 | +be used to report the number of touches active on the trackpad. | |
| 252 | + | |
| 253 | +Tablets: | |
| 254 | +---------- | |
| 255 | +BTN_TOOL_<name> events must be reported when a stylus or other tool is active on | |
| 256 | +the tablet. ABS_{X,Y} must be reported with the location of the tool. BTN_TOUCH | |
| 257 | +should be used to report when the tool is in contact with the tablet. | |
| 258 | +BTN_{STYLUS,STYLUS2} should be used to report buttons on the tool itself. Any | |
| 259 | +button may be used for buttons on the tablet except BTN_{MOUSE,LEFT}. | |
| 260 | +BTN_{0,1,2,etc} are good generic codes for unlabeled buttons. Do not use | |
| 261 | +meaningful buttons, like BTN_FORWARD, unless the button is labeled for that | |
| 262 | +purpose on the device. | |
| @@ -272,7 +272,7 @@ if you want to use gamecon.c. · 271 unmodified lines | ||
| 272 | 272 | |
| 273 | 273 | Also, the connection is a bit more complex. You'll need a bunch of diodes, |
| 274 | 274 | and one pullup resistor. First, you connect the Directions and the button |
| 275 | −the same as for db9, however with the diodes inbetween. | |
| 275 | +the same as for db9, however with the diodes between. | |
| 276 | 276 | |
| 277 | 277 | Diodes |
| 278 | 278 | (pin 2) -----|<|----> Up |
| @@ -9,6 +9,9 @@ peripherals with two wires. The outputs are phase-shifted by 90 degrees · 8 unmodified lines | ||
| 9 | 9 | and by triggering on falling and rising edges, the turn direction can |
| 10 | 10 | be determined. |
| 11 | 11 | |
| 12 | +Some encoders have both outputs low in stable states, whereas others also have | |
| 13 | +a stable state with both outputs high (half-period mode). | |
| 14 | + | |
| 12 | 15 | The phase diagram of these two outputs look like this: |
| 13 | 16 | |
| 14 | 17 | _____ _____ _____ |
| @@ -26,6 +29,8 @@ The phase diagram of these two outputs look like this: · 11 unmodified lines | ||
| 26 | 29 | |<-------->| |
| 27 | 30 | one step |
| 28 | 31 | |
| 32 | + |<-->| | |
| 33 | + one step (half-period mode) | |
| 29 | 34 | |
| 30 | 35 | For more information, please see |
| 31 | 36 | http://en.wikipedia.org/wiki/Rotary_encoder |
| @@ -34,6 +39,13 @@ For more information, please see · 2 unmodified lines | ||
| 34 | 39 | 1. Events / state machine |
| 35 | 40 | ------------------------- |
| 36 | 41 | |
| 42 | +In half-period mode, state a) and c) above are used to determine the | |
| 43 | +rotational direction based on the last stable state. Events are reported in | |
| 44 | +states b) and d) given that the new stable state is different from the last | |
| 45 | +(i.e. the rotation was not reversed half-way). | |
| 46 | + | |
| 47 | +Otherwise, the following apply: | |
| 48 | + | |
| 37 | 49 | a) Rising edge on channel A, channel B in low state |
| 38 | 50 | This state is used to recognize a clockwise turn |
| 39 | 51 | |
| @@ -46,7 +58,7 @@ c) Falling edge on channel A, channel B in high state · 6 unmodified lines | ||
| 46 | 58 | |
| 47 | 59 | d) Falling edge on channel B, channel A in low state |
| 48 | 60 | Parking position. If the encoder enters this state, a full transition |
| 49 | − should have happend, unless it flipped back on half the way. The | |
| 61 | + should have happened, unless it flipped back on half the way. The | |
| 50 | 62 | 'armed' state tells us about that. |
| 51 | 63 | |
| 52 | 64 | 2. Platform requirements |
| @@ -96,6 +108,7 @@ static struct rotary_encoder_platform_data my_rotary_encoder_info = { · 43 unmodified lines | ||
| 96 | 108 | .gpio_b = GPIO_ROTARY_B, |
| 97 | 109 | .inverted_a = 0, |
| 98 | 110 | .inverted_b = 0, |
| 111 | + .half_period = false, | |
| 99 | 112 | }; |
| 100 | 113 | |
| 101 | 114 | static struct platform_device rotary_encoder_device = { |
| @@ -77,7 +77,7 @@ pulse length: · 76 unmodified lines | ||
| 77 | 77 | |
| 78 | 78 | 24 bin+oct values + 1 bin value = 24*4+1 bits = 97 bits |
| 79 | 79 | |
| 80 | −(Warning, pulses on ACK ar inverted by transistor, irq is rised up on sync | |
| 80 | +(Warning, pulses on ACK are inverted by transistor, irq is raised up on sync | |
| 81 | 81 | to bin change or octal value to bin change). |
| 82 | 82 | |
| 83 | 83 | Binary data representations: |
| @@ -166,7 +166,6 @@ Code Seq#(hex) Include File Comments · 165 unmodified lines | ||
| 166 | 166 | 'T' all arch/x86/include/asm/ioctls.h conflict! |
| 167 | 167 | 'T' C0-DF linux/if_tun.h conflict! |
| 168 | 168 | 'U' all sound/asound.h conflict! |
| 169 | −'U' 00-0F drivers/media/video/uvc/uvcvideo.h conflict! | |
| 170 | 169 | 'U' 00-CF linux/uinput.h conflict! |
| 171 | 170 | 'U' 00-EF linux/usbdevice_fs.h |
| 172 | 171 | 'U' C0-CF drivers/bluetooth/hci_uart.h |
| @@ -259,6 +258,7 @@ Code Seq#(hex) Include File Comments · 86 unmodified lines | ||
| 259 | 258 | 't' 80-8F linux/isdn_ppp.h |
| 260 | 259 | 't' 90 linux/toshiba.h |
| 261 | 260 | 'u' 00-1F linux/smb_fs.h gone |
| 261 | +'u' 20-3F linux/uvcvideo.h USB video class host driver | |
| 262 | 262 | 'v' 00-1F linux/ext2_fs.h conflict! |
| 263 | 263 | 'v' 00-1F linux/fs.h conflict! |
| 264 | 264 | 'v' 00-0F linux/sonypi.h conflict! |
| @@ -304,6 +304,7 @@ Code Seq#(hex) Include File Comments · 39 unmodified lines | ||
| 304 | 304 | 0xB0 all RATIO devices in development: |
| 305 | 305 | <mailto:vgo@ratio.de> |
| 306 | 306 | 0xB1 00-1F PPPoX <mailto:mostrows@styx.uwaterloo.ca> |
| 307 | +0xB3 00 linux/mmc/ioctl.h | |
| 307 | 308 | 0xC0 00-0F linux/usb/iowarrior.h |
| 308 | 309 | 0xCB 00-1F CBM serial IEC bus in development: |
| 309 | 310 | <mailto:michael.klein@puffin.lb.shuttle.de> |
| @@ -53,5 +53,5 @@ implementation in an architecture: lockdep will detect that and will · 52 unmodified lines | ||
| 53 | 53 | turn itself off. I.e. the lock validator will still be reliable. There |
| 54 | 54 | should be no crashes due to irq-tracing bugs. (except if the assembly |
| 55 | 55 | changes break other code by modifying conditions or registers that |
| 56 | −shouldnt be) | |
| 56 | +shouldn't be) | |
| 57 | 57 | |
| @@ -240,7 +240,7 @@ Functions capi_cmsg2message() and capi_message2cmsg() are provided to convert · 239 unmodified lines | ||
| 240 | 240 | messages between their transport encoding described in the CAPI 2.0 standard |
| 241 | 241 | and their _cmsg structure representation. Note that capi_cmsg2message() does |
| 242 | 242 | not know or check the size of its destination buffer. The caller must make |
| 243 | −sure it is big enough to accomodate the resulting CAPI message. | |
| 243 | +sure it is big enough to accommodate the resulting CAPI message. | |
| 244 | 244 | |
| 245 | 245 | |
| 246 | 246 | 5. Lower Layer Interface Functions |
| @@ -11,14 +11,14 @@ for non English (read: Japanese) speakers and is not intended as a · 10 unmodified lines | ||
| 11 | 11 | fork. So if you have any comments or updates for this file, please try |
| 12 | 12 | to update the original English file first. |
| 13 | 13 | |
| 14 | −Last Updated: 2008/10/24 | |
| 14 | +Last Updated: 2011/03/31 | |
| 15 | 15 | ================================== |
| 16 | 16 | これは、 |
| 17 | −linux-2.6.28/Documentation/HOWTO | |
| 17 | +linux-2.6.38/Documentation/HOWTO | |
| 18 | 18 | の和訳です。 |
| 19 | 19 | |
| 20 | 20 | 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > |
| 21 | −翻訳日: 2008/10/24 | |
| 21 | +翻訳日: 2011/3/28 | |
| 22 | 22 | 翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com> |
| 23 | 23 | 校正者: 松倉さん <nbh--mats at nifty dot com> |
| 24 | 24 | 小林 雅典さん (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp> |
| @@ -256,8 +256,8 @@ Linux カーネルの開発プロセスは現在幾つかの異なるメイン · 231 unmodified lines | ||
| 256 | 256 | - メインの 2.6.x カーネルツリー |
| 257 | 257 | - 2.6.x.y -stable カーネルツリー |
| 258 | 258 | - 2.6.x -git カーネルパッチ |
| 259 | − - 2.6.x -mm カーネルパッチ | |
| 260 | 259 | - サブシステム毎のカーネルツリーとパッチ |
| 260 | + - 統合テストのための 2.6.x -next カーネルツリー | |
| 261 | 261 | |
| 262 | 262 | 2.6.x カーネルツリー |
| 263 | 263 | ----------------- |
| @@ -268,9 +268,9 @@ Linux カーネルの開発プロセスは現在幾つかの異なるメイン · 4 unmodified lines | ||
| 268 | 268 | |
| 269 | 269 | - 新しいカーネルがリリースされた直後に、2週間の特別期間が設けられ、 |
| 270 | 270 | この期間中に、メンテナ達は Linus に大きな差分を送ることができます。 |
| 271 | − このような差分は通常 -mm カーネルに数週間含まれてきたパッチです。 | |
| 271 | + このような差分は通常 -next カーネルに数週間含まれてきたパッチです。 | |
| 272 | 272 | 大きな変更は git(カーネルのソース管理ツール、詳細は |
| 273 | − http://git.or.cz/ 参照) を使って送るのが好ましいやり方ですが、パッ | |
| 273 | + http://git-scm.com/ 参照) を使って送るのが好ましいやり方ですが、パッ | |
| 274 | 274 | チファイルの形式のまま送るのでも十分です。 |
| 275 | 275 | |
| 276 | 276 | - 2週間後、-rc1 カーネルがリリースされ、この後にはカーネル全体の安定 |
| @@ -333,86 +333,44 @@ git リポジトリで管理されているLinus のカーネルツリーの毎 · 56 unmodified lines | ||
| 333 | 333 | れは -rc カーネルと比べて、パッチが大丈夫かどうかも確認しないで自動的 |
| 334 | 334 | に生成されるので、より実験的です。 |
| 335 | 335 | |
| 336 | −2.6.x -mm カーネルパッチ | |
| 337 | −------------------------ | |
| 338 | − | |
| 339 | −Andrew Morton によってリリースされる実験的なカーネルパッチ群です。 | |
| 340 | −Andrew は個別のサブシステムカーネルツリーとパッチを全て集めてきて | |
| 341 | −linux-kernel メーリングリストで収集された多数のパッチと同時に一つにま | |
| 342 | −とめます。 | |
| 343 | −このツリーは新機能とパッチが検証される場となります。ある期間の間パッチ | |
| 344 | −が -mm に入って価値を証明されたら、Andrew やサブシステムメンテナが、 | |
| 345 | −メインラインへ入れるように Linus にプッシュします。 | |
| 346 | − | |
| 347 | −メインカーネルツリーに含めるために Linus に送る前に、すべての新しいパッ | |
| 348 | −チが -mm ツリーでテストされることが強く推奨されています。マージウィン | |
| 349 | −ドウが開く前に -mm ツリーに現れなかったパッチはメインラインにマージさ | |
| 350 | −れることは困難になります。 | |
| 351 | − | |
| 352 | −これらのカーネルは安定して動作すべきシステムとして使うのには適切ではあ | |
| 353 | −りませんし、カーネルブランチの中でももっとも動作にリスクが高いものです。 | |
| 354 | − | |
| 355 | −もしあなたが、カーネル開発プロセスの支援をしたいと思っているのであれば、 | |
| 356 | −どうぞこれらのカーネルリリースをテストに使ってみて、そしてもし問題があ | |
| 357 | −れば、またもし全てが正しく動作したとしても、linux-kernel メーリングリ | |
| 358 | −ストにフィードバックを提供してください。 | |
| 359 | − | |
| 360 | −すべての他の実験的パッチに加えて、これらのカーネルは通常リリース時点で | |
| 361 | −メインラインの -git カーネルに含まれる全ての変更も含んでいます。 | |
| 362 | − | |
| 363 | −-mm カーネルは決まったスケジュールではリリースされません、しかし通常幾 | |
| 364 | −つかの -mm カーネル (1 から 3 が普通)が各-rc カーネルの間にリリースさ | |
| 365 | −れます。 | |
| 366 | − | |
| 367 | 336 | サブシステム毎のカーネルツリーとパッチ |
| 368 | 337 | ------------------------------------------- |
| 369 | 338 | |
| 370 | −カーネルの様々な領域で何が起きているかを見られるようにするため、多くの | |
| 371 | −カーネルサブシステム開発者は彼らの開発ツリーを公開しています。これらの | |
| 372 | −ツリーは説明したように -mm カーネルリリースに入れ込まれます。 | |
| 373 | − | |
| 374 | −以下はさまざまなカーネルツリーの中のいくつかのリスト- | |
| 375 | − | |
| 376 | − git ツリー- | |
| 377 | − - Kbuild の開発ツリー、Sam Ravnborg <sam@ravnborg.org> | |
| 378 | − git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git | |
| 379 | − | |
| 380 | − - ACPI の開発ツリー、 Len Brown <len.brown@intel.com> | |
| 381 | − git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git | |
| 382 | − | |
| 383 | − - Block の開発ツリー、Jens Axboe <axboe@suse.de> | |
| 384 | − git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git | |
| 385 | − | |
| 386 | − - DRM の開発ツリー、Dave Airlie <airlied@linux.ie> | |
| 387 | − git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git | |
| 388 | − | |
| 389 | − - ia64 の開発ツリー、Tony Luck <tony.luck@intel.com> | |
| 390 | − git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git | |
| 391 | − | |
| 392 | − - infiniband, Roland Dreier <rolandd@cisco.com> | |
| 393 | − git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git | |
| 394 | − | |
| 395 | − - libata, Jeff Garzik <jgarzik@pobox.com> | |
| 396 | − git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git | |
| 397 | − | |
| 398 | − - ネットワークドライバ, Jeff Garzik <jgarzik@pobox.com> | |
| 399 | − git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git | |
| 400 | − | |
| 401 | − - pcmcia, Dominik Brodowski <linux@dominikbrodowski.net> | |
| 402 | − git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git | |
| 403 | − | |
| 404 | − - SCSI, James Bottomley <James.Bottomley@hansenpartnership.com> | |
| 405 | − git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git | |
| 406 | − | |
| 407 | − - x86, Ingo Molnar <mingo@elte.hu> | |
| 408 | − git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git | |
| 409 | − | |
| 410 | − quilt ツリー- | |
| 411 | − - USB, ドライバコアと I2C, Greg Kroah-Hartman <gregkh@suse.de> | |
| 412 | − kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ | |
| 339 | +それぞれのカーネルサブシステムのメンテナ達は --- そして多くのカーネル | |
| 340 | +サブシステムの開発者達も --- 各自の最新の開発状況をソースリポジトリに | |
| 341 | +公開しています。そのため、自分とは異なる領域のカーネルで何が起きている | |
| 342 | +かを他の人が見られるようになっています。開発が早く進んでいる領域では、 | |
| 343 | +開発者は自身の投稿がどのサブシステムカーネルツリーを元にしているか質問 | |
| 344 | +されるので、その投稿とすでに進行中の他の作業との衝突が避けられます。 | |
| 345 | + | |
| 346 | +大部分のこれらのリポジトリは git ツリーです。しかしその他の SCM や | |
| 347 | +quilt シリーズとして公開されているパッチキューも使われています。これら | |
| 348 | +のサブシステムリポジトリのアドレスは MAINTAINERS ファイルにリストされ | |
| 349 | +ています。これらの多くは http://git.kernel.org/ で参照することができま | |
| 350 | +す。 | |
| 413 | 351 | |
| 414 | − その他のカーネルツリーは http://git.kernel.org/ と MAINTAINERS ファ | |
| 415 | − イルに一覧表があります。 | |
| 352 | +提案されたパッチがこのようなサブシステムツリーにコミットされる前に、メー | |
| 353 | +リングリストで事前にレビューにかけられます(以下の対応するセクションを | |
| 354 | +参照)。いくつかのカーネルサブシステムでは、このレビューは patchwork | |
| 355 | +というツールによって追跡されます。Patchwork は web インターフェイスに | |
| 356 | +よってパッチ投稿の表示、パッチへのコメント付けや改訂などができ、そして | |
| 357 | +メンテナはパッチに対して、レビュー中、受付済み、拒否というようなマーク | |
| 358 | +をつけることができます。大部分のこれらの patchwork のサイトは | |
| 359 | +http://patchwork.kernel.org/ でリストされています。 | |
| 360 | + | |
| 361 | +統合テストのための 2.6.x -next カーネルツリー | |
| 362 | +--------------------------------------------- | |
| 363 | + | |
| 364 | +サブシステムツリーの更新内容がメインラインの 2.6.x ツリーにマージされ | |
| 365 | +る前に、それらは統合テストされる必要があります。この目的のため、実質的 | |
| 366 | +に全サブシステムツリーからほぼ毎日プルされてできる特別なテスト用のリ | |
| 367 | +ポジトリが存在します- | |
| 368 | + http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git | |
| 369 | + http://linux.f-seidel.de/linux-next/pmwiki/ | |
| 370 | + | |
| 371 | +このやり方によって、-next カーネルは次のマージ機会でどんなものがメイン | |
| 372 | +ラインカーネルにマージされるか、おおまかなの展望を提供します。-next | |
| 373 | +カーネルの実行テストを行う冒険好きなテスターは大いに歓迎されます | |
| 416 | 374 | |
| 417 | 375 | バグレポート |
| 418 | 376 | ------------- |
| @@ -673,10 +631,9 @@ Linux カーネルコミュニティは、一度に大量のコードの塊を · 254 unmodified lines | ||
| 673 | 631 | じところからスタートしたのですから。 |
| 674 | 632 | |
| 675 | 633 | Paolo Ciarrocchi に感謝、彼は彼の書いた "Development Process" |
| 676 | −(http://linux.tar.bz/articles/2.6-development_process)セクショ | |
| 677 | −ンをこのテキストの原型にすることを許可してくれました。 | |
| 678 | −Rundy Dunlap と Gerrit Huizenga はメーリングリストでやるべきこととやっ | |
| 679 | −てはいけないことのリストを提供してくれました。 | |
| 634 | +(http://lwn.net/Articles/94386/) セクションをこのテキストの原型にする | |
| 635 | +ことを許可してくれました。Rundy Dunlap と Gerrit Huizenga はメーリング | |
| 636 | +リストでやるべきこととやってはいけないことのリストを提供してくれました。 | |
| 680 | 637 | 以下の人々のレビュー、コメント、貢献に感謝。 |
| 681 | 638 | Pat Mochel, Hanna Linder, Randy Dunlap, Kay Sievers, |
| 682 | 639 | Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook, Andrew Morton, Andi |
| @@ -26,11 +26,11 @@ Additional options to the assembler (for built-in and modules). · 25 unmodified lines | ||
| 26 | 26 | |
| 27 | 27 | AFLAGS_MODULE |
| 28 | 28 | -------------------------------------------------- |
| 29 | −Addtional module specific options to use for $(AS). | |
| 29 | +Additional module specific options to use for $(AS). | |
| 30 | 30 | |
| 31 | 31 | AFLAGS_KERNEL |
| 32 | 32 | -------------------------------------------------- |
| 33 | −Addtional options for $(AS) when used for assembler | |
| 33 | +Additional options for $(AS) when used for assembler | |
| 34 | 34 | code for code that is compiled as built-in. |
| 35 | 35 | |
| 36 | 36 | KCFLAGS |
| @@ -39,12 +39,12 @@ Additional options to the C compiler (for built-in and modules). · 2 unmodified lines | ||
| 39 | 39 | |
| 40 | 40 | CFLAGS_KERNEL |
| 41 | 41 | -------------------------------------------------- |
| 42 | −Addtional options for $(CC) when used to compile | |
| 42 | +Additional options for $(CC) when used to compile | |
| 43 | 43 | code that is compiled as built-in. |
| 44 | 44 | |
| 45 | 45 | CFLAGS_MODULE |
| 46 | 46 | -------------------------------------------------- |
| 47 | −Addtional module specific options to use for $(CC). | |
| 47 | +Additional module specific options to use for $(CC). | |
| 48 | 48 | |
| 49 | 49 | LDFLAGS_MODULE |
| 50 | 50 | -------------------------------------------------- |
| @@ -113,6 +113,13 @@ applicable everywhere (see syntax). · 112 unmodified lines | ||
| 113 | 113 | That will limit the usefulness but on the other hand avoid |
| 114 | 114 | the illegal configurations all over. |
| 115 | 115 | |
| 116 | +- limiting menu display: "visible if" <expr> | |
| 117 | + This attribute is only applicable to menu blocks, if the condition is | |
| 118 | + false, the menu block is not displayed to the user (the symbols | |
| 119 | + contained there can still be selected by other symbols, though). It is | |
| 120 | + similar to a conditional "prompt" attribude for individual menu | |
| 121 | + entries. Default value of "visible" is true. | |
| 122 | + | |
| 116 | 123 | - numerical ranges: "range" <symbol> <symbol> ["if" <expr>] |
| 117 | 124 | This allows to limit the range of possible input values for int |
| 118 | 125 | and hex symbols. The user can only input a value which is larger than |
| @@ -303,7 +310,8 @@ menu: · 184 unmodified lines | ||
| 303 | 310 | "endmenu" |
| 304 | 311 | |
| 305 | 312 | This defines a menu block, see "Menu structure" above for more |
| 306 | −information. The only possible options are dependencies. | |
| 313 | +information. The only possible options are dependencies and "visible" | |
| 314 | +attributes. | |
| 307 | 315 | |
| 308 | 316 | if: |
| 309 | 317 | |
| @@ -381,3 +389,25 @@ config FOO · 71 unmodified lines | ||
| 381 | 389 | |
| 382 | 390 | limits FOO to module (=m) or disabled (=n). |
| 383 | 391 | |
| 392 | +Kconfig symbol existence | |
| 393 | +~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 394 | +The following two methods produce the same kconfig symbol dependencies | |
| 395 | +but differ greatly in kconfig symbol existence (production) in the | |
| 396 | +generated config file. | |
| 397 | + | |
| 398 | +case 1: | |
| 399 | + | |
| 400 | +config FOO | |
| 401 | + tristate "about foo" | |
| 402 | + depends on BAR | |
| 403 | + | |
| 404 | +vs. case 2: | |
| 405 | + | |
| 406 | +if BAR | |
| 407 | +config FOO | |
| 408 | + tristate "about foo" | |
| 409 | +endif | |
| 410 | + | |
| 411 | +In case 1, the symbol FOO will always exist in the config file (given | |
| 412 | +no other dependencies). In case 2, the symbol FOO will only exist in | |
| 413 | +the config file if BAR is enabled. | |
| @@ -48,11 +48,6 @@ KCONFIG_OVERWRITECONFIG · 47 unmodified lines | ||
| 48 | 48 | If you set KCONFIG_OVERWRITECONFIG in the environment, Kconfig will not |
| 49 | 49 | break symlinks when .config is a symlink to somewhere else. |
| 50 | 50 | |
| 51 | −KCONFIG_NOTIMESTAMP | |
| 52 | −-------------------------------------------------- | |
| 53 | −If this environment variable exists and is non-null, the timestamp line | |
| 54 | −in generated .config files is omitted. | |
| 55 | − | |
| 56 | 51 | ______________________________________________________________________ |
| 57 | 52 | Environment variables for '{allyes/allmod/allno/rand}config' |
| 58 | 53 | |
| @@ -245,7 +245,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 244 unmodified lines | ||
| 245 | 245 | |
| 246 | 246 | acpi_sleep= [HW,ACPI] Sleep options |
| 247 | 247 | Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, |
| 248 | − old_ordering, s4_nonvs, sci_force_enable } | |
| 248 | + old_ordering, nonvs, sci_force_enable } | |
| 249 | 249 | See Documentation/power/video.txt for information on |
| 250 | 250 | s3_bios and s3_mode. |
| 251 | 251 | s3_beep is for debugging; it makes the PC's speaker beep |
| @@ -699,7 +699,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 447 unmodified lines | ||
| 699 | 699 | ekgdboc= [X86,KGDB] Allow early kernel console debugging |
| 700 | 700 | ekgdboc=kbd |
| 701 | 701 | |
| 702 | − This is desgined to be used in conjunction with | |
| 702 | + This is designed to be used in conjunction with | |
| 703 | 703 | the boot argument: earlyprintk=vga |
| 704 | 704 | |
| 705 | 705 | edd= [EDD] |
| @@ -1664,6 +1664,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 958 unmodified lines | ||
| 1664 | 1664 | noexec=on: enable non-executable mappings (default) |
| 1665 | 1665 | noexec=off: disable non-executable mappings |
| 1666 | 1666 | |
| 1667 | + nosmep [X86] | |
| 1668 | + Disable SMEP (Supervisor Mode Execution Protection) | |
| 1669 | + even if it is supported by processor. | |
| 1670 | + | |
| 1667 | 1671 | noexec32 [X86-64] |
| 1668 | 1672 | This affects only 32-bit executables. |
| 1669 | 1673 | noexec32=on: enable non-executable mappings (default) |
| @@ -1773,9 +1777,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 103 unmodified lines | ||
| 1773 | 1777 | |
| 1774 | 1778 | nosoftlockup [KNL] Disable the soft-lockup detector. |
| 1775 | 1779 | |
| 1776 | − noswapaccount [KNL] Disable accounting of swap in memory resource | |
| 1777 | − controller. (See Documentation/cgroups/memory.txt) | |
| 1778 | − | |
| 1779 | 1780 | nosync [HW,M68K] Disables sync negotiation for all devices. |
| 1780 | 1781 | |
| 1781 | 1782 | notsc [BUGS=X86-32] Disable Time Stamp Counter |
| @@ -1832,15 +1833,17 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 50 unmodified lines | ||
| 1832 | 1833 | perfmon on Intel CPUs instead of the |
| 1833 | 1834 | CPU specific event set. |
| 1834 | 1835 | |
| 1835 | − oops=panic Always panic on oopses. Default is to just kill the process, | |
| 1836 | − but there is a small probability of deadlocking the machine. | |
| 1836 | + oops=panic Always panic on oopses. Default is to just kill the | |
| 1837 | + process, but there is a small probability of | |
| 1838 | + deadlocking the machine. | |
| 1837 | 1839 | This will also cause panics on machine check exceptions. |
| 1838 | 1840 | Useful together with panic=30 to trigger a reboot. |
| 1839 | 1841 | |
| 1840 | 1842 | OSS [HW,OSS] |
| 1841 | 1843 | See Documentation/sound/oss/oss-parameters.txt |
| 1842 | 1844 | |
| 1843 | − panic= [KNL] Kernel behaviour on panic | |
| 1845 | + panic= [KNL] Kernel behaviour on panic: delay <timeout> | |
| 1846 | + seconds before rebooting | |
| 1844 | 1847 | Format: <timeout> |
| 1845 | 1848 | |
| 1846 | 1849 | parkbd.port= [HW] Parallel port number the keyboard adapter is |
| @@ -2343,6 +2346,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 496 unmodified lines | ||
| 2343 | 2346 | |
| 2344 | 2347 | softlockup_panic= |
| 2345 | 2348 | [KNL] Should the soft-lockup detector generate panics. |
| 2349 | + Format: <integer> | |
| 2346 | 2350 | |
| 2347 | 2351 | sonypi.*= [HW] Sony Programmable I/O Control Device driver |
| 2348 | 2352 | See Documentation/sonypi.txt |
| @@ -2475,8 +2479,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 126 unmodified lines | ||
| 2475 | 2479 | topology= [S390] |
| 2476 | 2480 | Format: {off | on} |
| 2477 | 2481 | Specify if the kernel should make use of the cpu |
| 2478 | − topology informations if the hardware supports these. | |
| 2479 | − The scheduler will make use of these informations and | |
| 2482 | + topology information if the hardware supports this. | |
| 2483 | + The scheduler will make use of this information and | |
| 2480 | 2484 | e.g. base its process migration decisions on it. |
| 2481 | 2485 | Default is on. |
| 2482 | 2486 | |
| @@ -2529,8 +2533,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 46 unmodified lines | ||
| 2529 | 2533 | reported either. |
| 2530 | 2534 | |
| 2531 | 2535 | unknown_nmi_panic |
| 2532 | − [X86] | |
| 2533 | − Set unknown_nmi_panic=1 early on boot. | |
| 2536 | + [X86] Cause panic on unknown NMI. | |
| 2534 | 2537 | |
| 2535 | 2538 | usbcore.autosuspend= |
| 2536 | 2539 | [USB] The autosuspend time delay (in seconds) used |
| @@ -2579,6 +2582,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. · 42 unmodified lines | ||
| 2579 | 2582 | bytes of sense data); |
| 2580 | 2583 | c = FIX_CAPACITY (decrease the reported |
| 2581 | 2584 | device capacity by one sector); |
| 2585 | + d = NO_READ_DISC_INFO (don't use | |
| 2586 | + READ_DISC_INFO command); | |
| 2587 | + e = NO_READ_CAPACITY_16 (don't use | |
| 2588 | + READ_CAPACITY_16 command); | |
| 2582 | 2589 | h = CAPACITY_HEURISTICS (decrease the |
| 2583 | 2590 | reported device capacity by one |
| 2584 | 2591 | sector if the number is odd); |
| @@ -11,6 +11,7 @@ with the difference that the orphan objects are not freed but only · 10 unmodified lines | ||
| 11 | 11 | reported via /sys/kernel/debug/kmemleak. A similar method is used by the |
| 12 | 12 | Valgrind tool (memcheck --leak-check) to detect the memory leaks in |
| 13 | 13 | user-space applications. |
| 14 | +Kmemleak is supported on x86, arm, powerpc, sparc, sh, microblaze and tile. | |
| 14 | 15 | |
| 15 | 16 | Usage |
| 16 | 17 | ----- |
| @@ -178,5 +179,4 @@ block doesn't need to be freed (some cases in the init_call functions), · 161 unmodified lines | ||
| 178 | 179 | the pointer is calculated by other methods than the usual container_of |
| 179 | 180 | macro or the pointer is stored in a location not scanned by kmemleak. |
| 180 | 181 | |
| 181 | −Page allocations and ioremap are not tracked. Only the ARM and x86 | |
| 182 | −architectures are currently supported. | |
| 182 | +Page allocations and ioremap are not tracked. | |
| @@ -1,184 +0,0 @@ | ||
| 1 | −Acer Laptop WMI Extras Driver | |
| 2 | −http://code.google.com/p/aceracpi | |
| 3 | −Version 0.3 | |
| 4 | −4th April 2009 | |
| 5 | − | |
| 6 | −Copyright 2007-2009 Carlos Corbacho <carlos@strangeworlds.co.uk> | |
| 7 | − | |
| 8 | −acer-wmi is a driver to allow you to control various parts of your Acer laptop | |
| 9 | −hardware under Linux which are exposed via ACPI-WMI. | |
| 10 | − | |
| 11 | −This driver completely replaces the old out-of-tree acer_acpi, which I am | |
| 12 | −currently maintaining for bug fixes only on pre-2.6.25 kernels. All development | |
| 13 | −work is now focused solely on acer-wmi. | |
| 14 | − | |
| 15 | −Disclaimer | |
| 16 | −********** | |
| 17 | − | |
| 18 | −Acer and Wistron have provided nothing towards the development acer_acpi or | |
| 19 | −acer-wmi. All information we have has been through the efforts of the developers | |
| 20 | −and the users to discover as much as possible about the hardware. | |
| 21 | − | |
| 22 | −As such, I do warn that this could break your hardware - this is extremely | |
| 23 | −unlikely of course, but please bear this in mind. | |
| 24 | − | |
| 25 | −Background | |
| 26 | −********** | |
| 27 | − | |
| 28 | −acer-wmi is derived from acer_acpi, originally developed by Mark | |
| 29 | −Smith in 2005, then taken over by Carlos Corbacho in 2007, in order to activate | |
| 30 | −the wireless LAN card under a 64-bit version of Linux, as acerhk[1] (the | |
| 31 | −previous solution to the problem) relied on making 32 bit BIOS calls which are | |
| 32 | −not possible in kernel space from a 64 bit OS. | |
| 33 | − | |
| 34 | −[1] acerhk: http://www.cakey.de/acerhk/ | |
| 35 | − | |
| 36 | −Supported Hardware | |
| 37 | −****************** | |
| 38 | − | |
| 39 | −NOTE: The Acer Aspire One is not supported hardware. It cannot work with | |
| 40 | −acer-wmi until Acer fix their ACPI-WMI implementation on them, so has been | |
| 41 | −blacklisted until that happens. | |
| 42 | − | |
| 43 | −Please see the website for the current list of known working hardware: | |
| 44 | − | |
| 45 | −http://code.google.com/p/aceracpi/wiki/SupportedHardware | |
| 46 | − | |
| 47 | −If your laptop is not listed, or listed as unknown, and works with acer-wmi, | |
| 48 | −please contact me with a copy of the DSDT. | |
| 49 | − | |
| 50 | −If your Acer laptop doesn't work with acer-wmi, I would also like to see the | |
| 51 | −DSDT. | |
| 52 | − | |
| 53 | −To send me the DSDT, as root/sudo: | |
| 54 | − | |
| 55 | −cat /sys/firmware/acpi/tables/DSDT > dsdt | |
| 56 | − | |
| 57 | −And send me the resulting 'dsdt' file. | |
| 58 | − | |
| 59 | −Usage | |
| 60 | −***** | |
| 61 | − | |
| 62 | −On Acer laptops, acer-wmi should already be autoloaded based on DMI matching. | |
| 63 | −For non-Acer laptops, until WMI based autoloading support is added, you will | |
| 64 | −need to manually load acer-wmi. | |
| 65 | − | |
| 66 | −acer-wmi creates /sys/devices/platform/acer-wmi, and fills it with various | |
| 67 | −files whose usage is detailed below, which enables you to control some of the | |
| 68 | −following (varies between models): | |
| 69 | − | |
| 70 | −* the wireless LAN card radio | |
| 71 | −* inbuilt Bluetooth adapter | |
| 72 | −* inbuilt 3G card | |
| 73 | −* mail LED of your laptop | |
| 74 | −* brightness of the LCD panel | |
| 75 | − | |
| 76 | −Wireless | |
| 77 | −******** | |
| 78 | − | |
| 79 | −With regards to wireless, all acer-wmi does is enable the radio on the card. It | |
| 80 | −is not responsible for the wireless LED - once the radio is enabled, this is | |
| 81 | −down to the wireless driver for your card. So the behaviour of the wireless LED, | |
| 82 | −once you enable the radio, will depend on your hardware and driver combination. | |
| 83 | − | |
| 84 | −e.g. With the BCM4318 on the Acer Aspire 5020 series: | |
| 85 | − | |
| 86 | −ndiswrapper: Light blinks on when transmitting | |
| 87 | −b43: Solid light, blinks off when transmitting | |
| 88 | − | |
| 89 | −Wireless radio control is unconditionally enabled - all Acer laptops that support | |
| 90 | −acer-wmi come with built-in wireless. However, should you feel so inclined to | |
| 91 | −ever wish to remove the card, or swap it out at some point, please get in touch | |
| 92 | −with me, as we may well be able to gain some data on wireless card detection. | |
| 93 | − | |
| 94 | −The wireless radio is exposed through rfkill. | |
| 95 | − | |
| 96 | −Bluetooth | |
| 97 | −********* | |
| 98 | − | |
| 99 | −For bluetooth, this is an internal USB dongle, so once enabled, you will get | |
| 100 | −a USB device connection event, and a new USB device appears. When you disable | |
| 101 | −bluetooth, you get the reverse - a USB device disconnect event, followed by the | |
| 102 | −device disappearing again. | |
| 103 | − | |
| 104 | −Bluetooth is autodetected by acer-wmi, so if you do not have a bluetooth module | |
| 105 | −installed in your laptop, this file won't exist (please be aware that it is | |
| 106 | −quite common for Acer not to fit bluetooth to their laptops - so just because | |
| 107 | −you have a bluetooth button on the laptop, doesn't mean that bluetooth is | |
| 108 | −installed). | |
| 109 | − | |
| 110 | −For the adventurously minded - if you want to buy an internal bluetooth | |
| 111 | −module off the internet that is compatible with your laptop and fit it, then | |
| 112 | −it will work just fine with acer-wmi. | |
| 113 | − | |
| 114 | −Bluetooth is exposed through rfkill. | |
| 115 | − | |
| 116 | −3G | |
| 117 | −** | |
| 118 | − | |
| 119 | −3G is currently not autodetected, so the 'threeg' file is always created under | |
| 120 | −sysfs. So far, no-one in possession of an Acer laptop with 3G built-in appears to | |
| 121 | −have tried Linux, or reported back, so we don't have any information on this. | |
| 122 | − | |
| 123 | −If you have an Acer laptop that does have a 3G card in, please contact me so we | |
| 124 | −can properly detect these, and find out a bit more about them. | |
| 125 | − | |
| 126 | −To read the status of the 3G card (0=off, 1=on): | |
| 127 | −cat /sys/devices/platform/acer-wmi/threeg | |
| 128 | − | |
| 129 | −To enable the 3G card: | |
| 130 | −echo 1 > /sys/devices/platform/acer-wmi/threeg | |
| 131 | − | |
| 132 | −To disable the 3G card: | |
| 133 | −echo 0 > /sys/devices/platform/acer-wmi/threeg | |
| 134 | − | |
| 135 | −To set the state of the 3G card when loading acer-wmi, pass: | |
| 136 | −threeg=X (where X is 0 or 1) | |
| 137 | − | |
| 138 | −Mail LED | |
| 139 | −******** | |
| 140 | − | |
| 141 | −This can be found in most older Acer laptops supported by acer-wmi, and many | |
| 142 | −newer ones - it is built into the 'mail' button, and blinks when active. | |
| 143 | − | |
| 144 | −On newer (WMID) laptops though, we have no way of detecting the mail LED. If | |
| 145 | −your laptop identifies itself in dmesg as a WMID model, then please try loading | |
| 146 | −acer_acpi with: | |
| 147 | − | |
| 148 | −force_series=2490 | |
| 149 | − | |
| 150 | −This will use a known alternative method of reading/ writing the mail LED. If | |
| 151 | −it works, please report back to me with the DMI data from your laptop so this | |
| 152 | −can be added to acer-wmi. | |
| 153 | − | |
| 154 | −The LED is exposed through the LED subsystem, and can be found in: | |
| 155 | − | |
| 156 | −/sys/devices/platform/acer-wmi/leds/acer-wmi::mail/ | |
| 157 | − | |
| 158 | −The mail LED is autodetected, so if you don't have one, the LED device won't | |
| 159 | −be registered. | |
| 160 | − | |
| 161 | −Backlight | |
| 162 | −********* | |
| 163 | − | |
| 164 | −The backlight brightness control is available on all acer-wmi supported | |
| 165 | −hardware. The maximum brightness level is usually 15, but on some newer laptops | |
| 166 | −it's 10 (this is again autodetected). | |
| 167 | − | |
| 168 | −The backlight is exposed through the backlight subsystem, and can be found in: | |
| 169 | − | |
| 170 | −/sys/devices/platform/acer-wmi/backlight/acer-wmi/ | |
| 171 | − | |
| 172 | −Credits | |
| 173 | −******* | |
| 174 | − | |
| 175 | −Olaf Tauber, who did the real hard work when he developed acerhk | |
| 176 | −http://www.cakey.de/acerhk/ | |
| 177 | −All the authors of laptop ACPI modules in the kernel, whose work | |
| 178 | −was an inspiration in the early days of acer_acpi | |
| 179 | −Mathieu Segaud, who solved the problem with having to modprobe the driver | |
| 180 | −twice in acer_acpi 0.2. | |
| 181 | −Jim Ramsay, who added support for the WMID interface | |
| 182 | −Mark Smith, who started the original acer_acpi | |
| 183 | − | |
| 184 | −And the many people who have used both acer_acpi and acer-wmi. | |
| @@ -61,7 +61,7 @@ Usage · 60 unmodified lines | ||
| 61 | 61 | Hotkeys are also reported as input keys (like keyboards) you can check |
| 62 | 62 | which key are supported using "xev" under X11. |
| 63 | 63 | |
| 64 | − You can get informations on the version of your DSDT table by reading the | |
| 64 | + You can get information on the version of your DSDT table by reading the | |
| 65 | 65 | /sys/devices/platform/asus-laptop/infos entry. If you have a question or a |
| 66 | 66 | bug report to do, please include the output of this entry. |
| 67 | 67 | |
| @@ -178,7 +178,7 @@ LED display · 110 unmodified lines | ||
| 178 | 178 | ----------- |
| 179 | 179 | |
| 180 | 180 | Some models like the W1N have a LED display that can be used to display |
| 181 | − several informations. | |
| 181 | + several items of information. | |
| 182 | 182 | |
| 183 | 183 | LED display works for the following models: |
| 184 | 184 | W1000N |
| @@ -0,0 +1,8 @@ | ||
| 1 | +leds-class.txt | |
| 2 | + - documents LED handling under Linux. | |
| 3 | +leds-lp3944.txt | |
| 4 | + - notes on how to use the leds-lp3944 driver. | |
| 5 | +leds-lp5521.txt | |
| 6 | + - notes on how to use the leds-lp5521 driver. | |
| 7 | +leds-lp5523.txt | |
| 8 | + - notes on how to use the leds-lp5523 driver. | |
| @@ -95,4 +95,3 @@ There are a number of cases where a trigger might only be mappable to a · 94 unmodified lines | ||
| 95 | 95 | particular LED (ACPI?). The addition of triggers provided by the LED driver |
| 96 | 96 | should cover this option and be possible to add without breaking the |
| 97 | 97 | current interface. |
| 98 | − | |
File renamed without changes.
| @@ -12,8 +12,9 @@ Because things like lock contention can severely impact performance. · 11 unmodified lines | ||
| 12 | 12 | - HOW |
| 13 | 13 | |
| 14 | 14 | Lockdep already has hooks in the lock functions and maps lock instances to |
| 15 | −lock classes. We build on that. The graph below shows the relation between | |
| 16 | −the lock functions and the various hooks therein. | |
| 15 | +lock classes. We build on that (see Documentation/lockdep-design.txt). | |
| 16 | +The graph below shows the relation between the lock functions and the various | |
| 17 | +hooks therein. | |
| 17 | 18 | |
| 18 | 19 | __acquire |
| 19 | 20 | | |
| @@ -128,6 +129,37 @@ points are the points we're contending with. · 108 unmodified lines | ||
| 128 | 129 | |
| 129 | 130 | The integer part of the time values is in us. |
| 130 | 131 | |
| 132 | +Dealing with nested locks, subclasses may appear: | |
| 133 | + | |
| 134 | +32............................................................................................................................................................................................... | |
| 135 | +33 | |
| 136 | +34 &rq->lock: 13128 13128 0.43 190.53 103881.26 97454 3453404 0.00 401.11 13224683.11 | |
| 137 | +35 --------- | |
| 138 | +36 &rq->lock 645 [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75 | |
| 139 | +37 &rq->lock 297 [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a | |
| 140 | +38 &rq->lock 360 [<ffffffff8103c4c5>] select_task_rq_fair+0x1f0/0x74a | |
| 141 | +39 &rq->lock 428 [<ffffffff81045f98>] scheduler_tick+0x46/0x1fb | |
| 142 | +40 --------- | |
| 143 | +41 &rq->lock 77 [<ffffffff8103bfc4>] task_rq_lock+0x43/0x75 | |
| 144 | +42 &rq->lock 174 [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a | |
| 145 | +43 &rq->lock 4715 [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54 | |
| 146 | +44 &rq->lock 893 [<ffffffff81340524>] schedule+0x157/0x7b8 | |
| 147 | +45 | |
| 148 | +46............................................................................................................................................................................................... | |
| 149 | +47 | |
| 150 | +48 &rq->lock/1: 11526 11488 0.33 388.73 136294.31 21461 38404 0.00 37.93 109388.53 | |
| 151 | +49 ----------- | |
| 152 | +50 &rq->lock/1 11526 [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54 | |
| 153 | +51 ----------- | |
| 154 | +52 &rq->lock/1 5645 [<ffffffff8103ed4b>] double_rq_lock+0x42/0x54 | |
| 155 | +53 &rq->lock/1 1224 [<ffffffff81340524>] schedule+0x157/0x7b8 | |
| 156 | +54 &rq->lock/1 4336 [<ffffffff8103ed58>] double_rq_lock+0x4f/0x54 | |
| 157 | +55 &rq->lock/1 181 [<ffffffff8104ba65>] try_to_wake_up+0x127/0x25a | |
| 158 | + | |
| 159 | +Line 48 shows statistics for the second subclass (/1) of &rq->lock class | |
| 160 | +(subclass starts from 0), since in this case, as line 50 suggests, | |
| 161 | +double_rq_lock actually acquires a nested lock of two spinlocks. | |
| 162 | + | |
| 131 | 163 | View the top contending locks: |
| 132 | 164 | |
| 133 | 165 | # grep : /proc/lock_stat | head |
| @@ -136,7 +168,7 @@ View the top contending locks: · 2 unmodified lines | ||
| 136 | 168 | dcache_lock: 1037 1161 0.38 45.32 774.51 6611 243371 0.15 306.48 77387.24 |
| 137 | 169 | &inode->i_mutex: 161 286 18446744073709 62882.54 1244614.55 3653 20598 18446744073709 62318.60 1693822.74 |
| 138 | 170 | &zone->lru_lock: 94 94 0.53 7.33 92.10 4366 32690 0.29 59.81 16350.06 |
| 139 | − &inode->i_data.i_mmap_lock: 79 79 0.40 3.77 53.03 11779 87755 0.28 116.93 29898.44 | |
| 171 | + &inode->i_data.i_mmap_mutex: 79 79 0.40 3.77 53.03 11779 87755 0.28 116.93 29898.44 | |
| 140 | 172 | &q->__queue_lock: 48 50 0.52 31.62 86.31 774 13131 0.17 113.08 12277.52 |
| 141 | 173 | &rq->rq_lock_key: 43 47 0.74 68.50 170.63 3706 33929 0.22 107.99 17460.62 |
| 142 | 174 | &rq->rq_lock_key#2: 39 46 0.75 6.68 49.03 2979 32292 0.17 125.17 17137.63 |
| @@ -552,6 +552,16 @@ also have · 551 unmodified lines | ||
| 552 | 552 | within the array where IO will be blocked. This is currently |
| 553 | 553 | only supported for raid4/5/6. |
| 554 | 554 | |
| 555 | + sync_min | |
| 556 | + sync_max | |
| 557 | + The two values, given as numbers of sectors, indicate a range | |
| 558 | + withing the array where 'check'/'repair' will operate. Must be | |
| 559 | + a multiple of chunk_size. When it reaches "sync_max" it will | |
| 560 | + pause, rather than complete. | |
| 561 | + You can use 'select' or 'poll' on "sync_completed" to wait for | |
| 562 | + that number to reach sync_max. Then you can either increase | |
| 563 | + "sync_max", or can write 'idle' to "sync_action". | |
| 564 | + | |
| 555 | 565 | |
| 556 | 566 | Each active md device may also have attributes specific to the |
| 557 | 567 | personality module that manages it. |
| @@ -194,7 +194,7 @@ each pad. · 193 unmodified lines | ||
| 194 | 194 | |
| 195 | 195 | Links are represented by a struct media_link instance, defined in |
| 196 | 196 | include/media/media-entity.h. Each entity stores all links originating at or |
| 197 | −targetting any of its pads in a links array. A given link is thus stored | |
| 197 | +targeting any of its pads in a links array. A given link is thus stored | |
| 198 | 198 | twice, once in the source entity and once in the target entity. The array is |
| 199 | 199 | pre-allocated and grows dynamically as needed. |
| 200 | 200 | |
| @@ -348,6 +348,6 @@ a streaming entity. Links that can be modified while streaming must be marked · 147 unmodified lines | ||
| 348 | 348 | with the MEDIA_LNK_FL_DYNAMIC flag. |
| 349 | 349 | |
| 350 | 350 | If other operations need to be disallowed on streaming entities (such as |
| 351 | −changing entities configuration parameters) drivers can explictly check the | |
| 351 | +changing entities configuration parameters) drivers can explicitly check the | |
| 352 | 352 | media_entity stream_count field to find out if an entity is streaming. This |
| 353 | 353 | operation must be done with the media_device graph_mutex held. |
| @@ -39,13 +39,13 @@ Note: for more information, please refer "AMD Alchemy Au1200/Au1550 IDE · 38 unmodified lines | ||
| 39 | 39 | Interface and Linux Device Driver" Application Note. |
| 40 | 40 | |
| 41 | 41 | |
| 42 | −FILES, CONFIGS AND COMPATABILITY | |
| 42 | +FILES, CONFIGS AND COMPATIBILITY | |
| 43 | 43 | -------------------------------- |
| 44 | 44 | |
| 45 | 45 | Two files are introduced: |
| 46 | 46 | |
| 47 | 47 | a) 'arch/mips/include/asm/mach-au1x00/au1xxx_ide.h' |
| 48 | − containes : struct _auide_hwif | |
| 48 | + contains : struct _auide_hwif | |
| 49 | 49 | timing parameters for PIO mode 0/1/2/3/4 |
| 50 | 50 | timing parameters for MWDMA 0/1/2 |
| 51 | 51 | |
| @@ -5,7 +5,7 @@ Supported chips: · 4 unmodified lines | ||
| 5 | 5 | * IDT ICS932S401 |
| 6 | 6 | Prefix: 'ics932s401' |
| 7 | 7 | Addresses scanned: I2C 0x69 |
| 8 | − Datasheet: Publically available at the IDT website | |
| 8 | + Datasheet: Publicly available at the IDT website | |
| 9 | 9 | |
| 10 | 10 | Author: Darrick J. Wong |
| 11 | 11 | |
| @@ -2,3 +2,5 @@ · 1 unmodified line | ||
| 2 | 2 | - this file |
| 3 | 3 | mmc-dev-attrs.txt |
| 4 | 4 | - info on SD and MMC device attributes |
| 5 | +mmc-dev-parts.txt | |
| 6 | + - info on SD and MMC device partitions | |
| @@ -1,3 +1,13 @@ | ||
| 1 | +SD and MMC Block Device Attributes | |
| 2 | +================================== | |
| 3 | + | |
| 4 | +These attributes are defined for the block devices associated with the | |
| 5 | +SD or MMC device. | |
| 6 | + | |
| 7 | +The following attributes are read/write. | |
| 8 | + | |
| 9 | + force_ro Enforce read-only access even if write protect switch is off. | |
| 10 | + | |
| 1 | 11 | SD and MMC Device Attributes |
| 2 | 12 | ============================ |
| 3 | 13 | |
| @@ -0,0 +1,27 @@ | ||
| 1 | +SD and MMC Device Partitions | |
| 2 | +============================ | |
| 3 | + | |
| 4 | +Device partitions are additional logical block devices present on the | |
| 5 | +SD/MMC device. | |
| 6 | + | |
| 7 | +As of this writing, MMC boot partitions as supported and exposed as | |
| 8 | +/dev/mmcblkXboot0 and /dev/mmcblkXboot1, where X is the index of the | |
| 9 | +parent /dev/mmcblkX. | |
| 10 | + | |
| 11 | +MMC Boot Partitions | |
| 12 | +=================== | |
| 13 | + | |
| 14 | +Read and write access is provided to the two MMC boot partitions. Due to | |
| 15 | +the sensitive nature of the boot partition contents, which often store | |
| 16 | +a bootloader or bootloader configuration tables crucial to booting the | |
| 17 | +platform, write access is disabled by default to reduce the chance of | |
| 18 | +accidental bricking. | |
| 19 | + | |
| 20 | +To enable write access to /dev/mmcblkXbootY, disable the forced read-only | |
| 21 | +access with: | |
| 22 | + | |
| 23 | +echo 0 > /sys/block/mmcblkXbootY/force_ro | |
| 24 | + | |
| 25 | +To re-enable read-only access: | |
| 26 | + | |
| 27 | +echo 1 > /sys/block/mmcblkXbootY/force_ro | |
| @@ -45,7 +45,7 @@ debugging messages on, that must be done by modified the source code. · 44 unmodified lines | ||
| 45 | 45 | |
| 46 | 46 | Variable MTU size: |
| 47 | 47 | |
| 48 | −The driver can handle a MTU size upto either 4500 or 18000 depending upon | |
| 48 | +The driver can handle a MTU size up to either 4500 or 18000 depending upon | |
| 49 | 49 | ring speed. The driver also changes the size of the receive buffers as part |
| 50 | 50 | of the mtu re-sizing, so if you set mtu = 18000, you will need to be able |
| 51 | 51 | to allocate 16 * (sk_buff with 18000 buffer size) call it 18500 bytes per ring |
| @@ -256,7 +256,7 @@ You can set the debug level via: · 255 unmodified lines | ||
| 256 | 256 | |
| 257 | 257 | Where $VALUE would be a number in the case of this sysfs entry. The |
| 258 | 258 | input to sysfs files does not have to be a number. For example, the |
| 259 | −firmware loader used by hotplug utilizes sysfs entries for transfering | |
| 259 | +firmware loader used by hotplug utilizes sysfs entries for transferring | |
| 260 | 260 | the firmware image from user space into the driver. |
| 261 | 261 | |
| 262 | 262 | The Intel(R) PRO/Wireless 2915ABG Driver for Linux exposes sysfs entries |
| @@ -1,4 +1,4 @@ | ||
| 1 | −[state: 27-01-2011] | |
| 1 | +[state: 17-04-2011] | |
| 2 | 2 | |
| 3 | 3 | BATMAN-ADV |
| 4 | 4 | ---------- |
| @@ -19,6 +19,7 @@ duce the overhead to a minimum. It does not depend on any (other) · 14 unmodified lines | ||
| 19 | 19 | network driver, and can be used on wifi as well as ethernet lan, |
| 20 | 20 | vpn, etc ... (anything with ethernet-style layer 2). |
| 21 | 21 | |
| 22 | + | |
| 22 | 23 | CONFIGURATION |
| 23 | 24 | ------------- |
| 24 | 25 | |
| @@ -72,7 +73,7 @@ folder: · 47 unmodified lines | ||
| 72 | 73 | # fragmentation gw_sel_class vis_mode |
| 73 | 74 | |
| 74 | 75 | |
| 75 | −There is a special folder for debugging informations: | |
| 76 | +There is a special folder for debugging information: | |
| 76 | 77 | |
| 77 | 78 | # ls /sys/kernel/debug/batman_adv/bat0/ |
| 78 | 79 | # gateways socket transtable_global vis_data |
| @@ -160,13 +161,13 @@ face. Each entry can/has to have the following values: · 81 unmodified lines | ||
| 160 | 161 | -> "TQ mac value" - src mac's link quality towards mac address |
| 161 | 162 | of a neighbor originator's interface which |
| 162 | 163 | is being used for routing |
| 163 | −-> "HNA mac" - HNA announced by source mac | |
| 164 | +-> "TT mac" - TT announced by source mac | |
| 164 | 165 | -> "PRIMARY" - this is a primary interface |
| 165 | 166 | -> "SEC mac" - secondary mac address of source |
| 166 | 167 | (requires preceding PRIMARY) |
| 167 | 168 | |
| 168 | 169 | The TQ value has a range from 4 to 255 with 255 being the best. |
| 169 | −The HNA entries are showing which hosts are connected to the mesh | |
| 170 | +The TT entries are showing which hosts are connected to the mesh | |
| 170 | 171 | via bat0 or being bridged into the mesh network. The PRIMARY/SEC |
| 171 | 172 | values are only applied on primary interfaces |
| 172 | 173 | |
| @@ -199,7 +200,7 @@ abled during run time. Following log_levels are defined: · 26 unmodified lines | ||
| 199 | 200 | |
| 200 | 201 | 0 - All debug output disabled |
| 201 | 202 | 1 - Enable messages related to routing / flooding / broadcasting |
| 202 | −2 - Enable route or hna added / changed / deleted | |
| 203 | +2 - Enable route or tt entry added / changed / deleted | |
| 203 | 204 | 3 - Enable all messages |
| 204 | 205 | |
| 205 | 206 | The debug output can be changed at runtime using the file |
| @@ -207,7 +208,7 @@ The debug output can be changed at runtime using the file · 1 unmodified line | ||
| 207 | 208 | |
| 208 | 209 | # echo 2 > /sys/class/net/bat0/mesh/log_level |
| 209 | 210 | |
| 210 | −will enable debug messages for when routes or HNAs change. | |
| 211 | +will enable debug messages for when routes or TTs change. | |
| 211 | 212 | |
| 212 | 213 | |
| 213 | 214 | BATCTL |
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | |
| 2 | 2 | Linux Ethernet Bonding Driver HOWTO |
| 3 | 3 | |
| 4 | − Latest update: 23 September 2009 | |
| 4 | + Latest update: 27 April 2011 | |
| 5 | 5 | |
| 6 | 6 | Initial release : Thomas Davis <tadavis at lbl.gov> |
| 7 | 7 | Corrections, HA extensions : 2000/10/03-15 : |
| @@ -368,7 +368,7 @@ fail_over_mac · 360 unmodified lines | ||
| 368 | 368 | gratuitous ARP is lost, communication may be |
| 369 | 369 | disrupted. |
| 370 | 370 | |
| 371 | − When this policy is used in conjuction with the mii | |
| 371 | + When this policy is used in conjunction with the mii | |
| 372 | 372 | monitor, devices which assert link up prior to being |
| 373 | 373 | able to actually transmit and receive are particularly |
| 374 | 374 | susceptible to loss of the gratuitous ARP, and an |
| @@ -585,25 +585,23 @@ mode · 210 unmodified lines | ||
| 585 | 585 | chosen. |
| 586 | 586 | |
| 587 | 587 | num_grat_arp |
| 588 | − | |
| 589 | − Specifies the number of gratuitous ARPs to be issued after a | |
| 590 | − failover event. One gratuitous ARP is issued immediately after | |
| 591 | − the failover, subsequent ARPs are sent at a rate of one per link | |
| 592 | − monitor interval (arp_interval or miimon, whichever is active). | |
| 593 | − | |
| 594 | − The valid range is 0 - 255; the default value is 1. This option | |
| 595 | − affects only the active-backup mode. This option was added for | |
| 596 | − bonding version 3.3.0. | |
| 597 | − | |
| 598 | 588 | num_unsol_na |
| 599 | 589 | |
| 600 | − Specifies the number of unsolicited IPv6 Neighbor Advertisements | |
| 601 | − to be issued after a failover event. One unsolicited NA is issued | |
| 602 | − immediately after the failover. | |
| 590 | + Specify the number of peer notifications (gratuitous ARPs and | |
| 591 | + unsolicited IPv6 Neighbor Advertisements) to be issued after a | |
| 592 | + failover event. As soon as the link is up on the new slave | |
| 593 | + (possibly immediately) a peer notification is sent on the | |
| 594 | + bonding device and each VLAN sub-device. This is repeated at | |
| 595 | + each link monitor interval (arp_interval or miimon, whichever | |
| 596 | + is active) if the number is greater than 1. | |
| 603 | 597 | |
| 604 | − The valid range is 0 - 255; the default value is 1. This option | |
| 605 | − affects only the active-backup mode. This option was added for | |
| 606 | − bonding version 3.4.0. | |
| 598 | + The valid range is 0 - 255; the default value is 1. These options | |
| 599 | + affect only the active-backup mode. These options were added for | |
| 600 | + bonding versions 3.3.0 and 3.4.0 respectively. | |
| 601 | + | |
| 602 | + From Linux 2.6.40 and bonding version 3.7.1, these notifications | |
| 603 | + are generated by the ipv4 and ipv6 code and the numbers of | |
| 604 | + repetitions cannot be set independently. | |
| 607 | 605 | |
| 608 | 606 | primary |
| 609 | 607 | |
| @@ -772,8 +770,17 @@ resend_igmp · 162 unmodified lines | ||
| 772 | 770 | a failover event. One membership report is issued immediately after |
| 773 | 771 | the failover, subsequent packets are sent in each 200ms interval. |
| 774 | 772 | |
| 775 | − The valid range is 0 - 255; the default value is 1. This option | |
| 776 | − was added for bonding version 3.7.0. | |
| 773 | + The valid range is 0 - 255; the default value is 1. A value of 0 | |
| 774 | + prevents the IGMP membership report from being issued in response | |
| 775 | + to the failover event. | |
| 776 | + | |
| 777 | + This option is useful for bonding modes balance-rr (0), active-backup | |
| 778 | + (1), balance-tlb (5) and balance-alb (6), in which a failover can | |
| 779 | + switch the IGMP traffic from one slave to another. Therefore a fresh | |
| 780 | + IGMP report must be issued to cause the switch to forward the incoming | |
| 781 | + IGMP traffic over the newly selected slave. | |
| 782 | + | |
| 783 | + This option was added for bonding version 3.7.0. | |
| 777 | 784 | |
| 778 | 785 | 3. Configuring Bonding Devices |
| 779 | 786 | ============================== |
| @@ -136,7 +136,7 @@ The CAIF Protocol implementation contains: · 135 unmodified lines | ||
| 136 | 136 | - CFMUX CAIF Mux layer. Handles multiplexing between multiple |
| 137 | 137 | physical bearers and multiple channels such as VEI, Datagram, etc. |
| 138 | 138 | The MUX keeps track of the existing CAIF Channels and |
| 139 | − Physical Instances and selects the apropriate instance based | |
| 139 | + Physical Instances and selects the appropriate instance based | |
| 140 | 140 | on Channel-Id and Physical-ID. |
| 141 | 141 | |
| 142 | 142 | - CFFRML CAIF Framing layer. Handles Framing i.e. Frame length |
| @@ -150,7 +150,7 @@ static int sspi_init_xfer(struct cfspi_xfer *xfer, struct cfspi_dev *dev) · 149 unmodified lines | ||
| 150 | 150 | void sspi_sig_xfer(bool xfer, struct cfspi_dev *dev) |
| 151 | 151 | { |
| 152 | 152 | /* If xfer is true then you should assert the SPI_INT to indicate to |
| 153 | − * the master that you are ready to recieve the data from the master | |
| 153 | + * the master that you are ready to receive the data from the master | |
| 154 | 154 | * SPI. If xfer is false then you should de-assert SPI_INT to indicate |
| 155 | 155 | * that the transfer is done. |
| 156 | 156 | */ |
| @@ -240,7 +240,7 @@ solution for a couple of reasons: · 239 unmodified lines | ||
| 240 | 240 | the user application using the common CAN filter mechanisms. Inside |
| 241 | 241 | this filter definition the (interested) type of errors may be |
| 242 | 242 | selected. The reception of error frames is disabled by default. |
| 243 | − The format of the CAN error frame is briefly decribed in the Linux | |
| 243 | + The format of the CAN error frame is briefly described in the Linux | |
| 244 | 244 | header file "include/linux/can/error.h". |
| 245 | 245 | |
| 246 | 246 | 4. How to use Socket CAN |
| @@ -139,8 +139,8 @@ the key will be discarded and recreated when the data it holds has expired. · 138 unmodified lines | ||
| 139 | 139 | dns_query() returns a copy of the value attached to the key, or an error if |
| 140 | 140 | that is indicated instead. |
| 141 | 141 | |
| 142 | −See <file:Documentation/keys-request-key.txt> for further information about | |
| 143 | −request-key function. | |
| 142 | +See <file:Documentation/security/keys-request-key.txt> for further | |
| 143 | +information about request-key function. | |
| 144 | 144 | |
| 145 | 145 | |
| 146 | 146 | ========= |
| @@ -9,7 +9,7 @@ The Linux-ZigBee project goal is to provide complete implementation · 8 unmodified lines | ||
| 9 | 9 | of IEEE 802.15.4 / ZigBee / 6LoWPAN protocols. IEEE 802.15.4 is a stack |
| 10 | 10 | of protocols for organizing Low-Rate Wireless Personal Area Networks. |
| 11 | 11 | |
| 12 | −Currently only IEEE 802.15.4 layer is implemented. We have choosen | |
| 12 | +Currently only IEEE 802.15.4 layer is implemented. We have chosen | |
| 13 | 13 | to use plain Berkeley socket API, the generic Linux networking stack |
| 14 | 14 | to transfer IEEE 802.15.4 messages and a special protocol over genetlink |
| 15 | 15 | for configuration/management |
| @@ -93,6 +93,19 @@ Additional Configurations · 92 unmodified lines | ||
| 93 | 93 | REQUIREMENTS: MSI-X support is required for Multiqueue. If MSI-X is not |
| 94 | 94 | found, the system will fallback to MSI or to Legacy interrupts. |
| 95 | 95 | |
| 96 | + MAC and VLAN anti-spoofing feature | |
| 97 | + ---------------------------------- | |
| 98 | + When a malicious driver attempts to send a spoofed packet, it is dropped by | |
| 99 | + the hardware and not transmitted. An interrupt is sent to the PF driver | |
| 100 | + notifying it of the spoof attempt. | |
| 101 | + | |
| 102 | + When a spoofed packet is detected the PF driver will send the following | |
| 103 | + message to the system log (displayed by the "dmesg" command): | |
| 104 | + | |
| 105 | + Spoof event(s) detected on VF(n) | |
| 106 | + | |
| 107 | + Where n=the VF that attempted to do the spoofing. | |
| 108 | + | |
| 96 | 109 | Support |
| 97 | 110 | ======= |
| 98 | 111 | |
| @@ -65,7 +65,7 @@ together. · 64 unmodified lines | ||
| 65 | 65 | |
| 66 | 66 | Variable MTU size: |
| 67 | 67 | |
| 68 | −The driver can handle a MTU size upto either 4500 or 18000 depending upon | |
| 68 | +The driver can handle a MTU size up to either 4500 or 18000 depending upon | |
| 69 | 69 | ring speed. The driver also changes the size of the receive buffers as part |
| 70 | 70 | of the mtu re-sizing, so if you set mtu = 18000, you will need to be able |
| 71 | 71 | to allocate 16 * (sk_buff with 18000 buffer size) call it 18500 bytes per ring |
| @@ -223,7 +223,7 @@ we will get the following buffer structure: · 222 unmodified lines | ||
| 223 | 223 | |
| 224 | 224 | A frame can be of any size with the only condition it can fit in a block. A block |
| 225 | 225 | can only hold an integer number of frames, or in other words, a frame cannot |
| 226 | −be spawned accross two blocks, so there are some details you have to take into | |
| 226 | +be spawned across two blocks, so there are some details you have to take into | |
| 227 | 227 | account when choosing the frame_size. See "Mapping and use of the circular |
| 228 | 228 | buffer (ring)". |
| 229 | 229 | |
| @@ -37,7 +37,7 @@ To associate an interface with a physical adapter use "ethtool -p <ethX>". · 36 unmodified lines | ||
| 37 | 37 | The corresponding adapter's LED will blink multiple times. |
| 38 | 38 | |
| 39 | 39 | 3. Features supported: |
| 40 | −a. Jumbo frames. Xframe I/II supports MTU upto 9600 bytes, | |
| 40 | +a. Jumbo frames. Xframe I/II supports MTU up to 9600 bytes, | |
| 41 | 41 | modifiable using ifconfig command. |
| 42 | 42 | |
| 43 | 43 | b. Offloads. Supports checksum offload(TCP/UDP/IP) on transmit |
| @@ -49,7 +49,7 @@ significant performance improvement on certain platforms(SGI Altix, · 5 unmodified lines | ||
| 49 | 49 | IBM xSeries). |
| 50 | 50 | |
| 51 | 51 | d. MSI/MSI-X. Can be enabled on platforms which support this feature |
| 52 | −(IA64, Xeon) resulting in noticeable performance improvement(upto 7% | |
| 52 | +(IA64, Xeon) resulting in noticeable performance improvement(up to 7% | |
| 53 | 53 | on certain platforms). |
| 54 | 54 | |
| 55 | 55 | e. Statistics. Comprehensive MAC-level and software statistics displayed |
| @@ -1,5 +1,5 @@ | ||
| 1 | 1 | |
| 2 | −The "enviromental" rules for authors of any new tc actions are: | |
| 2 | +The "environmental" rules for authors of any new tc actions are: | |
| 3 | 3 | |
| 4 | 4 | 1) If you stealeth or borroweth any packet thou shalt be branching |
| 5 | 5 | from the righteous path and thou shalt cloneth. |
| @@ -20,7 +20,7 @@ this way any action downstream can stomp on the packet. · 14 unmodified lines | ||
| 20 | 20 | 3) Dropping packets you don't own is a no-no. You simply return |
| 21 | 21 | TC_ACT_SHOT to the caller and they will drop it. |
| 22 | 22 | |
| 23 | −The "enviromental" rules for callers of actions (qdiscs etc) are: | |
| 23 | +The "environmental" rules for callers of actions (qdiscs etc) are: | |
| 24 | 24 | |
| 25 | 25 | *) Thou art responsible for freeing anything returned as being |
| 26 | 26 | TC_ACT_SHOT/STOLEN/QUEUED. If none of TC_ACT_SHOT/STOLEN/QUEUED is |
| @@ -279,11 +279,15 @@ When the system goes into the standby or memory sleep state, the phases are: · 278 unmodified lines | ||
| 279 | 279 | time.) Unlike the other suspend-related phases, during the prepare |
| 280 | 280 | phase the device tree is traversed top-down. |
| 281 | 281 | |
| 282 | − The prepare phase uses only a bus callback. After the callback method | |
| 283 | − returns, no new children may be registered below the device. The method | |
| 284 | − may also prepare the device or driver in some way for the upcoming | |
| 285 | − system power transition, but it should not put the device into a | |
| 286 | − low-power state. | |
| 282 | + In addition to that, if device drivers need to allocate additional | |
| 283 | + memory to be able to hadle device suspend correctly, that should be | |
| 284 | + done in the prepare phase. | |
| 285 | + | |
| 286 | + After the prepare callback method returns, no new children may be | |
| 287 | + registered below the device. The method may also prepare the device or | |
| 288 | + driver in some way for the upcoming system power transition (for | |
| 289 | + example, by allocating additional memory required for this purpose), but | |
| 290 | + it should not put the device into a low-power state. | |
| 287 | 291 | |
| 288 | 292 | 2. The suspend methods should quiesce the device to stop it from performing |
| 289 | 293 | I/O. They also may save the device registers and put it into the |
| @@ -367,7 +371,7 @@ Drivers need to be able to handle hardware which has been reset since the · 77 unmodified lines | ||
| 367 | 371 | suspend methods were called, for example by complete reinitialization. |
| 368 | 372 | This may be the hardest part, and the one most protected by NDA'd documents |
| 369 | 373 | and chip errata. It's simplest if the hardware state hasn't changed since |
| 370 | −the suspend was carried out, but that can't be guaranteed (in fact, it ususally | |
| 374 | +the suspend was carried out, but that can't be guaranteed (in fact, it usually | |
| 371 | 375 | is not the case). |
| 372 | 376 | |
| 373 | 377 | Drivers must also be prepared to notice that the device has been removed |
| @@ -1,46 +1,41 @@ | ||
| 1 | 1 | Suspend notifiers |
| 2 | − (C) 2007 Rafael J. Wysocki <rjw@sisk.pl>, GPL | |
| 3 | − | |
| 4 | −There are some operations that device drivers may want to carry out in their | |
| 5 | −.suspend() routines, but shouldn't, because they can cause the hibernation or | |
| 6 | −suspend to fail. For example, a driver may want to allocate a substantial amount | |
| 7 | −of memory (like 50 MB) in .suspend(), but that shouldn't be done after the | |
| 8 | −swsusp's memory shrinker has run. | |
| 9 | − | |
| 10 | −Also, there may be some operations, that subsystems want to carry out before a | |
| 11 | −hibernation/suspend or after a restore/resume, requiring the system to be fully | |
| 12 | −functional, so the drivers' .suspend() and .resume() routines are not suitable | |
| 13 | −for this purpose. For example, device drivers may want to upload firmware to | |
| 14 | −their devices after a restore from a hibernation image, but they cannot do it by | |
| 15 | −calling request_firmware() from their .resume() routines (user land processes | |
| 16 | −are frozen at this point). The solution may be to load the firmware into | |
| 17 | −memory before processes are frozen and upload it from there in the .resume() | |
| 18 | −routine. Of course, a hibernation notifier may be used for this purpose. | |
| 19 | − | |
| 20 | −The subsystems that have such needs can register suspend notifiers that will be | |
| 21 | −called upon the following events by the suspend core: | |
| 2 | + (C) 2007-2011 Rafael J. Wysocki <rjw@sisk.pl>, GPL | |
| 3 | + | |
| 4 | +There are some operations that subsystems or drivers may want to carry out | |
| 5 | +before hibernation/suspend or after restore/resume, but they require the system | |
| 6 | +to be fully functional, so the drivers' and subsystems' .suspend() and .resume() | |
| 7 | +or even .prepare() and .complete() callbacks are not suitable for this purpose. | |
| 8 | +For example, device drivers may want to upload firmware to their devices after | |
| 9 | +resume/restore, but they cannot do it by calling request_firmware() from their | |
| 10 | +.resume() or .complete() routines (user land processes are frozen at these | |
| 11 | +points). The solution may be to load the firmware into memory before processes | |
| 12 | +are frozen and upload it from there in the .resume() routine. | |
| 13 | +A suspend/hibernation notifier may be used for this purpose. | |
| 14 | + | |
| 15 | +The subsystems or drivers having such needs can register suspend notifiers that | |
| 16 | +will be called upon the following events by the PM core: | |
| 22 | 17 | |
| 23 | 18 | PM_HIBERNATION_PREPARE The system is going to hibernate or suspend, tasks will |
| 24 | 19 | be frozen immediately. |
| 25 | 20 | |
| 26 | 21 | PM_POST_HIBERNATION The system memory state has been restored from a |
| 27 | − hibernation image or an error occured during the | |
| 28 | − hibernation. Device drivers' .resume() callbacks have | |
| 22 | + hibernation image or an error occurred during | |
| 23 | + hibernation. Device drivers' restore callbacks have | |
| 29 | 24 | been executed and tasks have been thawed. |
| 30 | 25 | |
| 31 | 26 | PM_RESTORE_PREPARE The system is going to restore a hibernation image. |
| 32 | − If all goes well the restored kernel will issue a | |
| 27 | + If all goes well, the restored kernel will issue a | |
| 33 | 28 | PM_POST_HIBERNATION notification. |
| 34 | 29 | |
| 35 | −PM_POST_RESTORE An error occurred during the hibernation restore. | |
| 36 | − Device drivers' .resume() callbacks have been executed | |
| 30 | +PM_POST_RESTORE An error occurred during restore from hibernation. | |
| 31 | + Device drivers' restore callbacks have been executed | |
| 37 | 32 | and tasks have been thawed. |
| 38 | 33 | |
| 39 | −PM_SUSPEND_PREPARE The system is preparing for a suspend. | |
| 34 | +PM_SUSPEND_PREPARE The system is preparing for suspend. | |
| 40 | 35 | |
| 41 | −PM_POST_SUSPEND The system has just resumed or an error occured during | |
| 42 | − the suspend. Device drivers' .resume() callbacks have | |
| 43 | − been executed and tasks have been thawed. | |
| 36 | +PM_POST_SUSPEND The system has just resumed or an error occurred during | |
| 37 | + suspend. Device drivers' resume callbacks have been | |
| 38 | + executed and tasks have been thawed. | |
| 44 | 39 | |
| 45 | 40 | It is generally assumed that whatever the notifiers do for |
| 46 | 41 | PM_HIBERNATION_PREPARE, should be undone for PM_POST_HIBERNATION. Analogously, |
| @@ -178,7 +178,7 @@ opp_find_freq_ceil - Search for an available OPP which is *at least* the · 177 unmodified lines | ||
| 178 | 178 | if (!IS_ERR(opp)) |
| 179 | 179 | soc_switch_to_freq_voltage(freq); |
| 180 | 180 | else |
| 181 | − /* do something when we cant satisfy the req */ | |
| 181 | + /* do something when we can't satisfy the req */ | |
| 182 | 182 | /* do other stuff */ |
| 183 | 183 | } |
| 184 | 184 | |
| @@ -53,11 +53,11 @@ static struct regulator_init_data regulator1_data = { · 52 unmodified lines | ||
| 53 | 53 | |
| 54 | 54 | Regulator-1 supplies power to Regulator-2. This relationship must be registered |
| 55 | 55 | with the core so that Regulator-1 is also enabled when Consumer A enables its |
| 56 | −supply (Regulator-2). The supply regulator is set by the supply_regulator_dev | |
| 56 | +supply (Regulator-2). The supply regulator is set by the supply_regulator | |
| 57 | 57 | field below:- |
| 58 | 58 | |
| 59 | 59 | static struct regulator_init_data regulator2_data = { |
| 60 | − .supply_regulator_dev = &platform_regulator1_device.dev, | |
| 60 | + .supply_regulator = "regulator_name", | |
| 61 | 61 | .constraints = { |
| 62 | 62 | .min_uV = 1800000, |
| 63 | 63 | .max_uV = 2000000, |
| @@ -192,7 +192,7 @@ Q: There don't seem to be any generally useful behavioral · 191 unmodified lines | ||
| 192 | 192 | distinctions between SUSPEND and FREEZE. |
| 193 | 193 | |
| 194 | 194 | A: Doing SUSPEND when you are asked to do FREEZE is always correct, |
| 195 | −but it may be unneccessarily slow. If you want your driver to stay simple, | |
| 195 | +but it may be unnecessarily slow. If you want your driver to stay simple, | |
| 196 | 196 | slowness may not matter to you. It can always be fixed later. |
| 197 | 197 | |
| 198 | 198 | For devices like disk it does matter, you do not want to spindown for |
| @@ -237,7 +237,7 @@ disk. Whole sequence goes like · 38 unmodified lines | ||
| 237 | 237 | |
| 238 | 238 | running system, user asks for suspend-to-disk |
| 239 | 239 | |
| 240 | − user processes are stopped (in common case there are none, but with resume-from-initrd, noone knows) | |
| 240 | + user processes are stopped (in common case there are none, but with resume-from-initrd, no one knows) | |
| 241 | 241 | |
| 242 | 242 | read image from disk |
| 243 | 243 | |
| @@ -98,7 +98,7 @@ SNAPSHOT_S2RAM - suspend to RAM; using this call causes the kernel to · 97 unmodified lines | ||
| 98 | 98 | The device's read() operation can be used to transfer the snapshot image from |
| 99 | 99 | the kernel. It has the following limitations: |
| 100 | 100 | - you cannot read() more than one virtual memory page at a time |
| 101 | −- read()s accross page boundaries are impossible (ie. if ypu read() 1/2 of | |
| 101 | +- read()s across page boundaries are impossible (ie. if ypu read() 1/2 of | |
| 102 | 102 | a page in the previous call, you will only be able to read() |
| 103 | 103 | _at_ _most_ 1/2 of the page in the next call) |
| 104 | 104 | |
| @@ -137,7 +137,7 @@ mechanism and the userland utilities using the interface SHOULD use additional · 32 unmodified lines | ||
| 137 | 137 | means, such as checksums, to ensure the integrity of the snapshot image. |
| 138 | 138 | |
| 139 | 139 | The suspending and resuming utilities MUST lock themselves in memory, |
| 140 | −preferrably using mlockall(), before calling SNAPSHOT_FREEZE. | |
| 140 | +preferably using mlockall(), before calling SNAPSHOT_FREEZE. | |
| 141 | 141 | |
| 142 | 142 | The suspending utility MUST check the value stored by SNAPSHOT_CREATE_IMAGE |
| 143 | 143 | in the memory location pointed to by the last argument of ioctl() and proceed |
| @@ -147,7 +147,7 @@ in accordance with it: · 3 unmodified lines | ||
| 147 | 147 | (a) The suspending utility MUST NOT close the snapshot device |
| 148 | 148 | _unless_ the whole suspend procedure is to be cancelled, in |
| 149 | 149 | which case, if the snapshot image has already been saved, the |
| 150 | − suspending utility SHOULD destroy it, preferrably by zapping | |
| 150 | + suspending utility SHOULD destroy it, preferably by zapping | |
| 151 | 151 | its header. If the suspend is not to be cancelled, the |
| 152 | 152 | system MUST be powered off or rebooted after the snapshot |
| 153 | 153 | image has been saved. |
| @@ -528,7 +528,7 @@ this driver assignment of hotplug added vty-servers may be in a different · 527 unmodified lines | ||
| 528 | 528 | order than how they would be exposed on module load. Rebooting or |
| 529 | 529 | reloading the module after dynamic addition may result in the /dev/hvcs* |
| 530 | 530 | and vty-server coupling changing if a vty-server adapter was added in a |
| 531 | −slot inbetween two other vty-server adapters. Refer to the section above | |
| 531 | +slot between two other vty-server adapters. Refer to the section above | |
| 532 | 532 | on how to determine which vty-server goes with which /dev/hvcs* node. |
| 533 | 533 | Hint; look at the sysfs "index" attribute for the vty-server. |
| 534 | 534 | |
| @@ -0,0 +1,99 @@ | ||
| 1 | +The Intel MID PTI project is HW implemented in Intel Atom | |
| 2 | +system-on-a-chip designs based on the Parallel Trace | |
| 3 | +Interface for MIPI P1149.7 cJTAG standard. The kernel solution | |
| 4 | +for this platform involves the following files: | |
| 5 | + | |
| 6 | +./include/linux/pti.h | |
| 7 | +./drivers/.../n_tracesink.h | |
| 8 | +./drivers/.../n_tracerouter.c | |
| 9 | +./drivers/.../n_tracesink.c | |
| 10 | +./drivers/.../pti.c | |
| 11 | + | |
| 12 | +pti.c is the driver that enables various debugging features | |
| 13 | +popular on platforms from certain mobile manufacturers. | |
| 14 | +n_tracerouter.c and n_tracesink.c allow extra system information to | |
| 15 | +be collected and routed to the pti driver, such as trace | |
| 16 | +debugging data from a modem. Although n_tracerouter | |
| 17 | +and n_tracesink are a part of the complete PTI solution, | |
| 18 | +these two line disciplines can work separately from | |
| 19 | +pti.c and route any data stream from one /dev/tty node | |
| 20 | +to another /dev/tty node via kernel-space. This provides | |
| 21 | +a stable, reliable connection that will not break unless | |
| 22 | +the user-space application shuts down (plus avoids | |
| 23 | +kernel->user->kernel context switch overheads of routing | |
| 24 | +data). | |
| 25 | + | |
| 26 | +An example debugging usage for this driver system: | |
| 27 | + *Hook /dev/ttyPTI0 to syslogd. Opening this port will also start | |
| 28 | + a console device to further capture debugging messages to PTI. | |
| 29 | + *Hook /dev/ttyPTI1 to modem debugging data to write to PTI HW. | |
| 30 | + This is where n_tracerouter and n_tracesink are used. | |
| 31 | + *Hook /dev/pti to a user-level debugging application for writing | |
| 32 | + to PTI HW. | |
| 33 | + *Use mipi_* Kernel Driver API in other device drivers for | |
| 34 | + debugging to PTI by first requesting a PTI write address via | |
| 35 | + mipi_request_masterchannel(1). | |
| 36 | + | |
| 37 | +Below is example pseudo-code on how a 'privileged' application | |
| 38 | +can hook up n_tracerouter and n_tracesink to any tty on | |
| 39 | +a system. 'Privileged' means the application has enough | |
| 40 | +privileges to successfully manipulate the ldisc drivers | |
| 41 | +but is not just blindly executing as 'root'. Keep in mind | |
| 42 | +the use of ioctl(,TIOCSETD,) is not specific to the n_tracerouter | |
| 43 | +and n_tracesink line discpline drivers but is a generic | |
| 44 | +operation for a program to use a line discpline driver | |
| 45 | +on a tty port other than the default n_tty. | |
| 46 | + | |
| 47 | +/////////// To hook up n_tracerouter and n_tracesink ///////// | |
| 48 | + | |
| 49 | +// Note that n_tracerouter depends on n_tracesink. | |
| 50 | +#include <errno.h> | |
| 51 | +#define ONE_TTY "/dev/ttyOne" | |
| 52 | +#define TWO_TTY "/dev/ttyTwo" | |
| 53 | + | |
| 54 | +// needed global to hand onto ldisc connection | |
| 55 | +static int g_fd_source = -1; | |
| 56 | +static int g_fd_sink = -1; | |
| 57 | + | |
| 58 | +// these two vars used to grab LDISC values from loaded ldisc drivers | |
| 59 | +// in OS. Look at /proc/tty/ldiscs to get the right numbers from | |
| 60 | +// the ldiscs loaded in the system. | |
| 61 | +int source_ldisc_num, sink_ldisc_num = -1; | |
| 62 | +int retval; | |
| 63 | + | |
| 64 | +g_fd_source = open(ONE_TTY, O_RDWR); // must be R/W | |
| 65 | +g_fd_sink = open(TWO_TTY, O_RDWR); // must be R/W | |
| 66 | + | |
| 67 | +if (g_fd_source <= 0) || (g_fd_sink <= 0) { | |
| 68 | + // doubt you'll want to use these exact error lines of code | |
| 69 | + printf("Error on open(). errno: %d\n",errno); | |
| 70 | + return errno; | |
| 71 | +} | |
| 72 | + | |
| 73 | +retval = ioctl(g_fd_sink, TIOCSETD, &sink_ldisc_num); | |
| 74 | +if (retval < 0) { | |
| 75 | + printf("Error on ioctl(). errno: %d\n", errno); | |
| 76 | + return errno; | |
| 77 | +} | |
| 78 | + | |
| 79 | +retval = ioctl(g_fd_source, TIOCSETD, &source_ldisc_num); | |
| 80 | +if (retval < 0) { | |
| 81 | + printf("Error on ioctl(). errno: %d\n", errno); | |
| 82 | + return errno; | |
| 83 | +} | |
| 84 | + | |
| 85 | +/////////// To disconnect n_tracerouter and n_tracesink //////// | |
| 86 | + | |
| 87 | +// First make sure data through the ldiscs has stopped. | |
| 88 | + | |
| 89 | +// Second, disconnect ldiscs. This provides a | |
| 90 | +// little cleaner shutdown on tty stack. | |
| 91 | +sink_ldisc_num = 0; | |
| 92 | +source_ldisc_num = 0; | |
| 93 | +ioctl(g_fd_uart, TIOCSETD, &sink_ldisc_num); | |
| 94 | +ioctl(g_fd_gadget, TIOCSETD, &source_ldisc_num); | |
| 95 | + | |
| 96 | +// Three, program closes connection, and cleanup: | |
| 97 | +close(g_fd_uart); | |
| 98 | +close(g_fd_gadget); | |
| 99 | +g_fd_uart = g_fd_gadget = NULL; | |
| @@ -0,0 +1,89 @@ | ||
| 1 | + | |
| 2 | +* PTP hardware clock infrastructure for Linux | |
| 3 | + | |
| 4 | + This patch set introduces support for IEEE 1588 PTP clocks in | |
| 5 | + Linux. Together with the SO_TIMESTAMPING socket options, this | |
| 6 | + presents a standardized method for developing PTP user space | |
| 7 | + programs, synchronizing Linux with external clocks, and using the | |
| 8 | + ancillary features of PTP hardware clocks. | |
| 9 | + | |
| 10 | + A new class driver exports a kernel interface for specific clock | |
| 11 | + drivers and a user space interface. The infrastructure supports a | |
| 12 | + complete set of PTP hardware clock functionality. | |
| 13 | + | |
| 14 | + + Basic clock operations | |
| 15 | + - Set time | |
| 16 | + - Get time | |
| 17 | + - Shift the clock by a given offset atomically | |
| 18 | + - Adjust clock frequency | |
| 19 | + | |
| 20 | + + Ancillary clock features | |
| 21 | + - One short or periodic alarms, with signal delivery to user program | |
| 22 | + - Time stamp external events | |
| 23 | + - Period output signals configurable from user space | |
| 24 | + - Synchronization of the Linux system time via the PPS subsystem | |
| 25 | + | |
| 26 | +** PTP hardware clock kernel API | |
| 27 | + | |
| 28 | + A PTP clock driver registers itself with the class driver. The | |
| 29 | + class driver handles all of the dealings with user space. The | |
| 30 | + author of a clock driver need only implement the details of | |
| 31 | + programming the clock hardware. The clock driver notifies the class | |
| 32 | + driver of asynchronous events (alarms and external time stamps) via | |
| 33 | + a simple message passing interface. | |
| 34 | + | |
| 35 | + The class driver supports multiple PTP clock drivers. In normal use | |
| 36 | + cases, only one PTP clock is needed. However, for testing and | |
| 37 | + development, it can be useful to have more than one clock in a | |
| 38 | + single system, in order to allow performance comparisons. | |
| 39 | + | |
| 40 | +** PTP hardware clock user space API | |
| 41 | + | |
| 42 | + The class driver also creates a character device for each | |
| 43 | + registered clock. User space can use an open file descriptor from | |
| 44 | + the character device as a POSIX clock id and may call | |
| 45 | + clock_gettime, clock_settime, and clock_adjtime. These calls | |
| 46 | + implement the basic clock operations. | |
| 47 | + | |
| 48 | + User space programs may control the clock using standardized | |
| 49 | + ioctls. A program may query, enable, configure, and disable the | |
| 50 | + ancillary clock features. User space can receive time stamped | |
| 51 | + events via blocking read() and poll(). One shot and periodic | |
| 52 | + signals may be configured via the POSIX timer_settime() system | |
| 53 | + call. | |
| 54 | + | |
| 55 | +** Writing clock drivers | |
| 56 | + | |
| 57 | + Clock drivers include include/linux/ptp_clock_kernel.h and register | |
| 58 | + themselves by presenting a 'struct ptp_clock_info' to the | |
| 59 | + registration method. Clock drivers must implement all of the | |
| 60 | + functions in the interface. If a clock does not offer a particular | |
| 61 | + ancillary feature, then the driver should just return -EOPNOTSUPP | |
| 62 | + from those functions. | |
| 63 | + | |
| 64 | + Drivers must ensure that all of the methods in interface are | |
| 65 | + reentrant. Since most hardware implementations treat the time value | |
| 66 | + as a 64 bit integer accessed as two 32 bit registers, drivers | |
| 67 | + should use spin_lock_irqsave/spin_unlock_irqrestore to protect | |
| 68 | + against concurrent access. This locking cannot be accomplished in | |
| 69 | + class driver, since the lock may also be needed by the clock | |
| 70 | + driver's interrupt service routine. | |
| 71 | + | |
| 72 | +** Supported hardware | |
| 73 | + | |
| 74 | + + Freescale eTSEC gianfar | |
| 75 | + - 2 Time stamp external triggers, programmable polarity (opt. interrupt) | |
| 76 | + - 2 Alarm registers (optional interrupt) | |
| 77 | + - 3 Periodic signals (optional interrupt) | |
| 78 | + | |
| 79 | + + National DP83640 | |
| 80 | + - 6 GPIOs programmable as inputs or outputs | |
| 81 | + - 6 GPIOs with dedicated functions (LED/JTAG/clock) can also be | |
| 82 | + used as general inputs or outputs | |
| 83 | + - GPIO inputs can time stamp external triggers | |
| 84 | + - GPIO outputs can produce periodic signals | |
| 85 | + - 1 interrupt pin | |
| 86 | + | |
| 87 | + + Intel IXP465 | |
| 88 | + - Auxiliary Slave/Master Mode Snapshot (optional interrupt) | |
| 89 | + - Target Time (optional interrupt) | |
| @@ -0,0 +1,381 @@ | ||
| 1 | +/* | |
| 2 | + * PTP 1588 clock support - User space test program | |
| 3 | + * | |
| 4 | + * Copyright (C) 2010 OMICRON electronics GmbH | |
| 5 | + * | |
| 6 | + * This program is free software; you can redistribute it and/or modify | |
| 7 | + * it under the terms of the GNU General Public License as published by | |
| 8 | + * the Free Software Foundation; either version 2 of the License, or | |
| 9 | + * (at your option) any later version. | |
| 10 | + * | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 15 | + * | |
| 16 | + * You should have received a copy of the GNU General Public License | |
| 17 | + * along with this program; if not, write to the Free Software | |
| 18 | + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
| 19 | + */ | |
| 20 | +#include <errno.h> | |
| 21 | +#include <fcntl.h> | |
| 22 | +#include <math.h> | |
| 23 | +#include <signal.h> | |
| 24 | +#include <stdio.h> | |
| 25 | +#include <stdlib.h> | |
| 26 | +#include <string.h> | |
| 27 | +#include <sys/ioctl.h> | |
| 28 | +#include <sys/mman.h> | |
| 29 | +#include <sys/stat.h> | |
| 30 | +#include <sys/time.h> | |
| 31 | +#include <sys/timex.h> | |
| 32 | +#include <sys/types.h> | |
| 33 | +#include <time.h> | |
| 34 | +#include <unistd.h> | |
| 35 | + | |
| 36 | +#include <linux/ptp_clock.h> | |
| 37 | + | |
| 38 | +#define DEVICE "/dev/ptp0" | |
| 39 | + | |
| 40 | +#ifndef ADJ_SETOFFSET | |
| 41 | +#define ADJ_SETOFFSET 0x0100 | |
| 42 | +#endif | |
| 43 | + | |
| 44 | +#ifndef CLOCK_INVALID | |
| 45 | +#define CLOCK_INVALID -1 | |
| 46 | +#endif | |
| 47 | + | |
| 48 | +/* When glibc offers the syscall, this will go away. */ | |
| 49 | +#include <sys/syscall.h> | |
| 50 | +static int clock_adjtime(clockid_t id, struct timex *tx) | |
| 51 | +{ | |
| 52 | + return syscall(__NR_clock_adjtime, id, tx); | |
| 53 | +} | |
| 54 | + | |
| 55 | +static clockid_t get_clockid(int fd) | |
| 56 | +{ | |
| 57 | +#define CLOCKFD 3 | |
| 58 | +#define FD_TO_CLOCKID(fd) ((~(clockid_t) (fd) << 3) | CLOCKFD) | |
| 59 | + | |
| 60 | + return FD_TO_CLOCKID(fd); | |
| 61 | +} | |
| 62 | + | |
| 63 | +static void handle_alarm(int s) | |
| 64 | +{ | |
| 65 | + printf("received signal %d\n", s); | |
| 66 | +} | |
| 67 | + | |
| 68 | +static int install_handler(int signum, void (*handler)(int)) | |
| 69 | +{ | |
| 70 | + struct sigaction action; | |
| 71 | + sigset_t mask; | |
| 72 | + | |
| 73 | + /* Unblock the signal. */ | |
| 74 | + sigemptyset(&mask); | |
| 75 | + sigaddset(&mask, signum); | |
| 76 | + sigprocmask(SIG_UNBLOCK, &mask, NULL); | |
| 77 | + | |
| 78 | + /* Install the signal handler. */ | |
| 79 | + action.sa_handler = handler; | |
| 80 | + action.sa_flags = 0; | |
| 81 | + sigemptyset(&action.sa_mask); | |
| 82 | + sigaction(signum, &action, NULL); | |
| 83 | + | |
| 84 | + return 0; | |
| 85 | +} | |
| 86 | + | |
| 87 | +static long ppb_to_scaled_ppm(int ppb) | |
| 88 | +{ | |
| 89 | + /* | |
| 90 | + * The 'freq' field in the 'struct timex' is in parts per | |
| 91 | + * million, but with a 16 bit binary fractional field. | |
| 92 | + * Instead of calculating either one of | |
| 93 | + * | |
| 94 | + * scaled_ppm = (ppb / 1000) << 16 [1] | |
| 95 | + * scaled_ppm = (ppb << 16) / 1000 [2] | |
| 96 | + * | |
| 97 | + * we simply use double precision math, in order to avoid the | |
| 98 | + * truncation in [1] and the possible overflow in [2]. | |
| 99 | + */ | |
| 100 | + return (long) (ppb * 65.536); | |
| 101 | +} | |
| 102 | + | |
| 103 | +static void usage(char *progname) | |
| 104 | +{ | |
| 105 | + fprintf(stderr, | |
| 106 | + "usage: %s [options]\n" | |
| 107 | + " -a val request a one-shot alarm after 'val' seconds\n" | |
| 108 | + " -A val request a periodic alarm every 'val' seconds\n" | |
| 109 | + " -c query the ptp clock's capabilities\n" | |
| 110 | + " -d name device to open\n" | |
| 111 | + " -e val read 'val' external time stamp events\n" | |
| 112 | + " -f val adjust the ptp clock frequency by 'val' ppb\n" | |
| 113 | + " -g get the ptp clock time\n" | |
| 114 | + " -h prints this message\n" | |
| 115 | + " -p val enable output with a period of 'val' nanoseconds\n" | |
| 116 | + " -P val enable or disable (val=1|0) the system clock PPS\n" | |
| 117 | + " -s set the ptp clock time from the system time\n" | |
| 118 | + " -S set the system time from the ptp clock time\n" | |
| 119 | + " -t val shift the ptp clock time by 'val' seconds\n", | |
| 120 | + progname); | |
| 121 | +} | |
| 122 | + | |
| 123 | +int main(int argc, char *argv[]) | |
| 124 | +{ | |
| 125 | + struct ptp_clock_caps caps; | |
| 126 | + struct ptp_extts_event event; | |
| 127 | + struct ptp_extts_request extts_request; | |
| 128 | + struct ptp_perout_request perout_request; | |
| 129 | + struct timespec ts; | |
| 130 | + struct timex tx; | |
| 131 | + | |
| 132 | + static timer_t timerid; | |
| 133 | + struct itimerspec timeout; | |
| 134 | + struct sigevent sigevent; | |
| 135 | + | |
| 136 | + char *progname; | |
| 137 | + int c, cnt, fd; | |
| 138 | + | |
| 139 | + char *device = DEVICE; | |
| 140 | + clockid_t clkid; | |
| 141 | + int adjfreq = 0x7fffffff; | |
| 142 | + int adjtime = 0; | |
| 143 | + int capabilities = 0; | |
| 144 | + int extts = 0; | |
| 145 | + int gettime = 0; | |
| 146 | + int oneshot = 0; | |
| 147 | + int periodic = 0; | |
| 148 | + int perout = -1; | |
| 149 | + int pps = -1; | |
| 150 | + int settime = 0; | |
| 151 | + | |
| 152 | + progname = strrchr(argv[0], '/'); | |
| 153 | + progname = progname ? 1+progname : argv[0]; | |
| 154 | + while (EOF != (c = getopt(argc, argv, "a:A:cd:e:f:ghp:P:sSt:v"))) { | |
| 155 | + switch (c) { | |
| 156 | + case 'a': | |
| 157 | + oneshot = atoi(optarg); | |
| 158 | + break; | |
| 159 | + case 'A': | |
| 160 | + periodic = atoi(optarg); | |
| 161 | + break; | |
| 162 | + case 'c': | |
| 163 | + capabilities = 1; | |
| 164 | + break; | |
| 165 | + case 'd': | |
| 166 | + device = optarg; | |
| 167 | + break; | |
| 168 | + case 'e': | |
| 169 | + extts = atoi(optarg); | |
| 170 | + break; | |
| 171 | + case 'f': | |
| 172 | + adjfreq = atoi(optarg); | |
| 173 | + break; | |
| 174 | + case 'g': | |
| 175 | + gettime = 1; | |
| 176 | + break; | |
| 177 | + case 'p': | |
| 178 | + perout = atoi(optarg); | |
| 179 | + break; | |
| 180 | + case 'P': | |
| 181 | + pps = atoi(optarg); | |
| 182 | + break; | |
| 183 | + case 's': | |
| 184 | + settime = 1; | |
| 185 | + break; | |
| 186 | + case 'S': | |
| 187 | + settime = 2; | |
| 188 | + break; | |
| 189 | + case 't': | |
| 190 | + adjtime = atoi(optarg); | |
| 191 | + break; | |
| 192 | + case 'h': | |
| 193 | + usage(progname); | |
| 194 | + return 0; | |
| 195 | + case '?': | |
| 196 | + default: | |
| 197 | + usage(progname); | |
| 198 | + return -1; | |
| 199 | + } | |
| 200 | + } | |
| 201 | + | |
| 202 | + fd = open(device, O_RDWR); | |
| 203 | + if (fd < 0) { | |
| 204 | + fprintf(stderr, "opening %s: %s\n", device, strerror(errno)); | |
| 205 | + return -1; | |
| 206 | + } | |
| 207 | + | |
| 208 | + clkid = get_clockid(fd); | |
| 209 | + if (CLOCK_INVALID == clkid) { | |
| 210 | + fprintf(stderr, "failed to read clock id\n"); | |
| 211 | + return -1; | |
| 212 | + } | |
| 213 | + | |
| 214 | + if (capabilities) { | |
| 215 | + if (ioctl(fd, PTP_CLOCK_GETCAPS, &caps)) { | |
| 216 | + perror("PTP_CLOCK_GETCAPS"); | |
| 217 | + } else { | |
| 218 | + printf("capabilities:\n" | |
| 219 | + " %d maximum frequency adjustment (ppb)\n" | |
| 220 | + " %d programmable alarms\n" | |
| 221 | + " %d external time stamp channels\n" | |
| 222 | + " %d programmable periodic signals\n" | |
| 223 | + " %d pulse per second\n", | |
| 224 | + caps.max_adj, | |
| 225 | + caps.n_alarm, | |
| 226 | + caps.n_ext_ts, | |
| 227 | + caps.n_per_out, | |
| 228 | + caps.pps); | |
| 229 | + } | |
| 230 | + } | |
| 231 | + | |
| 232 | + if (0x7fffffff != adjfreq) { | |
| 233 | + memset(&tx, 0, sizeof(tx)); | |
| 234 | + tx.modes = ADJ_FREQUENCY; | |
| 235 | + tx.freq = ppb_to_scaled_ppm(adjfreq); | |
| 236 | + if (clock_adjtime(clkid, &tx)) { | |
| 237 | + perror("clock_adjtime"); | |
| 238 | + } else { | |
| 239 | + puts("frequency adjustment okay"); | |
| 240 | + } | |
| 241 | + } | |
| 242 | + | |
| 243 | + if (adjtime) { | |
| 244 | + memset(&tx, 0, sizeof(tx)); | |
| 245 | + tx.modes = ADJ_SETOFFSET; | |
| 246 | + tx.time.tv_sec = adjtime; | |
| 247 | + tx.time.tv_usec = 0; | |
| 248 | + if (clock_adjtime(clkid, &tx) < 0) { | |
| 249 | + perror("clock_adjtime"); | |
| 250 | + } else { | |
| 251 | + puts("time shift okay"); | |
| 252 | + } | |
| 253 | + } | |
| 254 | + | |
| 255 | + if (gettime) { | |
| 256 | + if (clock_gettime(clkid, &ts)) { | |
| 257 | + perror("clock_gettime"); | |
| 258 | + } else { | |
| 259 | + printf("clock time: %ld.%09ld or %s", | |
| 260 | + ts.tv_sec, ts.tv_nsec, ctime(&ts.tv_sec)); | |
| 261 | + } | |
| 262 | + } | |
| 263 | + | |
| 264 | + if (settime == 1) { | |
| 265 | + clock_gettime(CLOCK_REALTIME, &ts); | |
| 266 | + if (clock_settime(clkid, &ts)) { | |
| 267 | + perror("clock_settime"); | |
| 268 | + } else { | |
| 269 | + puts("set time okay"); | |
| 270 | + } | |
| 271 | + } | |
| 272 | + | |
| 273 | + if (settime == 2) { | |
| 274 | + clock_gettime(clkid, &ts); | |
| 275 | + if (clock_settime(CLOCK_REALTIME, &ts)) { | |
| 276 | + perror("clock_settime"); | |
| 277 | + } else { | |
| 278 | + puts("set time okay"); | |
| 279 | + } | |
| 280 | + } | |
| 281 | + | |
| 282 | + if (extts) { | |
| 283 | + memset(&extts_request, 0, sizeof(extts_request)); | |
| 284 | + extts_request.index = 0; | |
| 285 | + extts_request.flags = PTP_ENABLE_FEATURE; | |
| 286 | + if (ioctl(fd, PTP_EXTTS_REQUEST, &extts_request)) { | |
| 287 | + perror("PTP_EXTTS_REQUEST"); | |
| 288 | + extts = 0; | |
| 289 | + } else { | |
| 290 | + puts("external time stamp request okay"); | |
| 291 | + } | |
| 292 | + for (; extts; extts--) { | |
| 293 | + cnt = read(fd, &event, sizeof(event)); | |
| 294 | + if (cnt != sizeof(event)) { | |
| 295 | + perror("read"); | |
| 296 | + break; | |
| 297 | + } | |
| 298 | + printf("event index %u at %lld.%09u\n", event.index, | |
| 299 | + event.t.sec, event.t.nsec); | |
| 300 | + fflush(stdout); | |
| 301 | + } | |
| 302 | + /* Disable the feature again. */ | |
| 303 | + extts_request.flags = 0; | |
| 304 | + if (ioctl(fd, PTP_EXTTS_REQUEST, &extts_request)) { | |
| 305 | + perror("PTP_EXTTS_REQUEST"); | |
| 306 | + } | |
| 307 | + } | |
| 308 | + | |
| 309 | + if (oneshot) { | |
| 310 | + install_handler(SIGALRM, handle_alarm); | |
| 311 | + /* Create a timer. */ | |
| 312 | + sigevent.sigev_notify = SIGEV_SIGNAL; | |
| 313 | + sigevent.sigev_signo = SIGALRM; | |
| 314 | + if (timer_create(clkid, &sigevent, &timerid)) { | |
| 315 | + perror("timer_create"); | |
| 316 | + return -1; | |
| 317 | + } | |
| 318 | + /* Start the timer. */ | |
| 319 | + memset(&timeout, 0, sizeof(timeout)); | |
| 320 | + timeout.it_value.tv_sec = oneshot; | |
| 321 | + if (timer_settime(timerid, 0, &timeout, NULL)) { | |
| 322 | + perror("timer_settime"); | |
| 323 | + return -1; | |
| 324 | + } | |
| 325 | + pause(); | |
| 326 | + timer_delete(timerid); | |
| 327 | + } | |
| 328 | + | |
| 329 | + if (periodic) { | |
| 330 | + install_handler(SIGALRM, handle_alarm); | |
| 331 | + /* Create a timer. */ | |
| 332 | + sigevent.sigev_notify = SIGEV_SIGNAL; | |
| 333 | + sigevent.sigev_signo = SIGALRM; | |
| 334 | + if (timer_create(clkid, &sigevent, &timerid)) { | |
| 335 | + perror("timer_create"); | |
| 336 | + return -1; | |
| 337 | + } | |
| 338 | + /* Start the timer. */ | |
| 339 | + memset(&timeout, 0, sizeof(timeout)); | |
| 340 | + timeout.it_interval.tv_sec = periodic; | |
| 341 | + timeout.it_value.tv_sec = periodic; | |
| 342 | + if (timer_settime(timerid, 0, &timeout, NULL)) { | |
| 343 | + perror("timer_settime"); | |
| 344 | + return -1; | |
| 345 | + } | |
| 346 | + while (1) { | |
| 347 | + pause(); | |
| 348 | + } | |
| 349 | + timer_delete(timerid); | |
| 350 | + } | |
| 351 | + | |
| 352 | + if (perout >= 0) { | |
| 353 | + if (clock_gettime(clkid, &ts)) { | |
| 354 | + perror("clock_gettime"); | |
| 355 | + return -1; | |
| 356 | + } | |
| 357 | + memset(&perout_request, 0, sizeof(perout_request)); | |
| 358 | + perout_request.index = 0; | |
| 359 | + perout_request.start.sec = ts.tv_sec + 2; | |
| 360 | + perout_request.start.nsec = 0; | |
| 361 | + perout_request.period.sec = 0; | |
| 362 | + perout_request.period.nsec = perout; | |
| 363 | + if (ioctl(fd, PTP_PEROUT_REQUEST, &perout_request)) { | |
| 364 | + perror("PTP_PEROUT_REQUEST"); | |
| 365 | + } else { | |
| 366 | + puts("periodic output request okay"); | |
| 367 | + } | |
| 368 | + } | |
| 369 | + | |
| 370 | + if (pps != -1) { | |
| 371 | + int enable = pps ? 1 : 0; | |
| 372 | + if (ioctl(fd, PTP_ENABLE_PPS, enable)) { | |
| 373 | + perror("PTP_ENABLE_PPS"); | |
| 374 | + } else { | |
| 375 | + puts("pps for system time request okay"); | |
| 376 | + } | |
| 377 | + } | |
| 378 | + | |
| 379 | + close(fd); | |
| 380 | + return 0; | |
| 381 | +} | |
| @@ -0,0 +1,33 @@ | ||
| 1 | +# PTP 1588 clock support - User space test program | |
| 2 | +# | |
| 3 | +# Copyright (C) 2010 OMICRON electronics GmbH | |
| 4 | +# | |
| 5 | +# This program is free software; you can redistribute it and/or modify | |
| 6 | +# it under the terms of the GNU General Public License as published by | |
| 7 | +# the Free Software Foundation; either version 2 of the License, or | |
| 8 | +# (at your option) any later version. | |
| 9 | +# | |
| 10 | +# This program is distributed in the hope that it will be useful, | |
| 11 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 13 | +# GNU General Public License for more details. | |
| 14 | +# | |
| 15 | +# You should have received a copy of the GNU General Public License | |
| 16 | +# along with this program; if not, write to the Free Software | |
| 17 | +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
| 18 | + | |
| 19 | +CC = $(CROSS_COMPILE)gcc | |
| 20 | +INC = -I$(KBUILD_OUTPUT)/usr/include | |
| 21 | +CFLAGS = -Wall $(INC) | |
| 22 | +LDLIBS = -lrt | |
| 23 | +PROGS = testptp | |
| 24 | + | |
| 25 | +all: $(PROGS) | |
| 26 | + | |
| 27 | +testptp: testptp.o | |
| 28 | + | |
| 29 | +clean: | |
| 30 | + rm -f testptp.o | |
| 31 | + | |
| 32 | +distclean: clean | |
| 33 | + rm -f $(PROGS) | |
| @@ -2273,7 +2273,7 @@ IP forwarding is on. · 2272 unmodified lines | ||
| 2273 | 2273 | There is a lot of useful info in here best found by going in & having a look around, |
| 2274 | 2274 | so I'll take you through some entries I consider important. |
| 2275 | 2275 | |
| 2276 | −All the processes running on the machine have there own entry defined by | |
| 2276 | +All the processes running on the machine have their own entry defined by | |
| 2277 | 2277 | /proc/<pid> |
| 2278 | 2278 | So lets have a look at the init process |
| 2279 | 2279 | cd /proc/1 |
| @@ -1,8 +1,7 @@ | ||
| 1 | −Each CPU has a "base" scheduling domain (struct sched_domain). These are | |
| 2 | −accessed via cpu_sched_domain(i) and this_sched_domain() macros. The domain | |
| 1 | +Each CPU has a "base" scheduling domain (struct sched_domain). The domain | |
| 3 | 2 | hierarchy is built from these base domains via the ->parent pointer. ->parent |
| 4 | −MUST be NULL terminated, and domain structures should be per-CPU as they | |
| 5 | −are locklessly updated. | |
| 3 | +MUST be NULL terminated, and domain structures should be per-CPU as they are | |
| 4 | +locklessly updated. | |
| 6 | 5 | |
| 7 | 6 | Each scheduling domain spans a number of CPUs (stored in the ->span field). |
| 8 | 7 | A domain's span MUST be a superset of it child's span (this restriction could |
| @@ -26,11 +25,26 @@ is treated as one entity. The load of a group is defined as the sum of the · 17 unmodified lines | ||
| 26 | 25 | load of each of its member CPUs, and only when the load of a group becomes |
| 27 | 26 | out of balance are tasks moved between groups. |
| 28 | 27 | |
| 29 | −In kernel/sched.c, rebalance_tick is run periodically on each CPU. This | |
| 30 | −function takes its CPU's base sched domain and checks to see if has reached | |
| 31 | −its rebalance interval. If so, then it will run load_balance on that domain. | |
| 32 | −rebalance_tick then checks the parent sched_domain (if it exists), and the | |
| 33 | −parent of the parent and so forth. | |
| 28 | +In kernel/sched.c, trigger_load_balance() is run periodically on each CPU | |
| 29 | +through scheduler_tick(). It raises a softirq after the next regularly scheduled | |
| 30 | +rebalancing event for the current runqueue has arrived. The actual load | |
| 31 | +balancing workhorse, run_rebalance_domains()->rebalance_domains(), is then run | |
| 32 | +in softirq context (SCHED_SOFTIRQ). | |
| 33 | + | |
| 34 | +The latter function takes two arguments: the current CPU and whether it was idle | |
| 35 | +at the time the scheduler_tick() happened and iterates over all sched domains | |
| 36 | +our CPU is on, starting from its base domain and going up the ->parent chain. | |
| 37 | +While doing that, it checks to see if the current domain has exhausted its | |
| 38 | +rebalance interval. If so, it runs load_balance() on that domain. It then checks | |
| 39 | +the parent sched_domain (if it exists), and the parent of the parent and so | |
| 40 | +forth. | |
| 41 | + | |
| 42 | +Initially, load_balance() finds the busiest group in the current sched domain. | |
| 43 | +If it succeeds, it looks for the busiest runqueue of all the CPUs' runqueues in | |
| 44 | +that group. If it manages to find such a runqueue, it locks both our initial | |
| 45 | +CPU's runqueue and the newly found busiest one and starts moving tasks from it | |
| 46 | +to our runqueue. The exact number of tasks amounts to an imbalance previously | |
| 47 | +computed while iterating over this sched domain's groups. | |
| 34 | 48 | |
| 35 | 49 | *** Implementing sched domains *** |
| 36 | 50 | The "base" domain will "span" the first level of the hierarchy. In the case |
| @@ -352,7 +352,7 @@ Changes from 20041229 to 20050110 · 351 unmodified lines | ||
| 352 | 352 | lpfc_scsiport.c |
| 353 | 353 | * In remote port changes: no longer nulling target->pnode when |
| 354 | 354 | removing from mapped list. Pnode get nulled when the node is |
| 355 | − freed (after nodev tmo). This bug was causing i/o recieved in | |
| 355 | + freed (after nodev tmo). This bug was causing i/o received in | |
| 356 | 356 | the small window while the device was blocked to be errored w/ |
| 357 | 357 | did_no_connect. With the fix, it returns host_busy |
| 358 | 358 | (per the pre-remote port changes). |
| @@ -530,7 +530,7 @@ Changes from 20041018 to 20041123 · 171 unmodified lines | ||
| 530 | 530 | coherent mappings. Note: There are more consistent mappings |
| 531 | 531 | that are using pci_dma_sync calls. Probably these should be |
| 532 | 532 | removed as well. |
| 533 | − * Modified lpfc_free_scsi_buf to accomodate all three scsi_buf | |
| 533 | + * Modified lpfc_free_scsi_buf to accommodate all three scsi_buf | |
| 534 | 534 | free types to alleviate miscellaneous panics with cable pull |
| 535 | 535 | testing. |
| 536 | 536 | * Set hotplug to default 0 and lpfc_target_remove to not remove |
| @@ -583,7 +583,7 @@ Changes from 20041018 to 20041123 · 46 unmodified lines | ||
| 583 | 583 | included more than once. |
| 584 | 584 | * Replaced "set_current_state(TASK_UNINTERRUPTIBLE); |
| 585 | 585 | schedule_timeout(timeout)" with "msleep(timeout)". |
| 586 | − * Fixnode was loosing starget when rediscovered. We saw messages | |
| 586 | + * Fixnode was losing starget when rediscovered. We saw messages | |
| 587 | 587 | like: lpfc 0000:04:02.0: 0:0263 Cannot block scsi target as a |
| 588 | 588 | result. Moved starget field into struct lpfc_target which is |
| 589 | 589 | referenced from the node. |
| @@ -604,7 +604,7 @@ Changes from 20041018 to 20041123 · 14 unmodified lines | ||
| 604 | 604 | * Make 3 functions static: lpfc_get_hba_sym_node_name, |
| 605 | 605 | lpfc_intr_prep and lpfc_setup_slim_access. Move lpfc_intr_prep |
| 606 | 606 | and lpfc_setup_slim_access so they're defined before being used. |
| 607 | − * Remove an unecessary list_del() in lpfc_hbadisc.c. | |
| 607 | + * Remove an unnecessary list_del() in lpfc_hbadisc.c. | |
| 608 | 608 | * Set nlp_state before calling lpfc_nlp_list() since this will |
| 609 | 609 | potentially call fc_target_unblock which may cause a race in |
| 610 | 610 | queuecommand by releasing host_lock. |
| @@ -753,7 +753,7 @@ Changes from 20040908 to 20040920 · 142 unmodified lines | ||
| 753 | 753 | * Changed version number to 8.0.12 |
| 754 | 754 | * Removed used #defines: DEFAULT_PCI_LATENCY_CLOCKS and |
| 755 | 755 | PCI_LATENCY_VALUE from lpfc_hw.h. |
| 756 | − * Changes to accomodate rnid. | |
| 756 | + * Changes to accommodate rnid. | |
| 757 | 757 | * Fix RSCN handling so RSCN NS queries only effect NPorts found in |
| 758 | 758 | RSCN data. |
| 759 | 759 | * If we rcv a plogi on a NPort queued up for discovery, clear the |
| @@ -813,7 +813,7 @@ Changes from 20040908 to 20040920 · 53 unmodified lines | ||
| 813 | 813 | counter instead, brd_no isn't reused anymore. Also some tiny |
| 814 | 814 | whitespace cleanups in surrounding code. |
| 815 | 815 | * Reorder functions in lpfc_els.c to remove need for prototypes. |
| 816 | − * Removed unsed prototypes from lpfc_crtn.h - | |
| 816 | + * Removed unused prototypes from lpfc_crtn.h - | |
| 817 | 817 | lpfc_ip_timeout_handler, lpfc_read_pci and lpfc_revoke. |
| 818 | 818 | * Removed some unused prototypes from lpfc_crtn.h - |
| 819 | 819 | lpfc_scsi_hba_reset, lpfc_scsi_issue_inqsn, |
| @@ -863,7 +863,7 @@ Changes from 20040823 to 20040908 · 43 unmodified lines | ||
| 863 | 863 | * Minimal support for SCSI flat space addressing/volume set |
| 864 | 864 | addressing. Use 16 bits of LUN address so that flat |
| 865 | 865 | addressing/VSA will work. |
| 866 | − * Changed 2 occurences of if( 1 != f(x)) to if(f(x) != 1) | |
| 866 | + * Changed 2 occurrences of if( 1 != f(x)) to if(f(x) != 1) | |
| 867 | 867 | * Drop include of lpfc_cfgparm.h. |
| 868 | 868 | * Reduce stack usage of lpfc_fdmi_cmd in lpfc_ct.c. |
| 869 | 869 | * Add minimum range checking property to /sys write/store |
| @@ -1449,7 +1449,7 @@ Changes from 20040402 to 20040409 · 579 unmodified lines | ||
| 1449 | 1449 | * Removed lpfc_els_chk_latt from the lpfc_config_post function. |
| 1450 | 1450 | lpfc_els_chk_latt will enable the link event interrupts when |
| 1451 | 1451 | flogi is pending which causes two discovery state machines |
| 1452 | − running parallely. | |
| 1452 | + running parallelly. | |
| 1453 | 1453 | * Add pci_disable_device to unload path. |
| 1454 | 1454 | * Move lpfc_sleep_event from lpfc_fcp.c to lpfc_util_ioctl.c |
| 1455 | 1455 | * Call dma_map_single() & pci_map_single() directly instead of via |
| @@ -1590,7 +1590,7 @@ Changes from 20040326 to 20040402 · 134 unmodified lines | ||
| 1590 | 1590 | ELX_WRITE_HS ELX_WRITE_HA ELX_WRITE_CA ELX_READ_HC |
| 1591 | 1591 | ELX_READ_HS ELX_READ_HA ELX_READ_CA ELX_READ_MB ELX_RESET |
| 1592 | 1592 | ELX_READ_HBA ELX_INSTANCE ELX_LIP. Also introduced |
| 1593 | − attribute "set" to be used in conjuction with the above | |
| 1593 | + attribute "set" to be used in conjunction with the above | |
| 1594 | 1594 | attributes. |
| 1595 | 1595 | * Removed DLINK, enque and deque declarations now that clock |
| 1596 | 1596 | doesn't use them anymore |
| @@ -168,7 +168,7 @@ Older Version : 2.20.4.6 (scsi module), 2.20.2.6 (cmm module) · 167 unmodified lines | ||
| 168 | 168 | |
| 169 | 169 | 1. Sorted out PCI IDs to remove megaraid support overlaps. |
| 170 | 170 | Based on the patch from Daniel, sorted out PCI IDs along with |
| 171 | − charactor node name change from 'megadev' to 'megadev_legacy' to avoid | |
| 171 | + character node name change from 'megadev' to 'megadev_legacy' to avoid | |
| 172 | 172 | conflict. |
| 173 | 173 | --- |
| 174 | 174 | Hopefully we'll be getting the build restriction zapped much sooner, |
| @@ -1,3 +1,17 @@ | ||
| 1 | +Release Date : Wed. May 11, 2011 17:00:00 PST 2010 - | |
| 2 | + (emaild-id:megaraidlinux@lsi.com) | |
| 3 | + Adam Radford | |
| 4 | +Current Version : 00.00.05.38-rc1 | |
| 5 | +Old Version : 00.00.05.34-rc1 | |
| 6 | + 1. Remove MSI-X black list, use MFI_REG_STATE.ready.msiEnable. | |
| 7 | + 2. Remove un-used function megasas_return_cmd_for_smid(). | |
| 8 | + 3. Check MFI_REG_STATE.fault.resetAdapter in megasas_reset_fusion(). | |
| 9 | + 4. Disable interrupts/free_irq() in megasas_shutdown(). | |
| 10 | + 5. Fix bug where AENs could be lost in probe() and resume(). | |
| 11 | + 6. Convert 6,10,12 byte CDB's to 16 byte CDB for large LBA's for FastPath | |
| 12 | + IO. | |
| 13 | + 7. Add 1078 OCR support. | |
| 14 | +------------------------------------------------------------------------------- | |
| 1 | 15 | Release Date : Thu. Feb 24, 2011 17:00:00 PST 2010 - |
| 2 | 16 | (emaild-id:megaraidlinux@lsi.com) |
| 3 | 17 | Adam Radford |
| @@ -200,7 +200,7 @@ Sun Feb 14:00 1999 Gerard Roudier (groudier@club-internet.fr) · 199 unmodified lines | ||
| 200 | 200 | By default the driver uses both IRQF_SHARED and IRQF_DISABLED. |
| 201 | 201 | Option 'ncr53c8xx=irqm:0x20' may be used when an IRQ is shared by |
| 202 | 202 | a 53C8XX adapter and a network board. |
| 203 | − - Tiny mispelling fixed (ABORT instead of ABRT). Was fortunately | |
| 203 | + - Tiny misspelling fixed (ABORT instead of ABRT). Was fortunately | |
| 204 | 204 | harmless. |
| 205 | 205 | - Negotiate SYNC data transfers with CCS devices. |
| 206 | 206 | |
| @@ -457,7 +457,7 @@ Fri Jan 1 20:00 1999 Gerard Roudier (groudier@club-internet.fr) · 456 unmodified lines | ||
| 457 | 457 | Sat Dec 19 21:00 1998 Gerard Roudier (groudier@club-internet.fr) |
| 458 | 458 | * version sym53c8xx-1.0 |
| 459 | 459 | - Define some new IO registers for the 896 (istat1, mbox0, mbox1) |
| 460 | − - Revamp slighly the Symbios NVRAM lay-out based on the excerpt of | |
| 460 | + - Revamp slightly the Symbios NVRAM lay-out based on the excerpt of | |
| 461 | 461 | the header file I received from Symbios. |
| 462 | 462 | - Check the PCI bus number for the boot order (Using a fast |
| 463 | 463 | PCI controller behing a PCI-PCI bridge seems sub-optimal). |
| @@ -1,11 +1,11 @@ | ||
| 1 | −Copyright (c) 2003-2005 QLogic Corporation | |
| 2 | −QLogic Linux Fibre Channel HBA Driver | |
| 1 | +Copyright (c) 2003-2011 QLogic Corporation | |
| 2 | +QLogic Linux/ESX Fibre Channel HBA Driver | |
| 3 | 3 | |
| 4 | −This program includes a device driver for Linux 2.6 that may be | |
| 4 | +This program includes a device driver for Linux 2.6/ESX that may be | |
| 5 | 5 | distributed with QLogic hardware specific firmware binary file. |
| 6 | 6 | You may modify and redistribute the device driver code under the |
| 7 | −GNU General Public License as published by the Free Software | |
| 8 | −Foundation (version 2 or a later version). | |
| 7 | +GNU General Public License (a copy of which is attached hereto as | |
| 8 | +Exhibit A) published by the Free Software Foundation (version 2). | |
| 9 | 9 | |
| 10 | 10 | You may redistribute the hardware specific firmware binary file |
| 11 | 11 | under the following terms: |
| @@ -43,3 +43,285 @@ OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS (PATENT, COPYRIGHT, · 31 unmodified lines | ||
| 43 | 43 | TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT) EMBODIED IN |
| 44 | 44 | ANY OTHER QLOGIC HARDWARE OR SOFTWARE EITHER SOLELY OR IN |
| 45 | 45 | COMBINATION WITH THIS PROGRAM. |
| 46 | + | |
| 47 | + | |
| 48 | +EXHIBIT A | |
| 49 | + | |
| 50 | + GNU GENERAL PUBLIC LICENSE | |
| 51 | + Version 2, June 1991 | |
| 52 | + | |
| 53 | + Copyright (C) 1989, 1991 Free Software Foundation, Inc. | |
| 54 | + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| 55 | + Everyone is permitted to copy and distribute verbatim copies | |
| 56 | + of this license document, but changing it is not allowed. | |
| 57 | + | |
| 58 | + Preamble | |
| 59 | + | |
| 60 | + The licenses for most software are designed to take away your | |
| 61 | +freedom to share and change it. By contrast, the GNU General Public | |
| 62 | +License is intended to guarantee your freedom to share and change free | |
| 63 | +software--to make sure the software is free for all its users. This | |
| 64 | +General Public License applies to most of the Free Software | |
| 65 | +Foundation's software and to any other program whose authors commit to | |
| 66 | +using it. (Some other Free Software Foundation software is covered by | |
| 67 | +the GNU Lesser General Public License instead.) You can apply it to | |
| 68 | +your programs, too. | |
| 69 | + | |
| 70 | + When we speak of free software, we are referring to freedom, not | |
| 71 | +price. Our General Public Licenses are designed to make sure that you | |
| 72 | +have the freedom to distribute copies of free software (and charge for | |
| 73 | +this service if you wish), that you receive source code or can get it | |
| 74 | +if you want it, that you can change the software or use pieces of it | |
| 75 | +in new free programs; and that you know you can do these things. | |
| 76 | + | |
| 77 | + To protect your rights, we need to make restrictions that forbid | |
| 78 | +anyone to deny you these rights or to ask you to surrender the rights. | |
| 79 | +These restrictions translate to certain responsibilities for you if you | |
| 80 | +distribute copies of the software, or if you modify it. | |
| 81 | + | |
| 82 | + For example, if you distribute copies of such a program, whether | |
| 83 | +gratis or for a fee, you must give the recipients all the rights that | |
| 84 | +you have. You must make sure that they, too, receive or can get the | |
| 85 | +source code. And you must show them these terms so they know their | |
| 86 | +rights. | |
| 87 | + | |
| 88 | + We protect your rights with two steps: (1) copyright the software, and | |
| 89 | +(2) offer you this license which gives you legal permission to copy, | |
| 90 | +distribute and/or modify the software. | |
| 91 | + | |
| 92 | + Also, for each author's protection and ours, we want to make certain | |
| 93 | +that everyone understands that there is no warranty for this free | |
| 94 | +software. If the software is modified by someone else and passed on, we | |
| 95 | +want its recipients to know that what they have is not the original, so | |
| 96 | +that any problems introduced by others will not reflect on the original | |
| 97 | +authors' reputations. | |
| 98 | + | |
| 99 | + Finally, any free program is threatened constantly by software | |
| 100 | +patents. We wish to avoid the danger that redistributors of a free | |
| 101 | +program will individually obtain patent licenses, in effect making the | |
| 102 | +program proprietary. To prevent this, we have made it clear that any | |
| 103 | +patent must be licensed for everyone's free use or not licensed at all. | |
| 104 | + | |
| 105 | + The precise terms and conditions for copying, distribution and | |
| 106 | +modification follow. | |
| 107 | + | |
| 108 | + GNU GENERAL PUBLIC LICENSE | |
| 109 | + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
| 110 | + | |
| 111 | + 0. This License applies to any program or other work which contains | |
| 112 | +a notice placed by the copyright holder saying it may be distributed | |
| 113 | +under the terms of this General Public License. The "Program", below, | |
| 114 | +refers to any such program or work, and a "work based on the Program" | |
| 115 | +means either the Program or any derivative work under copyright law: | |
| 116 | +that is to say, a work containing the Program or a portion of it, | |
| 117 | +either verbatim or with modifications and/or translated into another | |
| 118 | +language. (Hereinafter, translation is included without limitation in | |
| 119 | +the term "modification".) Each licensee is addressed as "you". | |
| 120 | + | |
| 121 | +Activities other than copying, distribution and modification are not | |
| 122 | +covered by this License; they are outside its scope. The act of | |
| 123 | +running the Program is not restricted, and the output from the Program | |
| 124 | +is covered only if its contents constitute a work based on the | |
| 125 | +Program (independent of having been made by running the Program). | |
| 126 | +Whether that is true depends on what the Program does. | |
| 127 | + | |
| 128 | + 1. You may copy and distribute verbatim copies of the Program's | |
| 129 | +source code as you receive it, in any medium, provided that you | |
| 130 | +conspicuously and appropriately publish on each copy an appropriate | |
| 131 | +copyright notice and disclaimer of warranty; keep intact all the | |
| 132 | +notices that refer to this License and to the absence of any warranty; | |
| 133 | +and give any other recipients of the Program a copy of this License | |
| 134 | +along with the Program. | |
| 135 | + | |
| 136 | +You may charge a fee for the physical act of transferring a copy, and | |
| 137 | +you may at your option offer warranty protection in exchange for a fee. | |
| 138 | + | |
| 139 | + 2. You may modify your copy or copies of the Program or any portion | |
| 140 | +of it, thus forming a work based on the Program, and copy and | |
| 141 | +distribute such modifications or work under the terms of Section 1 | |
| 142 | +above, provided that you also meet all of these conditions: | |
| 143 | + | |
| 144 | + a) You must cause the modified files to carry prominent notices | |
| 145 | + stating that you changed the files and the date of any change. | |
| 146 | + | |
| 147 | + b) You must cause any work that you distribute or publish, that in | |
| 148 | + whole or in part contains or is derived from the Program or any | |
| 149 | + part thereof, to be licensed as a whole at no charge to all third | |
| 150 | + parties under the terms of this License. | |
| 151 | + | |
| 152 | + c) If the modified program normally reads commands interactively | |
| 153 | + when run, you must cause it, when started running for such | |
| 154 | + interactive use in the most ordinary way, to print or display an | |
| 155 | + announcement including an appropriate copyright notice and a | |
| 156 | + notice that there is no warranty (or else, saying that you provide | |
| 157 | + a warranty) and that users may redistribute the program under | |
| 158 | + these conditions, and telling the user how to view a copy of this | |
| 159 | + License. (Exception: if the Program itself is interactive but | |
| 160 | + does not normally print such an announcement, your work based on | |
| 161 | + the Program is not required to print an announcement.) | |
| 162 | + | |
| 163 | +These requirements apply to the modified work as a whole. If | |
| 164 | +identifiable sections of that work are not derived from the Program, | |
| 165 | +and can be reasonably considered independent and separate works in | |
| 166 | +themselves, then this License, and its terms, do not apply to those | |
| 167 | +sections when you distribute them as separate works. But when you | |
| 168 | +distribute the same sections as part of a whole which is a work based | |
| 169 | +on the Program, the distribution of the whole must be on the terms of | |
| 170 | +this License, whose permissions for other licensees extend to the | |
| 171 | +entire whole, and thus to each and every part regardless of who wrote it. | |
| 172 | + | |
| 173 | +Thus, it is not the intent of this section to claim rights or contest | |
| 174 | +your rights to work written entirely by you; rather, the intent is to | |
| 175 | +exercise the right to control the distribution of derivative or | |
| 176 | +collective works based on the Program. | |
| 177 | + | |
| 178 | +In addition, mere aggregation of another work not based on the Program | |
| 179 | +with the Program (or with a work based on the Program) on a volume of | |
| 180 | +a storage or distribution medium does not bring the other work under | |
| 181 | +the scope of this License. | |
| 182 | + | |
| 183 | + 3. You may copy and distribute the Program (or a work based on it, | |
| 184 | +under Section 2) in object code or executable form under the terms of | |
| 185 | +Sections 1 and 2 above provided that you also do one of the following: | |
| 186 | + | |
| 187 | + a) Accompany it with the complete corresponding machine-readable | |
| 188 | + source code, which must be distributed under the terms of Sections | |
| 189 | + 1 and 2 above on a medium customarily used for software interchange; or, | |
| 190 | + | |
| 191 | + b) Accompany it with a written offer, valid for at least three | |
| 192 | + years, to give any third party, for a charge no more than your | |
| 193 | + cost of physically performing source distribution, a complete | |
| 194 | + machine-readable copy of the corresponding source code, to be | |
| 195 | + distributed under the terms of Sections 1 and 2 above on a medium | |
| 196 | + customarily used for software interchange; or, | |
| 197 | + | |
| 198 | + c) Accompany it with the information you received as to the offer | |
| 199 | + to distribute corresponding source code. (This alternative is | |
| 200 | + allowed only for noncommercial distribution and only if you | |
| 201 | + received the program in object code or executable form with such | |
| 202 | + an offer, in accord with Subsection b above.) | |
| 203 | + | |
| 204 | +The source code for a work means the preferred form of the work for | |
| 205 | +making modifications to it. For an executable work, complete source | |
| 206 | +code means all the source code for all modules it contains, plus any | |
| 207 | +associated interface definition files, plus the scripts used to | |
| 208 | +control compilation and installation of the executable. However, as a | |
| 209 | +special exception, the source code distributed need not include | |
| 210 | +anything that is normally distributed (in either source or binary | |
| 211 | +form) with the major components (compiler, kernel, and so on) of the | |
| 212 | +operating system on which the executable runs, unless that component | |
| 213 | +itself accompanies the executable. | |
| 214 | + | |
| 215 | +If distribution of executable or object code is made by offering | |
| 216 | +access to copy from a designated place, then offering equivalent | |
| 217 | +access to copy the source code from the same place counts as | |
| 218 | +distribution of the source code, even though third parties are not | |
| 219 | +compelled to copy the source along with the object code. | |
| 220 | + | |
| 221 | + 4. You may not copy, modify, sublicense, or distribute the Program | |
| 222 | +except as expressly provided under this License. Any attempt | |
| 223 | +otherwise to copy, modify, sublicense or distribute the Program is | |
| 224 | +void, and will automatically terminate your rights under this License. | |
| 225 | +However, parties who have received copies, or rights, from you under | |
| 226 | +this License will not have their licenses terminated so long as such | |
| 227 | +parties remain in full compliance. | |
| 228 | + | |
| 229 | + 5. You are not required to accept this License, since you have not | |
| 230 | +signed it. However, nothing else grants you permission to modify or | |
| 231 | +distribute the Program or its derivative works. These actions are | |
| 232 | +prohibited by law if you do not accept this License. Therefore, by | |
| 233 | +modifying or distributing the Program (or any work based on the | |
| 234 | +Program), you indicate your acceptance of this License to do so, and | |
| 235 | +all its terms and conditions for copying, distributing or modifying | |
| 236 | +the Program or works based on it. | |
| 237 | + | |
| 238 | + 6. Each time you redistribute the Program (or any work based on the | |
| 239 | +Program), the recipient automatically receives a license from the | |
| 240 | +original licensor to copy, distribute or modify the Program subject to | |
| 241 | +these terms and conditions. You may not impose any further | |
| 242 | +restrictions on the recipients' exercise of the rights granted herein. | |
| 243 | +You are not responsible for enforcing compliance by third parties to | |
| 244 | +this License. | |
| 245 | + | |
| 246 | + 7. If, as a consequence of a court judgment or allegation of patent | |
| 247 | +infringement or for any other reason (not limited to patent issues), | |
| 248 | +conditions are imposed on you (whether by court order, agreement or | |
| 249 | +otherwise) that contradict the conditions of this License, they do not | |
| 250 | +excuse you from the conditions of this License. If you cannot | |
| 251 | +distribute so as to satisfy simultaneously your obligations under this | |
| 252 | +License and any other pertinent obligations, then as a consequence you | |
| 253 | +may not distribute the Program at all. For example, if a patent | |
| 254 | +license would not permit royalty-free redistribution of the Program by | |
| 255 | +all those who receive copies directly or indirectly through you, then | |
| 256 | +the only way you could satisfy both it and this License would be to | |
| 257 | +refrain entirely from distribution of the Program. | |
| 258 | + | |
| 259 | +If any portion of this section is held invalid or unenforceable under | |
| 260 | +any particular circumstance, the balance of the section is intended to | |
| 261 | +apply and the section as a whole is intended to apply in other | |
| 262 | +circumstances. | |
| 263 | + | |
| 264 | +It is not the purpose of this section to induce you to infringe any | |
| 265 | +patents or other property right claims or to contest validity of any | |
| 266 | +such claims; this section has the sole purpose of protecting the | |
| 267 | +integrity of the free software distribution system, which is | |
| 268 | +implemented by public license practices. Many people have made | |
| 269 | +generous contributions to the wide range of software distributed | |
| 270 | +through that system in reliance on consistent application of that | |
| 271 | +system; it is up to the author/donor to decide if he or she is willing | |
| 272 | +to distribute software through any other system and a licensee cannot | |
| 273 | +impose that choice. | |
| 274 | + | |
| 275 | +This section is intended to make thoroughly clear what is believed to | |
| 276 | +be a consequence of the rest of this License. | |
| 277 | + | |
| 278 | + 8. If the distribution and/or use of the Program is restricted in | |
| 279 | +certain countries either by patents or by copyrighted interfaces, the | |
| 280 | +original copyright holder who places the Program under this License | |
| 281 | +may add an explicit geographical distribution limitation excluding | |
| 282 | +those countries, so that distribution is permitted only in or among | |
| 283 | +countries not thus excluded. In such case, this License incorporates | |
| 284 | +the limitation as if written in the body of this License. | |
| 285 | + | |
| 286 | + 9. The Free Software Foundation may publish revised and/or new versions | |
| 287 | +of the General Public License from time to time. Such new versions will | |
| 288 | +be similar in spirit to the present version, but may differ in detail to | |
| 289 | +address new problems or concerns. | |
| 290 | + | |
| 291 | +Each version is given a distinguishing version number. If the Program | |
| 292 | +specifies a version number of this License which applies to it and "any | |
| 293 | +later version", you have the option of following the terms and conditions | |
| 294 | +either of that version or of any later version published by the Free | |
| 295 | +Software Foundation. If the Program does not specify a version number of | |
| 296 | +this License, you may choose any version ever published by the Free Software | |
| 297 | +Foundation. | |
| 298 | + | |
| 299 | + 10. If you wish to incorporate parts of the Program into other free | |
| 300 | +programs whose distribution conditions are different, write to the author | |
| 301 | +to ask for permission. For software which is copyrighted by the Free | |
| 302 | +Software Foundation, write to the Free Software Foundation; we sometimes | |
| 303 | +make exceptions for this. Our decision will be guided by the two goals | |
| 304 | +of preserving the free status of all derivatives of our free software and | |
| 305 | +of promoting the sharing and reuse of software generally. | |
| 306 | + | |
| 307 | + NO WARRANTY | |
| 308 | + | |
| 309 | + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | |
| 310 | +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | |
| 311 | +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | |
| 312 | +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | |
| 313 | +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
| 314 | +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | |
| 315 | +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | |
| 316 | +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | |
| 317 | +REPAIR OR CORRECTION. | |
| 318 | + | |
| 319 | + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |
| 320 | +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | |
| 321 | +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | |
| 322 | +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | |
| 323 | +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | |
| 324 | +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | |
| 325 | +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | |
| 326 | +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | |
| 327 | +POSSIBILITY OF SUCH DAMAGES. | |
| @@ -124,7 +124,7 @@ in the partition table and therefore every operating system has to know · 123 unmodified lines | ||
| 124 | 124 | the right geometry to be able to interpret it. |
| 125 | 125 | |
| 126 | 126 | Moreover there are certain limitations to the C/H/S addressing scheme, |
| 127 | −namely the address space is limited to upto 255 heads, upto 63 sectors | |
| 127 | +namely the address space is limited to up to 255 heads, up to 63 sectors | |
| 128 | 128 | and a maximum of 1023 cylinders. |
| 129 | 129 | |
| 130 | 130 | The AHA-1522 BIOS calculates the geometry by fixing the number of heads |
| @@ -267,7 +267,7 @@ The following information is available in this file: · 266 unmodified lines | ||
| 267 | 267 | Option: tag_info:{{value[,value...]}[,{value[,value...]}...]} |
| 268 | 268 | Definition: Set the per-target tagged queue depth on a |
| 269 | 269 | per controller basis. Both controllers and targets |
| 270 | − may be ommitted indicating that they should retain | |
| 270 | + may be omitted indicating that they should retain | |
| 271 | 271 | the default tag depth. |
| 272 | 272 | Examples: tag_info:{{16,32,32,64,8,8,,32,32,32,32,32,32,32,32,32} |
| 273 | 273 | On Controller 0 |
| @@ -291,7 +291,7 @@ The following information is available in this file: · 17 unmodified lines | ||
| 291 | 291 | The rd_strm_bitmask is a 16 bit hex value in which |
| 292 | 292 | each bit represents a target. Setting the target's |
| 293 | 293 | bit to '1' enables read streaming for that |
| 294 | − target. Controllers may be ommitted indicating that | |
| 294 | + target. Controllers may be omitted indicating that | |
| 295 | 295 | they should retain the default read streaming setting. |
| 296 | 296 | Example: rd_strm:{0x0041} |
| 297 | 297 | On Controller 0 |
| @@ -313,7 +313,7 @@ The following information is available in this file: · 15 unmodified lines | ||
| 313 | 313 | ----------------------------------------------------------------- |
| 314 | 314 | Option: dv: {value[,value...]} |
| 315 | 315 | Definition: Set Domain Validation Policy on a per-controller basis. |
| 316 | − Controllers may be ommitted indicating that | |
| 316 | + Controllers may be omitted indicating that | |
| 317 | 317 | they should retain the default read streaming setting. |
| 318 | 318 | Example: dv:{-1,0,,1,1,0} |
| 319 | 319 | On Controller 0 leave DV at its default setting. |
| @@ -340,7 +340,7 @@ The following information is available in this file: · 20 unmodified lines | ||
| 340 | 340 | Option: precomp: {value[,value...]} |
| 341 | 341 | Definition: Set IO Cell precompensation value on a per-controller |
| 342 | 342 | basis. |
| 343 | − Controllers may be ommitted indicating that | |
| 343 | + Controllers may be omitted indicating that | |
| 344 | 344 | they should retain the default precompensation setting. |
| 345 | 345 | Example: precomp:{0x1} |
| 346 | 346 | On Controller 0 set precompensation to 1. |
| @@ -353,7 +353,7 @@ The following information is available in this file: · 6 unmodified lines | ||
| 353 | 353 | ----------------------------------------------------------------- |
| 354 | 354 | Option: slewrate: {value[,value...]} |
| 355 | 355 | Definition: Set IO Cell slew rate on a per-controller basis. |
| 356 | − Controllers may be ommitted indicating that | |
| 356 | + Controllers may be omitted indicating that | |
| 357 | 357 | they should retain the default slew rate setting. |
| 358 | 358 | Example: slewrate:{0x1} |
| 359 | 359 | On Controller 0 set slew rate to 1. |
| @@ -366,7 +366,7 @@ The following information is available in this file: · 6 unmodified lines | ||
| 366 | 366 | ----------------------------------------------------------------- |
| 367 | 367 | Option: amplitude: {value[,value...]} |
| 368 | 368 | Definition: Set IO Cell signal amplitude on a per-controller basis. |
| 369 | − Controllers may be ommitted indicating that | |
| 369 | + Controllers may be omitted indicating that | |
| 370 | 370 | they should retain the default read streaming setting. |
| 371 | 371 | Example: amplitude:{0x1} |
| 372 | 372 | On Controller 0 set amplitude to 1. |
| @@ -303,7 +303,7 @@ · 302 unmodified lines | ||
| 303 | 303 | (scb) and calls a local function issue_cmd(), which writes a scb |
| 304 | 304 | command into subsystem I/O ports. Once the scb command is carried out, |
| 305 | 305 | the interrupt_handler() is invoked. If a device is determined to be |
| 306 | − existant and it has not assigned any ldn, it gets one dynamically. | |
| 306 | + existent and it has not assigned any ldn, it gets one dynamically. | |
| 307 | 307 | For this, the whole stuff is done in ibmmca_queuecommand(). |
| 308 | 308 | |
| 309 | 309 | 2.6 Abort & Reset Commands |
| @@ -741,7 +741,7 @@ · 431 unmodified lines | ||
| 741 | 741 | some error appeared, else it is undefined. Now, this is fixed. Before |
| 742 | 742 | any SCB command gets queued, the tsb.dev_status is set to 0, so the |
| 743 | 743 | cmd->result won't screw up Linux higher level drivers. |
| 744 | − 2) The reset-function has slightly improved. This is still planed for | |
| 744 | + 2) The reset-function has slightly improved. This is still planned for | |
| 745 | 745 | abort. During the abort and the reset function, no interrupts are |
| 746 | 746 | allowed. This is however quite hard to cope with, so the INT-status |
| 747 | 747 | register is read. When the interrupt gets queued, one can find its |
| @@ -102,7 +102,7 @@ Trouble? · 101 unmodified lines | ||
| 102 | 102 | |
| 103 | 103 | If you insmod the driver with "insmod debug=1", it will be verbose and |
| 104 | 104 | prints a lot of stuff to the syslog. Compiling the kernel with |
| 105 | −CONFIG_SCSI_CONSTANTS=y improves the quality of the error messages alot | |
| 105 | +CONFIG_SCSI_CONSTANTS=y improves the quality of the error messages a lot | |
| 106 | 106 | because the kernel will translate the error codes into human-readable |
| 107 | 107 | strings then. |
| 108 | 108 | |
| @@ -290,7 +290,7 @@ scmd->allowed. · 289 unmodified lines | ||
| 290 | 290 | SCSI transports/LLDDs automatically acquire sense data on |
| 291 | 291 | command failures (autosense). Autosense is recommended for |
| 292 | 292 | performance reasons and as sense information could get out of |
| 293 | − sync inbetween occurrence of CHECK CONDITION and this action. | |
| 293 | + sync between occurrence of CHECK CONDITION and this action. | |
| 294 | 294 | |
| 295 | 295 | Note that if autosense is not supported, scmd->sense_buffer |
| 296 | 296 | contains invalid sense data when error-completing the scmd |
| @@ -291,7 +291,7 @@ Transport <-> LLDD Interfaces : · 290 unmodified lines | ||
| 291 | 291 | Vport support by LLDD: |
| 292 | 292 | |
| 293 | 293 | The LLDD indicates support for vports by supplying a vport_create() |
| 294 | − function in the transport template. The presense of this function will | |
| 294 | + function in the transport template. The presence of this function will | |
| 295 | 295 | cause the creation of the new attributes on the fc_host. As part of |
| 296 | 296 | the physical port completing its initialization relative to the |
| 297 | 297 | transport, it should set the max_npiv_vports attribute to indicate the |
| @@ -285,7 +285,7 @@ from the driver. · 284 unmodified lines | ||
| 285 | 285 | |
| 286 | 286 | 7. Profiling information |
| 287 | 287 | |
| 288 | −This driver does not provide profiling informations as did its predecessors. | |
| 288 | +This driver does not provide profiling information as did its predecessors. | |
| 289 | 289 | This feature was not this useful and added complexity to the code. |
| 290 | 290 | As the driver code got more complex, I have decided to remove everything |
| 291 | 291 | that didn't seem actually useful. |
| @@ -0,0 +1,18 @@ | ||
| 1 | +00-INDEX | |
| 2 | + - this file. | |
| 3 | +SELinux.txt | |
| 4 | + - how to get started with the SELinux security enhancement. | |
| 5 | +Smack.txt | |
| 6 | + - documentation on the Smack Linux Security Module. | |
| 7 | +apparmor.txt | |
| 8 | + - documentation on the AppArmor security extension. | |
| 9 | +credentials.txt | |
| 10 | + - documentation about credentials in Linux. | |
| 11 | +keys-request-key.txt | |
| 12 | + - description of the kernel key request service. | |
| 13 | +keys-trusted-encrypted.txt | |
| 14 | + - info on the Trusted and Encrypted keys in the kernel key ring service. | |
| 15 | +keys.txt | |
| 16 | + - description of the kernel key retention service. | |
| 17 | +tomoyo.txt | |
| 18 | + - documentation on the TOMOYO Linux Security Module. | |
File renamed without changes.
File renamed without changes.
File renamed without changes.
| @@ -216,7 +216,7 @@ The Linux kernel supports the following types of credentials: · 215 unmodified lines | ||
| 216 | 216 | When a process accesses a key, if not already present, it will normally be |
| 217 | 217 | cached on one of these keyrings for future accesses to find. |
| 218 | 218 | |
| 219 | − For more information on using keys, see Documentation/keys.txt. | |
| 219 | + For more information on using keys, see Documentation/security/keys.txt. | |
| 220 | 220 | |
| 221 | 221 | (5) LSM |
| 222 | 222 | |
| @@ -3,8 +3,8 @@ · 2 unmodified lines | ||
| 3 | 3 | =================== |
| 4 | 4 | |
| 5 | 5 | The key request service is part of the key retention service (refer to |
| 6 | −Documentation/keys.txt). This document explains more fully how the requesting | |
| 7 | −algorithm works. | |
| 6 | +Documentation/security/keys.txt). This document explains more fully how | |
| 7 | +the requesting algorithm works. | |
| 8 | 8 | |
| 9 | 9 | The process starts by either the kernel requesting a service by calling |
| 10 | 10 | request_key*(): |
File renamed without changes.
| @@ -434,7 +434,7 @@ The main syscalls are: · 433 unmodified lines | ||
| 434 | 434 | /sbin/request-key will be invoked in an attempt to obtain a key. The |
| 435 | 435 | callout_info string will be passed as an argument to the program. |
| 436 | 436 | |
| 437 | − See also Documentation/keys-request-key.txt. | |
| 437 | + See also Documentation/security/keys-request-key.txt. | |
| 438 | 438 | |
| 439 | 439 | |
| 440 | 440 | The keyctl syscall functions are: |
| @@ -864,7 +864,7 @@ payload contents" for more information. · 423 unmodified lines | ||
| 864 | 864 | If successful, the key will have been attached to the default keyring for |
| 865 | 865 | implicitly obtained request-key keys, as set by KEYCTL_SET_REQKEY_KEYRING. |
| 866 | 866 | |
| 867 | − See also Documentation/keys-request-key.txt. | |
| 867 | + See also Documentation/security/keys-request-key.txt. | |
| 868 | 868 | |
| 869 | 869 | |
| 870 | 870 | (*) To search for a key, passing auxiliary data to the upcaller, call: |
File renamed without changes.
| @@ -473,7 +473,7 @@ Content · 472 unmodified lines | ||
| 473 | 473 | spd_normal Use 38.4kb when the application requests 38.4kb. |
| 474 | 474 | spd_cust Use the custom divisor to set the speed when the |
| 475 | 475 | application requests 38.4kb. |
| 476 | − divisor This option set the custom divison. | |
| 476 | + divisor This option set the custom division. | |
| 477 | 477 | baud_base This option set the base baud rate. |
| 478 | 478 | |
| 479 | 479 | ----------------------------------------------------------------------------- |
| @@ -34,7 +34,7 @@ Major parts of the initialization program : · 33 unmodified lines | ||
| 34 | 34 | /* configure the serial port : speed, flow control ... */ |
| 35 | 35 | |
| 36 | 36 | /* send the AT commands to switch the modem to CMUX mode |
| 37 | − and check that it's succesful (should return OK) */ | |
| 37 | + and check that it's successful (should return OK) */ | |
| 38 | 38 | write(fd, "AT+CMUX=0\r", 10); |
| 39 | 39 | |
| 40 | 40 | /* experience showed that some modems need some time before |
| @@ -322,7 +322,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. · 321 unmodified lines | ||
| 322 | 322 | "port" needs to match the BASE ADDRESS jumper on the card (0x220 or 0x240) |
| 323 | 323 | or the value stored in the card's EEPROM for cards that have an EEPROM and |
| 324 | 324 | their "CONFIG MODE" jumper set to "EEPROM SETTING". The other values can |
| 325 | − be choosen freely from the options enumerated above. | |
| 325 | + be chosen freely from the options enumerated above. | |
| 326 | 326 | |
| 327 | 327 | If dma2 is specified and different from dma1, the card will operate in |
| 328 | 328 | full-duplex mode. When dma1=3, only dma2=0 is valid and the only way to |
| @@ -356,7 +356,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. · 27 unmodified lines | ||
| 356 | 356 | "port" needs to match the BASE ADDRESS jumper on the card (0x220 or 0x240) |
| 357 | 357 | or the value stored in the card's EEPROM for cards that have an EEPROM and |
| 358 | 358 | their "CONFIG MODE" jumper set to "EEPROM SETTING". The other values can |
| 359 | − be choosen freely from the options enumerated above. | |
| 359 | + be chosen freely from the options enumerated above. | |
| 360 | 360 | |
| 361 | 361 | If dma2 is specified and different from dma1, the card will operate in |
| 362 | 362 | full-duplex mode. When dma1=3, only dma2=0 is valid and the only way to |
| @@ -1230,6 +1230,13 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. · 867 unmodified lines | ||
| 1230 | 1230 | This module supports multiple cards. |
| 1231 | 1231 | The driver requires the firmware loader support on kernel. |
| 1232 | 1232 | |
| 1233 | + Module snd-lola | |
| 1234 | + --------------- | |
| 1235 | + | |
| 1236 | + Module for Digigram Lola PCI-e boards | |
| 1237 | + | |
| 1238 | + This module supports multiple cards. | |
| 1239 | + | |
| 1233 | 1240 | Module snd-lx6464es |
| 1234 | 1241 | ------------------- |
| 1235 | 1242 | |
| @@ -2229,7 +2236,7 @@ Proc interfaces (/proc/asound) · 993 unmodified lines | ||
| 2229 | 2236 | |
| 2230 | 2237 | /proc/asound/card#/pcm#[cp]/oss |
| 2231 | 2238 | ------------------------------- |
| 2232 | − String "erase" - erase all additional informations about OSS applications | |
| 2239 | + String "erase" - erase all additional information about OSS applications | |
| 2233 | 2240 | String "<app_name> <fragments> <fragment_size> [<options>]" |
| 2234 | 2241 | |
| 2235 | 2242 | <app_name> - name of application with (higher priority) or without path |
| @@ -94,7 +94,7 @@ ALC662/663/272 · 93 unmodified lines | ||
| 94 | 94 | 3stack-dig 3-stack (2-channel) with SPDIF |
| 95 | 95 | 3stack-6ch 3-stack (6-channel) |
| 96 | 96 | 3stack-6ch-dig 3-stack (6-channel) with SPDIF |
| 97 | − 6stack-dig 6-stack with SPDIF | |
| 97 | + 5stack-dig 5-stack with SPDIF | |
| 98 | 98 | lenovo-101e Lenovo laptop |
| 99 | 99 | eeepc-p701 ASUS Eeepc P701 |
| 100 | 100 | eeepc-ep20 ASUS Eeepc EP20 |
| @@ -87,14 +87,14 @@ accumulator. ALSA uses accumulators 0 and 1 for left and right PCM. · 86 unmodified lines | ||
| 87 | 87 | The result is forwarded to the ADC capture FIFO (thus to the standard capture |
| 88 | 88 | PCM device). |
| 89 | 89 | |
| 90 | −name='Music Playback Volume',index=0 | |
| 90 | +name='Synth Playback Volume',index=0 | |
| 91 | 91 | |
| 92 | 92 | This control is used to attenuate samples for left and right MIDI FX-bus |
| 93 | 93 | accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples. |
| 94 | 94 | The result samples are forwarded to the front DAC PCM slots of the AC97 codec. |
| 95 | 95 | |
| 96 | −name='Music Capture Volume',index=0 | |
| 97 | −name='Music Capture Switch',index=0 | |
| 96 | +name='Synth Capture Volume',index=0 | |
| 97 | +name='Synth Capture Switch',index=0 | |
| 98 | 98 | |
| 99 | 99 | These controls are used to attenuate samples for left and right MIDI FX-bus |
| 100 | 100 | accumulator. ALSA uses accumulators 4 and 5 for left and right PCM. |
| @@ -1,10 +1,10 @@ | ||
| 1 | 1 | Driver |
| 2 | 2 | ------ |
| 3 | 3 | |
| 4 | −Informations about Audio Excel DSP 16 driver can be found in the source | |
| 4 | +Information about Audio Excel DSP 16 driver can be found in the source | |
| 5 | 5 | file aedsp16.c |
| 6 | 6 | Please, read the head of the source before using it. It contain useful |
| 7 | −informations. | |
| 7 | +information. | |
| 8 | 8 | |
| 9 | 9 | Configuration |
| 10 | 10 | ------------- |
| @@ -68,7 +68,7 @@ Sound cards supported · 57 unmodified lines | ||
| 68 | 68 | This driver supports the SC-6000 and SC-6600 based Gallant's sound card. |
| 69 | 69 | It don't support the Audio Excel DSP 16 III (try the SC-6600 code). |
| 70 | 70 | I'm working on the III version of the card: if someone have useful |
| 71 | −informations about it, please let me know. | |
| 71 | +information about it, please let me know. | |
| 72 | 72 | For all the non-supported audio cards, you have to boot MS-DOS (or WIN95) |
| 73 | 73 | activating the audio card with the MS-DOS device driver, then you have to |
| 74 | 74 | <ctrl>-<alt>-<del> and boot Linux. |
| @@ -1352,7 +1352,7 @@ OSS-mixer. · 1351 unmodified lines | ||
| 1352 | 1352 | The PCM20 contains a radio tuner, which is also controlled by |
| 1353 | 1353 | ACI. This radio tuner is supported by the ACI driver together with the |
| 1354 | 1354 | miropcm20.o module. Also the 7-band equalizer is integrated |
| 1355 | −(limited by the OSS-design). Developement has started and maybe | |
| 1355 | +(limited by the OSS-design). Development has started and maybe | |
| 1356 | 1356 | finished for the RDS decoder on this card, too. You will be able to |
| 1357 | 1357 | read RadioText, the Programme Service name, Programme TYpe and |
| 1358 | 1358 | others. Even the v4l radio module benefits from it with a refined |
| @@ -5,7 +5,7 @@ FIRST OF ALL · 4 unmodified lines | ||
| 5 | 5 | ============ |
| 6 | 6 | |
| 7 | 7 | This code references YAMAHA's sample codes and data sheets. |
| 8 | − I respect and thank for all people they made open the informations | |
| 8 | + I respect and thank for all people they made open the information | |
| 9 | 9 | about YMF7xx cards. |
| 10 | 10 | |
| 11 | 11 | And this codes heavily based on Jeff Garzik <jgarzik@pobox.com>'s |
| @@ -143,7 +143,7 @@ configured to use SSPFRM instead. · 142 unmodified lines | ||
| 143 | 143 | NOTE: the SPI driver cannot control the chip select if SSPFRM is used, so the |
| 144 | 144 | chipselect is dropped after each spi_transfer. Most devices need chip select |
| 145 | 145 | asserted around the complete message. Use SSPFRM as a GPIO (through cs_control) |
| 146 | −to accomodate these chips. | |
| 146 | +to accommodate these chips. | |
| 147 | 147 | |
| 148 | 148 | |
| 149 | 149 | NSSP SLAVE SAMPLE |
| @@ -46,7 +46,7 @@ The hardware interfacing on the LM70 LLP eval board is as follows: · 45 unmodified lines | ||
| 46 | 46 | |
| 47 | 47 | Note that since the LM70 uses a "3-wire" variant of SPI, the SI/SO pin |
| 48 | 48 | is connected to both pin D7 (as Master Out) and Select (as Master In) |
| 49 | −using an arrangment that lets either the parport or the LM70 pull the | |
| 49 | +using an arrangement that lets either the parport or the LM70 pull the | |
| 50 | 50 | pin low. This can't be shared with true SPI devices, but other 3-wire |
| 51 | 51 | devices might share the same SI/SO pin. |
| 52 | 52 | |
| @@ -122,7 +122,7 @@ operating system to suffer. · 121 unmodified lines | ||
| 122 | 122 | |
| 123 | 123 | In both of these instances, all developers agreed that these were |
| 124 | 124 | important changes that needed to be made, and they were made, with |
| 125 | −relatively little pain. If Linux had to ensure that it preserve a | |
| 125 | +relatively little pain. If Linux had to ensure that it will preserve a | |
| 126 | 126 | stable source interface, a new interface would have been created, and |
| 127 | 127 | the older, broken one would have had to be maintained over time, leading |
| 128 | 128 | to extra work for the USB developers. Since all Linux USB developers do |
| @@ -231,13 +231,6 @@ its creation). · 230 unmodified lines | ||
| 231 | 231 | |
| 232 | 232 | This directory contains configuration options for the epoll(7) interface. |
| 233 | 233 | |
| 234 | −max_user_instances | |
| 235 | −------------------ | |
| 236 | − | |
| 237 | −This is the maximum number of epoll file descriptors that a single user can | |
| 238 | −have open at a given time. The default value is 128, and should be enough | |
| 239 | −for normal users. | |
| 240 | − | |
| 241 | 234 | max_user_watches |
| 242 | 235 | ---------------- |
| 243 | 236 | |
| @@ -161,7 +161,8 @@ core_pattern is used to specify a core dumpfile pattern name. · 160 unmodified lines | ||
| 161 | 161 | %s signal number |
| 162 | 162 | %t UNIX time of dump |
| 163 | 163 | %h hostname |
| 164 | − %e executable filename | |
| 164 | + %e executable filename (may be shortened) | |
| 165 | + %E executable path | |
| 165 | 166 | %<OTHER> both are dropped |
| 166 | 167 | . If the first character of the pattern is a '|', the kernel will treat |
| 167 | 168 | the rest of the pattern as a command to run. The core dump will be |
| @@ -32,6 +32,17 @@ Table : Subdirectories in /proc/sys/net · 31 unmodified lines | ||
| 32 | 32 | 1. /proc/sys/net/core - Network core options |
| 33 | 33 | ------------------------------------------------------- |
| 34 | 34 | |
| 35 | +bpf_jit_enable | |
| 36 | +-------------- | |
| 37 | + | |
| 38 | +This enables Berkeley Packet Filter Just in Time compiler. | |
| 39 | +Currently supported on x86_64 architecture, bpf_jit provides a framework | |
| 40 | +to speed packet filtering, the one used by tcpdump/libpcap for example. | |
| 41 | +Values : | |
| 42 | + 0 - disable the JIT (default value) | |
| 43 | + 1 - enable the JIT | |
| 44 | + 2 - enable the JIT and ask the compiler to emit traces on kernel log. | |
| 45 | + | |
| 35 | 46 | rmem_default |
| 36 | 47 | ------------ |
| 37 | 48 | |
| @@ -481,10 +481,10 @@ the DMA zone. · 480 unmodified lines | ||
| 481 | 481 | Type(A) is called as "Node" order. Type (B) is "Zone" order. |
| 482 | 482 | |
| 483 | 483 | "Node order" orders the zonelists by node, then by zone within each node. |
| 484 | −Specify "[Nn]ode" for zone order | |
| 484 | +Specify "[Nn]ode" for node order | |
| 485 | 485 | |
| 486 | 486 | "Zone Order" orders the zonelists by zone type, then by node within each |
| 487 | −zone. Specify "[Zz]one"for zode order. | |
| 487 | +zone. Specify "[Zz]one" for zone order. | |
| 488 | 488 | |
| 489 | 489 | Specify "[Dd]efault" to request automatic configuration. Autoconfiguration |
| 490 | 490 | will select "node" order in following case. |
| @@ -51,7 +51,7 @@ be removed to protect the rights of others. · 50 unmodified lines | ||
| 51 | 51 | Specifically, very old Internet PhoneJACK cards have non-standard |
| 52 | 52 | G.723.1 codecs (due to the early nature of the DSPs in those days). |
| 53 | 53 | The auto-conversion code to bring those cards into compliance with |
| 54 | −todays standards is available as a binary only module to those people | |
| 54 | +today's standards is available as a binary only module to those people | |
| 55 | 55 | needing it. If you bought your card after 1997 or so, you are OK - |
| 56 | 56 | it's only the very old cards that are affected. |
| 57 | 57 | |
| @@ -24,7 +24,7 @@ ATOMIC CONTEXT: · 23 unmodified lines | ||
| 24 | 24 | |
| 25 | 25 | ndelay(unsigned long nsecs) |
| 26 | 26 | udelay(unsigned long usecs) |
| 27 | − mdelay(unsgined long msecs) | |
| 27 | + mdelay(unsigned long msecs) | |
| 28 | 28 | |
| 29 | 29 | udelay is the generally preferred API; ndelay-level |
| 30 | 30 | precision may not actually exist on many non-PC devices. |
| @@ -120,7 +120,6 @@ format: · 119 unmodified lines | ||
| 120 | 120 | field:unsigned char common_flags; offset:2; size:1; signed:0; |
| 121 | 121 | field:unsigned char common_preempt_count; offset:3; size:1;signed:0; |
| 122 | 122 | field:int common_pid; offset:4; size:4; signed:1; |
| 123 | − field:int common_lock_depth; offset:8; size:4; signed:1; | |
| 124 | 123 | |
| 125 | 124 | field:unsigned long __probe_ip; offset:12; size:4; signed:0; |
| 126 | 125 | field:int __probe_nargs; offset:16; size:4; signed:1; |
| @@ -237,7 +237,7 @@ with the previous write. · 236 unmodified lines | ||
| 237 | 237 | |written | |
| 238 | 238 | +---------+ |
| 239 | 239 | |written | |
| 240 | − +---------+ <--- next positon for write (current commit) | |
| 240 | + +---------+ <--- next position for write (current commit) | |
| 241 | 241 | | empty | |
| 242 | 242 | +---------+ |
| 243 | 243 | |
| @@ -95,9 +95,11 @@ pre_reset · 94 unmodified lines | ||
| 95 | 95 | |
| 96 | 96 | int (*pre_reset)(struct usb_interface *intf); |
| 97 | 97 | |
| 98 | −Another driver or user space is triggering a reset on the device which | |
| 99 | −contains the interface passed as an argument. Cease IO and save any | |
| 100 | −device state you need to restore. | |
| 98 | +A driver or user space is triggering a reset on the device which | |
| 99 | +contains the interface passed as an argument. Cease IO, wait for all | |
| 100 | +outstanding URBs to complete, and save any device state you need to | |
| 101 | +restore. No more URBs may be submitted until the post_reset method | |
| 102 | +is called. | |
| 101 | 103 | |
| 102 | 104 | If you need to allocate memory here, use GFP_NOIO or GFP_ATOMIC, if you |
| 103 | 105 | are in atomic context. |
| @@ -90,10 +90,10 @@ ServiceBinary=%12%\USBSER.sys · 89 unmodified lines | ||
| 90 | 90 | [SourceDisksFiles] |
| 91 | 91 | [SourceDisksNames] |
| 92 | 92 | [DeviceList] |
| 93 | −%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 | |
| 93 | +%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02 | |
| 94 | 94 | |
| 95 | 95 | [DeviceList.NTamd64] |
| 96 | −%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 | |
| 96 | +%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02 | |
| 97 | 97 | |
| 98 | 98 | |
| 99 | 99 | ;------------------------------------------------------------------------------ |
| @@ -18,15 +18,15 @@ DriverVer = 06/21/2006,6.0.6000.16384 · 17 unmodified lines | ||
| 18 | 18 | |
| 19 | 19 | ; Decoration for x86 architecture |
| 20 | 20 | [LinuxDevices.NTx86] |
| 21 | −%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 | |
| 21 | +%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00 | |
| 22 | 22 | |
| 23 | 23 | ; Decoration for x64 architecture |
| 24 | 24 | [LinuxDevices.NTamd64] |
| 25 | −%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 | |
| 25 | +%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00 | |
| 26 | 26 | |
| 27 | 27 | ; Decoration for ia64 architecture |
| 28 | 28 | [LinuxDevices.NTia64] |
| 29 | −%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 | |
| 29 | +%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00 | |
| 30 | 30 | |
| 31 | 31 | ;@@@ This is the common setting for setup |
| 32 | 32 | [ControlFlags] |
| @@ -14,11 +14,10 @@ the legacy VGA arbitration task (besides other bus management tasks) when more · 13 unmodified lines | ||
| 14 | 14 | than one legacy device co-exists on the same machine. But the problem happens |
| 15 | 15 | when these devices are trying to be accessed by different userspace clients |
| 16 | 16 | (e.g. two server in parallel). Their address assignments conflict. Moreover, |
| 17 | −ideally, being an userspace application, it is not the role of the the X | |
| 18 | −server to control bus resources. Therefore an arbitration scheme outside of | |
| 19 | −the X server is needed to control the sharing of these resources. This | |
| 20 | −document introduces the operation of the VGA arbiter implemented for Linux | |
| 21 | −kernel. | |
| 17 | +ideally, being a userspace application, it is not the role of the X server to | |
| 18 | +control bus resources. Therefore an arbitration scheme outside of the X server | |
| 19 | +is needed to control the sharing of these resources. This document introduces | |
| 20 | +the operation of the VGA arbiter implemented for the Linux kernel. | |
| 22 | 21 | |
| 23 | 22 | ---------------------------------------------------------------------------- |
| 24 | 23 | |
| @@ -39,7 +38,7 @@ I.1 vgaarb · 14 unmodified lines | ||
| 39 | 38 | The vgaarb is a module of the Linux Kernel. When it is initially loaded, it |
| 40 | 39 | scans all PCI devices and adds the VGA ones inside the arbitration. The |
| 41 | 40 | arbiter then enables/disables the decoding on different devices of the VGA |
| 42 | −legacy instructions. Device which do not want/need to use the arbiter may | |
| 41 | +legacy instructions. Devices which do not want/need to use the arbiter may | |
| 43 | 42 | explicitly tell it by calling vga_set_legacy_decoding(). |
| 44 | 43 | |
| 45 | 44 | The kernel exports a char device interface (/dev/vga_arbiter) to the clients, |
| @@ -95,8 +94,8 @@ In the case of devices hot-{un,}plugged, there is a hook - pci_notify() - to · 49 unmodified lines | ||
| 95 | 94 | notify them being added/removed in the system and automatically added/removed |
| 96 | 95 | in the arbiter. |
| 97 | 96 | |
| 98 | −There's also a in-kernel API of the arbiter in the case of DRM, vgacon and | |
| 99 | −others which may use the arbiter. | |
| 97 | +There is also an in-kernel API of the arbiter in case DRM, vgacon, or other | |
| 98 | +drivers want to use it. | |
| 100 | 99 | |
| 101 | 100 | |
| 102 | 101 | I.2 libpciaccess |
| @@ -117,9 +116,8 @@ Besides it, in pci_system were added: · 14 unmodified lines | ||
| 117 | 116 | struct pci_device *vga_default_dev; |
| 118 | 117 | |
| 119 | 118 | |
| 120 | −The vga_count is usually need to keep informed how many cards are being | |
| 121 | −arbitrated, so for instance if there's only one then it can totally escape the | |
| 122 | −scheme. | |
| 119 | +The vga_count is used to track how many cards are being arbitrated, so for | |
| 120 | +instance, if there is only one card, then it can completely escape arbitration. | |
| 123 | 121 | |
| 124 | 122 | |
| 125 | 123 | These functions below acquire VGA resources for the given card and mark those |
| @@ -54,7 +54,7 @@ · 53 unmodified lines | ||
| 54 | 54 | 53 -> Pinnacle Hybrid Pro (em2881) |
| 55 | 55 | 54 -> Kworld VS-DVB-T 323UR (em2882) [eb1a:e323] |
| 56 | 56 | 55 -> Terratec Cinnergy Hybrid T USB XS (em2882) (em2882) [0ccd:005e,0ccd:0042] |
| 57 | − 56 -> Pinnacle Hybrid Pro (2) (em2882) [2304:0226] | |
| 57 | + 56 -> Pinnacle Hybrid Pro (330e) (em2882) [2304:0226] | |
| 58 | 58 | 57 -> Kworld PlusTV HD Hybrid 330 (em2883) [eb1a:a316] |
| 59 | 59 | 58 -> Compro VideoMate ForYou/Stereo (em2820/em2840) [185b:2041] |
| 60 | 60 | 60 -> Hauppauge WinTV HVR 850 (em2883) [2040:651f] |
| @@ -172,7 +172,7 @@ Source file list / functional overview: · 171 unmodified lines | ||
| 172 | 172 | to provide a streaming API usable by a read() system call style of |
| 173 | 173 | I/O. Right now this is the only layer on top of pvrusb2-io.[ch], |
| 174 | 174 | however the underlying architecture here was intended to allow for |
| 175 | − other styles of I/O to be implemented with additonal modules, like | |
| 175 | + other styles of I/O to be implemented with additional modules, like | |
| 176 | 176 | mmap()'ed buffers or something even more exotic. |
| 177 | 177 | |
| 178 | 178 | pvrusb2-main.c - This is the top level of the driver. Module level |
| @@ -130,7 +130,6 @@ Card number: 4 · 129 unmodified lines | ||
| 130 | 130 | |
| 131 | 131 | Note: No module for the mse3000 is available yet |
| 132 | 132 | Note: No module for the vpx3224 is available yet |
| 133 | −Note: use encoder=X or decoder=X for non-default i2c chips | |
| 134 | 133 | |
| 135 | 134 | =========================== |
| 136 | 135 | |
| @@ -1,5 +1,5 @@ | ||
| 1 | 1 | |
| 2 | −Note: "modinfo <module>" prints various informations about a kernel | |
| 2 | +Note: "modinfo <module>" prints various information about a kernel | |
| 3 | 3 | module, among them a complete and up-to-date list of insmod options. |
| 4 | 4 | This list tends to be outdated because it is updated manually ... |
| 5 | 5 | |
| @@ -70,7 +70,7 @@ If you have trouble with some specific TV card, try to ask there · 69 unmodified lines | ||
| 70 | 70 | instead of mailing me directly. The chance that someone with the |
| 71 | 71 | same card listens there is much higher... |
| 72 | 72 | |
| 73 | −For problems with sound: There are alot of different systems used | |
| 73 | +For problems with sound: There are a lot of different systems used | |
| 74 | 74 | for TV sound all over the world. And there are also different chips |
| 75 | 75 | which decode the audio signal. Reports about sound problems ("stereo |
| 76 | 76 | does'nt work") are pretty useless unless you include some details |
| @@ -33,7 +33,7 @@ state is stuck. · 32 unmodified lines | ||
| 33 | 33 | |
| 34 | 34 | I've seen reports that bttv 0.7.x crashes whereas 0.8.x works rock solid |
| 35 | 35 | for some people. Thus probably a small buglet left somewhere in bttv |
| 36 | −0.7.x. I have no idea where exactly, it works stable for me and alot of | |
| 36 | +0.7.x. I have no idea where exactly, it works stable for me and a lot of | |
| 37 | 37 | other people. But in case you have problems with the 0.7.x versions you |
| 38 | 38 | can give 0.8.x a try ... |
| 39 | 39 | |
| @@ -2,13 +2,13 @@ · 1 unmodified line | ||
| 2 | 2 | bttv and sound mini howto |
| 3 | 3 | ========================= |
| 4 | 4 | |
| 5 | −There are alot of different bt848/849/878/879 based boards available. | |
| 5 | +There are a lot of different bt848/849/878/879 based boards available. | |
| 6 | 6 | Making video work often is not a big deal, because this is handled |
| 7 | 7 | completely by the bt8xx chip, which is common on all boards. But |
| 8 | 8 | sound is handled in slightly different ways on each board. |
| 9 | 9 | |
| 10 | 10 | To handle the grabber boards correctly, there is a array tvcards[] in |
| 11 | −bttv-cards.c, which holds the informations required for each board. | |
| 11 | +bttv-cards.c, which holds the information required for each board. | |
| 12 | 12 | Sound will work only, if the correct entry is used (for video it often |
| 13 | 13 | makes no difference). The bttv driver prints a line to the kernel |
| 14 | 14 | log, telling which card type is used. Like this one: |
| @@ -191,10 +191,10 @@ Syntax: <n> · 190 unmodified lines | ||
| 191 | 191 | Description: Debugging information level, from 0 to 3: |
| 192 | 192 | 0 = none (use carefully) |
| 193 | 193 | 1 = critical errors |
| 194 | − 2 = significant informations | |
| 194 | + 2 = significant information | |
| 195 | 195 | 3 = more verbose messages |
| 196 | 196 | Level 3 is useful for testing only, when only one device |
| 197 | − is used at the same time. It also shows some more informations | |
| 197 | + is used at the same time. It also shows some more information | |
| 198 | 198 | about the hardware being detected. This module parameter can be |
| 199 | 199 | changed at runtime thanks to the /sys filesystem interface. |
| 200 | 200 | Default: 2 |
| @@ -275,6 +275,7 @@ pac7302 093a:2629 Genious iSlim 300 · 274 unmodified lines | ||
| 275 | 275 | pac7302 093a:262a Webcam 300k |
| 276 | 276 | pac7302 093a:262c Philips SPC 230 NC |
| 277 | 277 | jeilinj 0979:0280 Sakar 57379 |
| 278 | +jeilinj 0979:0280 Sportscam DV15 | |
| 278 | 279 | zc3xx 0ac8:0302 Z-star Vimicro zc0302 |
| 279 | 280 | vc032x 0ac8:0321 Vimicro generic vc0321 |
| 280 | 281 | vc032x 0ac8:0323 Vimicro Vc0323 |
| @@ -84,12 +84,12 @@ DMA usage · 83 unmodified lines | ||
| 84 | 84 | transfer is not started. On "End Of Frame" interrupt, the irq handler |
| 85 | 85 | starts the DMA chain. |
| 86 | 86 | - capture of one videobuffer |
| 87 | − The DMA chain starts transfering data into videobuffer RAM pages. | |
| 88 | − When all pages are transfered, the DMA irq is raised on "ENDINTR" status | |
| 87 | + The DMA chain starts transferring data into videobuffer RAM pages. | |
| 88 | + When all pages are transferred, the DMA irq is raised on "ENDINTR" status | |
| 89 | 89 | - finishing one videobuffer |
| 90 | 90 | The DMA irq handler marks the videobuffer as "done", and removes it from |
| 91 | 91 | the active running queue |
| 92 | − Meanwhile, the next videobuffer (if there is one), is transfered by DMA | |
| 92 | + Meanwhile, the next videobuffer (if there is one), is transferred by DMA | |
| 93 | 93 | - finishing the last videobuffer |
| 94 | 94 | On the DMA irq of the last videobuffer, the QCI is stopped. |
| 95 | 95 | |
| @@ -101,7 +101,7 @@ DMA usage · 5 unmodified lines | ||
| 101 | 101 | |
| 102 | 102 | This structure is pointed by dma->sg_cpu. |
| 103 | 103 | The descriptors are used as follows : |
| 104 | − - desc-sg[i]: i-th descriptor, transfering the i-th sg | |
| 104 | + - desc-sg[i]: i-th descriptor, transferring the i-th sg | |
| 105 | 105 | element to the video buffer scatter gather |
| 106 | 106 | - finisher: has ddadr=DADDR_STOP, dcmd=ENDIRQEN |
| 107 | 107 | - linker: has ddadr= desc-sg[0] of next video buffer, dcmd=0 |
| @@ -37,7 +37,7 @@ Generic scaling / cropping scheme · 36 unmodified lines | ||
| 37 | 37 | -1'- |
| 38 | 38 | |
| 39 | 39 | In the above chart minuses and slashes represent "real" data amounts, points and |
| 40 | −accents represent "useful" data, basically, CEU scaled amd cropped output, | |
| 40 | +accents represent "useful" data, basically, CEU scaled and cropped output, | |
| 41 | 41 | mapped back onto the client's source plane. |
| 42 | 42 | |
| 43 | 43 | Such a configuration can be produced by user requests: |
| @@ -65,7 +65,7 @@ Do not touch input rectangle - it is already optimal. · 21 unmodified lines | ||
| 65 | 65 | |
| 66 | 66 | 1. Calculate current sensor scales: |
| 67 | 67 | |
| 68 | − scale_s = ((3') - (3)) / ((2') - (2)) | |
| 68 | + scale_s = ((2') - (2)) / ((3') - (3)) | |
| 69 | 69 | |
| 70 | 70 | 2. Calculate "effective" input crop (sensor subwindow) - CEU crop scaled back at |
| 71 | 71 | current sensor scales onto input window - this is user S_CROP: |
| @@ -80,7 +80,7 @@ window: · 8 unmodified lines | ||
| 80 | 80 | 4. Calculate sensor output window by applying combined scales to real input |
| 81 | 81 | window: |
| 82 | 82 | |
| 83 | − width_s_out = ((2') - (2)) / scale_comb | |
| 83 | + width_s_out = ((7') - (7)) = ((2') - (2)) / scale_comb | |
| 84 | 84 | |
| 85 | 85 | 5. Apply iterative sensor S_FMT for sensor output window. |
| 86 | 86 | |
| @@ -214,10 +214,10 @@ Syntax: <n> · 213 unmodified lines | ||
| 214 | 214 | Description: Debugging information level, from 0 to 3: |
| 215 | 215 | 0 = none (use carefully) |
| 216 | 216 | 1 = critical errors |
| 217 | − 2 = significant informations | |
| 217 | + 2 = significant information | |
| 218 | 218 | 3 = more verbose messages |
| 219 | 219 | Level 3 is useful for testing only. It also shows some more |
| 220 | − informations about the hardware being detected. | |
| 220 | + information about the hardware being detected. | |
| 221 | 221 | This parameter can be changed at runtime thanks to the /sys |
| 222 | 222 | filesystem interface. |
| 223 | 223 | Default: 2 |
| @@ -0,0 +1,239 @@ | ||
| 1 | +Linux USB Video Class (UVC) driver | |
| 2 | +================================== | |
| 3 | + | |
| 4 | +This file documents some driver-specific aspects of the UVC driver, such as | |
| 5 | +driver-specific ioctls and implementation notes. | |
| 6 | + | |
| 7 | +Questions and remarks can be sent to the Linux UVC development mailing list at | |
| 8 | +linux-uvc-devel@lists.berlios.de. | |
| 9 | + | |
| 10 | + | |
| 11 | +Extension Unit (XU) support | |
| 12 | +--------------------------- | |
| 13 | + | |
| 14 | +1. Introduction | |
| 15 | + | |
| 16 | +The UVC specification allows for vendor-specific extensions through extension | |
| 17 | +units (XUs). The Linux UVC driver supports extension unit controls (XU controls) | |
| 18 | +through two separate mechanisms: | |
| 19 | + | |
| 20 | + - through mappings of XU controls to V4L2 controls | |
| 21 | + - through a driver-specific ioctl interface | |
| 22 | + | |
| 23 | +The first one allows generic V4L2 applications to use XU controls by mapping | |
| 24 | +certain XU controls onto V4L2 controls, which then show up during ordinary | |
| 25 | +control enumeration. | |
| 26 | + | |
| 27 | +The second mechanism requires uvcvideo-specific knowledge for the application to | |
| 28 | +access XU controls but exposes the entire UVC XU concept to user space for | |
| 29 | +maximum flexibility. | |
| 30 | + | |
| 31 | +Both mechanisms complement each other and are described in more detail below. | |
| 32 | + | |
| 33 | + | |
| 34 | +2. Control mappings | |
| 35 | + | |
| 36 | +The UVC driver provides an API for user space applications to define so-called | |
| 37 | +control mappings at runtime. These allow for individual XU controls or byte | |
| 38 | +ranges thereof to be mapped to new V4L2 controls. Such controls appear and | |
| 39 | +function exactly like normal V4L2 controls (i.e. the stock controls, such as | |
| 40 | +brightness, contrast, etc.). However, reading or writing of such a V4L2 controls | |
| 41 | +triggers a read or write of the associated XU control. | |
| 42 | + | |
| 43 | +The ioctl used to create these control mappings is called UVCIOC_CTRL_MAP. | |
| 44 | +Previous driver versions (before 0.2.0) required another ioctl to be used | |
| 45 | +beforehand (UVCIOC_CTRL_ADD) to pass XU control information to the UVC driver. | |
| 46 | +This is no longer necessary as newer uvcvideo versions query the information | |
| 47 | +directly from the device. | |
| 48 | + | |
| 49 | +For details on the UVCIOC_CTRL_MAP ioctl please refer to the section titled | |
| 50 | +"IOCTL reference" below. | |
| 51 | + | |
| 52 | + | |
| 53 | +3. Driver specific XU control interface | |
| 54 | + | |
| 55 | +For applications that need to access XU controls directly, e.g. for testing | |
| 56 | +purposes, firmware upload, or accessing binary controls, a second mechanism to | |
| 57 | +access XU controls is provided in the form of a driver-specific ioctl, namely | |
| 58 | +UVCIOC_CTRL_QUERY. | |
| 59 | + | |
| 60 | +A call to this ioctl allows applications to send queries to the UVC driver that | |
| 61 | +directly map to the low-level UVC control requests. | |
| 62 | + | |
| 63 | +In order to make such a request the UVC unit ID of the control's extension unit | |
| 64 | +and the control selector need to be known. This information either needs to be | |
| 65 | +hardcoded in the application or queried using other ways such as by parsing the | |
| 66 | +UVC descriptor or, if available, using the media controller API to enumerate a | |
| 67 | +device's entities. | |
| 68 | + | |
| 69 | +Unless the control size is already known it is necessary to first make a | |
| 70 | +UVC_GET_LEN requests in order to be able to allocate a sufficiently large buffer | |
| 71 | +and set the buffer size to the correct value. Similarly, to find out whether | |
| 72 | +UVC_GET_CUR or UVC_SET_CUR are valid requests for a given control, a | |
| 73 | +UVC_GET_INFO request should be made. The bits 0 (GET supported) and 1 (SET | |
| 74 | +supported) of the resulting byte indicate which requests are valid. | |
| 75 | + | |
| 76 | +With the addition of the UVCIOC_CTRL_QUERY ioctl the UVCIOC_CTRL_GET and | |
| 77 | +UVCIOC_CTRL_SET ioctls have become obsolete since their functionality is a | |
| 78 | +subset of the former ioctl. For the time being they are still supported but | |
| 79 | +application developers are encouraged to use UVCIOC_CTRL_QUERY instead. | |
| 80 | + | |
| 81 | +For details on the UVCIOC_CTRL_QUERY ioctl please refer to the section titled | |
| 82 | +"IOCTL reference" below. | |
| 83 | + | |
| 84 | + | |
| 85 | +4. Security | |
| 86 | + | |
| 87 | +The API doesn't currently provide a fine-grained access control facility. The | |
| 88 | +UVCIOC_CTRL_ADD and UVCIOC_CTRL_MAP ioctls require super user permissions. | |
| 89 | + | |
| 90 | +Suggestions on how to improve this are welcome. | |
| 91 | + | |
| 92 | + | |
| 93 | +5. Debugging | |
| 94 | + | |
| 95 | +In order to debug problems related to XU controls or controls in general it is | |
| 96 | +recommended to enable the UVC_TRACE_CONTROL bit in the module parameter 'trace'. | |
| 97 | +This causes extra output to be written into the system log. | |
| 98 | + | |
| 99 | + | |
| 100 | +6. IOCTL reference | |
| 101 | + | |
| 102 | +---- UVCIOC_CTRL_MAP - Map a UVC control to a V4L2 control ---- | |
| 103 | + | |
| 104 | +Argument: struct uvc_xu_control_mapping | |
| 105 | + | |
| 106 | +Description: | |
| 107 | + This ioctl creates a mapping between a UVC control or part of a UVC | |
| 108 | + control and a V4L2 control. Once mappings are defined, userspace | |
| 109 | + applications can access vendor-defined UVC control through the V4L2 | |
| 110 | + control API. | |
| 111 | + | |
| 112 | + To create a mapping, applications fill the uvc_xu_control_mapping | |
| 113 | + structure with information about an existing UVC control defined with | |
| 114 | + UVCIOC_CTRL_ADD and a new V4L2 control. | |
| 115 | + | |
| 116 | + A UVC control can be mapped to several V4L2 controls. For instance, | |
| 117 | + a UVC pan/tilt control could be mapped to separate pan and tilt V4L2 | |
| 118 | + controls. The UVC control is divided into non overlapping fields using | |
| 119 | + the 'size' and 'offset' fields and are then independantly mapped to | |
| 120 | + V4L2 control. | |
| 121 | + | |
| 122 | + For signed integer V4L2 controls the data_type field should be set to | |
| 123 | + UVC_CTRL_DATA_TYPE_SIGNED. Other values are currently ignored. | |
| 124 | + | |
| 125 | +Return value: | |
| 126 | + On success 0 is returned. On error -1 is returned and errno is set | |
| 127 | + appropriately. | |
| 128 | + | |
| 129 | + ENOMEM | |
| 130 | + Not enough memory to perform the operation. | |
| 131 | + EPERM | |
| 132 | + Insufficient privileges (super user privileges are required). | |
| 133 | + EINVAL | |
| 134 | + No such UVC control. | |
| 135 | + EOVERFLOW | |
| 136 | + The requested offset and size would overflow the UVC control. | |
| 137 | + EEXIST | |
| 138 | + Mapping already exists. | |
| 139 | + | |
| 140 | +Data types: | |
| 141 | + * struct uvc_xu_control_mapping | |
| 142 | + | |
| 143 | + __u32 id V4L2 control identifier | |
| 144 | + __u8 name[32] V4L2 control name | |
| 145 | + __u8 entity[16] UVC extension unit GUID | |
| 146 | + __u8 selector UVC control selector | |
| 147 | + __u8 size V4L2 control size (in bits) | |
| 148 | + __u8 offset V4L2 control offset (in bits) | |
| 149 | + enum v4l2_ctrl_type | |
| 150 | + v4l2_type V4L2 control type | |
| 151 | + enum uvc_control_data_type | |
| 152 | + data_type UVC control data type | |
| 153 | + struct uvc_menu_info | |
| 154 | + *menu_info Array of menu entries (for menu controls only) | |
| 155 | + __u32 menu_count Number of menu entries (for menu controls only) | |
| 156 | + | |
| 157 | + * struct uvc_menu_info | |
| 158 | + | |
| 159 | + __u32 value Menu entry value used by the device | |
| 160 | + __u8 name[32] Menu entry name | |
| 161 | + | |
| 162 | + | |
| 163 | + * enum uvc_control_data_type | |
| 164 | + | |
| 165 | + UVC_CTRL_DATA_TYPE_RAW Raw control (byte array) | |
| 166 | + UVC_CTRL_DATA_TYPE_SIGNED Signed integer | |
| 167 | + UVC_CTRL_DATA_TYPE_UNSIGNED Unsigned integer | |
| 168 | + UVC_CTRL_DATA_TYPE_BOOLEAN Boolean | |
| 169 | + UVC_CTRL_DATA_TYPE_ENUM Enumeration | |
| 170 | + UVC_CTRL_DATA_TYPE_BITMASK Bitmask | |
| 171 | + | |
| 172 | + | |
| 173 | +---- UVCIOC_CTRL_QUERY - Query a UVC XU control ---- | |
| 174 | + | |
| 175 | +Argument: struct uvc_xu_control_query | |
| 176 | + | |
| 177 | +Description: | |
| 178 | + This ioctl queries a UVC XU control identified by its extension unit ID | |
| 179 | + and control selector. | |
| 180 | + | |
| 181 | + There are a number of different queries available that closely | |
| 182 | + correspond to the low-level control requests described in the UVC | |
| 183 | + specification. These requests are: | |
| 184 | + | |
| 185 | + UVC_GET_CUR | |
| 186 | + Obtain the current value of the control. | |
| 187 | + UVC_GET_MIN | |
| 188 | + Obtain the minimum value of the control. | |
| 189 | + UVC_GET_MAX | |
| 190 | + Obtain the maximum value of the control. | |
| 191 | + UVC_GET_DEF | |
| 192 | + Obtain the default value of the control. | |
| 193 | + UVC_GET_RES | |
| 194 | + Query the resolution of the control, i.e. the step size of the | |
| 195 | + allowed control values. | |
| 196 | + UVC_GET_LEN | |
| 197 | + Query the size of the control in bytes. | |
| 198 | + UVC_GET_INFO | |
| 199 | + Query the control information bitmap, which indicates whether | |
| 200 | + get/set requests are supported. | |
| 201 | + UVC_SET_CUR | |
| 202 | + Update the value of the control. | |
| 203 | + | |
| 204 | + Applications must set the 'size' field to the correct length for the | |
| 205 | + control. Exceptions are the UVC_GET_LEN and UVC_GET_INFO queries, for | |
| 206 | + which the size must be set to 2 and 1, respectively. The 'data' field | |
| 207 | + must point to a valid writable buffer big enough to hold the indicated | |
| 208 | + number of data bytes. | |
| 209 | + | |
| 210 | + Data is copied directly from the device without any driver-side | |
| 211 | + processing. Applications are responsible for data buffer formatting, | |
| 212 | + including little-endian/big-endian conversion. This is particularly | |
| 213 | + important for the result of the UVC_GET_LEN requests, which is always | |
| 214 | + returned as a little-endian 16-bit integer by the device. | |
| 215 | + | |
| 216 | +Return value: | |
| 217 | + On success 0 is returned. On error -1 is returned and errno is set | |
| 218 | + appropriately. | |
| 219 | + | |
| 220 | + ENOENT | |
| 221 | + The device does not support the given control or the specified | |
| 222 | + extension unit could not be found. | |
| 223 | + ENOBUFS | |
| 224 | + The specified buffer size is incorrect (too big or too small). | |
| 225 | + EINVAL | |
| 226 | + An invalid request code was passed. | |
| 227 | + EBADRQC | |
| 228 | + The given request is not supported by the given control. | |
| 229 | + EFAULT | |
| 230 | + The data pointer references an inaccessible memory area. | |
| 231 | + | |
| 232 | +Data types: | |
| 233 | + * struct uvc_xu_control_query | |
| 234 | + | |
| 235 | + __u8 unit Extension unit ID | |
| 236 | + __u8 selector Control selector | |
| 237 | + __u8 query Request code to send to the device | |
| 238 | + __u16 size Control data size (in bytes) | |
| 239 | + __u8 *data Control value | |
| @@ -343,7 +343,7 @@ ignored. If you want to check for errors use this: · 342 unmodified lines | ||
| 343 | 343 | err = v4l2_device_call_until_err(v4l2_dev, 0, core, g_chip_ident, &chip); |
| 344 | 344 | |
| 345 | 345 | Any error except -ENOIOCTLCMD will exit the loop with that error. If no |
| 346 | −errors (except -ENOIOCTLCMD) occured, then 0 is returned. | |
| 346 | +errors (except -ENOIOCTLCMD) occurred, then 0 is returned. | |
| 347 | 347 | |
| 348 | 348 | The second argument to both calls is a group ID. If 0, then all subdevs are |
| 349 | 349 | called. If non-zero, then only those whose group ID match that value will |
| @@ -413,7 +413,7 @@ Syntax: <n> · 412 unmodified lines | ||
| 413 | 413 | Description: Debugging information level, from 0 to 6: |
| 414 | 414 | 0 = none (use carefully) |
| 415 | 415 | 1 = critical errors |
| 416 | − 2 = significant informations | |
| 416 | + 2 = significant information | |
| 417 | 417 | 3 = configuration or general messages |
| 418 | 418 | 4 = warnings |
| 419 | 419 | 5 = called functions |
| @@ -181,10 +181,10 @@ Syntax: <n> · 180 unmodified lines | ||
| 181 | 181 | Description: Debugging information level, from 0 to 3: |
| 182 | 182 | 0 = none (use carefully) |
| 183 | 183 | 1 = critical errors |
| 184 | − 2 = significant informations | |
| 184 | + 2 = significant information | |
| 185 | 185 | 3 = more verbose messages |
| 186 | 186 | Level 3 is useful for testing only, when only one device |
| 187 | − is used at the same time. It also shows some more informations | |
| 187 | + is used at the same time. It also shows some information | |
| 188 | 188 | about the hardware being detected. This module parameter can be |
| 189 | 189 | changed at runtime thanks to the /sys filesystem interface. |
| 190 | 190 | Default: 2 |
| @@ -261,7 +261,7 @@ the fingerprint is: '88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4'. · 70 unmodified lines | ||
| 261 | 261 | |
| 262 | 262 | 11. Credits |
| 263 | 263 | =========== |
| 264 | −- Informations about the chip internals needed to enable the I2C protocol have | |
| 264 | +- Information about the chip internals needed to enable the I2C protocol have | |
| 265 | 265 | been taken from the documentation of the ZC030x Video4Linux1 driver written |
| 266 | 266 | by Andrew Birkett <andy@nobugs.org>; |
| 267 | 267 | - The initialization values of the ZC0301 controller connected to the PAS202BCB |
| @@ -0,0 +1,10 @@ | ||
| 1 | +Virtualization support in the Linux kernel. | |
| 2 | + | |
| 3 | +00-INDEX | |
| 4 | + - this file. | |
| 5 | +kvm/ | |
| 6 | + - Kernel Virtual Machine. See also http://linux-kvm.org | |
| 7 | +lguest/ | |
| 8 | + - Extremely simple hypervisor for experimental/educational use. | |
| 9 | +uml/ | |
| 10 | + - User Mode Linux, builds/runs Linux kernel as a userspace program. | |
| @@ -175,7 +175,10 @@ Parameters: vcpu id (apic id on x86) · 174 unmodified lines | ||
| 175 | 175 | Returns: vcpu fd on success, -1 on error |
| 176 | 176 | |
| 177 | 177 | This API adds a vcpu to a virtual machine. The vcpu id is a small integer |
| 178 | −in the range [0, max_vcpus). | |
| 178 | +in the range [0, max_vcpus). You can use KVM_CAP_NR_VCPUS of the | |
| 179 | +KVM_CHECK_EXTENSION ioctl() to determine the value for max_vcpus at run-time. | |
| 180 | +If the KVM_CAP_NR_VCPUS does not exist, you should assume that max_vcpus is 4 | |
| 181 | +cpus max. | |
| 179 | 182 | |
| 180 | 183 | 4.8 KVM_GET_DIRTY_LOG (vm ioctl) |
| 181 | 184 | |
| @@ -261,7 +264,7 @@ See KVM_GET_REGS for the data structure. · 79 unmodified lines | ||
| 261 | 264 | 4.13 KVM_GET_SREGS |
| 262 | 265 | |
| 263 | 266 | Capability: basic |
| 264 | −Architectures: x86 | |
| 267 | +Architectures: x86, ppc | |
| 265 | 268 | Type: vcpu ioctl |
| 266 | 269 | Parameters: struct kvm_sregs (out) |
| 267 | 270 | Returns: 0 on success, -1 on error |
| @@ -279,6 +282,8 @@ struct kvm_sregs { · 11 unmodified lines | ||
| 279 | 282 | __u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64]; |
| 280 | 283 | }; |
| 281 | 284 | |
| 285 | +/* ppc -- see arch/powerpc/include/asm/kvm.h */ | |
| 286 | + | |
| 282 | 287 | interrupt_bitmap is a bitmap of pending external interrupts. At most |
| 283 | 288 | one bit may be set. This interrupt has been acknowledged by the APIC |
| 284 | 289 | but not yet injected into the cpu core. |
| @@ -286,7 +291,7 @@ but not yet injected into the cpu core. · 1 unmodified line | ||
| 286 | 291 | 4.14 KVM_SET_SREGS |
| 287 | 292 | |
| 288 | 293 | Capability: basic |
| 289 | −Architectures: x86 | |
| 294 | +Architectures: x86, ppc | |
| 290 | 295 | Type: vcpu ioctl |
| 291 | 296 | Parameters: struct kvm_sregs (in) |
| 292 | 297 | Returns: 0 on success, -1 on error |
| @@ -1263,6 +1268,29 @@ struct kvm_assigned_msix_entry { · 970 unmodified lines | ||
| 1263 | 1268 | __u16 padding[3]; |
| 1264 | 1269 | }; |
| 1265 | 1270 | |
| 1271 | +4.54 KVM_SET_TSC_KHZ | |
| 1272 | + | |
| 1273 | +Capability: KVM_CAP_TSC_CONTROL | |
| 1274 | +Architectures: x86 | |
| 1275 | +Type: vcpu ioctl | |
| 1276 | +Parameters: virtual tsc_khz | |
| 1277 | +Returns: 0 on success, -1 on error | |
| 1278 | + | |
| 1279 | +Specifies the tsc frequency for the virtual machine. The unit of the | |
| 1280 | +frequency is KHz. | |
| 1281 | + | |
| 1282 | +4.55 KVM_GET_TSC_KHZ | |
| 1283 | + | |
| 1284 | +Capability: KVM_CAP_GET_TSC_KHZ | |
| 1285 | +Architectures: x86 | |
| 1286 | +Type: vcpu ioctl | |
| 1287 | +Parameters: none | |
| 1288 | +Returns: virtual tsc-khz on success, negative value on error | |
| 1289 | + | |
| 1290 | +Returns the tsc frequency of the guest. The unit of the return value is | |
| 1291 | +KHz. If the host has unstable tsc this ioctl returns -EIO instead as an | |
| 1292 | +error. | |
| 1293 | + | |
| 1266 | 1294 | 5. The kvm_run structure |
| 1267 | 1295 | |
| 1268 | 1296 | Application code obtains a pointer to the kvm_run structure by |
File renamed without changes.
File renamed without changes.
| @@ -23,7 +23,7 @@ The mmu code attempts to satisfy the following requirements: · 22 unmodified lines | ||
| 23 | 23 | and framebuffer-based displays |
| 24 | 24 | - footprint: keep the amount of pinned kernel memory low (most memory |
| 25 | 25 | should be shrinkable) |
| 26 | −- reliablity: avoid multipage or GFP_ATOMIC allocations | |
| 26 | +- reliability: avoid multipage or GFP_ATOMIC allocations | |
| 27 | 27 | |
| 28 | 28 | Acronyms |
| 29 | 29 | ======== |
File renamed without changes.
| @@ -136,7 +136,7 @@ Patched instructions · 135 unmodified lines | ||
| 136 | 136 | ==================== |
| 137 | 137 | |
| 138 | 138 | The "ld" and "std" instructions are transormed to "lwz" and "stw" instructions |
| 139 | −respectively on 32 bit systems with an added offset of 4 to accomodate for big | |
| 139 | +respectively on 32 bit systems with an added offset of 4 to accommodate for big | |
| 140 | 140 | endianness. |
| 141 | 141 | |
| 142 | 142 | The following is a list of mapping the Linux kernel performs when running as |
| @@ -7,7 +7,7 @@ Review checklist for kvm patches · 6 unmodified lines | ||
| 7 | 7 | 2. Patches should be against kvm.git master branch. |
| 8 | 8 | |
| 9 | 9 | 3. If the patch introduces or modifies a new userspace API: |
| 10 | − - the API must be documented in Documentation/kvm/api.txt | |
| 10 | + - the API must be documented in Documentation/virtual/kvm/api.txt | |
| 11 | 11 | - the API must be discoverable using KVM_CHECK_EXTENSION |
| 12 | 12 | |
| 13 | 13 | 4. New state must include support for save/restore. |
| @@ -81,7 +81,7 @@ Mode 0: Single Timeout. This is a one-shot software timeout that counts down · 80 unmodified lines | ||
| 81 | 81 | when the gate is high (always true for timers 0 and 1). When the count |
| 82 | 82 | reaches zero, the output goes high. |
| 83 | 83 | |
| 84 | −Mode 1: Triggered One-shot. The output is intially set high. When the gate | |
| 84 | +Mode 1: Triggered One-shot. The output is initially set high. When the gate | |
| 85 | 85 | line is set high, a countdown is initiated (which does not stop if the gate is |
| 86 | 86 | lowered), during which the output is set low. When the count reaches zero, |
| 87 | 87 | the output goes high. |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
| @@ -74,7 +74,8 @@ Running Lguest: · 73 unmodified lines | ||
| 74 | 74 | |
| 75 | 75 | - Run an lguest as root: |
| 76 | 76 | |
| 77 | − Documentation/lguest/lguest 64 vmlinux --tunnet=192.168.19.1 --block=rootfile root=/dev/vda | |
| 77 | + Documentation/virtual/lguest/lguest 64 vmlinux --tunnet=192.168.19.1 \ | |
| 78 | + --block=rootfile root=/dev/vda | |
| 78 | 79 | |
| 79 | 80 | Explanation: |
| 80 | 81 | 64: the amount of memory to use, in MB. |
| @@ -1182,6 +1182,16 @@ · 1181 unmodified lines | ||
| 1182 | 1182 | forge.net/> and explains these in detail, as well as |
| 1183 | 1183 | some other issues. |
| 1184 | 1184 | |
| 1185 | + There is also a related point-to-point only "ucast" transport. | |
| 1186 | + This is useful when your network does not support multicast, and | |
| 1187 | + all network connections are simple point to point links. | |
| 1188 | + | |
| 1189 | + The full set of command line options for this transport are | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + ethn=ucast,ethernet address,remote address,listen port,remote port | |
| 1193 | + | |
| 1194 | + | |
| 1185 | 1195 | |
| 1186 | 1196 | |
| 1187 | 1197 | 66..66.. TTUUNN//TTAAPP wwiitthh tthhee uummll__nneett hheellppeerr |
| @@ -74,7 +74,7 @@ we have a user context", and is generally done by the page fault handler · 73 unmodified lines | ||
| 74 | 74 | and things like that). |
| 75 | 75 | |
| 76 | 76 | Anyway, I put a pre-patch-2.3.13-1 on ftp.kernel.org just a moment ago, |
| 77 | −because it slightly changes the interfaces to accomodate the alpha (who | |
| 77 | +because it slightly changes the interfaces to accommodate the alpha (who | |
| 78 | 78 | would have thought it, but the alpha actually ends up having one of the |
| 79 | 79 | ugliest context switch codes - unlike the other architectures where the MM |
| 80 | 80 | and register state is separate, the alpha PALcode joins the two, and you |
| @@ -0,0 +1,278 @@ | ||
| 1 | +MOTIVATION | |
| 2 | + | |
| 3 | +Cleancache is a new optional feature provided by the VFS layer that | |
| 4 | +potentially dramatically increases page cache effectiveness for | |
| 5 | +many workloads in many environments at a negligible cost. | |
| 6 | + | |
| 7 | +Cleancache can be thought of as a page-granularity victim cache for clean | |
| 8 | +pages that the kernel's pageframe replacement algorithm (PFRA) would like | |
| 9 | +to keep around, but can't since there isn't enough memory. So when the | |
| 10 | +PFRA "evicts" a page, it first attempts to use cleancache code to | |
| 11 | +put the data contained in that page into "transcendent memory", memory | |
| 12 | +that is not directly accessible or addressable by the kernel and is | |
| 13 | +of unknown and possibly time-varying size. | |
| 14 | + | |
| 15 | +Later, when a cleancache-enabled filesystem wishes to access a page | |
| 16 | +in a file on disk, it first checks cleancache to see if it already | |
| 17 | +contains it; if it does, the page of data is copied into the kernel | |
| 18 | +and a disk access is avoided. | |
| 19 | + | |
| 20 | +Transcendent memory "drivers" for cleancache are currently implemented | |
| 21 | +in Xen (using hypervisor memory) and zcache (using in-kernel compressed | |
| 22 | +memory) and other implementations are in development. | |
| 23 | + | |
| 24 | +FAQs are included below. | |
| 25 | + | |
| 26 | +IMPLEMENTATION OVERVIEW | |
| 27 | + | |
| 28 | +A cleancache "backend" that provides transcendent memory registers itself | |
| 29 | +to the kernel's cleancache "frontend" by calling cleancache_register_ops, | |
| 30 | +passing a pointer to a cleancache_ops structure with funcs set appropriately. | |
| 31 | +Note that cleancache_register_ops returns the previous settings so that | |
| 32 | +chaining can be performed if desired. The functions provided must conform to | |
| 33 | +certain semantics as follows: | |
| 34 | + | |
| 35 | +Most important, cleancache is "ephemeral". Pages which are copied into | |
| 36 | +cleancache have an indefinite lifetime which is completely unknowable | |
| 37 | +by the kernel and so may or may not still be in cleancache at any later time. | |
| 38 | +Thus, as its name implies, cleancache is not suitable for dirty pages. | |
| 39 | +Cleancache has complete discretion over what pages to preserve and what | |
| 40 | +pages to discard and when. | |
| 41 | + | |
| 42 | +Mounting a cleancache-enabled filesystem should call "init_fs" to obtain a | |
| 43 | +pool id which, if positive, must be saved in the filesystem's superblock; | |
| 44 | +a negative return value indicates failure. A "put_page" will copy a | |
| 45 | +(presumably about-to-be-evicted) page into cleancache and associate it with | |
| 46 | +the pool id, a file key, and a page index into the file. (The combination | |
| 47 | +of a pool id, a file key, and an index is sometimes called a "handle".) | |
| 48 | +A "get_page" will copy the page, if found, from cleancache into kernel memory. | |
| 49 | +A "flush_page" will ensure the page no longer is present in cleancache; | |
| 50 | +a "flush_inode" will flush all pages associated with the specified file; | |
| 51 | +and, when a filesystem is unmounted, a "flush_fs" will flush all pages in | |
| 52 | +all files specified by the given pool id and also surrender the pool id. | |
| 53 | + | |
| 54 | +An "init_shared_fs", like init_fs, obtains a pool id but tells cleancache | |
| 55 | +to treat the pool as shared using a 128-bit UUID as a key. On systems | |
| 56 | +that may run multiple kernels (such as hard partitioned or virtualized | |
| 57 | +systems) that may share a clustered filesystem, and where cleancache | |
| 58 | +may be shared among those kernels, calls to init_shared_fs that specify the | |
| 59 | +same UUID will receive the same pool id, thus allowing the pages to | |
| 60 | +be shared. Note that any security requirements must be imposed outside | |
| 61 | +of the kernel (e.g. by "tools" that control cleancache). Or a | |
| 62 | +cleancache implementation can simply disable shared_init by always | |
| 63 | +returning a negative value. | |
| 64 | + | |
| 65 | +If a get_page is successful on a non-shared pool, the page is flushed (thus | |
| 66 | +making cleancache an "exclusive" cache). On a shared pool, the page | |
| 67 | +is NOT flushed on a successful get_page so that it remains accessible to | |
| 68 | +other sharers. The kernel is responsible for ensuring coherency between | |
| 69 | +cleancache (shared or not), the page cache, and the filesystem, using | |
| 70 | +cleancache flush operations as required. | |
| 71 | + | |
| 72 | +Note that cleancache must enforce put-put-get coherency and get-get | |
| 73 | +coherency. For the former, if two puts are made to the same handle but | |
| 74 | +with different data, say AAA by the first put and BBB by the second, a | |
| 75 | +subsequent get can never return the stale data (AAA). For get-get coherency, | |
| 76 | +if a get for a given handle fails, subsequent gets for that handle will | |
| 77 | +never succeed unless preceded by a successful put with that handle. | |
| 78 | + | |
| 79 | +Last, cleancache provides no SMP serialization guarantees; if two | |
| 80 | +different Linux threads are simultaneously putting and flushing a page | |
| 81 | +with the same handle, the results are indeterminate. Callers must | |
| 82 | +lock the page to ensure serial behavior. | |
| 83 | + | |
| 84 | +CLEANCACHE PERFORMANCE METRICS | |
| 85 | + | |
| 86 | +Cleancache monitoring is done by sysfs files in the | |
| 87 | +/sys/kernel/mm/cleancache directory. The effectiveness of cleancache | |
| 88 | +can be measured (across all filesystems) with: | |
| 89 | + | |
| 90 | +succ_gets - number of gets that were successful | |
| 91 | +failed_gets - number of gets that failed | |
| 92 | +puts - number of puts attempted (all "succeed") | |
| 93 | +flushes - number of flushes attempted | |
| 94 | + | |
| 95 | +A backend implementatation may provide additional metrics. | |
| 96 | + | |
| 97 | +FAQ | |
| 98 | + | |
| 99 | +1) Where's the value? (Andrew Morton) | |
| 100 | + | |
| 101 | +Cleancache provides a significant performance benefit to many workloads | |
| 102 | +in many environments with negligible overhead by improving the | |
| 103 | +effectiveness of the pagecache. Clean pagecache pages are | |
| 104 | +saved in transcendent memory (RAM that is otherwise not directly | |
| 105 | +addressable to the kernel); fetching those pages later avoids "refaults" | |
| 106 | +and thus disk reads. | |
| 107 | + | |
| 108 | +Cleancache (and its sister code "frontswap") provide interfaces for | |
| 109 | +this transcendent memory (aka "tmem"), which conceptually lies between | |
| 110 | +fast kernel-directly-addressable RAM and slower DMA/asynchronous devices. | |
| 111 | +Disallowing direct kernel or userland reads/writes to tmem | |
| 112 | +is ideal when data is transformed to a different form and size (such | |
| 113 | +as with compression) or secretly moved (as might be useful for write- | |
| 114 | +balancing for some RAM-like devices). Evicted page-cache pages (and | |
| 115 | +swap pages) are a great use for this kind of slower-than-RAM-but-much- | |
| 116 | +faster-than-disk transcendent memory, and the cleancache (and frontswap) | |
| 117 | +"page-object-oriented" specification provides a nice way to read and | |
| 118 | +write -- and indirectly "name" -- the pages. | |
| 119 | + | |
| 120 | +In the virtual case, the whole point of virtualization is to statistically | |
| 121 | +multiplex physical resources across the varying demands of multiple | |
| 122 | +virtual machines. This is really hard to do with RAM and efforts to | |
| 123 | +do it well with no kernel change have essentially failed (except in some | |
| 124 | +well-publicized special-case workloads). Cleancache -- and frontswap -- | |
| 125 | +with a fairly small impact on the kernel, provide a huge amount | |
| 126 | +of flexibility for more dynamic, flexible RAM multiplexing. | |
| 127 | +Specifically, the Xen Transcendent Memory backend allows otherwise | |
| 128 | +"fallow" hypervisor-owned RAM to not only be "time-shared" between multiple | |
| 129 | +virtual machines, but the pages can be compressed and deduplicated to | |
| 130 | +optimize RAM utilization. And when guest OS's are induced to surrender | |
| 131 | +underutilized RAM (e.g. with "self-ballooning"), page cache pages | |
| 132 | +are the first to go, and cleancache allows those pages to be | |
| 133 | +saved and reclaimed if overall host system memory conditions allow. | |
| 134 | + | |
| 135 | +And the identical interface used for cleancache can be used in | |
| 136 | +physical systems as well. The zcache driver acts as a memory-hungry | |
| 137 | +device that stores pages of data in a compressed state. And | |
| 138 | +the proposed "RAMster" driver shares RAM across multiple physical | |
| 139 | +systems. | |
| 140 | + | |
| 141 | +2) Why does cleancache have its sticky fingers so deep inside the | |
| 142 | + filesystems and VFS? (Andrew Morton and Christoph Hellwig) | |
| 143 | + | |
| 144 | +The core hooks for cleancache in VFS are in most cases a single line | |
| 145 | +and the minimum set are placed precisely where needed to maintain | |
| 146 | +coherency (via cleancache_flush operations) between cleancache, | |
| 147 | +the page cache, and disk. All hooks compile into nothingness if | |
| 148 | +cleancache is config'ed off and turn into a function-pointer- | |
| 149 | +compare-to-NULL if config'ed on but no backend claims the ops | |
| 150 | +functions, or to a compare-struct-element-to-negative if a | |
| 151 | +backend claims the ops functions but a filesystem doesn't enable | |
| 152 | +cleancache. | |
| 153 | + | |
| 154 | +Some filesystems are built entirely on top of VFS and the hooks | |
| 155 | +in VFS are sufficient, so don't require an "init_fs" hook; the | |
| 156 | +initial implementation of cleancache didn't provide this hook. | |
| 157 | +But for some filesystems (such as btrfs), the VFS hooks are | |
| 158 | +incomplete and one or more hooks in fs-specific code are required. | |
| 159 | +And for some other filesystems, such as tmpfs, cleancache may | |
| 160 | +be counterproductive. So it seemed prudent to require a filesystem | |
| 161 | +to "opt in" to use cleancache, which requires adding a hook in | |
| 162 | +each filesystem. Not all filesystems are supported by cleancache | |
| 163 | +only because they haven't been tested. The existing set should | |
| 164 | +be sufficient to validate the concept, the opt-in approach means | |
| 165 | +that untested filesystems are not affected, and the hooks in the | |
| 166 | +existing filesystems should make it very easy to add more | |
| 167 | +filesystems in the future. | |
| 168 | + | |
| 169 | +The total impact of the hooks to existing fs and mm files is only | |
| 170 | +about 40 lines added (not counting comments and blank lines). | |
| 171 | + | |
| 172 | +3) Why not make cleancache asynchronous and batched so it can | |
| 173 | + more easily interface with real devices with DMA instead | |
| 174 | + of copying each individual page? (Minchan Kim) | |
| 175 | + | |
| 176 | +The one-page-at-a-time copy semantics simplifies the implementation | |
| 177 | +on both the frontend and backend and also allows the backend to | |
| 178 | +do fancy things on-the-fly like page compression and | |
| 179 | +page deduplication. And since the data is "gone" (copied into/out | |
| 180 | +of the pageframe) before the cleancache get/put call returns, | |
| 181 | +a great deal of race conditions and potential coherency issues | |
| 182 | +are avoided. While the interface seems odd for a "real device" | |
| 183 | +or for real kernel-addressable RAM, it makes perfect sense for | |
| 184 | +transcendent memory. | |
| 185 | + | |
| 186 | +4) Why is non-shared cleancache "exclusive"? And where is the | |
| 187 | + page "flushed" after a "get"? (Minchan Kim) | |
| 188 | + | |
| 189 | +The main reason is to free up space in transcendent memory and | |
| 190 | +to avoid unnecessary cleancache_flush calls. If you want inclusive, | |
| 191 | +the page can be "put" immediately following the "get". If | |
| 192 | +put-after-get for inclusive becomes common, the interface could | |
| 193 | +be easily extended to add a "get_no_flush" call. | |
| 194 | + | |
| 195 | +The flush is done by the cleancache backend implementation. | |
| 196 | + | |
| 197 | +5) What's the performance impact? | |
| 198 | + | |
| 199 | +Performance analysis has been presented at OLS'09 and LCA'10. | |
| 200 | +Briefly, performance gains can be significant on most workloads, | |
| 201 | +especially when memory pressure is high (e.g. when RAM is | |
| 202 | +overcommitted in a virtual workload); and because the hooks are | |
| 203 | +invoked primarily in place of or in addition to a disk read/write, | |
| 204 | +overhead is negligible even in worst case workloads. Basically | |
| 205 | +cleancache replaces I/O with memory-copy-CPU-overhead; on older | |
| 206 | +single-core systems with slow memory-copy speeds, cleancache | |
| 207 | +has little value, but in newer multicore machines, especially | |
| 208 | +consolidated/virtualized machines, it has great value. | |
| 209 | + | |
| 210 | +6) How do I add cleancache support for filesystem X? (Boaz Harrash) | |
| 211 | + | |
| 212 | +Filesystems that are well-behaved and conform to certain | |
| 213 | +restrictions can utilize cleancache simply by making a call to | |
| 214 | +cleancache_init_fs at mount time. Unusual, misbehaving, or | |
| 215 | +poorly layered filesystems must either add additional hooks | |
| 216 | +and/or undergo extensive additional testing... or should just | |
| 217 | +not enable the optional cleancache. | |
| 218 | + | |
| 219 | +Some points for a filesystem to consider: | |
| 220 | + | |
| 221 | +- The FS should be block-device-based (e.g. a ram-based FS such | |
| 222 | + as tmpfs should not enable cleancache) | |
| 223 | +- To ensure coherency/correctness, the FS must ensure that all | |
| 224 | + file removal or truncation operations either go through VFS or | |
| 225 | + add hooks to do the equivalent cleancache "flush" operations | |
| 226 | +- To ensure coherency/correctness, either inode numbers must | |
| 227 | + be unique across the lifetime of the on-disk file OR the | |
| 228 | + FS must provide an "encode_fh" function. | |
| 229 | +- The FS must call the VFS superblock alloc and deactivate routines | |
| 230 | + or add hooks to do the equivalent cleancache calls done there. | |
| 231 | +- To maximize performance, all pages fetched from the FS should | |
| 232 | + go through the do_mpag_readpage routine or the FS should add | |
| 233 | + hooks to do the equivalent (cf. btrfs) | |
| 234 | +- Currently, the FS blocksize must be the same as PAGESIZE. This | |
| 235 | + is not an architectural restriction, but no backends currently | |
| 236 | + support anything different. | |
| 237 | +- A clustered FS should invoke the "shared_init_fs" cleancache | |
| 238 | + hook to get best performance for some backends. | |
| 239 | + | |
| 240 | +7) Why not use the KVA of the inode as the key? (Christoph Hellwig) | |
| 241 | + | |
| 242 | +If cleancache would use the inode virtual address instead of | |
| 243 | +inode/filehandle, the pool id could be eliminated. But, this | |
| 244 | +won't work because cleancache retains pagecache data pages | |
| 245 | +persistently even when the inode has been pruned from the | |
| 246 | +inode unused list, and only flushes the data page if the file | |
| 247 | +gets removed/truncated. So if cleancache used the inode kva, | |
| 248 | +there would be potential coherency issues if/when the inode | |
| 249 | +kva is reused for a different file. Alternately, if cleancache | |
| 250 | +flushed the pages when the inode kva was freed, much of the value | |
| 251 | +of cleancache would be lost because the cache of pages in cleanache | |
| 252 | +is potentially much larger than the kernel pagecache and is most | |
| 253 | +useful if the pages survive inode cache removal. | |
| 254 | + | |
| 255 | +8) Why is a global variable required? | |
| 256 | + | |
| 257 | +The cleancache_enabled flag is checked in all of the frequently-used | |
| 258 | +cleancache hooks. The alternative is a function call to check a static | |
| 259 | +variable. Since cleancache is enabled dynamically at runtime, systems | |
| 260 | +that don't enable cleancache would suffer thousands (possibly | |
| 261 | +tens-of-thousands) of unnecessary function calls per second. So the | |
| 262 | +global variable allows cleancache to be enabled by default at compile | |
| 263 | +time, but have insignificant performance impact when cleancache remains | |
| 264 | +disabled at runtime. | |
| 265 | + | |
| 266 | +9) Does cleanache work with KVM? | |
| 267 | + | |
| 268 | +The memory model of KVM is sufficiently different that a cleancache | |
| 269 | +backend may have less value for KVM. This remains to be tested, | |
| 270 | +especially in an overcommitted system. | |
| 271 | + | |
| 272 | +10) Does cleancache work in userspace? It sounds useful for | |
| 273 | + memory hungry caches like web browsers. (Jamie Lokier) | |
| 274 | + | |
| 275 | +No plans yet, though we agree it sounds useful, at least for | |
| 276 | +apps that bypass the page cache (e.g. O_DIRECT). | |
| 277 | + | |
| 278 | +Last updated: Dan Magenheimer, April 13 2011 | |
| @@ -72,7 +72,7 @@ number of huge pages requested. This is the most reliable method of · 71 unmodified lines | ||
| 72 | 72 | allocating huge pages as memory has not yet become fragmented. |
| 73 | 73 | |
| 74 | 74 | Some platforms support multiple huge page sizes. To allocate huge pages |
| 75 | −of a specific size, one must preceed the huge pages boot command parameters | |
| 75 | +of a specific size, one must precede the huge pages boot command parameters | |
| 76 | 76 | with a huge page size selection parameter "hugepagesz=<size>". <size> must |
| 77 | 77 | be specified in bytes with optional scale suffix [kKmMgG]. The default huge |
| 78 | 78 | page size may be selected with the "default_hugepagesz=<size>" boot parameter. |
| @@ -66,7 +66,7 @@ in some cases it is not really needed. Eg, vm_start is modified by · 65 unmodified lines | ||
| 66 | 66 | expand_stack(), it is hard to come up with a destructive scenario without |
| 67 | 67 | having the vmlist protection in this case. |
| 68 | 68 | |
| 69 | −The page_table_lock nests with the inode i_mmap_lock and the kmem cache | |
| 69 | +The page_table_lock nests with the inode i_mmap_mutex and the kmem cache | |
| 70 | 70 | c_spinlock spinlocks. This is okay, since the kmem code asks for pages after |
| 71 | 71 | dropping c_spinlock. The page_table_lock also nests with pagecache_lock and |
| 72 | 72 | pagemap_lru_lock spinlocks, and no code asks for memory with these locks |
| @@ -4,7 +4,7 @@ The Linux kernel supports the following overcommit handling modes · 3 unmodified lines | ||
| 4 | 4 | address space are refused. Used for a typical system. It |
| 5 | 5 | ensures a seriously wild allocation fails while allowing |
| 6 | 6 | overcommit to reduce swap usage. root is allowed to |
| 7 | − allocate slighly more memory in this mode. This is the | |
| 7 | + allocate slightly more memory in this mode. This is the | |
| 8 | 8 | default. |
| 9 | 9 | |
| 10 | 10 | 1 - Always overcommit. Appropriate for some scientific |
| @@ -21,8 +21,8 @@ value and associated ram buffer is outpputed to own line. · 20 unmodified lines | ||
| 21 | 21 | |
| 22 | 22 | Each lines will contain the values of 42 bytes read from the counter and |
| 23 | 23 | memory page along the crc=YES or NO for indicating whether the read operation |
| 24 | −was successfull and CRC matched. | |
| 25 | −If the operation was successfull, there is also in the end of each line | |
| 24 | +was successful and CRC matched. | |
| 25 | +If the operation was successful, there is also in the end of each line | |
| 26 | 26 | a counter value expressed as an integer after c= |
| 27 | 27 | |
| 28 | 28 | Meaning of 42 bytes represented is following: |
| @@ -34,7 +34,7 @@ Meaning of 42 bytes represented is following: · 5 unmodified lines | ||
| 34 | 34 | - crc=YES/NO indicating whether read was ok and crc matched |
| 35 | 35 | - c=<int> current counter value |
| 36 | 36 | |
| 37 | −example from the successfull read: | |
| 37 | +example from the successful read: | |
| 38 | 38 | 00 02 00 00 00 00 00 00 00 6d 38 00 ff ff 00 00 fe ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=YES c=2 |
| 39 | 39 | 00 02 00 00 00 00 00 00 00 e0 1f 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=YES c=2 |
| 40 | 40 | 00 29 c6 5d 18 00 00 00 00 04 37 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=YES c=408798761 |
| @@ -81,7 +81,7 @@ which will contain list of all registered master ids in the following · 80 unmodified lines | ||
| 81 | 81 | format: |
| 82 | 82 | |
| 83 | 83 | cn_msg (CN_W1_IDX.CN_W1_VAL as id, len is equal to sizeof(struct |
| 84 | − w1_netlink_msg) plus number of masters multipled by 4) | |
| 84 | + w1_netlink_msg) plus number of masters multiplied by 4) | |
| 85 | 85 | w1_netlink_msg (type: W1_LIST_MASTERS, len is equal to |
| 86 | 86 | number of masters multiplied by 4 (u32 size)) |
| 87 | 87 | id0 ... idN |
| @@ -8,7 +8,7 @@ Last reviewed: 06/02/2009 · 7 unmodified lines | ||
| 8 | 8 | The HP iLO2 NMI Watchdog driver is a kernel module that provides basic |
| 9 | 9 | watchdog functionality and the added benefit of NMI sourcing. Both the |
| 10 | 10 | watchdog functionality and the NMI sourcing capability need to be enabled |
| 11 | − by the user. Remember that the two modes are not dependant on one another. | |
| 11 | + by the user. Remember that the two modes are not dependent on one another. | |
| 12 | 12 | A user can have the NMI sourcing without the watchdog timer and vice-versa. |
| 13 | 13 | |
| 14 | 14 | Watchdog functionality is enabled like any other common watchdog driver. That |
| @@ -12,6 +12,7 @@ CONTENTS · 11 unmodified lines | ||
| 12 | 12 | 4. Application Programming Interface (API) |
| 13 | 13 | 5. Example Execution Scenarios |
| 14 | 14 | 6. Guidelines |
| 15 | +7. Debugging | |
| 15 | 16 | |
| 16 | 17 | |
| 17 | 18 | 1. Introduction |
| @@ -379,3 +380,42 @@ If q1 has WQ_CPU_INTENSIVE set, · 361 unmodified lines | ||
| 379 | 380 | * Unless work items are expected to consume a huge amount of CPU |
| 380 | 381 | cycles, using a bound wq is usually beneficial due to the increased |
| 381 | 382 | level of locality in wq operations and work item execution. |
| 383 | + | |
| 384 | + | |
| 385 | +7. Debugging | |
| 386 | + | |
| 387 | +Because the work functions are executed by generic worker threads | |
| 388 | +there are a few tricks needed to shed some light on misbehaving | |
| 389 | +workqueue users. | |
| 390 | + | |
| 391 | +Worker threads show up in the process list as: | |
| 392 | + | |
| 393 | +root 5671 0.0 0.0 0 0 ? S 12:07 0:00 [kworker/0:1] | |
| 394 | +root 5672 0.0 0.0 0 0 ? S 12:07 0:00 [kworker/1:2] | |
| 395 | +root 5673 0.0 0.0 0 0 ? S 12:12 0:00 [kworker/0:0] | |
| 396 | +root 5674 0.0 0.0 0 0 ? S 12:13 0:00 [kworker/1:0] | |
| 397 | + | |
| 398 | +If kworkers are going crazy (using too much cpu), there are two types | |
| 399 | +of possible problems: | |
| 400 | + | |
| 401 | + 1. Something beeing scheduled in rapid succession | |
| 402 | + 2. A single work item that consumes lots of cpu cycles | |
| 403 | + | |
| 404 | +The first one can be tracked using tracing: | |
| 405 | + | |
| 406 | + $ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event | |
| 407 | + $ cat /sys/kernel/debug/tracing/trace_pipe > out.txt | |
| 408 | + (wait a few secs) | |
| 409 | + ^C | |
| 410 | + | |
| 411 | +If something is busy looping on work queueing, it would be dominating | |
| 412 | +the output and the offender can be determined with the work item | |
| 413 | +function. | |
| 414 | + | |
| 415 | +For the second type of problems it should be possible to just check | |
| 416 | +the stack trace of the offending worker thread. | |
| 417 | + | |
| 418 | + $ cat /proc/THE_OFFENDING_KWORKER/stack | |
| 419 | + | |
| 420 | +The work item's function should be trivially visible in the stack | |
| 421 | +trace. | |
| @@ -206,7 +206,7 @@ IOMMU (input/output memory management unit) · 205 unmodified lines | ||
| 206 | 206 | (e.g. because you have < 3 GB memory). |
| 207 | 207 | Kernel boot message: "PCI-DMA: Disabling IOMMU" |
| 208 | 208 | |
| 209 | − 2. <arch/x86_64/kernel/pci-gart.c>: AMD GART based hardware IOMMU. | |
| 209 | + 2. <arch/x86/kernel/amd_gart_64.c>: AMD GART based hardware IOMMU. | |
| 210 | 210 | Kernel boot message: "PCI-DMA: using GART IOMMU" |
| 211 | 211 | |
| 212 | 212 | 3. <arch/x86_64/kernel/pci-swiotlb.c> : Software IOMMU implementation. Used |
| @@ -0,0 +1,210 @@ | ||
| 1 | +锘?Chinese translated version of Documentation/email-clients.txt | |
| 2 | + | |
| 3 | +If you have any comment or update to the content, please contact the | |
| 4 | +original document maintainer directly. However, if you have a problem | |
| 5 | +communicating in English you can also ask the Chinese maintainer for | |
| 6 | +help. Contact the Chinese maintainer if this translation is outdated | |
| 7 | +or if there is a problem with the translation. | |
| 8 | + | |
| 9 | +Chinese maintainer: Harry Wei <harryxiyou@gmail.com> | |
| 10 | +--------------------------------------------------------------------- | |
| 11 | +Documentation/email-clients.txt ???涓????缈昏?? | |
| 12 | + | |
| 13 | +濡??????宠??璁烘????存?版???????????瀹癸??璇风?存?ヨ??绯诲?????妗g??缁存?よ?????濡????浣?浣跨?ㄨ?辨?? | |
| 14 | +浜ゆ???????伴?剧??璇?锛?涔????浠ュ??涓???????缁存?よ??姹???┿??濡???????缈昏????存?颁???????舵?????缈? | |
| 15 | +璇?瀛???ㄩ??棰?锛?璇疯??绯讳腑??????缁存?よ????? | |
| 16 | + | |
| 17 | +涓???????缁存?よ??锛? 璐惧??濞? Harry Wei <harryxiyou@gmail.com> | |
| 18 | +涓???????缈昏?????锛? 璐惧??濞? Harry Wei <harryxiyou@gmail.com> | |
| 19 | +涓?????????¤?????锛? Yinglin Luan <synmyth@gmail.com> | |
| 20 | + Xiaochen Wang <wangxiaochen0@gmail.com> | |
| 21 | + yaxinsn <yaxinsn@163.com> | |
| 22 | + | |
| 23 | +浠ヤ??涓烘?f?? | |
| 24 | +--------------------------------------------------------------------- | |
| 25 | + | |
| 26 | +Linux???浠跺?㈡?风?????缃?淇℃?? | |
| 27 | +====================================================================== | |
| 28 | + | |
| 29 | +?????????缃? | |
| 30 | +---------------------------------------------------------------------- | |
| 31 | +Linux?????歌ˉ涓???????杩????浠惰?????浜ょ??锛????濂芥??琛ヤ??浣?涓洪??浠朵????????宓?????????????浜?缁存?よ?? | |
| 32 | +??ユ?堕??浠讹??浣???????浠剁?????瀹规?煎??搴?璇ユ??"text/plain"?????惰??锛????浠朵????????涓?璧???????锛? | |
| 33 | +???涓鸿??浼?浣胯ˉ涓????寮???ㄩ?ㄥ????ㄨ??璁鸿??绋?涓???????寰???伴?俱?? | |
| 34 | + | |
| 35 | +??ㄦ?ュ?????Linux?????歌ˉ涓???????浠跺?㈡?风????ㄥ?????琛ヤ????跺??璇ュ??浜?????????????濮???舵?????渚?濡?锛? | |
| 36 | +浠?浠?涓???芥?瑰?????????????ゅ?惰〃绗???????绌烘?硷???????虫????ㄦ??涓?琛????寮?澶存?????缁?灏俱?? | |
| 37 | + | |
| 38 | +涓?瑕????杩?"format=flowed"妯″????????琛ヤ?????杩???蜂??寮?璧蜂?????棰????浠ュ?????瀹崇?????琛???? | |
| 39 | + | |
| 40 | +涓?瑕?璁╀????????浠跺?㈡?风??杩?琛??????ㄦ?㈣?????杩???蜂??浼???村??浣????琛ヤ????? | |
| 41 | + | |
| 42 | +???浠跺?㈡?风??涓???芥?瑰???????????瀛?绗????缂??????瑰?????瑕??????????琛ヤ???????芥??ASCII??????UTF-8缂??????瑰??锛? | |
| 43 | +濡????浣?浣跨??UTF-8缂??????瑰???????????浠讹????d??浣?灏?浼???垮??涓?浜??????藉????????瀛?绗???????棰???? | |
| 44 | + | |
| 45 | +???浠跺?㈡?风??搴?璇ュ舰???骞朵??淇???? References: ?????? In-Reply-To: ???棰?锛???d?? | |
| 46 | +???浠惰??棰?灏变??浼?涓??????? | |
| 47 | + | |
| 48 | +澶???剁??甯?(?????????璐寸??甯?)???甯镐????界?ㄤ??琛ヤ??锛????涓哄?惰〃绗?浼?杞????涓虹┖??笺??浣跨??xclipboard, xclip | |
| 49 | +??????xcutsel涔?璁稿??浠ワ??浣???????濂芥??璇?涓?涓?????????垮??浣跨?ㄥ????剁??甯???? | |
| 50 | + | |
| 51 | +涓?瑕???ㄤ娇???PGP/GPG缃插????????浠朵腑??????琛ヤ?????杩???蜂??浣垮??寰?澶???????涓???借?诲??????????ㄤ??浣????琛ヤ????? | |
| 52 | +锛?杩?涓????棰?搴?璇ユ?????浠ヤ慨澶????锛? | |
| 53 | + | |
| 54 | +??ㄧ???????搁??浠跺??琛ㄥ?????琛ヤ??涔????锛?缁????宸卞?????涓?涓?琛ヤ?????涓?涓???????涓绘??锛?淇?瀛???ユ?跺?扮?? | |
| 55 | +???浠讹??灏?琛ヤ?????'patch'??戒护???涓?锛?濡??????????浜?锛????缁??????搁??浠跺??琛ㄥ???????? | |
| 56 | + | |
| 57 | + | |
| 58 | +涓?浜????浠跺?㈡?风?????绀? | |
| 59 | +---------------------------------------------------------------------- | |
| 60 | +杩????缁???轰??浜?璇?缁????MUA???缃????绀猴?????浠ョ?ㄤ??缁?Linux?????稿?????琛ヤ?????杩?浜?骞朵???????虫?? | |
| 61 | +?????????杞?浠跺?????缃???荤????? | |
| 62 | + | |
| 63 | +璇存??锛? | |
| 64 | +TUI = 浠ユ?????涓哄?虹???????ㄦ?锋?ュ?? | |
| 65 | +GUI = ??惧舰?????㈢?ㄦ?锋?ュ?? | |
| 66 | + | |
| 67 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 68 | +Alpine (TUI) | |
| 69 | + | |
| 70 | +???缃????椤癸?? | |
| 71 | +???"Sending Preferences"??ㄥ??锛? | |
| 72 | + | |
| 73 | +- "Do Not Send Flowed Text"蹇?椤诲????? | |
| 74 | +- "Strip Whitespace Before Sending"蹇?椤诲?抽?? | |
| 75 | + | |
| 76 | +褰???????浠舵?讹????????搴?璇ユ?惧?ㄨˉ涓?浼???虹?扮????版?癸????跺?????涓?CTRL-R缁???????锛?浣挎??瀹???? | |
| 77 | +琛ヤ?????浠跺????ュ?伴??浠朵腑??? | |
| 78 | + | |
| 79 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 80 | +Evolution (GUI) | |
| 81 | + | |
| 82 | +涓?浜?寮????????????????浣跨?ㄥ????????琛ヤ?? | |
| 83 | + | |
| 84 | +褰??????╅??浠堕??椤癸??Preformat | |
| 85 | + 浠?Format->Heading->Preformatted (Ctrl-7)??????宸ュ?锋?? | |
| 86 | + | |
| 87 | +??跺??浣跨??锛? | |
| 88 | + Insert->Text File... (Alt-n x)?????ヨˉ涓????浠躲?? | |
| 89 | + | |
| 90 | +浣?杩????浠?"diff -Nru old.c new.c | xclip"锛???????Preformat锛???跺??浣跨?ㄤ腑??撮??杩?琛?绮?甯???? | |
| 91 | + | |
| 92 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 93 | +Kmail (GUI) | |
| 94 | + | |
| 95 | +涓?浜?寮????????????????浣跨?ㄥ????????琛ヤ????? | |
| 96 | + | |
| 97 | +榛?璁よ?剧疆涓?涓?HTML??煎??????????????锛?涓?瑕??????ㄥ????? | |
| 98 | + | |
| 99 | +褰?涔????涓?灏????浠剁????跺??锛???ㄩ??椤逛?????涓?瑕??????╄????ㄦ?㈣????????涓????缂虹?瑰氨???浣???ㄩ??浠朵腑杈???ョ??浠讳???????? | |
| 100 | +??戒??浼?琚??????ㄦ?㈣??锛????姝や??蹇?椤诲?ㄥ?????琛ヤ??涔?????????ㄦ?㈣????????绠?????????规??灏辨???????ㄨ????ㄦ?㈣????ヤ功??????浠讹?? | |
| 101 | +??跺?????瀹?淇?瀛?涓鸿??绋裤??涓????浣???ㄨ??绋夸腑???娆℃??寮?瀹?锛?瀹?宸茬????ㄩ?ㄨ????ㄦ?㈣??浜?锛???d??浣???????浠惰?界?舵病??? | |
| 102 | +?????╄????ㄦ?㈣??锛?浣????杩?涓?浼?澶卞?诲凡???????????ㄦ?㈣????? | |
| 103 | + | |
| 104 | +??ㄩ??浠剁??搴????锛??????ヨˉ涓?涔????锛???句??甯哥?ㄧ??琛ヤ??瀹????绗?锛?涓?涓?杩?瀛????(---)??? | |
| 105 | + | |
| 106 | +??跺?????"Message"????????$??锛??????╂????ユ??浠讹????ョ????????浣????琛ヤ?????浠躲??杩????涓?涓?棰?澶???????椤癸??浣????浠? | |
| 107 | +???杩?瀹????缃?浣???????浠跺缓绔?宸ュ?锋????????锛?杩????浠ュ甫涓?"insert file"??炬????? | |
| 108 | + | |
| 109 | +浣????浠ュ????ㄥ?伴??杩?GPG???璁伴??浠讹??浣???????宓?琛ヤ?????濂戒??瑕?浣跨??GPG???璁板??浠????浣?涓哄??宓??????????绛惧??琛ヤ??锛? | |
| 110 | +褰?浠?GPG涓???????7浣?缂??????朵??浣夸??浠?????????村??澶??????? | |
| 111 | + | |
| 112 | +濡????浣????瑕?浠ラ??浠剁??褰㈠????????琛ヤ??锛???d??灏卞?抽????瑰?婚??浠讹????跺?????涓?灞???э??绐????"Suggest automatic | |
| 113 | +display"锛?杩???峰??宓????浠舵?村?规??璁╄?昏???????般?? | |
| 114 | + | |
| 115 | +褰?浣?瑕?淇?瀛?灏?瑕?????????????宓???????琛ヤ??锛?浣????浠ヤ??娑???????琛ㄧ????奸????╁?????琛ヤ????????浠讹????跺????冲?婚????? | |
| 116 | +"save as"???浣????浠ヤ娇??ㄤ??涓?娌℃????存?圭????????琛ヤ????????浠讹??濡????瀹????浠ユ?g‘???褰㈠??缁???????褰?浣?姝g????ㄥ?? | |
| 117 | +???宸辩??绐???d??涓?瀵????锛???f?舵病??????椤瑰??浠ヤ??瀛????浠?--宸茬?????涓?涓?杩???风??bug琚?姹???ュ?颁??kmail???bugzilla | |
| 118 | +骞朵??甯????杩?灏?浼?琚?澶??????????浠舵??浠ュ?????瀵规??涓???ㄦ?峰??璇诲???????????琚?淇?瀛????锛????浠ュ?????浣???虫?????浠跺????跺?板?朵????版?癸?? | |
| 119 | +浣?涓?寰?涓????浠?浠????????????逛负缁?????????翠?????璇汇?? | |
| 120 | + | |
| 121 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 122 | +Lotus Notes (GUI) | |
| 123 | + | |
| 124 | +涓?瑕?浣跨?ㄥ????? | |
| 125 | + | |
| 126 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 127 | +Mutt (TUI) | |
| 128 | + | |
| 129 | +寰?澶?Linux寮????浜哄??浣跨??mutt瀹㈡?风??锛????浠ヨ?????瀹????瀹?宸ヤ????????甯告??浜???? | |
| 130 | + | |
| 131 | +Mutt涓????甯?缂?杈????锛????浠ヤ??绠′??浣跨?ㄤ??涔?缂?杈???ㄩ?戒??搴?璇ュ甫????????ㄦ??琛????澶у????扮??杈???ㄩ?藉甫??? | |
| 132 | +涓?涓?"insert file"???椤癸??瀹????浠ラ??杩?涓???瑰?????浠跺??瀹圭????瑰???????ユ??浠躲?? | |
| 133 | + | |
| 134 | +'vim'浣?涓?mutt???缂?杈????锛? | |
| 135 | + set editor="vi" | |
| 136 | + | |
| 137 | + 濡????浣跨??xclip锛???插?ヤ互涓???戒护 | |
| 138 | + :set paste | |
| 139 | + ???涓????涔??????????shift-insert??????浣跨?? | |
| 140 | + :r filename | |
| 141 | + | |
| 142 | +濡??????宠?????琛ヤ??浣?涓哄??宓?????????? | |
| 143 | +(a)ttach宸ヤ?????寰?濂斤??涓?甯????"set paste"??? | |
| 144 | + | |
| 145 | +???缃????椤癸?? | |
| 146 | +瀹?搴?璇ヤ互榛?璁よ?剧疆???褰㈠??宸ヤ????? | |
| 147 | +??惰??锛????"send_charset"璁剧疆涓?"us-ascii::utf-8"涔????涓?涓?涓???????涓绘????? | |
| 148 | + | |
| 149 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 150 | +Pine (TUI) | |
| 151 | + | |
| 152 | +Pine杩???绘??涓?浜?绌烘?煎????????棰?锛?浣????杩?浜???板?ㄥ??璇ラ?借??淇?澶?浜???? | |
| 153 | + | |
| 154 | +濡???????浠ワ??璇蜂娇???alpine(pine???缁ф?胯??) | |
| 155 | + | |
| 156 | +???缃????椤癸?? | |
| 157 | +- ???杩?????????????瑕?娑???ゆ??绋??????? | |
| 158 | +- "no-strip-whitespace-before-send"???椤逛????????瑕??????? | |
| 159 | + | |
| 160 | + | |
| 161 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 162 | +Sylpheed (GUI) | |
| 163 | + | |
| 164 | +- ???宓??????????浠ュ??濂界??宸ヤ??锛???????浣跨?ㄩ??浠讹????? | |
| 165 | +- ???璁镐娇??ㄥ????ㄧ??缂?杈???ㄣ?? | |
| 166 | +- 瀵逛?????褰?杈?澶???堕??甯告????? | |
| 167 | +- 濡???????杩?non-SSL杩???ワ?????娉?浣跨??TLS SMTP????????? | |
| 168 | +- ??ㄧ?????绐???d腑???涓?涓?寰??????ㄧ??ruler bar??? | |
| 169 | +- 缁???板?????涓?娣诲????板??灏变??浼?姝g‘???浜?瑙f?剧ず?????? | |
| 170 | + | |
| 171 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 172 | +Thunderbird (GUI) | |
| 173 | + | |
| 174 | +榛?璁ゆ????典??锛?thunderbird寰?瀹规??????????????锛?浣????杩????涓?浜???规?????浠ュ己??跺?????寰???村ソ??? | |
| 175 | + | |
| 176 | +- ??ㄧ?ㄦ?峰????疯?剧疆???锛?缁???????瀵诲??锛?涓?瑕???????"Compose messages in HTML format"??? | |
| 177 | + | |
| 178 | +- 缂?杈?浣????Thunderbird???缃?璁剧疆??ヤ娇瀹?涓?瑕????琛?浣跨??锛?user_pref("mailnews.wraplength", 0); | |
| 179 | + | |
| 180 | +- 缂?杈?浣????Thunderbird???缃?璁剧疆锛?浣垮??涓?瑕?浣跨??"format=flowed"??煎??锛?user_pref("mailnews. | |
| 181 | + send_plaintext_flowed", false); | |
| 182 | + | |
| 183 | +- 浣????瑕?浣?Thunderbird???涓洪???????煎????瑰??锛? | |
| 184 | + 濡????榛?璁ゆ????典??浣?涔??????????HTML??煎??锛???d?????寰???俱??浠?浠?浠????棰???????涓????妗?涓???????"Preformat"??煎????? | |
| 185 | + 濡????榛?璁ゆ????典??浣?涔??????????????????煎??锛?浣?涓?寰????瀹???逛负HTML??煎??锛?浠?浠?浣?涓轰??娆℃?х??锛???ヤ功?????扮??娑????锛? | |
| 186 | + ??跺??寮哄?朵娇瀹??????版???????煎??锛???????瀹?灏变?????琛????瑕?瀹???板??锛???ㄥ??淇$????炬??涓?浣跨??shift?????ヤ娇瀹????涓?HTML | |
| 187 | + ??煎??锛???跺?????棰???????涓????妗?涓???????"Preformat"??煎????? | |
| 188 | + | |
| 189 | +- ???璁镐娇??ㄥ????ㄧ??缂?杈????锛? | |
| 190 | + ???瀵?Thunderbird???琛ヤ?????绠?????????规??灏辨??浣跨?ㄤ??涓?"external editor"??╁??锛???跺??浣跨?ㄤ????????娆㈢?? | |
| 191 | + $EDITOR??ヨ?诲???????????骞惰ˉ涓???版?????涓????瑕?瀹???板??锛????浠ヤ??杞藉苟涓?瀹?瑁?杩?涓???╁??锛???跺??娣诲??涓?涓?浣跨?ㄥ????? | |
| 192 | + ??????View->Toolbars->Customize...??????褰?浣?涔????淇℃???????跺??浠?浠???瑰?诲??灏卞??浠ヤ????? | |
| 193 | + | |
| 194 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 195 | +TkRat (GUI) | |
| 196 | + | |
| 197 | +???浠ヤ娇??ㄥ?????浣跨??"Insert file..."??????澶???ㄧ??缂?杈???ㄣ?? | |
| 198 | + | |
| 199 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 200 | +Gmail (Web GUI) | |
| 201 | + | |
| 202 | +涓?瑕?浣跨?ㄥ????????琛ヤ????? | |
| 203 | + | |
| 204 | +Gmail缃?椤靛?㈡?风???????ㄥ?版????惰〃绗?杞????涓虹┖??笺?? | |
| 205 | + | |
| 206 | +??界?跺?惰〃绗?杞????涓虹┖??奸??棰????浠ヨ??澶???ㄧ??杈???ㄨВ??筹???????跺??杩?浼?浣跨?ㄥ??杞???㈣?????姣?琛???????涓?78涓?瀛?绗???? | |
| 207 | + | |
| 208 | +???涓?涓????棰????Gmail杩?浼????浠讳??涓????ASCII???瀛?绗????淇℃????逛负base64缂???????瀹????涓?瑗垮????????娆ф床浜虹?????瀛???? | |
| 209 | + | |
| 210 | + ### | |
| @@ -151,6 +151,7 @@ S: Maintained · 150 unmodified lines | ||
| 151 | 151 | F: drivers/net/hamradio/6pack.c |
| 152 | 152 | |
| 153 | 153 | 8169 10/100/1000 GIGABIT ETHERNET DRIVER |
| 154 | +M: Realtek linux nic maintainers <nic_swsd@realtek.com> | |
| 154 | 155 | M: Francois Romieu <romieu@fr.zoreil.com> |
| 155 | 156 | L: netdev@vger.kernel.org |
| 156 | 157 | S: Maintained |
| @@ -184,10 +185,9 @@ F: Documentation/filesystems/9p.txt · 27 unmodified lines | ||
| 184 | 185 | F: fs/9p/ |
| 185 | 186 | |
| 186 | 187 | A2232 SERIAL BOARD DRIVER |
| 187 | −M: Enver Haase <A2232@gmx.net> | |
| 188 | 188 | L: linux-m68k@lists.linux-m68k.org |
| 189 | −S: Maintained | |
| 190 | −F: drivers/char/ser_a2232* | |
| 189 | +S: Orphan | |
| 190 | +F: drivers/staging/generic_serial/ser_a2232* | |
| 191 | 191 | |
| 192 | 192 | AACRAID SCSI RAID DRIVER |
| 193 | 193 | M: Adaptec OEM Raid Solutions <aacraid@adaptec.com> |
| @@ -223,10 +223,8 @@ S: Maintained · 29 unmodified lines | ||
| 223 | 223 | F: drivers/platform/x86/acerhdf.c |
| 224 | 224 | |
| 225 | 225 | ACER WMI LAPTOP EXTRAS |
| 226 | −M: Carlos Corbacho <carlos@strangeworlds.co.uk> | |
| 227 | −L: aceracpi@googlegroups.com (subscribers-only) | |
| 226 | +M: Joey Lee <jlee@novell.com> | |
| 228 | 227 | L: platform-driver-x86@vger.kernel.org |
| 229 | −W: http://code.google.com/p/aceracpi | |
| 230 | 228 | S: Maintained |
| 231 | 229 | F: drivers/platform/x86/acer-wmi.c |
| 232 | 230 | |
| @@ -271,10 +269,8 @@ S: Supported · 38 unmodified lines | ||
| 271 | 269 | F: drivers/acpi/video.c |
| 272 | 270 | |
| 273 | 271 | ACPI WMI DRIVER |
| 274 | −M: Carlos Corbacho <carlos@strangeworlds.co.uk> | |
| 275 | 272 | L: platform-driver-x86@vger.kernel.org |
| 276 | −W: http://www.lesswatts.org/projects/acpi/ | |
| 277 | −S: Maintained | |
| 273 | +S: Orphan | |
| 278 | 274 | F: drivers/platform/x86/wmi.c |
| 279 | 275 | |
| 280 | 276 | AD1889 ALSA SOUND DRIVER |
| @@ -287,35 +283,35 @@ F: sound/pci/ad1889.* · 6 unmodified lines | ||
| 287 | 283 | |
| 288 | 284 | AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER |
| 289 | 285 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 290 | −L: device-driver-devel@blackfin.uclinux.org | |
| 286 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 291 | 287 | W: http://wiki.analog.com/AD5254 |
| 292 | 288 | S: Supported |
| 293 | 289 | F: drivers/misc/ad525x_dpot.c |
| 294 | 290 | |
| 295 | 291 | AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) |
| 296 | 292 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 297 | −L: device-driver-devel@blackfin.uclinux.org | |
| 293 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 298 | 294 | W: http://wiki.analog.com/AD5398 |
| 299 | 295 | S: Supported |
| 300 | 296 | F: drivers/regulator/ad5398.c |
| 301 | 297 | |
| 302 | 298 | AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) |
| 303 | 299 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 304 | −L: device-driver-devel@blackfin.uclinux.org | |
| 300 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 305 | 301 | W: http://wiki.analog.com/AD7142 |
| 306 | 302 | S: Supported |
| 307 | 303 | F: drivers/input/misc/ad714x.c |
| 308 | 304 | |
| 309 | 305 | AD7877 TOUCHSCREEN DRIVER |
| 310 | 306 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 311 | −L: device-driver-devel@blackfin.uclinux.org | |
| 307 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 312 | 308 | W: http://wiki.analog.com/AD7877 |
| 313 | 309 | S: Supported |
| 314 | 310 | F: drivers/input/touchscreen/ad7877.c |
| 315 | 311 | |
| 316 | 312 | AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) |
| 317 | 313 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 318 | −L: device-driver-devel@blackfin.uclinux.org | |
| 314 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 319 | 315 | W: http://wiki.analog.com/AD7879 |
| 320 | 316 | S: Supported |
| 321 | 317 | F: drivers/input/touchscreen/ad7879.c |
| @@ -341,7 +337,7 @@ F: drivers/net/wireless/adm8211.* · 19 unmodified lines | ||
| 341 | 337 | |
| 342 | 338 | ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) |
| 343 | 339 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 344 | −L: device-driver-devel@blackfin.uclinux.org | |
| 340 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 345 | 341 | W: http://wiki.analog.com/ADP5520 |
| 346 | 342 | S: Supported |
| 347 | 343 | F: drivers/mfd/adp5520.c |
| @@ -352,7 +348,7 @@ F: drivers/input/keyboard/adp5520-keys.c · 4 unmodified lines | ||
| 352 | 348 | |
| 353 | 349 | ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) |
| 354 | 350 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 355 | −L: device-driver-devel@blackfin.uclinux.org | |
| 351 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 356 | 352 | W: http://wiki.analog.com/ADP5588 |
| 357 | 353 | S: Supported |
| 358 | 354 | F: drivers/input/keyboard/adp5588-keys.c |
| @@ -360,7 +356,7 @@ F: drivers/gpio/adp5588-gpio.c · 1 unmodified line | ||
| 360 | 356 | |
| 361 | 357 | ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) |
| 362 | 358 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 363 | −L: device-driver-devel@blackfin.uclinux.org | |
| 359 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 364 | 360 | W: http://wiki.analog.com/ADP8860 |
| 365 | 361 | S: Supported |
| 366 | 362 | F: drivers/video/backlight/adp8860_bl.c |
| @@ -387,7 +383,7 @@ F: drivers/hwmon/adt7475.c · 20 unmodified lines | ||
| 387 | 383 | |
| 388 | 384 | ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) |
| 389 | 385 | M: Michael Hennerich <michael.hennerich@analog.com> |
| 390 | −L: device-driver-devel@blackfin.uclinux.org | |
| 386 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 391 | 387 | W: http://wiki.analog.com/ADXL345 |
| 392 | 388 | S: Supported |
| 393 | 389 | F: drivers/input/misc/adxl34x.c |
| @@ -405,8 +401,8 @@ S: Maintained · 11 unmodified lines | ||
| 405 | 401 | F: sound/oss/aedsp16.c |
| 406 | 402 | |
| 407 | 403 | AFFS FILE SYSTEM |
| 408 | −M: Roman Zippel <zippel@linux-m68k.org> | |
| 409 | −S: Maintained | |
| 404 | +L: linux-fsdevel@vger.kernel.org | |
| 405 | +S: Orphan | |
| 410 | 406 | F: Documentation/filesystems/affs.txt |
| 411 | 407 | F: fs/affs/ |
| 412 | 408 | |
| @@ -483,6 +479,13 @@ F: drivers/tty/serial/altera_jtaguart.c · 70 unmodified lines | ||
| 483 | 479 | F: include/linux/altera_uart.h |
| 484 | 480 | F: include/linux/altera_jtaguart.h |
| 485 | 481 | |
| 482 | +AMD FAM15H PROCESSOR POWER MONITORING DRIVER | |
| 483 | +M: Andreas Herrmann <andreas.herrmann3@amd.com> | |
| 484 | +L: lm-sensors@lm-sensors.org | |
| 485 | +S: Maintained | |
| 486 | +F: Documentation/hwmon/fam15h_power | |
| 487 | +F: drivers/hwmon/fam15h_power.c | |
| 488 | + | |
| 486 | 489 | AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER |
| 487 | 490 | M: Thomas Dahlmann <dahlmann.thomas@arcor.de> |
| 488 | 491 | L: linux-geode@lists.infradead.org (moderated for non-subscribers) |
| @@ -526,7 +529,7 @@ S: Maintained · 37 unmodified lines | ||
| 526 | 529 | F: drivers/infiniband/hw/amso1100/ |
| 527 | 530 | |
| 528 | 531 | ANALOG DEVICES INC ASOC CODEC DRIVERS |
| 529 | −L: device-driver-devel@blackfin.uclinux.org | |
| 532 | +L: device-drivers-devel@blackfin.uclinux.org | |
| 530 | 533 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
| 531 | 534 | W: http://wiki.analog.com/ |
| 532 | 535 | S: Supported |
| @@ -548,10 +551,11 @@ S: Maintained · 15 unmodified lines | ||
| 548 | 551 | F: sound/aoa/ |
| 549 | 552 | |
| 550 | 553 | APM DRIVER |
| 551 | −L: linux-laptop@vger.kernel.org | |
| 552 | −S: Orphan | |
| 554 | +M: Jiri Kosina <jkosina@suse.cz> | |
| 555 | +S: Odd fixes | |
| 553 | 556 | F: arch/x86/kernel/apm_32.c |
| 554 | 557 | F: include/linux/apm_bios.h |
| 558 | +F: drivers/char/apm-emulation.c | |
| 555 | 559 | |
| 556 | 560 | APPLE BCM5974 MULTITOUCH DRIVER |
| 557 | 561 | M: Henrik Rydberg <rydberg@euromail.se> |
| @@ -729,7 +733,7 @@ ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) · 171 unmodified lines | ||
| 729 | 733 | M: Daniel Ribeiro <drwyrm@gmail.com> |
| 730 | 734 | M: Stefan Schmidt <stefan@openezx.org> |
| 731 | 735 | M: Harald Welte <laforge@openezx.org> |
| 732 | −L: openezx-devel@lists.openezx.org (subscribers-only) | |
| 736 | +L: openezx-devel@lists.openezx.org (moderated for non-subscribers) | |
| 733 | 737 | W: http://www.openezx.org/ |
| 734 | 738 | S: Maintained |
| 735 | 739 | T: topgit git://git.openezx.org/openezx.git |
| @@ -877,6 +881,13 @@ F: arch/arm/mach-mv78xx0/ · 141 unmodified lines | ||
| 877 | 881 | F: arch/arm/mach-orion5x/ |
| 878 | 882 | F: arch/arm/plat-orion/ |
| 879 | 883 | |
| 884 | +ARM/Orion SoC/Technologic Systems TS-78xx platform support | |
| 885 | +M: Alexander Clouter <alex@digriz.org.uk> | |
| 886 | +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | |
| 887 | +W: http://www.digriz.org.uk/ts78xx/kernel | |
| 888 | +S: Maintained | |
| 889 | +F: arch/arm/mach-orion5x/ts78xx-* | |
| 890 | + | |
| 880 | 891 | ARM/MIOA701 MACHINE SUPPORT |
| 881 | 892 | M: Robert Jarzmik <robert.jarzmik@free.fr> |
| 882 | 893 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| @@ -916,6 +927,8 @@ F: drivers/mmc/host/msm_sdcc.h · 33 unmodified lines | ||
| 916 | 927 | F: drivers/tty/serial/msm_serial.h |
| 917 | 928 | F: drivers/tty/serial/msm_serial.c |
| 918 | 929 | F: drivers/platform/msm/ |
| 930 | +F: drivers/*/pm8???-* | |
| 931 | +F: include/linux/mfd/pm8xxx/ | |
| 919 | 932 | T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git |
| 920 | 933 | S: Maintained |
| 921 | 934 | |
| @@ -1025,12 +1038,13 @@ W: http://www.fluff.org/ben/linux/ · 103 unmodified lines | ||
| 1025 | 1038 | S: Maintained |
| 1026 | 1039 | F: arch/arm/mach-s3c64xx/ |
| 1027 | 1040 | |
| 1028 | −ARM/S5P ARM ARCHITECTURES | |
| 1041 | +ARM/S5P EXYNOS ARM ARCHITECTURES | |
| 1029 | 1042 | M: Kukjin Kim <kgene.kim@samsung.com> |
| 1030 | 1043 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| 1031 | 1044 | L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) |
| 1032 | 1045 | S: Maintained |
| 1033 | 1046 | F: arch/arm/mach-s5p*/ |
| 1047 | +F: arch/arm/mach-exynos*/ | |
| 1034 | 1048 | |
| 1035 | 1049 | ARM/SAMSUNG MOBILE MACHINE SUPPORT |
| 1036 | 1050 | M: Kyungmin Park <kyungmin.park@samsung.com> |
| @@ -1063,7 +1077,7 @@ F: arch/arm/mach-shmobile/ · 26 unmodified lines | ||
| 1063 | 1077 | F: drivers/sh/ |
| 1064 | 1078 | |
| 1065 | 1079 | ARM/TELECHIPS ARM ARCHITECTURE |
| 1066 | −M: "Hans J. Koch" <hjk@linutronix.de> | |
| 1080 | +M: "Hans J. Koch" <hjk@hansjkoch.de> | |
| 1067 | 1081 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
| 1068 | 1082 | S: Maintained |
| 1069 | 1083 | F: arch/arm/plat-tcc/ |
| @@ -1224,13 +1238,6 @@ W: http://wireless.kernel.org/en/users/Drivers/ath9k · 154 unmodified lines | ||
| 1224 | 1238 | S: Supported |
| 1225 | 1239 | F: drivers/net/wireless/ath/ath9k/ |
| 1226 | 1240 | |
| 1227 | −ATHEROS AR9170 WIRELESS DRIVER | |
| 1228 | −M: Christian Lamparter <chunkeey@web.de> | |
| 1229 | −L: linux-wireless@vger.kernel.org | |
| 1230 | −W: http://wireless.kernel.org/en/users/Drivers/ar9170 | |
| 1231 | −S: Obsolete | |
| 1232 | −F: drivers/net/wireless/ath/ar9170/ | |
| 1233 | − | |
| 1234 | 1241 | CARL9170 LINUX COMMUNITY WIRELESS DRIVER |
| 1235 | 1242 | M: Christian Lamparter <chunkeey@googlemail.com> |
| 1236 | 1243 | L: linux-wireless@vger.kernel.org |
| @@ -1823,11 +1830,10 @@ S: Maintained · 586 unmodified lines | ||
| 1823 | 1830 | F: drivers/platform/x86/compal-laptop.c |
| 1824 | 1831 | |
| 1825 | 1832 | COMPUTONE INTELLIPORT MULTIPORT CARD |
| 1826 | −M: "Michael H. Warfield" <mhw@wittsend.com> | |
| 1827 | 1833 | W: http://www.wittsend.com/computone.html |
| 1828 | −S: Maintained | |
| 1834 | +S: Orphan | |
| 1829 | 1835 | F: Documentation/serial/computone.txt |
| 1830 | −F: drivers/char/ip2/ | |
| 1836 | +F: drivers/staging/tty/ip2/ | |
| 1831 | 1837 | |
| 1832 | 1838 | CONEXANT ACCESSRUNNER USB DRIVER |
| 1833 | 1839 | M: Simon Arlott <cxacru@fire.lp0.eu> |
| @@ -2010,7 +2016,7 @@ F: drivers/net/wan/cycx* · 176 unmodified lines | ||
| 2010 | 2016 | CYCLADES ASYNC MUX DRIVER |
| 2011 | 2017 | W: http://www.cyclades.com/ |
| 2012 | 2018 | S: Orphan |
| 2013 | −F: drivers/char/cyclades.c | |
| 2019 | +F: drivers/tty/cyclades.c | |
| 2014 | 2020 | F: include/linux/cyclades.h |
| 2015 | 2021 | |
| 2016 | 2022 | CYCLADES PC300 DRIVER |
| @@ -2033,9 +2039,8 @@ F: net/ax25/ax25_timer.c · 16 unmodified lines | ||
| 2033 | 2039 | F: net/ax25/sysctl_net_ax25.c |
| 2034 | 2040 | |
| 2035 | 2041 | DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER |
| 2036 | −M: Tobias Ringstrom <tori@unhappy.mine.nu> | |
| 2037 | 2042 | L: netdev@vger.kernel.org |
| 2038 | −S: Maintained | |
| 2043 | +S: Orphan | |
| 2039 | 2044 | F: Documentation/networking/dmfe.txt |
| 2040 | 2045 | F: drivers/net/tulip/dmfe.c |
| 2041 | 2046 | |
| @@ -2124,8 +2129,8 @@ L: Eng.Linux@digi.com · 82 unmodified lines | ||
| 2124 | 2129 | W: http://www.digi.com |
| 2125 | 2130 | S: Orphan |
| 2126 | 2131 | F: Documentation/serial/digiepca.txt |
| 2127 | −F: drivers/char/epca* | |
| 2128 | −F: drivers/char/digi* | |
| 2132 | +F: drivers/staging/tty/epca* | |
| 2133 | +F: drivers/staging/tty/digi* | |
| 2129 | 2134 | |
| 2130 | 2135 | DIOLAN U2C-12 I2C DRIVER |
| 2131 | 2136 | M: Guenter Roeck <guenter.roeck@ericsson.com> |
| @@ -2169,6 +2174,8 @@ M: Dan Williams <dan.j.williams@intel.com> · 37 unmodified lines | ||
| 2169 | 2174 | S: Supported |
| 2170 | 2175 | F: drivers/dma/ |
| 2171 | 2176 | F: include/linux/dma* |
| 2177 | +T: git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git | |
| 2178 | +T: git git://git.infradead.org/users/vkoul/slave-dma.git (slave-dma) | |
| 2172 | 2179 | |
| 2173 | 2180 | DME1737 HARDWARE MONITOR DRIVER |
| 2174 | 2181 | M: Juerg Haefliger <juergh@gmail.com> |
| @@ -2244,10 +2251,10 @@ F: drivers/gpu/drm/ · 69 unmodified lines | ||
| 2244 | 2251 | F: include/drm/ |
| 2245 | 2252 | |
| 2246 | 2253 | INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) |
| 2247 | −M: Chris Wilson <chris@chris-wilson.co.uk> | |
| 2254 | +M: Keith Packard <keithp@keithp.com> | |
| 2248 | 2255 | L: intel-gfx@lists.freedesktop.org (subscribers-only) |
| 2249 | 2256 | L: dri-devel@lists.freedesktop.org |
| 2250 | −T: git git://git.kernel.org/pub/scm/linux/kernel/git/ickle/drm-intel.git | |
| 2257 | +T: git git://git.kernel.org/pub/scm/linux/kernel/git/keithp/linux-2.6.git | |
| 2251 | 2258 | S: Supported |
| 2252 | 2259 | F: drivers/gpu/drm/i915 |
| 2253 | 2260 | F: include/drm/i915* |
| @@ -2295,7 +2302,7 @@ F: net/bridge/netfilter/ebt*.c · 41 unmodified lines | ||
| 2295 | 2302 | ECRYPT FILE SYSTEM |
| 2296 | 2303 | M: Tyler Hicks <tyhicks@linux.vnet.ibm.com> |
| 2297 | 2304 | M: Dustin Kirkland <kirkland@canonical.com> |
| 2298 | −L: ecryptfs-devel@lists.launchpad.net | |
| 2305 | +L: ecryptfs@vger.kernel.org | |
| 2299 | 2306 | W: https://launchpad.net/ecryptfs |
| 2300 | 2307 | S: Supported |
| 2301 | 2308 | F: Documentation/filesystems/ecryptfs.txt |
| @@ -2575,6 +2582,13 @@ S: Maintained · 273 unmodified lines | ||
| 2575 | 2582 | F: drivers/hwmon/f75375s.c |
| 2576 | 2583 | F: include/linux/f75375s.h |
| 2577 | 2584 | |
| 2585 | +FIREWIRE AUDIO DRIVERS | |
| 2586 | +M: Clemens Ladisch <clemens@ladisch.de> | |
| 2587 | +L: alsa-devel@alsa-project.org (moderated for non-subscribers) | |
| 2588 | +T: git git://git.alsa-project.org/alsa-kernel.git | |
| 2589 | +S: Maintained | |
| 2590 | +F: sound/firewire/ | |
| 2591 | + | |
| 2578 | 2592 | FIREWIRE SUBSYSTEM |
| 2579 | 2593 | M: Stefan Richter <stefanr@s5r6.in-berlin.de> |
| 2580 | 2594 | L: linux1394-devel@lists.sourceforge.net |
| @@ -2802,42 +2816,23 @@ GPIO SUBSYSTEM · 221 unmodified lines | ||
| 2802 | 2816 | M: Grant Likely <grant.likely@secretlab.ca> |
| 2803 | 2817 | S: Maintained |
| 2804 | 2818 | T: git git://git.secretlab.ca/git/linux-2.6.git |
| 2805 | −F: Documentation/gpio/gpio.txt | |
| 2819 | +F: Documentation/gpio.txt | |
| 2806 | 2820 | F: drivers/gpio/ |
| 2807 | 2821 | F: include/linux/gpio* |
| 2808 | 2822 | |
| 2823 | +GRE DEMULTIPLEXER DRIVER | |
| 2824 | +M: Dmitry Kozlov <xeb@mail.ru> | |
| 2825 | +L: netdev@vger.kernel.org | |
| 2826 | +S: Maintained | |
| 2827 | +F: net/ipv4/gre.c | |
| 2828 | +F: include/net/gre.h | |
| 2829 | + | |
| 2809 | 2830 | GRETH 10/100/1G Ethernet MAC device driver |
| 2810 | 2831 | M: Kristoffer Glembo <kristoffer@gaisler.com> |
| 2811 | 2832 | L: netdev@vger.kernel.org |
| 2812 | 2833 | S: Maintained |
| 2813 | 2834 | F: drivers/net/greth* |
| 2814 | 2835 | |
| 2815 | −HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER | |
| 2816 | −M: Frank Seidel <frank@f-seidel.de> | |
| 2817 | −L: platform-driver-x86@vger.kernel.org | |
| 2818 | −W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/ | |
| 2819 | −S: Maintained | |
| 2820 | −F: drivers/platform/x86/hdaps.c | |
| 2821 | − | |
| 2822 | −HWPOISON MEMORY FAILURE HANDLING | |
| 2823 | −M: Andi Kleen <andi@firstfloor.org> | |
| 2824 | −L: linux-mm@kvack.org | |
| 2825 | −T: git git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6.git hwpoison | |
| 2826 | −S: Maintained | |
| 2827 | −F: mm/memory-failure.c | |
| 2828 | −F: mm/hwpoison-inject.c | |
| 2829 | − | |
| 2830 | −HYPERVISOR VIRTUAL CONSOLE DRIVER | |
| 2831 | −L: linuxppc-dev@lists.ozlabs.org | |
| 2832 | −S: Odd Fixes | |
| 2833 | −F: drivers/tty/hvc/ | |
| 2834 | − | |
| 2835 | −iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER | |
| 2836 | −M: Peter Jones <pjones@redhat.com> | |
| 2837 | −M: Konrad Rzeszutek Wilk <konrad@kernel.org> | |
| 2838 | −S: Maintained | |
| 2839 | −F: drivers/firmware/iscsi_ibft* | |
| 2840 | − | |
| 2841 | 2836 | GSPCA FINEPIX SUBDRIVER |
| 2842 | 2837 | M: Frank Zago <frank@zago.net> |
| 2843 | 2838 | L: linux-media@vger.kernel.org |
| @@ -2888,6 +2883,26 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git · 44 unmodified lines | ||
| 2888 | 2883 | S: Maintained |
| 2889 | 2884 | F: drivers/media/video/gspca/ |
| 2890 | 2885 | |
| 2886 | +HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER | |
| 2887 | +M: Frank Seidel <frank@f-seidel.de> | |
| 2888 | +L: platform-driver-x86@vger.kernel.org | |
| 2889 | +W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/ | |
| 2890 | +S: Maintained | |
| 2891 | +F: drivers/platform/x86/hdaps.c | |
| 2892 | + | |
| 2893 | +HWPOISON MEMORY FAILURE HANDLING | |
| 2894 | +M: Andi Kleen <andi@firstfloor.org> | |
| 2895 | +L: linux-mm@kvack.org | |
| 2896 | +T: git git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6.git hwpoison | |
| 2897 | +S: Maintained | |
| 2898 | +F: mm/memory-failure.c | |
| 2899 | +F: mm/hwpoison-inject.c | |
| 2900 | + | |
| 2901 | +HYPERVISOR VIRTUAL CONSOLE DRIVER | |
| 2902 | +L: linuxppc-dev@lists.ozlabs.org | |
| 2903 | +S: Odd Fixes | |
| 2904 | +F: drivers/tty/hvc/ | |
| 2905 | + | |
| 2891 | 2906 | HARDWARE MONITORING |
| 2892 | 2907 | M: Jean Delvare <khali@linux-fr.org> |
| 2893 | 2908 | M: Guenter Roeck <guenter.roeck@ericsson.com> |
| @@ -2938,8 +2953,8 @@ F: drivers/block/cciss* · 44 unmodified lines | ||
| 2938 | 2953 | F: include/linux/cciss_ioctl.h |
| 2939 | 2954 | |
| 2940 | 2955 | HFS FILESYSTEM |
| 2941 | −M: Roman Zippel <zippel@linux-m68k.org> | |
| 2942 | −S: Maintained | |
| 2956 | +L: linux-fsdevel@vger.kernel.org | |
| 2957 | +S: Orphan | |
| 2943 | 2958 | F: Documentation/filesystems/hfs.txt |
| 2944 | 2959 | F: fs/hfs/ |
| 2945 | 2960 | |
| @@ -3014,9 +3029,8 @@ S: Maintained · 68 unmodified lines | ||
| 3014 | 3029 | F: drivers/net/wireless/hostap/ |
| 3015 | 3030 | |
| 3016 | 3031 | HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER |
| 3017 | −M: Carlos Corbacho <carlos@strangeworlds.co.uk> | |
| 3018 | 3032 | L: platform-driver-x86@vger.kernel.org |
| 3019 | −S: Odd Fixes | |
| 3033 | +S: Orphan | |
| 3020 | 3034 | F: drivers/platform/x86/tc1100-wmi.c |
| 3021 | 3035 | |
| 3022 | 3036 | HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series |
| @@ -3355,6 +3369,12 @@ F: Documentation/wimax/README.i2400m · 332 unmodified lines | ||
| 3355 | 3369 | F: drivers/net/wimax/i2400m/ |
| 3356 | 3370 | F: include/linux/wimax/i2400m.h |
| 3357 | 3371 | |
| 3372 | +INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) | |
| 3373 | +M: Stanislaw Gruszka <sgruszka@redhat.com> | |
| 3374 | +L: linux-wireless@vger.kernel.org | |
| 3375 | +S: Supported | |
| 3376 | +F: drivers/net/wireless/iwlegacy/ | |
| 3377 | + | |
| 3358 | 3378 | INTEL WIRELESS WIFI LINK (iwlwifi) |
| 3359 | 3379 | M: Wey-Yi Guy <wey-yi.w.guy@intel.com> |
| 3360 | 3380 | M: Intel Linux Wireless <ilw@linux.intel.com> |
| @@ -3471,6 +3491,12 @@ F: Documentation/isapnp.txt · 110 unmodified lines | ||
| 3471 | 3491 | F: drivers/pnp/isapnp/ |
| 3472 | 3492 | F: include/linux/isapnp.h |
| 3473 | 3493 | |
| 3494 | +iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER | |
| 3495 | +M: Peter Jones <pjones@redhat.com> | |
| 3496 | +M: Konrad Rzeszutek Wilk <konrad@kernel.org> | |
| 3497 | +S: Maintained | |
| 3498 | +F: drivers/firmware/iscsi_ibft* | |
| 3499 | + | |
| 3474 | 3500 | ISCSI |
| 3475 | 3501 | M: Mike Christie <michaelc@cs.wisc.edu> |
| 3476 | 3502 | L: open-iscsi@googlegroups.com |
| @@ -3552,9 +3578,16 @@ M: Andrew Morton <akpm@linux-foundation.org> · 75 unmodified lines | ||
| 3552 | 3578 | M: Jan Kara <jack@suse.cz> |
| 3553 | 3579 | L: linux-ext4@vger.kernel.org |
| 3554 | 3580 | S: Maintained |
| 3555 | −F: fs/jbd*/ | |
| 3556 | −F: include/linux/ext*jbd*.h | |
| 3557 | −F: include/linux/jbd*.h | |
| 3581 | +F: fs/jbd/ | |
| 3582 | +F: include/linux/ext3_jbd.h | |
| 3583 | +F: include/linux/jbd.h | |
| 3584 | + | |
| 3585 | +JOURNALLING LAYER FOR BLOCK DEVICES (JBD2) | |
| 3586 | +M: "Theodore Ts'o" <tytso@mit.edu> | |
| 3587 | +L: linux-ext4@vger.kernel.org | |
| 3588 | +S: Maintained | |
| 3589 | +F: fs/jbd2/ | |
| 3590 | +F: include/linux/jbd2.h | |
| 3558 | 3591 | |
| 3559 | 3592 | JSM Neo PCI based serial card |
| 3560 | 3593 | M: Breno Leitao <leitao@linux.vnet.ibm.com> |
| @@ -3577,10 +3610,9 @@ F: Documentation/hwmon/k8temp · 16 unmodified lines | ||
| 3577 | 3610 | F: drivers/hwmon/k8temp.c |
| 3578 | 3611 | |
| 3579 | 3612 | KCONFIG |
| 3580 | −M: Roman Zippel <zippel@linux-m68k.org> | |
| 3613 | +M: Michal Marek <mmarek@suse.cz> | |
| 3581 | 3614 | L: linux-kbuild@vger.kernel.org |
| 3582 | −Q: http://patchwork.kernel.org/project/linux-kbuild/list/ | |
| 3583 | −S: Maintained | |
| 3615 | +S: Odd Fixes | |
| 3584 | 3616 | F: Documentation/kbuild/kconfig-language.txt |
| 3585 | 3617 | F: scripts/kconfig/ |
| 3586 | 3618 | |
| @@ -3691,7 +3723,7 @@ KEYS/KEYRINGS: · 104 unmodified lines | ||
| 3691 | 3723 | M: David Howells <dhowells@redhat.com> |
| 3692 | 3724 | L: keyrings@linux-nfs.org |
| 3693 | 3725 | S: Maintained |
| 3694 | −F: Documentation/keys.txt | |
| 3726 | +F: Documentation/security/keys.txt | |
| 3695 | 3727 | F: include/linux/key.h |
| 3696 | 3728 | F: include/linux/key-type.h |
| 3697 | 3729 | F: include/keys/ |
| @@ -3703,7 +3735,7 @@ M: Mimi Zohar <zohar@us.ibm.com> · 5 unmodified lines | ||
| 3703 | 3735 | L: linux-security-module@vger.kernel.org |
| 3704 | 3736 | L: keyrings@linux-nfs.org |
| 3705 | 3737 | S: Supported |
| 3706 | −F: Documentation/keys-trusted-encrypted.txt | |
| 3738 | +F: Documentation/security/keys-trusted-encrypted.txt | |
| 3707 | 3739 | F: include/keys/trusted-type.h |
| 3708 | 3740 | F: security/keys/trusted.c |
| 3709 | 3741 | F: security/keys/trusted.h |
| @@ -3714,7 +3746,7 @@ M: David Safford <safford@watson.ibm.com> · 4 unmodified lines | ||
| 3714 | 3746 | L: linux-security-module@vger.kernel.org |
| 3715 | 3747 | L: keyrings@linux-nfs.org |
| 3716 | 3748 | S: Supported |
| 3717 | −F: Documentation/keys-trusted-encrypted.txt | |
| 3749 | +F: Documentation/security/keys-trusted-encrypted.txt | |
| 3718 | 3750 | F: include/keys/encrypted-type.h |
| 3719 | 3751 | F: security/keys/encrypted.c |
| 3720 | 3752 | F: security/keys/encrypted.h |
| @@ -3800,7 +3832,7 @@ M: Rusty Russell <rusty@rustcorp.com.au> · 79 unmodified lines | ||
| 3800 | 3832 | L: lguest@lists.ozlabs.org |
| 3801 | 3833 | W: http://lguest.ozlabs.org/ |
| 3802 | 3834 | S: Odd Fixes |
| 3803 | −F: Documentation/lguest/ | |
| 3835 | +F: Documentation/virtual/lguest/ | |
| 3804 | 3836 | F: arch/x86/lguest/ |
| 3805 | 3837 | F: drivers/lguest/ |
| 3806 | 3838 | F: include/linux/lguest*.h |
| @@ -3884,7 +3916,6 @@ F: drivers/*/*/*pasemi* · 77 unmodified lines | ||
| 3884 | 3916 | LINUX SECURITY MODULE (LSM) FRAMEWORK |
| 3885 | 3917 | M: Chris Wright <chrisw@sous-sol.org> |
| 3886 | 3918 | L: linux-security-module@vger.kernel.org |
| 3887 | −T: git git://git.kernel.org/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git | |
| 3888 | 3919 | S: Supported |
| 3889 | 3920 | |
| 3890 | 3921 | LIS3LV02D ACCELEROMETER DRIVER |
| @@ -3987,7 +4018,6 @@ F: arch/m32r/ · 96 unmodified lines | ||
| 3987 | 4018 | |
| 3988 | 4019 | M68K ARCHITECTURE |
| 3989 | 4020 | M: Geert Uytterhoeven <geert@linux-m68k.org> |
| 3990 | −M: Roman Zippel <zippel@linux-m68k.org> | |
| 3991 | 4021 | L: linux-m68k@lists.linux-m68k.org |
| 3992 | 4022 | W: http://www.linux-m68k.org/ |
| 3993 | 4023 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git |
| @@ -4077,7 +4107,7 @@ F: drivers/video/matrox/matroxfb_* · 83 unmodified lines | ||
| 4077 | 4107 | F: include/linux/matroxfb.h |
| 4078 | 4108 | |
| 4079 | 4109 | MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER |
| 4080 | −M: "Hans J. Koch" <hjk@linutronix.de> | |
| 4110 | +M: "Hans J. Koch" <hjk@hansjkoch.de> | |
| 4081 | 4111 | L: lm-sensors@lm-sensors.org |
| 4082 | 4112 | S: Maintained |
| 4083 | 4113 | F: Documentation/hwmon/max6650 |
| @@ -4121,6 +4151,7 @@ M: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> · 37 unmodified lines | ||
| 4121 | 4151 | L: linux-mm@kvack.org |
| 4122 | 4152 | S: Maintained |
| 4123 | 4153 | F: mm/memcontrol.c |
| 4154 | +F: mm/page_cgroup.c | |
| 4124 | 4155 | |
| 4125 | 4156 | MEMORY TECHNOLOGY DEVICES (MTD) |
| 4126 | 4157 | M: David Woodhouse <dwmw2@infradead.org> |
| @@ -4192,7 +4223,7 @@ MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD · 65 unmodified lines | ||
| 4192 | 4223 | M: Jiri Slaby <jirislaby@gmail.com> |
| 4193 | 4224 | S: Maintained |
| 4194 | 4225 | F: Documentation/serial/moxa-smartio |
| 4195 | −F: drivers/char/mxser.* | |
| 4226 | +F: drivers/tty/mxser.* | |
| 4196 | 4227 | |
| 4197 | 4228 | MSI LAPTOP SUPPORT |
| 4198 | 4229 | M: "Lee, Chun-Yi" <jlee@novell.com> |
| @@ -4234,13 +4265,13 @@ F: sound/oss/msnd* · 35 unmodified lines | ||
| 4234 | 4265 | |
| 4235 | 4266 | MULTITECH MULTIPORT CARD (ISICOM) |
| 4236 | 4267 | S: Orphan |
| 4237 | −F: drivers/char/isicom.c | |
| 4268 | +F: drivers/tty/isicom.c | |
| 4238 | 4269 | F: include/linux/isicom.h |
| 4239 | 4270 | |
| 4240 | 4271 | MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER |
| 4241 | 4272 | M: Felipe Balbi <balbi@ti.com> |
| 4242 | 4273 | L: linux-usb@vger.kernel.org |
| 4243 | −T: git git://gitorious.org/usb/usb.git | |
| 4274 | +T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git | |
| 4244 | 4275 | S: Maintained |
| 4245 | 4276 | F: drivers/usb/musb/ |
| 4246 | 4277 | |
| @@ -4257,6 +4288,13 @@ M: Tim Hockin <thockin@hockin.org> · 10 unmodified lines | ||
| 4257 | 4288 | S: Maintained |
| 4258 | 4289 | F: drivers/net/natsemi.c |
| 4259 | 4290 | |
| 4291 | +NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER | |
| 4292 | +M: Daniel Mack <zonque@gmail.com> | |
| 4293 | +S: Maintained | |
| 4294 | +L: alsa-devel@alsa-project.org | |
| 4295 | +W: http://www.native-instruments.com | |
| 4296 | +F: sound/usb/caiaq/ | |
| 4297 | + | |
| 4260 | 4298 | NCP FILESYSTEM |
| 4261 | 4299 | M: Petr Vandrovec <petr@vandrovec.name> |
| 4262 | 4300 | S: Odd Fixes |
| @@ -4372,6 +4410,7 @@ S: Maintained · 109 unmodified lines | ||
| 4372 | 4410 | F: net/ipv4/ |
| 4373 | 4411 | F: net/ipv6/ |
| 4374 | 4412 | F: include/net/ip* |
| 4413 | +F: arch/x86/net/* | |
| 4375 | 4414 | |
| 4376 | 4415 | NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK) |
| 4377 | 4416 | M: Paul Moore <paul.moore@hp.com> |
| @@ -4567,6 +4606,7 @@ M: Felipe Balbi <balbi@ti.com> · 189 unmodified lines | ||
| 4567 | 4606 | M: David Brownell <dbrownell@users.sourceforge.net> |
| 4568 | 4607 | L: linux-usb@vger.kernel.org |
| 4569 | 4608 | L: linux-omap@vger.kernel.org |
| 4609 | +T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git | |
| 4570 | 4610 | S: Maintained |
| 4571 | 4611 | F: drivers/usb/*/*omap* |
| 4572 | 4612 | F: arch/arm/*omap*/usb* |
| @@ -4982,6 +5022,13 @@ F: Documentation/pps/ · 409 unmodified lines | ||
| 4982 | 5022 | F: drivers/pps/ |
| 4983 | 5023 | F: include/linux/pps*.h |
| 4984 | 5024 | |
| 5025 | +PPTP DRIVER | |
| 5026 | +M: Dmitry Kozlov <xeb@mail.ru> | |
| 5027 | +L: netdev@vger.kernel.org | |
| 5028 | +S: Maintained | |
| 5029 | +F: drivers/net/pptp.c | |
| 5030 | +W: http://sourceforge.net/projects/accel-pptp | |
| 5031 | + | |
| 4985 | 5032 | PREEMPTIBLE KERNEL |
| 4986 | 5033 | M: Robert Love <rml@tech9.net> |
| 4987 | 5034 | L: kpreempt-tech@lists.sourceforge.net |
| @@ -5273,14 +5320,14 @@ F: drivers/memstick/host/r592.* · 285 unmodified lines | ||
| 5273 | 5320 | RISCOM8 DRIVER |
| 5274 | 5321 | S: Orphan |
| 5275 | 5322 | F: Documentation/serial/riscom8.txt |
| 5276 | −F: drivers/char/riscom8* | |
| 5323 | +F: drivers/staging/tty/riscom8* | |
| 5277 | 5324 | |
| 5278 | 5325 | ROCKETPORT DRIVER |
| 5279 | 5326 | P: Comtrol Corp. |
| 5280 | 5327 | W: http://www.comtrol.com |
| 5281 | 5328 | S: Maintained |
| 5282 | 5329 | F: Documentation/serial/rocket.txt |
| 5283 | −F: drivers/char/rocket* | |
| 5330 | +F: drivers/tty/rocket* | |
| 5284 | 5331 | |
| 5285 | 5332 | ROSE NETWORK LAYER |
| 5286 | 5333 | M: Ralf Baechle <ralf@linux-mips.org> |
| @@ -5390,7 +5437,7 @@ F: drivers/media/video/*7146* · 103 unmodified lines | ||
| 5390 | 5437 | F: include/media/*7146* |
| 5391 | 5438 | |
| 5392 | 5439 | SAMSUNG AUDIO (ASoC) DRIVERS |
| 5393 | −M: Jassi Brar <jassi.brar@samsung.com> | |
| 5440 | +M: Jassi Brar <jassisinghbrar@gmail.com> | |
| 5394 | 5441 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
| 5395 | 5442 | S: Supported |
| 5396 | 5443 | F: sound/soc/samsung |
| @@ -5401,6 +5448,13 @@ L: linux-serial@vger.kernel.org · 4 unmodified lines | ||
| 5401 | 5448 | S: Maintained |
| 5402 | 5449 | F: drivers/tty/serial |
| 5403 | 5450 | |
| 5451 | +SYNOPSYS DESIGNWARE DMAC DRIVER | |
| 5452 | +M: Viresh Kumar <viresh.kumar@st.com> | |
| 5453 | +S: Maintained | |
| 5454 | +F: include/linux/dw_dmac.h | |
| 5455 | +F: drivers/dma/dw_dmac_regs.h | |
| 5456 | +F: drivers/dma/dw_dmac.c | |
| 5457 | + | |
| 5404 | 5458 | TIMEKEEPING, NTP |
| 5405 | 5459 | M: John Stultz <johnstul@us.ibm.com> |
| 5406 | 5460 | M: Thomas Gleixner <tglx@linutronix.de> |
| @@ -5411,6 +5465,7 @@ F: include/linux/timex.h · 4 unmodified lines | ||
| 5411 | 5465 | F: kernel/time/clocksource.c |
| 5412 | 5466 | F: kernel/time/time*.c |
| 5413 | 5467 | F: kernel/time/ntp.c |
| 5468 | +F: drivers/clocksource | |
| 5414 | 5469 | |
| 5415 | 5470 | TLG2300 VIDEO4LINUX-2 DRIVER |
| 5416 | 5471 | M: Huang Shijie <shijie8@gmail.com> |
| @@ -5464,7 +5519,7 @@ F: drivers/scsi/sg.c · 47 unmodified lines | ||
| 5464 | 5519 | F: include/scsi/sg.h |
| 5465 | 5520 | |
| 5466 | 5521 | SCSI SUBSYSTEM |
| 5467 | −M: "James E.J. Bottomley" <James.Bottomley@suse.de> | |
| 5522 | +M: "James E.J. Bottomley" <JBottomley@parallels.com> | |
| 5468 | 5523 | L: linux-scsi@vger.kernel.org |
| 5469 | 5524 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git |
| 5470 | 5525 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git |
| @@ -5562,10 +5617,11 @@ M: James Morris <jmorris@namei.org> · 91 unmodified lines | ||
| 5562 | 5617 | M: Eric Paris <eparis@parisplace.org> |
| 5563 | 5618 | L: selinux@tycho.nsa.gov (subscribers-only, general discussion) |
| 5564 | 5619 | W: http://selinuxproject.org |
| 5565 | −T: git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git | |
| 5620 | +T: git git://git.infradead.org/users/eparis/selinux.git | |
| 5566 | 5621 | S: Supported |
| 5567 | 5622 | F: include/linux/selinux* |
| 5568 | 5623 | F: security/selinux/ |
| 5624 | +F: scripts/selinux/ | |
| 5569 | 5625 | |
| 5570 | 5626 | APPARMOR SECURITY MODULE |
| 5571 | 5627 | M: John Johansen <john.johansen@canonical.com> |
| @@ -5591,9 +5647,9 @@ F: include/linux/ata.h · 19 unmodified lines | ||
| 5591 | 5647 | F: include/linux/libata.h |
| 5592 | 5648 | |
| 5593 | 5649 | SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER |
| 5594 | −M: Jayamohan Kallickal <jayamohank@serverengines.com> | |
| 5650 | +M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> | |
| 5595 | 5651 | L: linux-scsi@vger.kernel.org |
| 5596 | −W: http://www.serverengines.com | |
| 5652 | +W: http://www.emulex.com | |
| 5597 | 5653 | S: Supported |
| 5598 | 5654 | F: drivers/scsi/be2iscsi/ |
| 5599 | 5655 | |
| @@ -5811,6 +5867,13 @@ S: Maintained · 211 unmodified lines | ||
| 5811 | 5867 | F: drivers/ssb/ |
| 5812 | 5868 | F: include/linux/ssb/ |
| 5813 | 5869 | |
| 5870 | +BROADCOM SPECIFIC AMBA DRIVER (BCMA) | |
| 5871 | +M: Rafał Miłecki <zajec5@gmail.com> | |
| 5872 | +L: linux-wireless@vger.kernel.org | |
| 5873 | +S: Maintained | |
| 5874 | +F: drivers/bcma/ | |
| 5875 | +F: include/linux/bcma/ | |
| 5876 | + | |
| 5814 | 5877 | SONY VAIO CONTROL DEVICE DRIVER |
| 5815 | 5878 | M: Mattia Dongili <malattia@linux.it> |
| 5816 | 5879 | L: platform-driver-x86@vger.kernel.org |
| @@ -5840,7 +5903,7 @@ F: include/sound/ · 23 unmodified lines | ||
| 5840 | 5903 | F: sound/ |
| 5841 | 5904 | |
| 5842 | 5905 | SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) |
| 5843 | −M: Liam Girdwood <lrg@slimlogic.co.uk> | |
| 5906 | +M: Liam Girdwood <lrg@ti.com> | |
| 5844 | 5907 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> |
| 5845 | 5908 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound-2.6.git |
| 5846 | 5909 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
| @@ -5916,10 +5979,9 @@ F: arch/arm/mach-spear6xx/spear600.c · 69 unmodified lines | ||
| 5916 | 5979 | F: arch/arm/mach-spear6xx/spear600_evb.c |
| 5917 | 5980 | |
| 5918 | 5981 | SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER |
| 5919 | −M: Roger Wolff <R.E.Wolff@BitWizard.nl> | |
| 5920 | −S: Supported | |
| 5982 | +S: Orphan | |
| 5921 | 5983 | F: Documentation/serial/specialix.txt |
| 5922 | −F: drivers/char/specialix* | |
| 5984 | +F: drivers/staging/tty/specialix* | |
| 5923 | 5985 | |
| 5924 | 5986 | SPI SUBSYSTEM |
| 5925 | 5987 | M: David Brownell <dbrownell@users.sourceforge.net> |
| @@ -5950,7 +6012,7 @@ F: Documentation/filesystems/spufs.txt · 24 unmodified lines | ||
| 5950 | 6012 | F: arch/powerpc/platforms/cell/spufs/ |
| 5951 | 6013 | |
| 5952 | 6014 | SQUASHFS FILE SYSTEM |
| 5953 | −M: Phillip Lougher <phillip@lougher.demon.co.uk> | |
| 6015 | +M: Phillip Lougher <phillip@squashfs.org.uk> | |
| 5954 | 6016 | L: squashfs-devel@lists.sourceforge.net (subscribers-only) |
| 5955 | 6017 | W: http://squashfs.org.uk |
| 5956 | 6018 | S: Maintained |
| @@ -5964,7 +6026,6 @@ F: arch/alpha/kernel/srm_env.c · 7 unmodified lines | ||
| 5964 | 6026 | |
| 5965 | 6027 | STABLE BRANCH |
| 5966 | 6028 | M: Greg Kroah-Hartman <greg@kroah.com> |
| 5967 | −M: Chris Wright <chrisw@sous-sol.org> | |
| 5968 | 6029 | L: stable@kernel.org |
| 5969 | 6030 | S: Maintained |
| 5970 | 6031 | |
| @@ -6027,6 +6088,17 @@ F: Documentation/filesystems/sysv-fs.txt · 56 unmodified lines | ||
| 6027 | 6088 | F: fs/sysv/ |
| 6028 | 6089 | F: include/linux/sysv_fs.h |
| 6029 | 6090 | |
| 6091 | +TARGET SUBSYSTEM | |
| 6092 | +M: Nicholas A. Bellinger <nab@linux-iscsi.org> | |
| 6093 | +L: linux-scsi@vger.kernel.org | |
| 6094 | +L: http://groups.google.com/group/linux-iscsi-target-dev | |
| 6095 | +W: http://www.linux-iscsi.org | |
| 6096 | +T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core-2.6.git master | |
| 6097 | +S: Supported | |
| 6098 | +F: drivers/target/ | |
| 6099 | +F: include/target/ | |
| 6100 | +F: Documentation/target/ | |
| 6101 | + | |
| 6030 | 6102 | TASKSTATS STATISTICS INTERFACE |
| 6031 | 6103 | M: Balbir Singh <balbir@linux.vnet.ibm.com> |
| 6032 | 6104 | S: Maintained |
| @@ -6093,7 +6165,7 @@ F: drivers/mmc/host/tifm_sd.c · 60 unmodified lines | ||
| 6093 | 6165 | F: include/linux/tifm.h |
| 6094 | 6166 | |
| 6095 | 6167 | TI TWL4030 SERIES SOC CODEC DRIVER |
| 6096 | −M: Peter Ujfalusi <peter.ujfalusi@nokia.com> | |
| 6168 | +M: Peter Ujfalusi <peter.ujfalusi@ti.com> | |
| 6097 | 6169 | L: alsa-devel@alsa-project.org (moderated for non-subscribers) |
| 6098 | 6170 | S: Maintained |
| 6099 | 6171 | F: sound/soc/codecs/twl4030* |
| @@ -6196,6 +6268,7 @@ TRIVIAL PATCHES · 96 unmodified lines | ||
| 6196 | 6268 | M: Jiri Kosina <trivial@kernel.org> |
| 6197 | 6269 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git |
| 6198 | 6270 | S: Maintained |
| 6271 | +K: ^Subject:.*(?i)trivial | |
| 6199 | 6272 | |
| 6200 | 6273 | TTY LAYER |
| 6201 | 6274 | M: Greg Kroah-Hartman <gregkh@suse.de> |
| @@ -6248,7 +6321,8 @@ M: Greg Ungerer <gerg@uclinux.org> · 46 unmodified lines | ||
| 6248 | 6321 | W: http://www.uclinux.org/ |
| 6249 | 6322 | L: uclinux-dev@uclinux.org (subscribers-only) |
| 6250 | 6323 | S: Maintained |
| 6251 | −F: arch/m68knommu/ | |
| 6324 | +F: arch/m68k/*/*_no.* | |
| 6325 | +F: arch/m68k/include/asm/*_no.* | |
| 6252 | 6326 | |
| 6253 | 6327 | UCLINUX FOR RENESAS H8/300 (H8300) |
| 6254 | 6328 | M: Yoshinori Sato <ysato@users.sourceforge.jp> |
| @@ -6550,7 +6624,7 @@ S: Maintained · 295 unmodified lines | ||
| 6550 | 6624 | F: drivers/usb/host/uhci* |
| 6551 | 6625 | |
| 6552 | 6626 | USB "USBNET" DRIVER FRAMEWORK |
| 6553 | −M: David Brownell <dbrownell@users.sourceforge.net> | |
| 6627 | +M: Oliver Neukum <oneukum@suse.de> | |
| 6554 | 6628 | L: netdev@vger.kernel.org |
| 6555 | 6629 | W: http://www.linux-usb.org/usbnet |
| 6556 | 6630 | S: Maintained |
| @@ -6612,13 +6686,13 @@ L: user-mode-linux-devel@lists.sourceforge.net · 55 unmodified lines | ||
| 6612 | 6686 | L: user-mode-linux-user@lists.sourceforge.net |
| 6613 | 6687 | W: http://user-mode-linux.sourceforge.net |
| 6614 | 6688 | S: Maintained |
| 6615 | −F: Documentation/uml/ | |
| 6689 | +F: Documentation/virtual/uml/ | |
| 6616 | 6690 | F: arch/um/ |
| 6617 | 6691 | F: fs/hostfs/ |
| 6618 | 6692 | F: fs/hppfs/ |
| 6619 | 6693 | |
| 6620 | 6694 | USERSPACE I/O (UIO) |
| 6621 | −M: "Hans J. Koch" <hjk@linutronix.de> | |
| 6695 | +M: "Hans J. Koch" <hjk@hansjkoch.de> | |
| 6622 | 6696 | M: Greg Kroah-Hartman <gregkh@suse.de> |
| 6623 | 6697 | S: Maintained |
| 6624 | 6698 | F: Documentation/DocBook/uio-howto.tmpl |
| @@ -6736,7 +6810,7 @@ F: drivers/scsi/vmw_pvscsi.c · 111 unmodified lines | ||
| 6736 | 6810 | F: drivers/scsi/vmw_pvscsi.h |
| 6737 | 6811 | |
| 6738 | 6812 | VOLTAGE AND CURRENT REGULATOR FRAMEWORK |
| 6739 | −M: Liam Girdwood <lrg@slimlogic.co.uk> | |
| 6813 | +M: Liam Girdwood <lrg@ti.com> | |
| 6740 | 6814 | M: Mark Brown <broonie@opensource.wolfsonmicro.com> |
| 6741 | 6815 | W: http://opensource.wolfsonmicro.com/node/15 |
| 6742 | 6816 | W: http://www.slimlogic.co.uk/?p=48 |
| @@ -6758,6 +6832,13 @@ L: lm-sensors@lm-sensors.org · 15 unmodified lines | ||
| 6758 | 6832 | S: Maintained |
| 6759 | 6833 | F: drivers/hwmon/vt8231.c |
| 6760 | 6834 | |
| 6835 | +VUB300 USB to SDIO/SD/MMC bridge chip | |
| 6836 | +M: Tony Olech <tony.olech@elandigitalsystems.com> | |
| 6837 | +L: linux-mmc@vger.kernel.org | |
| 6838 | +L: linux-usb@vger.kernel.org | |
| 6839 | +S: Supported | |
| 6840 | +F: drivers/mmc/host/vub300.c | |
| 6841 | + | |
| 6761 | 6842 | W1 DALLAS'S 1-WIRE BUS |
| 6762 | 6843 | M: Evgeniy Polyakov <johnpol@2ka.mipt.ru> |
| 6763 | 6844 | S: Maintained |
| @@ -6916,6 +6997,25 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86. · 152 unmodified lines | ||
| 6916 | 6997 | S: Maintained |
| 6917 | 6998 | F: drivers/platform/x86 |
| 6918 | 6999 | |
| 7000 | +XEN HYPERVISOR INTERFACE | |
| 7001 | +M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | |
| 7002 | +M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | |
| 7003 | +L: xen-devel@lists.xensource.com (moderated for non-subscribers) | |
| 7004 | +L: virtualization@lists.linux-foundation.org | |
| 7005 | +S: Supported | |
| 7006 | +F: arch/x86/xen/ | |
| 7007 | +F: drivers/*/xen-*front.c | |
| 7008 | +F: drivers/xen/ | |
| 7009 | +F: arch/x86/include/asm/xen/ | |
| 7010 | +F: include/xen/ | |
| 7011 | + | |
| 7012 | +XEN NETWORK BACKEND DRIVER | |
| 7013 | +M: Ian Campbell <ian.campbell@citrix.com> | |
| 7014 | +L: xen-devel@lists.xensource.com (moderated for non-subscribers) | |
| 7015 | +L: netdev@vger.kernel.org | |
| 7016 | +S: Supported | |
| 7017 | +F: drivers/net/xen-netback/* | |
| 7018 | + | |
| 6919 | 7019 | XEN PCI SUBSYSTEM |
| 6920 | 7020 | M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| 6921 | 7021 | L: xen-devel@lists.xensource.com (moderated for non-subscribers) |
| @@ -6930,18 +7030,6 @@ S: Supported · 8 unmodified lines | ||
| 6930 | 7030 | F: arch/x86/xen/*swiotlb* |
| 6931 | 7031 | F: drivers/xen/*swiotlb* |
| 6932 | 7032 | |
| 6933 | −XEN HYPERVISOR INTERFACE | |
| 6934 | −M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | |
| 6935 | −M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | |
| 6936 | −L: xen-devel@lists.xensource.com (moderated for non-subscribers) | |
| 6937 | −L: virtualization@lists.linux-foundation.org | |
| 6938 | −S: Supported | |
| 6939 | −F: arch/x86/xen/ | |
| 6940 | −F: drivers/*/xen-*front.c | |
| 6941 | −F: drivers/xen/ | |
| 6942 | −F: arch/x86/include/asm/xen/ | |
| 6943 | −F: include/xen/ | |
| 6944 | − | |
| 6945 | 7033 | XFS FILESYSTEM |
| 6946 | 7034 | P: Silicon Graphics Inc |
| 6947 | 7035 | M: Alex Elder <aelder@sgi.com> |
| @@ -7011,20 +7099,6 @@ M: "Maciej W. Rozycki" <macro@linux-mips.org> · 63 unmodified lines | ||
| 7011 | 7099 | S: Maintained |
| 7012 | 7100 | F: drivers/tty/serial/zs.* |
| 7013 | 7101 | |
| 7014 | −GRE DEMULTIPLEXER DRIVER | |
| 7015 | −M: Dmitry Kozlov <xeb@mail.ru> | |
| 7016 | −L: netdev@vger.kernel.org | |
| 7017 | −S: Maintained | |
| 7018 | −F: net/ipv4/gre.c | |
| 7019 | −F: include/net/gre.h | |
| 7020 | − | |
| 7021 | −PPTP DRIVER | |
| 7022 | −M: Dmitry Kozlov <xeb@mail.ru> | |
| 7023 | −L: netdev@vger.kernel.org | |
| 7024 | −S: Maintained | |
| 7025 | −F: drivers/net/pptp.c | |
| 7026 | −W: http://sourceforge.net/projects/accel-pptp | |
| 7027 | − | |
| 7028 | 7102 | THE REST |
| 7029 | 7103 | M: Linus Torvalds <torvalds@linux-foundation.org> |
| 7030 | 7104 | L: linux-kernel@vger.kernel.org |
| @@ -1,8 +1,8 @@ | ||
| 1 | −VERSION = 2 | |
| 2 | −PATCHLEVEL = 6 | |
| 3 | −SUBLEVEL = 39 | |
| 1 | +VERSION = 3 | |
| 2 | +PATCHLEVEL = 0 | |
| 3 | +SUBLEVEL = 0 | |
| 4 | 4 | EXTRAVERSION = -rc1 |
| 5 | −NAME = Flesh-Eating Bats with Fangs | |
| 5 | +NAME = Sneaky Weasel | |
| 6 | 6 | |
| 7 | 7 | # *DOCUMENTATION* |
| 8 | 8 | # To see a list of typical targets execute "make help" |
| @@ -220,6 +220,14 @@ ifeq ($(ARCH),sh64) · 211 unmodified lines | ||
| 220 | 220 | SRCARCH := sh |
| 221 | 221 | endif |
| 222 | 222 | |
| 223 | +# Additional ARCH settings for tile | |
| 224 | +ifeq ($(ARCH),tilepro) | |
| 225 | + SRCARCH := tile | |
| 226 | +endif | |
| 227 | +ifeq ($(ARCH),tilegx) | |
| 228 | + SRCARCH := tile | |
| 229 | +endif | |
| 230 | + | |
| 223 | 231 | # Where to locate arch specific headers |
| 224 | 232 | hdr-arch := $(SRCARCH) |
| 225 | 233 | |
| @@ -1009,7 +1017,8 @@ include/generated/utsrelease.h: include/config/kernel.release FORCE · 783 unmodified lines | ||
| 1009 | 1017 | |
| 1010 | 1018 | PHONY += headerdep |
| 1011 | 1019 | headerdep: |
| 1012 | − $(Q)find include/ -name '*.h' | xargs --max-args 1 scripts/headerdep.pl | |
| 1020 | + $(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \ | |
| 1021 | + $(srctree)/scripts/headerdep.pl -I$(srctree)/include | |
| 1013 | 1022 | |
| 1014 | 1023 | # --------------------------------------------------------------------------- |
| 1015 | 1024 | |
| @@ -1291,6 +1300,7 @@ help: · 275 unmodified lines | ||
| 1291 | 1300 | @echo ' 2: warnings which occur quite often but may still be relevant' |
| 1292 | 1301 | @echo ' 3: more obscure warnings, can most likely be ignored' |
| 1293 | 1302 | @echo ' Multiple levels can be combined with W=12 or W=123' |
| 1303 | + @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections' | |
| 1294 | 1304 | @echo '' |
| 1295 | 1305 | @echo 'Execute "make" or "make all" to build all targets marked with [*] ' |
| 1296 | 1306 | @echo 'For further info see the ./README file' |
| @@ -1416,13 +1426,15 @@ tags TAGS cscope gtags: FORCE · 119 unmodified lines | ||
| 1416 | 1426 | # Scripts to check various things for consistency |
| 1417 | 1427 | # --------------------------------------------------------------------------- |
| 1418 | 1428 | |
| 1429 | +PHONY += includecheck versioncheck coccicheck namespacecheck export_report | |
| 1430 | + | |
| 1419 | 1431 | includecheck: |
| 1420 | − find * $(RCS_FIND_IGNORE) \ | |
| 1432 | + find $(srctree)/* $(RCS_FIND_IGNORE) \ | |
| 1421 | 1433 | -name '*.[hcS]' -type f -print | sort \ |
| 1422 | 1434 | | xargs $(PERL) -w $(srctree)/scripts/checkincludes.pl |
| 1423 | 1435 | |
| 1424 | 1436 | versioncheck: |
| 1425 | − find * $(RCS_FIND_IGNORE) \ | |
| 1437 | + find $(srctree)/* $(RCS_FIND_IGNORE) \ | |
| 1426 | 1438 | -name '*.[hcS]' -type f -print | sort \ |
| 1427 | 1439 | | xargs $(PERL) -w $(srctree)/scripts/checkversion.pl |
| 1428 | 1440 | |
| @@ -144,9 +144,6 @@ config HAVE_CLK · 143 unmodified lines | ||
| 144 | 144 | config HAVE_DMA_API_DEBUG |
| 145 | 145 | bool |
| 146 | 146 | |
| 147 | −config HAVE_DEFAULT_NO_SPIN_MUTEXES | |
| 148 | − bool | |
| 149 | − | |
| 150 | 147 | config HAVE_HW_BREAKPOINT |
| 151 | 148 | bool |
| 152 | 149 | depends on PERF_EVENTS |
| @@ -178,4 +175,7 @@ config HAVE_ARCH_JUMP_LABEL · 25 unmodified lines | ||
| 178 | 175 | config HAVE_ARCH_MUTEX_CPU_RELAX |
| 179 | 176 | bool |
| 180 | 177 | |
| 178 | +config HAVE_RCU_TABLE_FREE | |
| 179 | + bool | |
| 180 | + | |
| 181 | 181 | source "kernel/gcov/Kconfig" |
| @@ -12,7 +12,7 @@ config ALPHA · 11 unmodified lines | ||
| 12 | 12 | select GENERIC_IRQ_PROBE |
| 13 | 13 | select AUTO_IRQ_AFFINITY if SMP |
| 14 | 14 | select GENERIC_IRQ_SHOW |
| 15 | − select GENERIC_HARDIRQS_NO_DEPRECATED | |
| 15 | + select ARCH_WANT_OPTIONAL_GPIOLIB | |
| 16 | 16 | help |
| 17 | 17 | The Alpha is a 64-bit general-purpose processor designed and |
| 18 | 18 | marketed by the Digital Equipment Corporation of blessed memory, |
| @@ -41,10 +41,6 @@ config ARCH_HAS_ILOG2_U64 · 22 unmodified lines | ||
| 41 | 41 | bool |
| 42 | 42 | default n |
| 43 | 43 | |
| 44 | −config GENERIC_FIND_NEXT_BIT | |
| 45 | − bool | |
| 46 | − default y | |
| 47 | − | |
| 48 | 44 | config GENERIC_CALIBRATE_DELAY |
| 49 | 45 | bool |
| 50 | 46 | default y |
| @@ -52,6 +48,9 @@ config GENERIC_CALIBRATE_DELAY · 1 unmodified line | ||
| 52 | 48 | config GENERIC_CMOS_UPDATE |
| 53 | 49 | def_bool y |
| 54 | 50 | |
| 51 | +config GENERIC_GPIO | |
| 52 | + def_bool y | |
| 53 | + | |
| 55 | 54 | config ZONE_DMA |
| 56 | 55 | bool |
| 57 | 56 | default y |
| @@ -101,7 +101,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; · 100 unmodified lines | ||
| 101 | 101 | |
| 102 | 102 | #define ELF_PLAT_INIT(_r, load_addr) _r->r0 = 0 |
| 103 | 103 | |
| 104 | −/* The registers are layed out in pt_regs for PAL and syscall | |
| 104 | +/* The registers are laid out in pt_regs for PAL and syscall | |
| 105 | 105 | convenience. Re-order them for the linear elf_gregset_t. */ |
| 106 | 106 | |
| 107 | 107 | struct pt_regs; |
| @@ -0,0 +1,55 @@ | ||
| 1 | +/* | |
| 2 | + * Generic GPIO API implementation for Alpha. | |
| 3 | + * | |
| 4 | + * A stright copy of that for PowerPC which was: | |
| 5 | + * | |
| 6 | + * Copyright (c) 2007-2008 MontaVista Software, Inc. | |
| 7 | + * | |
| 8 | + * Author: Anton Vorontsov <avorontsov@ru.mvista.com> | |
| 9 | + * | |
| 10 | + * This program is free software; you can redistribute it and/or modify | |
| 11 | + * it under the terms of the GNU General Public License as published by | |
| 12 | + * the Free Software Foundation; either version 2 of the License, or | |
| 13 | + * (at your option) any later version. | |
| 14 | + */ | |
| 15 | + | |
| 16 | +#ifndef _ASM_ALPHA_GPIO_H | |
| 17 | +#define _ASM_ALPHA_GPIO_H | |
| 18 | + | |
| 19 | +#include <linux/errno.h> | |
| 20 | +#include <asm-generic/gpio.h> | |
| 21 | + | |
| 22 | +#ifdef CONFIG_GPIOLIB | |
| 23 | + | |
| 24 | +/* | |
| 25 | + * We don't (yet) implement inlined/rapid versions for on-chip gpios. | |
| 26 | + * Just call gpiolib. | |
| 27 | + */ | |
| 28 | +static inline int gpio_get_value(unsigned int gpio) | |
| 29 | +{ | |
| 30 | + return __gpio_get_value(gpio); | |
| 31 | +} | |
| 32 | + | |
| 33 | +static inline void gpio_set_value(unsigned int gpio, int value) | |
| 34 | +{ | |
| 35 | + __gpio_set_value(gpio, value); | |
| 36 | +} | |
| 37 | + | |
| 38 | +static inline int gpio_cansleep(unsigned int gpio) | |
| 39 | +{ | |
| 40 | + return __gpio_cansleep(gpio); | |
| 41 | +} | |
| 42 | + | |
| 43 | +static inline int gpio_to_irq(unsigned int gpio) | |
| 44 | +{ | |
| 45 | + return __gpio_to_irq(gpio); | |
| 46 | +} | |
| 47 | + | |
| 48 | +static inline int irq_to_gpio(unsigned int irq) | |
| 49 | +{ | |
| 50 | + return -EINVAL; | |
| 51 | +} | |
| 52 | + | |
| 53 | +#endif /* CONFIG_GPIOLIB */ | |
| 54 | + | |
| 55 | +#endif /* _ASM_ALPHA_GPIO_H */ | |
| @@ -39,8 +39,6 @@ struct cpuinfo_alpha { · 38 unmodified lines | ||
| 39 | 39 | |
| 40 | 40 | extern struct cpuinfo_alpha cpu_data[NR_CPUS]; |
| 41 | 41 | |
| 42 | −#define PROC_CHANGE_PENALTY 20 | |
| 43 | − | |
| 44 | 42 | #define hard_smp_processor_id() __hard_smp_processor_id() |
| 45 | 43 | #define raw_smp_processor_id() (current_thread_info()->cpu) |
| 46 | 44 | |
| @@ -452,10 +452,15 @@ · 451 unmodified lines | ||
| 452 | 452 | #define __NR_fanotify_init 494 |
| 453 | 453 | #define __NR_fanotify_mark 495 |
| 454 | 454 | #define __NR_prlimit64 496 |
| 455 | +#define __NR_name_to_handle_at 497 | |
| 456 | +#define __NR_open_by_handle_at 498 | |
| 457 | +#define __NR_clock_adjtime 499 | |
| 458 | +#define __NR_syncfs 500 | |
| 459 | +#define __NR_setns 501 | |
| 455 | 460 | |
| 456 | 461 | #ifdef __KERNEL__ |
| 457 | 462 | |
| 458 | −#define NR_SYSCALLS 497 | |
| 463 | +#define NR_SYSCALLS 502 | |
| 459 | 464 | |
| 460 | 465 | #define __ARCH_WANT_IPC_PARSE_VERSION |
| 461 | 466 | #define __ARCH_WANT_OLD_READDIR |
| @@ -4,7 +4,7 @@ · 3 unmodified lines | ||
| 4 | 4 | |
| 5 | 5 | extra-y := head.o vmlinux.lds |
| 6 | 6 | asflags-y := $(KBUILD_CFLAGS) |
| 7 | −ccflags-y := -Werror -Wno-sign-compare | |
| 7 | +ccflags-y := -Wno-sign-compare | |
| 8 | 8 | |
| 9 | 9 | obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \ |
| 10 | 10 | irq_alpha.o signal.o setup.o ptrace.o time.o \ |
| @@ -133,7 +133,7 @@ conf_read(unsigned long addr) · 132 unmodified lines | ||
| 133 | 133 | |
| 134 | 134 | local_irq_save(flags); |
| 135 | 135 | |
| 136 | − /* Reset status register to avoid loosing errors. */ | |
| 136 | + /* Reset status register to avoid losing errors. */ | |
| 137 | 137 | stat0 = *(vulp)LCA_IOC_STAT0; |
| 138 | 138 | *(vulp)LCA_IOC_STAT0 = stat0; |
| 139 | 139 | mb(); |
| @@ -170,7 +170,7 @@ conf_write(unsigned long addr, unsigned int value) · 30 unmodified lines | ||
| 170 | 170 | |
| 171 | 171 | local_irq_save(flags); /* avoid getting hit by machine check */ |
| 172 | 172 | |
| 173 | − /* Reset status register to avoid loosing errors. */ | |
| 173 | + /* Reset status register to avoid losing errors. */ | |
| 174 | 174 | stat0 = *(vulp)LCA_IOC_STAT0; |
| 175 | 175 | *(vulp)LCA_IOC_STAT0 = stat0; |
| 176 | 176 | mb(); |
| @@ -88,7 +88,7 @@ conf_read(unsigned long addr, unsigned char type1, · 87 unmodified lines | ||
| 88 | 88 | { |
| 89 | 89 | unsigned long flags; |
| 90 | 90 | unsigned long mid = MCPCIA_HOSE2MID(hose->index); |
| 91 | − unsigned int stat0, value, temp, cpu; | |
| 91 | + unsigned int stat0, value, cpu; | |
| 92 | 92 | |
| 93 | 93 | cpu = smp_processor_id(); |
| 94 | 94 | |
| @@ -101,7 +101,7 @@ conf_read(unsigned long addr, unsigned char type1, · 6 unmodified lines | ||
| 101 | 101 | stat0 = *(vuip)MCPCIA_CAP_ERR(mid); |
| 102 | 102 | *(vuip)MCPCIA_CAP_ERR(mid) = stat0; |
| 103 | 103 | mb(); |
| 104 | − temp = *(vuip)MCPCIA_CAP_ERR(mid); | |
| 104 | + *(vuip)MCPCIA_CAP_ERR(mid); | |
| 105 | 105 | DBG_CFG(("conf_read: MCPCIA_CAP_ERR(%d) was 0x%x\n", mid, stat0)); |
| 106 | 106 | |
| 107 | 107 | mb(); |
| @@ -136,7 +136,7 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1, · 28 unmodified lines | ||
| 136 | 136 | { |
| 137 | 137 | unsigned long flags; |
| 138 | 138 | unsigned long mid = MCPCIA_HOSE2MID(hose->index); |
| 139 | − unsigned int stat0, temp, cpu; | |
| 139 | + unsigned int stat0, cpu; | |
| 140 | 140 | |
| 141 | 141 | cpu = smp_processor_id(); |
| 142 | 142 | |
| @@ -145,7 +145,7 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1, · 2 unmodified lines | ||
| 145 | 145 | /* Reset status register to avoid losing errors. */ |
| 146 | 146 | stat0 = *(vuip)MCPCIA_CAP_ERR(mid); |
| 147 | 147 | *(vuip)MCPCIA_CAP_ERR(mid) = stat0; mb(); |
| 148 | − temp = *(vuip)MCPCIA_CAP_ERR(mid); | |
| 148 | + *(vuip)MCPCIA_CAP_ERR(mid); | |
| 149 | 149 | DBG_CFG(("conf_write: MCPCIA CAP_ERR(%d) was 0x%x\n", mid, stat0)); |
| 150 | 150 | |
| 151 | 151 | draina(); |
| @@ -157,7 +157,7 @@ conf_write(unsigned long addr, unsigned int value, unsigned char type1, · 5 unmodified lines | ||
| 157 | 157 | *((vuip)addr) = value; |
| 158 | 158 | mb(); |
| 159 | 159 | mb(); /* magic */ |
| 160 | − temp = *(vuip)MCPCIA_CAP_ERR(mid); /* read to force the write */ | |
| 160 | + *(vuip)MCPCIA_CAP_ERR(mid); /* read to force the write */ | |
| 161 | 161 | mcheck_expected(cpu) = 0; |
| 162 | 162 | mb(); |
| 163 | 163 | |
| @@ -572,12 +572,10 @@ mcpcia_print_system_area(unsigned long la_ptr) · 408 unmodified lines | ||
| 572 | 572 | void |
| 573 | 573 | mcpcia_machine_check(unsigned long vector, unsigned long la_ptr) |
| 574 | 574 | { |
| 575 | − struct el_common *mchk_header; | |
| 576 | 575 | struct el_MCPCIA_uncorrected_frame_mcheck *mchk_logout; |
| 577 | 576 | unsigned int cpu = smp_processor_id(); |
| 578 | 577 | int expected; |
| 579 | 578 | |
| 580 | − mchk_header = (struct el_common *)la_ptr; | |
| 581 | 579 | mchk_logout = (struct el_MCPCIA_uncorrected_frame_mcheck *)la_ptr; |
| 582 | 580 | expected = mcheck_expected(cpu); |
| 583 | 581 | |
| @@ -1027,7 +1027,7 @@ marvel_process_logout_frame(struct ev7_lf_subpackets *lf_subpackets, int print) · 1026 unmodified lines | ||
| 1027 | 1027 | * normal operation, dismiss them. |
| 1028 | 1028 | * |
| 1029 | 1029 | * Dismiss if: |
| 1030 | − * C_STAT = 0x14 (Error Reponse) | |
| 1030 | + * C_STAT = 0x14 (Error Response) | |
| 1031 | 1031 | * C_STS<3> = 0 (C_ADDR valid) |
| 1032 | 1032 | * C_ADDR<42> = 1 (I/O) |
| 1033 | 1033 | * C_ADDR<31:22> = 111110xxb (PCI Config space) |
| @@ -533,8 +533,6 @@ static struct el_subpacket_annotation el_titan_annotations[] = { · 532 unmodified lines | ||
| 533 | 533 | static struct el_subpacket * |
| 534 | 534 | el_process_regatta_subpacket(struct el_subpacket *header) |
| 535 | 535 | { |
| 536 | − int status; | |
| 537 | − | |
| 538 | 536 | if (header->class != EL_CLASS__REGATTA_FAMILY) { |
| 539 | 537 | printk("%s ** Unexpected header CLASS %d TYPE %d, aborting\n", |
| 540 | 538 | err_print_prefix, |
| @@ -551,7 +549,7 @@ el_process_regatta_subpacket(struct el_subpacket *header) · 10 unmodified lines | ||
| 551 | 549 | printk("%s ** Occurred on CPU %d:\n", |
| 552 | 550 | err_print_prefix, |
| 553 | 551 | (int)header->by_type.regatta_frame.cpuid); |
| 554 | − status = privateer_process_logout_frame((struct el_common *) | |
| 552 | + privateer_process_logout_frame((struct el_common *) | |
| 555 | 553 | header->by_type.regatta_frame.data_start, 1); |
| 556 | 554 | break; |
| 557 | 555 | default: |
| @@ -228,7 +228,7 @@ struct irqaction timer_irqaction = { · 227 unmodified lines | ||
| 228 | 228 | void __init |
| 229 | 229 | init_rtc_irq(void) |
| 230 | 230 | { |
| 231 | − irq_set_chip_and_handler_name(RTC_IRQ, &no_irq_chip, | |
| 231 | + irq_set_chip_and_handler_name(RTC_IRQ, &dummy_irq_chip, | |
| 232 | 232 | handle_simple_irq, "RTC"); |
| 233 | 233 | setup_irq(RTC_IRQ, &timer_irqaction); |
| 234 | 234 | } |
| @@ -121,7 +121,7 @@ common_shutdown_1(void *generic_ptr) · 120 unmodified lines | ||
| 121 | 121 | /* Wait for the secondaries to halt. */ |
| 122 | 122 | set_cpu_present(boot_cpuid, false); |
| 123 | 123 | set_cpu_possible(boot_cpuid, false); |
| 124 | − while (cpus_weight(cpu_present_map)) | |
| 124 | + while (cpumask_weight(cpu_present_mask)) | |
| 125 | 125 | barrier(); |
| 126 | 126 | #endif |
| 127 | 127 | |
| @@ -1257,7 +1257,7 @@ show_cpuinfo(struct seq_file *f, void *slot) · 1256 unmodified lines | ||
| 1257 | 1257 | #ifdef CONFIG_SMP |
| 1258 | 1258 | seq_printf(f, "cpus active\t\t: %u\n" |
| 1259 | 1259 | "cpu active mask\t\t: %016lx\n", |
| 1260 | − num_online_cpus(), cpus_addr(cpu_possible_map)[0]); | |
| 1260 | + num_online_cpus(), cpumask_bits(cpu_possible_mask)[0]); | |
| 1261 | 1261 | #endif |
| 1262 | 1262 | |
| 1263 | 1263 | show_cache_size (f, "L1 Icache", alpha_l1i_cacheshape); |
| @@ -1404,8 +1404,6 @@ determine_cpu_caches (unsigned int cpu_type) · 140 unmodified lines | ||
| 1404 | 1404 | case PCA56_CPU: |
| 1405 | 1405 | case PCA57_CPU: |
| 1406 | 1406 | { |
| 1407 | − unsigned long cbox_config, size; | |
| 1408 | − | |
| 1409 | 1407 | if (cpu_type == PCA56_CPU) { |
| 1410 | 1408 | L1I = CSHAPE(16*1024, 6, 1); |
| 1411 | 1409 | L1D = CSHAPE(8*1024, 5, 1); |
| @@ -1415,10 +1413,12 @@ determine_cpu_caches (unsigned int cpu_type) · 3 unmodified lines | ||
| 1415 | 1413 | } |
| 1416 | 1414 | L3 = -1; |
| 1417 | 1415 | |
| 1416 | +#if 0 | |
| 1417 | + unsigned long cbox_config, size; | |
| 1418 | + | |
| 1418 | 1419 | cbox_config = *(vulp) phys_to_virt (0xfffff00008UL); |
| 1419 | 1420 | size = 512*1024 * (1 << ((cbox_config >> 12) & 3)); |
| 1420 | 1421 | |
| 1421 | −#if 0 | |
| 1422 | 1422 | L2 = ((cbox_config >> 31) & 1 ? CSHAPE (size, 6, 1) : -1); |
| 1423 | 1423 | #else |
| 1424 | 1424 | L2 = external_cache_probe(512*1024, 6); |
| @@ -79,7 +79,6 @@ · 78 unmodified lines | ||
| 79 | 79 | static unsigned long __init SMCConfigState(unsigned long baseAddr) |
| 80 | 80 | { |
| 81 | 81 | unsigned char devId; |
| 82 | − unsigned char devRev; | |
| 83 | 82 | |
| 84 | 83 | unsigned long configPort; |
| 85 | 84 | unsigned long indexPort; |
| @@ -100,7 +99,7 @@ static unsigned long __init SMCConfigState(unsigned long baseAddr) · 14 unmodified lines | ||
| 100 | 99 | devId = inb(dataPort); |
| 101 | 100 | if (devId == VALID_DEVICE_ID) { |
| 102 | 101 | outb(DEVICE_REV, indexPort); |
| 103 | − devRev = inb(dataPort); | |
| 102 | + /* unsigned char devRev = */ inb(dataPort); | |
| 104 | 103 | break; |
| 105 | 104 | } |
| 106 | 105 | else |
| @@ -451,7 +451,7 @@ setup_smp(void) · 450 unmodified lines | ||
| 451 | 451 | } |
| 452 | 452 | |
| 453 | 453 | printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_map = %lx\n", |
| 454 | − smp_num_probed, cpu_present_map.bits[0]); | |
| 454 | + smp_num_probed, cpumask_bits(cpu_present_mask)[0]); | |
| 455 | 455 | } |
| 456 | 456 | |
| 457 | 457 | /* |
| @@ -585,8 +585,7 @@ handle_ipi(struct pt_regs *regs) · 127 unmodified lines | ||
| 585 | 585 | |
| 586 | 586 | switch (which) { |
| 587 | 587 | case IPI_RESCHEDULE: |
| 588 | − /* Reschedule callback. Everything to be done | |
| 589 | − is done by the interrupt return path. */ | |
| 588 | + scheduler_ipi(); | |
| 590 | 589 | break; |
| 591 | 590 | |
| 592 | 591 | case IPI_CALL_FUNC: |
| @@ -630,8 +629,9 @@ smp_send_reschedule(int cpu) · 37 unmodified lines | ||
| 630 | 629 | void |
| 631 | 630 | smp_send_stop(void) |
| 632 | 631 | { |
| 633 | − cpumask_t to_whom = cpu_possible_map; | |
| 634 | − cpu_clear(smp_processor_id(), to_whom); | |
| 632 | + cpumask_t to_whom; | |
| 633 | + cpumask_copy(&to_whom, cpu_possible_mask); | |
| 634 | + cpumask_clear_cpu(smp_processor_id(), &to_whom); | |
| 635 | 635 | #ifdef DEBUG_IPI_MSG |
| 636 | 636 | if (hard_smp_processor_id() != boot_cpu_id) |
| 637 | 637 | printk(KERN_WARNING "smp_send_stop: Not on boot cpu.\n"); |
| @@ -140,7 +140,7 @@ cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity) · 139 unmodified lines | ||
| 140 | 140 | |
| 141 | 141 | for (cpu = 0; cpu < 4; cpu++) { |
| 142 | 142 | unsigned long aff = cpu_irq_affinity[cpu]; |
| 143 | − if (cpu_isset(cpu, affinity)) | |
| 143 | + if (cpumask_test_cpu(cpu, &affinity)) | |
| 144 | 144 | aff |= 1UL << irq; |
| 145 | 145 | else |
| 146 | 146 | aff &= ~(1UL << irq); |
| @@ -65,10 +65,11 @@ titan_update_irq_hw(unsigned long mask) · 64 unmodified lines | ||
| 65 | 65 | register int bcpu = boot_cpuid; |
| 66 | 66 | |
| 67 | 67 | #ifdef CONFIG_SMP |
| 68 | − cpumask_t cpm = cpu_present_map; | |
| 68 | + cpumask_t cpm; | |
| 69 | 69 | volatile unsigned long *dim0, *dim1, *dim2, *dim3; |
| 70 | 70 | unsigned long mask0, mask1, mask2, mask3, dummy; |
| 71 | 71 | |
| 72 | + cpumask_copy(&cpm, cpu_present_mask); | |
| 72 | 73 | mask &= ~isa_enable; |
| 73 | 74 | mask0 = mask & titan_cpu_irq_affinity[0]; |
| 74 | 75 | mask1 = mask & titan_cpu_irq_affinity[1]; |
| @@ -84,10 +85,10 @@ titan_update_irq_hw(unsigned long mask) · 9 unmodified lines | ||
| 84 | 85 | dim1 = &cchip->dim1.csr; |
| 85 | 86 | dim2 = &cchip->dim2.csr; |
| 86 | 87 | dim3 = &cchip->dim3.csr; |
| 87 | − if (!cpu_isset(0, cpm)) dim0 = &dummy; | |
| 88 | − if (!cpu_isset(1, cpm)) dim1 = &dummy; | |
| 89 | − if (!cpu_isset(2, cpm)) dim2 = &dummy; | |
| 90 | − if (!cpu_isset(3, cpm)) dim3 = &dummy; | |
| 88 | + if (!cpumask_test_cpu(0, &cpm)) dim0 = &dummy; | |
| 89 | + if (!cpumask_test_cpu(1, &cpm)) dim1 = &dummy; | |
| 90 | + if (!cpumask_test_cpu(2, &cpm)) dim2 = &dummy; | |
| 91 | + if (!cpumask_test_cpu(3, &cpm)) dim3 = &dummy; | |
| 91 | 92 | |
| 92 | 93 | *dim0 = mask0; |
| 93 | 94 | *dim1 = mask1; |
| @@ -137,7 +138,7 @@ titan_cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity) · 43 unmodified lines | ||
| 137 | 138 | int cpu; |
| 138 | 139 | |
| 139 | 140 | for (cpu = 0; cpu < 4; cpu++) { |
| 140 | − if (cpu_isset(cpu, affinity)) | |
| 141 | + if (cpumask_test_cpu(cpu, &affinity)) | |
| 141 | 142 | titan_cpu_irq_affinity[cpu] |= 1UL << irq; |
| 142 | 143 | else |
| 143 | 144 | titan_cpu_irq_affinity[cpu] &= ~(1UL << irq); |
| @@ -156,7 +156,6 @@ static void __init · 155 unmodified lines | ||
| 156 | 156 | wildfire_init_irq_per_pca(int qbbno, int pcano) |
| 157 | 157 | { |
| 158 | 158 | int i, irq_bias; |
| 159 | − unsigned long io_bias; | |
| 160 | 159 | static struct irqaction isa_enable = { |
| 161 | 160 | .handler = no_action, |
| 162 | 161 | .name = "isa_enable", |
| @@ -165,10 +164,12 @@ wildfire_init_irq_per_pca(int qbbno, int pcano) · 2 unmodified lines | ||
| 165 | 164 | irq_bias = qbbno * (WILDFIRE_PCA_PER_QBB * WILDFIRE_IRQ_PER_PCA) |
| 166 | 165 | + pcano * WILDFIRE_IRQ_PER_PCA; |
| 167 | 166 | |
| 167 | +#if 0 | |
| 168 | + unsigned long io_bias; | |
| 169 | + | |
| 168 | 170 | /* Only need the following for first PCI bus per PCA. */ |
| 169 | 171 | io_bias = WILDFIRE_IO(qbbno, pcano<<1) - WILDFIRE_IO_BIAS; |
| 170 | 172 | |
| 171 | −#if 0 | |
| 172 | 173 | outb(0, DMA1_RESET_REG + io_bias); |
| 173 | 174 | outb(0, DMA2_RESET_REG + io_bias); |
| 174 | 175 | outb(DMA_MODE_CASCADE, DMA2_MODE_REG + io_bias); |
| @@ -498,23 +498,28 @@ sys_call_table: · 497 unmodified lines | ||
| 498 | 498 | .quad sys_ni_syscall /* sys_timerfd */ |
| 499 | 499 | .quad sys_eventfd |
| 500 | 500 | .quad sys_recvmmsg |
| 501 | − .quad sys_fallocate /* 480 */ | |
| 501 | + .quad sys_fallocate /* 480 */ | |
| 502 | 502 | .quad sys_timerfd_create |
| 503 | 503 | .quad sys_timerfd_settime |
| 504 | 504 | .quad sys_timerfd_gettime |
| 505 | 505 | .quad sys_signalfd4 |
| 506 | − .quad sys_eventfd2 /* 485 */ | |
| 506 | + .quad sys_eventfd2 /* 485 */ | |
| 507 | 507 | .quad sys_epoll_create1 |
| 508 | 508 | .quad sys_dup3 |
| 509 | 509 | .quad sys_pipe2 |
| 510 | 510 | .quad sys_inotify_init1 |
| 511 | − .quad sys_preadv /* 490 */ | |
| 511 | + .quad sys_preadv /* 490 */ | |
| 512 | 512 | .quad sys_pwritev |
| 513 | 513 | .quad sys_rt_tgsigqueueinfo |
| 514 | 514 | .quad sys_perf_event_open |
| 515 | 515 | .quad sys_fanotify_init |
| 516 | − .quad sys_fanotify_mark /* 495 */ | |
| 516 | + .quad sys_fanotify_mark /* 495 */ | |
| 517 | 517 | .quad sys_prlimit64 |
| 518 | + .quad sys_name_to_handle_at | |
| 519 | + .quad sys_open_by_handle_at | |
| 520 | + .quad sys_clock_adjtime | |
| 521 | + .quad sys_syncfs /* 500 */ | |
| 522 | + .quad sys_setns | |
| 518 | 523 | |
| 519 | 524 | .size sys_call_table, . - sys_call_table |
| 520 | 525 | .type sys_call_table, @object |
| @@ -153,6 +153,7 @@ void read_persistent_clock(struct timespec *ts) · 152 unmodified lines | ||
| 153 | 153 | year += 100; |
| 154 | 154 | |
| 155 | 155 | ts->tv_sec = mktime(year, mon, day, hour, min, sec); |
| 156 | + ts->tv_nsec = 0; | |
| 156 | 157 | } |
| 157 | 158 | |
| 158 | 159 | |
| @@ -374,8 +375,7 @@ static struct clocksource clocksource_rpcc = { · 215 unmodified lines | ||
| 374 | 375 | |
| 375 | 376 | static inline void register_rpcc_clocksource(long cycle_freq) |
| 376 | 377 | { |
| 377 | − clocksource_calc_mult_shift(&clocksource_rpcc, cycle_freq, 4); | |
| 378 | − clocksource_register(&clocksource_rpcc); | |
| 378 | + clocksource_register_hz(&clocksource_rpcc, cycle_freq); | |
| 379 | 379 | } |
| 380 | 380 | #else /* !CONFIG_SMP */ |
| 381 | 381 | static inline void register_rpcc_clocksource(long cycle_freq) |
| @@ -39,13 +39,14 @@ SECTIONS · 38 unmodified lines | ||
| 39 | 39 | __init_begin = ALIGN(PAGE_SIZE); |
| 40 | 40 | INIT_TEXT_SECTION(PAGE_SIZE) |
| 41 | 41 | INIT_DATA_SECTION(16) |
| 42 | − PERCPU(L1_CACHE_BYTES, PAGE_SIZE) | |
| 42 | + PERCPU_SECTION(L1_CACHE_BYTES) | |
| 43 | 43 | /* Align to THREAD_SIZE rather than PAGE_SIZE here so any padding page |
| 44 | 44 | needed for the THREAD_SIZE aligned init_task gets freed after init */ |
| 45 | 45 | . = ALIGN(THREAD_SIZE); |
| 46 | 46 | __init_end = .; |
| 47 | 47 | /* Freed after init ends here */ |
| 48 | 48 | |
| 49 | + _sdata = .; /* Start of rw data section */ | |
| 49 | 50 | _data = .; |
| 50 | 51 | RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) |
| 51 | 52 | |
| @@ -82,7 +82,7 @@ $loop: · 81 unmodified lines | ||
| 82 | 82 | $eos: |
| 83 | 83 | negq t1, t4 # E : isolate first null byte match |
| 84 | 84 | and t1, t4, t4 # E : |
| 85 | − subq t4, 1, t5 # E : build a mask of the bytes upto... | |
| 85 | + subq t4, 1, t5 # E : build a mask of the bytes up to... | |
| 86 | 86 | or t4, t5, t4 # E : ... and including the null |
| 87 | 87 | |
| 88 | 88 | and t3, t4, t3 # E : mask out char matches after null |
| @@ -6,7 +6,7 @@ · 5 unmodified lines | ||
| 6 | 6 | #include <linux/bitops.h> |
| 7 | 7 | |
| 8 | 8 | /* This is fls(x)-1, except zero is held to zero. This allows most |
| 9 | − efficent input into extbl, plus it allows easy handling of fls(0)=0. */ | |
| 9 | + efficient input into extbl, plus it allows easy handling of fls(0)=0. */ | |
| 10 | 10 | |
| 11 | 11 | const unsigned char __flsm1_tab[256] = |
| 12 | 12 | { |
| @@ -54,7 +54,7 @@ $loop: · 53 unmodified lines | ||
| 54 | 54 | $eos: |
| 55 | 55 | negq t1, t4 # e0 : isolate first null byte match |
| 56 | 56 | and t1, t4, t4 # e1 : |
| 57 | − subq t4, 1, t5 # e0 : build a mask of the bytes upto... | |
| 57 | + subq t4, 1, t5 # e0 : build a mask of the bytes up to... | |
| 58 | 58 | or t4, t5, t4 # e1 : ... and including the null |
| 59 | 59 | |
| 60 | 60 | and t3, t4, t3 # e0 : mask out char matches after null |
| @@ -32,8 +32,6 @@ · 31 unmodified lines | ||
| 32 | 32 | #include <asm/console.h> |
| 33 | 33 | #include <asm/tlb.h> |
| 34 | 34 | |
| 35 | −DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | |
| 36 | − | |
| 37 | 35 | extern void die_if_kernel(char *,struct pt_regs *,long); |
| 38 | 36 | |
| 39 | 37 | static struct pcb_struct original_pcb; |
| @@ -313,6 +313,7 @@ void __init paging_init(void) · 312 unmodified lines | ||
| 313 | 313 | zones_size[ZONE_DMA] = dma_local_pfn; |
| 314 | 314 | zones_size[ZONE_NORMAL] = (end_pfn - start_pfn) - dma_local_pfn; |
| 315 | 315 | } |
| 316 | + node_set_state(nid, N_NORMAL_MEMORY); | |
| 316 | 317 | free_area_init_node(nid, zones_size, start_pfn, NULL); |
| 317 | 318 | } |
| 318 | 319 | |
| @@ -192,7 +192,7 @@ ev67_handle_interrupt(unsigned long which, struct pt_regs *regs, · 191 unmodified lines | ||
| 192 | 192 | case TRAP_INVALID1: |
| 193 | 193 | case TRAP_INVALID2: |
| 194 | 194 | case TRAP_INVALID3: |
| 195 | − /* Pipeline redirection ocurred. PMPC points | |
| 195 | + /* Pipeline redirection occurred. PMPC points | |
| 196 | 196 | to PALcode. Recognize ITB miss by PALcode |
| 197 | 197 | offset address, and get actual PC from |
| 198 | 198 | EXC_ADDR. */ |
| @@ -197,15 +197,21 @@ config ARM_PATCH_PHYS_VIRT · 196 unmodified lines | ||
| 197 | 197 | depends on !XIP_KERNEL && MMU |
| 198 | 198 | depends on !ARCH_REALVIEW || !SPARSEMEM |
| 199 | 199 | help |
| 200 | − Patch phys-to-virt translation functions at runtime according to | |
| 201 | − the position of the kernel in system memory. | |
| 200 | + Patch phys-to-virt and virt-to-phys translation functions at | |
| 201 | + boot and module load time according to the position of the | |
| 202 | + kernel in system memory. | |
| 202 | 203 | |
| 203 | − This can only be used with non-XIP with MMU kernels where | |
| 204 | − the base of physical memory is at a 16MB boundary. | |
| 204 | + This can only be used with non-XIP MMU kernels where the base | |
| 205 | + of physical memory is at a 16MB boundary, or theoretically 64K | |
| 206 | + for the MSM machine class. | |
| 205 | 207 | |
| 206 | 208 | config ARM_PATCH_PHYS_VIRT_16BIT |
| 207 | 209 | def_bool y |
| 208 | 210 | depends on ARM_PATCH_PHYS_VIRT && ARCH_MSM |
| 211 | + help | |
| 212 | + This option extends the physical to virtual translation patching | |
| 213 | + to allow physical memory down to a theoretical minimum of 64K | |
| 214 | + boundaries. | |
| 209 | 215 | |
| 210 | 216 | source "init/Kconfig" |
| 211 | 217 | |
| @@ -288,6 +294,8 @@ config ARCH_AT91 · 76 unmodified lines | ||
| 288 | 294 | bool "Atmel AT91" |
| 289 | 295 | select ARCH_REQUIRE_GPIOLIB |
| 290 | 296 | select HAVE_CLK |
| 297 | + select CLKDEV_LOOKUP | |
| 298 | + select ARM_PATCH_PHYS_VIRT if MMU | |
| 291 | 299 | help |
| 292 | 300 | This enables support for systems based on the Atmel AT91RM9200, |
| 293 | 301 | AT91SAM9 and AT91CAP9 processors. |
| @@ -297,6 +305,7 @@ config ARCH_BCMRING · 3 unmodified lines | ||
| 297 | 305 | depends on MMU |
| 298 | 306 | select CPU_V6 |
| 299 | 307 | select ARM_AMBA |
| 308 | + select ARM_TIMER_SP804 | |
| 300 | 309 | select CLKDEV_LOOKUP |
| 301 | 310 | select GENERIC_CLOCKEVENTS |
| 302 | 311 | select ARCH_WANT_OPTIONAL_GPIOLIB |
| @@ -366,6 +375,8 @@ config ARCH_MXC · 63 unmodified lines | ||
| 366 | 375 | select GENERIC_CLOCKEVENTS |
| 367 | 376 | select ARCH_REQUIRE_GPIOLIB |
| 368 | 377 | select CLKDEV_LOOKUP |
| 378 | + select CLKSRC_MMIO | |
| 379 | + select HAVE_SCHED_CLOCK | |
| 369 | 380 | help |
| 370 | 381 | Support for Freescale MXC/iMX-based family of processors |
| 371 | 382 | |
| @@ -374,21 +385,13 @@ config ARCH_MXS · 2 unmodified lines | ||
| 374 | 385 | select GENERIC_CLOCKEVENTS |
| 375 | 386 | select ARCH_REQUIRE_GPIOLIB |
| 376 | 387 | select CLKDEV_LOOKUP |
| 388 | + select CLKSRC_MMIO | |
| 377 | 389 | help |
| 378 | 390 | Support for Freescale MXS-based family of processors |
| 379 | 391 | |
| 380 | −config ARCH_STMP3XXX | |
| 381 | − bool "Freescale STMP3xxx" | |
| 382 | − select CPU_ARM926T | |
| 383 | − select CLKDEV_LOOKUP | |
| 384 | − select ARCH_REQUIRE_GPIOLIB | |
| 385 | − select GENERIC_CLOCKEVENTS | |
| 386 | − select USB_ARCH_HAS_EHCI | |
| 387 | − help | |
| 388 | − Support for systems based on the Freescale 3xxx CPUs. | |
| 389 | − | |
| 390 | 392 | config ARCH_NETX |
| 391 | 393 | bool "Hilscher NetX based" |
| 394 | + select CLKSRC_MMIO | |
| 392 | 395 | select CPU_ARM926T |
| 393 | 396 | select ARM_VIC |
| 394 | 397 | select GENERIC_CLOCKEVENTS |
| @@ -456,6 +459,7 @@ config ARCH_IXP2000 · 61 unmodified lines | ||
| 456 | 459 | config ARCH_IXP4XX |
| 457 | 460 | bool "IXP4xx-based" |
| 458 | 461 | depends on MMU |
| 462 | + select CLKSRC_MMIO | |
| 459 | 463 | select CPU_XSCALE |
| 460 | 464 | select GENERIC_GPIO |
| 461 | 465 | select GENERIC_CLOCKEVENTS |
| @@ -467,7 +471,7 @@ config ARCH_IXP4XX · 5 unmodified lines | ||
| 467 | 471 | |
| 468 | 472 | config ARCH_DOVE |
| 469 | 473 | bool "Marvell Dove" |
| 470 | − select CPU_V6K | |
| 474 | + select CPU_V7 | |
| 471 | 475 | select PCI |
| 472 | 476 | select ARCH_REQUIRE_GPIOLIB |
| 473 | 477 | select GENERIC_CLOCKEVENTS |
| @@ -496,6 +500,7 @@ config ARCH_LOKI · 22 unmodified lines | ||
| 496 | 500 | |
| 497 | 501 | config ARCH_LPC32XX |
| 498 | 502 | bool "NXP LPC32XX" |
| 503 | + select CLKSRC_MMIO | |
| 499 | 504 | select CPU_ARM926T |
| 500 | 505 | select ARCH_REQUIRE_GPIOLIB |
| 501 | 506 | select HAVE_IDE |
| @@ -553,23 +558,12 @@ config ARCH_KS8695 · 51 unmodified lines | ||
| 553 | 558 | Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based |
| 554 | 559 | System-on-Chip devices. |
| 555 | 560 | |
| 556 | −config ARCH_NS9XXX | |
| 557 | − bool "NetSilicon NS9xxx" | |
| 558 | − select CPU_ARM926T | |
| 559 | − select GENERIC_GPIO | |
| 560 | − select GENERIC_CLOCKEVENTS | |
| 561 | − select HAVE_CLK | |
| 562 | − help | |
| 563 | − Say Y here if you intend to run this kernel on a NetSilicon NS9xxx | |
| 564 | − System. | |
| 565 | − | |
| 566 | − <http://www.digi.com/products/microprocessors/index.jsp> | |
| 567 | − | |
| 568 | 561 | config ARCH_W90X900 |
| 569 | 562 | bool "Nuvoton W90X900 CPU" |
| 570 | 563 | select CPU_ARM926T |
| 571 | 564 | select ARCH_REQUIRE_GPIOLIB |
| 572 | 565 | select CLKDEV_LOOKUP |
| 566 | + select CLKSRC_MMIO | |
| 573 | 567 | select GENERIC_CLOCKEVENTS |
| 574 | 568 | help |
| 575 | 569 | Support for Nuvoton (Winbond logic dept.) ARM9 processor, |
| @@ -591,6 +585,7 @@ config ARCH_NUC93X · 15 unmodified lines | ||
| 591 | 585 | config ARCH_TEGRA |
| 592 | 586 | bool "NVIDIA Tegra" |
| 593 | 587 | select CLKDEV_LOOKUP |
| 588 | + select CLKSRC_MMIO | |
| 594 | 589 | select GENERIC_TIME |
| 595 | 590 | select GENERIC_CLOCKEVENTS |
| 596 | 591 | select GENERIC_GPIO |
| @@ -616,6 +611,7 @@ config ARCH_PXA · 19 unmodified lines | ||
| 616 | 611 | select ARCH_MTD_XIP |
| 617 | 612 | select ARCH_HAS_CPUFREQ |
| 618 | 613 | select CLKDEV_LOOKUP |
| 614 | + select CLKSRC_MMIO | |
| 619 | 615 | select ARCH_REQUIRE_GPIOLIB |
| 620 | 616 | select GENERIC_CLOCKEVENTS |
| 621 | 617 | select HAVE_SCHED_CLOCK |
| @@ -666,6 +662,7 @@ config ARCH_RPC · 44 unmodified lines | ||
| 666 | 662 | |
| 667 | 663 | config ARCH_SA1100 |
| 668 | 664 | bool "SA1100-based" |
| 665 | + select CLKSRC_MMIO | |
| 669 | 666 | select CPU_SA1100 |
| 670 | 667 | select ISA |
| 671 | 668 | select ARCH_SPARSEMEM_ENABLE |
| @@ -693,7 +690,7 @@ config ARCH_S3C2410 · 21 unmodified lines | ||
| 693 | 690 | the Samsung SMDK2410 development board (and derivatives). |
| 694 | 691 | |
| 695 | 692 | Note, the S3C2416 and the S3C2450 are so close that they even share |
| 696 | − the same SoC ID code. This means that there is no seperate machine | |
| 693 | + the same SoC ID code. This means that there is no separate machine | |
| 697 | 694 | directory (no arch/arm/mach-s3c2450) as the S3C2416 was first. |
| 698 | 695 | |
| 699 | 696 | config ARCH_S3C64XX |
| @@ -735,16 +732,6 @@ config ARCH_S5P64X0 · 35 unmodified lines | ||
| 735 | 732 | Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440, |
| 736 | 733 | SMDK6450. |
| 737 | 734 | |
| 738 | −config ARCH_S5P6442 | |
| 739 | − bool "Samsung S5P6442" | |
| 740 | − select CPU_V6 | |
| 741 | − select GENERIC_GPIO | |
| 742 | − select HAVE_CLK | |
| 743 | − select ARCH_USES_GETTIMEOFFSET | |
| 744 | − select HAVE_S3C2410_WATCHDOG if WATCHDOG | |
| 745 | − help | |
| 746 | − Samsung S5P6442 CPU based systems | |
| 747 | − | |
| 748 | 735 | config ARCH_S5PC100 |
| 749 | 736 | bool "Samsung S5PC100" |
| 750 | 737 | select GENERIC_GPIO |
| @@ -802,6 +789,7 @@ config ARCH_SHARK · 51 unmodified lines | ||
| 802 | 789 | |
| 803 | 790 | config ARCH_TCC_926 |
| 804 | 791 | bool "Telechips TCC ARM926-based systems" |
| 792 | + select CLKSRC_MMIO | |
| 805 | 793 | select CPU_ARM926T |
| 806 | 794 | select HAVE_CLK |
| 807 | 795 | select CLKDEV_LOOKUP |
| @@ -812,6 +800,7 @@ config ARCH_TCC_926 · 4 unmodified lines | ||
| 812 | 800 | config ARCH_U300 |
| 813 | 801 | bool "ST-Ericsson U300 Series" |
| 814 | 802 | depends on MMU |
| 803 | + select CLKSRC_MMIO | |
| 815 | 804 | select CPU_ARM926T |
| 816 | 805 | select HAVE_SCHED_CLOCK |
| 817 | 806 | select HAVE_TCM |
| @@ -853,6 +842,7 @@ config ARCH_DAVINCI · 35 unmodified lines | ||
| 853 | 842 | select HAVE_IDE |
| 854 | 843 | select CLKDEV_LOOKUP |
| 855 | 844 | select GENERIC_ALLOCATOR |
| 845 | + select GENERIC_IRQ_CHIP | |
| 856 | 846 | select ARCH_HAS_HOLES_MEMORYMODEL |
| 857 | 847 | help |
| 858 | 848 | Support for TI's DaVinci platform. |
| @@ -873,6 +863,7 @@ config PLAT_SPEAR · 14 unmodified lines | ||
| 873 | 863 | select ARM_AMBA |
| 874 | 864 | select ARCH_REQUIRE_GPIOLIB |
| 875 | 865 | select CLKDEV_LOOKUP |
| 866 | + select CLKSRC_MMIO | |
| 876 | 867 | select GENERIC_CLOCKEVENTS |
| 877 | 868 | select HAVE_CLK |
| 878 | 869 | help |
| @@ -950,8 +941,6 @@ source "arch/arm/mach-netx/Kconfig" · 71 unmodified lines | ||
| 950 | 941 | source "arch/arm/mach-nomadik/Kconfig" |
| 951 | 942 | source "arch/arm/plat-nomadik/Kconfig" |
| 952 | 943 | |
| 953 | −source "arch/arm/mach-ns9xxx/Kconfig" | |
| 954 | − | |
| 955 | 944 | source "arch/arm/mach-nuc93x/Kconfig" |
| 956 | 945 | |
| 957 | 946 | source "arch/arm/plat-omap/Kconfig" |
| @@ -994,8 +983,6 @@ endif · 36 unmodified lines | ||
| 994 | 983 | |
| 995 | 984 | source "arch/arm/mach-s5p64x0/Kconfig" |
| 996 | 985 | |
| 997 | −source "arch/arm/mach-s5p6442/Kconfig" | |
| 998 | − | |
| 999 | 986 | source "arch/arm/mach-s5pc100/Kconfig" |
| 1000 | 987 | |
| 1001 | 988 | source "arch/arm/mach-s5pv210/Kconfig" |
| @@ -1004,8 +991,6 @@ source "arch/arm/mach-exynos4/Kconfig" · 2 unmodified lines | ||
| 1004 | 991 | |
| 1005 | 992 | source "arch/arm/mach-shmobile/Kconfig" |
| 1006 | 993 | |
| 1007 | −source "arch/arm/plat-stmp3xxx/Kconfig" | |
| 1008 | − | |
| 1009 | 994 | source "arch/arm/mach-tegra/Kconfig" |
| 1010 | 995 | |
| 1011 | 996 | source "arch/arm/mach-u300/Kconfig" |
| @@ -1032,6 +1017,8 @@ config PLAT_IOP · 20 unmodified lines | ||
| 1032 | 1017 | |
| 1033 | 1018 | config PLAT_ORION |
| 1034 | 1019 | bool |
| 1020 | + select CLKSRC_MMIO | |
| 1021 | + select GENERIC_IRQ_CHIP | |
| 1035 | 1022 | select HAVE_SCHED_CLOCK |
| 1036 | 1023 | |
| 1037 | 1024 | config PLAT_PXA |
| @@ -1042,6 +1029,7 @@ config PLAT_VERSATILE · 4 unmodified lines | ||
| 1042 | 1029 | |
| 1043 | 1030 | config ARM_TIMER_SP804 |
| 1044 | 1031 | bool |
| 1032 | + select CLKSRC_MMIO | |
| 1045 | 1033 | |
| 1046 | 1034 | source arch/arm/mm/Kconfig |
| 1047 | 1035 | |
| @@ -1317,8 +1305,7 @@ menu "Kernel Features" · 269 unmodified lines | ||
| 1317 | 1305 | source "kernel/time/Kconfig" |
| 1318 | 1306 | |
| 1319 | 1307 | config SMP |
| 1320 | − bool "Symmetric Multi-Processing (EXPERIMENTAL)" | |
| 1321 | − depends on EXPERIMENTAL | |
| 1308 | + bool "Symmetric Multi-Processing" | |
| 1322 | 1309 | depends on CPU_V6K || CPU_V7 |
| 1323 | 1310 | depends on GENERIC_CLOCKEVENTS |
| 1324 | 1311 | depends on REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP || \ |
| @@ -1402,7 +1389,6 @@ config NR_CPUS · 77 unmodified lines | ||
| 1402 | 1389 | config HOTPLUG_CPU |
| 1403 | 1390 | bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" |
| 1404 | 1391 | depends on SMP && HOTPLUG && EXPERIMENTAL |
| 1405 | − depends on !ARCH_MSM | |
| 1406 | 1392 | help |
| 1407 | 1393 | Say Y here to experiment with turning CPUs off and on. CPUs |
| 1408 | 1394 | can be controlled through /sys/devices/system/cpu. |
| @@ -1423,7 +1409,7 @@ source kernel/Kconfig.preempt · 14 unmodified lines | ||
| 1423 | 1409 | config HZ |
| 1424 | 1410 | int |
| 1425 | 1411 | default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P64X0 || \ |
| 1426 | − ARCH_S5P6442 || ARCH_S5PV210 || ARCH_EXYNOS4 | |
| 1412 | + ARCH_S5PV210 || ARCH_EXYNOS4 | |
| 1427 | 1413 | default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER |
| 1428 | 1414 | default AT91_TIMER_HZ if ARCH_AT91 |
| 1429 | 1415 | default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE |
| @@ -1519,9 +1505,12 @@ config ARCH_SPARSEMEM_DEFAULT · 89 unmodified lines | ||
| 1519 | 1505 | config ARCH_SELECT_MEMORY_MODEL |
| 1520 | 1506 | def_bool ARCH_SPARSEMEM_ENABLE |
| 1521 | 1507 | |
| 1508 | +config HAVE_ARCH_PFN_VALID | |
| 1509 | + def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM | |
| 1510 | + | |
| 1522 | 1511 | config HIGHMEM |
| 1523 | − bool "High Memory Support (EXPERIMENTAL)" | |
| 1524 | − depends on MMU && EXPERIMENTAL | |
| 1512 | + bool "High Memory Support" | |
| 1513 | + depends on MMU | |
| 1525 | 1514 | help |
| 1526 | 1515 | The address space of ARM processors is only 4 Gigabytes large |
| 1527 | 1516 | and it has to accommodate user address space, kernel address |
| @@ -1539,7 +1528,6 @@ config HIGHMEM · 11 unmodified lines | ||
| 1539 | 1528 | config HIGHPTE |
| 1540 | 1529 | bool "Allocate 2nd-level pagetables from highmem" |
| 1541 | 1530 | depends on HIGHMEM |
| 1542 | − depends on !OUTER_CACHE | |
| 1543 | 1531 | |
| 1544 | 1532 | config HW_PERF_EVENTS |
| 1545 | 1533 | bool "Enable hardware performance counter support for perf events" |
| @@ -1687,6 +1675,13 @@ endmenu · 141 unmodified lines | ||
| 1687 | 1675 | |
| 1688 | 1676 | menu "Boot options" |
| 1689 | 1677 | |
| 1678 | +config USE_OF | |
| 1679 | + bool "Flattened Device Tree support" | |
| 1680 | + select OF | |
| 1681 | + select OF_EARLY_FLATTREE | |
| 1682 | + help | |
| 1683 | + Include support for flattened device tree machine descriptions. | |
| 1684 | + | |
| 1690 | 1685 | # Compressed boot loader in ROM. Yes, we really want to ask about |
| 1691 | 1686 | # TEXT and BSS so we preserve their values in the config files. |
| 1692 | 1687 | config ZBOOT_ROM_TEXT |
| @@ -1742,16 +1737,31 @@ config CMDLINE · 49 unmodified lines | ||
| 1742 | 1737 | time by entering them here. As a minimum, you should specify the |
| 1743 | 1738 | memory size and the root device (e.g., mem=64M root=/dev/nfs). |
| 1744 | 1739 | |
| 1740 | +choice | |
| 1741 | + prompt "Kernel command line type" if CMDLINE != "" | |
| 1742 | + default CMDLINE_FROM_BOOTLOADER | |
| 1743 | + | |
| 1744 | +config CMDLINE_FROM_BOOTLOADER | |
| 1745 | + bool "Use bootloader kernel arguments if available" | |
| 1746 | + help | |
| 1747 | + Uses the command-line options passed by the boot loader. If | |
| 1748 | + the boot loader doesn't provide any, the default kernel command | |
| 1749 | + string provided in CMDLINE will be used. | |
| 1750 | + | |
| 1751 | +config CMDLINE_EXTEND | |
| 1752 | + bool "Extend bootloader kernel arguments" | |
| 1753 | + help | |
| 1754 | + The command-line arguments provided by the boot loader will be | |
| 1755 | + appended to the default kernel command string. | |
| 1756 | + | |
| 1745 | 1757 | config CMDLINE_FORCE |
| 1746 | 1758 | bool "Always use the default kernel command string" |
| 1747 | − depends on CMDLINE != "" | |
| 1748 | 1759 | help |
| 1749 | 1760 | Always use the default kernel command string, even if the boot |
| 1750 | 1761 | loader passes other arguments to the kernel. |
| 1751 | 1762 | This is useful if you cannot or don't want to change the |
| 1752 | 1763 | command-line options your boot loader passes to the kernel. |
| 1753 | − | |
| 1754 | − If unsure, say N. | |
| 1764 | +endchoice | |
| 1755 | 1765 | |
| 1756 | 1766 | config XIP_KERNEL |
| 1757 | 1767 | bool "Kernel Execute-In-Place from ROM" |
| @@ -2010,7 +2020,9 @@ menu "Power management options" · 252 unmodified lines | ||
| 2010 | 2020 | source "kernel/power/Kconfig" |
| 2011 | 2021 | |
| 2012 | 2022 | config ARCH_SUSPEND_POSSIBLE |
| 2013 | − depends on !ARCH_S5P64X0 && !ARCH_S5P6442 | |
| 2023 | + depends on !ARCH_S5P64X0 && !ARCH_S5PC100 | |
| 2024 | + depends on CPU_ARM920T || CPU_ARM926T || CPU_SA1100 || \ | |
| 2025 | + CPU_V6 || CPU_V6K || CPU_V7 || CPU_XSC3 || CPU_XSCALE | |
| 2014 | 2026 | def_bool y |
| 2015 | 2027 | |
| 2016 | 2028 | endmenu |
| @@ -34,7 +34,7 @@ config PROCESSOR_ID · 33 unmodified lines | ||
| 34 | 34 | used instead of the auto-probing which utilizes the register. |
| 35 | 35 | |
| 36 | 36 | config REMAP_VECTORS_TO_RAM |
| 37 | − bool 'Install vectors to the begining of RAM' if DRAM_BASE | |
| 37 | + bool 'Install vectors to the beginning of RAM' if DRAM_BASE | |
| 38 | 38 | depends on DRAM_BASE |
| 39 | 39 | help |
| 40 | 40 | The kernel needs to change the hardware exception vectors. |
| @@ -63,24 +63,6 @@ config DEBUG_USER · 62 unmodified lines | ||
| 63 | 63 | 8 - SIGSEGV faults |
| 64 | 64 | 16 - SIGBUS faults |
| 65 | 65 | |
| 66 | −config DEBUG_ERRORS | |
| 67 | − bool "Verbose kernel error messages" | |
| 68 | − depends on DEBUG_KERNEL | |
| 69 | − help | |
| 70 | − This option controls verbose debugging information which can be | |
| 71 | − printed when the kernel detects an internal error. This debugging | |
| 72 | − information is useful to kernel hackers when tracking down problems, | |
| 73 | − but mostly meaningless to other people. It's safe to say Y unless | |
| 74 | − you are concerned with the code size or don't want to see these | |
| 75 | − messages. | |
| 76 | − | |
| 77 | −config DEBUG_STACK_USAGE | |
| 78 | − bool "Enable stack utilization instrumentation" | |
| 79 | − depends on DEBUG_KERNEL | |
| 80 | − help | |
| 81 | − Enables the display of the minimum amount of free stack which each | |
| 82 | − task has ever had available in the sysrq-T output. | |
| 83 | − | |
| 84 | 66 | # These options are only for real kernel hackers who want to get their hands dirty. |
| 85 | 67 | config DEBUG_LL |
| 86 | 68 | bool "Kernel low-level debugging functions" |
| @@ -158,13 +158,11 @@ machine-$(CONFIG_ARCH_MV78XX0) := mv78xx0 · 157 unmodified lines | ||
| 158 | 158 | machine-$(CONFIG_ARCH_MX1) := imx |
| 159 | 159 | machine-$(CONFIG_ARCH_MX2) := imx |
| 160 | 160 | machine-$(CONFIG_ARCH_MX25) := imx |
| 161 | −machine-$(CONFIG_ARCH_MX3) := mx3 | |
| 161 | +machine-$(CONFIG_ARCH_MX3) := imx | |
| 162 | 162 | machine-$(CONFIG_ARCH_MX5) := mx5 |
| 163 | −machine-$(CONFIG_ARCH_MXC91231) := mxc91231 | |
| 164 | 163 | machine-$(CONFIG_ARCH_MXS) := mxs |
| 165 | 164 | machine-$(CONFIG_ARCH_NETX) := netx |
| 166 | 165 | machine-$(CONFIG_ARCH_NOMADIK) := nomadik |
| 167 | −machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx | |
| 168 | 166 | machine-$(CONFIG_ARCH_OMAP1) := omap1 |
| 169 | 167 | machine-$(CONFIG_ARCH_OMAP2) := omap2 |
| 170 | 168 | machine-$(CONFIG_ARCH_OMAP3) := omap2 |
| @@ -178,15 +176,12 @@ machine-$(CONFIG_ARCH_S3C2410) := s3c2410 s3c2400 s3c2412 s3c2416 s3c2440 s3c24 · 7 unmodified lines | ||
| 178 | 176 | machine-$(CONFIG_ARCH_S3C24A0) := s3c24a0 |
| 179 | 177 | machine-$(CONFIG_ARCH_S3C64XX) := s3c64xx |
| 180 | 178 | machine-$(CONFIG_ARCH_S5P64X0) := s5p64x0 |
| 181 | −machine-$(CONFIG_ARCH_S5P6442) := s5p6442 | |
| 182 | 179 | machine-$(CONFIG_ARCH_S5PC100) := s5pc100 |
| 183 | 180 | machine-$(CONFIG_ARCH_S5PV210) := s5pv210 |
| 184 | 181 | machine-$(CONFIG_ARCH_EXYNOS4) := exynos4 |
| 185 | 182 | machine-$(CONFIG_ARCH_SA1100) := sa1100 |
| 186 | 183 | machine-$(CONFIG_ARCH_SHARK) := shark |
| 187 | 184 | machine-$(CONFIG_ARCH_SHMOBILE) := shmobile |
| 188 | −machine-$(CONFIG_ARCH_STMP378X) := stmp378x | |
| 189 | −machine-$(CONFIG_ARCH_STMP37XX) := stmp37xx | |
| 190 | 185 | machine-$(CONFIG_ARCH_TCC8K) := tcc8k |
| 191 | 186 | machine-$(CONFIG_ARCH_TEGRA) := tegra |
| 192 | 187 | machine-$(CONFIG_ARCH_U300) := u300 |
| @@ -207,7 +202,6 @@ machine-$(CONFIG_MACH_SPEAR600) := spear6xx · 14 unmodified lines | ||
| 207 | 202 | plat-$(CONFIG_ARCH_MXC) := mxc |
| 208 | 203 | plat-$(CONFIG_ARCH_OMAP) := omap |
| 209 | 204 | plat-$(CONFIG_ARCH_S3C64XX) := samsung |
| 210 | −plat-$(CONFIG_ARCH_STMP3XXX) := stmp3xxx | |
| 211 | 205 | plat-$(CONFIG_ARCH_TCC_926) := tcc |
| 212 | 206 | plat-$(CONFIG_PLAT_IOP) := iop |
| 213 | 207 | plat-$(CONFIG_PLAT_NOMADIK) := nomadik |
| @@ -74,7 +74,7 @@ ZTEXTADDR := $(CONFIG_ZBOOT_ROM_TEXT) · 73 unmodified lines | ||
| 74 | 74 | ZBSSADDR := $(CONFIG_ZBOOT_ROM_BSS) |
| 75 | 75 | else |
| 76 | 76 | ZTEXTADDR := 0 |
| 77 | −ZBSSADDR := ALIGN(4) | |
| 77 | +ZBSSADDR := ALIGN(8) | |
| 78 | 78 | endif |
| 79 | 79 | |
| 80 | 80 | SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/ |
| @@ -98,8 +98,6 @@ endif · 17 unmodified lines | ||
| 98 | 98 | ccflags-y := -fpic -fno-builtin |
| 99 | 99 | asflags-y := -Wa,-march=all |
| 100 | 100 | |
| 101 | −# Provide size of uncompressed kernel to the decompressor via a linker symbol. | |
| 102 | −LDFLAGS_vmlinux = --defsym _image_size=$(shell stat -c "%s" $(obj)/../Image) | |
| 103 | 101 | # Supply ZRELADDR to the decompressor via a linker symbol. |
| 104 | 102 | ifneq ($(CONFIG_AUTO_ZRELADDR),y) |
| 105 | 103 | LDFLAGS_vmlinux += --defsym zreladdr=$(ZRELADDR) |
| @@ -122,10 +120,23 @@ lib1funcs = $(obj)/lib1funcs.o · 16 unmodified lines | ||
| 122 | 120 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE |
| 123 | 121 | $(call cmd,shipped) |
| 124 | 122 | |
| 123 | +# We need to prevent any GOTOFF relocs being used with references | |
| 124 | +# to symbols in the .bss section since we cannot relocate them | |
| 125 | +# independently from the rest at run time. This can be achieved by | |
| 126 | +# ensuring that no private .bss symbols exist, as global symbols | |
| 127 | +# always have a GOT entry which is what we need. | |
| 128 | +# The .data section is already discarded by the linker script so no need | |
| 129 | +# to bother about it here. | |
| 130 | +check_for_bad_syms = \ | |
| 131 | +bad_syms=$$($(CROSS_COMPILE)nm $@ | sed -n 's/^.\{8\} [bc] \(.*\)/\1/p') && \ | |
| 132 | +[ -z "$$bad_syms" ] || \ | |
| 133 | + ( echo "following symbols must have non local/private scope:" >&2; \ | |
| 134 | + echo "$$bad_syms" >&2; rm -f $@; false ) | |
| 135 | + | |
| 125 | 136 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ |
| 126 | 137 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE |
| 127 | 138 | $(call if_changed,ld) |
| 128 | − @: | |
| 139 | + @$(check_for_bad_syms) | |
| 129 | 140 | |
| 130 | 141 | $(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE |
| 131 | 142 | $(call if_changed,$(suffix_y)) |
| @@ -44,7 +44,7 @@ extern void error(char *); · 43 unmodified lines | ||
| 44 | 44 | #include "../../../../lib/decompress_unlzma.c" |
| 45 | 45 | #endif |
| 46 | 46 | |
| 47 | −void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)) | |
| 47 | +int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)) | |
| 48 | 48 | { |
| 49 | − decompress(input, len, NULL, NULL, output, NULL, error); | |
| 49 | + return decompress(input, len, NULL, NULL, output, NULL, error); | |
| 50 | 50 | } |
| @@ -21,20 +21,12 @@ · 20 unmodified lines | ||
| 21 | 21 | |
| 22 | 22 | #if defined(CONFIG_DEBUG_ICEDCC) |
| 23 | 23 | |
| 24 | −#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) | |
| 24 | +#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7) | |
| 25 | 25 | .macro loadsp, rb, tmp |
| 26 | 26 | .endm |
| 27 | 27 | .macro writeb, ch, rb |
| 28 | 28 | mcr p14, 0, \ch, c0, c5, 0 |
| 29 | 29 | .endm |
| 30 | −#elif defined(CONFIG_CPU_V7) | |
| 31 | − .macro loadsp, rb, tmp | |
| 32 | − .endm | |
| 33 | − .macro writeb, ch, rb | |
| 34 | −wait: mrc p14, 0, pc, c0, c1, 0 | |
| 35 | − bcs wait | |
| 36 | − mcr p14, 0, \ch, c0, c5, 0 | |
| 37 | − .endm | |
| 38 | 30 | #elif defined(CONFIG_CPU_XSCALE) |
| 39 | 31 | .macro loadsp, rb, tmp |
| 40 | 32 | .endm |
| @@ -187,16 +179,29 @@ not_angel: · 146 unmodified lines | ||
| 187 | 179 | bl cache_on |
| 188 | 180 | |
| 189 | 181 | restart: adr r0, LC0 |
| 190 | − ldmia r0, {r1, r2, r3, r5, r6, r9, r11, r12} | |
| 191 | − ldr sp, [r0, #32] | |
| 182 | + ldmia r0, {r1, r2, r3, r6, r10, r11, r12} | |
| 183 | + ldr sp, [r0, #28] | |
| 192 | 184 | |
| 193 | 185 | /* |
| 194 | 186 | * We might be running at a different address. We need |
| 195 | 187 | * to fix up various pointers. |
| 196 | 188 | */ |
| 197 | 189 | sub r0, r0, r1 @ calculate the delta offset |
| 198 | − add r5, r5, r0 @ _start | |
| 199 | 190 | add r6, r6, r0 @ _edata |
| 191 | + add r10, r10, r0 @ inflated kernel size location | |
| 192 | + | |
| 193 | + /* | |
| 194 | + * The kernel build system appends the size of the | |
| 195 | + * decompressed kernel at the end of the compressed data | |
| 196 | + * in little-endian form. | |
| 197 | + */ | |
| 198 | + ldrb r9, [r10, #0] | |
| 199 | + ldrb lr, [r10, #1] | |
| 200 | + orr r9, r9, lr, lsl #8 | |
| 201 | + ldrb lr, [r10, #2] | |
| 202 | + ldrb r10, [r10, #3] | |
| 203 | + orr r9, r9, lr, lsl #16 | |
| 204 | + orr r9, r9, r10, lsl #24 | |
| 200 | 205 | |
| 201 | 206 | #ifndef CONFIG_ZBOOT_ROM |
| 202 | 207 | /* malloc space is above the relocated stack (64k max) */ |
| @@ -214,31 +219,40 @@ restart: adr r0, LC0 · 11 unmodified lines | ||
| 214 | 219 | /* |
| 215 | 220 | * Check to see if we will overwrite ourselves. |
| 216 | 221 | * r4 = final kernel address |
| 217 | − * r5 = start of this image | |
| 218 | 222 | * r9 = size of decompressed image |
| 219 | 223 | * r10 = end of this image, including bss/stack/malloc space if non XIP |
| 220 | 224 | * We basically want: |
| 221 | − * r4 >= r10 -> OK | |
| 222 | − * r4 + image length <= r5 -> OK | |
| 225 | + * r4 - 16k page directory >= r10 -> OK | |
| 226 | + * r4 + image length <= current position (pc) -> OK | |
| 223 | 227 | */ |
| 228 | + add r10, r10, #16384 | |
| 224 | 229 | cmp r4, r10 |
| 225 | 230 | bhs wont_overwrite |
| 226 | 231 | add r10, r4, r9 |
| 227 | − cmp r10, r5 | |
| 232 | + ARM( cmp r10, pc ) | |
| 233 | + THUMB( mov lr, pc ) | |
| 234 | + THUMB( cmp r10, lr ) | |
| 228 | 235 | bls wont_overwrite |
| 229 | 236 | |
| 230 | 237 | /* |
| 231 | 238 | * Relocate ourselves past the end of the decompressed kernel. |
| 232 | − * r5 = start of this image | |
| 233 | 239 | * r6 = _edata |
| 234 | 240 | * r10 = end of the decompressed kernel |
| 235 | 241 | * Because we always copy ahead, we need to do it from the end and go |
| 236 | 242 | * backward in case the source and destination overlap. |
| 237 | 243 | */ |
| 238 | − /* Round up to next 256-byte boundary. */ | |
| 239 | − add r10, r10, #256 | |
| 244 | + /* | |
| 245 | + * Bump to the next 256-byte boundary with the size of | |
| 246 | + * the relocation code added. This avoids overwriting | |
| 247 | + * ourself when the offset is small. | |
| 248 | + */ | |
| 249 | + add r10, r10, #((reloc_code_end - restart + 256) & ~255) | |
| 240 | 250 | bic r10, r10, #255 |
| 241 | 251 | |
| 252 | + /* Get start of code we want to copy and align it down. */ | |
| 253 | + adr r5, restart | |
| 254 | + bic r5, r5, #31 | |
| 255 | + | |
| 242 | 256 | sub r9, r6, r5 @ size to copy |
| 243 | 257 | add r9, r9, #31 @ rounded up to a multiple |
| 244 | 258 | bic r9, r9, #31 @ ... of 32 bytes |
| @@ -253,6 +267,11 @@ restart: adr r0, LC0 · 8 unmodified lines | ||
| 253 | 267 | /* Preserve offset to relocated code. */ |
| 254 | 268 | sub r6, r9, r6 |
| 255 | 269 | |
| 270 | +#ifndef CONFIG_ZBOOT_ROM | |
| 271 | + /* cache_clean_flush may use the stack, so relocate it */ | |
| 272 | + add sp, sp, r6 | |
| 273 | +#endif | |
| 274 | + | |
| 256 | 275 | bl cache_clean_flush |
| 257 | 276 | |
| 258 | 277 | adr r0, BSYM(restart) |
| @@ -341,12 +360,11 @@ not_relocated: mov r0, #0 · 82 unmodified lines | ||
| 341 | 360 | LC0: .word LC0 @ r1 |
| 342 | 361 | .word __bss_start @ r2 |
| 343 | 362 | .word _end @ r3 |
| 344 | − .word _start @ r5 | |
| 345 | 363 | .word _edata @ r6 |
| 346 | − .word _image_size @ r9 | |
| 364 | + .word input_data_end - 4 @ r10 (inflated size location) | |
| 347 | 365 | .word _got_start @ r11 |
| 348 | 366 | .word _got_end @ ip |
| 349 | − .word user_stack_end @ sp | |
| 367 | + .word .L_user_stack_end @ sp | |
| 350 | 368 | .size LC0, . - LC0 |
| 351 | 369 | |
| 352 | 370 | #ifdef CONFIG_ARCH_RPC |
| @@ -455,7 +473,11 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size · 102 unmodified lines | ||
| 455 | 473 | orr r1, r1, #3 << 10 |
| 456 | 474 | add r2, r3, #16384 |
| 457 | 475 | 1: cmp r1, r9 @ if virt > start of RAM |
| 476 | +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH | |
| 477 | + orrhs r1, r1, #0x08 @ set cacheable | |
| 478 | +#else | |
| 458 | 479 | orrhs r1, r1, #0x0c @ set cacheable, bufferable |
| 480 | +#endif | |
| 459 | 481 | cmp r1, r10 @ if virt > end of RAM |
| 460 | 482 | bichs r1, r1, #0x0c @ clear cacheable, bufferable |
| 461 | 483 | str r1, [r0], #4 @ 1:1 mapping |
| @@ -480,6 +502,12 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size · 18 unmodified lines | ||
| 480 | 502 | mov pc, lr |
| 481 | 503 | ENDPROC(__setup_mmu) |
| 482 | 504 | |
| 505 | +__arm926ejs_mmu_cache_on: | |
| 506 | +#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH | |
| 507 | + mov r0, #4 @ put dcache in WT mode | |
| 508 | + mcr p15, 7, r0, c15, c0, 0 | |
| 509 | +#endif | |
| 510 | + | |
| 483 | 511 | __armv4_mmu_cache_on: |
| 484 | 512 | mov r12, lr |
| 485 | 513 | #ifdef CONFIG_MMU |
| @@ -661,6 +689,12 @@ proc_types: · 175 unmodified lines | ||
| 661 | 689 | W(b) __armv4_mpu_cache_off |
| 662 | 690 | W(b) __armv4_mpu_cache_flush |
| 663 | 691 | |
| 692 | + .word 0x41069260 @ ARM926EJ-S (v5TEJ) | |
| 693 | + .word 0xff0ffff0 | |
| 694 | + b __arm926ejs_mmu_cache_on | |
| 695 | + b __armv4_mmu_cache_off | |
| 696 | + b __armv5tej_mmu_cache_flush | |
| 697 | + | |
| 664 | 698 | .word 0x00007000 @ ARM7 IDs |
| 665 | 699 | .word 0x0000f000 |
| 666 | 700 | mov pc, lr |
| @@ -743,12 +777,6 @@ proc_types: · 76 unmodified lines | ||
| 743 | 777 | W(b) __armv4_mmu_cache_off |
| 744 | 778 | W(b) __armv6_mmu_cache_flush |
| 745 | 779 | |
| 746 | − .word 0x560f5810 @ Marvell PJ4 ARMv6 | |
| 747 | − .word 0xff0ffff0 | |
| 748 | − W(b) __armv4_mmu_cache_on | |
| 749 | − W(b) __armv4_mmu_cache_off | |
| 750 | − W(b) __armv6_mmu_cache_flush | |
| 751 | − | |
| 752 | 780 | .word 0x000f0000 @ new CPU Id |
| 753 | 781 | .word 0x000f0000 |
| 754 | 782 | W(b) __armv7_mmu_cache_on |
| @@ -1070,8 +1098,9 @@ memdump: mov r12, r0 · 315 unmodified lines | ||
| 1070 | 1098 | #endif |
| 1071 | 1099 | |
| 1072 | 1100 | .ltorg |
| 1101 | +reloc_code_end: | |
| 1073 | 1102 | |
| 1074 | 1103 | .align |
| 1075 | 1104 | .section ".stack", "aw", %nobits |
| 1076 | −user_stack: .space 4096 | |
| 1077 | −user_stack_end: | |
| 1105 | +.L_user_stack: .space 4096 | |
| 1106 | +.L_user_stack_end: | |
| @@ -26,8 +26,6 @@ unsigned int __machine_arch_type; · 25 unmodified lines | ||
| 26 | 26 | #include <linux/linkage.h> |
| 27 | 27 | #include <asm/string.h> |
| 28 | 28 | |
| 29 | −#include <asm/unaligned.h> | |
| 30 | − | |
| 31 | 29 | |
| 32 | 30 | static void putstr(const char *ptr); |
| 33 | 31 | extern void error(char *x); |
| @@ -36,7 +34,7 @@ extern void error(char *x); · 2 unmodified lines | ||
| 36 | 34 | |
| 37 | 35 | #ifdef CONFIG_DEBUG_ICEDCC |
| 38 | 36 | |
| 39 | −#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) | |
| 37 | +#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7) | |
| 40 | 38 | |
| 41 | 39 | static void icedcc_putc(int ch) |
| 42 | 40 | { |
| @@ -52,16 +50,6 @@ static void icedcc_putc(int ch) · 9 unmodified lines | ||
| 52 | 50 | asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); |
| 53 | 51 | } |
| 54 | 52 | |
| 55 | −#elif defined(CONFIG_CPU_V7) | |
| 56 | − | |
| 57 | −static void icedcc_putc(int ch) | |
| 58 | −{ | |
| 59 | − asm( | |
| 60 | − "wait: mrc p14, 0, pc, c0, c1, 0 \n\ | |
| 61 | − bcs wait \n\ | |
| 62 | − mcr p14, 0, %0, c0, c5, 0 " | |
| 63 | − : : "r" (ch)); | |
| 64 | −} | |
| 65 | 53 | |
| 66 | 54 | #elif defined(CONFIG_CPU_XSCALE) |
| 67 | 55 | |
| @@ -149,13 +137,12 @@ void *memcpy(void *__dest, __const void *__src, size_t __n) · 81 unmodified lines | ||
| 149 | 137 | } |
| 150 | 138 | |
| 151 | 139 | /* |
| 152 | − * gzip delarations | |
| 140 | + * gzip declarations | |
| 153 | 141 | */ |
| 154 | 142 | extern char input_data[]; |
| 155 | 143 | extern char input_data_end[]; |
| 156 | 144 | |
| 157 | 145 | unsigned char *output_data; |
| 158 | −unsigned long output_ptr; | |
| 159 | 146 | |
| 160 | 147 | unsigned long free_mem_ptr; |
| 161 | 148 | unsigned long free_mem_end_ptr; |
| @@ -180,15 +167,15 @@ asmlinkage void __div0(void) · 18 unmodified lines | ||
| 180 | 167 | error("Attempting division by 0!"); |
| 181 | 168 | } |
| 182 | 169 | |
| 183 | −extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)); | |
| 170 | +extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)); | |
| 184 | 171 | |
| 185 | 172 | |
| 186 | −unsigned long | |
| 173 | +void | |
| 187 | 174 | decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, |
| 188 | 175 | unsigned long free_mem_ptr_end_p, |
| 189 | 176 | int arch_id) |
| 190 | 177 | { |
| 191 | − unsigned char *tmp; | |
| 178 | + int ret; | |
| 192 | 179 | |
| 193 | 180 | output_data = (unsigned char *)output_start; |
| 194 | 181 | free_mem_ptr = free_mem_ptr_p; |
| @@ -197,12 +184,11 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, · 2 unmodified lines | ||
| 197 | 184 | |
| 198 | 185 | arch_decomp_setup(); |
| 199 | 186 | |
| 200 | − tmp = (unsigned char *) (((unsigned long)input_data_end) - 4); | |
| 201 | − output_ptr = get_unaligned_le32(tmp); | |
| 202 | − | |
| 203 | 187 | putstr("Uncompressing Linux..."); |
| 204 | − do_decompress(input_data, input_data_end - input_data, | |
| 205 | − output_data, error); | |
| 206 | − putstr(" done, booting the kernel.\n"); | |
| 207 | − return output_ptr; | |
| 188 | + ret = do_decompress(input_data, input_data_end - input_data, | |
| 189 | + output_data, error); | |
| 190 | + if (ret) | |
| 191 | + error("decompressor returned an error"); | |
| 192 | + else | |
| 193 | + putstr(" done, booting the kernel.\n"); | |
| 208 | 194 | } |
| @@ -54,6 +54,7 @@ SECTIONS · 53 unmodified lines | ||
| 54 | 54 | .bss : { *(.bss) } |
| 55 | 55 | _end = .; |
| 56 | 56 | |
| 57 | + . = ALIGN(8); /* the stack must be 64-bit aligned */ | |
| 57 | 58 | .stack : { *(.stack) } |
| 58 | 59 | |
| 59 | 60 | .stab 0 : { *(.stab) } |
| @@ -7,7 +7,7 @@ config ARM_VIC · 6 unmodified lines | ||
| 7 | 7 | config ARM_VIC_NR |
| 8 | 8 | int |
| 9 | 9 | default 4 if ARCH_S5PV210 |
| 10 | − default 3 if ARCH_S5P6442 || ARCH_S5PC100 | |
| 10 | + default 3 if ARCH_S5PC100 | |
| 11 | 11 | default 2 |
| 12 | 12 | depends on ARM_VIC |
| 13 | 13 | help |
| @@ -16,5 +16,4 @@ obj-$(CONFIG_SHARP_SCOOP) += scoop.o · 15 unmodified lines | ||
| 16 | 16 | obj-$(CONFIG_ARCH_IXP2000) += uengine.o |
| 17 | 17 | obj-$(CONFIG_ARCH_IXP23XX) += uengine.o |
| 18 | 18 | obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o |
| 19 | −obj-$(CONFIG_COMMON_CLKDEV) += clkdev.o | |
| 20 | 19 | obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o |
| @@ -49,7 +49,7 @@ struct gic_chip_data { · 48 unmodified lines | ||
| 49 | 49 | * Default make them NULL. |
| 50 | 50 | */ |
| 51 | 51 | struct irq_chip gic_arch_extn = { |
| 52 | − .irq_ack = NULL, | |
| 52 | + .irq_eoi = NULL, | |
| 53 | 53 | .irq_mask = NULL, |
| 54 | 54 | .irq_unmask = NULL, |
| 55 | 55 | .irq_retrigger = NULL, |
| @@ -84,21 +84,12 @@ static inline unsigned int gic_irq(struct irq_data *d) · 28 unmodified lines | ||
| 84 | 84 | /* |
| 85 | 85 | * Routines to acknowledge, disable and enable interrupts |
| 86 | 86 | */ |
| 87 | −static void gic_ack_irq(struct irq_data *d) | |
| 88 | −{ | |
| 89 | − spin_lock(&irq_controller_lock); | |
| 90 | − if (gic_arch_extn.irq_ack) | |
| 91 | − gic_arch_extn.irq_ack(d); | |
| 92 | − writel(gic_irq(d), gic_cpu_base(d) + GIC_CPU_EOI); | |
| 93 | − spin_unlock(&irq_controller_lock); | |
| 94 | −} | |
| 95 | − | |
| 96 | 87 | static void gic_mask_irq(struct irq_data *d) |
| 97 | 88 | { |
| 98 | 89 | u32 mask = 1 << (d->irq % 32); |
| 99 | 90 | |
| 100 | 91 | spin_lock(&irq_controller_lock); |
| 101 | − writel(mask, gic_dist_base(d) + GIC_DIST_ENABLE_CLEAR + (gic_irq(d) / 32) * 4); | |
| 92 | + writel_relaxed(mask, gic_dist_base(d) + GIC_DIST_ENABLE_CLEAR + (gic_irq(d) / 32) * 4); | |
| 102 | 93 | if (gic_arch_extn.irq_mask) |
| 103 | 94 | gic_arch_extn.irq_mask(d); |
| 104 | 95 | spin_unlock(&irq_controller_lock); |
| @@ -111,10 +102,21 @@ static void gic_unmask_irq(struct irq_data *d) · 6 unmodified lines | ||
| 111 | 102 | spin_lock(&irq_controller_lock); |
| 112 | 103 | if (gic_arch_extn.irq_unmask) |
| 113 | 104 | gic_arch_extn.irq_unmask(d); |
| 114 | − writel(mask, gic_dist_base(d) + GIC_DIST_ENABLE_SET + (gic_irq(d) / 32) * 4); | |
| 105 | + writel_relaxed(mask, gic_dist_base(d) + GIC_DIST_ENABLE_SET + (gic_irq(d) / 32) * 4); | |
| 115 | 106 | spin_unlock(&irq_controller_lock); |
| 116 | 107 | } |
| 117 | 108 | |
| 109 | +static void gic_eoi_irq(struct irq_data *d) | |
| 110 | +{ | |
| 111 | + if (gic_arch_extn.irq_eoi) { | |
| 112 | + spin_lock(&irq_controller_lock); | |
| 113 | + gic_arch_extn.irq_eoi(d); | |
| 114 | + spin_unlock(&irq_controller_lock); | |
| 115 | + } | |
| 116 | + | |
| 117 | + writel_relaxed(gic_irq(d), gic_cpu_base(d) + GIC_CPU_EOI); | |
| 118 | +} | |
| 119 | + | |
| 118 | 120 | static int gic_set_type(struct irq_data *d, unsigned int type) |
| 119 | 121 | { |
| 120 | 122 | void __iomem *base = gic_dist_base(d); |
| @@ -138,7 +140,7 @@ static int gic_set_type(struct irq_data *d, unsigned int type) · 17 unmodified lines | ||
| 138 | 140 | if (gic_arch_extn.irq_set_type) |
| 139 | 141 | gic_arch_extn.irq_set_type(d, type); |
| 140 | 142 | |
| 141 | − val = readl(base + GIC_DIST_CONFIG + confoff); | |
| 143 | + val = readl_relaxed(base + GIC_DIST_CONFIG + confoff); | |
| 142 | 144 | if (type == IRQ_TYPE_LEVEL_HIGH) |
| 143 | 145 | val &= ~confmask; |
| 144 | 146 | else if (type == IRQ_TYPE_EDGE_RISING) |
| @@ -148,15 +150,15 @@ static int gic_set_type(struct irq_data *d, unsigned int type) · 3 unmodified lines | ||
| 148 | 150 | * As recommended by the spec, disable the interrupt before changing |
| 149 | 151 | * the configuration |
| 150 | 152 | */ |
| 151 | − if (readl(base + GIC_DIST_ENABLE_SET + enableoff) & enablemask) { | |
| 152 | − writel(enablemask, base + GIC_DIST_ENABLE_CLEAR + enableoff); | |
| 153 | + if (readl_relaxed(base + GIC_DIST_ENABLE_SET + enableoff) & enablemask) { | |
| 154 | + writel_relaxed(enablemask, base + GIC_DIST_ENABLE_CLEAR + enableoff); | |
| 153 | 155 | enabled = true; |
| 154 | 156 | } |
| 155 | 157 | |
| 156 | − writel(val, base + GIC_DIST_CONFIG + confoff); | |
| 158 | + writel_relaxed(val, base + GIC_DIST_CONFIG + confoff); | |
| 157 | 159 | |
| 158 | 160 | if (enabled) |
| 159 | − writel(enablemask, base + GIC_DIST_ENABLE_SET + enableoff); | |
| 161 | + writel_relaxed(enablemask, base + GIC_DIST_ENABLE_SET + enableoff); | |
| 160 | 162 | |
| 161 | 163 | spin_unlock(&irq_controller_lock); |
| 162 | 164 | |
| @@ -188,8 +190,8 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val, · 25 unmodified lines | ||
| 188 | 190 | |
| 189 | 191 | spin_lock(&irq_controller_lock); |
| 190 | 192 | d->node = cpu; |
| 191 | − val = readl(reg) & ~mask; | |
| 192 | − writel(val | bit, reg); | |
| 193 | + val = readl_relaxed(reg) & ~mask; | |
| 194 | + writel_relaxed(val | bit, reg); | |
| 193 | 195 | spin_unlock(&irq_controller_lock); |
| 194 | 196 | |
| 195 | 197 | return 0; |
| @@ -218,11 +220,10 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) · 22 unmodified lines | ||
| 218 | 220 | unsigned int cascade_irq, gic_irq; |
| 219 | 221 | unsigned long status; |
| 220 | 222 | |
| 221 | − /* primary controller ack'ing */ | |
| 222 | − chip->irq_ack(&desc->irq_data); | |
| 223 | + chained_irq_enter(chip, desc); | |
| 223 | 224 | |
| 224 | 225 | spin_lock(&irq_controller_lock); |
| 225 | − status = readl(chip_data->cpu_base + GIC_CPU_INTACK); | |
| 226 | + status = readl_relaxed(chip_data->cpu_base + GIC_CPU_INTACK); | |
| 226 | 227 | spin_unlock(&irq_controller_lock); |
| 227 | 228 | |
| 228 | 229 | gic_irq = (status & 0x3ff); |
| @@ -236,15 +237,14 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) · 7 unmodified lines | ||
| 236 | 237 | generic_handle_irq(cascade_irq); |
| 237 | 238 | |
| 238 | 239 | out: |
| 239 | − /* primary controller unmasking */ | |
| 240 | − chip->irq_unmask(&desc->irq_data); | |
| 240 | + chained_irq_exit(chip, desc); | |
| 241 | 241 | } |
| 242 | 242 | |
| 243 | 243 | static struct irq_chip gic_chip = { |
| 244 | 244 | .name = "GIC", |
| 245 | − .irq_ack = gic_ack_irq, | |
| 246 | 245 | .irq_mask = gic_mask_irq, |
| 247 | 246 | .irq_unmask = gic_unmask_irq, |
| 247 | + .irq_eoi = gic_eoi_irq, | |
| 248 | 248 | .irq_set_type = gic_set_type, |
| 249 | 249 | .irq_retrigger = gic_retrigger, |
| 250 | 250 | #ifdef CONFIG_SMP |
| @@ -272,13 +272,13 @@ static void __init gic_dist_init(struct gic_chip_data *gic, · 21 unmodified lines | ||
| 272 | 272 | cpumask |= cpumask << 8; |
| 273 | 273 | cpumask |= cpumask << 16; |
| 274 | 274 | |
| 275 | − writel(0, base + GIC_DIST_CTRL); | |
| 275 | + writel_relaxed(0, base + GIC_DIST_CTRL); | |
| 276 | 276 | |
| 277 | 277 | /* |
| 278 | 278 | * Find out how many interrupts are supported. |
| 279 | 279 | * The GIC only supports up to 1020 interrupt sources. |
| 280 | 280 | */ |
| 281 | − gic_irqs = readl(base + GIC_DIST_CTR) & 0x1f; | |
| 281 | + gic_irqs = readl_relaxed(base + GIC_DIST_CTR) & 0x1f; | |
| 282 | 282 | gic_irqs = (gic_irqs + 1) * 32; |
| 283 | 283 | if (gic_irqs > 1020) |
| 284 | 284 | gic_irqs = 1020; |
| @@ -287,26 +287,26 @@ static void __init gic_dist_init(struct gic_chip_data *gic, · 2 unmodified lines | ||
| 287 | 287 | * Set all global interrupts to be level triggered, active low. |
| 288 | 288 | */ |
| 289 | 289 | for (i = 32; i < gic_irqs; i += 16) |
| 290 | − writel(0, base + GIC_DIST_CONFIG + i * 4 / 16); | |
| 290 | + writel_relaxed(0, base + GIC_DIST_CONFIG + i * 4 / 16); | |
| 291 | 291 | |
| 292 | 292 | /* |
| 293 | 293 | * Set all global interrupts to this CPU only. |
| 294 | 294 | */ |
| 295 | 295 | for (i = 32; i < gic_irqs; i += 4) |
| 296 | − writel(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); | |
| 296 | + writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); | |
| 297 | 297 | |
| 298 | 298 | /* |
| 299 | 299 | * Set priority on all global interrupts. |
| 300 | 300 | */ |
| 301 | 301 | for (i = 32; i < gic_irqs; i += 4) |
| 302 | − writel(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4); | |
| 302 | + writel_relaxed(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4); | |
| 303 | 303 | |
| 304 | 304 | /* |
| 305 | 305 | * Disable all interrupts. Leave the PPI and SGIs alone |
| 306 | 306 | * as these enables are banked registers. |
| 307 | 307 | */ |
| 308 | 308 | for (i = 32; i < gic_irqs; i += 32) |
| 309 | − writel(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32); | |
| 309 | + writel_relaxed(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32); | |
| 310 | 310 | |
| 311 | 311 | /* |
| 312 | 312 | * Limit number of interrupts registered to the platform maximum |
| @@ -319,12 +319,12 @@ static void __init gic_dist_init(struct gic_chip_data *gic, · 6 unmodified lines | ||
| 319 | 319 | * Setup the Linux IRQ subsystem. |
| 320 | 320 | */ |
| 321 | 321 | for (i = irq_start; i < irq_limit; i++) { |
| 322 | − irq_set_chip_and_handler(i, &gic_chip, handle_level_irq); | |
| 322 | + irq_set_chip_and_handler(i, &gic_chip, handle_fasteoi_irq); | |
| 323 | 323 | irq_set_chip_data(i, gic); |
| 324 | 324 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); |
| 325 | 325 | } |
| 326 | 326 | |
| 327 | − writel(1, base + GIC_DIST_CTRL); | |
| 327 | + writel_relaxed(1, base + GIC_DIST_CTRL); | |
| 328 | 328 | } |
| 329 | 329 | |
| 330 | 330 | static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) |
| @@ -337,17 +337,17 @@ static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) · 6 unmodified lines | ||
| 337 | 337 | * Deal with the banked PPI and SGI interrupts - disable all |
| 338 | 338 | * PPI interrupts, ensure all SGI interrupts are enabled. |
| 339 | 339 | */ |
| 340 | − writel(0xffff0000, dist_base + GIC_DIST_ENABLE_CLEAR); | |
| 341 | − writel(0x0000ffff, dist_base + GIC_DIST_ENABLE_SET); | |
| 340 | + writel_relaxed(0xffff0000, dist_base + GIC_DIST_ENABLE_CLEAR); | |
| 341 | + writel_relaxed(0x0000ffff, dist_base + GIC_DIST_ENABLE_SET); | |
| 342 | 342 | |
| 343 | 343 | /* |
| 344 | 344 | * Set priority on PPI and SGI interrupts |
| 345 | 345 | */ |
| 346 | 346 | for (i = 0; i < 32; i += 4) |
| 347 | − writel(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4 / 4); | |
| 347 | + writel_relaxed(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4 / 4); | |
| 348 | 348 | |
| 349 | − writel(0xf0, base + GIC_CPU_PRIMASK); | |
| 350 | − writel(1, base + GIC_CPU_CTRL); | |
| 349 | + writel_relaxed(0xf0, base + GIC_CPU_PRIMASK); | |
| 350 | + writel_relaxed(1, base + GIC_CPU_CTRL); | |
| 351 | 351 | } |
| 352 | 352 | |
| 353 | 353 | void __init gic_init(unsigned int gic_nr, unsigned int irq_start, |
| @@ -391,7 +391,13 @@ void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) · 37 unmodified lines | ||
| 391 | 391 | { |
| 392 | 392 | unsigned long map = *cpus_addr(*mask); |
| 393 | 393 | |
| 394 | + /* | |
| 395 | + * Ensure that stores to Normal memory are visible to the | |
| 396 | + * other CPUs before issuing the IPI. | |
| 397 | + */ | |
| 398 | + dsb(); | |
| 399 | + | |
| 394 | 400 | /* this always happens on GIC0 */ |
| 395 | − writel(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT); | |
| 401 | + writel_relaxed(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT); | |
| 396 | 402 | } |
| 397 | 403 | #endif |
| @@ -1045,7 +1045,7 @@ static inline int _loop(unsigned dry_run, u8 buf[], · 1044 unmodified lines | ||
| 1045 | 1045 | unsigned lcnt0, lcnt1, ljmp0, ljmp1; |
| 1046 | 1046 | struct _arg_LPEND lpend; |
| 1047 | 1047 | |
| 1048 | − /* Max iterations possibile in DMALP is 256 */ | |
| 1048 | + /* Max iterations possible in DMALP is 256 */ | |
| 1049 | 1049 | if (*bursts >= 256*256) { |
| 1050 | 1050 | lcnt1 = 256; |
| 1051 | 1051 | lcnt0 = 256; |
| @@ -1446,7 +1446,7 @@ int pl330_update(const struct pl330_info *pi) · 394 unmodified lines | ||
| 1446 | 1446 | } |
| 1447 | 1447 | |
| 1448 | 1448 | for (ev = 0; ev < pi->pcfg.num_events; ev++) { |
| 1449 | − if (val & (1 << ev)) { /* Event occured */ | |
| 1449 | + if (val & (1 << ev)) { /* Event occurred */ | |
| 1450 | 1450 | struct pl330_thread *thrd; |
| 1451 | 1451 | u32 inten = readl(regs + INTEN); |
| 1452 | 1452 | int active; |
| @@ -185,14 +185,6 @@ static struct sa1111_dev_info sa1111_devices[] = { · 184 unmodified lines | ||
| 185 | 185 | }, |
| 186 | 186 | }; |
| 187 | 187 | |
| 188 | −void __init sa1111_adjust_zones(unsigned long *size, unsigned long *holes) | |
| 189 | −{ | |
| 190 | − unsigned int sz = SZ_1M >> PAGE_SHIFT; | |
| 191 | − | |
| 192 | − size[1] = size[0] - sz; | |
| 193 | − size[0] = sz; | |
| 194 | −} | |
| 195 | − | |
| 196 | 188 | /* |
| 197 | 189 | * SA1111 interrupt support. Since clearing an IRQ while there are |
| 198 | 190 | * active IRQs causes the interrupt output to pulse, the upper levels |
| @@ -18,53 +18,67 @@ · 17 unmodified lines | ||
| 18 | 18 | * along with this program; if not, write to the Free Software |
| 19 | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 20 | 20 | */ |
| 21 | +#include <linux/clk.h> | |
| 21 | 22 | #include <linux/clocksource.h> |
| 22 | 23 | #include <linux/clockchips.h> |
| 24 | +#include <linux/err.h> | |
| 23 | 25 | #include <linux/interrupt.h> |
| 24 | 26 | #include <linux/irq.h> |
| 25 | 27 | #include <linux/io.h> |
| 26 | 28 | |
| 27 | 29 | #include <asm/hardware/arm_timer.h> |
| 28 | 30 | |
| 29 | −/* | |
| 30 | − * These timers are currently always setup to be clocked at 1MHz. | |
| 31 | − */ | |
| 32 | −#define TIMER_FREQ_KHZ (1000) | |
| 33 | −#define TIMER_RELOAD (TIMER_FREQ_KHZ * 1000 / HZ) | |
| 31 | +static long __init sp804_get_clock_rate(const char *name) | |
| 32 | +{ | |
| 33 | + struct clk *clk; | |
| 34 | + long rate; | |
| 35 | + int err; | |
| 36 | + | |
| 37 | + clk = clk_get_sys("sp804", name); | |
| 38 | + if (IS_ERR(clk)) { | |
| 39 | + pr_err("sp804: %s clock not found: %d\n", name, | |
| 40 | + (int)PTR_ERR(clk)); | |
| 41 | + return PTR_ERR(clk); | |
| 42 | + } | |
| 34 | 43 | |
| 35 | −static void __iomem *clksrc_base; | |
| 44 | + err = clk_enable(clk); | |
| 45 | + if (err) { | |
| 46 | + pr_err("sp804: %s clock failed to enable: %d\n", name, err); | |
| 47 | + clk_put(clk); | |
| 48 | + return err; | |
| 49 | + } | |
| 36 | 50 | |
| 37 | −static cycle_t sp804_read(struct clocksource *cs) | |
| 38 | −{ | |
| 39 | − return ~readl(clksrc_base + TIMER_VALUE); | |
| 40 | −} | |
| 51 | + rate = clk_get_rate(clk); | |
| 52 | + if (rate < 0) { | |
| 53 | + pr_err("sp804: %s clock failed to get rate: %ld\n", name, rate); | |
| 54 | + clk_disable(clk); | |
| 55 | + clk_put(clk); | |
| 56 | + } | |
| 41 | 57 | |
| 42 | −static struct clocksource clocksource_sp804 = { | |
| 43 | − .name = "timer3", | |
| 44 | − .rating = 200, | |
| 45 | − .read = sp804_read, | |
| 46 | − .mask = CLOCKSOURCE_MASK(32), | |
| 47 | − .flags = CLOCK_SOURCE_IS_CONTINUOUS, | |
| 48 | −}; | |
| 58 | + return rate; | |
| 59 | +} | |
| 49 | 60 | |
| 50 | −void __init sp804_clocksource_init(void __iomem *base) | |
| 61 | +void __init sp804_clocksource_init(void __iomem *base, const char *name) | |
| 51 | 62 | { |
| 52 | − struct clocksource *cs = &clocksource_sp804; | |
| 63 | + long rate = sp804_get_clock_rate(name); | |
| 53 | 64 | |
| 54 | − clksrc_base = base; | |
| 65 | + if (rate < 0) | |
| 66 | + return; | |
| 55 | 67 | |
| 56 | 68 | /* setup timer 0 as free-running clocksource */ |
| 57 | − writel(0, clksrc_base + TIMER_CTRL); | |
| 58 | − writel(0xffffffff, clksrc_base + TIMER_LOAD); | |
| 59 | − writel(0xffffffff, clksrc_base + TIMER_VALUE); | |
| 69 | + writel(0, base + TIMER_CTRL); | |
| 70 | + writel(0xffffffff, base + TIMER_LOAD); | |
| 71 | + writel(0xffffffff, base + TIMER_VALUE); | |
| 60 | 72 | writel(TIMER_CTRL_32BIT | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC, |
| 61 | − clksrc_base + TIMER_CTRL); | |
| 73 | + base + TIMER_CTRL); | |
| 62 | 74 | |
| 63 | − clocksource_register_khz(cs, TIMER_FREQ_KHZ); | |
| 75 | + clocksource_mmio_init(base + TIMER_VALUE, name, | |
| 76 | + rate, 200, 32, clocksource_mmio_readl_down); | |
| 64 | 77 | } |
| 65 | 78 | |
| 66 | 79 | |
| 67 | 80 | static void __iomem *clkevt_base; |
| 81 | +static unsigned long clkevt_reload; | |
| 68 | 82 | |
| 69 | 83 | /* |
| 70 | 84 | * IRQ handler for the timer |
| @@ -90,7 +104,7 @@ static void sp804_set_mode(enum clock_event_mode mode, · 19 unmodified lines | ||
| 90 | 104 | |
| 91 | 105 | switch (mode) { |
| 92 | 106 | case CLOCK_EVT_MODE_PERIODIC: |
| 93 | − writel(TIMER_RELOAD, clkevt_base + TIMER_LOAD); | |
| 107 | + writel(clkevt_reload, clkevt_base + TIMER_LOAD); | |
| 94 | 108 | ctrl |= TIMER_CTRL_PERIODIC | TIMER_CTRL_ENABLE; |
| 95 | 109 | break; |
| 96 | 110 | |
| @@ -120,7 +134,6 @@ static int sp804_set_next_event(unsigned long next, · 23 unmodified lines | ||
| 120 | 134 | } |
| 121 | 135 | |
| 122 | 136 | static struct clock_event_device sp804_clockevent = { |
| 123 | − .name = "timer0", | |
| 124 | 137 | .shift = 32, |
| 125 | 138 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, |
| 126 | 139 | .set_mode = sp804_set_mode, |
| @@ -136,17 +149,24 @@ static struct irqaction sp804_timer_irq = { · 9 unmodified lines | ||
| 136 | 149 | .dev_id = &sp804_clockevent, |
| 137 | 150 | }; |
| 138 | 151 | |
| 139 | −void __init sp804_clockevents_init(void __iomem *base, unsigned int timer_irq) | |
| 152 | +void __init sp804_clockevents_init(void __iomem *base, unsigned int irq, | |
| 153 | + const char *name) | |
| 140 | 154 | { |
| 141 | 155 | struct clock_event_device *evt = &sp804_clockevent; |
| 156 | + long rate = sp804_get_clock_rate(name); | |
| 157 | + | |
| 158 | + if (rate < 0) | |
| 159 | + return; | |
| 142 | 160 | |
| 143 | 161 | clkevt_base = base; |
| 162 | + clkevt_reload = DIV_ROUND_CLOSEST(rate, HZ); | |
| 144 | 163 | |
| 145 | − evt->irq = timer_irq; | |
| 146 | − evt->mult = div_sc(TIMER_FREQ_KHZ, NSEC_PER_MSEC, evt->shift); | |
| 164 | + evt->name = name; | |
| 165 | + evt->irq = irq; | |
| 166 | + evt->mult = div_sc(rate, NSEC_PER_SEC, evt->shift); | |
| 147 | 167 | evt->max_delta_ns = clockevent_delta2ns(0xffffffff, evt); |
| 148 | 168 | evt->min_delta_ns = clockevent_delta2ns(0xf, evt); |
| 149 | 169 | |
| 150 | − setup_irq(timer_irq, &sp804_timer_irq); | |
| 170 | + setup_irq(irq, &sp804_timer_irq); | |
| 151 | 171 | clockevents_register_device(evt); |
| 152 | 172 | } |
| @@ -22,17 +22,16 @@ · 21 unmodified lines | ||
| 22 | 22 | #include <linux/init.h> |
| 23 | 23 | #include <linux/list.h> |
| 24 | 24 | #include <linux/io.h> |
| 25 | −#include <linux/sysdev.h> | |
| 25 | +#include <linux/syscore_ops.h> | |
| 26 | 26 | #include <linux/device.h> |
| 27 | 27 | #include <linux/amba/bus.h> |
| 28 | 28 | |
| 29 | 29 | #include <asm/mach/irq.h> |
| 30 | 30 | #include <asm/hardware/vic.h> |
| 31 | 31 | |
| 32 | −#if defined(CONFIG_PM) | |
| 32 | +#ifdef CONFIG_PM | |
| 33 | 33 | /** |
| 34 | 34 | * struct vic_device - VIC PM device |
| 35 | − * @sysdev: The system device which is registered. | |
| 36 | 35 | * @irq: The IRQ number for the base of the VIC. |
| 37 | 36 | * @base: The register base for the VIC. |
| 38 | 37 | * @resume_sources: A bitmask of interrupts for resume. |
| @@ -43,8 +42,6 @@ · 4 unmodified lines | ||
| 43 | 42 | * @protect: Save for VIC_PROTECT. |
| 44 | 43 | */ |
| 45 | 44 | struct vic_device { |
| 46 | − struct sys_device sysdev; | |
| 47 | − | |
| 48 | 45 | void __iomem *base; |
| 49 | 46 | int irq; |
| 50 | 47 | u32 resume_sources; |
| @@ -59,11 +56,6 @@ struct vic_device { · 8 unmodified lines | ||
| 59 | 56 | static struct vic_device vic_devices[CONFIG_ARM_VIC_NR]; |
| 60 | 57 | |
| 61 | 58 | static int vic_id; |
| 62 | − | |
| 63 | −static inline struct vic_device *to_vic(struct sys_device *sys) | |
| 64 | −{ | |
| 65 | − return container_of(sys, struct vic_device, sysdev); | |
| 66 | −} | |
| 67 | 59 | #endif /* CONFIG_PM */ |
| 68 | 60 | |
| 69 | 61 | /** |
| @@ -85,10 +77,9 @@ static void vic_init2(void __iomem *base) · 15 unmodified lines | ||
| 85 | 77 | writel(32, base + VIC_PL190_DEF_VECT_ADDR); |
| 86 | 78 | } |
| 87 | 79 | |
| 88 | −#if defined(CONFIG_PM) | |
| 89 | −static int vic_class_resume(struct sys_device *dev) | |
| 80 | +#ifdef CONFIG_PM | |
| 81 | +static void resume_one_vic(struct vic_device *vic) | |
| 90 | 82 | { |
| 91 | − struct vic_device *vic = to_vic(dev); | |
| 92 | 83 | void __iomem *base = vic->base; |
| 93 | 84 | |
| 94 | 85 | printk(KERN_DEBUG "%s: resuming vic at %p\n", __func__, base); |
| @@ -107,13 +98,18 @@ static int vic_class_resume(struct sys_device *dev) · 12 unmodified lines | ||
| 107 | 98 | |
| 108 | 99 | writel(vic->soft_int, base + VIC_INT_SOFT); |
| 109 | 100 | writel(~vic->soft_int, base + VIC_INT_SOFT_CLEAR); |
| 101 | +} | |
| 110 | 102 | |
| 111 | − return 0; | |
| 103 | +static void vic_resume(void) | |
| 104 | +{ | |
| 105 | + int id; | |
| 106 | + | |
| 107 | + for (id = vic_id - 1; id >= 0; id--) | |
| 108 | + resume_one_vic(vic_devices + id); | |
| 112 | 109 | } |
| 113 | 110 | |
| 114 | −static int vic_class_suspend(struct sys_device *dev, pm_message_t state) | |
| 111 | +static void suspend_one_vic(struct vic_device *vic) | |
| 115 | 112 | { |
| 116 | − struct vic_device *vic = to_vic(dev); | |
| 117 | 113 | void __iomem *base = vic->base; |
| 118 | 114 | |
| 119 | 115 | printk(KERN_DEBUG "%s: suspending vic at %p\n", __func__, base); |
| @@ -128,14 +124,21 @@ static int vic_class_suspend(struct sys_device *dev, pm_message_t state) · 8 unmodified lines | ||
| 128 | 124 | |
| 129 | 125 | writel(vic->resume_irqs, base + VIC_INT_ENABLE); |
| 130 | 126 | writel(~vic->resume_irqs, base + VIC_INT_ENABLE_CLEAR); |
| 127 | +} | |
| 128 | + | |
| 129 | +static int vic_suspend(void) | |
| 130 | +{ | |
| 131 | + int id; | |
| 132 | + | |
| 133 | + for (id = 0; id < vic_id; id++) | |
| 134 | + suspend_one_vic(vic_devices + id); | |
| 131 | 135 | |
| 132 | 136 | return 0; |
| 133 | 137 | } |
| 134 | 138 | |
| 135 | −struct sysdev_class vic_class = { | |
| 136 | − .name = "vic", | |
| 137 | − .suspend = vic_class_suspend, | |
| 138 | − .resume = vic_class_resume, | |
| 139 | +struct syscore_ops vic_syscore_ops = { | |
| 140 | + .suspend = vic_suspend, | |
| 141 | + .resume = vic_resume, | |
| 139 | 142 | }; |
| 140 | 143 | |
| 141 | 144 | /** |
| @@ -147,30 +150,8 @@ struct sysdev_class vic_class = { · 5 unmodified lines | ||
| 147 | 150 | */ |
| 148 | 151 | static int __init vic_pm_init(void) |
| 149 | 152 | { |
| 150 | − struct vic_device *dev = vic_devices; | |
| 151 | − int err; | |
| 152 | − int id; | |
| 153 | − | |
| 154 | − if (vic_id == 0) | |
| 155 | − return 0; | |
| 156 | − | |
| 157 | − err = sysdev_class_register(&vic_class); | |
| 158 | − if (err) { | |
| 159 | − printk(KERN_ERR "%s: cannot register class\n", __func__); | |
| 160 | − return err; | |
| 161 | − } | |
| 162 | − | |
| 163 | − for (id = 0; id < vic_id; id++, dev++) { | |
| 164 | − dev->sysdev.id = id; | |
| 165 | − dev->sysdev.cls = &vic_class; | |
| 166 | − | |
| 167 | − err = sysdev_register(&dev->sysdev); | |
| 168 | − if (err) { | |
| 169 | − printk(KERN_ERR "%s: failed to register device\n", | |
| 170 | − __func__); | |
| 171 | − return err; | |
| 172 | − } | |
| 173 | − } | |
| 153 | + if (vic_id > 0) | |
| 154 | + register_syscore_ops(&vic_syscore_ops); | |
| 174 | 155 | |
| 175 | 156 | return 0; |
| 176 | 157 | } |
| @@ -1,358 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −CONFIG_LOCALVERSION="-AT572D940HF" | |
| 3 | −# CONFIG_LOCALVERSION_AUTO is not set | |
| 4 | −CONFIG_SYSVIPC=y | |
| 5 | −CONFIG_POSIX_MQUEUE=y | |
| 6 | −CONFIG_BSD_PROCESS_ACCT=y | |
| 7 | −CONFIG_BSD_PROCESS_ACCT_V3=y | |
| 8 | −CONFIG_TASKSTATS=y | |
| 9 | −CONFIG_TASK_XACCT=y | |
| 10 | −CONFIG_TASK_IO_ACCOUNTING=y | |
| 11 | −CONFIG_AUDIT=y | |
| 12 | −CONFIG_CGROUPS=y | |
| 13 | −CONFIG_CGROUP_CPUACCT=y | |
| 14 | −CONFIG_CGROUP_SCHED=y | |
| 15 | −CONFIG_RT_GROUP_SCHED=y | |
| 16 | −CONFIG_SYSFS_DEPRECATED_V2=y | |
| 17 | −CONFIG_RELAY=y | |
| 18 | −CONFIG_BLK_DEV_INITRD=y | |
| 19 | −# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | |
| 20 | −CONFIG_EXPERT=y | |
| 21 | −CONFIG_SLAB=y | |
| 22 | −CONFIG_PROFILING=y | |
| 23 | −CONFIG_OPROFILE=m | |
| 24 | −CONFIG_KPROBES=y | |
| 25 | −CONFIG_MODULES=y | |
| 26 | −CONFIG_MODULE_UNLOAD=y | |
| 27 | −CONFIG_MODVERSIONS=y | |
| 28 | −CONFIG_MODULE_SRCVERSION_ALL=y | |
| 29 | −# CONFIG_BLK_DEV_BSG is not set | |
| 30 | −CONFIG_ARCH_AT91=y | |
| 31 | −CONFIG_ARCH_AT572D940HF=y | |
| 32 | −CONFIG_MACH_AT572D940HFEB=y | |
| 33 | −CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | |
| 34 | −CONFIG_NO_HZ=y | |
| 35 | −CONFIG_HIGH_RES_TIMERS=y | |
| 36 | −CONFIG_PREEMPT=y | |
| 37 | −CONFIG_CMDLINE="mem=48M console=ttyS0 initrd=0x21100000,3145728 root=/dev/ram0 rw ip=172.16.1.181" | |
| 38 | −CONFIG_KEXEC=y | |
| 39 | −CONFIG_FPE_NWFPE=y | |
| 40 | −CONFIG_FPE_NWFPE_XP=y | |
| 41 | −CONFIG_NET=y | |
| 42 | −CONFIG_PACKET=m | |
| 43 | −CONFIG_UNIX=y | |
| 44 | −CONFIG_INET=y | |
| 45 | −# CONFIG_INET_XFRM_MODE_TRANSPORT is not set | |
| 46 | −# CONFIG_INET_XFRM_MODE_TUNNEL is not set | |
| 47 | −# CONFIG_INET_XFRM_MODE_BEET is not set | |
| 48 | −# CONFIG_INET_LRO is not set | |
| 49 | −# CONFIG_INET_DIAG is not set | |
| 50 | −# CONFIG_IPV6 is not set | |
| 51 | −CONFIG_NET_PKTGEN=m | |
| 52 | −CONFIG_NET_TCPPROBE=m | |
| 53 | −CONFIG_CAN=m | |
| 54 | −CONFIG_CAN_RAW=m | |
| 55 | −CONFIG_CAN_BCM=m | |
| 56 | −CONFIG_CAN_VCAN=m | |
| 57 | −CONFIG_CAN_DEBUG_DEVICES=y | |
| 58 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 59 | −CONFIG_CONNECTOR=m | |
| 60 | −CONFIG_MTD=m | |
| 61 | −CONFIG_MTD_DEBUG=y | |
| 62 | −CONFIG_MTD_DEBUG_VERBOSE=1 | |
| 63 | −CONFIG_MTD_CONCAT=m | |
| 64 | −CONFIG_MTD_PARTITIONS=y | |
| 65 | −CONFIG_MTD_CHAR=m | |
| 66 | −CONFIG_MTD_BLOCK=m | |
| 67 | −CONFIG_MTD_BLOCK_RO=m | |
| 68 | −CONFIG_FTL=m | |
| 69 | −CONFIG_NFTL=m | |
| 70 | −CONFIG_NFTL_RW=y | |
| 71 | −CONFIG_INFTL=m | |
| 72 | −CONFIG_RFD_FTL=m | |
| 73 | −CONFIG_SSFDC=m | |
| 74 | −CONFIG_MTD_OOPS=m | |
| 75 | −CONFIG_MTD_CFI=m | |
| 76 | −CONFIG_MTD_JEDECPROBE=m | |
| 77 | −CONFIG_MTD_CFI_INTELEXT=m | |
| 78 | −CONFIG_MTD_CFI_AMDSTD=m | |
| 79 | −CONFIG_MTD_CFI_STAA=m | |
| 80 | −CONFIG_MTD_ROM=m | |
| 81 | −CONFIG_MTD_ABSENT=m | |
| 82 | −CONFIG_MTD_COMPLEX_MAPPINGS=y | |
| 83 | −CONFIG_MTD_PHYSMAP=m | |
| 84 | −CONFIG_MTD_PLATRAM=m | |
| 85 | −CONFIG_MTD_DATAFLASH=m | |
| 86 | −CONFIG_MTD_M25P80=m | |
| 87 | −CONFIG_MTD_SLRAM=m | |
| 88 | −CONFIG_MTD_PHRAM=m | |
| 89 | −CONFIG_MTD_MTDRAM=m | |
| 90 | −CONFIG_MTD_BLOCK2MTD=m | |
| 91 | −CONFIG_MTD_NAND=m | |
| 92 | −CONFIG_MTD_NAND_VERIFY_WRITE=y | |
| 93 | −CONFIG_MTD_NAND_DISKONCHIP=m | |
| 94 | −CONFIG_MTD_NAND_NANDSIM=m | |
| 95 | −CONFIG_MTD_NAND_PLATFORM=m | |
| 96 | −CONFIG_MTD_ALAUDA=m | |
| 97 | −CONFIG_MTD_UBI=m | |
| 98 | −CONFIG_MTD_UBI_GLUEBI=m | |
| 99 | −CONFIG_BLK_DEV_LOOP=y | |
| 100 | −CONFIG_BLK_DEV_CRYPTOLOOP=m | |
| 101 | −CONFIG_BLK_DEV_NBD=m | |
| 102 | −CONFIG_BLK_DEV_RAM=y | |
| 103 | −CONFIG_BLK_DEV_RAM_SIZE=65536 | |
| 104 | −CONFIG_ATMEL_TCLIB=y | |
| 105 | −CONFIG_ATMEL_SSC=m | |
| 106 | −CONFIG_SENSORS_TSL2550=m | |
| 107 | −CONFIG_DS1682=m | |
| 108 | −CONFIG_RAID_ATTRS=m | |
| 109 | −CONFIG_SCSI=m | |
| 110 | −CONFIG_SCSI_TGT=m | |
| 111 | −# CONFIG_SCSI_PROC_FS is not set | |
| 112 | −CONFIG_BLK_DEV_SD=m | |
| 113 | −CONFIG_BLK_DEV_SR=m | |
| 114 | −CONFIG_CHR_DEV_SG=m | |
| 115 | −CONFIG_CHR_DEV_SCH=m | |
| 116 | −CONFIG_SCSI_MULTI_LUN=y | |
| 117 | −CONFIG_SCSI_CONSTANTS=y | |
| 118 | −CONFIG_SCSI_LOGGING=y | |
| 119 | −CONFIG_SCSI_SCAN_ASYNC=y | |
| 120 | −CONFIG_SCSI_ISCSI_ATTRS=m | |
| 121 | −CONFIG_NETDEVICES=y | |
| 122 | −CONFIG_DUMMY=m | |
| 123 | −CONFIG_BONDING=m | |
| 124 | −CONFIG_MACVLAN=m | |
| 125 | −CONFIG_EQUALIZER=m | |
| 126 | −CONFIG_TUN=m | |
| 127 | −CONFIG_VETH=m | |
| 128 | −CONFIG_PHYLIB=y | |
| 129 | −CONFIG_MARVELL_PHY=m | |
| 130 | −CONFIG_DAVICOM_PHY=m | |
| 131 | −CONFIG_QSEMI_PHY=m | |
| 132 | −CONFIG_LXT_PHY=m | |
| 133 | −CONFIG_CICADA_PHY=m | |
| 134 | −CONFIG_VITESSE_PHY=m | |
| 135 | −CONFIG_SMSC_PHY=m | |
| 136 | −CONFIG_BROADCOM_PHY=m | |
| 137 | −CONFIG_ICPLUS_PHY=m | |
| 138 | −CONFIG_MDIO_BITBANG=m | |
| 139 | −CONFIG_NET_ETHERNET=y | |
| 140 | −# CONFIG_NETDEV_1000 is not set | |
| 141 | −# CONFIG_NETDEV_10000 is not set | |
| 142 | −CONFIG_USB_ZD1201=m | |
| 143 | −CONFIG_HOSTAP=m | |
| 144 | −CONFIG_HOSTAP_FIRMWARE=y | |
| 145 | −CONFIG_HOSTAP_FIRMWARE_NVRAM=y | |
| 146 | −CONFIG_USB_CATC=m | |
| 147 | −CONFIG_USB_KAWETH=m | |
| 148 | −CONFIG_USB_PEGASUS=m | |
| 149 | −CONFIG_USB_RTL8150=m | |
| 150 | −CONFIG_USB_USBNET=m | |
| 151 | −CONFIG_USB_NET_DM9601=m | |
| 152 | −CONFIG_USB_NET_GL620A=m | |
| 153 | −CONFIG_USB_NET_PLUSB=m | |
| 154 | −CONFIG_USB_NET_MCS7830=m | |
| 155 | −CONFIG_USB_NET_RNDIS_HOST=m | |
| 156 | −CONFIG_USB_ALI_M5632=y | |
| 157 | −CONFIG_USB_AN2720=y | |
| 158 | −CONFIG_USB_EPSON2888=y | |
| 159 | −CONFIG_USB_KC2190=y | |
| 160 | −# CONFIG_USB_NET_ZAURUS is not set | |
| 161 | −CONFIG_INPUT_MOUSEDEV=m | |
| 162 | −CONFIG_INPUT_EVDEV=m | |
| 163 | −CONFIG_INPUT_EVBUG=m | |
| 164 | −CONFIG_KEYBOARD_LKKBD=m | |
| 165 | −CONFIG_KEYBOARD_GPIO=m | |
| 166 | −CONFIG_KEYBOARD_NEWTON=m | |
| 167 | −CONFIG_KEYBOARD_STOWAWAY=m | |
| 168 | −CONFIG_KEYBOARD_SUNKBD=m | |
| 169 | −CONFIG_KEYBOARD_XTKBD=m | |
| 170 | −CONFIG_MOUSE_PS2=m | |
| 171 | −CONFIG_MOUSE_SERIAL=m | |
| 172 | −CONFIG_MOUSE_APPLETOUCH=m | |
| 173 | −CONFIG_MOUSE_VSXXXAA=m | |
| 174 | −CONFIG_MOUSE_GPIO=m | |
| 175 | −CONFIG_INPUT_MISC=y | |
| 176 | −CONFIG_INPUT_UINPUT=m | |
| 177 | −CONFIG_SERIO_SERPORT=m | |
| 178 | −CONFIG_SERIO_RAW=m | |
| 179 | −CONFIG_VT_HW_CONSOLE_BINDING=y | |
| 180 | −CONFIG_SERIAL_NONSTANDARD=y | |
| 181 | −CONFIG_N_HDLC=m | |
| 182 | −CONFIG_SPECIALIX=m | |
| 183 | −CONFIG_STALDRV=y | |
| 184 | −CONFIG_SERIAL_ATMEL=y | |
| 185 | −CONFIG_SERIAL_ATMEL_CONSOLE=y | |
| 186 | −CONFIG_IPMI_HANDLER=m | |
| 187 | −CONFIG_IPMI_DEVICE_INTERFACE=m | |
| 188 | −CONFIG_IPMI_SI=m | |
| 189 | −CONFIG_IPMI_WATCHDOG=m | |
| 190 | −CONFIG_IPMI_POWEROFF=m | |
| 191 | −CONFIG_HW_RANDOM=y | |
| 192 | −CONFIG_R3964=m | |
| 193 | −CONFIG_RAW_DRIVER=m | |
| 194 | −CONFIG_TCG_TPM=m | |
| 195 | −CONFIG_TCG_NSC=m | |
| 196 | −CONFIG_TCG_ATMEL=m | |
| 197 | −CONFIG_I2C=m | |
| 198 | −CONFIG_I2C_CHARDEV=m | |
| 199 | −CONFIG_SPI=y | |
| 200 | −CONFIG_SPI_ATMEL=y | |
| 201 | −CONFIG_SPI_BITBANG=m | |
| 202 | −CONFIG_SPI_SPIDEV=m | |
| 203 | −# CONFIG_HWMON is not set | |
| 204 | −# CONFIG_VGA_CONSOLE is not set | |
| 205 | −CONFIG_SOUND=m | |
| 206 | −CONFIG_SND=m | |
| 207 | −CONFIG_SND_SEQUENCER=m | |
| 208 | −CONFIG_SND_SEQ_DUMMY=m | |
| 209 | −CONFIG_SND_MIXER_OSS=m | |
| 210 | −CONFIG_SND_PCM_OSS=m | |
| 211 | −# CONFIG_SND_PCM_OSS_PLUGINS is not set | |
| 212 | −CONFIG_SND_SEQUENCER_OSS=y | |
| 213 | −CONFIG_SND_DYNAMIC_MINORS=y | |
| 214 | −# CONFIG_SND_VERBOSE_PROCFS is not set | |
| 215 | −CONFIG_SND_DUMMY=m | |
| 216 | −CONFIG_SND_VIRMIDI=m | |
| 217 | −CONFIG_SND_USB_AUDIO=m | |
| 218 | −CONFIG_SND_USB_CAIAQ=m | |
| 219 | −CONFIG_SND_USB_CAIAQ_INPUT=y | |
| 220 | −CONFIG_HID=m | |
| 221 | −CONFIG_HIDRAW=y | |
| 222 | −CONFIG_USB_HID=m | |
| 223 | −CONFIG_USB_HIDDEV=y | |
| 224 | −CONFIG_USB_KBD=m | |
| 225 | −CONFIG_USB_MOUSE=m | |
| 226 | −CONFIG_HID_A4TECH=m | |
| 227 | −CONFIG_HID_APPLE=m | |
| 228 | −CONFIG_HID_BELKIN=m | |
| 229 | −CONFIG_HID_CHERRY=m | |
| 230 | −CONFIG_HID_CHICONY=m | |
| 231 | −CONFIG_HID_CYPRESS=m | |
| 232 | −CONFIG_HID_EZKEY=m | |
| 233 | −CONFIG_HID_GYRATION=m | |
| 234 | −CONFIG_HID_LOGITECH=m | |
| 235 | −CONFIG_HID_MICROSOFT=m | |
| 236 | −CONFIG_HID_MONTEREY=m | |
| 237 | −CONFIG_HID_PANTHERLORD=m | |
| 238 | −CONFIG_HID_PETALYNX=m | |
| 239 | −CONFIG_HID_SAMSUNG=m | |
| 240 | −CONFIG_HID_SONY=m | |
| 241 | −CONFIG_HID_SUNPLUS=m | |
| 242 | −CONFIG_USB=y | |
| 243 | −CONFIG_USB_DEVICEFS=y | |
| 244 | −# CONFIG_USB_DEVICE_CLASS is not set | |
| 245 | −CONFIG_USB_DYNAMIC_MINORS=y | |
| 246 | −CONFIG_USB_MON=y | |
| 247 | −CONFIG_USB_OHCI_HCD=y | |
| 248 | −CONFIG_USB_STORAGE=m | |
| 249 | −CONFIG_USB_STORAGE_DATAFAB=m | |
| 250 | −CONFIG_USB_STORAGE_FREECOM=m | |
| 251 | −CONFIG_USB_STORAGE_ISD200=m | |
| 252 | −CONFIG_USB_STORAGE_USBAT=m | |
| 253 | −CONFIG_USB_STORAGE_SDDR09=m | |
| 254 | −CONFIG_USB_STORAGE_SDDR55=m | |
| 255 | −CONFIG_USB_STORAGE_JUMPSHOT=m | |
| 256 | −CONFIG_USB_STORAGE_ALAUDA=m | |
| 257 | −CONFIG_USB_STORAGE_KARMA=m | |
| 258 | −CONFIG_USB_LIBUSUAL=y | |
| 259 | −CONFIG_USB_SERIAL=m | |
| 260 | −CONFIG_USB_EZUSB=y | |
| 261 | −CONFIG_USB_SERIAL_GENERIC=y | |
| 262 | −CONFIG_USB_SERIAL_PL2303=m | |
| 263 | −CONFIG_USB_SERIAL_SPCP8X5=m | |
| 264 | −CONFIG_USB_SERIAL_DEBUG=m | |
| 265 | −CONFIG_USB_EMI62=m | |
| 266 | −CONFIG_USB_EMI26=m | |
| 267 | −CONFIG_USB_ADUTUX=m | |
| 268 | −CONFIG_USB_TEST=m | |
| 269 | −CONFIG_USB_GADGET=m | |
| 270 | −CONFIG_USB_GADGET_DEBUG_FILES=y | |
| 271 | −CONFIG_USB_GADGET_DEBUG_FS=y | |
| 272 | −CONFIG_USB_ZERO=m | |
| 273 | −CONFIG_USB_ETH=m | |
| 274 | −CONFIG_USB_GADGETFS=m | |
| 275 | −CONFIG_USB_FILE_STORAGE=m | |
| 276 | −CONFIG_USB_G_SERIAL=m | |
| 277 | −CONFIG_USB_MIDI_GADGET=m | |
| 278 | −CONFIG_MMC=y | |
| 279 | −CONFIG_SDIO_UART=m | |
| 280 | −CONFIG_MMC_AT91=m | |
| 281 | −CONFIG_MMC_SPI=m | |
| 282 | −CONFIG_NEW_LEDS=y | |
| 283 | −CONFIG_LEDS_CLASS=m | |
| 284 | −CONFIG_LEDS_GPIO=m | |
| 285 | −CONFIG_LEDS_TRIGGERS=y | |
| 286 | −CONFIG_LEDS_TRIGGER_TIMER=m | |
| 287 | −CONFIG_LEDS_TRIGGER_HEARTBEAT=m | |
| 288 | −CONFIG_RTC_CLASS=y | |
| 289 | −CONFIG_RTC_INTF_DEV_UIE_EMUL=y | |
| 290 | −CONFIG_RTC_DRV_DS1307=m | |
| 291 | −CONFIG_RTC_DRV_DS1305=y | |
| 292 | −CONFIG_EXT2_FS=y | |
| 293 | −CONFIG_EXT2_FS_XATTR=y | |
| 294 | −CONFIG_EXT2_FS_POSIX_ACL=y | |
| 295 | −CONFIG_EXT2_FS_SECURITY=y | |
| 296 | −CONFIG_EXT3_FS=y | |
| 297 | −CONFIG_EXT3_FS_POSIX_ACL=y | |
| 298 | −CONFIG_EXT3_FS_SECURITY=y | |
| 299 | −CONFIG_JBD_DEBUG=y | |
| 300 | −CONFIG_REISERFS_FS=m | |
| 301 | −CONFIG_REISERFS_CHECK=y | |
| 302 | −CONFIG_REISERFS_PROC_INFO=y | |
| 303 | −CONFIG_REISERFS_FS_XATTR=y | |
| 304 | −CONFIG_REISERFS_FS_POSIX_ACL=y | |
| 305 | −CONFIG_REISERFS_FS_SECURITY=y | |
| 306 | −CONFIG_INOTIFY=y | |
| 307 | −CONFIG_FUSE_FS=m | |
| 308 | −CONFIG_MSDOS_FS=m | |
| 309 | −CONFIG_VFAT_FS=y | |
| 310 | −CONFIG_NTFS_FS=m | |
| 311 | −CONFIG_NTFS_RW=y | |
| 312 | −CONFIG_TMPFS=y | |
| 313 | −CONFIG_TMPFS_POSIX_ACL=y | |
| 314 | −CONFIG_JFFS2_FS=m | |
| 315 | −CONFIG_JFFS2_COMPRESSION_OPTIONS=y | |
| 316 | −CONFIG_JFFS2_LZO=y | |
| 317 | −CONFIG_JFFS2_CMODE_FAVOURLZO=y | |
| 318 | −CONFIG_CRAMFS=m | |
| 319 | −CONFIG_NFS_FS=m | |
| 320 | −CONFIG_NFS_V3=y | |
| 321 | −CONFIG_NFS_V3_ACL=y | |
| 322 | −CONFIG_NFS_V4=y | |
| 323 | −CONFIG_NFSD=m | |
| 324 | −CONFIG_NFSD_V3_ACL=y | |
| 325 | −CONFIG_NFSD_V4=y | |
| 326 | −CONFIG_CIFS=m | |
| 327 | −CONFIG_CIFS_WEAK_PW_HASH=y | |
| 328 | −CONFIG_PARTITION_ADVANCED=y | |
| 329 | −CONFIG_MAC_PARTITION=y | |
| 330 | −CONFIG_BSD_DISKLABEL=y | |
| 331 | −CONFIG_MINIX_SUBPARTITION=y | |
| 332 | −CONFIG_SOLARIS_X86_PARTITION=y | |
| 333 | −CONFIG_UNIXWARE_DISKLABEL=y | |
| 334 | −CONFIG_LDM_PARTITION=y | |
| 335 | −CONFIG_LDM_DEBUG=y | |
| 336 | −CONFIG_SGI_PARTITION=y | |
| 337 | −CONFIG_SUN_PARTITION=y | |
| 338 | −CONFIG_NLS_DEFAULT="cp437" | |
| 339 | −CONFIG_NLS_CODEPAGE_437=y | |
| 340 | −CONFIG_NLS_CODEPAGE_850=m | |
| 341 | −CONFIG_NLS_ASCII=y | |
| 342 | −CONFIG_NLS_ISO8859_1=y | |
| 343 | −CONFIG_NLS_UTF8=m | |
| 344 | −CONFIG_DLM=m | |
| 345 | −CONFIG_PRINTK_TIME=y | |
| 346 | −CONFIG_MAGIC_SYSRQ=y | |
| 347 | −CONFIG_UNUSED_SYMBOLS=y | |
| 348 | −CONFIG_DEBUG_FS=y | |
| 349 | −# CONFIG_RCU_CPU_STALL_DETECTOR is not set | |
| 350 | −CONFIG_SYSCTL_SYSCALL_CHECK=y | |
| 351 | −CONFIG_CRYPTO=y | |
| 352 | −CONFIG_CRYPTO_GF128MUL=m | |
| 353 | −CONFIG_CRYPTO_HMAC=y | |
| 354 | −CONFIG_CRYPTO_MD5=y | |
| 355 | −# CONFIG_CRYPTO_ANSI_CPRNG is not set | |
| 356 | −# CONFIG_CRYPTO_HW is not set | |
| 357 | −CONFIG_CRC_CCITT=m | |
| 358 | −CONFIG_CRC16=m | |
| @@ -1,9 +1,13 @@ | ||
| 1 | 1 | CONFIG_EXPERIMENTAL=y |
| 2 | 2 | # CONFIG_LOCALVERSION_AUTO is not set |
| 3 | +CONFIG_KERNEL_LZMA=y | |
| 3 | 4 | # CONFIG_SWAP is not set |
| 4 | 5 | CONFIG_SYSVIPC=y |
| 6 | +CONFIG_IKCONFIG=y | |
| 7 | +CONFIG_IKCONFIG_PROC=y | |
| 5 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
| 6 | −CONFIG_BLK_DEV_INITRD=y | |
| 9 | +CONFIG_NAMESPACES=y | |
| 10 | +CONFIG_EMBEDDED=y | |
| 7 | 11 | CONFIG_SLAB=y |
| 8 | 12 | CONFIG_MODULES=y |
| 9 | 13 | CONFIG_MODULE_UNLOAD=y |
| @@ -15,18 +19,27 @@ CONFIG_ARCH_AT91SAM9261=y · 5 unmodified lines | ||
| 15 | 19 | CONFIG_MACH_AT91SAM9261EK=y |
| 16 | 20 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y |
| 17 | 21 | # CONFIG_ARM_THUMB is not set |
| 22 | +CONFIG_AEABI=y | |
| 23 | +# CONFIG_OABI_COMPAT is not set | |
| 18 | 24 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
| 19 | 25 | CONFIG_ZBOOT_ROM_BSS=0x0 |
| 20 | 26 | CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw" |
| 21 | −CONFIG_FPE_NWFPE=y | |
| 27 | +CONFIG_AUTO_ZRELADDR=y | |
| 28 | +CONFIG_VFP=y | |
| 29 | +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | |
| 22 | 30 | CONFIG_NET=y |
| 23 | 31 | CONFIG_PACKET=y |
| 24 | 32 | CONFIG_UNIX=y |
| 25 | 33 | CONFIG_INET=y |
| 34 | +CONFIG_IP_MULTICAST=y | |
| 26 | 35 | CONFIG_IP_PNP=y |
| 36 | +CONFIG_IP_PNP_DHCP=y | |
| 27 | 37 | CONFIG_IP_PNP_BOOTP=y |
| 28 | 38 | # CONFIG_INET_LRO is not set |
| 29 | 39 | # CONFIG_IPV6 is not set |
| 40 | +CONFIG_CFG80211=y | |
| 41 | +CONFIG_LIB80211=y | |
| 42 | +CONFIG_MAC80211=y | |
| 30 | 43 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 31 | 44 | CONFIG_MTD=y |
| 32 | 45 | CONFIG_MTD_PARTITIONS=y |
| @@ -34,8 +47,12 @@ CONFIG_MTD_CMDLINE_PARTS=y · 1 unmodified line | ||
| 34 | 47 | CONFIG_MTD_BLOCK=y |
| 35 | 48 | CONFIG_MTD_NAND=y |
| 36 | 49 | CONFIG_MTD_NAND_ATMEL=y |
| 50 | +CONFIG_MTD_UBI=y | |
| 51 | +CONFIG_MTD_UBI_GLUEBI=y | |
| 37 | 52 | CONFIG_BLK_DEV_RAM=y |
| 38 | 53 | CONFIG_BLK_DEV_RAM_SIZE=8192 |
| 54 | +CONFIG_MISC_DEVICES=y | |
| 55 | +CONFIG_ATMEL_TCLIB=y | |
| 39 | 56 | CONFIG_ATMEL_SSC=y |
| 40 | 57 | CONFIG_SCSI=y |
| 41 | 58 | CONFIG_BLK_DEV_SD=y |
| @@ -45,12 +62,27 @@ CONFIG_NET_ETHERNET=y · 3 unmodified lines | ||
| 45 | 62 | CONFIG_DM9000=y |
| 46 | 63 | # CONFIG_NETDEV_1000 is not set |
| 47 | 64 | # CONFIG_NETDEV_10000 is not set |
| 65 | +CONFIG_USB_ZD1201=m | |
| 66 | +CONFIG_RTL8187=m | |
| 67 | +CONFIG_LIBERTAS=m | |
| 68 | +CONFIG_LIBERTAS_USB=m | |
| 69 | +CONFIG_LIBERTAS_SDIO=m | |
| 70 | +CONFIG_LIBERTAS_SPI=m | |
| 71 | +CONFIG_RT2X00=m | |
| 72 | +CONFIG_RT2500USB=m | |
| 73 | +CONFIG_RT73USB=m | |
| 74 | +CONFIG_ZD1211RW=m | |
| 75 | +CONFIG_INPUT_POLLDEV=m | |
| 48 | 76 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set |
| 77 | +CONFIG_INPUT_MOUSEDEV_SCREEN_X=240 | |
| 78 | +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320 | |
| 79 | +CONFIG_INPUT_EVDEV=y | |
| 49 | 80 | # CONFIG_KEYBOARD_ATKBD is not set |
| 50 | 81 | CONFIG_KEYBOARD_GPIO=y |
| 51 | 82 | # CONFIG_INPUT_MOUSE is not set |
| 52 | 83 | CONFIG_INPUT_TOUCHSCREEN=y |
| 53 | 84 | CONFIG_TOUCHSCREEN_ADS7846=y |
| 85 | +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y | |
| 54 | 86 | CONFIG_SERIAL_ATMEL=y |
| 55 | 87 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 56 | 88 | CONFIG_HW_RANDOM=y |
| @@ -65,31 +97,62 @@ CONFIG_WATCHDOG_NOWAYOUT=y · 8 unmodified lines | ||
| 65 | 97 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 66 | 98 | CONFIG_FB=y |
| 67 | 99 | CONFIG_FB_ATMEL=y |
| 68 | −# CONFIG_VGA_CONSOLE is not set | |
| 100 | +CONFIG_BACKLIGHT_LCD_SUPPORT=y | |
| 101 | +# CONFIG_LCD_CLASS_DEVICE is not set | |
| 102 | +CONFIG_BACKLIGHT_CLASS_DEVICE=y | |
| 103 | +CONFIG_BACKLIGHT_ATMEL_LCDC=y | |
| 104 | +# CONFIG_BACKLIGHT_GENERIC is not set | |
| 105 | +CONFIG_FRAMEBUFFER_CONSOLE=y | |
| 106 | +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | |
| 107 | +CONFIG_LOGO=y | |
| 108 | +CONFIG_SOUND=y | |
| 109 | +CONFIG_SND=y | |
| 110 | +CONFIG_SND_SEQUENCER=y | |
| 111 | +CONFIG_SND_MIXER_OSS=y | |
| 112 | +CONFIG_SND_PCM_OSS=y | |
| 113 | +# CONFIG_SND_SUPPORT_OLD_API is not set | |
| 114 | +# CONFIG_SND_VERBOSE_PROCFS is not set | |
| 115 | +# CONFIG_SND_DRIVERS is not set | |
| 116 | +# CONFIG_SND_ARM is not set | |
| 117 | +CONFIG_SND_AT73C213=y | |
| 118 | +CONFIG_SND_USB_AUDIO=m | |
| 69 | 119 | # CONFIG_USB_HID is not set |
| 70 | 120 | CONFIG_USB=y |
| 71 | 121 | CONFIG_USB_DEVICEFS=y |
| 72 | −CONFIG_USB_MON=y | |
| 73 | 122 | CONFIG_USB_OHCI_HCD=y |
| 74 | 123 | CONFIG_USB_STORAGE=y |
| 75 | −CONFIG_USB_STORAGE_DEBUG=y | |
| 76 | 124 | CONFIG_USB_GADGET=y |
| 77 | 125 | CONFIG_USB_ZERO=m |
| 126 | +CONFIG_USB_ETH=m | |
| 78 | 127 | CONFIG_USB_GADGETFS=m |
| 79 | 128 | CONFIG_USB_FILE_STORAGE=m |
| 80 | 129 | CONFIG_USB_G_SERIAL=m |
| 81 | 130 | CONFIG_MMC=y |
| 82 | 131 | CONFIG_MMC_AT91=m |
| 132 | +CONFIG_NEW_LEDS=y | |
| 133 | +CONFIG_LEDS_CLASS=y | |
| 134 | +CONFIG_LEDS_GPIO=y | |
| 135 | +CONFIG_LEDS_TRIGGERS=y | |
| 136 | +CONFIG_LEDS_TRIGGER_TIMER=y | |
| 137 | +CONFIG_LEDS_TRIGGER_HEARTBEAT=y | |
| 138 | +CONFIG_LEDS_TRIGGER_GPIO=y | |
| 83 | 139 | CONFIG_RTC_CLASS=y |
| 84 | 140 | CONFIG_RTC_DRV_AT91SAM9=y |
| 85 | −CONFIG_EXT2_FS=y | |
| 86 | −CONFIG_INOTIFY=y | |
| 141 | +CONFIG_MSDOS_FS=y | |
| 87 | 142 | CONFIG_VFAT_FS=y |
| 88 | 143 | CONFIG_TMPFS=y |
| 89 | −CONFIG_CRAMFS=y | |
| 144 | +CONFIG_UBIFS_FS=y | |
| 145 | +CONFIG_UBIFS_FS_ADVANCED_COMPR=y | |
| 146 | +CONFIG_SQUASHFS=y | |
| 147 | +CONFIG_SQUASHFS_LZO=y | |
| 148 | +CONFIG_SQUASHFS_XZ=y | |
| 149 | +CONFIG_NFS_FS=y | |
| 150 | +CONFIG_NFS_V3=y | |
| 151 | +CONFIG_ROOT_NFS=y | |
| 90 | 152 | CONFIG_NLS_CODEPAGE_437=y |
| 91 | 153 | CONFIG_NLS_CODEPAGE_850=y |
| 92 | 154 | CONFIG_NLS_ISO8859_1=y |
| 93 | −CONFIG_DEBUG_KERNEL=y | |
| 94 | −CONFIG_DEBUG_USER=y | |
| 95 | −CONFIG_DEBUG_LL=y | |
| 155 | +CONFIG_NLS_ISO8859_15=y | |
| 156 | +CONFIG_NLS_UTF8=y | |
| 157 | +CONFIG_FTRACE=y | |
| 158 | +CONFIG_CRC_CCITT=m | |
| @@ -1,9 +1,13 @@ | ||
| 1 | 1 | CONFIG_EXPERIMENTAL=y |
| 2 | 2 | # CONFIG_LOCALVERSION_AUTO is not set |
| 3 | +CONFIG_KERNEL_LZMA=y | |
| 3 | 4 | # CONFIG_SWAP is not set |
| 4 | 5 | CONFIG_SYSVIPC=y |
| 6 | +CONFIG_IKCONFIG=y | |
| 7 | +CONFIG_IKCONFIG_PROC=y | |
| 5 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
| 6 | −CONFIG_BLK_DEV_INITRD=y | |
| 9 | +CONFIG_NAMESPACES=y | |
| 10 | +CONFIG_EMBEDDED=y | |
| 7 | 11 | CONFIG_SLAB=y |
| 8 | 12 | CONFIG_MODULES=y |
| 9 | 13 | CONFIG_MODULE_UNLOAD=y |
| @@ -13,53 +17,81 @@ CONFIG_MODULE_UNLOAD=y · 3 unmodified lines | ||
| 13 | 17 | CONFIG_ARCH_AT91=y |
| 14 | 18 | CONFIG_ARCH_AT91SAM9263=y |
| 15 | 19 | CONFIG_MACH_AT91SAM9263EK=y |
| 20 | +CONFIG_MACH_USB_A9263=y | |
| 21 | +CONFIG_MACH_NEOCORE926=y | |
| 16 | 22 | CONFIG_MTD_AT91_DATAFLASH_CARD=y |
| 17 | 23 | # CONFIG_ARM_THUMB is not set |
| 24 | +CONFIG_AEABI=y | |
| 25 | +# CONFIG_OABI_COMPAT is not set | |
| 18 | 26 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
| 19 | 27 | CONFIG_ZBOOT_ROM_BSS=0x0 |
| 20 | 28 | CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw" |
| 21 | −CONFIG_FPE_NWFPE=y | |
| 29 | +CONFIG_AUTO_ZRELADDR=y | |
| 22 | 30 | CONFIG_NET=y |
| 23 | 31 | CONFIG_PACKET=y |
| 24 | 32 | CONFIG_UNIX=y |
| 33 | +CONFIG_NET_KEY=y | |
| 25 | 34 | CONFIG_INET=y |
| 35 | +CONFIG_IP_MULTICAST=y | |
| 36 | +CONFIG_IP_ADVANCED_ROUTER=y | |
| 37 | +CONFIG_IP_ROUTE_VERBOSE=y | |
| 26 | 38 | CONFIG_IP_PNP=y |
| 39 | +CONFIG_IP_PNP_DHCP=y | |
| 27 | 40 | CONFIG_IP_PNP_BOOTP=y |
| 28 | 41 | CONFIG_IP_PNP_RARP=y |
| 42 | +CONFIG_NET_IPIP=y | |
| 43 | +CONFIG_IP_MROUTE=y | |
| 44 | +CONFIG_IP_PIMSM_V1=y | |
| 45 | +CONFIG_IP_PIMSM_V2=y | |
| 29 | 46 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
| 30 | 47 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
| 31 | 48 | # CONFIG_INET_XFRM_MODE_BEET is not set |
| 32 | 49 | # CONFIG_INET_LRO is not set |
| 33 | 50 | # CONFIG_INET_DIAG is not set |
| 34 | −# CONFIG_IPV6 is not set | |
| 51 | +CONFIG_IPV6=y | |
| 35 | 52 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 36 | 53 | CONFIG_MTD=y |
| 37 | 54 | CONFIG_MTD_PARTITIONS=y |
| 38 | 55 | CONFIG_MTD_CMDLINE_PARTS=y |
| 39 | 56 | CONFIG_MTD_CHAR=y |
| 40 | 57 | CONFIG_MTD_BLOCK=y |
| 58 | +CONFIG_NFTL=y | |
| 59 | +CONFIG_NFTL_RW=y | |
| 41 | 60 | CONFIG_MTD_DATAFLASH=y |
| 61 | +CONFIG_MTD_BLOCK2MTD=y | |
| 42 | 62 | CONFIG_MTD_NAND=y |
| 43 | 63 | CONFIG_MTD_NAND_ATMEL=y |
| 64 | +CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y | |
| 65 | +CONFIG_MTD_UBI=y | |
| 66 | +CONFIG_MTD_UBI_GLUEBI=y | |
| 44 | 67 | CONFIG_BLK_DEV_LOOP=y |
| 45 | 68 | CONFIG_BLK_DEV_RAM=y |
| 46 | 69 | CONFIG_BLK_DEV_RAM_SIZE=8192 |
| 47 | −CONFIG_ATMEL_SSC=y | |
| 70 | +CONFIG_MISC_DEVICES=y | |
| 71 | +CONFIG_ATMEL_PWM=y | |
| 72 | +CONFIG_ATMEL_TCLIB=y | |
| 48 | 73 | CONFIG_SCSI=y |
| 49 | 74 | CONFIG_BLK_DEV_SD=y |
| 50 | 75 | CONFIG_SCSI_MULTI_LUN=y |
| 51 | 76 | CONFIG_NETDEVICES=y |
| 52 | −CONFIG_NET_ETHERNET=y | |
| 53 | 77 | CONFIG_MII=y |
| 78 | +CONFIG_SMSC_PHY=y | |
| 79 | +CONFIG_NET_ETHERNET=y | |
| 54 | 80 | CONFIG_MACB=y |
| 81 | +# CONFIG_NETDEV_1000 is not set | |
| 82 | +# CONFIG_NETDEV_10000 is not set | |
| 83 | +CONFIG_USB_ZD1201=m | |
| 84 | +CONFIG_INPUT_POLLDEV=m | |
| 55 | 85 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set |
| 86 | +CONFIG_INPUT_MOUSEDEV_SCREEN_X=240 | |
| 87 | +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320 | |
| 56 | 88 | CONFIG_INPUT_EVDEV=y |
| 57 | 89 | # CONFIG_KEYBOARD_ATKBD is not set |
| 58 | 90 | CONFIG_KEYBOARD_GPIO=y |
| 59 | 91 | # CONFIG_INPUT_MOUSE is not set |
| 60 | 92 | CONFIG_INPUT_TOUCHSCREEN=y |
| 61 | 93 | CONFIG_TOUCHSCREEN_ADS7846=y |
| 62 | −# CONFIG_SERIO is not set | |
| 94 | +CONFIG_LEGACY_PTY_COUNT=4 | |
| 63 | 95 | CONFIG_SERIAL_ATMEL=y |
| 64 | 96 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 65 | 97 | CONFIG_HW_RANDOM=y |
| @@ -74,8 +106,25 @@ CONFIG_WATCHDOG_NOWAYOUT=y · 8 unmodified lines | ||
| 74 | 106 | CONFIG_AT91SAM9X_WATCHDOG=y |
| 75 | 107 | CONFIG_FB=y |
| 76 | 108 | CONFIG_FB_ATMEL=y |
| 77 | −# CONFIG_VGA_CONSOLE is not set | |
| 78 | −# CONFIG_USB_HID is not set | |
| 109 | +CONFIG_BACKLIGHT_LCD_SUPPORT=y | |
| 110 | +CONFIG_LCD_CLASS_DEVICE=y | |
| 111 | +CONFIG_BACKLIGHT_CLASS_DEVICE=y | |
| 112 | +CONFIG_BACKLIGHT_ATMEL_LCDC=y | |
| 113 | +CONFIG_FRAMEBUFFER_CONSOLE=y | |
| 114 | +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | |
| 115 | +CONFIG_LOGO=y | |
| 116 | +CONFIG_SOUND=y | |
| 117 | +CONFIG_SND=y | |
| 118 | +CONFIG_SND_SEQUENCER=y | |
| 119 | +CONFIG_SND_MIXER_OSS=y | |
| 120 | +CONFIG_SND_PCM_OSS=y | |
| 121 | +# CONFIG_SND_SUPPORT_OLD_API is not set | |
| 122 | +# CONFIG_SND_VERBOSE_PROCFS is not set | |
| 123 | +# CONFIG_SND_DRIVERS is not set | |
| 124 | +# CONFIG_SND_ARM is not set | |
| 125 | +CONFIG_SND_ATMEL_AC97C=y | |
| 126 | +# CONFIG_SND_SPI is not set | |
| 127 | +CONFIG_SND_USB_AUDIO=m | |
| 79 | 128 | CONFIG_USB=y |
| 80 | 129 | CONFIG_USB_DEVICEFS=y |
| 81 | 130 | CONFIG_USB_MON=y |
| @@ -83,24 +132,37 @@ CONFIG_USB_OHCI_HCD=y · 1 unmodified line | ||
| 83 | 132 | CONFIG_USB_STORAGE=y |
| 84 | 133 | CONFIG_USB_GADGET=y |
| 85 | 134 | CONFIG_USB_ZERO=m |
| 135 | +CONFIG_USB_ETH=m | |
| 86 | 136 | CONFIG_USB_GADGETFS=m |
| 87 | 137 | CONFIG_USB_FILE_STORAGE=m |
| 88 | 138 | CONFIG_USB_G_SERIAL=m |
| 89 | 139 | CONFIG_MMC=y |
| 140 | +CONFIG_SDIO_UART=m | |
| 90 | 141 | CONFIG_MMC_AT91=m |
| 142 | +CONFIG_NEW_LEDS=y | |
| 143 | +CONFIG_LEDS_CLASS=y | |
| 144 | +CONFIG_LEDS_ATMEL_PWM=y | |
| 145 | +CONFIG_LEDS_GPIO=y | |
| 146 | +CONFIG_LEDS_TRIGGERS=y | |
| 147 | +CONFIG_LEDS_TRIGGER_HEARTBEAT=y | |
| 91 | 148 | CONFIG_RTC_CLASS=y |
| 92 | 149 | CONFIG_RTC_DRV_AT91SAM9=y |
| 93 | 150 | CONFIG_EXT2_FS=y |
| 94 | −CONFIG_INOTIFY=y | |
| 151 | +CONFIG_FUSE_FS=m | |
| 95 | 152 | CONFIG_VFAT_FS=y |
| 96 | 153 | CONFIG_TMPFS=y |
| 97 | 154 | CONFIG_JFFS2_FS=y |
| 155 | +CONFIG_UBIFS_FS=y | |
| 156 | +CONFIG_UBIFS_FS_ADVANCED_COMPR=y | |
| 98 | 157 | CONFIG_CRAMFS=y |
| 99 | 158 | CONFIG_NFS_FS=y |
| 159 | +CONFIG_NFS_V3=y | |
| 160 | +CONFIG_NFS_V3_ACL=y | |
| 161 | +CONFIG_NFS_V4=y | |
| 100 | 162 | CONFIG_ROOT_NFS=y |
| 101 | 163 | CONFIG_NLS_CODEPAGE_437=y |
| 102 | 164 | CONFIG_NLS_CODEPAGE_850=y |
| 103 | 165 | CONFIG_NLS_ISO8859_1=y |
| 104 | −CONFIG_DEBUG_KERNEL=y | |
| 166 | +CONFIG_FTRACE=y | |
| 105 | 167 | CONFIG_DEBUG_USER=y |
| 106 | −CONFIG_DEBUG_LL=y | |
| 168 | +CONFIG_XZ_DEC=y | |
| @@ -0,0 +1,48 @@ | ||
| 1 | +CONFIG_EXPERIMENTAL=y | |
| 2 | +CONFIG_LOG_BUF_SHIFT=14 | |
| 3 | +CONFIG_EMBEDDED=y | |
| 4 | +# CONFIG_HOTPLUG is not set | |
| 5 | +# CONFIG_ELF_CORE is not set | |
| 6 | +# CONFIG_FUTEX is not set | |
| 7 | +# CONFIG_TIMERFD is not set | |
| 8 | +# CONFIG_VM_EVENT_COUNTERS is not set | |
| 9 | +# CONFIG_COMPAT_BRK is not set | |
| 10 | +CONFIG_SLAB=y | |
| 11 | +# CONFIG_LBDAF is not set | |
| 12 | +# CONFIG_BLK_DEV_BSG is not set | |
| 13 | +# CONFIG_IOSCHED_DEADLINE is not set | |
| 14 | +# CONFIG_IOSCHED_CFQ is not set | |
| 15 | +# CONFIG_MMU is not set | |
| 16 | +CONFIG_ARCH_AT91=y | |
| 17 | +CONFIG_ARCH_AT91X40=y | |
| 18 | +CONFIG_MACH_AT91EB01=y | |
| 19 | +CONFIG_AT91_EARLY_USART0=y | |
| 20 | +CONFIG_CPU_ARM7TDMI=y | |
| 21 | +CONFIG_SET_MEM_PARAM=y | |
| 22 | +CONFIG_DRAM_BASE=0x01000000 | |
| 23 | +CONFIG_DRAM_SIZE=0x00400000 | |
| 24 | +CONFIG_FLASH_MEM_BASE=0x01400000 | |
| 25 | +CONFIG_PROCESSOR_ID=0x14000040 | |
| 26 | +CONFIG_ZBOOT_ROM_TEXT=0x0 | |
| 27 | +CONFIG_ZBOOT_ROM_BSS=0x0 | |
| 28 | +CONFIG_BINFMT_FLAT=y | |
| 29 | +# CONFIG_SUSPEND is not set | |
| 30 | +# CONFIG_FW_LOADER is not set | |
| 31 | +CONFIG_MTD=y | |
| 32 | +CONFIG_MTD_PARTITIONS=y | |
| 33 | +CONFIG_MTD_CHAR=y | |
| 34 | +CONFIG_MTD_BLOCK=y | |
| 35 | +CONFIG_MTD_RAM=y | |
| 36 | +CONFIG_MTD_ROM=y | |
| 37 | +CONFIG_BLK_DEV_RAM=y | |
| 38 | +# CONFIG_INPUT is not set | |
| 39 | +# CONFIG_SERIO is not set | |
| 40 | +# CONFIG_VT is not set | |
| 41 | +# CONFIG_DEVKMEM is not set | |
| 42 | +# CONFIG_HW_RANDOM is not set | |
| 43 | +# CONFIG_HWMON is not set | |
| 44 | +# CONFIG_USB_SUPPORT is not set | |
| 45 | +CONFIG_EXT2_FS=y | |
| 46 | +# CONFIG_DNOTIFY is not set | |
| 47 | +CONFIG_ROMFS_FS=y | |
| 48 | +# CONFIG_ENABLE_MUST_CHECK is not set | |
| @@ -8,8 +8,6 @@ CONFIG_MODULE_UNLOAD=y · 7 unmodified lines | ||
| 8 | 8 | # CONFIG_BLK_DEV_BSG is not set |
| 9 | 9 | CONFIG_ARCH_DOVE=y |
| 10 | 10 | CONFIG_MACH_DOVE_DB=y |
| 11 | −CONFIG_CPU_V6=y | |
| 12 | −CONFIG_CPU_32v6K=y | |
| 13 | 11 | CONFIG_NO_HZ=y |
| 14 | 12 | CONFIG_HIGH_RES_TIMERS=y |
| 15 | 13 | CONFIG_AEABI=y |
| @@ -44,7 +42,6 @@ CONFIG_MTD_UBI=y · 28 unmodified lines | ||
| 44 | 42 | CONFIG_BLK_DEV_LOOP=y |
| 45 | 43 | CONFIG_BLK_DEV_RAM=y |
| 46 | 44 | CONFIG_BLK_DEV_RAM_COUNT=1 |
| 47 | −# CONFIG_MISC_DEVICES is not set | |
| 48 | 45 | # CONFIG_SCSI_PROC_FS is not set |
| 49 | 46 | CONFIG_BLK_DEV_SD=y |
| 50 | 47 | # CONFIG_SCSI_LOWLEVEL is not set |
| @@ -59,12 +56,12 @@ CONFIG_INPUT_EVDEV=y · 8 unmodified lines | ||
| 59 | 56 | # CONFIG_KEYBOARD_ATKBD is not set |
| 60 | 57 | # CONFIG_MOUSE_PS2 is not set |
| 61 | 58 | # CONFIG_SERIO is not set |
| 59 | +CONFIG_LEGACY_PTY_COUNT=16 | |
| 62 | 60 | # CONFIG_DEVKMEM is not set |
| 63 | 61 | CONFIG_SERIAL_8250=y |
| 64 | 62 | CONFIG_SERIAL_8250_CONSOLE=y |
| 65 | 63 | # CONFIG_SERIAL_8250_PCI is not set |
| 66 | 64 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 |
| 67 | −CONFIG_LEGACY_PTY_COUNT=16 | |
| 68 | 65 | # CONFIG_HW_RANDOM is not set |
| 69 | 66 | CONFIG_I2C=y |
| 70 | 67 | CONFIG_I2C_CHARDEV=y |
| @@ -72,12 +69,10 @@ CONFIG_I2C_MV64XXX=y · 1 unmodified line | ||
| 72 | 69 | CONFIG_SPI=y |
| 73 | 70 | CONFIG_SPI_ORION=y |
| 74 | 71 | # CONFIG_HWMON is not set |
| 75 | −# CONFIG_VGA_CONSOLE is not set | |
| 76 | 72 | CONFIG_USB=y |
| 77 | 73 | CONFIG_USB_DEVICEFS=y |
| 78 | 74 | CONFIG_USB_EHCI_HCD=y |
| 79 | 75 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
| 80 | −CONFIG_USB_EHCI_TT_NEWSCHED=y | |
| 81 | 76 | CONFIG_USB_STORAGE=y |
| 82 | 77 | CONFIG_RTC_CLASS=y |
| 83 | 78 | CONFIG_RTC_DRV_MV=y |
| @@ -86,7 +81,6 @@ CONFIG_MV_XOR=y · 2 unmodified lines | ||
| 86 | 81 | CONFIG_EXT2_FS=y |
| 87 | 82 | CONFIG_EXT3_FS=y |
| 88 | 83 | # CONFIG_EXT3_FS_XATTR is not set |
| 89 | −CONFIG_INOTIFY=y | |
| 90 | 84 | CONFIG_ISO9660_FS=y |
| 91 | 85 | CONFIG_JOLIET=y |
| 92 | 86 | CONFIG_UDF_FS=m |
| @@ -110,23 +104,19 @@ CONFIG_DEBUG_KERNEL=y · 17 unmodified lines | ||
| 110 | 104 | CONFIG_TIMER_STATS=y |
| 111 | 105 | # CONFIG_DEBUG_BUGVERBOSE is not set |
| 112 | 106 | CONFIG_DEBUG_INFO=y |
| 113 | −# CONFIG_RCU_CPU_STALL_DETECTOR is not set | |
| 114 | 107 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| 115 | 108 | CONFIG_DEBUG_USER=y |
| 116 | 109 | CONFIG_DEBUG_ERRORS=y |
| 117 | 110 | CONFIG_CRYPTO_NULL=y |
| 118 | −CONFIG_CRYPTO_CBC=y | |
| 119 | 111 | CONFIG_CRYPTO_ECB=m |
| 120 | 112 | CONFIG_CRYPTO_PCBC=m |
| 121 | 113 | CONFIG_CRYPTO_HMAC=y |
| 122 | 114 | CONFIG_CRYPTO_MD4=y |
| 123 | −CONFIG_CRYPTO_MD5=y | |
| 124 | 115 | CONFIG_CRYPTO_SHA1=y |
| 125 | 116 | CONFIG_CRYPTO_SHA256=y |
| 126 | 117 | CONFIG_CRYPTO_SHA512=y |
| 127 | 118 | CONFIG_CRYPTO_AES=y |
| 128 | 119 | CONFIG_CRYPTO_BLOWFISH=y |
| 129 | −CONFIG_CRYPTO_DES=y | |
| 130 | 120 | CONFIG_CRYPTO_TEA=y |
| 131 | 121 | CONFIG_CRYPTO_TWOFISH=y |
| 132 | 122 | CONFIG_CRYPTO_DEFLATE=y |
| @@ -8,7 +8,9 @@ CONFIG_ARCH_EXYNOS4=y · 7 unmodified lines | ||
| 8 | 8 | CONFIG_S3C_LOWLEVEL_UART_PORT=1 |
| 9 | 9 | CONFIG_MACH_SMDKC210=y |
| 10 | 10 | CONFIG_MACH_SMDKV310=y |
| 11 | +CONFIG_MACH_ARMLEX4210=y | |
| 11 | 12 | CONFIG_MACH_UNIVERSAL_C210=y |
| 13 | +CONFIG_MACH_NURI=y | |
| 12 | 14 | CONFIG_NO_HZ=y |
| 13 | 15 | CONFIG_HIGH_RES_TIMERS=y |
| 14 | 16 | CONFIG_SMP=y |
| @@ -15,6 +15,7 @@ CONFIG_ARCH_MXC=y · 14 unmodified lines | ||
| 15 | 15 | CONFIG_ARCH_MX1=y |
| 16 | 16 | CONFIG_ARCH_MX1ADS=y |
| 17 | 17 | CONFIG_MACH_SCB9328=y |
| 18 | +CONFIG_MACH_APF9328=y | |
| 18 | 19 | CONFIG_MXC_IRQ_PRIOR=y |
| 19 | 20 | CONFIG_NO_HZ=y |
| 20 | 21 | CONFIG_HIGH_RES_TIMERS=y |
| @@ -13,7 +13,7 @@ CONFIG_MODULE_SRCVERSION_ALL=y · 12 unmodified lines | ||
| 13 | 13 | # CONFIG_LBDAF is not set |
| 14 | 14 | # CONFIG_BLK_DEV_BSG is not set |
| 15 | 15 | CONFIG_ARCH_MXC=y |
| 16 | −CONFIG_ARCH_MX5=y | |
| 16 | +CONFIG_ARCH_MX51=y | |
| 17 | 17 | CONFIG_MACH_MX51_BABBAGE=y |
| 18 | 18 | CONFIG_MACH_MX51_3DS=y |
| 19 | 19 | CONFIG_MACH_EUKREA_CPUIMX51=y |
| @@ -0,0 +1,129 @@ | ||
| 1 | +CONFIG_EXPERIMENTAL=y | |
| 2 | +CONFIG_SYSVIPC=y | |
| 3 | +CONFIG_TASKSTATS=y | |
| 4 | +CONFIG_TASK_DELAY_ACCT=y | |
| 5 | +CONFIG_TASK_XACCT=y | |
| 6 | +CONFIG_TASK_IO_ACCOUNTING=y | |
| 7 | +CONFIG_IKCONFIG=y | |
| 8 | +CONFIG_IKCONFIG_PROC=y | |
| 9 | +# CONFIG_UTS_NS is not set | |
| 10 | +# CONFIG_IPC_NS is not set | |
| 11 | +# CONFIG_USER_NS is not set | |
| 12 | +# CONFIG_PID_NS is not set | |
| 13 | +# CONFIG_NET_NS is not set | |
| 14 | +CONFIG_PERF_EVENTS=y | |
| 15 | +# CONFIG_COMPAT_BRK is not set | |
| 16 | +CONFIG_MODULES=y | |
| 17 | +CONFIG_MODULE_FORCE_LOAD=y | |
| 18 | +CONFIG_MODULE_UNLOAD=y | |
| 19 | +CONFIG_MODULE_FORCE_UNLOAD=y | |
| 20 | +CONFIG_MODVERSIONS=y | |
| 21 | +CONFIG_BLK_DEV_INTEGRITY=y | |
| 22 | +# CONFIG_IOSCHED_DEADLINE is not set | |
| 23 | +# CONFIG_IOSCHED_CFQ is not set | |
| 24 | +CONFIG_ARCH_MXS=y | |
| 25 | +CONFIG_MACH_STMP378X_DEVB=y | |
| 26 | +CONFIG_MACH_TX28=y | |
| 27 | +# CONFIG_ARM_THUMB is not set | |
| 28 | +CONFIG_NO_HZ=y | |
| 29 | +CONFIG_HIGH_RES_TIMERS=y | |
| 30 | +CONFIG_PREEMPT_VOLUNTARY=y | |
| 31 | +CONFIG_AEABI=y | |
| 32 | +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 | |
| 33 | +CONFIG_AUTO_ZRELADDR=y | |
| 34 | +CONFIG_FPE_NWFPE=y | |
| 35 | +CONFIG_NET=y | |
| 36 | +CONFIG_PACKET=y | |
| 37 | +CONFIG_UNIX=y | |
| 38 | +CONFIG_INET=y | |
| 39 | +CONFIG_IP_PNP=y | |
| 40 | +CONFIG_IP_PNP_DHCP=y | |
| 41 | +CONFIG_SYN_COOKIES=y | |
| 42 | +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set | |
| 43 | +# CONFIG_INET_XFRM_MODE_TUNNEL is not set | |
| 44 | +# CONFIG_INET_XFRM_MODE_BEET is not set | |
| 45 | +# CONFIG_INET_LRO is not set | |
| 46 | +# CONFIG_INET_DIAG is not set | |
| 47 | +# CONFIG_IPV6 is not set | |
| 48 | +CONFIG_CAN=m | |
| 49 | +CONFIG_CAN_RAW=m | |
| 50 | +CONFIG_CAN_BCM=m | |
| 51 | +CONFIG_CAN_DEV=m | |
| 52 | +CONFIG_CAN_FLEXCAN=m | |
| 53 | +# CONFIG_WIRELESS is not set | |
| 54 | +CONFIG_DEVTMPFS=y | |
| 55 | +# CONFIG_FIRMWARE_IN_KERNEL is not set | |
| 56 | +# CONFIG_BLK_DEV is not set | |
| 57 | +CONFIG_NETDEVICES=y | |
| 58 | +CONFIG_NET_ETHERNET=y | |
| 59 | +CONFIG_ENC28J60=y | |
| 60 | +# CONFIG_NETDEV_1000 is not set | |
| 61 | +# CONFIG_NETDEV_10000 is not set | |
| 62 | +# CONFIG_WLAN is not set | |
| 63 | +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set | |
| 64 | +CONFIG_INPUT_EVDEV=m | |
| 65 | +# CONFIG_INPUT_KEYBOARD is not set | |
| 66 | +# CONFIG_INPUT_MOUSE is not set | |
| 67 | +CONFIG_INPUT_TOUCHSCREEN=y | |
| 68 | +CONFIG_TOUCHSCREEN_TSC2007=m | |
| 69 | +# CONFIG_SERIO is not set | |
| 70 | +CONFIG_VT_HW_CONSOLE_BINDING=y | |
| 71 | +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y | |
| 72 | +# CONFIG_LEGACY_PTYS is not set | |
| 73 | +# CONFIG_DEVKMEM is not set | |
| 74 | +CONFIG_SERIAL_AMBA_PL011=y | |
| 75 | +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | |
| 76 | +# CONFIG_HW_RANDOM is not set | |
| 77 | +CONFIG_I2C=m | |
| 78 | +# CONFIG_I2C_COMPAT is not set | |
| 79 | +CONFIG_I2C_CHARDEV=m | |
| 80 | +CONFIG_I2C_MXS=m | |
| 81 | +CONFIG_SPI=y | |
| 82 | +CONFIG_SPI_GPIO=m | |
| 83 | +CONFIG_DEBUG_GPIO=y | |
| 84 | +CONFIG_GPIO_SYSFS=y | |
| 85 | +# CONFIG_HWMON is not set | |
| 86 | +# CONFIG_MFD_SUPPORT is not set | |
| 87 | +CONFIG_DISPLAY_SUPPORT=m | |
| 88 | +# CONFIG_HID_SUPPORT is not set | |
| 89 | +# CONFIG_USB_SUPPORT is not set | |
| 90 | +CONFIG_MMC=y | |
| 91 | +CONFIG_MMC_MXS=y | |
| 92 | +CONFIG_RTC_CLASS=m | |
| 93 | +CONFIG_RTC_DRV_DS1307=m | |
| 94 | +CONFIG_DMADEVICES=y | |
| 95 | +CONFIG_MXS_DMA=y | |
| 96 | +CONFIG_EXT3_FS=y | |
| 97 | +# CONFIG_DNOTIFY is not set | |
| 98 | +CONFIG_FSCACHE=m | |
| 99 | +CONFIG_FSCACHE_STATS=y | |
| 100 | +CONFIG_CACHEFILES=m | |
| 101 | +CONFIG_TMPFS=y | |
| 102 | +CONFIG_TMPFS_POSIX_ACL=y | |
| 103 | +# CONFIG_MISC_FILESYSTEMS is not set | |
| 104 | +CONFIG_NFS_FS=y | |
| 105 | +CONFIG_NFS_V3=y | |
| 106 | +CONFIG_NFS_V3_ACL=y | |
| 107 | +CONFIG_NFS_V4=y | |
| 108 | +CONFIG_ROOT_NFS=y | |
| 109 | +CONFIG_PRINTK_TIME=y | |
| 110 | +CONFIG_FRAME_WARN=2048 | |
| 111 | +CONFIG_MAGIC_SYSRQ=y | |
| 112 | +CONFIG_UNUSED_SYMBOLS=y | |
| 113 | +CONFIG_DEBUG_KERNEL=y | |
| 114 | +CONFIG_LOCKUP_DETECTOR=y | |
| 115 | +CONFIG_DETECT_HUNG_TASK=y | |
| 116 | +CONFIG_TIMER_STATS=y | |
| 117 | +CONFIG_PROVE_LOCKING=y | |
| 118 | +CONFIG_DEBUG_SPINLOCK_SLEEP=y | |
| 119 | +CONFIG_DEBUG_INFO=y | |
| 120 | +CONFIG_SYSCTL_SYSCALL_CHECK=y | |
| 121 | +CONFIG_BLK_DEV_IO_TRACE=y | |
| 122 | +CONFIG_STRICT_DEVMEM=y | |
| 123 | +CONFIG_DEBUG_USER=y | |
| 124 | +CONFIG_CRYPTO=y | |
| 125 | +CONFIG_CRYPTO_CRC32C=m | |
| 126 | +# CONFIG_CRYPTO_ANSI_CPRNG is not set | |
| 127 | +# CONFIG_CRYPTO_HW is not set | |
| 128 | +CONFIG_CRC_ITU_T=m | |
| 129 | +CONFIG_CRC7=m | |
| @@ -1,104 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −# CONFIG_LOCALVERSION_AUTO is not set | |
| 3 | −# CONFIG_SWAP is not set | |
| 4 | −CONFIG_SYSVIPC=y | |
| 5 | −CONFIG_BLK_DEV_INITRD=y | |
| 6 | −# CONFIG_COMPAT_BRK is not set | |
| 7 | −CONFIG_MODULES=y | |
| 8 | −CONFIG_MODULE_UNLOAD=y | |
| 9 | −# CONFIG_BLK_DEV_BSG is not set | |
| 10 | −# CONFIG_IOSCHED_DEADLINE is not set | |
| 11 | −# CONFIG_IOSCHED_CFQ is not set | |
| 12 | −CONFIG_ARCH_AT91=y | |
| 13 | −CONFIG_ARCH_AT91SAM9263=y | |
| 14 | −CONFIG_MACH_NEOCORE926=y | |
| 15 | −CONFIG_MTD_AT91_DATAFLASH_CARD=y | |
| 16 | −CONFIG_ZBOOT_ROM_TEXT=0x0 | |
| 17 | −CONFIG_ZBOOT_ROM_BSS=0x0 | |
| 18 | −CONFIG_FPE_NWFPE=y | |
| 19 | −CONFIG_NET=y | |
| 20 | −CONFIG_PACKET=y | |
| 21 | −CONFIG_UNIX=y | |
| 22 | −CONFIG_NET_KEY=y | |
| 23 | −CONFIG_INET=y | |
| 24 | −CONFIG_IP_PNP=y | |
| 25 | −CONFIG_IP_PNP_DHCP=y | |
| 26 | −CONFIG_IP_PNP_BOOTP=y | |
| 27 | −CONFIG_IP_PNP_RARP=y | |
| 28 | −CONFIG_NET_IPIP=y | |
| 29 | −# CONFIG_INET_LRO is not set | |
| 30 | −CONFIG_IPV6=y | |
| 31 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 32 | −# CONFIG_PREVENT_FIRMWARE_BUILD is not set | |
| 33 | −CONFIG_MTD=y | |
| 34 | −CONFIG_MTD_PARTITIONS=y | |
| 35 | −CONFIG_MTD_CHAR=y | |
| 36 | −CONFIG_MTD_BLOCK=y | |
| 37 | −CONFIG_NFTL=y | |
| 38 | −CONFIG_NFTL_RW=y | |
| 39 | −CONFIG_MTD_BLOCK2MTD=y | |
| 40 | −CONFIG_MTD_NAND=y | |
| 41 | −CONFIG_MTD_NAND_ECC_SMC=y | |
| 42 | −CONFIG_MTD_NAND_VERIFY_WRITE=y | |
| 43 | −CONFIG_MTD_NAND_ATMEL=y | |
| 44 | −CONFIG_MTD_NAND_PLATFORM=y | |
| 45 | −CONFIG_BLK_DEV_LOOP=y | |
| 46 | −CONFIG_BLK_DEV_NBD=y | |
| 47 | −CONFIG_ATMEL_PWM=y | |
| 48 | −CONFIG_ATMEL_TCLIB=y | |
| 49 | −CONFIG_SCSI=y | |
| 50 | −CONFIG_CHR_DEV_SG=y | |
| 51 | −CONFIG_NETDEVICES=y | |
| 52 | −CONFIG_SMSC_PHY=y | |
| 53 | −CONFIG_NET_ETHERNET=y | |
| 54 | −CONFIG_MACB=y | |
| 55 | −# CONFIG_NETDEV_1000 is not set | |
| 56 | −# CONFIG_NETDEV_10000 is not set | |
| 57 | −# CONFIG_INPUT_MOUSEDEV_PSAUX is not set | |
| 58 | −CONFIG_INPUT_EVDEV=y | |
| 59 | −CONFIG_INPUT_TOUCHSCREEN=y | |
| 60 | −CONFIG_TOUCHSCREEN_ADS7846=y | |
| 61 | −CONFIG_VT_HW_CONSOLE_BINDING=y | |
| 62 | −# CONFIG_DEVKMEM is not set | |
| 63 | −CONFIG_SERIAL_NONSTANDARD=y | |
| 64 | −CONFIG_SERIAL_ATMEL=y | |
| 65 | −CONFIG_SERIAL_ATMEL_CONSOLE=y | |
| 66 | −# CONFIG_SERIAL_ATMEL_PDC is not set | |
| 67 | −# CONFIG_HW_RANDOM is not set | |
| 68 | −CONFIG_I2C=y | |
| 69 | −CONFIG_I2C_CHARDEV=y | |
| 70 | −CONFIG_SPI=y | |
| 71 | −CONFIG_SPI_ATMEL=y | |
| 72 | −# CONFIG_HWMON is not set | |
| 73 | −CONFIG_VIDEO_OUTPUT_CONTROL=y | |
| 74 | −CONFIG_FB=y | |
| 75 | −CONFIG_FB_ATMEL=y | |
| 76 | −CONFIG_BACKLIGHT_LCD_SUPPORT=y | |
| 77 | −CONFIG_LCD_CLASS_DEVICE=y | |
| 78 | −CONFIG_BACKLIGHT_CLASS_DEVICE=y | |
| 79 | −CONFIG_BACKLIGHT_ATMEL_LCDC=y | |
| 80 | −# CONFIG_VGA_CONSOLE is not set | |
| 81 | −CONFIG_FRAMEBUFFER_CONSOLE=y | |
| 82 | −CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | |
| 83 | −CONFIG_LOGO=y | |
| 84 | −CONFIG_USB=y | |
| 85 | −CONFIG_USB_DEVICEFS=y | |
| 86 | −CONFIG_USB_MON=y | |
| 87 | −CONFIG_USB_OHCI_HCD=y | |
| 88 | −CONFIG_USB_STORAGE=y | |
| 89 | −CONFIG_MMC=y | |
| 90 | −CONFIG_SDIO_UART=y | |
| 91 | −CONFIG_MMC_AT91=m | |
| 92 | −CONFIG_EXT2_FS=y | |
| 93 | −# CONFIG_DNOTIFY is not set | |
| 94 | −CONFIG_AUTOFS_FS=y | |
| 95 | −CONFIG_VFAT_FS=y | |
| 96 | −CONFIG_TMPFS=y | |
| 97 | −CONFIG_JFFS2_FS=y | |
| 98 | −CONFIG_JFFS2_FS_WBUF_VERIFY=y | |
| 99 | −CONFIG_NFS_FS=y | |
| 100 | −CONFIG_ROOT_NFS=y | |
| 101 | −# CONFIG_ENABLE_WARN_DEPRECATED is not set | |
| 102 | −# CONFIG_ENABLE_MUST_CHECK is not set | |
| 103 | −CONFIG_SYSCTL_SYSCALL_CHECK=y | |
| 104 | −# CONFIG_CRYPTO_HW is not set | |
| @@ -1,56 +0,0 @@ | ||
| 1 | −CONFIG_IKCONFIG=y | |
| 2 | −CONFIG_IKCONFIG_PROC=y | |
| 3 | −CONFIG_BLK_DEV_INITRD=y | |
| 4 | −CONFIG_MODULES=y | |
| 5 | −CONFIG_MODULE_UNLOAD=y | |
| 6 | −# CONFIG_IOSCHED_DEADLINE is not set | |
| 7 | −# CONFIG_IOSCHED_CFQ is not set | |
| 8 | −CONFIG_ARCH_NS9XXX=y | |
| 9 | −CONFIG_MACH_CC9P9360DEV=y | |
| 10 | −CONFIG_MACH_CC9P9360JS=y | |
| 11 | −CONFIG_NO_HZ=y | |
| 12 | −CONFIG_HIGH_RES_TIMERS=y | |
| 13 | −CONFIG_FPE_NWFPE=y | |
| 14 | −CONFIG_NET=y | |
| 15 | −CONFIG_PACKET=m | |
| 16 | −CONFIG_INET=y | |
| 17 | −CONFIG_IP_PNP=y | |
| 18 | −CONFIG_SYN_COOKIES=y | |
| 19 | −CONFIG_MTD=m | |
| 20 | −CONFIG_MTD_CONCAT=m | |
| 21 | −CONFIG_MTD_CHAR=m | |
| 22 | −CONFIG_MTD_BLOCK=m | |
| 23 | −CONFIG_MTD_CFI=m | |
| 24 | −CONFIG_MTD_JEDECPROBE=m | |
| 25 | −CONFIG_MTD_CFI_AMDSTD=m | |
| 26 | −CONFIG_MTD_PHYSMAP=m | |
| 27 | −CONFIG_BLK_DEV_LOOP=m | |
| 28 | −CONFIG_NETDEVICES=y | |
| 29 | −CONFIG_NET_ETHERNET=y | |
| 30 | −# CONFIG_SERIO_SERPORT is not set | |
| 31 | −CONFIG_SERIAL_8250=y | |
| 32 | −CONFIG_SERIAL_8250_CONSOLE=y | |
| 33 | −# CONFIG_LEGACY_PTYS is not set | |
| 34 | −# CONFIG_HW_RANDOM is not set | |
| 35 | −CONFIG_I2C=m | |
| 36 | −CONFIG_I2C_GPIO=m | |
| 37 | −# CONFIG_HWMON is not set | |
| 38 | −# CONFIG_VGA_CONSOLE is not set | |
| 39 | −# CONFIG_USB_SUPPORT is not set | |
| 40 | −CONFIG_NEW_LEDS=y | |
| 41 | −CONFIG_LEDS_CLASS=m | |
| 42 | −CONFIG_LEDS_GPIO=m | |
| 43 | −CONFIG_LEDS_TRIGGERS=y | |
| 44 | −CONFIG_LEDS_TRIGGER_TIMER=m | |
| 45 | −CONFIG_LEDS_TRIGGER_HEARTBEAT=m | |
| 46 | −CONFIG_RTC_CLASS=m | |
| 47 | −CONFIG_EXT2_FS=m | |
| 48 | −CONFIG_TMPFS=y | |
| 49 | −CONFIG_JFFS2_FS=m | |
| 50 | −CONFIG_NFS_FS=y | |
| 51 | −CONFIG_ROOT_NFS=y | |
| 52 | −# CONFIG_ENABLE_MUST_CHECK is not set | |
| 53 | −CONFIG_DEBUG_KERNEL=y | |
| 54 | −CONFIG_DEBUG_INFO=y | |
| 55 | −CONFIG_DEBUG_USER=y | |
| 56 | −CONFIG_DEBUG_ERRORS=y | |
| @@ -21,58 +21,22 @@ CONFIG_MODVERSIONS=y · 20 unmodified lines | ||
| 21 | 21 | CONFIG_MODULE_SRCVERSION_ALL=y |
| 22 | 22 | # CONFIG_BLK_DEV_BSG is not set |
| 23 | 23 | CONFIG_ARCH_OMAP=y |
| 24 | −CONFIG_ARCH_OMAP2=y | |
| 25 | −CONFIG_ARCH_OMAP3=y | |
| 26 | −CONFIG_ARCH_OMAP4=y | |
| 27 | 24 | CONFIG_OMAP_RESET_CLOCKS=y |
| 28 | 25 | CONFIG_OMAP_MUX_DEBUG=y |
| 29 | −CONFIG_OMAP_32K_TIMER=y | |
| 30 | −CONFIG_MACH_OMAP_GENERIC=y | |
| 31 | −CONFIG_ARCH_OMAP2420=y | |
| 32 | −CONFIG_ARCH_OMAP2430=y | |
| 33 | −CONFIG_ARCH_OMAP3430=y | |
| 34 | −CONFIG_MACH_OMAP_H4=y | |
| 35 | −CONFIG_MACH_OMAP_APOLLON=y | |
| 36 | −CONFIG_MACH_OMAP_2430SDP=y | |
| 37 | −CONFIG_MACH_OMAP3_BEAGLE=y | |
| 38 | −CONFIG_MACH_DEVKIT8000=y | |
| 39 | −CONFIG_MACH_OMAP_LDP=y | |
| 40 | −CONFIG_MACH_OVERO=y | |
| 41 | −CONFIG_MACH_OMAP3EVM=y | |
| 42 | −CONFIG_MACH_OMAP3517EVM=y | |
| 43 | −CONFIG_MACH_OMAP3_PANDORA=y | |
| 44 | −CONFIG_MACH_OMAP3_TOUCHBOOK=y | |
| 45 | −CONFIG_MACH_OMAP_3430SDP=y | |
| 46 | −CONFIG_MACH_NOKIA_N8X0=y | |
| 47 | −CONFIG_MACH_NOKIA_RX51=y | |
| 48 | −CONFIG_MACH_OMAP_ZOOM2=y | |
| 49 | −CONFIG_MACH_OMAP_ZOOM3=y | |
| 50 | −CONFIG_MACH_CM_T35=y | |
| 51 | −CONFIG_MACH_IGEP0020=y | |
| 52 | −CONFIG_MACH_SBC3530=y | |
| 53 | −CONFIG_MACH_OMAP_3630SDP=y | |
| 54 | −CONFIG_MACH_OMAP_4430SDP=y | |
| 55 | 26 | CONFIG_ARM_THUMBEE=y |
| 56 | −CONFIG_ARM_L1_CACHE_SHIFT=5 | |
| 57 | 27 | CONFIG_ARM_ERRATA_411920=y |
| 58 | 28 | CONFIG_NO_HZ=y |
| 59 | 29 | CONFIG_HIGH_RES_TIMERS=y |
| 60 | 30 | CONFIG_SMP=y |
| 61 | 31 | CONFIG_NR_CPUS=2 |
| 62 | −# CONFIG_LOCAL_TIMERS is not set | |
| 63 | −CONFIG_AEABI=y | |
| 64 | 32 | CONFIG_LEDS=y |
| 65 | 33 | CONFIG_ZBOOT_ROM_TEXT=0x0 |
| 66 | 34 | CONFIG_ZBOOT_ROM_BSS=0x0 |
| 67 | 35 | CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200" |
| 68 | 36 | CONFIG_KEXEC=y |
| 69 | 37 | CONFIG_FPE_NWFPE=y |
| 70 | −CONFIG_VFP=y | |
| 71 | −CONFIG_NEON=y | |
| 72 | 38 | CONFIG_BINFMT_MISC=y |
| 73 | −CONFIG_PM=y | |
| 74 | 39 | CONFIG_PM_DEBUG=y |
| 75 | −CONFIG_PM_RUNTIME=y | |
| 76 | 40 | CONFIG_NET=y |
| 77 | 41 | CONFIG_PACKET=y |
| 78 | 42 | CONFIG_UNIX=y |
| @@ -89,14 +53,6 @@ CONFIG_IP_PNP_RARP=y · 10 unmodified lines | ||
| 89 | 53 | # CONFIG_IPV6 is not set |
| 90 | 54 | CONFIG_NETFILTER=y |
| 91 | 55 | CONFIG_BT=m |
| 92 | −CONFIG_BT_L2CAP=m | |
| 93 | −CONFIG_BT_SCO=m | |
| 94 | −CONFIG_BT_RFCOMM=y | |
| 95 | −CONFIG_BT_RFCOMM_TTY=y | |
| 96 | −CONFIG_BT_BNEP=m | |
| 97 | −CONFIG_BT_BNEP_MC_FILTER=y | |
| 98 | −CONFIG_BT_BNEP_PROTO_FILTER=y | |
| 99 | −CONFIG_BT_HIDP=m | |
| 100 | 56 | CONFIG_BT_HCIUART=m |
| 101 | 57 | CONFIG_BT_HCIUART_H4=y |
| 102 | 58 | CONFIG_BT_HCIUART_BCSP=y |
| @@ -107,11 +63,9 @@ CONFIG_CFG80211=m · 4 unmodified lines | ||
| 107 | 63 | CONFIG_MAC80211=m |
| 108 | 64 | CONFIG_MAC80211_RC_PID=y |
| 109 | 65 | CONFIG_MAC80211_RC_DEFAULT_PID=y |
| 110 | −CONFIG_MAC80211_LEDS=y | |
| 111 | 66 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 112 | 67 | CONFIG_CONNECTOR=y |
| 113 | 68 | CONFIG_MTD=y |
| 114 | −CONFIG_MTD_CONCAT=y | |
| 115 | 69 | CONFIG_MTD_CMDLINE_PARTS=y |
| 116 | 70 | CONFIG_MTD_CHAR=y |
| 117 | 71 | CONFIG_MTD_BLOCK=y |
| @@ -127,7 +81,6 @@ CONFIG_MTD_UBI=y · 9 unmodified lines | ||
| 127 | 81 | CONFIG_BLK_DEV_LOOP=y |
| 128 | 82 | CONFIG_BLK_DEV_RAM=y |
| 129 | 83 | CONFIG_BLK_DEV_RAM_SIZE=16384 |
| 130 | −CONFIG_EEPROM_LEGACY=y | |
| 131 | 84 | CONFIG_SCSI=y |
| 132 | 85 | CONFIG_BLK_DEV_SD=y |
| 133 | 86 | CONFIG_SCSI_MULTI_LUN=y |
| @@ -158,19 +111,15 @@ CONFIG_TOUCHSCREEN_ADS7846=y · 24 unmodified lines | ||
| 158 | 111 | CONFIG_INPUT_MISC=y |
| 159 | 112 | CONFIG_INPUT_TWL4030_PWRBUTTON=y |
| 160 | 113 | CONFIG_VT_HW_CONSOLE_BINDING=y |
| 161 | −CONFIG_SERIAL_8250=y | |
| 162 | −CONFIG_SERIAL_8250_CONSOLE=y | |
| 114 | +# CONFIG_LEGACY_PTYS is not set | |
| 163 | 115 | CONFIG_SERIAL_8250_NR_UARTS=32 |
| 164 | 116 | CONFIG_SERIAL_8250_EXTENDED=y |
| 165 | 117 | CONFIG_SERIAL_8250_MANY_PORTS=y |
| 166 | 118 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
| 167 | 119 | CONFIG_SERIAL_8250_DETECT_IRQ=y |
| 168 | 120 | CONFIG_SERIAL_8250_RSA=y |
| 169 | −# CONFIG_LEGACY_PTYS is not set | |
| 170 | 121 | CONFIG_HW_RANDOM=y |
| 171 | −CONFIG_I2C=y | |
| 172 | 122 | CONFIG_I2C_CHARDEV=y |
| 173 | −CONFIG_I2C_OMAP=y | |
| 174 | 123 | CONFIG_SPI=y |
| 175 | 124 | CONFIG_SPI_OMAP24XX=y |
| 176 | 125 | CONFIG_DEBUG_GPIO=y |
| @@ -181,10 +130,6 @@ CONFIG_POWER_SUPPLY=y · 4 unmodified lines | ||
| 181 | 130 | CONFIG_WATCHDOG=y |
| 182 | 131 | CONFIG_OMAP_WATCHDOG=y |
| 183 | 132 | CONFIG_TWL4030_WATCHDOG=y |
| 184 | −CONFIG_MENELAUS=y | |
| 185 | −CONFIG_TWL4030_CORE=y | |
| 186 | −CONFIG_TWL4030_POWER=y | |
| 187 | −CONFIG_REGULATOR=y | |
| 188 | 133 | CONFIG_REGULATOR_TWL4030=y |
| 189 | 134 | CONFIG_REGULATOR_TPS65023=y |
| 190 | 135 | CONFIG_REGULATOR_TPS6507X=y |
| @@ -208,7 +153,6 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y · 17 unmodified lines | ||
| 208 | 153 | CONFIG_LCD_CLASS_DEVICE=y |
| 209 | 154 | CONFIG_LCD_PLATFORM=y |
| 210 | 155 | CONFIG_DISPLAY_SUPPORT=y |
| 211 | −# CONFIG_VGA_CONSOLE is not set | |
| 212 | 156 | CONFIG_FRAMEBUFFER_CONSOLE=y |
| 213 | 157 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y |
| 214 | 158 | CONFIG_FONTS=y |
| @@ -217,25 +161,20 @@ CONFIG_FONT_8x16=y · 2 unmodified lines | ||
| 217 | 161 | CONFIG_LOGO=y |
| 218 | 162 | CONFIG_SOUND=m |
| 219 | 163 | CONFIG_SND=m |
| 220 | −CONFIG_SND_MIXER_OSS=y | |
| 221 | −CONFIG_SND_PCM_OSS=y | |
| 164 | +CONFIG_SND_MIXER_OSS=m | |
| 165 | +CONFIG_SND_PCM_OSS=m | |
| 222 | 166 | CONFIG_SND_VERBOSE_PRINTK=y |
| 223 | 167 | CONFIG_SND_DEBUG=y |
| 224 | −CONFIG_SND_USB_AUDIO=y | |
| 225 | −CONFIG_SND_SOC=y | |
| 226 | −CONFIG_SND_OMAP_SOC=y | |
| 227 | −CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=y | |
| 168 | +CONFIG_SND_USB_AUDIO=m | |
| 169 | +CONFIG_SND_SOC=m | |
| 170 | +CONFIG_SND_OMAP_SOC=m | |
| 171 | +CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m | |
| 228 | 172 | CONFIG_USB=y |
| 229 | 173 | CONFIG_USB_DEBUG=y |
| 230 | 174 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y |
| 231 | 175 | CONFIG_USB_DEVICEFS=y |
| 232 | 176 | CONFIG_USB_SUSPEND=y |
| 233 | −# CONFIG_USB_OTG_WHITELIST is not set | |
| 234 | 177 | CONFIG_USB_MON=y |
| 235 | −# CONFIG_USB_MUSB_HDRC is not set | |
| 236 | −# CONFIG_USB_MUSB_OTG is not set | |
| 237 | −# CONFIG_USB_GADGET_MUSB_HDRC is not set | |
| 238 | −CONFIG_USB_MUSB_DEBUG=y | |
| 239 | 178 | CONFIG_USB_WDM=y |
| 240 | 179 | CONFIG_USB_STORAGE=y |
| 241 | 180 | CONFIG_USB_LIBUSUAL=y |
| @@ -250,18 +189,12 @@ CONFIG_MMC_UNSAFE_RESUME=y · 8 unmodified lines | ||
| 250 | 189 | CONFIG_SDIO_UART=y |
| 251 | 190 | CONFIG_MMC_OMAP=y |
| 252 | 191 | CONFIG_MMC_OMAP_HS=y |
| 253 | −CONFIG_LEDS_CLASS=y | |
| 254 | −CONFIG_LEDS_GPIO=y | |
| 255 | −CONFIG_LEDS_TRIGGER_TIMER=y | |
| 256 | −CONFIG_LEDS_TRIGGER_HEARTBEAT=y | |
| 257 | −CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | |
| 258 | 192 | CONFIG_RTC_CLASS=y |
| 259 | 193 | CONFIG_RTC_DRV_TWL92330=y |
| 260 | 194 | CONFIG_RTC_DRV_TWL4030=y |
| 261 | 195 | CONFIG_EXT2_FS=y |
| 262 | 196 | CONFIG_EXT3_FS=y |
| 263 | 197 | # CONFIG_EXT3_FS_XATTR is not set |
| 264 | −CONFIG_INOTIFY=y | |
| 265 | 198 | CONFIG_QUOTA=y |
| 266 | 199 | CONFIG_QFMT_V2=y |
| 267 | 200 | CONFIG_MSDOS_FS=y |
| @@ -285,12 +218,10 @@ CONFIG_NLS_CODEPAGE_437=y · 17 unmodified lines | ||
| 285 | 218 | CONFIG_NLS_ISO8859_1=y |
| 286 | 219 | CONFIG_PRINTK_TIME=y |
| 287 | 220 | CONFIG_MAGIC_SYSRQ=y |
| 288 | −CONFIG_DEBUG_FS=y | |
| 289 | 221 | CONFIG_DEBUG_KERNEL=y |
| 290 | 222 | CONFIG_SCHEDSTATS=y |
| 291 | 223 | CONFIG_TIMER_STATS=y |
| 292 | 224 | CONFIG_PROVE_LOCKING=y |
| 293 | −# CONFIG_LOCK_STAT is not set | |
| 294 | 225 | CONFIG_DEBUG_SPINLOCK_SLEEP=y |
| 295 | 226 | # CONFIG_DEBUG_BUGVERBOSE is not set |
| 296 | 227 | CONFIG_DEBUG_INFO=y |
| @@ -38,7 +38,7 @@ CONFIG_MTD_BLOCK=y · 37 unmodified lines | ||
| 38 | 38 | CONFIG_MTD_CFI=y |
| 39 | 39 | CONFIG_MTD_CFI_INTELEXT=y |
| 40 | 40 | CONFIG_MTD_CFI_AMDSTD=y |
| 41 | −CONFIG_MTD_ARM_INTEGRATOR=y | |
| 41 | +CONFIG_MTD_PHYSMAP=y | |
| 42 | 42 | CONFIG_ARM_CHARLCD=y |
| 43 | 43 | CONFIG_NETDEVICES=y |
| 44 | 44 | CONFIG_SMSC_PHY=y |
| @@ -37,7 +37,7 @@ CONFIG_MTD_BLOCK=y · 36 unmodified lines | ||
| 37 | 37 | CONFIG_MTD_CFI=y |
| 38 | 38 | CONFIG_MTD_CFI_INTELEXT=y |
| 39 | 39 | CONFIG_MTD_CFI_AMDSTD=y |
| 40 | −CONFIG_MTD_ARM_INTEGRATOR=y | |
| 40 | +CONFIG_MTD_PHYSMAP=y | |
| 41 | 41 | CONFIG_ARM_CHARLCD=y |
| 42 | 42 | CONFIG_NETDEVICES=y |
| 43 | 43 | CONFIG_SMSC_PHY=y |
| @@ -1,65 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −CONFIG_SYSFS_DEPRECATED_V2=y | |
| 3 | −CONFIG_BLK_DEV_INITRD=y | |
| 4 | −CONFIG_KALLSYMS_ALL=y | |
| 5 | −CONFIG_MODULES=y | |
| 6 | −CONFIG_MODULE_UNLOAD=y | |
| 7 | −# CONFIG_BLK_DEV_BSG is not set | |
| 8 | −CONFIG_ARCH_S5P6442=y | |
| 9 | −CONFIG_S3C_LOWLEVEL_UART_PORT=1 | |
| 10 | −CONFIG_MACH_SMDK6442=y | |
| 11 | −CONFIG_CPU_32v6K=y | |
| 12 | −CONFIG_AEABI=y | |
| 13 | −CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x20800000,8M console=ttySAC1,115200 init=/linuxrc" | |
| 14 | −CONFIG_FPE_NWFPE=y | |
| 15 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 16 | −# CONFIG_PREVENT_FIRMWARE_BUILD is not set | |
| 17 | −CONFIG_BLK_DEV_LOOP=y | |
| 18 | −CONFIG_BLK_DEV_RAM=y | |
| 19 | −CONFIG_BLK_DEV_RAM_SIZE=8192 | |
| 20 | −# CONFIG_MISC_DEVICES is not set | |
| 21 | −CONFIG_SCSI=y | |
| 22 | −CONFIG_BLK_DEV_SD=y | |
| 23 | −CONFIG_CHR_DEV_SG=y | |
| 24 | −CONFIG_INPUT_EVDEV=y | |
| 25 | −# CONFIG_INPUT_KEYBOARD is not set | |
| 26 | −# CONFIG_INPUT_MOUSE is not set | |
| 27 | −CONFIG_INPUT_TOUCHSCREEN=y | |
| 28 | −CONFIG_SERIAL_8250=y | |
| 29 | −CONFIG_SERIAL_8250_NR_UARTS=3 | |
| 30 | −CONFIG_SERIAL_SAMSUNG=y | |
| 31 | −CONFIG_SERIAL_SAMSUNG_CONSOLE=y | |
| 32 | −CONFIG_HW_RANDOM=y | |
| 33 | −# CONFIG_HWMON is not set | |
| 34 | −# CONFIG_VGA_CONSOLE is not set | |
| 35 | −# CONFIG_HID_SUPPORT is not set | |
| 36 | −# CONFIG_USB_SUPPORT is not set | |
| 37 | −CONFIG_EXT2_FS=y | |
| 38 | −CONFIG_INOTIFY=y | |
| 39 | −CONFIG_MSDOS_FS=y | |
| 40 | −CONFIG_VFAT_FS=y | |
| 41 | −CONFIG_TMPFS=y | |
| 42 | −CONFIG_TMPFS_POSIX_ACL=y | |
| 43 | −CONFIG_CRAMFS=y | |
| 44 | −CONFIG_ROMFS_FS=y | |
| 45 | −CONFIG_PARTITION_ADVANCED=y | |
| 46 | −CONFIG_BSD_DISKLABEL=y | |
| 47 | −CONFIG_SOLARIS_X86_PARTITION=y | |
| 48 | −CONFIG_NLS_CODEPAGE_437=y | |
| 49 | −CONFIG_NLS_ASCII=y | |
| 50 | −CONFIG_NLS_ISO8859_1=y | |
| 51 | −CONFIG_MAGIC_SYSRQ=y | |
| 52 | −CONFIG_DEBUG_KERNEL=y | |
| 53 | −CONFIG_DEBUG_RT_MUTEXES=y | |
| 54 | −CONFIG_DEBUG_SPINLOCK=y | |
| 55 | −CONFIG_DEBUG_MUTEXES=y | |
| 56 | −CONFIG_DEBUG_SPINLOCK_SLEEP=y | |
| 57 | −CONFIG_DEBUG_INFO=y | |
| 58 | −# CONFIG_RCU_CPU_STALL_DETECTOR is not set | |
| 59 | −CONFIG_SYSCTL_SYSCALL_CHECK=y | |
| 60 | −# CONFIG_ARM_UNWIND is not set | |
| 61 | −CONFIG_DEBUG_USER=y | |
| 62 | −CONFIG_DEBUG_ERRORS=y | |
| 63 | −CONFIG_DEBUG_LL=y | |
| 64 | −CONFIG_DEBUG_S3C_UART=1 | |
| 65 | −CONFIG_CRC_CCITT=y | |
| @@ -1,51 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −CONFIG_SYSVIPC=y | |
| 3 | −CONFIG_BSD_PROCESS_ACCT=y | |
| 4 | −CONFIG_BLK_DEV_INITRD=y | |
| 5 | −CONFIG_KALLSYMS_EXTRA_PASS=y | |
| 6 | −CONFIG_MODULES=y | |
| 7 | −CONFIG_MODULE_UNLOAD=y | |
| 8 | −CONFIG_MODVERSIONS=y | |
| 9 | −CONFIG_PLAT_SPEAR=y | |
| 10 | −CONFIG_BINFMT_MISC=y | |
| 11 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 12 | −CONFIG_BLK_DEV_RAM=y | |
| 13 | −CONFIG_BLK_DEV_RAM_SIZE=16384 | |
| 14 | −CONFIG_INPUT_FF_MEMLESS=y | |
| 15 | −# CONFIG_INPUT_MOUSEDEV_PSAUX is not set | |
| 16 | −# CONFIG_INPUT_KEYBOARD is not set | |
| 17 | −# CONFIG_INPUT_MOUSE is not set | |
| 18 | −CONFIG_SERIAL_AMBA_PL011=y | |
| 19 | −CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | |
| 20 | −# CONFIG_LEGACY_PTYS is not set | |
| 21 | −# CONFIG_HW_RANDOM is not set | |
| 22 | −CONFIG_RAW_DRIVER=y | |
| 23 | −CONFIG_MAX_RAW_DEVS=8192 | |
| 24 | −CONFIG_GPIO_SYSFS=y | |
| 25 | −CONFIG_GPIO_PL061=y | |
| 26 | −# CONFIG_HWMON is not set | |
| 27 | −# CONFIG_VGA_CONSOLE is not set | |
| 28 | −# CONFIG_HID_SUPPORT is not set | |
| 29 | −# CONFIG_USB_SUPPORT is not set | |
| 30 | −CONFIG_EXT2_FS=y | |
| 31 | −CONFIG_EXT2_FS_XATTR=y | |
| 32 | −CONFIG_EXT2_FS_SECURITY=y | |
| 33 | −CONFIG_EXT3_FS=y | |
| 34 | −CONFIG_EXT3_FS_SECURITY=y | |
| 35 | −CONFIG_AUTOFS4_FS=m | |
| 36 | −CONFIG_MSDOS_FS=m | |
| 37 | −CONFIG_VFAT_FS=m | |
| 38 | −CONFIG_FAT_DEFAULT_IOCHARSET="ascii" | |
| 39 | −CONFIG_TMPFS=y | |
| 40 | −CONFIG_PARTITION_ADVANCED=y | |
| 41 | −CONFIG_NLS=y | |
| 42 | −CONFIG_NLS_DEFAULT="utf8" | |
| 43 | −CONFIG_NLS_CODEPAGE_437=y | |
| 44 | −CONFIG_NLS_ASCII=m | |
| 45 | −CONFIG_MAGIC_SYSRQ=y | |
| 46 | −CONFIG_DEBUG_FS=y | |
| 47 | −CONFIG_DEBUG_KERNEL=y | |
| 48 | −CONFIG_DEBUG_SPINLOCK=y | |
| 49 | −CONFIG_DEBUG_SPINLOCK_SLEEP=y | |
| 50 | −CONFIG_DEBUG_INFO=y | |
| 51 | −# CONFIG_CRC32 is not set | |
| @@ -1,52 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −CONFIG_SYSVIPC=y | |
| 3 | −CONFIG_BSD_PROCESS_ACCT=y | |
| 4 | −CONFIG_BLK_DEV_INITRD=y | |
| 5 | −CONFIG_KALLSYMS_EXTRA_PASS=y | |
| 6 | −CONFIG_MODULES=y | |
| 7 | −CONFIG_MODULE_UNLOAD=y | |
| 8 | −CONFIG_MODVERSIONS=y | |
| 9 | −CONFIG_PLAT_SPEAR=y | |
| 10 | −CONFIG_MACH_SPEAR320=y | |
| 11 | −CONFIG_BINFMT_MISC=y | |
| 12 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 13 | −CONFIG_BLK_DEV_RAM=y | |
| 14 | −CONFIG_BLK_DEV_RAM_SIZE=16384 | |
| 15 | −CONFIG_INPUT_FF_MEMLESS=y | |
| 16 | −# CONFIG_INPUT_MOUSEDEV_PSAUX is not set | |
| 17 | −# CONFIG_INPUT_KEYBOARD is not set | |
| 18 | −# CONFIG_INPUT_MOUSE is not set | |
| 19 | −CONFIG_SERIAL_AMBA_PL011=y | |
| 20 | −CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | |
| 21 | −# CONFIG_LEGACY_PTYS is not set | |
| 22 | −# CONFIG_HW_RANDOM is not set | |
| 23 | −CONFIG_RAW_DRIVER=y | |
| 24 | −CONFIG_MAX_RAW_DEVS=8192 | |
| 25 | −CONFIG_GPIO_SYSFS=y | |
| 26 | −CONFIG_GPIO_PL061=y | |
| 27 | −# CONFIG_HWMON is not set | |
| 28 | −# CONFIG_VGA_CONSOLE is not set | |
| 29 | −# CONFIG_HID_SUPPORT is not set | |
| 30 | −# CONFIG_USB_SUPPORT is not set | |
| 31 | −CONFIG_EXT2_FS=y | |
| 32 | −CONFIG_EXT2_FS_XATTR=y | |
| 33 | −CONFIG_EXT2_FS_SECURITY=y | |
| 34 | −CONFIG_EXT3_FS=y | |
| 35 | −CONFIG_EXT3_FS_SECURITY=y | |
| 36 | −CONFIG_AUTOFS4_FS=m | |
| 37 | −CONFIG_MSDOS_FS=m | |
| 38 | −CONFIG_VFAT_FS=m | |
| 39 | −CONFIG_FAT_DEFAULT_IOCHARSET="ascii" | |
| 40 | −CONFIG_TMPFS=y | |
| 41 | −CONFIG_PARTITION_ADVANCED=y | |
| 42 | −CONFIG_NLS=y | |
| 43 | −CONFIG_NLS_DEFAULT="utf8" | |
| 44 | −CONFIG_NLS_CODEPAGE_437=y | |
| 45 | −CONFIG_NLS_ASCII=m | |
| 46 | −CONFIG_MAGIC_SYSRQ=y | |
| 47 | −CONFIG_DEBUG_FS=y | |
| 48 | −CONFIG_DEBUG_KERNEL=y | |
| 49 | −CONFIG_DEBUG_SPINLOCK=y | |
| 50 | −CONFIG_DEBUG_SPINLOCK_SLEEP=y | |
| 51 | −CONFIG_DEBUG_INFO=y | |
| 52 | −# CONFIG_CRC32 is not set | |
| @@ -7,7 +7,9 @@ CONFIG_MODULES=y · 6 unmodified lines | ||
| 7 | 7 | CONFIG_MODULE_UNLOAD=y |
| 8 | 8 | CONFIG_MODVERSIONS=y |
| 9 | 9 | CONFIG_PLAT_SPEAR=y |
| 10 | −CONFIG_MACH_SPEAR310=y | |
| 10 | +CONFIG_BOARD_SPEAR300_EVB=y | |
| 11 | +CONFIG_BOARD_SPEAR310_EVB=y | |
| 12 | +CONFIG_BOARD_SPEAR320_EVB=y | |
| 11 | 13 | CONFIG_BINFMT_MISC=y |
| 12 | 14 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 13 | 15 | CONFIG_BLK_DEV_RAM=y |
| @@ -25,7 +27,6 @@ CONFIG_MAX_RAW_DEVS=8192 · 11 unmodified lines | ||
| 25 | 27 | CONFIG_GPIO_SYSFS=y |
| 26 | 28 | CONFIG_GPIO_PL061=y |
| 27 | 29 | # CONFIG_HWMON is not set |
| 28 | −# CONFIG_VGA_CONSOLE is not set | |
| 29 | 30 | # CONFIG_HID_SUPPORT is not set |
| 30 | 31 | # CONFIG_USB_SUPPORT is not set |
| 31 | 32 | CONFIG_EXT2_FS=y |
| @@ -8,6 +8,7 @@ CONFIG_MODULE_UNLOAD=y · 7 unmodified lines | ||
| 8 | 8 | CONFIG_MODVERSIONS=y |
| 9 | 9 | CONFIG_PLAT_SPEAR=y |
| 10 | 10 | CONFIG_ARCH_SPEAR6XX=y |
| 11 | +CONFIG_BOARD_SPEAR600_EVB=y | |
| 11 | 12 | CONFIG_BINFMT_MISC=y |
| 12 | 13 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 13 | 14 | CONFIG_BLK_DEV_RAM=y |
| @@ -22,7 +23,6 @@ CONFIG_MAX_RAW_DEVS=8192 · 8 unmodified lines | ||
| 22 | 23 | CONFIG_GPIO_SYSFS=y |
| 23 | 24 | CONFIG_GPIO_PL061=y |
| 24 | 25 | # CONFIG_HWMON is not set |
| 25 | −# CONFIG_VGA_CONSOLE is not set | |
| 26 | 26 | # CONFIG_HID_SUPPORT is not set |
| 27 | 27 | # CONFIG_USB_SUPPORT is not set |
| 28 | 28 | CONFIG_EXT2_FS=y |
| @@ -1,128 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −CONFIG_LOCALVERSION="-default" | |
| 3 | −CONFIG_SYSVIPC=y | |
| 4 | −CONFIG_POSIX_MQUEUE=y | |
| 5 | −CONFIG_BSD_PROCESS_ACCT=y | |
| 6 | −CONFIG_SYSFS_DEPRECATED_V2=y | |
| 7 | −CONFIG_BLK_DEV_INITRD=y | |
| 8 | −CONFIG_EXPERT=y | |
| 9 | −CONFIG_SLAB=y | |
| 10 | −CONFIG_MODULES=y | |
| 11 | −CONFIG_MODULE_UNLOAD=y | |
| 12 | −CONFIG_MODULE_FORCE_UNLOAD=y | |
| 13 | −CONFIG_MODVERSIONS=y | |
| 14 | −CONFIG_MODULE_SRCVERSION_ALL=y | |
| 15 | −# CONFIG_BLK_DEV_BSG is not set | |
| 16 | −CONFIG_ARCH_STMP3XXX=y | |
| 17 | −CONFIG_ARCH_STMP378X=y | |
| 18 | −CONFIG_NO_HZ=y | |
| 19 | −CONFIG_HIGH_RES_TIMERS=y | |
| 20 | −CONFIG_PREEMPT=y | |
| 21 | −CONFIG_AEABI=y | |
| 22 | −CONFIG_HIGHMEM=y | |
| 23 | −CONFIG_ZBOOT_ROM_TEXT=0x0 | |
| 24 | −CONFIG_ZBOOT_ROM_BSS=0x0 | |
| 25 | −CONFIG_CMDLINE="console=ttySDBG0,115200 mem=32M" | |
| 26 | −CONFIG_NET=y | |
| 27 | −CONFIG_PACKET=y | |
| 28 | −CONFIG_UNIX=y | |
| 29 | −CONFIG_INET=y | |
| 30 | −CONFIG_IP_MULTICAST=y | |
| 31 | −CONFIG_IP_ADVANCED_ROUTER=y | |
| 32 | −CONFIG_IP_MULTIPLE_TABLES=y | |
| 33 | −CONFIG_IP_ROUTE_MULTIPATH=y | |
| 34 | −CONFIG_IP_ROUTE_VERBOSE=y | |
| 35 | −CONFIG_IP_PNP=y | |
| 36 | −CONFIG_IP_PNP_DHCP=y | |
| 37 | −CONFIG_IP_PNP_BOOTP=y | |
| 38 | −CONFIG_IP_MROUTE=y | |
| 39 | −CONFIG_IP_PIMSM_V1=y | |
| 40 | −CONFIG_IP_PIMSM_V2=y | |
| 41 | −CONFIG_SYN_COOKIES=y | |
| 42 | −# CONFIG_INET_LRO is not set | |
| 43 | −# CONFIG_IPV6 is not set | |
| 44 | −CONFIG_NET_SCHED=y | |
| 45 | −# CONFIG_WIRELESS is not set | |
| 46 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 47 | −# CONFIG_STANDALONE is not set | |
| 48 | −CONFIG_MTD=y | |
| 49 | −CONFIG_MTD_CHAR=y | |
| 50 | −CONFIG_MTD_NAND=y | |
| 51 | −CONFIG_MTD_UBI=y | |
| 52 | −CONFIG_MTD_UBI_GLUEBI=y | |
| 53 | −CONFIG_BLK_DEV_LOOP=y | |
| 54 | −CONFIG_BLK_DEV_CRYPTOLOOP=y | |
| 55 | −CONFIG_BLK_DEV_RAM=y | |
| 56 | −CONFIG_BLK_DEV_RAM_COUNT=4 | |
| 57 | −CONFIG_BLK_DEV_RAM_SIZE=6144 | |
| 58 | −# CONFIG_MISC_DEVICES is not set | |
| 59 | −CONFIG_SCSI=y | |
| 60 | −CONFIG_BLK_DEV_SD=y | |
| 61 | −CONFIG_CHR_DEV_SG=y | |
| 62 | −# CONFIG_SCSI_LOWLEVEL is not set | |
| 63 | −CONFIG_INPUT_POLLDEV=y | |
| 64 | −CONFIG_INPUT_MOUSEDEV_SCREEN_X=320 | |
| 65 | −CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 | |
| 66 | −CONFIG_INPUT_EVDEV=y | |
| 67 | −# CONFIG_KEYBOARD_ATKBD is not set | |
| 68 | −# CONFIG_INPUT_MOUSE is not set | |
| 69 | −CONFIG_INPUT_TOUCHSCREEN=y | |
| 70 | −CONFIG_INPUT_MISC=y | |
| 71 | −# CONFIG_SERIO_SERPORT is not set | |
| 72 | −CONFIG_VT_HW_CONSOLE_BINDING=y | |
| 73 | −# CONFIG_LEGACY_PTYS is not set | |
| 74 | −CONFIG_HW_RANDOM=y | |
| 75 | −CONFIG_DEBUG_GPIO=y | |
| 76 | −CONFIG_GPIO_SYSFS=y | |
| 77 | −# CONFIG_HWMON is not set | |
| 78 | −CONFIG_FB=y | |
| 79 | −CONFIG_BACKLIGHT_LCD_SUPPORT=y | |
| 80 | −CONFIG_LCD_CLASS_DEVICE=y | |
| 81 | −CONFIG_BACKLIGHT_CLASS_DEVICE=y | |
| 82 | −# CONFIG_VGA_CONSOLE is not set | |
| 83 | −CONFIG_FRAMEBUFFER_CONSOLE=y | |
| 84 | −CONFIG_LOGO=y | |
| 85 | −# CONFIG_HID_SUPPORT is not set | |
| 86 | −# CONFIG_USB_SUPPORT is not set | |
| 87 | −# CONFIG_DNOTIFY is not set | |
| 88 | −CONFIG_TMPFS=y | |
| 89 | −CONFIG_CONFIGFS_FS=m | |
| 90 | −# CONFIG_MISC_FILESYSTEMS is not set | |
| 91 | −# CONFIG_NETWORK_FILESYSTEMS is not set | |
| 92 | −# CONFIG_ENABLE_MUST_CHECK is not set | |
| 93 | −CONFIG_STRIP_ASM_SYMS=y | |
| 94 | −CONFIG_DEBUG_KERNEL=y | |
| 95 | −CONFIG_DEBUG_SHIRQ=y | |
| 96 | −# CONFIG_SCHED_DEBUG is not set | |
| 97 | −CONFIG_DEBUG_OBJECTS=y | |
| 98 | −CONFIG_DEBUG_OBJECTS_SELFTEST=y | |
| 99 | −CONFIG_DEBUG_OBJECTS_FREE=y | |
| 100 | −CONFIG_DEBUG_OBJECTS_TIMERS=y | |
| 101 | −CONFIG_DEBUG_SLAB=y | |
| 102 | −CONFIG_DEBUG_SLAB_LEAK=y | |
| 103 | −CONFIG_DEBUG_RT_MUTEXES=y | |
| 104 | −CONFIG_PROVE_LOCKING=y | |
| 105 | −CONFIG_DEBUG_SPINLOCK_SLEEP=y | |
| 106 | −CONFIG_DEBUG_KOBJECT=y | |
| 107 | −# CONFIG_DEBUG_BUGVERBOSE is not set | |
| 108 | −CONFIG_DEBUG_INFO=y | |
| 109 | −# CONFIG_RCU_CPU_STALL_DETECTOR is not set | |
| 110 | −CONFIG_SYSCTL_SYSCALL_CHECK=y | |
| 111 | −CONFIG_BOOT_TRACER=y | |
| 112 | −CONFIG_STACK_TRACER=y | |
| 113 | −CONFIG_BLK_DEV_IO_TRACE=y | |
| 114 | −CONFIG_KEYS=y | |
| 115 | −CONFIG_KEYS_DEBUG_PROC_KEYS=y | |
| 116 | −CONFIG_SECURITY=y | |
| 117 | −CONFIG_CRYPTO_TEST=m | |
| 118 | −CONFIG_CRYPTO_ECB=y | |
| 119 | −CONFIG_CRYPTO_HMAC=y | |
| 120 | −CONFIG_CRYPTO_MD5=y | |
| 121 | −CONFIG_CRYPTO_SHA1=m | |
| 122 | −CONFIG_CRYPTO_AES=m | |
| 123 | −CONFIG_CRYPTO_DES=y | |
| 124 | −CONFIG_CRYPTO_DEFLATE=y | |
| 125 | −CONFIG_CRYPTO_LZO=y | |
| 126 | −# CONFIG_CRYPTO_ANSI_CPRNG is not set | |
| 127 | −CONFIG_CRC_CCITT=m | |
| 128 | −CONFIG_CRC16=y | |
| @@ -1,108 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −CONFIG_LOCALVERSION="-default" | |
| 3 | −CONFIG_SYSVIPC=y | |
| 4 | −CONFIG_POSIX_MQUEUE=y | |
| 5 | −CONFIG_BSD_PROCESS_ACCT=y | |
| 6 | −CONFIG_SYSFS_DEPRECATED_V2=y | |
| 7 | −CONFIG_BLK_DEV_INITRD=y | |
| 8 | −CONFIG_EXPERT=y | |
| 9 | −CONFIG_SLAB=y | |
| 10 | −CONFIG_MODULES=y | |
| 11 | −CONFIG_MODULE_UNLOAD=y | |
| 12 | −CONFIG_MODULE_FORCE_UNLOAD=y | |
| 13 | −CONFIG_MODVERSIONS=y | |
| 14 | −CONFIG_MODULE_SRCVERSION_ALL=y | |
| 15 | −# CONFIG_BLK_DEV_BSG is not set | |
| 16 | −CONFIG_ARCH_STMP3XXX=y | |
| 17 | −CONFIG_NO_HZ=y | |
| 18 | −CONFIG_HIGH_RES_TIMERS=y | |
| 19 | −CONFIG_PREEMPT=y | |
| 20 | −CONFIG_AEABI=y | |
| 21 | −CONFIG_ZBOOT_ROM_TEXT=0x0 | |
| 22 | −CONFIG_ZBOOT_ROM_BSS=0x0 | |
| 23 | −CONFIG_CMDLINE="console=ttySDBG0,115200 mem=32M lcd_panel=lms350 rdinit=/bin/sh ignore_loglevel" | |
| 24 | −CONFIG_NET=y | |
| 25 | −CONFIG_PACKET=y | |
| 26 | −CONFIG_UNIX=y | |
| 27 | −CONFIG_INET=y | |
| 28 | −CONFIG_IP_MULTICAST=y | |
| 29 | −CONFIG_IP_ADVANCED_ROUTER=y | |
| 30 | −CONFIG_IP_MULTIPLE_TABLES=y | |
| 31 | −CONFIG_IP_ROUTE_MULTIPATH=y | |
| 32 | −CONFIG_IP_ROUTE_VERBOSE=y | |
| 33 | −CONFIG_IP_PNP=y | |
| 34 | −CONFIG_IP_PNP_DHCP=y | |
| 35 | −CONFIG_IP_PNP_BOOTP=y | |
| 36 | −CONFIG_IP_MROUTE=y | |
| 37 | −CONFIG_IP_PIMSM_V1=y | |
| 38 | −CONFIG_IP_PIMSM_V2=y | |
| 39 | −CONFIG_SYN_COOKIES=y | |
| 40 | −# CONFIG_INET_LRO is not set | |
| 41 | −# CONFIG_IPV6 is not set | |
| 42 | −CONFIG_NET_SCHED=y | |
| 43 | −# CONFIG_WIRELESS is not set | |
| 44 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 45 | −# CONFIG_STANDALONE is not set | |
| 46 | −CONFIG_BLK_DEV_LOOP=y | |
| 47 | −CONFIG_BLK_DEV_CRYPTOLOOP=y | |
| 48 | −CONFIG_BLK_DEV_RAM=y | |
| 49 | −CONFIG_BLK_DEV_RAM_COUNT=4 | |
| 50 | −CONFIG_BLK_DEV_RAM_SIZE=6144 | |
| 51 | −# CONFIG_MISC_DEVICES is not set | |
| 52 | −CONFIG_SCSI=y | |
| 53 | −CONFIG_BLK_DEV_SD=y | |
| 54 | −CONFIG_CHR_DEV_SG=y | |
| 55 | −# CONFIG_SCSI_LOWLEVEL is not set | |
| 56 | −CONFIG_INPUT_POLLDEV=y | |
| 57 | −CONFIG_INPUT_MOUSEDEV_SCREEN_X=320 | |
| 58 | −CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 | |
| 59 | −CONFIG_INPUT_EVDEV=y | |
| 60 | −# CONFIG_KEYBOARD_ATKBD is not set | |
| 61 | −# CONFIG_INPUT_MOUSE is not set | |
| 62 | −CONFIG_INPUT_TOUCHSCREEN=y | |
| 63 | −CONFIG_INPUT_MISC=y | |
| 64 | −# CONFIG_SERIO_SERPORT is not set | |
| 65 | −CONFIG_VT_HW_CONSOLE_BINDING=y | |
| 66 | −# CONFIG_LEGACY_PTYS is not set | |
| 67 | −CONFIG_HW_RANDOM=y | |
| 68 | −CONFIG_DEBUG_GPIO=y | |
| 69 | −CONFIG_GPIO_SYSFS=y | |
| 70 | −# CONFIG_HWMON is not set | |
| 71 | −CONFIG_FB=y | |
| 72 | −CONFIG_BACKLIGHT_LCD_SUPPORT=y | |
| 73 | −CONFIG_LCD_CLASS_DEVICE=y | |
| 74 | −CONFIG_BACKLIGHT_CLASS_DEVICE=y | |
| 75 | −# CONFIG_VGA_CONSOLE is not set | |
| 76 | −CONFIG_FRAMEBUFFER_CONSOLE=y | |
| 77 | −CONFIG_LOGO=y | |
| 78 | −# CONFIG_HID_SUPPORT is not set | |
| 79 | −# CONFIG_USB_SUPPORT is not set | |
| 80 | −# CONFIG_DNOTIFY is not set | |
| 81 | −CONFIG_TMPFS=y | |
| 82 | −CONFIG_CONFIGFS_FS=m | |
| 83 | −# CONFIG_MISC_FILESYSTEMS is not set | |
| 84 | −# CONFIG_NETWORK_FILESYSTEMS is not set | |
| 85 | −# CONFIG_ENABLE_MUST_CHECK is not set | |
| 86 | −CONFIG_DEBUG_KERNEL=y | |
| 87 | −# CONFIG_DEBUG_BUGVERBOSE is not set | |
| 88 | −# CONFIG_RCU_CPU_STALL_DETECTOR is not set | |
| 89 | −CONFIG_SYSCTL_SYSCALL_CHECK=y | |
| 90 | −CONFIG_BOOT_TRACER=y | |
| 91 | −CONFIG_STACK_TRACER=y | |
| 92 | −CONFIG_BLK_DEV_IO_TRACE=y | |
| 93 | −CONFIG_DEBUG_LL=y | |
| 94 | −CONFIG_KEYS=y | |
| 95 | −CONFIG_KEYS_DEBUG_PROC_KEYS=y | |
| 96 | −CONFIG_SECURITY=y | |
| 97 | −CONFIG_CRYPTO_TEST=m | |
| 98 | −CONFIG_CRYPTO_ECB=y | |
| 99 | −CONFIG_CRYPTO_HMAC=y | |
| 100 | −CONFIG_CRYPTO_MD5=y | |
| 101 | −CONFIG_CRYPTO_SHA1=m | |
| 102 | −CONFIG_CRYPTO_AES=m | |
| 103 | −CONFIG_CRYPTO_DES=y | |
| 104 | −CONFIG_CRYPTO_DEFLATE=y | |
| 105 | −CONFIG_CRYPTO_LZO=y | |
| 106 | −# CONFIG_CRYPTO_ANSI_CPRNG is not set | |
| 107 | −CONFIG_CRC_CCITT=m | |
| 108 | −CONFIG_CRC16=y | |
| @@ -1,106 +0,0 @@ | ||
| 1 | −CONFIG_EXPERIMENTAL=y | |
| 2 | −# CONFIG_LOCALVERSION_AUTO is not set | |
| 3 | −# CONFIG_SWAP is not set | |
| 4 | −CONFIG_SYSVIPC=y | |
| 5 | −CONFIG_LOG_BUF_SHIFT=14 | |
| 6 | −# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | |
| 7 | −CONFIG_SLAB=y | |
| 8 | −CONFIG_MODULES=y | |
| 9 | −CONFIG_MODULE_UNLOAD=y | |
| 10 | −# CONFIG_BLK_DEV_BSG is not set | |
| 11 | −# CONFIG_IOSCHED_DEADLINE is not set | |
| 12 | −# CONFIG_IOSCHED_CFQ is not set | |
| 13 | −CONFIG_ARCH_AT91=y | |
| 14 | −CONFIG_ARCH_AT91SAM9263=y | |
| 15 | −CONFIG_MACH_USB_A9263=y | |
| 16 | −CONFIG_AT91_SLOW_CLOCK=y | |
| 17 | −# CONFIG_ARM_THUMB is not set | |
| 18 | −CONFIG_AEABI=y | |
| 19 | −CONFIG_ZBOOT_ROM_TEXT=0x0 | |
| 20 | −CONFIG_ZBOOT_ROM_BSS=0x0 | |
| 21 | −CONFIG_CMDLINE="mem=64M console=ttyS0,115200" | |
| 22 | −CONFIG_FPE_NWFPE=y | |
| 23 | −CONFIG_PM=y | |
| 24 | −CONFIG_NET=y | |
| 25 | −CONFIG_PACKET=y | |
| 26 | −CONFIG_UNIX=y | |
| 27 | −CONFIG_INET=y | |
| 28 | −CONFIG_IP_MULTICAST=y | |
| 29 | −CONFIG_IP_ADVANCED_ROUTER=y | |
| 30 | −CONFIG_IP_ROUTE_VERBOSE=y | |
| 31 | −CONFIG_IP_PNP=y | |
| 32 | −CONFIG_IP_PNP_BOOTP=y | |
| 33 | −CONFIG_IP_PNP_RARP=y | |
| 34 | −CONFIG_IP_MROUTE=y | |
| 35 | −CONFIG_IP_PIMSM_V1=y | |
| 36 | −CONFIG_IP_PIMSM_V2=y | |
| 37 | −# CONFIG_INET_XFRM_MODE_TRANSPORT is not set | |
| 38 | −# CONFIG_INET_XFRM_MODE_TUNNEL is not set | |
| 39 | −# CONFIG_INET_XFRM_MODE_BEET is not set | |
| 40 | −# CONFIG_INET_LRO is not set | |
| 41 | −# CONFIG_INET_DIAG is not set | |
| 42 | −# CONFIG_IPV6 is not set | |
| 43 | −CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |
| 44 | −CONFIG_MTD=y | |
| 45 | −CONFIG_MTD_PARTITIONS=y | |
| 46 | −CONFIG_MTD_CMDLINE_PARTS=y | |
| 47 | −CONFIG_MTD_CHAR=y | |
| 48 | −CONFIG_MTD_BLOCK=y | |
| 49 | −CONFIG_MTD_DATAFLASH=y | |
| 50 | −CONFIG_MTD_NAND=y | |
| 51 | −CONFIG_MTD_NAND_ATMEL=y | |
| 52 | −CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y | |
| 53 | −CONFIG_BLK_DEV_LOOP=y | |
| 54 | −# CONFIG_MISC_DEVICES is not set | |
| 55 | −CONFIG_SCSI=y | |
| 56 | −CONFIG_BLK_DEV_SD=y | |
| 57 | −CONFIG_SCSI_MULTI_LUN=y | |
| 58 | −CONFIG_NETDEVICES=y | |
| 59 | −CONFIG_NET_ETHERNET=y | |
| 60 | −CONFIG_MII=y | |
| 61 | −CONFIG_MACB=y | |
| 62 | −# CONFIG_INPUT_MOUSEDEV_PSAUX is not set | |
| 63 | −CONFIG_INPUT_EVDEV=y | |
| 64 | −CONFIG_INPUT_EVBUG=y | |
| 65 | −# CONFIG_KEYBOARD_ATKBD is not set | |
| 66 | −CONFIG_KEYBOARD_GPIO=y | |
| 67 | −# CONFIG_INPUT_MOUSE is not set | |
| 68 | −# CONFIG_SERIO is not set | |
| 69 | −CONFIG_SERIAL_ATMEL=y | |
| 70 | −CONFIG_SERIAL_ATMEL_CONSOLE=y | |
| 71 | −CONFIG_HW_RANDOM=y | |
| 72 | −CONFIG_SPI=y | |
| 73 | −CONFIG_SPI_ATMEL=y | |
| 74 | −# CONFIG_HWMON is not set | |
| 75 | −# CONFIG_VGA_CONSOLE is not set | |
| 76 | −# CONFIG_USB_HID is not set | |
| 77 | −CONFIG_USB=y | |
| 78 | −CONFIG_USB_DEVICEFS=y | |
| 79 | −CONFIG_USB_MON=y | |
| 80 | −CONFIG_USB_OHCI_HCD=y | |
| 81 | −CONFIG_USB_STORAGE=y | |
| 82 | −CONFIG_USB_GADGET=y | |
| 83 | −CONFIG_USB_ETH=m | |
| 84 | −CONFIG_NEW_LEDS=y | |
| 85 | −CONFIG_LEDS_CLASS=y | |
| 86 | −CONFIG_LEDS_GPIO=y | |
| 87 | −CONFIG_LEDS_TRIGGERS=y | |
| 88 | −CONFIG_LEDS_TRIGGER_HEARTBEAT=y | |
| 89 | −CONFIG_EXT2_FS=y | |
| 90 | −CONFIG_INOTIFY=y | |
| 91 | −CONFIG_FUSE_FS=m | |
| 92 | −CONFIG_VFAT_FS=y | |
| 93 | −CONFIG_TMPFS=y | |
| 94 | −CONFIG_JFFS2_FS=y | |
| 95 | −CONFIG_NFS_FS=y | |
| 96 | −CONFIG_NFS_V3=y | |
| 97 | −CONFIG_NFS_V3_ACL=y | |
| 98 | −CONFIG_NFS_V4=y | |
| 99 | −CONFIG_ROOT_NFS=y | |
| 100 | −CONFIG_NLS_CODEPAGE_437=y | |
| 101 | −CONFIG_NLS_CODEPAGE_850=y | |
| 102 | −CONFIG_NLS_ISO8859_1=y | |
| 103 | −CONFIG_DEBUG_KERNEL=y | |
| 104 | −CONFIG_DEBUG_USER=y | |
| 105 | −CONFIG_DEBUG_LL=y | |
| 106 | −# CONFIG_CRYPTO_HW is not set | |
| @@ -32,7 +32,7 @@ CONFIG_MTD_BLOCK=y · 31 unmodified lines | ||
| 32 | 32 | CONFIG_MTD_CFI=y |
| 33 | 33 | CONFIG_MTD_CFI_ADV_OPTIONS=y |
| 34 | 34 | CONFIG_MTD_CFI_INTELEXT=y |
| 35 | −CONFIG_MTD_ARM_INTEGRATOR=y | |
| 35 | +CONFIG_MTD_PHYSMAP=y | |
| 36 | 36 | CONFIG_BLK_DEV_RAM=y |
| 37 | 37 | CONFIG_EEPROM_LEGACY=m |
| 38 | 38 | CONFIG_NETDEVICES=y |
| @@ -203,8 +203,6 @@ extern int _find_next_bit_be(const unsigned long *p, int size, int offset); · 202 unmodified lines | ||
| 203 | 203 | #define find_first_bit(p,sz) _find_first_bit_le(p,sz) |
| 204 | 204 | #define find_next_bit(p,sz,off) _find_next_bit_le(p,sz,off) |
| 205 | 205 | |
| 206 | −#define WORD_BITOFF_TO_LE(x) ((x)) | |
| 207 | − | |
| 208 | 206 | #else |
| 209 | 207 | /* |
| 210 | 208 | * These are the big endian, atomic definitions. |
| @@ -214,8 +212,6 @@ extern int _find_next_bit_be(const unsigned long *p, int size, int offset); · 3 unmodified lines | ||
| 214 | 212 | #define find_first_bit(p,sz) _find_first_bit_be(p,sz) |
| 215 | 213 | #define find_next_bit(p,sz,off) _find_next_bit_be(p,sz,off) |
| 216 | 214 | |
| 217 | −#define WORD_BITOFF_TO_LE(x) ((x) ^ 0x18) | |
| 218 | − | |
| 219 | 215 | #endif |
| 220 | 216 | |
| 221 | 217 | #if __LINUX_ARM_ARCH__ < 5 |
| @@ -287,55 +283,29 @@ static inline int fls(int x) · 65 unmodified lines | ||
| 287 | 283 | #include <asm-generic/bitops/hweight.h> |
| 288 | 284 | #include <asm-generic/bitops/lock.h> |
| 289 | 285 | |
| 290 | −static inline void __set_bit_le(int nr, void *addr) | |
| 291 | −{ | |
| 292 | − __set_bit(WORD_BITOFF_TO_LE(nr), addr); | |
| 293 | −} | |
| 294 | − | |
| 295 | −static inline void __clear_bit_le(int nr, void *addr) | |
| 296 | −{ | |
| 297 | − __clear_bit(WORD_BITOFF_TO_LE(nr), addr); | |
| 298 | −} | |
| 299 | − | |
| 300 | −static inline int __test_and_set_bit_le(int nr, void *addr) | |
| 301 | −{ | |
| 302 | − return __test_and_set_bit(WORD_BITOFF_TO_LE(nr), addr); | |
| 303 | −} | |
| 304 | − | |
| 305 | −static inline int test_and_set_bit_le(int nr, void *addr) | |
| 306 | −{ | |
| 307 | − return test_and_set_bit(WORD_BITOFF_TO_LE(nr), addr); | |
| 308 | −} | |
| 309 | − | |
| 310 | −static inline int __test_and_clear_bit_le(int nr, void *addr) | |
| 311 | −{ | |
| 312 | − return __test_and_clear_bit(WORD_BITOFF_TO_LE(nr), addr); | |
| 313 | −} | |
| 314 | − | |
| 315 | −static inline int test_and_clear_bit_le(int nr, void *addr) | |
| 316 | −{ | |
| 317 | − return test_and_clear_bit(WORD_BITOFF_TO_LE(nr), addr); | |
| 318 | −} | |
| 319 | − | |
| 320 | −static inline int test_bit_le(int nr, const void *addr) | |
| 321 | −{ | |
| 322 | − return test_bit(WORD_BITOFF_TO_LE(nr), addr); | |
| 323 | −} | |
| 286 | +#ifdef __ARMEB__ | |
| 324 | 287 | |
| 325 | 288 | static inline int find_first_zero_bit_le(const void *p, unsigned size) |
| 326 | 289 | { |
| 327 | 290 | return _find_first_zero_bit_le(p, size); |
| 328 | 291 | } |
| 292 | +#define find_first_zero_bit_le find_first_zero_bit_le | |
| 329 | 293 | |
| 330 | 294 | static inline int find_next_zero_bit_le(const void *p, int size, int offset) |
| 331 | 295 | { |
| 332 | 296 | return _find_next_zero_bit_le(p, size, offset); |
| 333 | 297 | } |
| 298 | +#define find_next_zero_bit_le find_next_zero_bit_le | |
| 334 | 299 | |
| 335 | 300 | static inline int find_next_bit_le(const void *p, int size, int offset) |
| 336 | 301 | { |
| 337 | 302 | return _find_next_bit_le(p, size, offset); |
| 338 | 303 | } |
| 304 | +#define find_next_bit_le find_next_bit_le | |
| 305 | + | |
| 306 | +#endif | |
| 307 | + | |
| 308 | +#include <asm-generic/bitops/le.h> | |
| 339 | 309 | |
| 340 | 310 | /* |
| 341 | 311 | * Ext2 is defined to use little-endian byte ordering. |
| @@ -2,6 +2,7 @@ · 1 unmodified line | ||
| 2 | 2 | #define __ASM_ARM_CPUTYPE_H |
| 3 | 3 | |
| 4 | 4 | #include <linux/stringify.h> |
| 5 | +#include <linux/kernel.h> | |
| 5 | 6 | |
| 6 | 7 | #define CPUID_ID 0 |
| 7 | 8 | #define CPUID_CACHETYPE 1 |
| @@ -6,8 +6,10 @@ · 5 unmodified lines | ||
| 6 | 6 | /* |
| 7 | 7 | * This is the maximum virtual address which can be DMA'd from. |
| 8 | 8 | */ |
| 9 | −#ifndef MAX_DMA_ADDRESS | |
| 9 | +#ifndef ARM_DMA_ZONE_SIZE | |
| 10 | 10 | #define MAX_DMA_ADDRESS 0xffffffff |
| 11 | +#else | |
| 12 | +#define MAX_DMA_ADDRESS (PAGE_OFFSET + ARM_DMA_ZONE_SIZE) | |
| 11 | 13 | #endif |
| 12 | 14 | |
| 13 | 15 | #ifdef CONFIG_ISA_DMA_API |
| @@ -108,6 +108,7 @@ struct task_struct; · 107 unmodified lines | ||
| 108 | 108 | int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs); |
| 109 | 109 | #define ELF_CORE_COPY_TASK_REGS dump_task_regs |
| 110 | 110 | |
| 111 | +#define CORE_DUMP_USE_REGSET | |
| 111 | 112 | #define ELF_EXEC_PAGESIZE 4096 |
| 112 | 113 | |
| 113 | 114 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical |
| @@ -4,6 +4,13 @@ · 3 unmodified lines | ||
| 4 | 4 | * Support for FIQ on ARM architectures. |
| 5 | 5 | * Written by Philip Blundell <philb@gnu.org>, 1998 |
| 6 | 6 | * Re-written by Russell King |
| 7 | + * | |
| 8 | + * NOTE: The FIQ mode registers are not magically preserved across | |
| 9 | + * suspend/resume. | |
| 10 | + * | |
| 11 | + * Drivers which require these registers to be preserved across power | |
| 12 | + * management operations must implement appropriate suspend/resume handlers to | |
| 13 | + * save and restore them. | |
| 7 | 14 | */ |
| 8 | 15 | |
| 9 | 16 | #ifndef __ASM_FIQ_H |
| @@ -29,9 +36,21 @@ struct fiq_handler { · 19 unmodified lines | ||
| 29 | 36 | extern int claim_fiq(struct fiq_handler *f); |
| 30 | 37 | extern void release_fiq(struct fiq_handler *f); |
| 31 | 38 | extern void set_fiq_handler(void *start, unsigned int length); |
| 32 | −extern void set_fiq_regs(struct pt_regs *regs); | |
| 33 | −extern void get_fiq_regs(struct pt_regs *regs); | |
| 34 | 39 | extern void enable_fiq(int fiq); |
| 35 | 40 | extern void disable_fiq(int fiq); |
| 36 | 41 | |
| 42 | +/* helpers defined in fiqasm.S: */ | |
| 43 | +extern void __set_fiq_regs(unsigned long const *regs); | |
| 44 | +extern void __get_fiq_regs(unsigned long *regs); | |
| 45 | + | |
| 46 | +static inline void set_fiq_regs(struct pt_regs const *regs) | |
| 47 | +{ | |
| 48 | + __set_fiq_regs(®s->ARM_r8); | |
| 49 | +} | |
| 50 | + | |
| 51 | +static inline void get_fiq_regs(struct pt_regs *regs) | |
| 52 | +{ | |
| 53 | + __get_fiq_regs(®s->ARM_r8); | |
| 54 | +} | |
| 55 | + | |
| 37 | 56 | #endif |
| @@ -18,7 +18,7 @@ · 17 unmodified lines | ||
| 18 | 18 | * VFP storage area has: |
| 19 | 19 | * - FPEXC, FPSCR, FPINST and FPINST2. |
| 20 | 20 | * - 16 or 32 double precision data registers |
| 21 | − * - an implementation-dependant word of state for FLDMX/FSTMX (pre-ARMv6) | |
| 21 | + * - an implementation-dependent word of state for FLDMX/FSTMX (pre-ARMv6) | |
| 22 | 22 | * |
| 23 | 23 | * FPEXC will always be non-zero once the VFP has been used in this process. |
| 24 | 24 | */ |
| @@ -3,16 +3,74 @@ · 2 unmodified lines | ||
| 3 | 3 | |
| 4 | 4 | #ifdef __KERNEL__ |
| 5 | 5 | |
| 6 | +#if defined(CONFIG_CPU_USE_DOMAINS) && defined(CONFIG_SMP) | |
| 7 | +/* ARM doesn't provide unprivileged exclusive memory accessors */ | |
| 8 | +#include <asm-generic/futex.h> | |
| 9 | +#else | |
| 10 | + | |
| 11 | +#include <linux/futex.h> | |
| 12 | +#include <linux/uaccess.h> | |
| 13 | +#include <asm/errno.h> | |
| 14 | + | |
| 15 | +#define __futex_atomic_ex_table(err_reg) \ | |
| 16 | + "3:\n" \ | |
| 17 | + " .pushsection __ex_table,\"a\"\n" \ | |
| 18 | + " .align 3\n" \ | |
| 19 | + " .long 1b, 4f, 2b, 4f\n" \ | |
| 20 | + " .popsection\n" \ | |
| 21 | + " .pushsection .fixup,\"ax\"\n" \ | |
| 22 | + "4: mov %0, " err_reg "\n" \ | |
| 23 | + " b 3b\n" \ | |
| 24 | + " .popsection" | |
| 25 | + | |
| 6 | 26 | #ifdef CONFIG_SMP |
| 7 | 27 | |
| 8 | −#include <asm-generic/futex.h> | |
| 28 | +#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ | |
| 29 | + smp_mb(); \ | |
| 30 | + __asm__ __volatile__( \ | |
| 31 | + "1: ldrex %1, [%2]\n" \ | |
| 32 | + " " insn "\n" \ | |
| 33 | + "2: strex %1, %0, [%2]\n" \ | |
| 34 | + " teq %1, #0\n" \ | |
| 35 | + " bne 1b\n" \ | |
| 36 | + " mov %0, #0\n" \ | |
| 37 | + __futex_atomic_ex_table("%4") \ | |
| 38 | + : "=&r" (ret), "=&r" (oldval) \ | |
| 39 | + : "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \ | |
| 40 | + : "cc", "memory") | |
| 41 | + | |
| 42 | +static inline int | |
| 43 | +futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |
| 44 | + u32 oldval, u32 newval) | |
| 45 | +{ | |
| 46 | + int ret; | |
| 47 | + u32 val; | |
| 48 | + | |
| 49 | + if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))) | |
| 50 | + return -EFAULT; | |
| 51 | + | |
| 52 | + smp_mb(); | |
| 53 | + __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" | |
| 54 | + "1: ldrex %1, [%4]\n" | |
| 55 | + " teq %1, %2\n" | |
| 56 | + " ite eq @ explicit IT needed for the 2b label\n" | |
| 57 | + "2: strexeq %0, %3, [%4]\n" | |
| 58 | + " movne %0, #0\n" | |
| 59 | + " teq %0, #0\n" | |
| 60 | + " bne 1b\n" | |
| 61 | + __futex_atomic_ex_table("%5") | |
| 62 | + : "=&r" (ret), "=&r" (val) | |
| 63 | + : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) | |
| 64 | + : "cc", "memory"); | |
| 65 | + smp_mb(); | |
| 66 | + | |
| 67 | + *uval = val; | |
| 68 | + return ret; | |
| 69 | +} | |
| 9 | 70 | |
| 10 | 71 | #else /* !SMP, we can work around lack of atomic ops by disabling preemption */ |
| 11 | 72 | |
| 12 | −#include <linux/futex.h> | |
| 13 | 73 | #include <linux/preempt.h> |
| 14 | −#include <linux/uaccess.h> | |
| 15 | −#include <asm/errno.h> | |
| 16 | 74 | #include <asm/domain.h> |
| 17 | 75 | |
| 18 | 76 | #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ |
| @@ -21,19 +79,37 @@ · 2 unmodified lines | ||
| 21 | 79 | " " insn "\n" \ |
| 22 | 80 | "2: " T(str) " %0, [%2]\n" \ |
| 23 | 81 | " mov %0, #0\n" \ |
| 24 | − "3:\n" \ | |
| 25 | − " .pushsection __ex_table,\"a\"\n" \ | |
| 26 | − " .align 3\n" \ | |
| 27 | − " .long 1b, 4f, 2b, 4f\n" \ | |
| 28 | − " .popsection\n" \ | |
| 29 | − " .pushsection .fixup,\"ax\"\n" \ | |
| 30 | − "4: mov %0, %4\n" \ | |
| 31 | − " b 3b\n" \ | |
| 32 | − " .popsection" \ | |
| 82 | + __futex_atomic_ex_table("%4") \ | |
| 33 | 83 | : "=&r" (ret), "=&r" (oldval) \ |
| 34 | 84 | : "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \ |
| 35 | 85 | : "cc", "memory") |
| 36 | 86 | |
| 87 | +static inline int | |
| 88 | +futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |
| 89 | + u32 oldval, u32 newval) | |
| 90 | +{ | |
| 91 | + int ret = 0; | |
| 92 | + u32 val; | |
| 93 | + | |
| 94 | + if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))) | |
| 95 | + return -EFAULT; | |
| 96 | + | |
| 97 | + __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" | |
| 98 | + "1: " T(ldr) " %1, [%4]\n" | |
| 99 | + " teq %1, %2\n" | |
| 100 | + " it eq @ explicit IT needed for the 2b label\n" | |
| 101 | + "2: " T(streq) " %3, [%4]\n" | |
| 102 | + __futex_atomic_ex_table("%5") | |
| 103 | + : "+r" (ret), "=&r" (val) | |
| 104 | + : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) | |
| 105 | + : "cc", "memory"); | |
| 106 | + | |
| 107 | + *uval = val; | |
| 108 | + return ret; | |
| 109 | +} | |
| 110 | + | |
| 111 | +#endif /* !SMP */ | |
| 112 | + | |
| 37 | 113 | static inline int |
| 38 | 114 | futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr) |
| 39 | 115 | { |
| @@ -87,39 +163,6 @@ futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr) · 47 unmodified lines | ||
| 87 | 163 | return ret; |
| 88 | 164 | } |
| 89 | 165 | |
| 90 | −static inline int | |
| 91 | −futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | |
| 92 | − u32 oldval, u32 newval) | |
| 93 | −{ | |
| 94 | − int ret = 0; | |
| 95 | − u32 val; | |
| 96 | − | |
| 97 | − if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))) | |
| 98 | − return -EFAULT; | |
| 99 | − | |
| 100 | − __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" | |
| 101 | − "1: " T(ldr) " %1, [%4]\n" | |
| 102 | − " teq %1, %2\n" | |
| 103 | − " it eq @ explicit IT needed for the 2b label\n" | |
| 104 | − "2: " T(streq) " %3, [%4]\n" | |
| 105 | − "3:\n" | |
| 106 | − " .pushsection __ex_table,\"a\"\n" | |
| 107 | − " .align 3\n" | |
| 108 | − " .long 1b, 4f, 2b, 4f\n" | |
| 109 | − " .popsection\n" | |
| 110 | − " .pushsection .fixup,\"ax\"\n" | |
| 111 | − "4: mov %0, %5\n" | |
| 112 | − " b 3b\n" | |
| 113 | − " .popsection" | |
| 114 | − : "+r" (ret), "=&r" (val) | |
| 115 | − : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) | |
| 116 | − : "cc", "memory"); | |
| 117 | − | |
| 118 | − *uval = val; | |
| 119 | − return ret; | |
| 120 | −} | |
| 121 | − | |
| 122 | −#endif /* !SMP */ | |
| 123 | − | |
| 166 | +#endif /* !(CPU_USE_DOMAINS && SMP) */ | |
| 124 | 167 | #endif /* __KERNEL__ */ |
| 125 | 168 | #endif /* _ASM_ARM_FUTEX_H */ |
| @@ -126,7 +126,7 @@ · 125 unmodified lines | ||
| 126 | 126 | #endif |
| 127 | 127 | |
| 128 | 128 | #if !defined(_CACHE) && !defined(MULTI_CACHE) |
| 129 | −#error Unknown cache maintainence model | |
| 129 | +#error Unknown cache maintenance model | |
| 130 | 130 | #endif |
| 131 | 131 | |
| 132 | 132 | #ifndef MULTI_CACHE |
| @@ -10,8 +10,8 @@ · 9 unmodified lines | ||
| 10 | 10 | * |
| 11 | 11 | * This file provides the glue to stick the processor-specific bits |
| 12 | 12 | * into the kernel in an efficient manner. The idea is to use branches |
| 13 | − * when we're only targetting one class of TLB, or indirect calls | |
| 14 | − * when we're targetting multiple classes of TLBs. | |
| 13 | + * when we're only targeting one class of TLB, or indirect calls | |
| 14 | + * when we're targeting multiple classes of TLBs. | |
| 15 | 15 | */ |
| 16 | 16 | #ifdef __KERNEL__ |
| 17 | 17 | |
| @@ -16,7 +16,7 @@ · 15 unmodified lines | ||
| 16 | 16 | * make it not entierly compatible with the PL080 specification from |
| 17 | 17 | * ARM. When in doubt, check the Samsung documentation first. |
| 18 | 18 | * |
| 19 | − * The Samsung defines are PL080S, and add an extra controll register, | |
| 19 | + * The Samsung defines are PL080S, and add an extra control register, | |
| 20 | 20 | * the ability to move more than 2^11 counts of data and some extra |
| 21 | 21 | * OneNAND features. |
| 22 | 22 | */ |
| @@ -1,2 +1,2 @@ | ||
| 1 | −void sp804_clocksource_init(void __iomem *); | |
| 2 | −void sp804_clockevents_init(void __iomem *, unsigned int); | |
| 1 | +void sp804_clocksource_init(void __iomem *, const char *); | |
| 2 | +void sp804_clockevents_init(void __iomem *, unsigned int, const char *); | |
| @@ -0,0 +1,15 @@ | ||
| 1 | +#ifndef __ASMARM_I8253_H | |
| 2 | +#define __ASMARM_I8253_H | |
| 3 | + | |
| 4 | +/* i8253A PIT registers */ | |
| 5 | +#define PIT_MODE 0x43 | |
| 6 | +#define PIT_CH0 0x40 | |
| 7 | + | |
| 8 | +#define PIT_LATCH ((PIT_TICK_RATE + HZ / 2) / HZ) | |
| 9 | + | |
| 10 | +extern raw_spinlock_t i8253_lock; | |
| 11 | + | |
| 12 | +#define outb_pit outb_p | |
| 13 | +#define inb_pit inb_p | |
| 14 | + | |
| 15 | +#endif | |
| @@ -39,10 +39,13 @@ typedef u32 kprobe_opcode_t; · 38 unmodified lines | ||
| 39 | 39 | struct kprobe; |
| 40 | 40 | typedef void (kprobe_insn_handler_t)(struct kprobe *, struct pt_regs *); |
| 41 | 41 | |
| 42 | +typedef unsigned long (kprobe_check_cc)(unsigned long); | |
| 43 | + | |
| 42 | 44 | /* Architecture specific copy of original instruction. */ |
| 43 | 45 | struct arch_specific_insn { |
| 44 | 46 | kprobe_opcode_t *insn; |
| 45 | 47 | kprobe_insn_handler_t *insn_handler; |
| 48 | + kprobe_check_cc *insn_check_cc; | |
| 46 | 49 | }; |
| 47 | 50 | |
| 48 | 51 | struct prev_kprobe { |
| @@ -18,6 +18,8 @@ struct machine_desc { · 17 unmodified lines | ||
| 18 | 18 | unsigned int nr; /* architecture number */ |
| 19 | 19 | const char *name; /* architecture name */ |
| 20 | 20 | unsigned long boot_params; /* tagged list */ |
| 21 | + const char **dt_compat; /* array of device tree | |
| 22 | + * 'compatible' strings */ | |
| 21 | 23 | |
| 22 | 24 | unsigned int nr_irqs; /* number of IRQs */ |
| 23 | 25 | |
| @@ -47,6 +49,13 @@ struct machine_desc { · 23 unmodified lines | ||
| 47 | 49 | */ |
| 48 | 50 | extern struct machine_desc *machine_desc; |
| 49 | 51 | |
| 52 | +/* | |
| 53 | + * Machine type table - also only accessible during boot | |
| 54 | + */ | |
| 55 | +extern struct machine_desc __arch_info_begin[], __arch_info_end[]; | |
| 56 | +#define for_each_machine_desc(p) \ | |
| 57 | + for (p = __arch_info_begin; p < __arch_info_end; p++) | |
| 58 | + | |
| 50 | 59 | /* |
| 51 | 60 | * Set of macros to define architecture features. This is built into |
| 52 | 61 | * a table by the linker. |
| @@ -34,7 +34,6 @@ · 33 unmodified lines | ||
| 34 | 34 | * timer interrupt which may be pending. |
| 35 | 35 | */ |
| 36 | 36 | struct sys_timer { |
| 37 | − struct sys_device dev; | |
| 38 | 37 | void (*init)(void); |
| 39 | 38 | void (*suspend)(void); |
| 40 | 39 | void (*resume)(void); |
| @@ -20,8 +20,6 @@ struct pxa2xx_udc_mach_info { · 19 unmodified lines | ||
| 20 | 20 | * VBUS IRQ and omit the methods above. Store the GPIO number |
| 21 | 21 | * here. Note that sometimes the signals go through inverters... |
| 22 | 22 | */ |
| 23 | − bool gpio_vbus_inverted; | |
| 24 | − int gpio_vbus; /* high == vbus present */ | |
| 25 | 23 | bool gpio_pullup_inverted; |
| 26 | 24 | int gpio_pullup; /* high == pullup activated */ |
| 27 | 25 | }; |
| @@ -209,14 +209,10 @@ static inline unsigned long __phys_to_virt(unsigned long x) · 208 unmodified lines | ||
| 209 | 209 | * allocations. This must be the smallest DMA mask in the system, |
| 210 | 210 | * so a successful GFP_DMA allocation will always satisfy this. |
| 211 | 211 | */ |
| 212 | −#ifndef ISA_DMA_THRESHOLD | |
| 212 | +#ifndef ARM_DMA_ZONE_SIZE | |
| 213 | 213 | #define ISA_DMA_THRESHOLD (0xffffffffULL) |
| 214 | −#endif | |
| 215 | − | |
| 216 | −#ifndef arch_adjust_zones | |
| 217 | −#define arch_adjust_zones(size,holes) do { } while (0) | |
| 218 | −#elif !defined(CONFIG_ZONE_DMA) | |
| 219 | −#error "custom arch_adjust_zones() requires CONFIG_ZONE_DMA" | |
| 214 | +#else | |
| 215 | +#define ISA_DMA_THRESHOLD (PHYS_OFFSET + ARM_DMA_ZONE_SIZE - 1) | |
| 220 | 216 | #endif |
| 221 | 217 | |
| 222 | 218 | /* |
| @@ -197,7 +197,7 @@ typedef unsigned long pgprot_t; · 196 unmodified lines | ||
| 197 | 197 | |
| 198 | 198 | typedef struct page *pgtable_t; |
| 199 | 199 | |
| 200 | −#ifndef CONFIG_SPARSEMEM | |
| 200 | +#ifdef CONFIG_HAVE_ARCH_PFN_VALID | |
| 201 | 201 | extern int pfn_valid(unsigned long); |
| 202 | 202 | #endif |
| 203 | 203 | |
| @@ -0,0 +1,37 @@ | ||
| 1 | +/* | |
| 2 | + * arch/arm/include/asm/prom.h | |
| 3 | + * | |
| 4 | + * Copyright (C) 2009 Canonical Ltd. <jeremy.kerr@canonical.com> | |
| 5 | + * | |
| 6 | + * This program is free software; you can redistribute it and/or modify | |
| 7 | + * it under the terms of the GNU General Public License version 2 as | |
| 8 | + * published by the Free Software Foundation. | |
| 9 | + * | |
| 10 | + */ | |
| 11 | +#ifndef __ASMARM_PROM_H | |
| 12 | +#define __ASMARM_PROM_H | |
| 13 | + | |
| 14 | +#ifdef CONFIG_OF | |
| 15 | + | |
| 16 | +#include <asm/setup.h> | |
| 17 | +#include <asm/irq.h> | |
| 18 | + | |
| 19 | +static inline void irq_dispose_mapping(unsigned int virq) | |
| 20 | +{ | |
| 21 | + return; | |
| 22 | +} | |
| 23 | + | |
| 24 | +extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); | |
| 25 | +extern void arm_dt_memblock_reserve(void); | |
| 26 | + | |
| 27 | +#else /* CONFIG_OF */ | |
| 28 | + | |
| 29 | +static inline struct machine_desc *setup_machine_fdt(unsigned int dt_phys) | |
| 30 | +{ | |
| 31 | + return NULL; | |
| 32 | +} | |
| 33 | + | |
| 34 | +static inline void arm_dt_memblock_reserve(void) { } | |
| 35 | + | |
| 36 | +#endif /* CONFIG_OF */ | |
| 37 | +#endif /* ASMARM_PROM_H */ | |
| @@ -128,6 +128,12 @@ struct pt_regs { · 127 unmodified lines | ||
| 128 | 128 | #define ARM_r0 uregs[0] |
| 129 | 129 | #define ARM_ORIG_r0 uregs[17] |
| 130 | 130 | |
| 131 | +/* | |
| 132 | + * The size of the user-visible VFP state as seen by PTRACE_GET/SETVFPREGS | |
| 133 | + * and core dumps. | |
| 134 | + */ | |
| 135 | +#define ARM_VFPREGS_SIZE ( 32 * 8 /*fpregs*/ + 4 /*fpscr*/ ) | |
| 136 | + | |
| 131 | 137 | #ifdef __KERNEL__ |
| 132 | 138 | |
| 133 | 139 | #define user_mode(regs) \ |
| @@ -217,6 +217,10 @@ extern struct meminfo meminfo; · 216 unmodified lines | ||
| 217 | 217 | #define bank_phys_end(bank) ((bank)->start + (bank)->size) |
| 218 | 218 | #define bank_phys_size(bank) (bank)->size |
| 219 | 219 | |
| 220 | +extern int arm_add_memory(phys_addr_t start, unsigned long size); | |
| 221 | +extern void early_print(const char *str, ...); | |
| 222 | +extern void dump_machine_table(void); | |
| 223 | + | |
| 220 | 224 | #endif /* __KERNEL__ */ |
| 221 | 225 | |
| 222 | 226 | #endif |
| @@ -16,44 +16,6 @@ · 15 unmodified lines | ||
| 16 | 16 | /* Size definitions |
| 17 | 17 | * Copyright (C) ARM Limited 1998. All rights reserved. |
| 18 | 18 | */ |
| 19 | +#include <asm-generic/sizes.h> | |
| 19 | 20 | |
| 20 | −#ifndef __sizes_h | |
| 21 | −#define __sizes_h 1 | |
| 22 | − | |
| 23 | −/* handy sizes */ | |
| 24 | −#define SZ_16 0x00000010 | |
| 25 | −#define SZ_32 0x00000020 | |
| 26 | −#define SZ_64 0x00000040 | |
| 27 | −#define SZ_128 0x00000080 | |
| 28 | −#define SZ_256 0x00000100 | |
| 29 | −#define SZ_512 0x00000200 | |
| 30 | − | |
| 31 | −#define SZ_1K 0x00000400 | |
| 32 | −#define SZ_2K 0x00000800 | |
| 33 | −#define SZ_4K 0x00001000 | |
| 34 | −#define SZ_8K 0x00002000 | |
| 35 | −#define SZ_16K 0x00004000 | |
| 36 | −#define SZ_32K 0x00008000 | |
| 37 | −#define SZ_64K 0x00010000 | |
| 38 | −#define SZ_128K 0x00020000 | |
| 39 | −#define SZ_256K 0x00040000 | |
| 40 | −#define SZ_512K 0x00080000 | |
| 41 | − | |
| 42 | −#define SZ_1M 0x00100000 | |
| 43 | −#define SZ_2M 0x00200000 | |
| 44 | −#define SZ_4M 0x00400000 | |
| 45 | −#define SZ_8M 0x00800000 | |
| 46 | −#define SZ_16M 0x01000000 | |
| 47 | −#define SZ_32M 0x02000000 | |
| 48 | −#define SZ_48M 0x03000000 | |
| 49 | −#define SZ_64M 0x04000000 | |
| 50 | −#define SZ_128M 0x08000000 | |
| 51 | −#define SZ_256M 0x10000000 | |
| 52 | −#define SZ_512M 0x20000000 | |
| 53 | − | |
| 54 | −#define SZ_1G 0x40000000 | |
| 55 | −#define SZ_2G 0x80000000 | |
| 56 | − | |
| 57 | −#endif | |
| 58 | − | |
| 59 | −/* END */ | |
| 21 | +#define SZ_48M (SZ_32M + SZ_16M) | |
| @@ -14,20 +14,12 @@ · 13 unmodified lines | ||
| 14 | 14 | #include <linux/cpumask.h> |
| 15 | 15 | #include <linux/thread_info.h> |
| 16 | 16 | |
| 17 | −#include <mach/smp.h> | |
| 18 | − | |
| 19 | 17 | #ifndef CONFIG_SMP |
| 20 | 18 | # error "<asm/smp.h> included in non-SMP build" |
| 21 | 19 | #endif |
| 22 | 20 | |
| 23 | 21 | #define raw_smp_processor_id() (current_thread_info()->cpu) |
| 24 | 22 | |
| 25 | −/* | |
| 26 | − * at the moment, there's not a big penalty for changing CPUs | |
| 27 | − * (the >big< penalty is running SMP in the first place) | |
| 28 | − */ | |
| 29 | −#define PROC_CHANGE_PENALTY 15 | |
| 30 | − | |
| 31 | 23 | struct seq_file; |
| 32 | 24 | |
| 33 | 25 | /* |
| @@ -47,9 +39,9 @@ extern void smp_init_cpus(void); · 13 unmodified lines | ||
| 47 | 39 | |
| 48 | 40 | |
| 49 | 41 | /* |
| 50 | − * Raise an IPI cross call on CPUs in callmap. | |
| 42 | + * Provide a function to raise an IPI cross call on CPUs in callmap. | |
| 51 | 43 | */ |
| 52 | −extern void smp_cross_call(const struct cpumask *mask, int ipi); | |
| 44 | +extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int)); | |
| 53 | 45 | |
| 54 | 46 | /* |
| 55 | 47 | * Boot a secondary CPU, and assign it the specified idle task. |
| @@ -78,6 +70,7 @@ extern void platform_smp_prepare_cpus(unsigned int); · 22 unmodified lines | ||
| 78 | 70 | */ |
| 79 | 71 | struct secondary_data { |
| 80 | 72 | unsigned long pgdir; |
| 73 | + unsigned long swapper_pg_dir; | |
| 81 | 74 | void *stack; |
| 82 | 75 | }; |
| 83 | 76 | extern struct secondary_data secondary_data; |
| @@ -5,6 +5,8 @@ · 4 unmodified lines | ||
| 5 | 5 | #error SMP not supported on pre-ARMv6 CPUs |
| 6 | 6 | #endif |
| 7 | 7 | |
| 8 | +#include <asm/processor.h> | |
| 9 | + | |
| 8 | 10 | /* |
| 9 | 11 | * sev and wfe are ARMv6K extensions. Uniprocessor ARMv6 may not have the K |
| 10 | 12 | * extensions, so when running on UP, we have to patch these instructions away. |
| @@ -159,7 +159,7 @@ extern unsigned int user_debug; · 158 unmodified lines | ||
| 159 | 159 | #include <mach/barriers.h> |
| 160 | 160 | #elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) |
| 161 | 161 | #define mb() do { dsb(); outer_sync(); } while (0) |
| 162 | −#define rmb() dmb() | |
| 162 | +#define rmb() dsb() | |
| 163 | 163 | #define wmb() mb() |
| 164 | 164 | #else |
| 165 | 165 | #include <asm/memory.h> |
| @@ -249,7 +249,7 @@ do { \ · 83 unmodified lines | ||
| 249 | 249 | * cache totally. This means that the cache becomes inconsistent, and, |
| 250 | 250 | * since we use normal loads/stores as well, this is really bad. |
| 251 | 251 | * Typically, this causes oopsen in filp_close, but could have other, |
| 252 | − * more disasterous effects. There are two work-arounds: | |
| 252 | + * more disastrous effects. There are two work-arounds: | |
| 253 | 253 | * 1. Disable interrupts and emulate the atomic swap |
| 254 | 254 | * 2. Clean the cache, perform atomic swap, flush the cache |
| 255 | 255 | * |
| @@ -43,6 +43,7 @@ static inline void thread_notify(unsigned long rc, struct thread_info *thread) · 42 unmodified lines | ||
| 43 | 43 | #define THREAD_NOTIFY_FLUSH 0 |
| 44 | 44 | #define THREAD_NOTIFY_EXIT 1 |
| 45 | 45 | #define THREAD_NOTIFY_SWITCH 2 |
| 46 | +#define THREAD_NOTIFY_COPY 3 | |
| 46 | 47 | |
| 47 | 48 | #endif |
| 48 | 49 | #endif |
| @@ -41,12 +41,12 @@ · 40 unmodified lines | ||
| 41 | 41 | */ |
| 42 | 42 | #if defined(CONFIG_SMP) || defined(CONFIG_CPU_32v7) |
| 43 | 43 | #define tlb_fast_mode(tlb) 0 |
| 44 | −#define FREE_PTE_NR 500 | |
| 45 | 44 | #else |
| 46 | 45 | #define tlb_fast_mode(tlb) 1 |
| 47 | −#define FREE_PTE_NR 0 | |
| 48 | 46 | #endif |
| 49 | 47 | |
| 48 | +#define MMU_GATHER_BUNDLE 8 | |
| 49 | + | |
| 50 | 50 | /* |
| 51 | 51 | * TLB handling. This allows us to remove pages from the page |
| 52 | 52 | * tables, and efficiently handle the TLB issues. |
| @@ -58,7 +58,9 @@ struct mmu_gather { · 5 unmodified lines | ||
| 58 | 58 | unsigned long range_start; |
| 59 | 59 | unsigned long range_end; |
| 60 | 60 | unsigned int nr; |
| 61 | − struct page *pages[FREE_PTE_NR]; | |
| 61 | + unsigned int max; | |
| 62 | + struct page **pages; | |
| 63 | + struct page *local[MMU_GATHER_BUNDLE]; | |
| 62 | 64 | }; |
| 63 | 65 | |
| 64 | 66 | DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); |
| @@ -97,26 +99,37 @@ static inline void tlb_add_flush(struct mmu_gather *tlb, unsigned long addr) · 32 unmodified lines | ||
| 97 | 99 | } |
| 98 | 100 | } |
| 99 | 101 | |
| 102 | +static inline void __tlb_alloc_page(struct mmu_gather *tlb) | |
| 103 | +{ | |
| 104 | + unsigned long addr = __get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0); | |
| 105 | + | |
| 106 | + if (addr) { | |
| 107 | + tlb->pages = (void *)addr; | |
| 108 | + tlb->max = PAGE_SIZE / sizeof(struct page *); | |
| 109 | + } | |
| 110 | +} | |
| 111 | + | |
| 100 | 112 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) |
| 101 | 113 | { |
| 102 | 114 | tlb_flush(tlb); |
| 103 | 115 | if (!tlb_fast_mode(tlb)) { |
| 104 | 116 | free_pages_and_swap_cache(tlb->pages, tlb->nr); |
| 105 | 117 | tlb->nr = 0; |
| 118 | + if (tlb->pages == tlb->local) | |
| 119 | + __tlb_alloc_page(tlb); | |
| 106 | 120 | } |
| 107 | 121 | } |
| 108 | 122 | |
| 109 | −static inline struct mmu_gather * | |
| 110 | −tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) | |
| 123 | +static inline void | |
| 124 | +tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned int fullmm) | |
| 111 | 125 | { |
| 112 | − struct mmu_gather *tlb = &get_cpu_var(mmu_gathers); | |
| 113 | − | |
| 114 | 126 | tlb->mm = mm; |
| 115 | − tlb->fullmm = full_mm_flush; | |
| 127 | + tlb->fullmm = fullmm; | |
| 116 | 128 | tlb->vma = NULL; |
| 129 | + tlb->max = ARRAY_SIZE(tlb->local); | |
| 130 | + tlb->pages = tlb->local; | |
| 117 | 131 | tlb->nr = 0; |
| 118 | − | |
| 119 | − return tlb; | |
| 132 | + __tlb_alloc_page(tlb); | |
| 120 | 133 | } |
| 121 | 134 | |
| 122 | 135 | static inline void |
| @@ -127,7 +140,8 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) · 4 unmodified lines | ||
| 127 | 140 | /* keep the page table cache within bounds */ |
| 128 | 141 | check_pgt_cache(); |
| 129 | 142 | |
| 130 | − put_cpu_var(mmu_gathers); | |
| 143 | + if (tlb->pages != tlb->local) | |
| 144 | + free_pages((unsigned long)tlb->pages, 0); | |
| 131 | 145 | } |
| 132 | 146 | |
| 133 | 147 | /* |
| @@ -162,15 +176,22 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma) · 28 unmodified lines | ||
| 162 | 176 | tlb_flush(tlb); |
| 163 | 177 | } |
| 164 | 178 | |
| 165 | −static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) | |
| 179 | +static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page) | |
| 166 | 180 | { |
| 167 | 181 | if (tlb_fast_mode(tlb)) { |
| 168 | 182 | free_page_and_swap_cache(page); |
| 169 | − } else { | |
| 170 | − tlb->pages[tlb->nr++] = page; | |
| 171 | − if (tlb->nr >= FREE_PTE_NR) | |
| 172 | − tlb_flush_mmu(tlb); | |
| 183 | + return 1; /* avoid calling tlb_flush_mmu */ | |
| 173 | 184 | } |
| 185 | + | |
| 186 | + tlb->pages[tlb->nr++] = page; | |
| 187 | + VM_BUG_ON(tlb->nr > tlb->max); | |
| 188 | + return tlb->max - tlb->nr; | |
| 189 | +} | |
| 190 | + | |
| 191 | +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) | |
| 192 | +{ | |
| 193 | + if (!__tlb_remove_page(tlb, page)) | |
| 194 | + tlb_flush_mmu(tlb); | |
| 174 | 195 | } |
| 175 | 196 | |
| 176 | 197 | static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte, |
| @@ -47,7 +47,7 @@ struct crunch_sigframe { · 46 unmodified lines | ||
| 47 | 47 | #endif |
| 48 | 48 | |
| 49 | 49 | #ifdef CONFIG_IWMMXT |
| 50 | −/* iwmmxt_area is 0x98 bytes long, preceeded by 8 bytes of signature */ | |
| 50 | +/* iwmmxt_area is 0x98 bytes long, preceded by 8 bytes of signature */ | |
| 51 | 51 | #define IWMMXT_MAGIC 0x12ef842a |
| 52 | 52 | #define IWMMXT_STORAGE_SIZE (IWMMXT_SIZE + 8) |
| 53 | 53 | |
| @@ -396,6 +396,12 @@ · 395 unmodified lines | ||
| 396 | 396 | #define __NR_fanotify_init (__NR_SYSCALL_BASE+367) |
| 397 | 397 | #define __NR_fanotify_mark (__NR_SYSCALL_BASE+368) |
| 398 | 398 | #define __NR_prlimit64 (__NR_SYSCALL_BASE+369) |
| 399 | +#define __NR_name_to_handle_at (__NR_SYSCALL_BASE+370) | |
| 400 | +#define __NR_open_by_handle_at (__NR_SYSCALL_BASE+371) | |
| 401 | +#define __NR_clock_adjtime (__NR_SYSCALL_BASE+372) | |
| 402 | +#define __NR_syncfs (__NR_SYSCALL_BASE+373) | |
| 403 | +#define __NR_sendmmsg (__NR_SYSCALL_BASE+374) | |
| 404 | +#define __NR_setns (__NR_SYSCALL_BASE+375) | |
| 399 | 405 | |
| 400 | 406 | /* |
| 401 | 407 | * The following SWIs are ARM private. |
| @@ -24,12 +24,12 @@ obj-$(CONFIG_OC_ETM) += etm.o · 23 unmodified lines | ||
| 24 | 24 | |
| 25 | 25 | obj-$(CONFIG_ISA_DMA_API) += dma.o |
| 26 | 26 | obj-$(CONFIG_ARCH_ACORN) += ecard.o |
| 27 | −obj-$(CONFIG_FIQ) += fiq.o | |
| 27 | +obj-$(CONFIG_FIQ) += fiq.o fiqasm.o | |
| 28 | 28 | obj-$(CONFIG_MODULES) += armksyms.o module.o |
| 29 | 29 | obj-$(CONFIG_ARTHUR) += arthur.o |
| 30 | 30 | obj-$(CONFIG_ISA_DMA) += dma-isa.o |
| 31 | 31 | obj-$(CONFIG_PCI) += bios32.o isa.o |
| 32 | −obj-$(CONFIG_PM) += sleep.o | |
| 32 | +obj-$(CONFIG_PM_SLEEP) += sleep.o | |
| 33 | 33 | obj-$(CONFIG_HAVE_SCHED_CLOCK) += sched_clock.o |
| 34 | 34 | obj-$(CONFIG_SMP) += smp.o smp_tlb.o |
| 35 | 35 | obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o |
| @@ -44,6 +44,7 @@ obj-$(CONFIG_ARM_THUMBEE) += thumbee.o · 8 unmodified lines | ||
| 44 | 44 | obj-$(CONFIG_KGDB) += kgdb.o |
| 45 | 45 | obj-$(CONFIG_ARM_UNWIND) += unwind.o |
| 46 | 46 | obj-$(CONFIG_HAVE_TCM) += tcm.o |
| 47 | +obj-$(CONFIG_OF) += devtree.o | |
| 47 | 48 | obj-$(CONFIG_CRASH_DUMP) += crash_dump.o |
| 48 | 49 | obj-$(CONFIG_SWP_EMULATE) += swp_emulate.o |
| 49 | 50 | CFLAGS_swp_emulate.o := -Wa,-march=armv7-a |
| @@ -379,6 +379,12 @@ · 378 unmodified lines | ||
| 379 | 379 | CALL(sys_fanotify_init) |
| 380 | 380 | CALL(sys_fanotify_mark) |
| 381 | 381 | CALL(sys_prlimit64) |
| 382 | +/* 370 */ CALL(sys_name_to_handle_at) | |
| 383 | + CALL(sys_open_by_handle_at) | |
| 384 | + CALL(sys_clock_adjtime) | |
| 385 | + CALL(sys_syncfs) | |
| 386 | + CALL(sys_sendmmsg) | |
| 387 | +/* 375 */ CALL(sys_setns) | |
| 382 | 388 | #ifndef syscalls_counted |
| 383 | 389 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls |
| 384 | 390 | #define syscalls_counted |
| @@ -25,7 +25,7 @@ · 24 unmodified lines | ||
| 25 | 25 | .macro addruart, rp, rv |
| 26 | 26 | .endm |
| 27 | 27 | |
| 28 | −#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) | |
| 28 | +#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7) | |
| 29 | 29 | |
| 30 | 30 | .macro senduart, rd, rx |
| 31 | 31 | mcr p14, 0, \rd, c0, c5, 0 |
| @@ -49,23 +49,6 @@ · 17 unmodified lines | ||
| 49 | 49 | 1002: |
| 50 | 50 | .endm |
| 51 | 51 | |
| 52 | −#elif defined(CONFIG_CPU_V7) | |
| 53 | − | |
| 54 | − .macro senduart, rd, rx | |
| 55 | − mcr p14, 0, \rd, c0, c5, 0 | |
| 56 | − .endm | |
| 57 | − | |
| 58 | − .macro busyuart, rd, rx | |
| 59 | −busy: mrc p14, 0, pc, c0, c1, 0 | |
| 60 | − bcs busy | |
| 61 | − .endm | |
| 62 | − | |
| 63 | − .macro waituart, rd, rx | |
| 64 | −wait: mrc p14, 0, pc, c0, c1, 0 | |
| 65 | − bcs wait | |
| 66 | − | |
| 67 | − .endm | |
| 68 | − | |
| 69 | 52 | #elif defined(CONFIG_CPU_XSCALE) |
| 70 | 53 | |
| 71 | 54 | .macro senduart, rd, rx |
| @@ -0,0 +1,145 @@ | ||
| 1 | +/* | |
| 2 | + * linux/arch/arm/kernel/devtree.c | |
| 3 | + * | |
| 4 | + * Copyright (C) 2009 Canonical Ltd. <jeremy.kerr@canonical.com> | |
| 5 | + * | |
| 6 | + * This program is free software; you can redistribute it and/or modify | |
| 7 | + * it under the terms of the GNU General Public License version 2 as | |
| 8 | + * published by the Free Software Foundation. | |
| 9 | + */ | |
| 10 | + | |
| 11 | +#include <linux/init.h> | |
| 12 | +#include <linux/module.h> | |
| 13 | +#include <linux/errno.h> | |
| 14 | +#include <linux/types.h> | |
| 15 | +#include <linux/bootmem.h> | |
| 16 | +#include <linux/memblock.h> | |
| 17 | +#include <linux/of.h> | |
| 18 | +#include <linux/of_fdt.h> | |
| 19 | +#include <linux/of_irq.h> | |
| 20 | +#include <linux/of_platform.h> | |
| 21 | + | |
| 22 | +#include <asm/setup.h> | |
| 23 | +#include <asm/page.h> | |
| 24 | +#include <asm/mach/arch.h> | |
| 25 | +#include <asm/mach-types.h> | |
| 26 | + | |
| 27 | +void __init early_init_dt_add_memory_arch(u64 base, u64 size) | |
| 28 | +{ | |
| 29 | + arm_add_memory(base, size); | |
| 30 | +} | |
| 31 | + | |
| 32 | +void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align) | |
| 33 | +{ | |
| 34 | + return alloc_bootmem_align(size, align); | |
| 35 | +} | |
| 36 | + | |
| 37 | +void __init arm_dt_memblock_reserve(void) | |
| 38 | +{ | |
| 39 | + u64 *reserve_map, base, size; | |
| 40 | + | |
| 41 | + if (!initial_boot_params) | |
| 42 | + return; | |
| 43 | + | |
| 44 | + /* Reserve the dtb region */ | |
| 45 | + memblock_reserve(virt_to_phys(initial_boot_params), | |
| 46 | + be32_to_cpu(initial_boot_params->totalsize)); | |
| 47 | + | |
| 48 | + /* | |
| 49 | + * Process the reserve map. This will probably overlap the initrd | |
| 50 | + * and dtb locations which are already reserved, but overlaping | |
| 51 | + * doesn't hurt anything | |
| 52 | + */ | |
| 53 | + reserve_map = ((void*)initial_boot_params) + | |
| 54 | + be32_to_cpu(initial_boot_params->off_mem_rsvmap); | |
| 55 | + while (1) { | |
| 56 | + base = be64_to_cpup(reserve_map++); | |
| 57 | + size = be64_to_cpup(reserve_map++); | |
| 58 | + if (!size) | |
| 59 | + break; | |
| 60 | + memblock_reserve(base, size); | |
| 61 | + } | |
| 62 | +} | |
| 63 | + | |
| 64 | +/** | |
| 65 | + * setup_machine_fdt - Machine setup when an dtb was passed to the kernel | |
| 66 | + * @dt_phys: physical address of dt blob | |
| 67 | + * | |
| 68 | + * If a dtb was passed to the kernel in r2, then use it to choose the | |
| 69 | + * correct machine_desc and to setup the system. | |
| 70 | + */ | |
| 71 | +struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) | |
| 72 | +{ | |
| 73 | + struct boot_param_header *devtree; | |
| 74 | + struct machine_desc *mdesc, *mdesc_best = NULL; | |
| 75 | + unsigned int score, mdesc_score = ~1; | |
| 76 | + unsigned long dt_root; | |
| 77 | + const char *model; | |
| 78 | + | |
| 79 | + devtree = phys_to_virt(dt_phys); | |
| 80 | + | |
| 81 | + /* check device tree validity */ | |
| 82 | + if (be32_to_cpu(devtree->magic) != OF_DT_HEADER) | |
| 83 | + return NULL; | |
| 84 | + | |
| 85 | + /* Search the mdescs for the 'best' compatible value match */ | |
| 86 | + initial_boot_params = devtree; | |
| 87 | + dt_root = of_get_flat_dt_root(); | |
| 88 | + for_each_machine_desc(mdesc) { | |
| 89 | + score = of_flat_dt_match(dt_root, mdesc->dt_compat); | |
| 90 | + if (score > 0 && score < mdesc_score) { | |
| 91 | + mdesc_best = mdesc; | |
| 92 | + mdesc_score = score; | |
| 93 | + } | |
| 94 | + } | |
| 95 | + if (!mdesc_best) { | |
| 96 | + const char *prop; | |
| 97 | + long size; | |
| 98 | + | |
| 99 | + early_print("\nError: unrecognized/unsupported " | |
| 100 | + "device tree compatible list:\n[ "); | |
| 101 | + | |
| 102 | + prop = of_get_flat_dt_prop(dt_root, "compatible", &size); | |
| 103 | + while (size > 0) { | |
| 104 | + early_print("'%s' ", prop); | |
| 105 | + size -= strlen(prop) + 1; | |
| 106 | + prop += strlen(prop) + 1; | |
| 107 | + } | |
| 108 | + early_print("]\n\n"); | |
| 109 | + | |
| 110 | + dump_machine_table(); /* does not return */ | |
| 111 | + } | |
| 112 | + | |
| 113 | + model = of_get_flat_dt_prop(dt_root, "model", NULL); | |
| 114 | + if (!model) | |
| 115 | + model = of_get_flat_dt_prop(dt_root, "compatible", NULL); | |
| 116 | + if (!model) | |
| 117 | + model = "<unknown>"; | |
| 118 | + pr_info("Machine: %s, model: %s\n", mdesc_best->name, model); | |
| 119 | + | |
| 120 | + /* Retrieve various information from the /chosen node */ | |
| 121 | + of_scan_flat_dt(early_init_dt_scan_chosen, boot_command_line); | |
| 122 | + /* Initialize {size,address}-cells info */ | |
| 123 | + of_scan_flat_dt(early_init_dt_scan_root, NULL); | |
| 124 | + /* Setup memory, calling early_init_dt_add_memory_arch */ | |
| 125 | + of_scan_flat_dt(early_init_dt_scan_memory, NULL); | |
| 126 | + | |
| 127 | + /* Change machine number to match the mdesc we're using */ | |
| 128 | + __machine_arch_type = mdesc_best->nr; | |
| 129 | + | |
| 130 | + return mdesc_best; | |
| 131 | +} | |
| 132 | + | |
| 133 | +/** | |
| 134 | + * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq# | |
| 135 | + * | |
| 136 | + * Currently the mapping mechanism is trivial; simple flat hwirq numbers are | |
| 137 | + * mapped 1:1 onto Linux irq numbers. Cascaded irq controllers are not | |
| 138 | + * supported. | |
| 139 | + */ | |
| 140 | +unsigned int irq_create_of_mapping(struct device_node *controller, | |
| 141 | + const u32 *intspec, unsigned int intsize) | |
| 142 | +{ | |
| 143 | + return intspec[0]; | |
| 144 | +} | |
| 145 | +EXPORT_SYMBOL_GPL(irq_create_of_mapping); | |
| @@ -40,15 +40,22 @@ EXPORT_SYMBOL(elf_check_arch); · 39 unmodified lines | ||
| 40 | 40 | void elf_set_personality(const struct elf32_hdr *x) |
| 41 | 41 | { |
| 42 | 42 | unsigned int eflags = x->e_flags; |
| 43 | − unsigned int personality = PER_LINUX_32BIT; | |
| 43 | + unsigned int personality = current->personality & ~PER_MASK; | |
| 44 | + | |
| 45 | + /* | |
| 46 | + * We only support Linux ELF executables, so always set the | |
| 47 | + * personality to LINUX. | |
| 48 | + */ | |
| 49 | + personality |= PER_LINUX; | |
| 44 | 50 | |
| 45 | 51 | /* |
| 46 | 52 | * APCS-26 is only valid for OABI executables |
| 47 | 53 | */ |
| 48 | − if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN) { | |
| 49 | − if (eflags & EF_ARM_APCS_26) | |
| 50 | − personality = PER_LINUX; | |
| 51 | − } | |
| 54 | + if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN && | |
| 55 | + (eflags & EF_ARM_APCS_26)) | |
| 56 | + personality &= ~ADDR_LIMIT_32BIT; | |
| 57 | + else | |
| 58 | + personality |= ADDR_LIMIT_32BIT; | |
| 52 | 59 | |
| 53 | 60 | set_personality(personality); |
| 54 | 61 | |
| @@ -338,7 +338,7 @@ static struct miscdevice etb_miscdev = { · 337 unmodified lines | ||
| 338 | 338 | .fops = &etb_fops, |
| 339 | 339 | }; |
| 340 | 340 | |
| 341 | −static int __init etb_probe(struct amba_device *dev, const struct amba_id *id) | |
| 341 | +static int __devinit etb_probe(struct amba_device *dev, const struct amba_id *id) | |
| 342 | 342 | { |
| 343 | 343 | struct tracectx *t = &tracer; |
| 344 | 344 | int ret = 0; |
| @@ -530,7 +530,7 @@ static ssize_t trace_mode_store(struct kobject *kobj, · 185 unmodified lines | ||
| 530 | 530 | static struct kobj_attribute trace_mode_attr = |
| 531 | 531 | __ATTR(trace_mode, 0644, trace_mode_show, trace_mode_store); |
| 532 | 532 | |
| 533 | −static int __init etm_probe(struct amba_device *dev, const struct amba_id *id) | |
| 533 | +static int __devinit etm_probe(struct amba_device *dev, const struct amba_id *id) | |
| 534 | 534 | { |
| 535 | 535 | struct tracectx *t = &tracer; |
| 536 | 536 | int ret = 0; |
| @@ -89,47 +89,6 @@ void set_fiq_handler(void *start, unsigned int length) · 88 unmodified lines | ||
| 89 | 89 | flush_icache_range(0x1c, 0x1c + length); |
| 90 | 90 | } |
| 91 | 91 | |
| 92 | −/* | |
| 93 | − * Taking an interrupt in FIQ mode is death, so both these functions | |
| 94 | − * disable irqs for the duration. Note - these functions are almost | |
| 95 | − * entirely coded in assembly. | |
| 96 | − */ | |
| 97 | −void __naked set_fiq_regs(struct pt_regs *regs) | |
| 98 | −{ | |
| 99 | − register unsigned long tmp; | |
| 100 | − asm volatile ( | |
| 101 | − "mov ip, sp\n\ | |
| 102 | − stmfd sp!, {fp, ip, lr, pc}\n\ | |
| 103 | − sub fp, ip, #4\n\ | |
| 104 | − mrs %0, cpsr\n\ | |
| 105 | − msr cpsr_c, %2 @ select FIQ mode\n\ | |
| 106 | − mov r0, r0\n\ | |
| 107 | − ldmia %1, {r8 - r14}\n\ | |
| 108 | − msr cpsr_c, %0 @ return to SVC mode\n\ | |
| 109 | − mov r0, r0\n\ | |
| 110 | − ldmfd sp, {fp, sp, pc}" | |
| 111 | − : "=&r" (tmp) | |
| 112 | − : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); | |
| 113 | −} | |
| 114 | − | |
| 115 | −void __naked get_fiq_regs(struct pt_regs *regs) | |
| 116 | −{ | |
| 117 | − register unsigned long tmp; | |
| 118 | − asm volatile ( | |
| 119 | − "mov ip, sp\n\ | |
| 120 | − stmfd sp!, {fp, ip, lr, pc}\n\ | |
| 121 | − sub fp, ip, #4\n\ | |
| 122 | − mrs %0, cpsr\n\ | |
| 123 | − msr cpsr_c, %2 @ select FIQ mode\n\ | |
| 124 | − mov r0, r0\n\ | |
| 125 | − stmia %1, {r8 - r14}\n\ | |
| 126 | − msr cpsr_c, %0 @ return to SVC mode\n\ | |
| 127 | − mov r0, r0\n\ | |
| 128 | − ldmfd sp, {fp, sp, pc}" | |
| 129 | − : "=&r" (tmp) | |
| 130 | − : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE)); | |
| 131 | −} | |
| 132 | − | |
| 133 | 92 | int claim_fiq(struct fiq_handler *f) |
| 134 | 93 | { |
| 135 | 94 | int ret = 0; |
| @@ -174,8 +133,8 @@ void disable_fiq(int fiq) · 38 unmodified lines | ||
| 174 | 133 | } |
| 175 | 134 | |
| 176 | 135 | EXPORT_SYMBOL(set_fiq_handler); |
| 177 | −EXPORT_SYMBOL(set_fiq_regs); | |
| 178 | −EXPORT_SYMBOL(get_fiq_regs); | |
| 136 | +EXPORT_SYMBOL(__set_fiq_regs); /* defined in fiqasm.S */ | |
| 137 | +EXPORT_SYMBOL(__get_fiq_regs); /* defined in fiqasm.S */ | |
| 179 | 138 | EXPORT_SYMBOL(claim_fiq); |
| 180 | 139 | EXPORT_SYMBOL(release_fiq); |
| 181 | 140 | EXPORT_SYMBOL(enable_fiq); |
| @@ -0,0 +1,49 @@ | ||
| 1 | +/* | |
| 2 | + * linux/arch/arm/kernel/fiqasm.S | |
| 3 | + * | |
| 4 | + * Derived from code originally in linux/arch/arm/kernel/fiq.c: | |
| 5 | + * | |
| 6 | + * Copyright (C) 1998 Russell King | |
| 7 | + * Copyright (C) 1998, 1999 Phil Blundell | |
| 8 | + * Copyright (C) 2011, Linaro Limited | |
| 9 | + * | |
| 10 | + * FIQ support written by Philip Blundell <philb@gnu.org>, 1998. | |
| 11 | + * | |
| 12 | + * FIQ support re-written by Russell King to be more generic | |
| 13 | + * | |
| 14 | + * v7/Thumb-2 compatibility modifications by Linaro Limited, 2011. | |
| 15 | + */ | |
| 16 | + | |
| 17 | +#include <linux/linkage.h> | |
| 18 | +#include <asm/assembler.h> | |
| 19 | + | |
| 20 | +/* | |
| 21 | + * Taking an interrupt in FIQ mode is death, so both these functions | |
| 22 | + * disable irqs for the duration. | |
| 23 | + */ | |
| 24 | + | |
| 25 | +ENTRY(__set_fiq_regs) | |
| 26 | + mov r2, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE | |
| 27 | + mrs r1, cpsr | |
| 28 | + msr cpsr_c, r2 @ select FIQ mode | |
| 29 | + mov r0, r0 @ avoid hazard prior to ARMv4 | |
| 30 | + ldmia r0!, {r8 - r12} | |
| 31 | + ldr sp, [r0], #4 | |
| 32 | + ldr lr, [r0] | |
| 33 | + msr cpsr_c, r1 @ return to SVC mode | |
| 34 | + mov r0, r0 @ avoid hazard prior to ARMv4 | |
| 35 | + mov pc, lr | |
| 36 | +ENDPROC(__set_fiq_regs) | |
| 37 | + | |
| 38 | +ENTRY(__get_fiq_regs) | |
| 39 | + mov r2, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE | |
| 40 | + mrs r1, cpsr | |
| 41 | + msr cpsr_c, r2 @ select FIQ mode | |
| 42 | + mov r0, r0 @ avoid hazard prior to ARMv4 | |
| 43 | + stmia r0!, {r8 - r12} | |
| 44 | + str sp, [r0], #4 | |
| 45 | + str lr, [r0] | |
| 46 | + msr cpsr_c, r1 @ return to SVC mode | |
| 47 | + mov r0, r0 @ avoid hazard prior to ARMv4 | |
| 48 | + mov pc, lr | |
| 49 | +ENDPROC(__get_fiq_regs) | |
| @@ -15,6 +15,12 @@ · 14 unmodified lines | ||
| 15 | 15 | #define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) |
| 16 | 16 | #define ATAG_CORE_SIZE_EMPTY ((2*4) >> 2) |
| 17 | 17 | |
| 18 | +#ifdef CONFIG_CPU_BIG_ENDIAN | |
| 19 | +#define OF_DT_MAGIC 0xd00dfeed | |
| 20 | +#else | |
| 21 | +#define OF_DT_MAGIC 0xedfe0dd0 /* 0xd00dfeed in big-endian */ | |
| 22 | +#endif | |
| 23 | + | |
| 18 | 24 | /* |
| 19 | 25 | * Exception handling. Something went wrong and we can't proceed. We |
| 20 | 26 | * ought to tell the user, but since we don't have any guarantee that |
| @@ -28,20 +34,26 @@ · 7 unmodified lines | ||
| 28 | 34 | |
| 29 | 35 | /* Determine validity of the r2 atags pointer. The heuristic requires |
| 30 | 36 | * that the pointer be aligned, in the first 16k of physical RAM and |
| 31 | − * that the ATAG_CORE marker is first and present. Future revisions | |
| 37 | + * that the ATAG_CORE marker is first and present. If CONFIG_OF_FLATTREE | |
| 38 | + * is selected, then it will also accept a dtb pointer. Future revisions | |
| 32 | 39 | * of this function may be more lenient with the physical address and |
| 33 | 40 | * may also be able to move the ATAGS block if necessary. |
| 34 | 41 | * |
| 35 | 42 | * Returns: |
| 36 | − * r2 either valid atags pointer, or zero | |
| 43 | + * r2 either valid atags pointer, valid dtb pointer, or zero | |
| 37 | 44 | * r5, r6 corrupted |
| 38 | 45 | */ |
| 39 | 46 | __vet_atags: |
| 40 | 47 | tst r2, #0x3 @ aligned? |
| 41 | 48 | bne 1f |
| 42 | 49 | |
| 43 | − ldr r5, [r2, #0] @ is first tag ATAG_CORE? | |
| 44 | − cmp r5, #ATAG_CORE_SIZE | |
| 50 | + ldr r5, [r2, #0] | |
| 51 | +#ifdef CONFIG_OF_FLATTREE | |
| 52 | + ldr r6, =OF_DT_MAGIC @ is it a DTB? | |
| 53 | + cmp r5, r6 | |
| 54 | + beq 2f | |
| 55 | +#endif | |
| 56 | + cmp r5, #ATAG_CORE_SIZE @ is first tag ATAG_CORE? | |
| 45 | 57 | cmpne r5, #ATAG_CORE_SIZE_EMPTY |
| 46 | 58 | bne 1f |
| 47 | 59 | ldr r5, [r2, #4] |
| @@ -49,7 +61,7 @@ __vet_atags: · 1 unmodified line | ||
| 49 | 61 | cmp r5, r6 |
| 50 | 62 | bne 1f |
| 51 | 63 | |
| 52 | − mov pc, lr @ atag pointer is ok | |
| 64 | +2: mov pc, lr @ atag/dtb pointer is ok | |
| 53 | 65 | |
| 54 | 66 | 1: mov r2, #0 |
| 55 | 67 | mov pc, lr |
| @@ -61,7 +73,7 @@ ENDPROC(__vet_atags) · 5 unmodified lines | ||
| 61 | 73 | * |
| 62 | 74 | * r0 = cp#15 control register |
| 63 | 75 | * r1 = machine ID |
| 64 | − * r2 = atags pointer | |
| 76 | + * r2 = atags/dtb pointer | |
| 65 | 77 | * r9 = processor ID |
| 66 | 78 | */ |
| 67 | 79 | __INIT |
| @@ -59,7 +59,7 @@ · 58 unmodified lines | ||
| 59 | 59 | * |
| 60 | 60 | * This is normally called from the decompressor code. The requirements |
| 61 | 61 | * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0, |
| 62 | − * r1 = machine nr, r2 = atags pointer. | |
| 62 | + * r1 = machine nr, r2 = atags or dtb pointer. | |
| 63 | 63 | * |
| 64 | 64 | * This code is mostly position independent, so if you link the kernel at |
| 65 | 65 | * 0xc0008000, you call this at __pa(0xc0008000). |
| @@ -91,7 +91,7 @@ ENTRY(stext) · 25 unmodified lines | ||
| 91 | 91 | #endif |
| 92 | 92 | |
| 93 | 93 | /* |
| 94 | − * r1 = machine no, r2 = atags, | |
| 94 | + * r1 = machine no, r2 = atags or dtb, | |
| 95 | 95 | * r8 = phys_offset, r9 = cpuid, r10 = procinfo |
| 96 | 96 | */ |
| 97 | 97 | bl __vet_atags |
| @@ -113,6 +113,7 @@ ENTRY(stext) · 15 unmodified lines | ||
| 113 | 113 | ldr r13, =__mmap_switched @ address to jump to after |
| 114 | 114 | @ mmu has been enabled |
| 115 | 115 | adr lr, BSYM(1f) @ return (PIC) address |
| 116 | + mov r8, r4 @ set TTBR1 to swapper_pg_dir | |
| 116 | 117 | ARM( add pc, r10, #PROCINFO_INITFUNC ) |
| 117 | 118 | THUMB( add r12, r10, #PROCINFO_INITFUNC ) |
| 118 | 119 | THUMB( mov pc, r12 ) |
| @@ -302,8 +303,10 @@ ENTRY(secondary_startup) · 183 unmodified lines | ||
| 302 | 303 | */ |
| 303 | 304 | adr r4, __secondary_data |
| 304 | 305 | ldmia r4, {r5, r7, r12} @ address to jump to after |
| 305 | − sub r4, r4, r5 @ mmu has been enabled | |
| 306 | − ldr r4, [r7, r4] @ get secondary_data.pgdir | |
| 306 | + sub lr, r4, r5 @ mmu has been enabled | |
| 307 | + ldr r4, [r7, lr] @ get secondary_data.pgdir | |
| 308 | + add r7, r7, #4 | |
| 309 | + ldr r8, [r7, lr] @ get secondary_data.swapper_pg_dir | |
| 307 | 310 | adr lr, BSYM(__enable_mmu) @ return address |
| 308 | 311 | mov r13, r12 @ __secondary_switched address |
| 309 | 312 | ARM( add pc, r10, #PROCINFO_INITFUNC ) @ initialise processor |
| @@ -339,7 +342,7 @@ __secondary_data: · 29 unmodified lines | ||
| 339 | 342 | * |
| 340 | 343 | * r0 = cp#15 control register |
| 341 | 344 | * r1 = machine ID |
| 342 | − * r2 = atags pointer | |
| 345 | + * r2 = atags or dtb pointer | |
| 343 | 346 | * r4 = page table pointer |
| 344 | 347 | * r9 = processor ID |
| 345 | 348 | * r13 = *virtual* address to jump to upon completion |
| @@ -376,7 +379,7 @@ ENDPROC(__enable_mmu) · 30 unmodified lines | ||
| 376 | 379 | * |
| 377 | 380 | * r0 = cp#15 control register |
| 378 | 381 | * r1 = machine ID |
| 379 | − * r2 = atags pointer | |
| 382 | + * r2 = atags or dtb pointer | |
| 380 | 383 | * r9 = processor ID |
| 381 | 384 | * r13 = *virtual* address to jump to upon completion |
| 382 | 385 | * |
| @@ -868,6 +868,13 @@ static void reset_ctrl_regs(void *info) · 867 unmodified lines | ||
| 868 | 868 | */ |
| 869 | 869 | asm volatile("mcr p14, 0, %0, c1, c0, 4" : : "r" (0)); |
| 870 | 870 | isb(); |
| 871 | + | |
| 872 | + /* | |
| 873 | + * Clear any configured vector-catch events before | |
| 874 | + * enabling monitor mode. | |
| 875 | + */ | |
| 876 | + asm volatile("mcr p14, 0, %0, c0, c7, 0" : : "r" (0)); | |
| 877 | + isb(); | |
| 871 | 878 | } |
| 872 | 879 | |
| 873 | 880 | if (enable_monitor_mode()) |
| @@ -34,9 +34,6 @@ · 33 unmodified lines | ||
| 34 | 34 | * |
| 35 | 35 | * *) If the PC is written to by the instruction, the |
| 36 | 36 | * instruction must be fully simulated in software. |
| 37 | − * If it is a conditional instruction, the handler | |
| 38 | − * will use insn[0] to copy its condition code to | |
| 39 | − * set r0 to 1 and insn[1] to "mov pc, lr" to return. | |
| 40 | 37 | * |
| 41 | 38 | * *) Otherwise, a modified form of the instruction is |
| 42 | 39 | * directly executed. Its handler calls the |
| @@ -68,13 +65,17 @@ · 25 unmodified lines | ||
| 68 | 65 | |
| 69 | 66 | #define branch_displacement(insn) sign_extend(((insn) & 0xffffff) << 2, 25) |
| 70 | 67 | |
| 68 | +#define is_r15(insn, bitpos) (((insn) & (0xf << bitpos)) == (0xf << bitpos)) | |
| 69 | + | |
| 70 | +/* | |
| 71 | + * Test if load/store instructions writeback the address register. | |
| 72 | + * if P (bit 24) == 0 or W (bit 21) == 1 | |
| 73 | + */ | |
| 74 | +#define is_writeback(insn) ((insn ^ 0x01000000) & 0x01200000) | |
| 75 | + | |
| 71 | 76 | #define PSR_fs (PSR_f|PSR_s) |
| 72 | 77 | |
| 73 | 78 | #define KPROBE_RETURN_INSTRUCTION 0xe1a0f00e /* mov pc, lr */ |
| 74 | −#define SET_R0_TRUE_INSTRUCTION 0xe3a00001 /* mov r0, #1 */ | |
| 75 | − | |
| 76 | −#define truecc_insn(insn) (((insn) & 0xf0000000) | \ | |
| 77 | − (SET_R0_TRUE_INSTRUCTION & 0x0fffffff)) | |
| 78 | 79 | |
| 79 | 80 | typedef long (insn_0arg_fn_t)(void); |
| 80 | 81 | typedef long (insn_1arg_fn_t)(long); |
| @@ -419,14 +420,10 @@ insnslot_llret_4arg_rwflags(long r0, long r1, long r2, long r3, long *cpsr, · 338 unmodified lines | ||
| 419 | 420 | |
| 420 | 421 | static void __kprobes simulate_bbl(struct kprobe *p, struct pt_regs *regs) |
| 421 | 422 | { |
| 422 | − insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; | |
| 423 | 423 | kprobe_opcode_t insn = p->opcode; |
| 424 | 424 | long iaddr = (long)p->addr; |
| 425 | 425 | int disp = branch_displacement(insn); |
| 426 | 426 | |
| 427 | − if (!insnslot_1arg_rflags(0, regs->ARM_cpsr, i_fn)) | |
| 428 | − return; | |
| 429 | − | |
| 430 | 427 | if (insn & (1 << 24)) |
| 431 | 428 | regs->ARM_lr = iaddr + 4; |
| 432 | 429 | |
| @@ -446,14 +443,10 @@ static void __kprobes simulate_blx1(struct kprobe *p, struct pt_regs *regs) · 13 unmodified lines | ||
| 446 | 443 | |
| 447 | 444 | static void __kprobes simulate_blx2bx(struct kprobe *p, struct pt_regs *regs) |
| 448 | 445 | { |
| 449 | − insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; | |
| 450 | 446 | kprobe_opcode_t insn = p->opcode; |
| 451 | 447 | int rm = insn & 0xf; |
| 452 | 448 | long rmv = regs->uregs[rm]; |
| 453 | 449 | |
| 454 | − if (!insnslot_1arg_rflags(0, regs->ARM_cpsr, i_fn)) | |
| 455 | − return; | |
| 456 | − | |
| 457 | 450 | if (insn & (1 << 5)) |
| 458 | 451 | regs->ARM_lr = (long)p->addr + 4; |
| 459 | 452 | |
| @@ -463,9 +456,16 @@ static void __kprobes simulate_blx2bx(struct kprobe *p, struct pt_regs *regs) · 3 unmodified lines | ||
| 463 | 456 | regs->ARM_cpsr |= PSR_T_BIT; |
| 464 | 457 | } |
| 465 | 458 | |
| 459 | +static void __kprobes simulate_mrs(struct kprobe *p, struct pt_regs *regs) | |
| 460 | +{ | |
| 461 | + kprobe_opcode_t insn = p->opcode; | |
| 462 | + int rd = (insn >> 12) & 0xf; | |
| 463 | + unsigned long mask = 0xf8ff03df; /* Mask out execution state */ | |
| 464 | + regs->uregs[rd] = regs->ARM_cpsr & mask; | |
| 465 | +} | |
| 466 | + | |
| 466 | 467 | static void __kprobes simulate_ldm1stm1(struct kprobe *p, struct pt_regs *regs) |
| 467 | 468 | { |
| 468 | − insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; | |
| 469 | 469 | kprobe_opcode_t insn = p->opcode; |
| 470 | 470 | int rn = (insn >> 16) & 0xf; |
| 471 | 471 | int lbit = insn & (1 << 20); |
| @@ -476,9 +476,6 @@ static void __kprobes simulate_ldm1stm1(struct kprobe *p, struct pt_regs *regs) · 4 unmodified lines | ||
| 476 | 476 | int reg_bit_vector; |
| 477 | 477 | int reg_count; |
| 478 | 478 | |
| 479 | − if (!insnslot_1arg_rflags(0, regs->ARM_cpsr, i_fn)) | |
| 480 | − return; | |
| 481 | − | |
| 482 | 479 | reg_count = 0; |
| 483 | 480 | reg_bit_vector = insn & 0xffff; |
| 484 | 481 | while (reg_bit_vector) { |
| @@ -510,11 +507,6 @@ static void __kprobes simulate_ldm1stm1(struct kprobe *p, struct pt_regs *regs) · 25 unmodified lines | ||
| 510 | 507 | |
| 511 | 508 | static void __kprobes simulate_stm1_pc(struct kprobe *p, struct pt_regs *regs) |
| 512 | 509 | { |
| 513 | − insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; | |
| 514 | − | |
| 515 | − if (!insnslot_1arg_rflags(0, regs->ARM_cpsr, i_fn)) | |
| 516 | − return; | |
| 517 | − | |
| 518 | 510 | regs->ARM_pc = (long)p->addr + str_pc_offset; |
| 519 | 511 | simulate_ldm1stm1(p, regs); |
| 520 | 512 | regs->ARM_pc = (long)p->addr + 4; |
| @@ -525,24 +517,16 @@ static void __kprobes simulate_mov_ipsp(struct kprobe *p, struct pt_regs *regs) · 4 unmodified lines | ||
| 525 | 517 | regs->uregs[12] = regs->uregs[13]; |
| 526 | 518 | } |
| 527 | 519 | |
| 528 | −static void __kprobes emulate_ldcstc(struct kprobe *p, struct pt_regs *regs) | |
| 529 | −{ | |
| 530 | − insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; | |
| 531 | − kprobe_opcode_t insn = p->opcode; | |
| 532 | − int rn = (insn >> 16) & 0xf; | |
| 533 | − long rnv = regs->uregs[rn]; | |
| 534 | − | |
| 535 | − /* Save Rn in case of writeback. */ | |
| 536 | − regs->uregs[rn] = insnslot_1arg_rflags(rnv, regs->ARM_cpsr, i_fn); | |
| 537 | −} | |
| 538 | − | |
| 539 | 520 | static void __kprobes emulate_ldrd(struct kprobe *p, struct pt_regs *regs) |
| 540 | 521 | { |
| 541 | 522 | insn_2arg_fn_t *i_fn = (insn_2arg_fn_t *)&p->ainsn.insn[0]; |
| 542 | 523 | kprobe_opcode_t insn = p->opcode; |
| 524 | + long ppc = (long)p->addr + 8; | |
| 543 | 525 | int rd = (insn >> 12) & 0xf; |
| 544 | 526 | int rn = (insn >> 16) & 0xf; |
| 545 | 527 | int rm = insn & 0xf; /* rm may be invalid, don't care. */ |
| 528 | + long rmv = (rm == 15) ? ppc : regs->uregs[rm]; | |
| 529 | + long rnv = (rn == 15) ? ppc : regs->uregs[rn]; | |
| 546 | 530 | |
| 547 | 531 | /* Not following the C calling convention here, so need asm(). */ |
| 548 | 532 | __asm__ __volatile__ ( |
| @@ -554,29 +538,36 @@ static void __kprobes emulate_ldrd(struct kprobe *p, struct pt_regs *regs) · 5 unmodified lines | ||
| 554 | 538 | "str r0, %[rn] \n\t" /* in case of writeback */ |
| 555 | 539 | "str r2, %[rd0] \n\t" |
| 556 | 540 | "str r3, %[rd1] \n\t" |
| 557 | − : [rn] "+m" (regs->uregs[rn]), | |
| 541 | + : [rn] "+m" (rnv), | |
| 558 | 542 | [rd0] "=m" (regs->uregs[rd]), |
| 559 | 543 | [rd1] "=m" (regs->uregs[rd+1]) |
| 560 | − : [rm] "m" (regs->uregs[rm]), | |
| 544 | + : [rm] "m" (rmv), | |
| 561 | 545 | [cpsr] "r" (regs->ARM_cpsr), |
| 562 | 546 | [i_fn] "r" (i_fn) |
| 563 | 547 | : "r0", "r1", "r2", "r3", "lr", "cc" |
| 564 | 548 | ); |
| 549 | + if (is_writeback(insn)) | |
| 550 | + regs->uregs[rn] = rnv; | |
| 565 | 551 | } |
| 566 | 552 | |
| 567 | 553 | static void __kprobes emulate_strd(struct kprobe *p, struct pt_regs *regs) |
| 568 | 554 | { |
| 569 | 555 | insn_4arg_fn_t *i_fn = (insn_4arg_fn_t *)&p->ainsn.insn[0]; |
| 570 | 556 | kprobe_opcode_t insn = p->opcode; |
| 557 | + long ppc = (long)p->addr + 8; | |
| 571 | 558 | int rd = (insn >> 12) & 0xf; |
| 572 | 559 | int rn = (insn >> 16) & 0xf; |
| 573 | 560 | int rm = insn & 0xf; |
| 574 | − long rnv = regs->uregs[rn]; | |
| 575 | − long rmv = regs->uregs[rm]; /* rm/rmv may be invalid, don't care. */ | |
| 561 | + long rnv = (rn == 15) ? ppc : regs->uregs[rn]; | |
| 562 | + /* rm/rmv may be invalid, don't care. */ | |
| 563 | + long rmv = (rm == 15) ? ppc : regs->uregs[rm]; | |
| 564 | + long rnv_wb; | |
| 576 | 565 | |
| 577 | − regs->uregs[rn] = insnslot_4arg_rflags(rnv, rmv, regs->uregs[rd], | |
| 566 | + rnv_wb = insnslot_4arg_rflags(rnv, rmv, regs->uregs[rd], | |
| 578 | 567 | regs->uregs[rd+1], |
| 579 | 568 | regs->ARM_cpsr, i_fn); |
| 569 | + if (is_writeback(insn)) | |
| 570 | + regs->uregs[rn] = rnv_wb; | |
| 580 | 571 | } |
| 581 | 572 | |
| 582 | 573 | static void __kprobes emulate_ldr(struct kprobe *p, struct pt_regs *regs) |
| @@ -594,7 +585,8 @@ static void __kprobes emulate_ldr(struct kprobe *p, struct pt_regs *regs) · 11 unmodified lines | ||
| 594 | 585 | long cpsr = regs->ARM_cpsr; |
| 595 | 586 | |
| 596 | 587 | fnr.dr = insnslot_llret_3arg_rflags(rnv, 0, rmv, cpsr, i_fn); |
| 597 | − regs->uregs[rn] = fnr.r0; /* Save Rn in case of writeback. */ | |
| 588 | + if (rn != 15) | |
| 589 | + regs->uregs[rn] = fnr.r0; /* Save Rn in case of writeback. */ | |
| 598 | 590 | rdv = fnr.r1; |
| 599 | 591 | |
| 600 | 592 | if (rd == 15) { |
| @@ -622,35 +614,11 @@ static void __kprobes emulate_str(struct kprobe *p, struct pt_regs *regs) · 21 unmodified lines | ||
| 622 | 614 | long rdv = (rd == 15) ? iaddr + str_pc_offset : regs->uregs[rd]; |
| 623 | 615 | long rnv = (rn == 15) ? iaddr + 8 : regs->uregs[rn]; |
| 624 | 616 | long rmv = regs->uregs[rm]; /* rm/rmv may be invalid, don't care. */ |
| 617 | + long rnv_wb; | |
| 625 | 618 | |
| 626 | − /* Save Rn in case of writeback. */ | |
| 627 | − regs->uregs[rn] = | |
| 628 | − insnslot_3arg_rflags(rnv, rdv, rmv, regs->ARM_cpsr, i_fn); | |
| 629 | −} | |
| 630 | − | |
| 631 | −static void __kprobes emulate_mrrc(struct kprobe *p, struct pt_regs *regs) | |
| 632 | −{ | |
| 633 | − insn_llret_0arg_fn_t *i_fn = (insn_llret_0arg_fn_t *)&p->ainsn.insn[0]; | |
| 634 | − kprobe_opcode_t insn = p->opcode; | |
| 635 | − union reg_pair fnr; | |
| 636 | − int rd = (insn >> 12) & 0xf; | |
| 637 | − int rn = (insn >> 16) & 0xf; | |
| 638 | − | |
| 639 | − fnr.dr = insnslot_llret_0arg_rflags(regs->ARM_cpsr, i_fn); | |
| 640 | − regs->uregs[rn] = fnr.r0; | |
| 641 | − regs->uregs[rd] = fnr.r1; | |
| 642 | −} | |
| 643 | − | |
| 644 | −static void __kprobes emulate_mcrr(struct kprobe *p, struct pt_regs *regs) | |
| 645 | −{ | |
| 646 | − insn_2arg_fn_t *i_fn = (insn_2arg_fn_t *)&p->ainsn.insn[0]; | |
| 647 | − kprobe_opcode_t insn = p->opcode; | |
| 648 | − int rd = (insn >> 12) & 0xf; | |
| 649 | − int rn = (insn >> 16) & 0xf; | |
| 650 | − long rnv = regs->uregs[rn]; | |
| 651 | − long rdv = regs->uregs[rd]; | |
| 652 | − | |
| 653 | − insnslot_2arg_rflags(rnv, rdv, regs->ARM_cpsr, i_fn); | |
| 619 | + rnv_wb = insnslot_3arg_rflags(rnv, rdv, rmv, regs->ARM_cpsr, i_fn); | |
| 620 | + if (rn != 15) | |
| 621 | + regs->uregs[rn] = rnv_wb; /* Save Rn in case of writeback. */ | |
| 654 | 622 | } |
| 655 | 623 | |
| 656 | 624 | static void __kprobes emulate_sat(struct kprobe *p, struct pt_regs *regs) |
| @@ -686,32 +654,32 @@ static void __kprobes emulate_none(struct kprobe *p, struct pt_regs *regs) · 29 unmodified lines | ||
| 686 | 654 | insnslot_0arg_rflags(regs->ARM_cpsr, i_fn); |
| 687 | 655 | } |
| 688 | 656 | |
| 689 | −static void __kprobes emulate_rd12(struct kprobe *p, struct pt_regs *regs) | |
| 657 | +static void __kprobes emulate_nop(struct kprobe *p, struct pt_regs *regs) | |
| 690 | 658 | { |
| 691 | − insn_0arg_fn_t *i_fn = (insn_0arg_fn_t *)&p->ainsn.insn[0]; | |
| 692 | − kprobe_opcode_t insn = p->opcode; | |
| 693 | − int rd = (insn >> 12) & 0xf; | |
| 694 | − | |
| 695 | − regs->uregs[rd] = insnslot_0arg_rflags(regs->ARM_cpsr, i_fn); | |
| 696 | 659 | } |
| 697 | 660 | |
| 698 | −static void __kprobes emulate_ird12(struct kprobe *p, struct pt_regs *regs) | |
| 661 | +static void __kprobes | |
| 662 | +emulate_rd12_modify(struct kprobe *p, struct pt_regs *regs) | |
| 699 | 663 | { |
| 700 | 664 | insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; |
| 701 | 665 | kprobe_opcode_t insn = p->opcode; |
| 702 | − int ird = (insn >> 12) & 0xf; | |
| 666 | + int rd = (insn >> 12) & 0xf; | |
| 667 | + long rdv = regs->uregs[rd]; | |
| 703 | 668 | |
| 704 | − insnslot_1arg_rflags(regs->uregs[ird], regs->ARM_cpsr, i_fn); | |
| 669 | + regs->uregs[rd] = insnslot_1arg_rflags(rdv, regs->ARM_cpsr, i_fn); | |
| 705 | 670 | } |
| 706 | 671 | |
| 707 | −static void __kprobes emulate_rn16(struct kprobe *p, struct pt_regs *regs) | |
| 672 | +static void __kprobes | |
| 673 | +emulate_rd12rn0_modify(struct kprobe *p, struct pt_regs *regs) | |
| 708 | 674 | { |
| 709 | − insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; | |
| 675 | + insn_2arg_fn_t *i_fn = (insn_2arg_fn_t *)&p->ainsn.insn[0]; | |
| 710 | 676 | kprobe_opcode_t insn = p->opcode; |
| 711 | − int rn = (insn >> 16) & 0xf; | |
| 677 | + int rd = (insn >> 12) & 0xf; | |
| 678 | + int rn = insn & 0xf; | |
| 679 | + long rdv = regs->uregs[rd]; | |
| 712 | 680 | long rnv = regs->uregs[rn]; |
| 713 | 681 | |
| 714 | − insnslot_1arg_rflags(rnv, regs->ARM_cpsr, i_fn); | |
| 682 | + regs->uregs[rd] = insnslot_2arg_rflags(rdv, rnv, regs->ARM_cpsr, i_fn); | |
| 715 | 683 | } |
| 716 | 684 | |
| 717 | 685 | static void __kprobes emulate_rd12rm0(struct kprobe *p, struct pt_regs *regs) |
| @@ -816,6 +784,17 @@ emulate_alu_imm_rwflags(struct kprobe *p, struct pt_regs *regs) · 98 unmodified lines | ||
| 816 | 784 | regs->uregs[rd] = insnslot_1arg_rwflags(rnv, ®s->ARM_cpsr, i_fn); |
| 817 | 785 | } |
| 818 | 786 | |
| 787 | +static void __kprobes | |
| 788 | +emulate_alu_tests_imm(struct kprobe *p, struct pt_regs *regs) | |
| 789 | +{ | |
| 790 | + insn_1arg_fn_t *i_fn = (insn_1arg_fn_t *)&p->ainsn.insn[0]; | |
| 791 | + kprobe_opcode_t insn = p->opcode; | |
| 792 | + int rn = (insn >> 16) & 0xf; | |
| 793 | + long rnv = (rn == 15) ? (long)p->addr + 8 : regs->uregs[rn]; | |
| 794 | + | |
| 795 | + insnslot_1arg_rwflags(rnv, ®s->ARM_cpsr, i_fn); | |
| 796 | +} | |
| 797 | + | |
| 819 | 798 | static void __kprobes |
| 820 | 799 | emulate_alu_rflags(struct kprobe *p, struct pt_regs *regs) |
| 821 | 800 | { |
| @@ -852,14 +831,34 @@ emulate_alu_rwflags(struct kprobe *p, struct pt_regs *regs) · 30 unmodified lines | ||
| 852 | 831 | insnslot_3arg_rwflags(rnv, rmv, rsv, ®s->ARM_cpsr, i_fn); |
| 853 | 832 | } |
| 854 | 833 | |
| 834 | +static void __kprobes | |
| 835 | +emulate_alu_tests(struct kprobe *p, struct pt_regs *regs) | |
| 836 | +{ | |
| 837 | + insn_3arg_fn_t *i_fn = (insn_3arg_fn_t *)&p->ainsn.insn[0]; | |
| 838 | + kprobe_opcode_t insn = p->opcode; | |
| 839 | + long ppc = (long)p->addr + 8; | |
| 840 | + int rn = (insn >> 16) & 0xf; | |
| 841 | + int rs = (insn >> 8) & 0xf; /* rs/rsv may be invalid, don't care. */ | |
| 842 | + int rm = insn & 0xf; | |
| 843 | + long rnv = (rn == 15) ? ppc : regs->uregs[rn]; | |
| 844 | + long rmv = (rm == 15) ? ppc : regs->uregs[rm]; | |
| 845 | + long rsv = regs->uregs[rs]; | |
| 846 | + | |
| 847 | + insnslot_3arg_rwflags(rnv, rmv, rsv, ®s->ARM_cpsr, i_fn); | |
| 848 | +} | |
| 849 | + | |
| 855 | 850 | static enum kprobe_insn __kprobes |
| 856 | 851 | prep_emulate_ldr_str(kprobe_opcode_t insn, struct arch_specific_insn *asi) |
| 857 | 852 | { |
| 858 | − int ibit = (insn & (1 << 26)) ? 25 : 22; | |
| 853 | + int not_imm = (insn & (1 << 26)) ? (insn & (1 << 25)) | |
| 854 | + : (~insn & (1 << 22)); | |
| 855 | + | |
| 856 | + if (is_writeback(insn) && is_r15(insn, 16)) | |
| 857 | + return INSN_REJECTED; /* Writeback to PC */ | |
| 859 | 858 | |
| 860 | 859 | insn &= 0xfff00fff; |
| 861 | 860 | insn |= 0x00001000; /* Rn = r0, Rd = r1 */ |
| 862 | − if (insn & (1 << ibit)) { | |
| 861 | + if (not_imm) { | |
| 863 | 862 | insn &= ~0xf; |
| 864 | 863 | insn |= 2; /* Rm = r2 */ |
| 865 | 864 | } |
| @@ -869,20 +868,40 @@ prep_emulate_ldr_str(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 3 unmodified lines | ||
| 869 | 868 | } |
| 870 | 869 | |
| 871 | 870 | static enum kprobe_insn __kprobes |
| 872 | −prep_emulate_rd12rm0(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 871 | +prep_emulate_rd12_modify(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 873 | 872 | { |
| 874 | − insn &= 0xffff0ff0; /* Rd = r0, Rm = r0 */ | |
| 873 | + if (is_r15(insn, 12)) | |
| 874 | + return INSN_REJECTED; /* Rd is PC */ | |
| 875 | + | |
| 876 | + insn &= 0xffff0fff; /* Rd = r0 */ | |
| 875 | 877 | asi->insn[0] = insn; |
| 876 | − asi->insn_handler = emulate_rd12rm0; | |
| 878 | + asi->insn_handler = emulate_rd12_modify; | |
| 877 | 879 | return INSN_GOOD; |
| 878 | 880 | } |
| 879 | 881 | |
| 880 | 882 | static enum kprobe_insn __kprobes |
| 881 | −prep_emulate_rd12(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 883 | +prep_emulate_rd12rn0_modify(kprobe_opcode_t insn, | |
| 884 | + struct arch_specific_insn *asi) | |
| 882 | 885 | { |
| 883 | − insn &= 0xffff0fff; /* Rd = r0 */ | |
| 886 | + if (is_r15(insn, 12)) | |
| 887 | + return INSN_REJECTED; /* Rd is PC */ | |
| 888 | + | |
| 889 | + insn &= 0xffff0ff0; /* Rd = r0 */ | |
| 890 | + insn |= 0x00000001; /* Rn = r1 */ | |
| 891 | + asi->insn[0] = insn; | |
| 892 | + asi->insn_handler = emulate_rd12rn0_modify; | |
| 893 | + return INSN_GOOD; | |
| 894 | +} | |
| 895 | + | |
| 896 | +static enum kprobe_insn __kprobes | |
| 897 | +prep_emulate_rd12rm0(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 898 | +{ | |
| 899 | + if (is_r15(insn, 12)) | |
| 900 | + return INSN_REJECTED; /* Rd is PC */ | |
| 901 | + | |
| 902 | + insn &= 0xffff0ff0; /* Rd = r0, Rm = r0 */ | |
| 884 | 903 | asi->insn[0] = insn; |
| 885 | − asi->insn_handler = emulate_rd12; | |
| 904 | + asi->insn_handler = emulate_rd12rm0; | |
| 886 | 905 | return INSN_GOOD; |
| 887 | 906 | } |
| 888 | 907 | |
| @@ -890,6 +909,9 @@ static enum kprobe_insn __kprobes · 1 unmodified line | ||
| 890 | 909 | prep_emulate_rd12rn16rm0_wflags(kprobe_opcode_t insn, |
| 891 | 910 | struct arch_specific_insn *asi) |
| 892 | 911 | { |
| 912 | + if (is_r15(insn, 12)) | |
| 913 | + return INSN_REJECTED; /* Rd is PC */ | |
| 914 | + | |
| 893 | 915 | insn &= 0xfff00ff0; /* Rd = r0, Rn = r0 */ |
| 894 | 916 | insn |= 0x00000001; /* Rm = r1 */ |
| 895 | 917 | asi->insn[0] = insn; |
| @@ -901,6 +923,9 @@ static enum kprobe_insn __kprobes · 5 unmodified lines | ||
| 901 | 923 | prep_emulate_rd16rs8rm0_wflags(kprobe_opcode_t insn, |
| 902 | 924 | struct arch_specific_insn *asi) |
| 903 | 925 | { |
| 926 | + if (is_r15(insn, 16)) | |
| 927 | + return INSN_REJECTED; /* Rd is PC */ | |
| 928 | + | |
| 904 | 929 | insn &= 0xfff0f0f0; /* Rd = r0, Rs = r0 */ |
| 905 | 930 | insn |= 0x00000001; /* Rm = r1 */ |
| 906 | 931 | asi->insn[0] = insn; |
| @@ -912,6 +937,9 @@ static enum kprobe_insn __kprobes · 5 unmodified lines | ||
| 912 | 937 | prep_emulate_rd16rn12rs8rm0_wflags(kprobe_opcode_t insn, |
| 913 | 938 | struct arch_specific_insn *asi) |
| 914 | 939 | { |
| 940 | + if (is_r15(insn, 16)) | |
| 941 | + return INSN_REJECTED; /* Rd is PC */ | |
| 942 | + | |
| 915 | 943 | insn &= 0xfff000f0; /* Rd = r0, Rn = r0 */ |
| 916 | 944 | insn |= 0x00000102; /* Rs = r1, Rm = r2 */ |
| 917 | 945 | asi->insn[0] = insn; |
| @@ -923,6 +951,9 @@ static enum kprobe_insn __kprobes · 5 unmodified lines | ||
| 923 | 951 | prep_emulate_rdhi16rdlo12rs8rm0_wflags(kprobe_opcode_t insn, |
| 924 | 952 | struct arch_specific_insn *asi) |
| 925 | 953 | { |
| 954 | + if (is_r15(insn, 16) || is_r15(insn, 12)) | |
| 955 | + return INSN_REJECTED; /* RdHi or RdLo is PC */ | |
| 956 | + | |
| 926 | 957 | insn &= 0xfff000f0; /* RdHi = r0, RdLo = r1 */ |
| 927 | 958 | insn |= 0x00001203; /* Rs = r2, Rm = r3 */ |
| 928 | 959 | asi->insn[0] = insn; |
| @@ -943,20 +974,13 @@ prep_emulate_rdhi16rdlo12rs8rm0_wflags(kprobe_opcode_t insn, · 14 unmodified lines | ||
| 943 | 974 | static enum kprobe_insn __kprobes |
| 944 | 975 | space_1111(kprobe_opcode_t insn, struct arch_specific_insn *asi) |
| 945 | 976 | { |
| 946 | − /* CPS mmod == 1 : 1111 0001 0000 xx10 xxxx xxxx xx0x xxxx */ | |
| 947 | − /* RFE : 1111 100x x0x1 xxxx xxxx 1010 xxxx xxxx */ | |
| 948 | − /* SRS : 1111 100x x1x0 1101 xxxx 0101 xxxx xxxx */ | |
| 949 | − if ((insn & 0xfff30020) == 0xf1020000 || | |
| 950 | − (insn & 0xfe500f00) == 0xf8100a00 || | |
| 951 | − (insn & 0xfe5f0f00) == 0xf84d0500) | |
| 952 | − return INSN_REJECTED; | |
| 953 | − | |
| 954 | − /* PLD : 1111 01x1 x101 xxxx xxxx xxxx xxxx xxxx : */ | |
| 955 | − if ((insn & 0xfd700000) == 0xf4500000) { | |
| 956 | − insn &= 0xfff0ffff; /* Rn = r0 */ | |
| 957 | − asi->insn[0] = insn; | |
| 958 | − asi->insn_handler = emulate_rn16; | |
| 959 | − return INSN_GOOD; | |
| 977 | + /* memory hint : 1111 0100 x001 xxxx xxxx xxxx xxxx xxxx : */ | |
| 978 | + /* PLDI : 1111 0100 x101 xxxx xxxx xxxx xxxx xxxx : */ | |
| 979 | + /* PLDW : 1111 0101 x001 xxxx xxxx xxxx xxxx xxxx : */ | |
| 980 | + /* PLD : 1111 0101 x101 xxxx xxxx xxxx xxxx xxxx : */ | |
| 981 | + if ((insn & 0xfe300000) == 0xf4100000) { | |
| 982 | + asi->insn_handler = emulate_nop; | |
| 983 | + return INSN_GOOD_NO_SLOT; | |
| 960 | 984 | } |
| 961 | 985 | |
| 962 | 986 | /* BLX(1) : 1111 101x xxxx xxxx xxxx xxxx xxxx xxxx : */ |
| @@ -965,41 +989,22 @@ space_1111(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 2 unmodified lines | ||
| 965 | 989 | return INSN_GOOD_NO_SLOT; |
| 966 | 990 | } |
| 967 | 991 | |
| 968 | − /* SETEND : 1111 0001 0000 0001 xxxx xxxx 0000 xxxx */ | |
| 969 | − /* CDP2 : 1111 1110 xxxx xxxx xxxx xxxx xxx0 xxxx */ | |
| 970 | − if ((insn & 0xffff00f0) == 0xf1010000 || | |
| 971 | − (insn & 0xff000010) == 0xfe000000) { | |
| 972 | − asi->insn[0] = insn; | |
| 973 | − asi->insn_handler = emulate_none; | |
| 974 | − return INSN_GOOD; | |
| 975 | − } | |
| 992 | + /* CPS : 1111 0001 0000 xxx0 xxxx xxxx xx0x xxxx */ | |
| 993 | + /* SETEND: 1111 0001 0000 0001 xxxx xxxx 0000 xxxx */ | |
| 994 | + | |
| 995 | + /* SRS : 1111 100x x1x0 xxxx xxxx xxxx xxxx xxxx */ | |
| 996 | + /* RFE : 1111 100x x0x1 xxxx xxxx xxxx xxxx xxxx */ | |
| 976 | 997 | |
| 998 | + /* Coprocessor instructions... */ | |
| 977 | 999 | /* MCRR2 : 1111 1100 0100 xxxx xxxx xxxx xxxx xxxx : (Rd != Rn) */ |
| 978 | 1000 | /* MRRC2 : 1111 1100 0101 xxxx xxxx xxxx xxxx xxxx : (Rd != Rn) */ |
| 979 | − if ((insn & 0xffe00000) == 0xfc400000) { | |
| 980 | − insn &= 0xfff00fff; /* Rn = r0 */ | |
| 981 | − insn |= 0x00001000; /* Rd = r1 */ | |
| 982 | − asi->insn[0] = insn; | |
| 983 | − asi->insn_handler = | |
| 984 | − (insn & (1 << 20)) ? emulate_mrrc : emulate_mcrr; | |
| 985 | − return INSN_GOOD; | |
| 986 | − } | |
| 1001 | + /* LDC2 : 1111 110x xxx1 xxxx xxxx xxxx xxxx xxxx */ | |
| 1002 | + /* STC2 : 1111 110x xxx0 xxxx xxxx xxxx xxxx xxxx */ | |
| 1003 | + /* CDP2 : 1111 1110 xxxx xxxx xxxx xxxx xxx0 xxxx */ | |
| 1004 | + /* MCR2 : 1111 1110 xxx0 xxxx xxxx xxxx xxx1 xxxx */ | |
| 1005 | + /* MRC2 : 1111 1110 xxx1 xxxx xxxx xxxx xxx1 xxxx */ | |
| 987 | 1006 | |
| 988 | − /* LDC2 : 1111 110x xxx1 xxxx xxxx xxxx xxxx xxxx */ | |
| 989 | − /* STC2 : 1111 110x xxx0 xxxx xxxx xxxx xxxx xxxx */ | |
| 990 | − if ((insn & 0xfe000000) == 0xfc000000) { | |
| 991 | − insn &= 0xfff0ffff; /* Rn = r0 */ | |
| 992 | − asi->insn[0] = insn; | |
| 993 | − asi->insn_handler = emulate_ldcstc; | |
| 994 | − return INSN_GOOD; | |
| 995 | − } | |
| 996 | − | |
| 997 | − /* MCR2 : 1111 1110 xxx0 xxxx xxxx xxxx xxx1 xxxx */ | |
| 998 | − /* MRC2 : 1111 1110 xxx1 xxxx xxxx xxxx xxx1 xxxx */ | |
| 999 | − insn &= 0xffff0fff; /* Rd = r0 */ | |
| 1000 | − asi->insn[0] = insn; | |
| 1001 | − asi->insn_handler = (insn & (1 << 20)) ? emulate_rd12 : emulate_ird12; | |
| 1002 | − return INSN_GOOD; | |
| 1007 | + return INSN_REJECTED; | |
| 1003 | 1008 | } |
| 1004 | 1009 | |
| 1005 | 1010 | static enum kprobe_insn __kprobes |
| @@ -1008,19 +1013,18 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 2 unmodified lines | ||
| 1008 | 1013 | /* cccc 0001 0xx0 xxxx xxxx xxxx xxxx xxx0 xxxx */ |
| 1009 | 1014 | if ((insn & 0x0f900010) == 0x01000000) { |
| 1010 | 1015 | |
| 1011 | − /* BXJ : cccc 0001 0010 xxxx xxxx xxxx 0010 xxxx */ | |
| 1012 | − /* MSR : cccc 0001 0x10 xxxx xxxx xxxx 0000 xxxx */ | |
| 1013 | − if ((insn & 0x0ff000f0) == 0x01200020 || | |
| 1014 | − (insn & 0x0fb000f0) == 0x01200000) | |
| 1015 | − return INSN_REJECTED; | |
| 1016 | − | |
| 1017 | − /* MRS : cccc 0001 0x00 xxxx xxxx xxxx 0000 xxxx */ | |
| 1018 | − if ((insn & 0x0fb00010) == 0x01000000) | |
| 1019 | − return prep_emulate_rd12(insn, asi); | |
| 1016 | + /* MRS cpsr : cccc 0001 0000 xxxx xxxx xxxx 0000 xxxx */ | |
| 1017 | + if ((insn & 0x0ff000f0) == 0x01000000) { | |
| 1018 | + if (is_r15(insn, 12)) | |
| 1019 | + return INSN_REJECTED; /* Rd is PC */ | |
| 1020 | + asi->insn_handler = simulate_mrs; | |
| 1021 | + return INSN_GOOD_NO_SLOT; | |
| 1022 | + } | |
| 1020 | 1023 | |
| 1021 | 1024 | /* SMLALxy : cccc 0001 0100 xxxx xxxx xxxx 1xx0 xxxx */ |
| 1022 | 1025 | if ((insn & 0x0ff00090) == 0x01400080) |
| 1023 | − return prep_emulate_rdhi16rdlo12rs8rm0_wflags(insn, asi); | |
| 1026 | + return prep_emulate_rdhi16rdlo12rs8rm0_wflags(insn, | |
| 1027 | + asi); | |
| 1024 | 1028 | |
| 1025 | 1029 | /* SMULWy : cccc 0001 0010 xxxx xxxx xxxx 1x10 xxxx */ |
| 1026 | 1030 | /* SMULxy : cccc 0001 0110 xxxx xxxx xxxx 1xx0 xxxx */ |
| @@ -1029,24 +1033,29 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 2 unmodified lines | ||
| 1029 | 1033 | return prep_emulate_rd16rs8rm0_wflags(insn, asi); |
| 1030 | 1034 | |
| 1031 | 1035 | /* SMLAxy : cccc 0001 0000 xxxx xxxx xxxx 1xx0 xxxx : Q */ |
| 1032 | − /* SMLAWy : cccc 0001 0010 xxxx xxxx xxxx 0x00 xxxx : Q */ | |
| 1033 | − return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); | |
| 1036 | + /* SMLAWy : cccc 0001 0010 xxxx xxxx xxxx 1x00 xxxx : Q */ | |
| 1037 | + if ((insn & 0x0ff00090) == 0x01000080 || | |
| 1038 | + (insn & 0x0ff000b0) == 0x01200080) | |
| 1039 | + return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); | |
| 1034 | 1040 | |
| 1041 | + /* BXJ : cccc 0001 0010 xxxx xxxx xxxx 0010 xxxx */ | |
| 1042 | + /* MSR : cccc 0001 0x10 xxxx xxxx xxxx 0000 xxxx */ | |
| 1043 | + /* MRS spsr : cccc 0001 0100 xxxx xxxx xxxx 0000 xxxx */ | |
| 1044 | + | |
| 1045 | + /* Other instruction encodings aren't yet defined */ | |
| 1046 | + return INSN_REJECTED; | |
| 1035 | 1047 | } |
| 1036 | 1048 | |
| 1037 | 1049 | /* cccc 0001 0xx0 xxxx xxxx xxxx xxxx 0xx1 xxxx */ |
| 1038 | 1050 | else if ((insn & 0x0f900090) == 0x01000010) { |
| 1039 | 1051 | |
| 1040 | − /* BKPT : 1110 0001 0010 xxxx xxxx xxxx 0111 xxxx */ | |
| 1041 | − if ((insn & 0xfff000f0) == 0xe1200070) | |
| 1042 | − return INSN_REJECTED; | |
| 1043 | − | |
| 1044 | 1052 | /* BLX(2) : cccc 0001 0010 xxxx xxxx xxxx 0011 xxxx */ |
| 1045 | 1053 | /* BX : cccc 0001 0010 xxxx xxxx xxxx 0001 xxxx */ |
| 1046 | 1054 | if ((insn & 0x0ff000d0) == 0x01200010) { |
| 1047 | − asi->insn[0] = truecc_insn(insn); | |
| 1055 | + if ((insn & 0x0ff000ff) == 0x0120003f) | |
| 1056 | + return INSN_REJECTED; /* BLX pc */ | |
| 1048 | 1057 | asi->insn_handler = simulate_blx2bx; |
| 1049 | − return INSN_GOOD; | |
| 1058 | + return INSN_GOOD_NO_SLOT; | |
| 1050 | 1059 | } |
| 1051 | 1060 | |
| 1052 | 1061 | /* CLZ : cccc 0001 0110 xxxx xxxx xxxx 0001 xxxx */ |
| @@ -1057,17 +1066,27 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 4 unmodified lines | ||
| 1057 | 1066 | /* QSUB : cccc 0001 0010 xxxx xxxx xxxx 0101 xxxx :Q */ |
| 1058 | 1067 | /* QDADD : cccc 0001 0100 xxxx xxxx xxxx 0101 xxxx :Q */ |
| 1059 | 1068 | /* QDSUB : cccc 0001 0110 xxxx xxxx xxxx 0101 xxxx :Q */ |
| 1060 | − return prep_emulate_rd12rn16rm0_wflags(insn, asi); | |
| 1069 | + if ((insn & 0x0f9000f0) == 0x01000050) | |
| 1070 | + return prep_emulate_rd12rn16rm0_wflags(insn, asi); | |
| 1071 | + | |
| 1072 | + /* BKPT : 1110 0001 0010 xxxx xxxx xxxx 0111 xxxx */ | |
| 1073 | + /* SMC : cccc 0001 0110 xxxx xxxx xxxx 0111 xxxx */ | |
| 1074 | + | |
| 1075 | + /* Other instruction encodings aren't yet defined */ | |
| 1076 | + return INSN_REJECTED; | |
| 1061 | 1077 | } |
| 1062 | 1078 | |
| 1063 | 1079 | /* cccc 0000 xxxx xxxx xxxx xxxx xxxx 1001 xxxx */ |
| 1064 | − else if ((insn & 0x0f000090) == 0x00000090) { | |
| 1080 | + else if ((insn & 0x0f0000f0) == 0x00000090) { | |
| 1065 | 1081 | |
| 1066 | 1082 | /* MUL : cccc 0000 0000 xxxx xxxx xxxx 1001 xxxx : */ |
| 1067 | 1083 | /* MULS : cccc 0000 0001 xxxx xxxx xxxx 1001 xxxx :cc */ |
| 1068 | 1084 | /* MLA : cccc 0000 0010 xxxx xxxx xxxx 1001 xxxx : */ |
| 1069 | 1085 | /* MLAS : cccc 0000 0011 xxxx xxxx xxxx 1001 xxxx :cc */ |
| 1070 | 1086 | /* UMAAL : cccc 0000 0100 xxxx xxxx xxxx 1001 xxxx : */ |
| 1087 | + /* undef : cccc 0000 0101 xxxx xxxx xxxx 1001 xxxx : */ | |
| 1088 | + /* MLS : cccc 0000 0110 xxxx xxxx xxxx 1001 xxxx : */ | |
| 1089 | + /* undef : cccc 0000 0111 xxxx xxxx xxxx 1001 xxxx : */ | |
| 1071 | 1090 | /* UMULL : cccc 0000 1000 xxxx xxxx xxxx 1001 xxxx : */ |
| 1072 | 1091 | /* UMULLS : cccc 0000 1001 xxxx xxxx xxxx 1001 xxxx :cc */ |
| 1073 | 1092 | /* UMLAL : cccc 0000 1010 xxxx xxxx xxxx 1001 xxxx : */ |
| @@ -1076,13 +1095,15 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 2 unmodified lines | ||
| 1076 | 1095 | /* SMULLS : cccc 0000 1101 xxxx xxxx xxxx 1001 xxxx :cc */ |
| 1077 | 1096 | /* SMLAL : cccc 0000 1110 xxxx xxxx xxxx 1001 xxxx : */ |
| 1078 | 1097 | /* SMLALS : cccc 0000 1111 xxxx xxxx xxxx 1001 xxxx :cc */ |
| 1079 | − if ((insn & 0x0fe000f0) == 0x00000090) { | |
| 1080 | − return prep_emulate_rd16rs8rm0_wflags(insn, asi); | |
| 1081 | − } else if ((insn & 0x0fe000f0) == 0x00200090) { | |
| 1082 | − return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); | |
| 1083 | − } else { | |
| 1084 | − return prep_emulate_rdhi16rdlo12rs8rm0_wflags(insn, asi); | |
| 1085 | − } | |
| 1098 | + if ((insn & 0x00d00000) == 0x00500000) | |
| 1099 | + return INSN_REJECTED; | |
| 1100 | + else if ((insn & 0x00e00000) == 0x00000000) | |
| 1101 | + return prep_emulate_rd16rs8rm0_wflags(insn, asi); | |
| 1102 | + else if ((insn & 0x00a00000) == 0x00200000) | |
| 1103 | + return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); | |
| 1104 | + else | |
| 1105 | + return prep_emulate_rdhi16rdlo12rs8rm0_wflags(insn, | |
| 1106 | + asi); | |
| 1086 | 1107 | } |
| 1087 | 1108 | |
| 1088 | 1109 | /* cccc 000x xxxx xxxx xxxx xxxx xxxx 1xx1 xxxx */ |
| @@ -1090,23 +1111,45 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 1 unmodified line | ||
| 1090 | 1111 | |
| 1091 | 1112 | /* SWP : cccc 0001 0000 xxxx xxxx xxxx 1001 xxxx */ |
| 1092 | 1113 | /* SWPB : cccc 0001 0100 xxxx xxxx xxxx 1001 xxxx */ |
| 1093 | − /* LDRD : cccc 000x xxx0 xxxx xxxx xxxx 1101 xxxx */ | |
| 1094 | − /* STRD : cccc 000x xxx0 xxxx xxxx xxxx 1111 xxxx */ | |
| 1114 | + /* ??? : cccc 0001 0x01 xxxx xxxx xxxx 1001 xxxx */ | |
| 1115 | + /* ??? : cccc 0001 0x10 xxxx xxxx xxxx 1001 xxxx */ | |
| 1116 | + /* ??? : cccc 0001 0x11 xxxx xxxx xxxx 1001 xxxx */ | |
| 1095 | 1117 | /* STREX : cccc 0001 1000 xxxx xxxx xxxx 1001 xxxx */ |
| 1096 | 1118 | /* LDREX : cccc 0001 1001 xxxx xxxx xxxx 1001 xxxx */ |
| 1119 | + /* STREXD: cccc 0001 1010 xxxx xxxx xxxx 1001 xxxx */ | |
| 1120 | + /* LDREXD: cccc 0001 1011 xxxx xxxx xxxx 1001 xxxx */ | |
| 1121 | + /* STREXB: cccc 0001 1100 xxxx xxxx xxxx 1001 xxxx */ | |
| 1122 | + /* LDREXB: cccc 0001 1101 xxxx xxxx xxxx 1001 xxxx */ | |
| 1123 | + /* STREXH: cccc 0001 1110 xxxx xxxx xxxx 1001 xxxx */ | |
| 1124 | + /* LDREXH: cccc 0001 1111 xxxx xxxx xxxx 1001 xxxx */ | |
| 1125 | + | |
| 1126 | + /* LDRD : cccc 000x xxx0 xxxx xxxx xxxx 1101 xxxx */ | |
| 1127 | + /* STRD : cccc 000x xxx0 xxxx xxxx xxxx 1111 xxxx */ | |
| 1097 | 1128 | /* LDRH : cccc 000x xxx1 xxxx xxxx xxxx 1011 xxxx */ |
| 1098 | 1129 | /* STRH : cccc 000x xxx0 xxxx xxxx xxxx 1011 xxxx */ |
| 1099 | 1130 | /* LDRSB : cccc 000x xxx1 xxxx xxxx xxxx 1101 xxxx */ |
| 1100 | 1131 | /* LDRSH : cccc 000x xxx1 xxxx xxxx xxxx 1111 xxxx */ |
| 1101 | − if ((insn & 0x0fb000f0) == 0x01000090) { | |
| 1102 | − /* SWP/SWPB */ | |
| 1103 | − return prep_emulate_rd12rn16rm0_wflags(insn, asi); | |
| 1132 | + if ((insn & 0x0f0000f0) == 0x01000090) { | |
| 1133 | + if ((insn & 0x0fb000f0) == 0x01000090) { | |
| 1134 | + /* SWP/SWPB */ | |
| 1135 | + return prep_emulate_rd12rn16rm0_wflags(insn, | |
| 1136 | + asi); | |
| 1137 | + } else { | |
| 1138 | + /* STREX/LDREX variants and unallocaed space */ | |
| 1139 | + return INSN_REJECTED; | |
| 1140 | + } | |
| 1141 | + | |
| 1104 | 1142 | } else if ((insn & 0x0e1000d0) == 0x00000d0) { |
| 1105 | 1143 | /* STRD/LDRD */ |
| 1144 | + if ((insn & 0x0000e000) == 0x0000e000) | |
| 1145 | + return INSN_REJECTED; /* Rd is LR or PC */ | |
| 1146 | + if (is_writeback(insn) && is_r15(insn, 16)) | |
| 1147 | + return INSN_REJECTED; /* Writeback to PC */ | |
| 1148 | + | |
| 1106 | 1149 | insn &= 0xfff00fff; |
| 1107 | 1150 | insn |= 0x00002000; /* Rn = r0, Rd = r2 */ |
| 1108 | − if (insn & (1 << 22)) { | |
| 1109 | − /* I bit */ | |
| 1151 | + if (!(insn & (1 << 22))) { | |
| 1152 | + /* Register index */ | |
| 1110 | 1153 | insn &= ~0xf; |
| 1111 | 1154 | insn |= 1; /* Rm = r1 */ |
| 1112 | 1155 | } |
| @@ -1116,6 +1159,9 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 3 unmodified lines | ||
| 1116 | 1159 | return INSN_GOOD; |
| 1117 | 1160 | } |
| 1118 | 1161 | |
| 1162 | + /* LDRH/STRH/LDRSB/LDRSH */ | |
| 1163 | + if (is_r15(insn, 12)) | |
| 1164 | + return INSN_REJECTED; /* Rd is PC */ | |
| 1119 | 1165 | return prep_emulate_ldr_str(insn, asi); |
| 1120 | 1166 | } |
| 1121 | 1167 | |
| @@ -1123,7 +1169,7 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 1 unmodified line | ||
| 1123 | 1169 | |
| 1124 | 1170 | /* |
| 1125 | 1171 | * ALU op with S bit and Rd == 15 : |
| 1126 | − * cccc 000x xxx1 xxxx 1111 xxxx xxxx xxxx | |
| 1172 | + * cccc 000x xxx1 xxxx 1111 xxxx xxxx xxxx | |
| 1127 | 1173 | */ |
| 1128 | 1174 | if ((insn & 0x0e10f000) == 0x0010f000) |
| 1129 | 1175 | return INSN_REJECTED; |
| @@ -1152,22 +1198,61 @@ space_cccc_000x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 22 unmodified lines | ||
| 1152 | 1198 | insn |= 0x00000200; /* Rs = r2 */ |
| 1153 | 1199 | } |
| 1154 | 1200 | asi->insn[0] = insn; |
| 1155 | − asi->insn_handler = (insn & (1 << 20)) ? /* S-bit */ | |
| 1201 | + | |
| 1202 | + if ((insn & 0x0f900000) == 0x01100000) { | |
| 1203 | + /* | |
| 1204 | + * TST : cccc 0001 0001 xxxx xxxx xxxx xxxx xxxx | |
| 1205 | + * TEQ : cccc 0001 0011 xxxx xxxx xxxx xxxx xxxx | |
| 1206 | + * CMP : cccc 0001 0101 xxxx xxxx xxxx xxxx xxxx | |
| 1207 | + * CMN : cccc 0001 0111 xxxx xxxx xxxx xxxx xxxx | |
| 1208 | + */ | |
| 1209 | + asi->insn_handler = emulate_alu_tests; | |
| 1210 | + } else { | |
| 1211 | + /* ALU ops which write to Rd */ | |
| 1212 | + asi->insn_handler = (insn & (1 << 20)) ? /* S-bit */ | |
| 1156 | 1213 | emulate_alu_rwflags : emulate_alu_rflags; |
| 1214 | + } | |
| 1157 | 1215 | return INSN_GOOD; |
| 1158 | 1216 | } |
| 1159 | 1217 | |
| 1160 | 1218 | static enum kprobe_insn __kprobes |
| 1161 | 1219 | space_cccc_001x(kprobe_opcode_t insn, struct arch_specific_insn *asi) |
| 1162 | 1220 | { |
| 1221 | + /* MOVW : cccc 0011 0000 xxxx xxxx xxxx xxxx xxxx */ | |
| 1222 | + /* MOVT : cccc 0011 0100 xxxx xxxx xxxx xxxx xxxx */ | |
| 1223 | + if ((insn & 0x0fb00000) == 0x03000000) | |
| 1224 | + return prep_emulate_rd12_modify(insn, asi); | |
| 1225 | + | |
| 1226 | + /* hints : cccc 0011 0010 0000 xxxx xxxx xxxx xxxx */ | |
| 1227 | + if ((insn & 0x0fff0000) == 0x03200000) { | |
| 1228 | + unsigned op2 = insn & 0x000000ff; | |
| 1229 | + if (op2 == 0x01 || op2 == 0x04) { | |
| 1230 | + /* YIELD : cccc 0011 0010 0000 xxxx xxxx 0000 0001 */ | |
| 1231 | + /* SEV : cccc 0011 0010 0000 xxxx xxxx 0000 0100 */ | |
| 1232 | + asi->insn[0] = insn; | |
| 1233 | + asi->insn_handler = emulate_none; | |
| 1234 | + return INSN_GOOD; | |
| 1235 | + } else if (op2 <= 0x03) { | |
| 1236 | + /* NOP : cccc 0011 0010 0000 xxxx xxxx 0000 0000 */ | |
| 1237 | + /* WFE : cccc 0011 0010 0000 xxxx xxxx 0000 0010 */ | |
| 1238 | + /* WFI : cccc 0011 0010 0000 xxxx xxxx 0000 0011 */ | |
| 1239 | + /* | |
| 1240 | + * We make WFE and WFI true NOPs to avoid stalls due | |
| 1241 | + * to missing events whilst processing the probe. | |
| 1242 | + */ | |
| 1243 | + asi->insn_handler = emulate_nop; | |
| 1244 | + return INSN_GOOD_NO_SLOT; | |
| 1245 | + } | |
| 1246 | + /* For DBG and unallocated hints it's safest to reject them */ | |
| 1247 | + return INSN_REJECTED; | |
| 1248 | + } | |
| 1249 | + | |
| 1163 | 1250 | /* |
| 1164 | 1251 | * MSR : cccc 0011 0x10 xxxx xxxx xxxx xxxx xxxx |
| 1165 | − * Undef : cccc 0011 0100 xxxx xxxx xxxx xxxx xxxx | |
| 1166 | 1252 | * ALU op with S bit and Rd == 15 : |
| 1167 | 1253 | * cccc 001x xxx1 xxxx 1111 xxxx xxxx xxxx |
| 1168 | 1254 | */ |
| 1169 | 1255 | if ((insn & 0x0fb00000) == 0x03200000 || /* MSR */ |
| 1170 | − (insn & 0x0ff00000) == 0x03400000 || /* Undef */ | |
| 1171 | 1256 | (insn & 0x0e10f000) == 0x0210f000) /* ALU s-bit, R15 */ |
| 1172 | 1257 | return INSN_REJECTED; |
| 1173 | 1258 | |
| @@ -1178,10 +1263,22 @@ space_cccc_001x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 4 unmodified lines | ||
| 1178 | 1263 | * *S (bit 20) updates condition codes |
| 1179 | 1264 | * ADC/SBC/RSC reads the C flag |
| 1180 | 1265 | */ |
| 1181 | − insn &= 0xffff0fff; /* Rd = r0 */ | |
| 1266 | + insn &= 0xfff00fff; /* Rn = r0 and Rd = r0 */ | |
| 1182 | 1267 | asi->insn[0] = insn; |
| 1183 | − asi->insn_handler = (insn & (1 << 20)) ? /* S-bit */ | |
| 1268 | + | |
| 1269 | + if ((insn & 0x0f900000) == 0x03100000) { | |
| 1270 | + /* | |
| 1271 | + * TST : cccc 0011 0001 xxxx xxxx xxxx xxxx xxxx | |
| 1272 | + * TEQ : cccc 0011 0011 xxxx xxxx xxxx xxxx xxxx | |
| 1273 | + * CMP : cccc 0011 0101 xxxx xxxx xxxx xxxx xxxx | |
| 1274 | + * CMN : cccc 0011 0111 xxxx xxxx xxxx xxxx xxxx | |
| 1275 | + */ | |
| 1276 | + asi->insn_handler = emulate_alu_tests_imm; | |
| 1277 | + } else { | |
| 1278 | + /* ALU ops which write to Rd */ | |
| 1279 | + asi->insn_handler = (insn & (1 << 20)) ? /* S-bit */ | |
| 1184 | 1280 | emulate_alu_imm_rwflags : emulate_alu_imm_rflags; |
| 1281 | + } | |
| 1185 | 1282 | return INSN_GOOD; |
| 1186 | 1283 | } |
| 1187 | 1284 | |
| @@ -1190,6 +1287,8 @@ space_cccc_0110__1(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 2 unmodified lines | ||
| 1190 | 1287 | { |
| 1191 | 1288 | /* SEL : cccc 0110 1000 xxxx xxxx xxxx 1011 xxxx GE: !!! */ |
| 1192 | 1289 | if ((insn & 0x0ff000f0) == 0x068000b0) { |
| 1290 | + if (is_r15(insn, 12)) | |
| 1291 | + return INSN_REJECTED; /* Rd is PC */ | |
| 1193 | 1292 | insn &= 0xfff00ff0; /* Rd = r0, Rn = r0 */ |
| 1194 | 1293 | insn |= 0x00000001; /* Rm = r1 */ |
| 1195 | 1294 | asi->insn[0] = insn; |
| @@ -1203,6 +1302,8 @@ space_cccc_0110__1(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 7 unmodified lines | ||
| 1203 | 1302 | /* USAT16 : cccc 0110 1110 xxxx xxxx xxxx 0011 xxxx :Q */ |
| 1204 | 1303 | if ((insn & 0x0fa00030) == 0x06a00010 || |
| 1205 | 1304 | (insn & 0x0fb000f0) == 0x06a00030) { |
| 1305 | + if (is_r15(insn, 12)) | |
| 1306 | + return INSN_REJECTED; /* Rd is PC */ | |
| 1206 | 1307 | insn &= 0xffff0ff0; /* Rd = r0, Rm = r0 */ |
| 1207 | 1308 | asi->insn[0] = insn; |
| 1208 | 1309 | asi->insn_handler = emulate_sat; |
| @@ -1211,57 +1312,101 @@ space_cccc_0110__1(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 2 unmodified lines | ||
| 1211 | 1312 | |
| 1212 | 1313 | /* REV : cccc 0110 1011 xxxx xxxx xxxx 0011 xxxx */ |
| 1213 | 1314 | /* REV16 : cccc 0110 1011 xxxx xxxx xxxx 1011 xxxx */ |
| 1315 | + /* RBIT : cccc 0110 1111 xxxx xxxx xxxx 0011 xxxx */ | |
| 1214 | 1316 | /* REVSH : cccc 0110 1111 xxxx xxxx xxxx 1011 xxxx */ |
| 1215 | 1317 | if ((insn & 0x0ff00070) == 0x06b00030 || |
| 1216 | − (insn & 0x0ff000f0) == 0x06f000b0) | |
| 1318 | + (insn & 0x0ff00070) == 0x06f00030) | |
| 1217 | 1319 | return prep_emulate_rd12rm0(insn, asi); |
| 1218 | 1320 | |
| 1321 | + /* ??? : cccc 0110 0000 xxxx xxxx xxxx xxx1 xxxx : */ | |
| 1219 | 1322 | /* SADD16 : cccc 0110 0001 xxxx xxxx xxxx 0001 xxxx :GE */ |
| 1220 | 1323 | /* SADDSUBX : cccc 0110 0001 xxxx xxxx xxxx 0011 xxxx :GE */ |
| 1221 | 1324 | /* SSUBADDX : cccc 0110 0001 xxxx xxxx xxxx 0101 xxxx :GE */ |
| 1222 | 1325 | /* SSUB16 : cccc 0110 0001 xxxx xxxx xxxx 0111 xxxx :GE */ |
| 1223 | 1326 | /* SADD8 : cccc 0110 0001 xxxx xxxx xxxx 1001 xxxx :GE */ |
| 1327 | + /* ??? : cccc 0110 0001 xxxx xxxx xxxx 1011 xxxx : */ | |
| 1328 | + /* ??? : cccc 0110 0001 xxxx xxxx xxxx 1101 xxxx : */ | |
| 1224 | 1329 | /* SSUB8 : cccc 0110 0001 xxxx xxxx xxxx 1111 xxxx :GE */ |
| 1225 | 1330 | /* QADD16 : cccc 0110 0010 xxxx xxxx xxxx 0001 xxxx : */ |
| 1226 | 1331 | /* QADDSUBX : cccc 0110 0010 xxxx xxxx xxxx 0011 xxxx : */ |
| 1227 | 1332 | /* QSUBADDX : cccc 0110 0010 xxxx xxxx xxxx 0101 xxxx : */ |
| 1228 | 1333 | /* QSUB16 : cccc 0110 0010 xxxx xxxx xxxx 0111 xxxx : */ |
| 1229 | 1334 | /* QADD8 : cccc 0110 0010 xxxx xxxx xxxx 1001 xxxx : */ |
| 1335 | + /* ??? : cccc 0110 0010 xxxx xxxx xxxx 1011 xxxx : */ | |
| 1336 | + /* ??? : cccc 0110 0010 xxxx xxxx xxxx 1101 xxxx : */ | |
| 1230 | 1337 | /* QSUB8 : cccc 0110 0010 xxxx xxxx xxxx 1111 xxxx : */ |
| 1231 | 1338 | /* SHADD16 : cccc 0110 0011 xxxx xxxx xxxx 0001 xxxx : */ |
| 1232 | 1339 | /* SHADDSUBX : cccc 0110 0011 xxxx xxxx xxxx 0011 xxxx : */ |
| 1233 | 1340 | /* SHSUBADDX : cccc 0110 0011 xxxx xxxx xxxx 0101 xxxx : */ |
| 1234 | 1341 | /* SHSUB16 : cccc 0110 0011 xxxx xxxx xxxx 0111 xxxx : */ |
| 1235 | 1342 | /* SHADD8 : cccc 0110 0011 xxxx xxxx xxxx 1001 xxxx : */ |
| 1343 | + /* ??? : cccc 0110 0011 xxxx xxxx xxxx 1011 xxxx : */ | |
| 1344 | + /* ??? : cccc 0110 0011 xxxx xxxx xxxx 1101 xxxx : */ | |
| 1236 | 1345 | /* SHSUB8 : cccc 0110 0011 xxxx xxxx xxxx 1111 xxxx : */ |
| 1346 | + /* ??? : cccc 0110 0100 xxxx xxxx xxxx xxx1 xxxx : */ | |
| 1237 | 1347 | /* UADD16 : cccc 0110 0101 xxxx xxxx xxxx 0001 xxxx :GE */ |
| 1238 | 1348 | /* UADDSUBX : cccc 0110 0101 xxxx xxxx xxxx 0011 xxxx :GE */ |
| 1239 | 1349 | /* USUBADDX : cccc 0110 0101 xxxx xxxx xxxx 0101 xxxx :GE */ |
| 1240 | 1350 | /* USUB16 : cccc 0110 0101 xxxx xxxx xxxx 0111 xxxx :GE */ |
| 1241 | 1351 | /* UADD8 : cccc 0110 0101 xxxx xxxx xxxx 1001 xxxx :GE */ |
| 1352 | + /* ??? : cccc 0110 0101 xxxx xxxx xxxx 1011 xxxx : */ | |
| 1353 | + /* ??? : cccc 0110 0101 xxxx xxxx xxxx 1101 xxxx : */ | |
| 1242 | 1354 | /* USUB8 : cccc 0110 0101 xxxx xxxx xxxx 1111 xxxx :GE */ |
| 1243 | 1355 | /* UQADD16 : cccc 0110 0110 xxxx xxxx xxxx 0001 xxxx : */ |
| 1244 | 1356 | /* UQADDSUBX : cccc 0110 0110 xxxx xxxx xxxx 0011 xxxx : */ |
| 1245 | 1357 | /* UQSUBADDX : cccc 0110 0110 xxxx xxxx xxxx 0101 xxxx : */ |
| 1246 | 1358 | /* UQSUB16 : cccc 0110 0110 xxxx xxxx xxxx 0111 xxxx : */ |
| 1247 | 1359 | /* UQADD8 : cccc 0110 0110 xxxx xxxx xxxx 1001 xxxx : */ |
| 1360 | + /* ??? : cccc 0110 0110 xxxx xxxx xxxx 1011 xxxx : */ | |
| 1361 | + /* ??? : cccc 0110 0110 xxxx xxxx xxxx 1101 xxxx : */ | |
| 1248 | 1362 | /* UQSUB8 : cccc 0110 0110 xxxx xxxx xxxx 1111 xxxx : */ |
| 1249 | 1363 | /* UHADD16 : cccc 0110 0111 xxxx xxxx xxxx 0001 xxxx : */ |
| 1250 | 1364 | /* UHADDSUBX : cccc 0110 0111 xxxx xxxx xxxx 0011 xxxx : */ |
| 1251 | 1365 | /* UHSUBADDX : cccc 0110 0111 xxxx xxxx xxxx 0101 xxxx : */ |
| 1252 | 1366 | /* UHSUB16 : cccc 0110 0111 xxxx xxxx xxxx 0111 xxxx : */ |
| 1253 | 1367 | /* UHADD8 : cccc 0110 0111 xxxx xxxx xxxx 1001 xxxx : */ |
| 1368 | + /* ??? : cccc 0110 0111 xxxx xxxx xxxx 1011 xxxx : */ | |
| 1369 | + /* ??? : cccc 0110 0111 xxxx xxxx xxxx 1101 xxxx : */ | |
| 1254 | 1370 | /* UHSUB8 : cccc 0110 0111 xxxx xxxx xxxx 1111 xxxx : */ |
| 1371 | + if ((insn & 0x0f800010) == 0x06000010) { | |
| 1372 | + if ((insn & 0x00300000) == 0x00000000 || | |
| 1373 | + (insn & 0x000000e0) == 0x000000a0 || | |
| 1374 | + (insn & 0x000000e0) == 0x000000c0) | |
| 1375 | + return INSN_REJECTED; /* Unallocated space */ | |
| 1376 | + return prep_emulate_rd12rn16rm0_wflags(insn, asi); | |
| 1377 | + } | |
| 1378 | + | |
| 1255 | 1379 | /* PKHBT : cccc 0110 1000 xxxx xxxx xxxx x001 xxxx : */ |
| 1256 | 1380 | /* PKHTB : cccc 0110 1000 xxxx xxxx xxxx x101 xxxx : */ |
| 1381 | + if ((insn & 0x0ff00030) == 0x06800010) | |
| 1382 | + return prep_emulate_rd12rn16rm0_wflags(insn, asi); | |
| 1383 | + | |
| 1257 | 1384 | /* SXTAB16 : cccc 0110 1000 xxxx xxxx xxxx 0111 xxxx : */ |
| 1258 | − /* SXTB : cccc 0110 1010 xxxx xxxx xxxx 0111 xxxx : */ | |
| 1385 | + /* SXTB16 : cccc 0110 1000 1111 xxxx xxxx 0111 xxxx : */ | |
| 1386 | + /* ??? : cccc 0110 1001 xxxx xxxx xxxx 0111 xxxx : */ | |
| 1259 | 1387 | /* SXTAB : cccc 0110 1010 xxxx xxxx xxxx 0111 xxxx : */ |
| 1388 | + /* SXTB : cccc 0110 1010 1111 xxxx xxxx 0111 xxxx : */ | |
| 1260 | 1389 | /* SXTAH : cccc 0110 1011 xxxx xxxx xxxx 0111 xxxx : */ |
| 1390 | + /* SXTH : cccc 0110 1011 1111 xxxx xxxx 0111 xxxx : */ | |
| 1261 | 1391 | /* UXTAB16 : cccc 0110 1100 xxxx xxxx xxxx 0111 xxxx : */ |
| 1392 | + /* UXTB16 : cccc 0110 1100 1111 xxxx xxxx 0111 xxxx : */ | |
| 1393 | + /* ??? : cccc 0110 1101 xxxx xxxx xxxx 0111 xxxx : */ | |
| 1262 | 1394 | /* UXTAB : cccc 0110 1110 xxxx xxxx xxxx 0111 xxxx : */ |
| 1395 | + /* UXTB : cccc 0110 1110 1111 xxxx xxxx 0111 xxxx : */ | |
| 1263 | 1396 | /* UXTAH : cccc 0110 1111 xxxx xxxx xxxx 0111 xxxx : */ |
| 1264 | − return prep_emulate_rd12rn16rm0_wflags(insn, asi); | |
| 1397 | + /* UXTH : cccc 0110 1111 1111 xxxx xxxx 0111 xxxx : */ | |
| 1398 | + if ((insn & 0x0f8000f0) == 0x06800070) { | |
| 1399 | + if ((insn & 0x00300000) == 0x00100000) | |
| 1400 | + return INSN_REJECTED; /* Unallocated space */ | |
| 1401 | + | |
| 1402 | + if ((insn & 0x000f0000) == 0x000f0000) | |
| 1403 | + return prep_emulate_rd12rm0(insn, asi); | |
| 1404 | + else | |
| 1405 | + return prep_emulate_rd12rn16rm0_wflags(insn, asi); | |
| 1406 | + } | |
| 1407 | + | |
| 1408 | + /* Other instruction encodings aren't yet defined */ | |
| 1409 | + return INSN_REJECTED; | |
| 1265 | 1410 | } |
| 1266 | 1411 | |
| 1267 | 1412 | static enum kprobe_insn __kprobes |
| @@ -1271,29 +1416,49 @@ space_cccc_0111__1(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 3 unmodified lines | ||
| 1271 | 1416 | if ((insn & 0x0ff000f0) == 0x03f000f0) |
| 1272 | 1417 | return INSN_REJECTED; |
| 1273 | 1418 | |
| 1274 | − /* USADA8 : cccc 0111 1000 xxxx xxxx xxxx 0001 xxxx */ | |
| 1275 | − /* USAD8 : cccc 0111 1000 xxxx 1111 xxxx 0001 xxxx */ | |
| 1276 | − if ((insn & 0x0ff000f0) == 0x07800010) | |
| 1277 | − return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); | |
| 1278 | − | |
| 1279 | 1419 | /* SMLALD : cccc 0111 0100 xxxx xxxx xxxx 00x1 xxxx */ |
| 1280 | 1420 | /* SMLSLD : cccc 0111 0100 xxxx xxxx xxxx 01x1 xxxx */ |
| 1281 | 1421 | if ((insn & 0x0ff00090) == 0x07400010) |
| 1282 | 1422 | return prep_emulate_rdhi16rdlo12rs8rm0_wflags(insn, asi); |
| 1283 | 1423 | |
| 1284 | 1424 | /* SMLAD : cccc 0111 0000 xxxx xxxx xxxx 00x1 xxxx :Q */ |
| 1425 | + /* SMUAD : cccc 0111 0000 xxxx 1111 xxxx 00x1 xxxx :Q */ | |
| 1285 | 1426 | /* SMLSD : cccc 0111 0000 xxxx xxxx xxxx 01x1 xxxx :Q */ |
| 1427 | + /* SMUSD : cccc 0111 0000 xxxx 1111 xxxx 01x1 xxxx : */ | |
| 1286 | 1428 | /* SMMLA : cccc 0111 0101 xxxx xxxx xxxx 00x1 xxxx : */ |
| 1287 | − /* SMMLS : cccc 0111 0101 xxxx xxxx xxxx 11x1 xxxx : */ | |
| 1429 | + /* SMMUL : cccc 0111 0101 xxxx 1111 xxxx 00x1 xxxx : */ | |
| 1430 | + /* USADA8 : cccc 0111 1000 xxxx xxxx xxxx 0001 xxxx : */ | |
| 1431 | + /* USAD8 : cccc 0111 1000 xxxx 1111 xxxx 0001 xxxx : */ | |
| 1288 | 1432 | if ((insn & 0x0ff00090) == 0x07000010 || |
| 1289 | 1433 | (insn & 0x0ff000d0) == 0x07500010 || |
| 1290 | − (insn & 0x0ff000d0) == 0x075000d0) | |
| 1434 | + (insn & 0x0ff000f0) == 0x07800010) { | |
| 1435 | + | |
| 1436 | + if ((insn & 0x0000f000) == 0x0000f000) | |
| 1437 | + return prep_emulate_rd16rs8rm0_wflags(insn, asi); | |
| 1438 | + else | |
| 1439 | + return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); | |
| 1440 | + } | |
| 1441 | + | |
| 1442 | + /* SMMLS : cccc 0111 0101 xxxx xxxx xxxx 11x1 xxxx : */ | |
| 1443 | + if ((insn & 0x0ff000d0) == 0x075000d0) | |
| 1291 | 1444 | return prep_emulate_rd16rn12rs8rm0_wflags(insn, asi); |
| 1292 | 1445 | |
| 1293 | − /* SMUSD : cccc 0111 0000 xxxx xxxx xxxx 01x1 xxxx : */ | |
| 1294 | − /* SMUAD : cccc 0111 0000 xxxx 1111 xxxx 00x1 xxxx :Q */ | |
| 1295 | − /* SMMUL : cccc 0111 0101 xxxx 1111 xxxx 00x1 xxxx : */ | |
| 1296 | − return prep_emulate_rd16rs8rm0_wflags(insn, asi); | |
| 1446 | + /* SBFX : cccc 0111 101x xxxx xxxx xxxx x101 xxxx : */ | |
| 1447 | + /* UBFX : cccc 0111 111x xxxx xxxx xxxx x101 xxxx : */ | |
| 1448 | + if ((insn & 0x0fa00070) == 0x07a00050) | |
| 1449 | + return prep_emulate_rd12rm0(insn, asi); | |
| 1450 | + | |
| 1451 | + /* BFI : cccc 0111 110x xxxx xxxx xxxx x001 xxxx : */ | |
| 1452 | + /* BFC : cccc 0111 110x xxxx xxxx xxxx x001 1111 : */ | |
| 1453 | + if ((insn & 0x0fe00070) == 0x07c00010) { | |
| 1454 | + | |
| 1455 | + if ((insn & 0x0000000f) == 0x0000000f) | |
| 1456 | + return prep_emulate_rd12_modify(insn, asi); | |
| 1457 | + else | |
| 1458 | + return prep_emulate_rd12rn0_modify(insn, asi); | |
| 1459 | + } | |
| 1460 | + | |
| 1461 | + return INSN_REJECTED; | |
| 1297 | 1462 | } |
| 1298 | 1463 | |
| 1299 | 1464 | static enum kprobe_insn __kprobes |
| @@ -1307,6 +1472,10 @@ space_cccc_01xx(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 7 unmodified lines | ||
| 1307 | 1472 | /* STRB : cccc 01xx x1x0 xxxx xxxx xxxx xxxx xxxx */ |
| 1308 | 1473 | /* STRBT : cccc 01x0 x110 xxxx xxxx xxxx xxxx xxxx */ |
| 1309 | 1474 | /* STRT : cccc 01x0 x010 xxxx xxxx xxxx xxxx xxxx */ |
| 1475 | + | |
| 1476 | + if ((insn & 0x00500000) == 0x00500000 && is_r15(insn, 12)) | |
| 1477 | + return INSN_REJECTED; /* LDRB into PC */ | |
| 1478 | + | |
| 1310 | 1479 | return prep_emulate_ldr_str(insn, asi); |
| 1311 | 1480 | } |
| 1312 | 1481 | |
| @@ -1321,10 +1490,9 @@ space_cccc_100x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 8 unmodified lines | ||
| 1321 | 1490 | |
| 1322 | 1491 | /* LDM(1) : cccc 100x x0x1 xxxx xxxx xxxx xxxx xxxx */ |
| 1323 | 1492 | /* STM(1) : cccc 100x x0x0 xxxx xxxx xxxx xxxx xxxx */ |
| 1324 | − asi->insn[0] = truecc_insn(insn); | |
| 1325 | 1493 | asi->insn_handler = ((insn & 0x108000) == 0x008000) ? /* STM & R15 */ |
| 1326 | 1494 | simulate_stm1_pc : simulate_ldm1stm1; |
| 1327 | − return INSN_GOOD; | |
| 1495 | + return INSN_GOOD_NO_SLOT; | |
| 1328 | 1496 | } |
| 1329 | 1497 | |
| 1330 | 1498 | static enum kprobe_insn __kprobes |
| @@ -1332,58 +1500,117 @@ space_cccc_101x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 1 unmodified line | ||
| 1332 | 1500 | { |
| 1333 | 1501 | /* B : cccc 1010 xxxx xxxx xxxx xxxx xxxx xxxx */ |
| 1334 | 1502 | /* BL : cccc 1011 xxxx xxxx xxxx xxxx xxxx xxxx */ |
| 1335 | − asi->insn[0] = truecc_insn(insn); | |
| 1336 | 1503 | asi->insn_handler = simulate_bbl; |
| 1337 | − return INSN_GOOD; | |
| 1504 | + return INSN_GOOD_NO_SLOT; | |
| 1338 | 1505 | } |
| 1339 | 1506 | |
| 1340 | 1507 | static enum kprobe_insn __kprobes |
| 1341 | −space_cccc_1100_010x(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 1508 | +space_cccc_11xx(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 1342 | 1509 | { |
| 1510 | + /* Coprocessor instructions... */ | |
| 1343 | 1511 | /* MCRR : cccc 1100 0100 xxxx xxxx xxxx xxxx xxxx : (Rd!=Rn) */ |
| 1344 | 1512 | /* MRRC : cccc 1100 0101 xxxx xxxx xxxx xxxx xxxx : (Rd!=Rn) */ |
| 1345 | − insn &= 0xfff00fff; | |
| 1346 | − insn |= 0x00001000; /* Rn = r0, Rd = r1 */ | |
| 1347 | − asi->insn[0] = insn; | |
| 1348 | − asi->insn_handler = (insn & (1 << 20)) ? emulate_mrrc : emulate_mcrr; | |
| 1349 | − return INSN_GOOD; | |
| 1513 | + /* LDC : cccc 110x xxx1 xxxx xxxx xxxx xxxx xxxx */ | |
| 1514 | + /* STC : cccc 110x xxx0 xxxx xxxx xxxx xxxx xxxx */ | |
| 1515 | + /* CDP : cccc 1110 xxxx xxxx xxxx xxxx xxx0 xxxx */ | |
| 1516 | + /* MCR : cccc 1110 xxx0 xxxx xxxx xxxx xxx1 xxxx */ | |
| 1517 | + /* MRC : cccc 1110 xxx1 xxxx xxxx xxxx xxx1 xxxx */ | |
| 1518 | + | |
| 1519 | + /* SVC : cccc 1111 xxxx xxxx xxxx xxxx xxxx xxxx */ | |
| 1520 | + | |
| 1521 | + return INSN_REJECTED; | |
| 1350 | 1522 | } |
| 1351 | 1523 | |
| 1352 | −static enum kprobe_insn __kprobes | |
| 1353 | −space_cccc_110x(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 1524 | +static unsigned long __kprobes __check_eq(unsigned long cpsr) | |
| 1354 | 1525 | { |
| 1355 | − /* LDC : cccc 110x xxx1 xxxx xxxx xxxx xxxx xxxx */ | |
| 1356 | − /* STC : cccc 110x xxx0 xxxx xxxx xxxx xxxx xxxx */ | |
| 1357 | − insn &= 0xfff0ffff; /* Rn = r0 */ | |
| 1358 | − asi->insn[0] = insn; | |
| 1359 | − asi->insn_handler = emulate_ldcstc; | |
| 1360 | − return INSN_GOOD; | |
| 1526 | + return cpsr & PSR_Z_BIT; | |
| 1361 | 1527 | } |
| 1362 | 1528 | |
| 1363 | −static enum kprobe_insn __kprobes | |
| 1364 | −space_cccc_111x(kprobe_opcode_t insn, struct arch_specific_insn *asi) | |
| 1529 | +static unsigned long __kprobes __check_ne(unsigned long cpsr) | |
| 1365 | 1530 | { |
| 1366 | − /* BKPT : 1110 0001 0010 xxxx xxxx xxxx 0111 xxxx */ | |
| 1367 | − /* SWI : cccc 1111 xxxx xxxx xxxx xxxx xxxx xxxx */ | |
| 1368 | − if ((insn & 0xfff000f0) == 0xe1200070 || | |
| 1369 | − (insn & 0x0f000000) == 0x0f000000) | |
| 1370 | − return INSN_REJECTED; | |
| 1531 | + return (~cpsr) & PSR_Z_BIT; | |
| 1532 | +} | |
| 1371 | 1533 | |
| 1372 | − /* CDP : cccc 1110 xxxx xxxx xxxx xxxx xxx0 xxxx */ | |
| 1373 | − if ((insn & 0x0f000010) == 0x0e000000) { | |
| 1374 | − asi->insn[0] = insn; | |
| 1375 | − asi->insn_handler = emulate_none; | |
| 1376 | − return INSN_GOOD; | |
| 1377 | − } | |
| 1534 | +static unsigned long __kprobes __check_cs(unsigned long cpsr) | |
| 1535 | +{ | |
| 1536 | + return cpsr & PSR_C_BIT; | |
| 1537 | +} | |
| 1378 | 1538 | |
| 1379 | − /* MCR : cccc 1110 xxx0 xxxx xxxx xxxx xxx1 xxxx */ | |
| 1380 | − /* MRC : cccc 1110 xxx1 xxxx xxxx xxxx xxx1 xxxx */ | |
| 1381 | − insn &= 0xffff0fff; /* Rd = r0 */ | |
| 1382 | − asi->insn[0] = insn; | |
| 1383 | − asi->insn_handler = (insn & (1 << 20)) ? emulate_rd12 : emulate_ird12; | |
| 1384 | − return INSN_GOOD; | |
| 1539 | +static unsigned long __kprobes __check_cc(unsigned long cpsr) | |
| 1540 | +{ | |
| 1541 | + return (~cpsr) & PSR_C_BIT; | |
| 1385 | 1542 | } |
| 1386 | 1543 | |
| 1544 | +static unsigned long __kprobes __check_mi(unsigned long cpsr) | |
| 1545 | +{ | |
| 1546 | + return cpsr & PSR_N_BIT; | |
| 1547 | +} | |
| 1548 | + | |
| 1549 | +static unsigned long __kprobes __check_pl(unsigned long cpsr) | |
| 1550 | +{ | |
| 1551 | + return (~cpsr) & PSR_N_BIT; | |
| 1552 | +} | |
| 1553 | + | |
| 1554 | +static unsigned long __kprobes __check_vs(unsigned long cpsr) | |
| 1555 | +{ | |
| 1556 | + return cpsr & PSR_V_BIT; | |
| 1557 | +} | |
| 1558 | + | |
| 1559 | +static unsigned long __kprobes __check_vc(unsigned long cpsr) | |
| 1560 | +{ | |
| 1561 | + return (~cpsr) & PSR_V_BIT; | |
| 1562 | +} | |
| 1563 | + | |
| 1564 | +static unsigned long __kprobes __check_hi(unsigned long cpsr) | |
| 1565 | +{ | |
| 1566 | + cpsr &= ~(cpsr >> 1); /* PSR_C_BIT &= ~PSR_Z_BIT */ | |
| 1567 | + return cpsr & PSR_C_BIT; | |
| 1568 | +} | |
| 1569 | + | |
| 1570 | +static unsigned long __kprobes __check_ls(unsigned long cpsr) | |
| 1571 | +{ | |
| 1572 | + cpsr &= ~(cpsr >> 1); /* PSR_C_BIT &= ~PSR_Z_BIT */ | |
| 1573 | + return (~cpsr) & PSR_C_BIT; | |
| 1574 | +} | |
| 1575 | + | |
| 1576 | +static unsigned long __kprobes __check_ge(unsigned long cpsr) | |
| 1577 | +{ | |
| 1578 | + cpsr ^= (cpsr << 3); /* PSR_N_BIT ^= PSR_V_BIT */ | |
| 1579 | + return (~cpsr) & PSR_N_BIT; | |
| 1580 | +} | |
| 1581 | + | |
| 1582 | +static unsigned long __kprobes __check_lt(unsigned long cpsr) | |
| 1583 | +{ | |
| 1584 | + cpsr ^= (cpsr << 3); /* PSR_N_BIT ^= PSR_V_BIT */ | |
| 1585 | + return cpsr & PSR_N_BIT; | |
| 1586 | +} | |
| 1587 | + | |
| 1588 | +static unsigned long __kprobes __check_gt(unsigned long cpsr) | |
| 1589 | +{ | |
| 1590 | + unsigned long temp = cpsr ^ (cpsr << 3); /* PSR_N_BIT ^= PSR_V_BIT */ | |
| 1591 | + temp |= (cpsr << 1); /* PSR_N_BIT |= PSR_Z_BIT */ | |
| 1592 | + return (~temp) & PSR_N_BIT; | |
| 1593 | +} | |
| 1594 | + | |
| 1595 | +static unsigned long __kprobes __check_le(unsigned long cpsr) | |
| 1596 | +{ | |
| 1597 | + unsigned long temp = cpsr ^ (cpsr << 3); /* PSR_N_BIT ^= PSR_V_BIT */ | |
| 1598 | + temp |= (cpsr << 1); /* PSR_N_BIT |= PSR_Z_BIT */ | |
| 1599 | + return temp & PSR_N_BIT; | |
| 1600 | +} | |
| 1601 | + | |
| 1602 | +static unsigned long __kprobes __check_al(unsigned long cpsr) | |
| 1603 | +{ | |
| 1604 | + return true; | |
| 1605 | +} | |
| 1606 | + | |
| 1607 | +static kprobe_check_cc * const condition_checks[16] = { | |
| 1608 | + &__check_eq, &__check_ne, &__check_cs, &__check_cc, | |
| 1609 | + &__check_mi, &__check_pl, &__check_vs, &__check_vc, | |
| 1610 | + &__check_hi, &__check_ls, &__check_ge, &__check_lt, | |
| 1611 | + &__check_gt, &__check_le, &__check_al, &__check_al | |
| 1612 | +}; | |
| 1613 | + | |
| 1387 | 1614 | /* Return: |
| 1388 | 1615 | * INSN_REJECTED If instruction is one not allowed to kprobe, |
| 1389 | 1616 | * INSN_GOOD If instruction is supported and uses instruction slot, |
| @@ -1399,133 +1626,45 @@ space_cccc_111x(kprobe_opcode_t insn, struct arch_specific_insn *asi) · 9 unmodified lines | ||
| 1399 | 1626 | enum kprobe_insn __kprobes |
| 1400 | 1627 | arm_kprobe_decode_insn(kprobe_opcode_t insn, struct arch_specific_insn *asi) |
| 1401 | 1628 | { |
| 1629 | + asi->insn_check_cc = condition_checks[insn>>28]; | |
| 1402 | 1630 | asi->insn[1] = KPROBE_RETURN_INSTRUCTION; |
| 1403 | 1631 | |
| 1404 | − if ((insn & 0xf0000000) == 0xf0000000) { | |
| 1632 | + if ((insn & 0xf0000000) == 0xf0000000) | |
| 1405 | 1633 | |
| 1406 | 1634 | return space_1111(insn, asi); |
| 1407 | 1635 | |
| 1408 | − } else if ((insn & 0x0e000000) == 0x00000000) { | |
| 1636 | + else if ((insn & 0x0e000000) == 0x00000000) | |
| 1409 | 1637 | |
| 1410 | 1638 | return space_cccc_000x(insn, asi); |
| 1411 | 1639 | |
| 1412 | − } else if ((insn & 0x0e000000) == 0x02000000) { | |
| 1640 | + else if ((insn & 0x0e000000) == 0x02000000) | |
| 1413 | 1641 | |
| 1414 | 1642 | return space_cccc_001x(insn, asi); |
| 1415 | 1643 | |
| 1416 | − } else if ((insn & 0x0f000010) == 0x06000010) { | |
| 1644 | + else if ((insn & 0x0f000010) == 0x06000010) | |
| 1417 | 1645 | |
| 1418 | 1646 | return space_cccc_0110__1(insn, asi); |
| 1419 | 1647 | |
| 1420 | − } else if ((insn & 0x0f000010) == 0x07000010) { | |
| 1648 | + else if ((insn & 0x0f000010) == 0x07000010) | |
| 1421 | 1649 | |
| 1422 | 1650 | return space_cccc_0111__1(insn, asi); |
| 1423 | 1651 | |
| 1424 | − } else if ((insn & 0x0c000000) == 0x04000000) { | |
| 1652 | + else if ((insn & 0x0c000000) == 0x04000000) | |
| 1425 | 1653 | |
| 1426 | 1654 | return space_cccc_01xx(insn, asi); |
| 1427 | 1655 | |
| 1428 | − } else if ((insn & 0x0e000000) == 0x08000000) { | |
| 1656 | + else if ((insn & 0x0e000000) == 0x08000000) | |
| 1429 | 1657 | |
| 1430 | 1658 | return space_cccc_100x(insn, asi); |
| 1431 | 1659 | |
| 1432 | − } else if ((insn & 0x0e000000) == 0x0a000000) { | |
| 1660 | + else if ((insn & 0x0e000000) == 0x0a000000) | |
| 1433 | 1661 | |
| 1434 | 1662 | return space_cccc_101x(insn, asi); |
| 1435 | 1663 | |
| 1436 | − } else if ((insn & 0x0fe00000) == 0x0c400000) { | |
| 1437 | − | |
| 1438 | − return space_cccc_1100_010x(insn, asi); | |
| 1439 | − | |
| 1440 | − } else if ((insn & 0x0e000000) == 0x0c000000) { | |
| 1441 | − | |
| 1442 | − return space_cccc_110x(insn, asi); | |
| 1443 | − | |
| 1444 | − } | |
| 1445 | − | |
| 1446 | − return space_cccc_111x(insn, asi); | |
| 1664 | + return space_cccc_11xx(insn, asi); | |
| 1447 | 1665 | } |
| 1448 | 1666 | |
| 1449 | 1667 | void __init arm_kprobe_decode_init(void) |
| 1450 | 1668 | { |
| 1451 | 1669 | find_str_pc_offset(); |
| 1452 | 1670 | } |
| 1453 | − | |
| 1454 | − | |
| 1455 | −/* | |
| 1456 | − * All ARM instructions listed below. | |
| 1457 | − * | |
| 1458 | − * Instructions and their general purpose registers are given. | |
| 1459 | − * If a particular register may not use R15, it is prefixed with a "!". | |
| 1460 | − * If marked with a "*" means the value returned by reading R15 | |
| 1461 | − * is implementation defined. | |
| 1462 | − * | |
| 1463 | − * ADC/ADD/AND/BIC/CMN/CMP/EOR/MOV/MVN/ORR/RSB/RSC/SBC/SUB/TEQ | |
| 1464 | − * TST: Rd, Rn, Rm, !Rs | |
| 1465 | − * BX: Rm | |
| 1466 | − * BLX(2): !Rm | |
| 1467 | − * BX: Rm (R15 legal, but discouraged) | |
| 1468 | − * BXJ: !Rm, | |
| 1469 | − * CLZ: !Rd, !Rm | |
| 1470 | − * CPY: Rd, Rm | |
| 1471 | − * LDC/2,STC/2 immediate offset & unindex: Rn | |
| 1472 | − * LDC/2,STC/2 immediate pre/post-indexed: !Rn | |
| 1473 | − * LDM(1/3): !Rn, register_list | |
| 1474 | − * LDM(2): !Rn, !register_list | |
| 1475 | − * LDR,STR,PLD immediate offset: Rd, Rn | |
| 1476 | − * LDR,STR,PLD register offset: Rd, Rn, !Rm | |
| 1477 | − * LDR,STR,PLD scaled register offset: Rd, !Rn, !Rm | |
| 1478 | − * LDR,STR immediate pre/post-indexed: Rd, !Rn | |
| 1479 | − * LDR,STR register pre/post-indexed: Rd, !Rn, !Rm | |
| 1480 | − * LDR,STR scaled register pre/post-indexed: Rd, !Rn, !Rm | |
| 1481 | − * LDRB,STRB immediate offset: !Rd, Rn | |
| 1482 | − * LDRB,STRB register offset: !Rd, Rn, !Rm | |
| 1483 | − * LDRB,STRB scaled register offset: !Rd, !Rn, !Rm | |
| 1484 | − * LDRB,STRB immediate pre/post-indexed: !Rd, !Rn | |
| 1485 | − * LDRB,STRB register pre/post-indexed: !Rd, !Rn, !Rm | |
| 1486 | − * LDRB,STRB scaled register pre/post-indexed: !Rd, !Rn, !Rm | |
| 1487 | − * LDRT,LDRBT,STRBT immediate pre/post-indexed: !Rd, !Rn | |
| 1488 | − * LDRT,LDRBT,STRBT register pre/post-indexed: !Rd, !Rn, !Rm | |
| 1489 | − * LDRT,LDRBT,STRBT scaled register pre/post-indexed: !Rd, !Rn, !Rm | |
| 1490 | − * LDRH/SH/SB/D,STRH/SH/SB/D immediate offset: !Rd, Rn | |
| 1491 | − * LDRH/SH/SB/D,STRH/SH/SB/D register offset: !Rd, Rn, !Rm | |
| 1492 | − * LDRH/SH/SB/D,STRH/SH/SB/D immediate pre/post-indexed: !Rd, !Rn | |
| 1493 | − * LDRH/SH/SB/D,STRH/SH/SB/D register pre/post-indexed: !Rd, !Rn, !Rm | |
| 1494 | − * LDREX: !Rd, !Rn | |
| 1495 | − * MCR/2: !Rd | |
| 1496 | − * MCRR/2,MRRC/2: !Rd, !Rn | |
| 1497 | − * MLA: !Rd, !Rn, !Rm, !Rs | |
| 1498 | − * MOV: Rd | |
| 1499 | − * MRC/2: !Rd (if Rd==15, only changes cond codes, not the register) | |
| 1500 | − * MRS,MSR: !Rd | |
| 1501 | − * MUL: !Rd, !Rm, !Rs | |
| 1502 | − * PKH{BT,TB}: !Rd, !Rn, !Rm | |
| 1503 | − * QDADD,[U]QADD/16/8/SUBX: !Rd, !Rm, !Rn | |
| 1504 | − * QDSUB,[U]QSUB/16/8/ADDX: !Rd, !Rm, !Rn | |
| 1505 | − * REV/16/SH: !Rd, !Rm | |
| 1506 | − * RFE: !Rn | |
| 1507 | − * {S,U}[H]ADD{16,8,SUBX},{S,U}[H]SUB{16,8,ADDX}: !Rd, !Rn, !Rm | |
| 1508 | − * SEL: !Rd, !Rn, !Rm | |
| 1509 | − * SMLA<x><y>,SMLA{D,W<y>},SMLSD,SMML{A,S}: !Rd, !Rn, !Rm, !Rs | |
| 1510 | − * SMLAL<x><y>,SMLA{D,LD},SMLSLD,SMMULL,SMULW<y>: !RdHi, !RdLo, !Rm, !Rs | |
| 1511 | − * SMMUL,SMUAD,SMUL<x><y>,SMUSD: !Rd, !Rm, !Rs | |
| 1512 | − * SSAT/16: !Rd, !Rm | |
| 1513 | − * STM(1/2): !Rn, register_list* (R15 in reg list not recommended) | |
| 1514 | − * STRT immediate pre/post-indexed: Rd*, !Rn | |
| 1515 | − * STRT register pre/post-indexed: Rd*, !Rn, !Rm | |
| 1516 | − * STRT scaled register pre/post-indexed: Rd*, !Rn, !Rm | |
| 1517 | − * STREX: !Rd, !Rn, !Rm | |
| 1518 | − * SWP/B: !Rd, !Rn, !Rm | |
| 1519 | − * {S,U}XTA{B,B16,H}: !Rd, !Rn, !Rm | |
| 1520 | − * {S,U}XT{B,B16,H}: !Rd, !Rm | |
| 1521 | − * UM{AA,LA,UL}L: !RdHi, !RdLo, !Rm, !Rs | |
| 1522 | − * USA{D8,A8,T,T16}: !Rd, !Rm, !Rs | |
| 1523 | − * | |
| 1524 | − * May transfer control by writing R15 (possible mode changes or alternate | |
| 1525 | − * mode accesses marked by "*"): | |
| 1526 | − * ALU op (* with s-bit), B, BL, BKPT, BLX(1/2), BX, BXJ, CPS*, CPY, | |
| 1527 | − * LDM(1), LDM(2/3)*, LDR, MOV, RFE*, SWI* | |
| 1528 | − * | |
| 1529 | − * Instructions that do not take general registers, nor transfer control: | |
| 1530 | − * CDP/2, SETEND, SRS* | |
| 1531 | − */ | |
| @@ -134,7 +134,8 @@ static void __kprobes singlestep(struct kprobe *p, struct pt_regs *regs, · 133 unmodified lines | ||
| 134 | 134 | struct kprobe_ctlblk *kcb) |
| 135 | 135 | { |
| 136 | 136 | regs->ARM_pc += 4; |
| 137 | − p->ainsn.insn_handler(p, regs); | |
| 137 | + if (p->ainsn.insn_check_cc(regs->ARM_cpsr)) | |
| 138 | + p->ainsn.insn_handler(p, regs); | |
| 138 | 139 | } |
| 139 | 140 | |
| 140 | 141 | /* |
| @@ -10,6 +10,7 @@ · 9 unmodified lines | ||
| 10 | 10 | #include <linux/module.h> |
| 11 | 11 | #include <linux/init.h> |
| 12 | 12 | #include <linux/sysdev.h> |
| 13 | +#include <linux/syscore_ops.h> | |
| 13 | 14 | |
| 14 | 15 | #include <asm/leds.h> |
| 15 | 16 | |
| @@ -69,36 +70,37 @@ static ssize_t leds_store(struct sys_device *dev, · 53 unmodified lines | ||
| 69 | 70 | |
| 70 | 71 | static SYSDEV_ATTR(event, 0200, NULL, leds_store); |
| 71 | 72 | |
| 72 | −static int leds_suspend(struct sys_device *dev, pm_message_t state) | |
| 73 | +static struct sysdev_class leds_sysclass = { | |
| 74 | + .name = "leds", | |
| 75 | +}; | |
| 76 | + | |
| 77 | +static struct sys_device leds_device = { | |
| 78 | + .id = 0, | |
| 79 | + .cls = &leds_sysclass, | |
| 80 | +}; | |
| 81 | + | |
| 82 | +static int leds_suspend(void) | |
| 73 | 83 | { |
| 74 | 84 | leds_event(led_stop); |
| 75 | 85 | return 0; |
| 76 | 86 | } |
| 77 | 87 | |
| 78 | −static int leds_resume(struct sys_device *dev) | |
| 88 | +static void leds_resume(void) | |
| 79 | 89 | { |
| 80 | 90 | leds_event(led_start); |
| 81 | − return 0; | |
| 82 | 91 | } |
| 83 | 92 | |
| 84 | −static int leds_shutdown(struct sys_device *dev) | |
| 93 | +static void leds_shutdown(void) | |
| 85 | 94 | { |
| 86 | 95 | leds_event(led_halted); |
| 87 | − return 0; | |
| 88 | 96 | } |
| 89 | 97 | |
| 90 | −static struct sysdev_class leds_sysclass = { | |
| 91 | − .name = "leds", | |
| 98 | +static struct syscore_ops leds_syscore_ops = { | |
| 92 | 99 | .shutdown = leds_shutdown, |
| 93 | 100 | .suspend = leds_suspend, |
| 94 | 101 | .resume = leds_resume, |
| 95 | 102 | }; |
| 96 | 103 | |
| 97 | −static struct sys_device leds_device = { | |
| 98 | − .id = 0, | |
| 99 | − .cls = &leds_sysclass, | |
| 100 | −}; | |
| 101 | − | |
| 102 | 104 | static int __init leds_init(void) |
| 103 | 105 | { |
| 104 | 106 | int ret; |
| @@ -107,6 +109,8 @@ static int __init leds_init(void) · 2 unmodified lines | ||
| 107 | 109 | ret = sysdev_register(&leds_device); |
| 108 | 110 | if (ret == 0) |
| 109 | 111 | ret = sysdev_create_file(&leds_device, &attr_event); |
| 112 | + if (ret == 0) | |
| 113 | + register_syscore_ops(&leds_syscore_ops); | |
| 110 | 114 | return ret; |
| 111 | 115 | } |
| 112 | 116 | |
| @@ -79,6 +79,7 @@ struct arm_pmu { · 78 unmodified lines | ||
| 79 | 79 | void (*write_counter)(int idx, u32 val); |
| 80 | 80 | void (*start)(void); |
| 81 | 81 | void (*stop)(void); |
| 82 | + void (*reset)(void *); | |
| 82 | 83 | const unsigned (*cache_map)[PERF_COUNT_HW_CACHE_MAX] |
| 83 | 84 | [PERF_COUNT_HW_CACHE_OP_MAX] |
| 84 | 85 | [PERF_COUNT_HW_CACHE_RESULT_MAX]; |
| @@ -204,11 +205,9 @@ armpmu_event_set_period(struct perf_event *event, · 119 unmodified lines | ||
| 204 | 205 | static u64 |
| 205 | 206 | armpmu_event_update(struct perf_event *event, |
| 206 | 207 | struct hw_perf_event *hwc, |
| 207 | − int idx) | |
| 208 | + int idx, int overflow) | |
| 208 | 209 | { |
| 209 | − int shift = 64 - 32; | |
| 210 | − s64 prev_raw_count, new_raw_count; | |
| 211 | − u64 delta; | |
| 210 | + u64 delta, prev_raw_count, new_raw_count; | |
| 212 | 211 | |
| 213 | 212 | again: |
| 214 | 213 | prev_raw_count = local64_read(&hwc->prev_count); |
| @@ -218,8 +217,13 @@ again: · 3 unmodified lines | ||
| 218 | 217 | new_raw_count) != prev_raw_count) |
| 219 | 218 | goto again; |
| 220 | 219 | |
| 221 | − delta = (new_raw_count << shift) - (prev_raw_count << shift); | |
| 222 | − delta >>= shift; | |
| 220 | + new_raw_count &= armpmu->max_period; | |
| 221 | + prev_raw_count &= armpmu->max_period; | |
| 222 | + | |
| 223 | + if (overflow) | |
| 224 | + delta = armpmu->max_period - prev_raw_count + new_raw_count + 1; | |
| 225 | + else | |
| 226 | + delta = new_raw_count - prev_raw_count; | |
| 223 | 227 | |
| 224 | 228 | local64_add(delta, &event->count); |
| 225 | 229 | local64_sub(delta, &hwc->period_left); |
| @@ -236,7 +240,7 @@ armpmu_read(struct perf_event *event) · 10 unmodified lines | ||
| 236 | 240 | if (hwc->idx < 0) |
| 237 | 241 | return; |
| 238 | 242 | |
| 239 | − armpmu_event_update(event, hwc, hwc->idx); | |
| 243 | + armpmu_event_update(event, hwc, hwc->idx, 0); | |
| 240 | 244 | } |
| 241 | 245 | |
| 242 | 246 | static void |
| @@ -254,7 +258,7 @@ armpmu_stop(struct perf_event *event, int flags) · 11 unmodified lines | ||
| 254 | 258 | if (!(hwc->state & PERF_HES_STOPPED)) { |
| 255 | 259 | armpmu->disable(hwc, hwc->idx); |
| 256 | 260 | barrier(); /* why? */ |
| 257 | − armpmu_event_update(event, hwc, hwc->idx); | |
| 261 | + armpmu_event_update(event, hwc, hwc->idx, 0); | |
| 258 | 262 | hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; |
| 259 | 263 | } |
| 260 | 264 | } |
| @@ -556,11 +560,6 @@ static int armpmu_event_init(struct perf_event *event) · 295 unmodified lines | ||
| 556 | 560 | event->destroy = hw_perf_event_destroy; |
| 557 | 561 | |
| 558 | 562 | if (!atomic_inc_not_zero(&active_events)) { |
| 559 | − if (atomic_read(&active_events) > armpmu->num_events) { | |
| 560 | − atomic_dec(&active_events); | |
| 561 | − return -ENOSPC; | |
| 562 | − } | |
| 563 | − | |
| 564 | 563 | mutex_lock(&pmu_reserve_mutex); |
| 565 | 564 | if (atomic_read(&active_events) == 0) { |
| 566 | 565 | err = armpmu_reserve_hardware(); |
| @@ -624,6 +623,19 @@ static struct pmu pmu = { · 57 unmodified lines | ||
| 624 | 623 | #include "perf_event_v6.c" |
| 625 | 624 | #include "perf_event_v7.c" |
| 626 | 625 | |
| 626 | +/* | |
| 627 | + * Ensure the PMU has sane values out of reset. | |
| 628 | + * This requires SMP to be available, so exists as a separate initcall. | |
| 629 | + */ | |
| 630 | +static int __init | |
| 631 | +armpmu_reset(void) | |
| 632 | +{ | |
| 633 | + if (armpmu && armpmu->reset) | |
| 634 | + return on_each_cpu(armpmu->reset, NULL, 1); | |
| 635 | + return 0; | |
| 636 | +} | |
| 637 | +arch_initcall(armpmu_reset); | |
| 638 | + | |
| 627 | 639 | static int __init |
| 628 | 640 | init_hw_perf_events(void) |
| 629 | 641 | { |
| @@ -729,7 +741,8 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) · 99 unmodified lines | ||
| 729 | 741 | |
| 730 | 742 | tail = (struct frame_tail __user *)regs->ARM_fp - 1; |
| 731 | 743 | |
| 732 | − while (tail && !((unsigned long)tail & 0x3)) | |
| 744 | + while ((entry->nr < PERF_MAX_STACK_DEPTH) && | |
| 745 | + tail && !((unsigned long)tail & 0x3)) | |
| 733 | 746 | tail = user_backtrace(tail, entry); |
| 734 | 747 | } |
| 735 | 748 | |
| @@ -474,7 +474,7 @@ armv6pmu_handle_irq(int irq_num, · 473 unmodified lines | ||
| 474 | 474 | continue; |
| 475 | 475 | |
| 476 | 476 | hwc = &event->hw; |
| 477 | − armpmu_event_update(event, hwc, idx); | |
| 477 | + armpmu_event_update(event, hwc, idx, 1); | |
| 478 | 478 | data.period = event->hw.last_period; |
| 479 | 479 | if (!armpmu_event_set_period(event, hwc, idx)) |
| 480 | 480 | continue; |
| @@ -466,6 +466,7 @@ static inline unsigned long armv7_pmnc_read(void) · 465 unmodified lines | ||
| 466 | 466 | static inline void armv7_pmnc_write(unsigned long val) |
| 467 | 467 | { |
| 468 | 468 | val &= ARMV7_PMNC_MASK; |
| 469 | + isb(); | |
| 469 | 470 | asm volatile("mcr p15, 0, %0, c9, c12, 0" : : "r"(val)); |
| 470 | 471 | } |
| 471 | 472 | |
| @@ -502,6 +503,7 @@ static inline int armv7_pmnc_select_counter(unsigned int idx) · 30 unmodified lines | ||
| 502 | 503 | |
| 503 | 504 | val = (idx - ARMV7_EVENT_CNT_TO_CNTx) & ARMV7_SELECT_MASK; |
| 504 | 505 | asm volatile("mcr p15, 0, %0, c9, c12, 5" : : "r" (val)); |
| 506 | + isb(); | |
| 505 | 507 | |
| 506 | 508 | return idx; |
| 507 | 509 | } |
| @@ -780,7 +782,7 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) · 272 unmodified lines | ||
| 780 | 782 | continue; |
| 781 | 783 | |
| 782 | 784 | hwc = &event->hw; |
| 783 | − armpmu_event_update(event, hwc, idx); | |
| 785 | + armpmu_event_update(event, hwc, idx, 1); | |
| 784 | 786 | data.period = event->hw.last_period; |
| 785 | 787 | if (!armpmu_event_set_period(event, hwc, idx)) |
| 786 | 788 | continue; |
| @@ -847,6 +849,18 @@ static int armv7pmu_get_event_idx(struct cpu_hw_events *cpuc, · 60 unmodified lines | ||
| 847 | 849 | } |
| 848 | 850 | } |
| 849 | 851 | |
| 852 | +static void armv7pmu_reset(void *info) | |
| 853 | +{ | |
| 854 | + u32 idx, nb_cnt = armpmu->num_events; | |
| 855 | + | |
| 856 | + /* The counter and interrupt enable registers are unknown at reset. */ | |
| 857 | + for (idx = 1; idx < nb_cnt; ++idx) | |
| 858 | + armv7pmu_disable_event(NULL, idx); | |
| 859 | + | |
| 860 | + /* Initialize & Reset PMNC: C and P bits */ | |
| 861 | + armv7_pmnc_write(ARMV7_PMNC_P | ARMV7_PMNC_C); | |
| 862 | +} | |
| 863 | + | |
| 850 | 864 | static struct arm_pmu armv7pmu = { |
| 851 | 865 | .handle_irq = armv7pmu_handle_irq, |
| 852 | 866 | .enable = armv7pmu_enable_event, |
| @@ -856,17 +870,15 @@ static struct arm_pmu armv7pmu = { · 3 unmodified lines | ||
| 856 | 870 | .get_event_idx = armv7pmu_get_event_idx, |
| 857 | 871 | .start = armv7pmu_start, |
| 858 | 872 | .stop = armv7pmu_stop, |
| 873 | + .reset = armv7pmu_reset, | |
| 859 | 874 | .raw_event_mask = 0xFF, |
| 860 | 875 | .max_period = (1LLU << 32) - 1, |
| 861 | 876 | }; |
| 862 | 877 | |
| 863 | −static u32 __init armv7_reset_read_pmnc(void) | |
| 878 | +static u32 __init armv7_read_num_pmnc_events(void) | |
| 864 | 879 | { |
| 865 | 880 | u32 nb_cnt; |
| 866 | 881 | |
| 867 | − /* Initialize & Reset PMNC: C and P bits */ | |
| 868 | − armv7_pmnc_write(ARMV7_PMNC_P | ARMV7_PMNC_C); | |
| 869 | − | |
| 870 | 882 | /* Read the nb of CNTx counters supported from PMNC */ |
| 871 | 883 | nb_cnt = (armv7_pmnc_read() >> ARMV7_PMNC_N_SHIFT) & ARMV7_PMNC_N_MASK; |
| 872 | 884 | |
| @@ -880,7 +892,7 @@ static const struct arm_pmu *__init armv7_a8_pmu_init(void) · 7 unmodified lines | ||
| 880 | 892 | armv7pmu.name = "ARMv7 Cortex-A8"; |
| 881 | 893 | armv7pmu.cache_map = &armv7_a8_perf_cache_map; |
| 882 | 894 | armv7pmu.event_map = &armv7_a8_perf_map; |
| 883 | − armv7pmu.num_events = armv7_reset_read_pmnc(); | |
| 895 | + armv7pmu.num_events = armv7_read_num_pmnc_events(); | |
| 884 | 896 | return &armv7pmu; |
| 885 | 897 | } |
| 886 | 898 | |
| @@ -890,7 +902,7 @@ static const struct arm_pmu *__init armv7_a9_pmu_init(void) · 3 unmodified lines | ||
| 890 | 902 | armv7pmu.name = "ARMv7 Cortex-A9"; |
| 891 | 903 | armv7pmu.cache_map = &armv7_a9_perf_cache_map; |
| 892 | 904 | armv7pmu.event_map = &armv7_a9_perf_map; |
| 893 | − armv7pmu.num_events = armv7_reset_read_pmnc(); | |
| 905 | + armv7pmu.num_events = armv7_read_num_pmnc_events(); | |
| 894 | 906 | return &armv7pmu; |
| 895 | 907 | } |
| 896 | 908 | #else |
| @@ -246,7 +246,7 @@ xscale1pmu_handle_irq(int irq_num, void *dev) · 245 unmodified lines | ||
| 246 | 246 | continue; |
| 247 | 247 | |
| 248 | 248 | hwc = &event->hw; |
| 249 | − armpmu_event_update(event, hwc, idx); | |
| 249 | + armpmu_event_update(event, hwc, idx, 1); | |
| 250 | 250 | data.period = event->hw.last_period; |
| 251 | 251 | if (!armpmu_event_set_period(event, hwc, idx)) |
| 252 | 252 | continue; |
| @@ -578,7 +578,7 @@ xscale2pmu_handle_irq(int irq_num, void *dev) · 325 unmodified lines | ||
| 578 | 578 | continue; |
| 579 | 579 | |
| 580 | 580 | hwc = &event->hw; |
| 581 | − armpmu_event_update(event, hwc, idx); | |
| 581 | + armpmu_event_update(event, hwc, idx, 1); | |
| 582 | 582 | data.period = event->hw.last_period; |
| 583 | 583 | if (!armpmu_event_set_period(event, hwc, idx)) |
| 584 | 584 | continue; |
| @@ -372,6 +372,8 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, · 371 unmodified lines | ||
| 372 | 372 | if (clone_flags & CLONE_SETTLS) |
| 373 | 373 | thread->tp_value = regs->ARM_r3; |
| 374 | 374 | |
| 375 | + thread_notify(THREAD_NOTIFY_COPY, thread); | |
| 376 | + | |
| 375 | 377 | return 0; |
| 376 | 378 | } |
| 377 | 379 | |
| @@ -21,6 +21,7 @@ · 20 unmodified lines | ||
| 21 | 21 | #include <linux/uaccess.h> |
| 22 | 22 | #include <linux/perf_event.h> |
| 23 | 23 | #include <linux/hw_breakpoint.h> |
| 24 | +#include <linux/regset.h> | |
| 24 | 25 | |
| 25 | 26 | #include <asm/pgtable.h> |
| 26 | 27 | #include <asm/system.h> |
| @@ -308,58 +309,6 @@ static int ptrace_write_user(struct task_struct *tsk, unsigned long off, · 281 unmodified lines | ||
| 308 | 309 | return put_user_reg(tsk, off >> 2, val); |
| 309 | 310 | } |
| 310 | 311 | |
| 311 | −/* | |
| 312 | − * Get all user integer registers. | |
| 313 | − */ | |
| 314 | −static int ptrace_getregs(struct task_struct *tsk, void __user *uregs) | |
| 315 | −{ | |
| 316 | − struct pt_regs *regs = task_pt_regs(tsk); | |
| 317 | − | |
| 318 | − return copy_to_user(uregs, regs, sizeof(struct pt_regs)) ? -EFAULT : 0; | |
| 319 | −} | |
| 320 | − | |
| 321 | −/* | |
| 322 | − * Set all user integer registers. | |
| 323 | − */ | |
| 324 | −static int ptrace_setregs(struct task_struct *tsk, void __user *uregs) | |
| 325 | −{ | |
| 326 | − struct pt_regs newregs; | |
| 327 | − int ret; | |
| 328 | − | |
| 329 | − ret = -EFAULT; | |
| 330 | − if (copy_from_user(&newregs, uregs, sizeof(struct pt_regs)) == 0) { | |
| 331 | − struct pt_regs *regs = task_pt_regs(tsk); | |
| 332 | − | |
| 333 | − ret = -EINVAL; | |
| 334 | − if (valid_user_regs(&newregs)) { | |
| 335 | − *regs = newregs; | |
| 336 | − ret = 0; | |
| 337 | − } | |
| 338 | − } | |
| 339 | − | |
| 340 | − return ret; | |
| 341 | −} | |
| 342 | − | |
| 343 | −/* | |
| 344 | − * Get the child FPU state. | |
| 345 | − */ | |
| 346 | −static int ptrace_getfpregs(struct task_struct *tsk, void __user *ufp) | |
| 347 | −{ | |
| 348 | − return copy_to_user(ufp, &task_thread_info(tsk)->fpstate, | |
| 349 | − sizeof(struct user_fp)) ? -EFAULT : 0; | |
| 350 | −} | |
| 351 | − | |
| 352 | −/* | |
| 353 | − * Set the child FPU state. | |
| 354 | − */ | |
| 355 | −static int ptrace_setfpregs(struct task_struct *tsk, void __user *ufp) | |
| 356 | −{ | |
| 357 | − struct thread_info *thread = task_thread_info(tsk); | |
| 358 | − thread->used_cp[1] = thread->used_cp[2] = 1; | |
| 359 | − return copy_from_user(&thread->fpstate, ufp, | |
| 360 | − sizeof(struct user_fp)) ? -EFAULT : 0; | |
| 361 | −} | |
| 362 | − | |
| 363 | 312 | #ifdef CONFIG_IWMMXT |
| 364 | 313 | |
| 365 | 314 | /* |
| @@ -418,56 +367,6 @@ static int ptrace_setcrunchregs(struct task_struct *tsk, void __user *ufp) · 52 unmodified lines | ||
| 418 | 367 | } |
| 419 | 368 | #endif |
| 420 | 369 | |
| 421 | −#ifdef CONFIG_VFP | |
| 422 | −/* | |
| 423 | − * Get the child VFP state. | |
| 424 | − */ | |
| 425 | −static int ptrace_getvfpregs(struct task_struct *tsk, void __user *data) | |
| 426 | −{ | |
| 427 | − struct thread_info *thread = task_thread_info(tsk); | |
| 428 | − union vfp_state *vfp = &thread->vfpstate; | |
| 429 | − struct user_vfp __user *ufp = data; | |
| 430 | − | |
| 431 | − vfp_sync_hwstate(thread); | |
| 432 | − | |
| 433 | − /* copy the floating point registers */ | |
| 434 | − if (copy_to_user(&ufp->fpregs, &vfp->hard.fpregs, | |
| 435 | − sizeof(vfp->hard.fpregs))) | |
| 436 | − return -EFAULT; | |
| 437 | − | |
| 438 | − /* copy the status and control register */ | |
| 439 | − if (put_user(vfp->hard.fpscr, &ufp->fpscr)) | |
| 440 | − return -EFAULT; | |
| 441 | − | |
| 442 | − return 0; | |
| 443 | −} | |
| 444 | − | |
| 445 | −/* | |
| 446 | − * Set the child VFP state. | |
| 447 | − */ | |
| 448 | −static int ptrace_setvfpregs(struct task_struct *tsk, void __user *data) | |
| 449 | −{ | |
| 450 | − struct thread_info *thread = task_thread_info(tsk); | |
| 451 | − union vfp_state *vfp = &thread->vfpstate; | |
| 452 | − struct user_vfp __user *ufp = data; | |
| 453 | − | |
| 454 | − vfp_sync_hwstate(thread); | |
| 455 | − | |
| 456 | − /* copy the floating point registers */ | |
| 457 | − if (copy_from_user(&vfp->hard.fpregs, &ufp->fpregs, | |
| 458 | − sizeof(vfp->hard.fpregs))) | |
| 459 | − return -EFAULT; | |
| 460 | − | |
| 461 | − /* copy the status and control register */ | |
| 462 | − if (get_user(vfp->hard.fpscr, &ufp->fpscr)) | |
| 463 | − return -EFAULT; | |
| 464 | − | |
| 465 | − vfp_flush_hwstate(thread); | |
| 466 | − | |
| 467 | − return 0; | |
| 468 | −} | |
| 469 | −#endif | |
| 470 | − | |
| 471 | 370 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
| 472 | 371 | /* |
| 473 | 372 | * Convert a virtual register number into an index for a thread_info |
| @@ -694,6 +593,219 @@ out: · 220 unmodified lines | ||
| 694 | 593 | } |
| 695 | 594 | #endif |
| 696 | 595 | |
| 596 | +/* regset get/set implementations */ | |
| 597 | + | |
| 598 | +static int gpr_get(struct task_struct *target, | |
| 599 | + const struct user_regset *regset, | |
| 600 | + unsigned int pos, unsigned int count, | |
| 601 | + void *kbuf, void __user *ubuf) | |
| 602 | +{ | |
| 603 | + struct pt_regs *regs = task_pt_regs(target); | |
| 604 | + | |
| 605 | + return user_regset_copyout(&pos, &count, &kbuf, &ubuf, | |
| 606 | + regs, | |
| 607 | + 0, sizeof(*regs)); | |
| 608 | +} | |
| 609 | + | |
| 610 | +static int gpr_set(struct task_struct *target, | |
| 611 | + const struct user_regset *regset, | |
| 612 | + unsigned int pos, unsigned int count, | |
| 613 | + const void *kbuf, const void __user *ubuf) | |
| 614 | +{ | |
| 615 | + int ret; | |
| 616 | + struct pt_regs newregs; | |
| 617 | + | |
| 618 | + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, | |
| 619 | + &newregs, | |
| 620 | + 0, sizeof(newregs)); | |
| 621 | + if (ret) | |
| 622 | + return ret; | |
| 623 | + | |
| 624 | + if (!valid_user_regs(&newregs)) | |
| 625 | + return -EINVAL; | |
| 626 | + | |
| 627 | + *task_pt_regs(target) = newregs; | |
| 628 | + return 0; | |
| 629 | +} | |
| 630 | + | |
| 631 | +static int fpa_get(struct task_struct *target, | |
| 632 | + const struct user_regset *regset, | |
| 633 | + unsigned int pos, unsigned int count, | |
| 634 | + void *kbuf, void __user *ubuf) | |
| 635 | +{ | |
| 636 | + return user_regset_copyout(&pos, &count, &kbuf, &ubuf, | |
| 637 | + &task_thread_info(target)->fpstate, | |
| 638 | + 0, sizeof(struct user_fp)); | |
| 639 | +} | |
| 640 | + | |
| 641 | +static int fpa_set(struct task_struct *target, | |
| 642 | + const struct user_regset *regset, | |
| 643 | + unsigned int pos, unsigned int count, | |
| 644 | + const void *kbuf, const void __user *ubuf) | |
| 645 | +{ | |
| 646 | + struct thread_info *thread = task_thread_info(target); | |
| 647 | + | |
| 648 | + thread->used_cp[1] = thread->used_cp[2] = 1; | |
| 649 | + | |
| 650 | + return user_regset_copyin(&pos, &count, &kbuf, &ubuf, | |
| 651 | + &thread->fpstate, | |
| 652 | + 0, sizeof(struct user_fp)); | |
| 653 | +} | |
| 654 | + | |
| 655 | +#ifdef CONFIG_VFP | |
| 656 | +/* | |
| 657 | + * VFP register get/set implementations. | |
| 658 | + * | |
| 659 | + * With respect to the kernel, struct user_fp is divided into three chunks: | |
| 660 | + * 16 or 32 real VFP registers (d0-d15 or d0-31) | |
| 661 | + * These are transferred to/from the real registers in the task's | |
| 662 | + * vfp_hard_struct. The number of registers depends on the kernel | |
| 663 | + * configuration. | |
| 664 | + * | |
| 665 | + * 16 or 0 fake VFP registers (d16-d31 or empty) | |
| 666 | + * i.e., the user_vfp structure has space for 32 registers even if | |
| 667 | + * the kernel doesn't have them all. | |
| 668 | + * | |
| 669 | + * vfp_get() reads this chunk as zero where applicable | |
| 670 | + * vfp_set() ignores this chunk | |
| 671 | + * | |
| 672 | + * 1 word for the FPSCR | |
| 673 | + * | |
| 674 | + * The bounds-checking logic built into user_regset_copyout and friends | |
| 675 | + * means that we can make a simple sequence of calls to map the relevant data | |
| 676 | + * to/from the specified slice of the user regset structure. | |
| 677 | + */ | |
| 678 | +static int vfp_get(struct task_struct *target, | |
| 679 | + const struct user_regset *regset, | |
| 680 | + unsigned int pos, unsigned int count, | |
| 681 | + void *kbuf, void __user *ubuf) | |
| 682 | +{ | |
| 683 | + int ret; | |
| 684 | + struct thread_info *thread = task_thread_info(target); | |
| 685 | + struct vfp_hard_struct const *vfp = &thread->vfpstate.hard; | |
| 686 | + const size_t user_fpregs_offset = offsetof(struct user_vfp, fpregs); | |
| 687 | + const size_t user_fpscr_offset = offsetof(struct user_vfp, fpscr); | |
| 688 | + | |
| 689 | + vfp_sync_hwstate(thread); | |
| 690 | + | |
| 691 | + ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, | |
| 692 | + &vfp->fpregs, | |
| 693 | + user_fpregs_offset, | |
| 694 | + user_fpregs_offset + sizeof(vfp->fpregs)); | |
| 695 | + if (ret) | |
| 696 | + return ret; | |
| 697 | + | |
| 698 | + ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf, | |
| 699 | + user_fpregs_offset + sizeof(vfp->fpregs), | |
| 700 | + user_fpscr_offset); | |
| 701 | + if (ret) | |
| 702 | + return ret; | |
| 703 | + | |
| 704 | + return user_regset_copyout(&pos, &count, &kbuf, &ubuf, | |
| 705 | + &vfp->fpscr, | |
| 706 | + user_fpscr_offset, | |
| 707 | + user_fpscr_offset + sizeof(vfp->fpscr)); | |
| 708 | +} | |
| 709 | + | |
| 710 | +/* | |
| 711 | + * For vfp_set() a read-modify-write is done on the VFP registers, | |
| 712 | + * in order to avoid writing back a half-modified set of registers on | |
| 713 | + * failure. | |
| 714 | + */ | |
| 715 | +static int vfp_set(struct task_struct *target, | |
| 716 | + const struct user_regset *regset, | |
| 717 | + unsigned int pos, unsigned int count, | |
| 718 | + const void *kbuf, const void __user *ubuf) | |
| 719 | +{ | |
| 720 | + int ret; | |
| 721 | + struct thread_info *thread = task_thread_info(target); | |
| 722 | + struct vfp_hard_struct new_vfp = thread->vfpstate.hard; | |
| 723 | + const size_t user_fpregs_offset = offsetof(struct user_vfp, fpregs); | |
| 724 | + const size_t user_fpscr_offset = offsetof(struct user_vfp, fpscr); | |
| 725 | + | |
| 726 | + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, | |
| 727 | + &new_vfp.fpregs, | |
| 728 | + user_fpregs_offset, | |
| 729 | + user_fpregs_offset + sizeof(new_vfp.fpregs)); | |
| 730 | + if (ret) | |
| 731 | + return ret; | |
| 732 | + | |
| 733 | + ret = user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf, | |
| 734 | + user_fpregs_offset + sizeof(new_vfp.fpregs), | |
| 735 | + user_fpscr_offset); | |
| 736 | + if (ret) | |
| 737 | + return ret; | |
| 738 | + | |
| 739 | + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, | |
| 740 | + &new_vfp.fpscr, | |
| 741 | + user_fpscr_offset, | |
| 742 | + user_fpscr_offset + sizeof(new_vfp.fpscr)); | |
| 743 | + if (ret) | |
| 744 | + return ret; | |
| 745 | + | |
| 746 | + vfp_sync_hwstate(thread); | |
| 747 | + thread->vfpstate.hard = new_vfp; | |
| 748 | + vfp_flush_hwstate(thread); | |
| 749 | + | |
| 750 | + return 0; | |
| 751 | +} | |
| 752 | +#endif /* CONFIG_VFP */ | |
| 753 | + | |
| 754 | +enum arm_regset { | |
| 755 | + REGSET_GPR, | |
| 756 | + REGSET_FPR, | |
| 757 | +#ifdef CONFIG_VFP | |
| 758 | + REGSET_VFP, | |
| 759 | +#endif | |
| 760 | +}; | |
| 761 | + | |
| 762 | +static const struct user_regset arm_regsets[] = { | |
| 763 | + [REGSET_GPR] = { | |
| 764 | + .core_note_type = NT_PRSTATUS, | |
| 765 | + .n = ELF_NGREG, | |
| 766 | + .size = sizeof(u32), | |
| 767 | + .align = sizeof(u32), | |
| 768 | + .get = gpr_get, | |
| 769 | + .set = gpr_set | |
| 770 | + }, | |
| 771 | + [REGSET_FPR] = { | |
| 772 | + /* | |
| 773 | + * For the FPA regs in fpstate, the real fields are a mixture | |
| 774 | + * of sizes, so pretend that the registers are word-sized: | |
| 775 | + */ | |
| 776 | + .core_note_type = NT_PRFPREG, | |
| 777 | + .n = sizeof(struct user_fp) / sizeof(u32), | |
| 778 | + .size = sizeof(u32), | |
| 779 | + .align = sizeof(u32), | |
| 780 | + .get = fpa_get, | |
| 781 | + .set = fpa_set | |
| 782 | + }, | |
| 783 | +#ifdef CONFIG_VFP | |
| 784 | + [REGSET_VFP] = { | |
| 785 | + /* | |
| 786 | + * Pretend that the VFP regs are word-sized, since the FPSCR is | |
| 787 | + * a single word dangling at the end of struct user_vfp: | |
| 788 | + */ | |
| 789 | + .core_note_type = NT_ARM_VFP, | |
| 790 | + .n = ARM_VFPREGS_SIZE / sizeof(u32), | |
| 791 | + .size = sizeof(u32), | |
| 792 | + .align = sizeof(u32), | |
| 793 | + .get = vfp_get, | |
| 794 | + .set = vfp_set | |
| 795 | + }, | |
| 796 | +#endif /* CONFIG_VFP */ | |
| 797 | +}; | |
| 798 | + | |
| 799 | +static const struct user_regset_view user_arm_view = { | |
| 800 | + .name = "arm", .e_machine = ELF_ARCH, .ei_osabi = ELF_OSABI, | |
| 801 | + .regsets = arm_regsets, .n = ARRAY_SIZE(arm_regsets) | |
| 802 | +}; | |
| 803 | + | |
| 804 | +const struct user_regset_view *task_user_regset_view(struct task_struct *task) | |
| 805 | +{ | |
| 806 | + return &user_arm_view; | |
| 807 | +} | |
| 808 | + | |
| 697 | 809 | long arch_ptrace(struct task_struct *child, long request, |
| 698 | 810 | unsigned long addr, unsigned long data) |
| 699 | 811 | { |
| @@ -710,19 +822,31 @@ long arch_ptrace(struct task_struct *child, long request, · 10 unmodified lines | ||
| 710 | 822 | break; |
| 711 | 823 | |
| 712 | 824 | case PTRACE_GETREGS: |
| 713 | − ret = ptrace_getregs(child, datap); | |
| 825 | + ret = copy_regset_to_user(child, | |
| 826 | + &user_arm_view, REGSET_GPR, | |
| 827 | + 0, sizeof(struct pt_regs), | |
| 828 | + datap); | |
| 714 | 829 | break; |
| 715 | 830 | |
| 716 | 831 | case PTRACE_SETREGS: |
| 717 | − ret = ptrace_setregs(child, datap); | |
| 832 | + ret = copy_regset_from_user(child, | |
| 833 | + &user_arm_view, REGSET_GPR, | |
| 834 | + 0, sizeof(struct pt_regs), | |
| 835 | + datap); | |
| 718 | 836 | break; |
| 719 | 837 | |
| 720 | 838 | case PTRACE_GETFPREGS: |
| 721 | − ret = ptrace_getfpregs(child, datap); | |
| 839 | + ret = copy_regset_to_user(child, | |
| 840 | + &user_arm_view, REGSET_FPR, | |
| 841 | + 0, sizeof(union fp_state), | |
| 842 | + datap); | |
| 722 | 843 | break; |
| 723 | − | |
| 844 | + | |
| 724 | 845 | case PTRACE_SETFPREGS: |
| 725 | − ret = ptrace_setfpregs(child, datap); | |
| 846 | + ret = copy_regset_from_user(child, | |
| 847 | + &user_arm_view, REGSET_FPR, | |
| 848 | + 0, sizeof(union fp_state), | |
| 849 | + datap); | |
| 726 | 850 | break; |
| 727 | 851 | |
| 728 | 852 | #ifdef CONFIG_IWMMXT |
| @@ -757,22 +881,36 @@ long arch_ptrace(struct task_struct *child, long request, · 28 unmodified lines | ||
| 757 | 881 | |
| 758 | 882 | #ifdef CONFIG_VFP |
| 759 | 883 | case PTRACE_GETVFPREGS: |
| 760 | − ret = ptrace_getvfpregs(child, datap); | |
| 884 | + ret = copy_regset_to_user(child, | |
| 885 | + &user_arm_view, REGSET_VFP, | |
| 886 | + 0, ARM_VFPREGS_SIZE, | |
| 887 | + datap); | |
| 761 | 888 | break; |
| 762 | 889 | |
| 763 | 890 | case PTRACE_SETVFPREGS: |
| 764 | − ret = ptrace_setvfpregs(child, datap); | |
| 891 | + ret = copy_regset_from_user(child, | |
| 892 | + &user_arm_view, REGSET_VFP, | |
| 893 | + 0, ARM_VFPREGS_SIZE, | |
| 894 | + datap); | |
| 765 | 895 | break; |
| 766 | 896 | #endif |
| 767 | 897 | |
| 768 | 898 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
| 769 | 899 | case PTRACE_GETHBPREGS: |
| 900 | + if (ptrace_get_breakpoints(child) < 0) | |
| 901 | + return -ESRCH; | |
| 902 | + | |
| 770 | 903 | ret = ptrace_gethbpregs(child, addr, |
| 771 | 904 | (unsigned long __user *)data); |
| 905 | + ptrace_put_breakpoints(child); | |
| 772 | 906 | break; |
| 773 | 907 | case PTRACE_SETHBPREGS: |
| 908 | + if (ptrace_get_breakpoints(child) < 0) | |
| 909 | + return -ESRCH; | |
| 910 | + | |
| 774 | 911 | ret = ptrace_sethbpregs(child, addr, |
| 775 | 912 | (unsigned long __user *)data); |
| 913 | + ptrace_put_breakpoints(child); | |
| 776 | 914 | break; |
| 777 | 915 | #endif |
| 778 | 916 | |
| @@ -20,6 +20,7 @@ · 19 unmodified lines | ||
| 20 | 20 | #include <linux/screen_info.h> |
| 21 | 21 | #include <linux/init.h> |
| 22 | 22 | #include <linux/kexec.h> |
| 23 | +#include <linux/of_fdt.h> | |
| 23 | 24 | #include <linux/crash_dump.h> |
| 24 | 25 | #include <linux/root_dev.h> |
| 25 | 26 | #include <linux/cpu.h> |
| @@ -42,6 +43,7 @@ · 16 unmodified lines | ||
| 42 | 43 | #include <asm/cachetype.h> |
| 43 | 44 | #include <asm/tlbflush.h> |
| 44 | 45 | |
| 46 | +#include <asm/prom.h> | |
| 45 | 47 | #include <asm/mach/arch.h> |
| 46 | 48 | #include <asm/mach/irq.h> |
| 47 | 49 | #include <asm/mach/time.h> |
| @@ -309,7 +311,7 @@ static void __init cacheid_init(void) · 261 unmodified lines | ||
| 309 | 311 | */ |
| 310 | 312 | extern struct proc_info_list *lookup_processor_type(unsigned int); |
| 311 | 313 | |
| 312 | −static void __init early_print(const char *str, ...) | |
| 314 | +void __init early_print(const char *str, ...) | |
| 313 | 315 | { |
| 314 | 316 | extern void printascii(const char *); |
| 315 | 317 | char buf[256]; |
| @@ -439,25 +441,12 @@ void cpu_init(void) · 123 unmodified lines | ||
| 439 | 441 | : "r14"); |
| 440 | 442 | } |
| 441 | 443 | |
| 442 | −static struct machine_desc * __init setup_machine(unsigned int nr) | |
| 444 | +void __init dump_machine_table(void) | |
| 443 | 445 | { |
| 444 | − extern struct machine_desc __arch_info_begin[], __arch_info_end[]; | |
| 445 | 446 | struct machine_desc *p; |
| 446 | 447 | |
| 447 | − /* | |
| 448 | − * locate machine in the list of supported machines. | |
| 449 | − */ | |
| 450 | − for (p = __arch_info_begin; p < __arch_info_end; p++) | |
| 451 | − if (nr == p->nr) { | |
| 452 | − printk("Machine: %s\n", p->name); | |
| 453 | − return p; | |
| 454 | − } | |
| 455 | − | |
| 456 | − early_print("\n" | |
| 457 | − "Error: unrecognized/unsupported machine ID (r1 = 0x%08x).\n\n" | |
| 458 | − "Available machine support:\n\nID (hex)\tNAME\n", nr); | |
| 459 | − | |
| 460 | − for (p = __arch_info_begin; p < __arch_info_end; p++) | |
| 448 | + early_print("Available machine support:\n\nID (hex)\tNAME\n"); | |
| 449 | + for_each_machine_desc(p) | |
| 461 | 450 | early_print("%08x\t%s\n", p->nr, p->name); |
| 462 | 451 | |
| 463 | 452 | early_print("\nPlease check your kernel config and/or bootloader.\n"); |
| @@ -466,7 +455,7 @@ static struct machine_desc * __init setup_machine(unsigned int nr) · 2 unmodified lines | ||
| 466 | 455 | /* can't use cpu_relax() here as it may require MMU setup */; |
| 467 | 456 | } |
| 468 | 457 | |
| 469 | −static int __init arm_add_memory(phys_addr_t start, unsigned long size) | |
| 458 | +int __init arm_add_memory(phys_addr_t start, unsigned long size) | |
| 470 | 459 | { |
| 471 | 460 | struct membank *bank = &meminfo.bank[meminfo.nr_banks]; |
| 472 | 461 | |
| @@ -672,11 +661,16 @@ __tagtable(ATAG_REVISION, parse_tag_revision); · 199 unmodified lines | ||
| 672 | 661 | |
| 673 | 662 | static int __init parse_tag_cmdline(const struct tag *tag) |
| 674 | 663 | { |
| 675 | −#ifndef CONFIG_CMDLINE_FORCE | |
| 676 | − strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE); | |
| 677 | −#else | |
| 664 | +#if defined(CONFIG_CMDLINE_EXTEND) | |
| 665 | + strlcat(default_command_line, " ", COMMAND_LINE_SIZE); | |
| 666 | + strlcat(default_command_line, tag->u.cmdline.cmdline, | |
| 667 | + COMMAND_LINE_SIZE); | |
| 668 | +#elif defined(CONFIG_CMDLINE_FORCE) | |
| 678 | 669 | pr_warning("Ignoring tag cmdline (using the default kernel command line)\n"); |
| 679 | −#endif /* CONFIG_CMDLINE_FORCE */ | |
| 670 | +#else | |
| 671 | + strlcpy(default_command_line, tag->u.cmdline.cmdline, | |
| 672 | + COMMAND_LINE_SIZE); | |
| 673 | +#endif | |
| 680 | 674 | return 0; |
| 681 | 675 | } |
| 682 | 676 | |
| @@ -796,23 +790,29 @@ static void __init squash_mem_tags(struct tag *tag) · 113 unmodified lines | ||
| 796 | 790 | tag->hdr.tag = ATAG_NONE; |
| 797 | 791 | } |
| 798 | 792 | |
| 799 | −void __init setup_arch(char **cmdline_p) | |
| 793 | +static struct machine_desc * __init setup_machine_tags(unsigned int nr) | |
| 800 | 794 | { |
| 801 | 795 | struct tag *tags = (struct tag *)&init_tags; |
| 802 | − struct machine_desc *mdesc; | |
| 796 | + struct machine_desc *mdesc = NULL, *p; | |
| 803 | 797 | char *from = default_command_line; |
| 804 | 798 | |
| 805 | 799 | init_tags.mem.start = PHYS_OFFSET; |
| 806 | 800 | |
| 807 | − unwind_init(); | |
| 808 | − | |
| 809 | − setup_processor(); | |
| 810 | − mdesc = setup_machine(machine_arch_type); | |
| 811 | − machine_desc = mdesc; | |
| 812 | − machine_name = mdesc->name; | |
| 801 | + /* | |
| 802 | + * locate machine in the list of supported machines. | |
| 803 | + */ | |
| 804 | + for_each_machine_desc(p) | |
| 805 | + if (nr == p->nr) { | |
| 806 | + printk("Machine: %s\n", p->name); | |
| 807 | + mdesc = p; | |
| 808 | + break; | |
| 809 | + } | |
| 813 | 810 | |
| 814 | − if (mdesc->soft_reboot) | |
| 815 | − reboot_setup("s"); | |
| 811 | + if (!mdesc) { | |
| 812 | + early_print("\nError: unrecognized/unsupported machine ID" | |
| 813 | + " (r1 = 0x%08x).\n\n", nr); | |
| 814 | + dump_machine_table(); /* does not return */ | |
| 815 | + } | |
| 816 | 816 | |
| 817 | 817 | if (__atags_pointer) |
| 818 | 818 | tags = phys_to_virt(__atags_pointer); |
| @@ -844,8 +844,17 @@ void __init setup_arch(char **cmdline_p) · 25 unmodified lines | ||
| 844 | 844 | if (tags->hdr.tag != ATAG_CORE) |
| 845 | 845 | convert_to_tag_list(tags); |
| 846 | 846 | #endif |
| 847 | − if (tags->hdr.tag != ATAG_CORE) | |
| 847 | + | |
| 848 | + if (tags->hdr.tag != ATAG_CORE) { | |
| 849 | +#if defined(CONFIG_OF) | |
| 850 | + /* | |
| 851 | + * If CONFIG_OF is set, then assume this is a reasonably | |
| 852 | + * modern system that should pass boot parameters | |
| 853 | + */ | |
| 854 | + early_print("Warning: Neither atags nor dtb found\n"); | |
| 855 | +#endif | |
| 848 | 856 | tags = (struct tag *)&init_tags; |
| 857 | + } | |
| 849 | 858 | |
| 850 | 859 | if (mdesc->fixup) |
| 851 | 860 | mdesc->fixup(mdesc, tags, &from, &meminfo); |
| @@ -857,14 +866,34 @@ void __init setup_arch(char **cmdline_p) · 5 unmodified lines | ||
| 857 | 866 | parse_tags(tags); |
| 858 | 867 | } |
| 859 | 868 | |
| 869 | + /* parse_early_param needs a boot_command_line */ | |
| 870 | + strlcpy(boot_command_line, from, COMMAND_LINE_SIZE); | |
| 871 | + | |
| 872 | + return mdesc; | |
| 873 | +} | |
| 874 | + | |
| 875 | + | |
| 876 | +void __init setup_arch(char **cmdline_p) | |
| 877 | +{ | |
| 878 | + struct machine_desc *mdesc; | |
| 879 | + | |
| 880 | + unwind_init(); | |
| 881 | + | |
| 882 | + setup_processor(); | |
| 883 | + mdesc = setup_machine_fdt(__atags_pointer); | |
| 884 | + if (!mdesc) | |
| 885 | + mdesc = setup_machine_tags(machine_arch_type); | |
| 886 | + machine_desc = mdesc; | |
| 887 | + machine_name = mdesc->name; | |
| 888 | + | |
| 889 | + if (mdesc->soft_reboot) | |
| 890 | + reboot_setup("s"); | |
| 891 | + | |
| 860 | 892 | init_mm.start_code = (unsigned long) _text; |
| 861 | 893 | init_mm.end_code = (unsigned long) _etext; |
| 862 | 894 | init_mm.end_data = (unsigned long) _edata; |
| 863 | 895 | init_mm.brk = (unsigned long) _end; |
| 864 | 896 | |
| 865 | − /* parse_early_param needs a boot_command_line */ | |
| 866 | − strlcpy(boot_command_line, from, COMMAND_LINE_SIZE); | |
| 867 | − | |
| 868 | 897 | /* populate cmd_line too for later use, preserving boot_command_line */ |
| 869 | 898 | strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE); |
| 870 | 899 | *cmdline_p = cmd_line; |
| @@ -876,6 +905,8 @@ void __init setup_arch(char **cmdline_p) · 5 unmodified lines | ||
| 876 | 905 | paging_init(mdesc); |
| 877 | 906 | request_standard_resources(mdesc); |
| 878 | 907 | |
| 908 | + unflatten_device_tree(); | |
| 909 | + | |
| 879 | 910 | #ifdef CONFIG_SMP |
| 880 | 911 | if (is_smp()) |
| 881 | 912 | smp_init_cpus(); |
| @@ -597,45 +597,19 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, · 596 unmodified lines | ||
| 597 | 597 | return err; |
| 598 | 598 | } |
| 599 | 599 | |
| 600 | −static inline void setup_syscall_restart(struct pt_regs *regs) | |
| 601 | −{ | |
| 602 | − regs->ARM_r0 = regs->ARM_ORIG_r0; | |
| 603 | − regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; | |
| 604 | −} | |
| 605 | − | |
| 606 | 600 | /* |
| 607 | 601 | * OK, we're invoking a handler |
| 608 | 602 | */ |
| 609 | 603 | static int |
| 610 | 604 | handle_signal(unsigned long sig, struct k_sigaction *ka, |
| 611 | 605 | siginfo_t *info, sigset_t *oldset, |
| 612 | − struct pt_regs * regs, int syscall) | |
| 606 | + struct pt_regs * regs) | |
| 613 | 607 | { |
| 614 | 608 | struct thread_info *thread = current_thread_info(); |
| 615 | 609 | struct task_struct *tsk = current; |
| 616 | 610 | int usig = sig; |
| 617 | 611 | int ret; |
| 618 | 612 | |
| 619 | − /* | |
| 620 | − * If we were from a system call, check for system call restarting... | |
| 621 | − */ | |
| 622 | − if (syscall) { | |
| 623 | − switch (regs->ARM_r0) { | |
| 624 | − case -ERESTART_RESTARTBLOCK: | |
| 625 | − case -ERESTARTNOHAND: | |
| 626 | − regs->ARM_r0 = -EINTR; | |
| 627 | − break; | |
| 628 | − case -ERESTARTSYS: | |
| 629 | − if (!(ka->sa.sa_flags & SA_RESTART)) { | |
| 630 | − regs->ARM_r0 = -EINTR; | |
| 631 | − break; | |
| 632 | − } | |
| 633 | − /* fallthrough */ | |
| 634 | − case -ERESTARTNOINTR: | |
| 635 | − setup_syscall_restart(regs); | |
| 636 | − } | |
| 637 | − } | |
| 638 | − | |
| 639 | 613 | /* |
| 640 | 614 | * translate the signal |
| 641 | 615 | */ |
| @@ -685,6 +659,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, · 43 unmodified lines | ||
| 685 | 659 | */ |
| 686 | 660 | static void do_signal(struct pt_regs *regs, int syscall) |
| 687 | 661 | { |
| 662 | + unsigned int retval = 0, continue_addr = 0, restart_addr = 0; | |
| 688 | 663 | struct k_sigaction ka; |
| 689 | 664 | siginfo_t info; |
| 690 | 665 | int signr; |
| @@ -698,18 +673,61 @@ static void do_signal(struct pt_regs *regs, int syscall) · 7 unmodified lines | ||
| 698 | 673 | if (!user_mode(regs)) |
| 699 | 674 | return; |
| 700 | 675 | |
| 676 | + /* | |
| 677 | + * If we were from a system call, check for system call restarting... | |
| 678 | + */ | |
| 679 | + if (syscall) { | |
| 680 | + continue_addr = regs->ARM_pc; | |
| 681 | + restart_addr = continue_addr - (thumb_mode(regs) ? 2 : 4); | |
| 682 | + retval = regs->ARM_r0; | |
| 683 | + | |
| 684 | + /* | |
| 685 | + * Prepare for system call restart. We do this here so that a | |
| 686 | + * debugger will see the already changed PSW. | |
| 687 | + */ | |
| 688 | + switch (retval) { | |
| 689 | + case -ERESTARTNOHAND: | |
| 690 | + case -ERESTARTSYS: | |
| 691 | + case -ERESTARTNOINTR: | |
| 692 | + regs->ARM_r0 = regs->ARM_ORIG_r0; | |
| 693 | + regs->ARM_pc = restart_addr; | |
| 694 | + break; | |
| 695 | + case -ERESTART_RESTARTBLOCK: | |
| 696 | + regs->ARM_r0 = -EINTR; | |
| 697 | + break; | |
| 698 | + } | |
| 699 | + } | |
| 700 | + | |
| 701 | 701 | if (try_to_freeze()) |
| 702 | 702 | goto no_signal; |
| 703 | 703 | |
| 704 | + /* | |
| 705 | + * Get the signal to deliver. When running under ptrace, at this | |
| 706 | + * point the debugger may change all our registers ... | |
| 707 | + */ | |
| 704 | 708 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
| 705 | 709 | if (signr > 0) { |
| 706 | 710 | sigset_t *oldset; |
| 707 | 711 | |
| 712 | + /* | |
| 713 | + * Depending on the signal settings we may need to revert the | |
| 714 | + * decision to restart the system call. But skip this if a | |
| 715 | + * debugger has chosen to restart at a different PC. | |
| 716 | + */ | |
| 717 | + if (regs->ARM_pc == restart_addr) { | |
| 718 | + if (retval == -ERESTARTNOHAND | |
| 719 | + || (retval == -ERESTARTSYS | |
| 720 | + && !(ka.sa.sa_flags & SA_RESTART))) { | |
| 721 | + regs->ARM_r0 = -EINTR; | |
| 722 | + regs->ARM_pc = continue_addr; | |
| 723 | + } | |
| 724 | + } | |
| 725 | + | |
| 708 | 726 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) |
| 709 | 727 | oldset = ¤t->saved_sigmask; |
| 710 | 728 | else |
| 711 | 729 | oldset = ¤t->blocked; |
| 712 | − if (handle_signal(signr, &ka, &info, oldset, regs, syscall) == 0) { | |
| 730 | + if (handle_signal(signr, &ka, &info, oldset, regs) == 0) { | |
| 713 | 731 | /* |
| 714 | 732 | * A signal was successfully delivered; the saved |
| 715 | 733 | * sigmask will have been stored in the signal frame, |
| @@ -723,11 +741,14 @@ static void do_signal(struct pt_regs *regs, int syscall) · 7 unmodified lines | ||
| 723 | 741 | } |
| 724 | 742 | |
| 725 | 743 | no_signal: |
| 726 | − /* | |
| 727 | − * No signal to deliver to the process - restart the syscall. | |
| 728 | − */ | |
| 729 | 744 | if (syscall) { |
| 730 | − if (regs->ARM_r0 == -ERESTART_RESTARTBLOCK) { | |
| 745 | + /* | |
| 746 | + * Handle restarting a different system call. As above, | |
| 747 | + * if a debugger has chosen to restart at a different PC, | |
| 748 | + * ignore the restart. | |
| 749 | + */ | |
| 750 | + if (retval == -ERESTART_RESTARTBLOCK | |
| 751 | + && regs->ARM_pc == continue_addr) { | |
| 731 | 752 | if (thumb_mode(regs)) { |
| 732 | 753 | regs->ARM_r7 = __NR_restart_syscall - __NR_SYSCALL_BASE; |
| 733 | 754 | regs->ARM_pc -= 2; |
| @@ -750,11 +771,6 @@ static void do_signal(struct pt_regs *regs, int syscall) · 16 unmodified lines | ||
| 750 | 771 | #endif |
| 751 | 772 | } |
| 752 | 773 | } |
| 753 | − if (regs->ARM_r0 == -ERESTARTNOHAND || | |
| 754 | − regs->ARM_r0 == -ERESTARTSYS || | |
| 755 | − regs->ARM_r0 == -ERESTARTNOINTR) { | |
| 756 | − setup_syscall_restart(regs); | |
| 757 | − } | |
| 758 | 774 | |
| 759 | 775 | /* If there's no signal to deliver, we just put the saved sigmask |
| 760 | 776 | * back. |
| @@ -119,11 +119,19 @@ ENTRY(cpu_resume) · 118 unmodified lines | ||
| 119 | 119 | #else |
| 120 | 120 | ldr r0, sleep_save_sp @ stack phys addr |
| 121 | 121 | #endif |
| 122 | − msr cpsr_c, #PSR_I_BIT | PSR_F_BIT | SVC_MODE @ set SVC, irqs off | |
| 122 | + setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1 @ set SVC, irqs off | |
| 123 | 123 | #ifdef MULTI_CPU |
| 124 | − ldmia r0!, {r1, sp, lr, pc} @ load v:p, stack, return fn, resume fn | |
| 124 | + @ load v:p, stack, return fn, resume fn | |
| 125 | + ARM( ldmia r0!, {r1, sp, lr, pc} ) | |
| 126 | +THUMB( ldmia r0!, {r1, r2, r3, r4} ) | |
| 127 | +THUMB( mov sp, r2 ) | |
| 128 | +THUMB( mov lr, r3 ) | |
| 129 | +THUMB( bx r4 ) | |
| 125 | 130 | #else |
| 126 | − ldmia r0!, {r1, sp, lr} @ load v:p, stack, return fn | |
| 131 | + @ load v:p, stack, return fn | |
| 132 | + ARM( ldmia r0!, {r1, sp, lr} ) | |
| 133 | +THUMB( ldmia r0!, {r1, r2, lr} ) | |
| 134 | +THUMB( mov sp, r2 ) | |
| 127 | 135 | b cpu_do_resume |
| 128 | 136 | #endif |
| 129 | 137 | ENDPROC(cpu_resume) |
| @@ -105,6 +105,7 @@ int __cpuinit __cpu_up(unsigned int cpu) · 104 unmodified lines | ||
| 105 | 105 | */ |
| 106 | 106 | secondary_data.stack = task_stack_page(idle) + THREAD_START_SP; |
| 107 | 107 | secondary_data.pgdir = virt_to_phys(pgd); |
| 108 | + secondary_data.swapper_pg_dir = virt_to_phys(swapper_pg_dir); | |
| 108 | 109 | __cpuc_flush_dcache_area(&secondary_data, sizeof(secondary_data)); |
| 109 | 110 | outer_clean_range(__pa(&secondary_data), __pa(&secondary_data + 1)); |
| 110 | 111 | |
| @@ -376,6 +377,13 @@ void __init smp_prepare_cpus(unsigned int max_cpus) · 265 unmodified lines | ||
| 376 | 377 | } |
| 377 | 378 | } |
| 378 | 379 | |
| 380 | +static void (*smp_cross_call)(const struct cpumask *, unsigned int); | |
| 381 | + | |
| 382 | +void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int)) | |
| 383 | +{ | |
| 384 | + smp_cross_call = fn; | |
| 385 | +} | |
| 386 | + | |
| 379 | 387 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) |
| 380 | 388 | { |
| 381 | 389 | smp_cross_call(mask, IPI_CALL_FUNC); |
| @@ -479,7 +487,7 @@ static void broadcast_timer_set_mode(enum clock_event_mode mode, · 97 unmodified lines | ||
| 479 | 487 | { |
| 480 | 488 | } |
| 481 | 489 | |
| 482 | −static void broadcast_timer_setup(struct clock_event_device *evt) | |
| 490 | +static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt) | |
| 483 | 491 | { |
| 484 | 492 | evt->name = "dummy_timer"; |
| 485 | 493 | evt->features = CLOCK_EVT_FEAT_ONESHOT | |
| @@ -560,10 +568,7 @@ asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs) · 74 unmodified lines | ||
| 560 | 568 | break; |
| 561 | 569 | |
| 562 | 570 | case IPI_RESCHEDULE: |
| 563 | − /* | |
| 564 | − * nothing more to do - eveything is | |
| 565 | − * done on the interrupt return path | |
| 566 | − */ | |
| 571 | + scheduler_ipi(); | |
| 567 | 572 | break; |
| 568 | 573 | |
| 569 | 574 | case IPI_CALL_FUNC: |
| @@ -158,7 +158,7 @@ static int emulate_swpX(unsigned int address, unsigned int *data, · 157 unmodified lines | ||
| 158 | 158 | |
| 159 | 159 | if (res == 0) { |
| 160 | 160 | /* |
| 161 | − * Barrier also required between aquiring a lock for a | |
| 161 | + * Barrier also required between acquiring a lock for a | |
| 162 | 162 | * protected resource and accessing the resource. Inserted for |
| 163 | 163 | * same reason as above. |
| 164 | 164 | */ |
| @@ -311,7 +311,7 @@ asmlinkage long sys_oabi_semtimedop(int semid, · 310 unmodified lines | ||
| 311 | 311 | long err; |
| 312 | 312 | int i; |
| 313 | 313 | |
| 314 | − if (nsops < 1) | |
| 314 | + if (nsops < 1 || nsops > SEMOPM) | |
| 315 | 315 | return -EINVAL; |
| 316 | 316 | sops = kmalloc(sizeof(*sops) * nsops, GFP_KERNEL); |
| 317 | 317 | if (!sops) |
| @@ -21,7 +21,7 @@ · 20 unmodified lines | ||
| 21 | 21 | #include <linux/timex.h> |
| 22 | 22 | #include <linux/errno.h> |
| 23 | 23 | #include <linux/profile.h> |
| 24 | −#include <linux/sysdev.h> | |
| 24 | +#include <linux/syscore_ops.h> | |
| 25 | 25 | #include <linux/timer.h> |
| 26 | 26 | #include <linux/irq.h> |
| 27 | 27 | |
| @@ -115,48 +115,37 @@ void timer_tick(void) · 87 unmodified lines | ||
| 115 | 115 | #endif |
| 116 | 116 | |
| 117 | 117 | #if defined(CONFIG_PM) && !defined(CONFIG_GENERIC_CLOCKEVENTS) |
| 118 | −static int timer_suspend(struct sys_device *dev, pm_message_t state) | |
| 118 | +static int timer_suspend(void) | |
| 119 | 119 | { |
| 120 | − struct sys_timer *timer = container_of(dev, struct sys_timer, dev); | |
| 121 | − | |
| 122 | − if (timer->suspend != NULL) | |
| 123 | − timer->suspend(); | |
| 120 | + if (system_timer->suspend) | |
| 121 | + system_timer->suspend(); | |
| 124 | 122 | |
| 125 | 123 | return 0; |
| 126 | 124 | } |
| 127 | 125 | |
| 128 | −static int timer_resume(struct sys_device *dev) | |
| 126 | +static void timer_resume(void) | |
| 129 | 127 | { |
| 130 | − struct sys_timer *timer = container_of(dev, struct sys_timer, dev); | |
| 131 | − | |
| 132 | − if (timer->resume != NULL) | |
| 133 | − timer->resume(); | |
| 134 | − | |
| 135 | − return 0; | |
| 128 | + if (system_timer->resume) | |
| 129 | + system_timer->resume(); | |
| 136 | 130 | } |
| 137 | 131 | #else |
| 138 | 132 | #define timer_suspend NULL |
| 139 | 133 | #define timer_resume NULL |
| 140 | 134 | #endif |
| 141 | 135 | |
| 142 | −static struct sysdev_class timer_sysclass = { | |
| 143 | − .name = "timer", | |
| 136 | +static struct syscore_ops timer_syscore_ops = { | |
| 144 | 137 | .suspend = timer_suspend, |
| 145 | 138 | .resume = timer_resume, |
| 146 | 139 | }; |
| 147 | 140 | |
| 148 | −static int __init timer_init_sysfs(void) | |
| 141 | +static int __init timer_init_syscore_ops(void) | |
| 149 | 142 | { |
| 150 | − int ret = sysdev_class_register(&timer_sysclass); | |
| 151 | − if (ret == 0) { | |
| 152 | − system_timer->dev.cls = &timer_sysclass; | |
| 153 | − ret = sysdev_register(&system_timer->dev); | |
| 154 | − } | |
| 143 | + register_syscore_ops(&timer_syscore_ops); | |
| 155 | 144 | |
| 156 | − return ret; | |
| 145 | + return 0; | |
| 157 | 146 | } |
| 158 | 147 | |
| 159 | −device_initcall(timer_init_sysfs); | |
| 148 | +device_initcall(timer_init_syscore_ops); | |
| 160 | 149 | |
| 161 | 150 | void __init time_init(void) |
| 162 | 151 | { |
| @@ -234,7 +234,6 @@ static int __die(const char *str, int err, struct thread_info *thread, struct pt · 233 unmodified lines | ||
| 234 | 234 | |
| 235 | 235 | printk(KERN_EMERG "Internal error: %s: %x [#%d]" S_PREEMPT S_SMP "\n", |
| 236 | 236 | str, err, ++die_counter); |
| 237 | − sysfs_printk_last_file(); | |
| 238 | 237 | |
| 239 | 238 | /* trap and error numbers are mostly meaningless on ARM */ |
| 240 | 239 | ret = notify_die(DIE_OOPS, str, regs, err, tsk->thread.trap_no, SIGSEGV); |
| @@ -410,8 +409,7 @@ static int bad_syscall(int n, struct pt_regs *regs) · 169 unmodified lines | ||
| 410 | 409 | struct thread_info *thread = current_thread_info(); |
| 411 | 410 | siginfo_t info; |
| 412 | 411 | |
| 413 | − if (current->personality != PER_LINUX && | |
| 414 | − current->personality != PER_LINUX_32BIT && | |
| 412 | + if ((current->personality & PER_MASK) != PER_LINUX && | |
| 415 | 413 | thread->exec_domain->handler) { |
| 416 | 414 | thread->exec_domain->handler(n, regs); |
| 417 | 415 | return regs->ARM_r0; |
| @@ -82,7 +82,7 @@ SECTIONS · 81 unmodified lines | ||
| 82 | 82 | #endif |
| 83 | 83 | } |
| 84 | 84 | |
| 85 | − PERCPU(32, PAGE_SIZE) | |
| 85 | + PERCPU_SECTION(32) | |
| 86 | 86 | |
| 87 | 87 | #ifndef CONFIG_XIP_KERNEL |
| 88 | 88 | . = ALIGN(PAGE_SIZE); |
| @@ -35,7 +35,7 @@ Boston, MA 02111-1307, USA. */ · 34 unmodified lines | ||
| 35 | 35 | |
| 36 | 36 | #include <linux/linkage.h> |
| 37 | 37 | #include <asm/assembler.h> |
| 38 | − | |
| 38 | +#include <asm/unwind.h> | |
| 39 | 39 | |
| 40 | 40 | .macro ARM_DIV_BODY dividend, divisor, result, curbit |
| 41 | 41 | |
| @@ -207,6 +207,7 @@ Boston, MA 02111-1307, USA. */ · 165 unmodified lines | ||
| 207 | 207 | |
| 208 | 208 | ENTRY(__udivsi3) |
| 209 | 209 | ENTRY(__aeabi_uidiv) |
| 210 | +UNWIND(.fnstart) | |
| 210 | 211 | |
| 211 | 212 | subs r2, r1, #1 |
| 212 | 213 | moveq pc, lr |
| @@ -230,10 +231,12 @@ ENTRY(__aeabi_uidiv) · 17 unmodified lines | ||
| 230 | 231 | mov r0, r0, lsr r2 |
| 231 | 232 | mov pc, lr |
| 232 | 233 | |
| 234 | +UNWIND(.fnend) | |
| 233 | 235 | ENDPROC(__udivsi3) |
| 234 | 236 | ENDPROC(__aeabi_uidiv) |
| 235 | 237 | |
| 236 | 238 | ENTRY(__umodsi3) |
| 239 | +UNWIND(.fnstart) | |
| 237 | 240 | |
| 238 | 241 | subs r2, r1, #1 @ compare divisor with 1 |
| 239 | 242 | bcc Ldiv0 |
| @@ -247,10 +250,12 @@ ENTRY(__umodsi3) · 7 unmodified lines | ||
| 247 | 250 | |
| 248 | 251 | mov pc, lr |
| 249 | 252 | |
| 253 | +UNWIND(.fnend) | |
| 250 | 254 | ENDPROC(__umodsi3) |
| 251 | 255 | |
| 252 | 256 | ENTRY(__divsi3) |
| 253 | 257 | ENTRY(__aeabi_idiv) |
| 258 | +UNWIND(.fnstart) | |
| 254 | 259 | |
| 255 | 260 | cmp r1, #0 |
| 256 | 261 | eor ip, r0, r1 @ save the sign of the result. |
| @@ -287,10 +292,12 @@ ENTRY(__aeabi_idiv) · 30 unmodified lines | ||
| 287 | 292 | rsbmi r0, r0, #0 |
| 288 | 293 | mov pc, lr |
| 289 | 294 | |
| 295 | +UNWIND(.fnend) | |
| 290 | 296 | ENDPROC(__divsi3) |
| 291 | 297 | ENDPROC(__aeabi_idiv) |
| 292 | 298 | |
| 293 | 299 | ENTRY(__modsi3) |
| 300 | +UNWIND(.fnstart) | |
| 294 | 301 | |
| 295 | 302 | cmp r1, #0 |
| 296 | 303 | beq Ldiv0 |
| @@ -310,11 +317,14 @@ ENTRY(__modsi3) · 13 unmodified lines | ||
| 310 | 317 | rsbmi r0, r0, #0 |
| 311 | 318 | mov pc, lr |
| 312 | 319 | |
| 320 | +UNWIND(.fnend) | |
| 313 | 321 | ENDPROC(__modsi3) |
| 314 | 322 | |
| 315 | 323 | #ifdef CONFIG_AEABI |
| 316 | 324 | |
| 317 | 325 | ENTRY(__aeabi_uidivmod) |
| 326 | +UNWIND(.fnstart) | |
| 327 | +UNWIND(.save {r0, r1, ip, lr} ) | |
| 318 | 328 | |
| 319 | 329 | stmfd sp!, {r0, r1, ip, lr} |
| 320 | 330 | bl __aeabi_uidiv |
| @@ -323,10 +333,12 @@ ENTRY(__aeabi_uidivmod) · 2 unmodified lines | ||
| 323 | 333 | sub r1, r1, r3 |
| 324 | 334 | mov pc, lr |
| 325 | 335 | |
| 336 | +UNWIND(.fnend) | |
| 326 | 337 | ENDPROC(__aeabi_uidivmod) |
| 327 | 338 | |
| 328 | 339 | ENTRY(__aeabi_idivmod) |
| 329 | − | |
| 340 | +UNWIND(.fnstart) | |
| 341 | +UNWIND(.save {r0, r1, ip, lr} ) | |
| 330 | 342 | stmfd sp!, {r0, r1, ip, lr} |
| 331 | 343 | bl __aeabi_idiv |
| 332 | 344 | ldmfd sp!, {r1, r2, ip, lr} |
| @@ -334,15 +346,18 @@ ENTRY(__aeabi_idivmod) · 1 unmodified line | ||
| 334 | 346 | sub r1, r1, r3 |
| 335 | 347 | mov pc, lr |
| 336 | 348 | |
| 349 | +UNWIND(.fnend) | |
| 337 | 350 | ENDPROC(__aeabi_idivmod) |
| 338 | 351 | |
| 339 | 352 | #endif |
| 340 | 353 | |
| 341 | 354 | Ldiv0: |
| 342 | − | |
| 355 | +UNWIND(.fnstart) | |
| 356 | +UNWIND(.pad #4) | |
| 357 | +UNWIND(.save {lr}) | |
| 343 | 358 | str lr, [sp, #-8]! |
| 344 | 359 | bl __div0 |
| 345 | 360 | mov r0, #0 @ About as wrong as it could be. |
| 346 | 361 | ldr pc, [sp], #8 |
| 347 | − | |
| 348 | − | |
| 362 | +UNWIND(.fnend) | |
| 363 | +ENDPROC(Ldiv0) | |
| @@ -3,9 +3,6 @@ if ARCH_AT91 · 2 unmodified lines | ||
| 3 | 3 | config HAVE_AT91_DATAFLASH_CARD |
| 4 | 4 | bool |
| 5 | 5 | |
| 6 | −config HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 7 | − bool | |
| 8 | − | |
| 9 | 6 | config HAVE_AT91_USART3 |
| 10 | 7 | bool |
| 11 | 8 | |
| @@ -83,11 +80,7 @@ config ARCH_AT91CAP9 · 71 unmodified lines | ||
| 83 | 80 | select CPU_ARM926T |
| 84 | 81 | select GENERIC_CLOCKEVENTS |
| 85 | 82 | select HAVE_FB_ATMEL |
| 86 | − | |
| 87 | −config ARCH_AT572D940HF | |
| 88 | − bool "AT572D940HF" | |
| 89 | − select CPU_ARM926T | |
| 90 | − select GENERIC_CLOCKEVENTS | |
| 83 | + select HAVE_NET_MACB | |
| 91 | 84 | |
| 92 | 85 | config ARCH_AT91X40 |
| 93 | 86 | bool "AT91x40" |
| @@ -208,7 +201,6 @@ comment "AT91SAM9260 / AT91SAM9XE Board Type" · 114 unmodified lines | ||
| 208 | 201 | config MACH_AT91SAM9260EK |
| 209 | 202 | bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit" |
| 210 | 203 | select HAVE_AT91_DATAFLASH_CARD |
| 211 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 212 | 204 | help |
| 213 | 205 | Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit |
| 214 | 206 | <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933> |
| @@ -269,7 +261,6 @@ comment "AT91SAM9261 Board Type" · 54 unmodified lines | ||
| 269 | 261 | config MACH_AT91SAM9261EK |
| 270 | 262 | bool "Atmel AT91SAM9261-EK Evaluation Kit" |
| 271 | 263 | select HAVE_AT91_DATAFLASH_CARD |
| 272 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 273 | 264 | help |
| 274 | 265 | Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit. |
| 275 | 266 | <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820> |
| @@ -285,7 +276,6 @@ comment "AT91SAM9G10 Board Type" · 9 unmodified lines | ||
| 285 | 276 | config MACH_AT91SAM9G10EK |
| 286 | 277 | bool "Atmel AT91SAM9G10-EK Evaluation Kit" |
| 287 | 278 | select HAVE_AT91_DATAFLASH_CARD |
| 288 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 289 | 279 | help |
| 290 | 280 | Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit. |
| 291 | 281 | <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588> |
| @@ -301,7 +291,6 @@ comment "AT91SAM9263 Board Type" · 9 unmodified lines | ||
| 301 | 291 | config MACH_AT91SAM9263EK |
| 302 | 292 | bool "Atmel AT91SAM9263-EK Evaluation Kit" |
| 303 | 293 | select HAVE_AT91_DATAFLASH_CARD |
| 304 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 305 | 294 | help |
| 306 | 295 | Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit. |
| 307 | 296 | <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057> |
| @@ -342,7 +331,6 @@ comment "AT91SAM9G20 Board Type" · 34 unmodified lines | ||
| 342 | 331 | config MACH_AT91SAM9G20EK |
| 343 | 332 | bool "Atmel AT91SAM9G20-EK Evaluation Kit" |
| 344 | 333 | select HAVE_AT91_DATAFLASH_CARD |
| 345 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 346 | 334 | help |
| 347 | 335 | Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit |
| 348 | 336 | that embeds only one SD/MMC slot. |
| @@ -350,7 +338,6 @@ config MACH_AT91SAM9G20EK · 1 unmodified line | ||
| 350 | 338 | config MACH_AT91SAM9G20EK_2MMC |
| 351 | 339 | depends on MACH_AT91SAM9G20EK |
| 352 | 340 | bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots" |
| 353 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 354 | 341 | help |
| 355 | 342 | Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit |
| 356 | 343 | with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and |
| @@ -415,7 +402,6 @@ comment "AT91SAM9G45 Board Type" · 58 unmodified lines | ||
| 415 | 402 | |
| 416 | 403 | config MACH_AT91SAM9M10G45EK |
| 417 | 404 | bool "Atmel AT91SAM9M10G45-EK Evaluation Kits" |
| 418 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 419 | 405 | help |
| 420 | 406 | Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit. |
| 421 | 407 | "ES" at the end of the name means that this board is an |
| @@ -432,7 +418,6 @@ comment "AT91CAP9 Board Type" · 10 unmodified lines | ||
| 432 | 418 | config MACH_AT91CAP9ADK |
| 433 | 419 | bool "Atmel AT91CAP9A-DK Evaluation Kit" |
| 434 | 420 | select HAVE_AT91_DATAFLASH_CARD |
| 435 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 436 | 421 | help |
| 437 | 422 | Select this if you are using Atmel's AT91CAP9A-DK Evaluation Kit. |
| 438 | 423 | <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4138> |
| @@ -441,23 +426,6 @@ endif · 2 unmodified lines | ||
| 441 | 426 | |
| 442 | 427 | # ---------------------------------------------------------- |
| 443 | 428 | |
| 444 | −if ARCH_AT572D940HF | |
| 445 | − | |
| 446 | −comment "AT572D940HF Board Type" | |
| 447 | − | |
| 448 | −config MACH_AT572D940HFEB | |
| 449 | − bool "AT572D940HF-EK" | |
| 450 | − depends on ARCH_AT572D940HF | |
| 451 | − select HAVE_AT91_DATAFLASH_CARD | |
| 452 | − select HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 453 | − help | |
| 454 | − Select this if you are using Atmel's AT572D940HF-EK evaluation kit. | |
| 455 | − <http://www.atmel.com/products/diopsis/default.asp> | |
| 456 | − | |
| 457 | −endif | |
| 458 | − | |
| 459 | −# ---------------------------------------------------------- | |
| 460 | − | |
| 461 | 429 | if ARCH_AT91X40 |
| 462 | 430 | |
| 463 | 431 | comment "AT91X40 Board Type" |
| @@ -482,13 +450,6 @@ config MTD_AT91_DATAFLASH_CARD · 18 unmodified lines | ||
| 482 | 450 | help |
| 483 | 451 | Enable support for the DataFlash card. |
| 484 | 452 | |
| 485 | −config MTD_NAND_ATMEL_BUSWIDTH_16 | |
| 486 | − bool "Enable 16-bit data bus interface to NAND flash" | |
| 487 | − depends on HAVE_NAND_ATMEL_BUSWIDTH_16 | |
| 488 | − help | |
| 489 | − On AT91SAM926x boards both types of NAND flash can be present | |
| 490 | − (8 and 16 bit data bus width). | |
| 491 | − | |
| 492 | 453 | # ---------------------------------------------------------- |
| 493 | 454 | |
| 494 | 455 | comment "AT91 Feature Selections" |
| @@ -19,7 +19,6 @@ obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devi · 18 unmodified lines | ||
| 19 | 19 | obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o at91sam9_alt_reset.o |
| 20 | 20 | obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o |
| 21 | 21 | obj-$(CONFIG_ARCH_AT91CAP9) += at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc.o |
| 22 | −obj-$(CONFIG_ARCH_AT572D940HF) += at572d940hf.o at91sam926x_time.o at572d940hf_devices.o sam9_smc.o | |
| 23 | 22 | obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o |
| 24 | 23 | |
| 25 | 24 | # AT91RM9200 board-specific support |
| @@ -78,9 +77,6 @@ obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o · 52 unmodified lines | ||
| 78 | 77 | # AT91CAP9 board-specific support |
| 79 | 78 | obj-$(CONFIG_MACH_AT91CAP9ADK) += board-cap9adk.o |
| 80 | 79 | |
| 81 | −# AT572D940HF board-specific support | |
| 82 | −obj-$(CONFIG_MACH_AT572D940HFEB) += board-at572d940hf_ek.o | |
| 83 | − | |
| 84 | 80 | # AT91X40 board-specific support |
| 85 | 81 | obj-$(CONFIG_MACH_AT91EB01) += board-eb01.o |
| 86 | 82 | |
| @@ -1,377 +0,0 @@ | ||
| 1 | −/* | |
| 2 | − * arch/arm/mach-at91/at572d940hf.c | |
| 3 | − * | |
| 4 | − * Antonio R. Costa <costa.antonior@gmail.com> | |
| 5 | − * Copyright (C) 2008 Atmel | |
| 6 | − * | |
| 7 | − * Copyright (C) 2005 SAN People | |
| 8 | − * | |
| 9 | − * This program is free software; you can redistribute it and/or modify | |
| 10 | − * it under the terms of the GNU General Public License as published by | |
| 11 | − * the Free Software Foundation; either version 2 of the License, or | |
| 12 | − * (at your option) any later version. | |
365 more lines aren’t shown here.
This diff is large: its 971 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 327 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 286 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 745 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 389 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 333 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
File renamed without changes.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
File renamed without changes.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 163 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
File renamed without changes.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 162 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 773 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 246 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 714 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 258 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 641 lines aren’t shown here.
This diff is large: its 395 lines aren’t shown here.
This diff is large: its 252 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 178 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 216 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 251 lines aren’t shown here.
This diff is large: its 192 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 368 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 218 lines aren’t shown here.
This diff is large: its 740 lines aren’t shown here.
This diff is large: its 459 lines aren’t shown here.
This diff is large: its 205 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 313 lines aren’t shown here.
This diff is large: its 358 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 206 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 380 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 164 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 600 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 601 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 143 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 218 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 421 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 218 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 169 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 439 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 248 lines aren’t shown here.
This diff is large: its 238 lines aren’t shown here.
This diff is large: its 320 lines aren’t shown here.
This diff is large: its 272 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 258 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 465 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 328 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 615 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 524 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 269 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 300 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 333 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 269 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 220 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 227 lines aren’t shown here.
This diff is large: its 216 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 212 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 395 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 284 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 257 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 958 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 131 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 1135 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 390 lines aren’t shown here.
This diff is large: its 465 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 551 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 211 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 1861 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 499 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 316 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 316 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 186 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 369 lines aren’t shown here.
This diff is large: its 174 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 531 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 745 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 169 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 348 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 584 lines aren’t shown here.
This diff is large: its 547 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 424 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 227 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 371 lines aren’t shown here.
This diff is large: its 368 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 550 lines aren’t shown here.
This diff is large: its 366 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 575 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 462 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 219 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 132 lines aren’t shown here.
This diff is large: its 232 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 147 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 327 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 254 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 158 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 301 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 226 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 298 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 215 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 273 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 336 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 455 lines aren’t shown here.
This diff is large: its 214 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 378 lines aren’t shown here.
This diff is large: its 344 lines aren’t shown here.
This diff is large: its 488 lines aren’t shown here.
This diff is large: its 493 lines aren’t shown here.
This diff is large: its 347 lines aren’t shown here.
This diff is large: its 227 lines aren’t shown here.
This diff is large: its 383 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 192 lines aren’t shown here.
This diff is large: its 166 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 143 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 242 lines aren’t shown here.
This diff is large: its 190 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 285 lines aren’t shown here.
This diff is large: its 454 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 440 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 463 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 176 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 245 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 403 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 155 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 232 lines aren’t shown here.
This diff is large: its 278 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 949 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 713 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 333 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 428 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 195 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 531 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 277 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 193 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
This diff is large: its 294 lines aren’t shown here.
This diff is large: its 241 lines aren’t shown here.
This diff is large: its 444 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 427 lines aren’t shown here.
This diff is large: its 176 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 621 lines aren’t shown here.
This diff is large: its 163 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 829 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 397 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 194 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 192 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 628 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 461 lines aren’t shown here.
This diff is large: its 290 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 211 lines aren’t shown here.
This diff is large: its 197 lines aren’t shown here.
This diff is large: its 203 lines aren’t shown here.
This diff is large: its 633 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 268 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 205 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 1834 lines aren’t shown here.
This diff is large: its 1164 lines aren’t shown here.
This diff is large: its 259 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 277 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 174 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 2090 lines aren’t shown here.
This diff is large: its 1055 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 176 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 162 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 265 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 162 lines aren’t shown here.
This diff is large: its 270 lines aren’t shown here.
This diff is large: its 279 lines aren’t shown here.
This diff is large: its 1232 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 320 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 167 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 186 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 2201 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 221 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 197 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 166 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 226 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 258 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 326 lines aren’t shown here.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 804 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 1293 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 285 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 874 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 686 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 206 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 303 lines aren’t shown here.
This diff is large: its 184 lines aren’t shown here.
This diff is large: its 234 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 344 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 143 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 2994 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 166 lines aren’t shown here.
This diff is large: its 825 lines aren’t shown here.
This diff is large: its 542 lines aren’t shown here.
This diff is large: its 1180 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 658 lines aren’t shown here.
This diff is large: its 479 lines aren’t shown here.
This diff is large: its 661 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 124 lines aren’t shown here.
This diff is large: its 287 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 655 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 2253 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 748 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 396 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 443 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 440 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 452 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 336 lines aren’t shown here.
This diff is large: its 324 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 339 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 323 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 432 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 258 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 243 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 135 lines aren’t shown here.
This diff is large: its 164 lines aren’t shown here.
This diff is large: its 199 lines aren’t shown here.
This diff is large: its 248 lines aren’t shown here.
This diff is large: its 361 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 822 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 232 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 174 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 447 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 825 lines aren’t shown here.
This diff is large: its 234 lines aren’t shown here.
This diff is large: its 769 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 302 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 225 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 202 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 528 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
File renamed without changes.
This diff is large: its 72 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
File renamed without changes.
This diff is large: its 120 lines aren’t shown here.
File renamed without changes.
This diff is large: its 375 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
File renamed without changes.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 131 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 1269 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 270 lines aren’t shown here.
This diff is large: its 1606 lines aren’t shown here.
This diff is large: its 206 lines aren’t shown here.
This diff is large: its 249 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 518 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 664 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 225 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 303 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 702 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 546 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 693 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 218 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 500 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 214 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 941 lines aren’t shown here.
This diff is large: its 167 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 620 lines aren’t shown here.
File renamed without changes.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 238 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 410 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 353 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 258 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 466 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 3100 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
This diff is large: its 109 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 391 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 172 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 215 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 409 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 480 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 376 lines aren’t shown here.
This diff is large: its 647 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 429 lines aren’t shown here.
This diff is large: its 312 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 584 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 257 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 227 lines aren’t shown here.
This diff is large: its 871 lines aren’t shown here.
This diff is large: its 535 lines aren’t shown here.
This diff is large: its 209 lines aren’t shown here.
This diff is large: its 244 lines aren’t shown here.
This diff is large: its 528 lines aren’t shown here.
This diff is large: its 230 lines aren’t shown here.
This diff is large: its 763 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 202 lines aren’t shown here.
This diff is large: its 363 lines aren’t shown here.
This diff is large: its 1253 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 178 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 216 lines aren’t shown here.
This diff is large: its 759 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 506 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 192 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 306 lines aren’t shown here.
This diff is large: its 277 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 170 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 297 lines aren’t shown here.
This diff is large: its 489 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 287 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 226 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
File renamed without changes.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 950 lines aren’t shown here.
This diff is large: its 540 lines aren’t shown here.
This diff is large: its 274 lines aren’t shown here.
This diff is large: its 230 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 718 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 357 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 445 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is larger than a page shows: the files after these aren’t listed. Clone the repository to see all of it.