提交 e7cfbea9 编写于 作者: T Takashi Iwai

Merge branch 'fix/misc' into topic/misc

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
...@@ -130,8 +130,6 @@ edac.txt ...@@ -130,8 +130,6 @@ edac.txt
- information on EDAC - Error Detection And Correction - information on EDAC - Error Detection And Correction
eisa.txt eisa.txt
- info on EISA bus support. - info on EISA bus support.
exception.txt
- how Linux v2.2 handles exceptions without verify_area etc.
fault-injection/ fault-injection/
- dir with docs about the fault injection capabilities infrastructure. - dir with docs about the fault injection capabilities infrastructure.
fb/ fb/
...@@ -234,6 +232,8 @@ memory.txt ...@@ -234,6 +232,8 @@ memory.txt
- info on typical Linux memory problems. - info on typical Linux memory problems.
mips/ mips/
- directory with info about Linux on MIPS architecture. - directory with info about Linux on MIPS architecture.
mmc/
- directory with info about the MMC subsystem
mono.txt mono.txt
- how to execute Mono-based .NET binaries with the help of BINFMT_MISC. - how to execute Mono-based .NET binaries with the help of BINFMT_MISC.
mutex-design.txt mutex-design.txt
......
...@@ -7,3 +7,15 @@ Description: ...@@ -7,3 +7,15 @@ Description:
0 -> resumed 0 -> resumed
(_UDC_ is the name of the USB Device Controller driver) (_UDC_ is the name of the USB Device Controller driver)
What: /sys/devices/platform/_UDC_/gadget/gadget-lunX/nofua
Date: July 2010
Contact: Andy Shevchenko <andy.shevchenko@gmail.com>
Description:
Show or set the reaction on the FUA (Force Unit Access) bit in
the SCSI WRITE(10,12) commands when a gadget in USB Mass
Storage mode.
Possible values are:
1 -> ignore the FUA flag
0 -> obey the FUA flag
...@@ -738,21 +738,31 @@ to "Closing". ...@@ -738,21 +738,31 @@ to "Closing".
CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs
(including software IOMMU). (including software IOMMU).
2) ARCH_KMALLOC_MINALIGN 2) ARCH_DMA_MINALIGN
Architectures must ensure that kmalloc'ed buffer is Architectures must ensure that kmalloc'ed buffer is
DMA-safe. Drivers and subsystems depend on it. If an architecture DMA-safe. Drivers and subsystems depend on it. If an architecture
isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in
the CPU cache is identical to data in main memory), the CPU cache is identical to data in main memory),
ARCH_KMALLOC_MINALIGN must be set so that the memory allocator ARCH_DMA_MINALIGN must be set so that the memory allocator
makes sure that kmalloc'ed buffer doesn't share a cache line with makes sure that kmalloc'ed buffer doesn't share a cache line with
the others. See arch/arm/include/asm/cache.h as an example. the others. See arch/arm/include/asm/cache.h as an example.
Note that ARCH_KMALLOC_MINALIGN is about DMA memory alignment Note that ARCH_DMA_MINALIGN is about DMA memory alignment
constraints. You don't need to worry about the architecture data constraints. You don't need to worry about the architecture data
alignment constraints (e.g. the alignment constraints about 64-bit alignment constraints (e.g. the alignment constraints about 64-bit
objects). objects).
3) Supporting multiple types of IOMMUs
If your architecture needs to support multiple types of IOMMUs, you
can use include/linux/asm-generic/dma-mapping-common.h. It's a
library to support the DMA API with multiple types of IOMMUs. Lots
of architectures (x86, powerpc, sh, alpha, ia64, microblaze and
sparc) use it. Choose one to see how it can be used. If you need to
support multiple types of IOMMUs in a single system, the example of
x86 or powerpc helps.
Closing Closing
This document, and the API itself, would not be in its current This document, and the API itself, would not be in its current
......
...@@ -455,12 +455,6 @@ Free memory allocated by the nonconsistent API. All parameters must ...@@ -455,12 +455,6 @@ Free memory allocated by the nonconsistent API. All parameters must
be identical to those passed in (and returned by be identical to those passed in (and returned by
dma_alloc_noncoherent()). dma_alloc_noncoherent()).
int
dma_is_consistent(struct device *dev, dma_addr_t dma_handle)
Returns true if the device dev is performing consistent DMA on the memory
area pointed to by the dma_handle.
int int
dma_get_cache_alignment(void) dma_get_cache_alignment(void)
......
...@@ -35,7 +35,7 @@ PS_METHOD = $(prefer-db2x) ...@@ -35,7 +35,7 @@ PS_METHOD = $(prefer-db2x)
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
xmldocs: $(BOOKS) xmldoclinks xmldocs: $(BOOKS)
sgmldocs: xmldocs sgmldocs: xmldocs
PS := $(patsubst %.xml, %.ps, $(BOOKS)) PS := $(patsubst %.xml, %.ps, $(BOOKS))
...@@ -45,7 +45,7 @@ PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) ...@@ -45,7 +45,7 @@ PDF := $(patsubst %.xml, %.pdf, $(BOOKS))
pdfdocs: $(PDF) pdfdocs: $(PDF)
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
htmldocs: $(HTML) htmldocs: $(HTML) xmldoclinks
$(call build_main_index) $(call build_main_index)
$(call build_images) $(call build_images)
...@@ -95,7 +95,7 @@ define rule_docproc ...@@ -95,7 +95,7 @@ define rule_docproc
) > $(dir $@).$(notdir $@).cmd ) > $(dir $@).$(notdir $@).cmd
endef endef
%.xml: %.tmpl FORCE %.xml: %.tmpl xmldoclinks FORCE
$(call if_changed_rule,docproc) $(call if_changed_rule,docproc)
### ###
......
...@@ -132,7 +132,6 @@ X!Ilib/string.c ...@@ -132,7 +132,6 @@ X!Ilib/string.c
<title>FIFO Buffer</title> <title>FIFO Buffer</title>
<sect1><title>kfifo interface</title> <sect1><title>kfifo interface</title>
!Iinclude/linux/kfifo.h !Iinclude/linux/kfifo.h
!Ekernel/kfifo.c
</sect1> </sect1>
</chapter> </chapter>
......
...@@ -229,6 +229,22 @@ on working with the default settings initially.</para> ...@@ -229,6 +229,22 @@ on working with the default settings initially.</para>
and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para> and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>LIRC_SET_WIDEBAND_RECEIVER</term>
<listitem>
<para>Some receivers are equipped with special wide band receiver which is intended
to be used to learn output of existing remote.
Calling that ioctl with (1) will enable it, and with (0) disable it.
This might be useful of receivers that have otherwise narrow band receiver
that prevents them to be used with some remotes.
Wide band receiver might also be more precise
On the other hand its disadvantage it usually reduced range of reception.
Note: wide band receiver might be implictly enabled if you enable
carrier reports. In that case it will be disabled as soon as you disable
carrier reports. Trying to disable wide band receiver while carrier
reports are active will do nothing.</para>
</listitem>
</varlistentry>
</variablelist> </variablelist>
</section> </section>
......
...@@ -240,6 +240,45 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para> ...@@ -240,6 +240,45 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
<entry>r<subscript>1</subscript></entry> <entry>r<subscript>1</subscript></entry>
<entry>r<subscript>0</subscript></entry> <entry>r<subscript>0</subscript></entry>
</row> </row>
<row id="V4L2-PIX-FMT-BGR666">
<entry><constant>V4L2_PIX_FMT_BGR666</constant></entry>
<entry>'BGRH'</entry>
<entry></entry>
<entry>b<subscript>5</subscript></entry>
<entry>b<subscript>4</subscript></entry>
<entry>b<subscript>3</subscript></entry>
<entry>b<subscript>2</subscript></entry>
<entry>b<subscript>1</subscript></entry>
<entry>b<subscript>0</subscript></entry>
<entry>g<subscript>5</subscript></entry>
<entry>g<subscript>4</subscript></entry>
<entry></entry>
<entry>g<subscript>3</subscript></entry>
<entry>g<subscript>2</subscript></entry>
<entry>g<subscript>1</subscript></entry>
<entry>g<subscript>0</subscript></entry>
<entry>r<subscript>5</subscript></entry>
<entry>r<subscript>4</subscript></entry>
<entry>r<subscript>3</subscript></entry>
<entry>r<subscript>2</subscript></entry>
<entry></entry>
<entry>r<subscript>1</subscript></entry>
<entry>r<subscript>0</subscript></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row id="V4L2-PIX-FMT-BGR24"> <row id="V4L2-PIX-FMT-BGR24">
<entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry>
<entry>'BGR3'</entry> <entry>'BGR3'</entry>
...@@ -700,6 +739,45 @@ defined in error. Drivers may interpret them as in <xref ...@@ -700,6 +739,45 @@ defined in error. Drivers may interpret them as in <xref
<entry>b<subscript>1</subscript></entry> <entry>b<subscript>1</subscript></entry>
<entry>b<subscript>0</subscript></entry> <entry>b<subscript>0</subscript></entry>
</row> </row>
<row id="V4L2-PIX-FMT-BGR666">
<entry><constant>V4L2_PIX_FMT_BGR666</constant></entry>
<entry>'BGRH'</entry>
<entry></entry>
<entry>b<subscript>5</subscript></entry>
<entry>b<subscript>4</subscript></entry>
<entry>b<subscript>3</subscript></entry>
<entry>b<subscript>2</subscript></entry>
<entry>b<subscript>1</subscript></entry>
<entry>b<subscript>0</subscript></entry>
<entry>g<subscript>5</subscript></entry>
<entry>g<subscript>4</subscript></entry>
<entry></entry>
<entry>g<subscript>3</subscript></entry>
<entry>g<subscript>2</subscript></entry>
<entry>g<subscript>1</subscript></entry>
<entry>g<subscript>0</subscript></entry>
<entry>r<subscript>5</subscript></entry>
<entry>r<subscript>4</subscript></entry>
<entry>r<subscript>3</subscript></entry>
<entry>r<subscript>2</subscript></entry>
<entry></entry>
<entry>r<subscript>1</subscript></entry>
<entry>r<subscript>0</subscript></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
<entry></entry>
</row>
<row><!-- id="V4L2-PIX-FMT-BGR24" --> <row><!-- id="V4L2-PIX-FMT-BGR24" -->
<entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry>
<entry>'BGR3'</entry> <entry>'BGR3'</entry>
......
...@@ -19,6 +19,8 @@ Note: Only ACPI METHOD can be overridden, any other object types like ...@@ -19,6 +19,8 @@ Note: Only ACPI METHOD can be overridden, any other object types like
"Device", "OperationRegion", are not recognized. "Device", "OperationRegion", are not recognized.
Note: The same ACPI control method can be overridden for many times, Note: The same ACPI control method can be overridden for many times,
and it's always the latest one that used by Linux/kernel. and it's always the latest one that used by Linux/kernel.
Note: To get the ACPI debug object output (Store (AAAA, Debug)),
please run "echo 1 > /sys/module/acpi/parameters/aml_debug_output".
1. override an existing method 1. override an existing method
a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT, a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT,
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
Maintainers: Maintainers:
CPU Hotplug Core: CPU Hotplug Core:
Rusty Russell <rusty@rustycorp.com.au> Rusty Russell <rusty@rustcorp.com.au>
Srivatsa Vaddagiri <vatsa@in.ibm.com> Srivatsa Vaddagiri <vatsa@in.ibm.com>
i386: i386:
Zwane Mwaikambo <zwane@arm.linux.org.uk> Zwane Mwaikambo <zwane@arm.linux.org.uk>
......
...@@ -445,6 +445,7 @@ Your cooperation is appreciated. ...@@ -445,6 +445,7 @@ Your cooperation is appreciated.
233 = /dev/kmview View-OS A process with a view 233 = /dev/kmview View-OS A process with a view
234 = /dev/btrfs-control Btrfs control device 234 = /dev/btrfs-control Btrfs control device
235 = /dev/autofs Autofs control device 235 = /dev/autofs Autofs control device
236 = /dev/mapper/control Device-Mapper control device
240-254 Reserved for local use 240-254 Reserved for local use
255 Reserved for MISC_DYNAMIC_MINOR 255 Reserved for MISC_DYNAMIC_MINOR
......
...@@ -360,14 +360,6 @@ When: 2.6.33 ...@@ -360,14 +360,6 @@ When: 2.6.33
Why: Should be implemented in userspace, policy daemon. Why: Should be implemented in userspace, policy daemon.
Who: Johannes Berg <johannes@sipsolutions.net> Who: Johannes Berg <johannes@sipsolutions.net>
---------------------------
What: CONFIG_INOTIFY
When: 2.6.33
Why: last user (audit) will be converted to the newer more generic
and more easily maintained fsnotify subsystem
Who: Eric Paris <eparis@redhat.com>
---------------------------- ----------------------------
What: sound-slot/service-* module aliases and related clutters in What: sound-slot/service-* module aliases and related clutters in
...@@ -555,3 +547,20 @@ Why: superseded by acpi_sleep=nonvs ...@@ -555,3 +547,20 @@ Why: superseded by acpi_sleep=nonvs
Who: Rafael J. Wysocki <rjw@sisk.pl> Who: Rafael J. Wysocki <rjw@sisk.pl>
---------------------------- ----------------------------
What: PCI DMA unmap state API
When: August 2012
Why: PCI DMA unmap state API (include/linux/pci-dma.h) was replaced
with DMA unmap state API (DMA unmap state API can be used for
any bus).
Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
----------------------------
What: DMA_xxBIT_MASK macros
When: Jun 2011
Why: DMA_xxBIT_MASK macros were replaced with DMA_BIT_MASK() macros.
Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
----------------------------
...@@ -92,8 +92,8 @@ prototypes: ...@@ -92,8 +92,8 @@ prototypes:
void (*destroy_inode)(struct inode *); void (*destroy_inode)(struct inode *);
void (*dirty_inode) (struct inode *); void (*dirty_inode) (struct inode *);
int (*write_inode) (struct inode *, int); int (*write_inode) (struct inode *, int);
void (*drop_inode) (struct inode *); int (*drop_inode) (struct inode *);
void (*delete_inode) (struct inode *); void (*evict_inode) (struct inode *);
void (*put_super) (struct super_block *); void (*put_super) (struct super_block *);
void (*write_super) (struct super_block *); void (*write_super) (struct super_block *);
int (*sync_fs)(struct super_block *sb, int wait); int (*sync_fs)(struct super_block *sb, int wait);
...@@ -101,14 +101,13 @@ prototypes: ...@@ -101,14 +101,13 @@ prototypes:
int (*unfreeze_fs) (struct super_block *); int (*unfreeze_fs) (struct super_block *);
int (*statfs) (struct dentry *, struct kstatfs *); int (*statfs) (struct dentry *, struct kstatfs *);
int (*remount_fs) (struct super_block *, int *, char *); int (*remount_fs) (struct super_block *, int *, char *);
void (*clear_inode) (struct inode *);
void (*umount_begin) (struct super_block *); void (*umount_begin) (struct super_block *);
int (*show_options)(struct seq_file *, struct vfsmount *); int (*show_options)(struct seq_file *, struct vfsmount *);
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
locking rules: locking rules:
All may block. All may block [not true, see below]
None have BKL None have BKL
s_umount s_umount
alloc_inode: alloc_inode:
...@@ -116,22 +115,25 @@ destroy_inode: ...@@ -116,22 +115,25 @@ destroy_inode:
dirty_inode: (must not sleep) dirty_inode: (must not sleep)
write_inode: write_inode:
drop_inode: !!!inode_lock!!! drop_inode: !!!inode_lock!!!
delete_inode: evict_inode:
put_super: write put_super: write
write_super: read write_super: read
sync_fs: read sync_fs: read
freeze_fs: read freeze_fs: read
unfreeze_fs: read unfreeze_fs: read
statfs: no statfs: maybe(read) (see below)
remount_fs: maybe (see below) remount_fs: write
clear_inode:
umount_begin: no umount_begin: no
show_options: no (namespace_sem) show_options: no (namespace_sem)
quota_read: no (see below) quota_read: no (see below)
quota_write: no (see below) quota_write: no (see below)
->remount_fs() will have the s_umount exclusive lock if it's already mounted. ->statfs() has s_umount (shared) when called by ustat(2) (native or
When called from get_sb_single, it does NOT have the s_umount lock. compat), but that's an accident of bad API; s_umount is used to pin
the superblock down when we only have dev_t given us by userland to
identify the superblock. Everything else (statfs(), fstatfs(), etc.)
doesn't hold it when calling ->statfs() - superblock is pinned down
by resolving the pathname passed to syscall.
->quota_read() and ->quota_write() functions are both guaranteed to ->quota_read() and ->quota_write() functions are both guaranteed to
be the only ones operating on the quota file by the quota code (via be the only ones operating on the quota file by the quota code (via
dqio_sem) (unless an admin really wants to screw up something and dqio_sem) (unless an admin really wants to screw up something and
...@@ -372,8 +374,6 @@ prototypes: ...@@ -372,8 +374,6 @@ prototypes:
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
int (*readdir) (struct file *, void *, filldir_t); int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *); unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int,
unsigned long);
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *); int (*mmap) (struct file *, struct vm_area_struct *);
...@@ -407,8 +407,7 @@ write: no ...@@ -407,8 +407,7 @@ write: no
aio_write: no aio_write: no
readdir: no readdir: no
poll: no poll: no
ioctl: yes (see below) unlocked_ioctl: no
unlocked_ioctl: no (see below)
compat_ioctl: no compat_ioctl: no
mmap: no mmap: no
open: no open: no
...@@ -451,9 +450,6 @@ move ->readdir() to inode_operations and use a separate method for directory ...@@ -451,9 +450,6 @@ move ->readdir() to inode_operations and use a separate method for directory
anything that resembles union-mount we won't have a struct file for all anything that resembles union-mount we won't have a struct file for all
components. And there are other reasons why the current interface is a mess... components. And there are other reasons why the current interface is a mess...
->ioctl() on regular files is superceded by the ->unlocked_ioctl() that
doesn't take the BKL.
->read on directories probably must go away - we should just enforce -EISDIR ->read on directories probably must go away - we should just enforce -EISDIR
in sys_read() and friends. in sys_read() and friends.
......
...@@ -273,3 +273,48 @@ it's safe to remove it. If you don't need it, remove it. ...@@ -273,3 +273,48 @@ it's safe to remove it. If you don't need it, remove it.
deliberate; as soon as struct block_device * is propagated in a reasonable deliberate; as soon as struct block_device * is propagated in a reasonable
way by that code fixing will become trivial; until then nothing can be way by that code fixing will become trivial; until then nothing can be
done. done.
[mandatory]
block truncatation on error exit from ->write_begin, and ->direct_IO
moved from generic methods (block_write_begin, cont_write_begin,
nobh_write_begin, blockdev_direct_IO*) to callers. Take a look at
ext2_write_failed and callers for an example.
[mandatory]
->truncate is going away. The whole truncate sequence needs to be
implemented in ->setattr, which is now mandatory for filesystems
implementing on-disk size changes. Start with a copy of the old inode_setattr
and vmtruncate, and the reorder the vmtruncate + foofs_vmtruncate sequence to
be in order of zeroing blocks using block_truncate_page or similar helpers,
size update and on finally on-disk truncation which should not fail.
inode_change_ok now includes the size checks for ATTR_SIZE and must be called
in the beginning of ->setattr unconditionally.
[mandatory]
->clear_inode() and ->delete_inode() are gone; ->evict_inode() should
be used instead. It gets called whenever the inode is evicted, whether it has
remaining links or not. Caller does *not* evict the pagecache or inode-associated
metadata buffers; getting rid of those is responsibility of method, as it had
been for ->delete_inode().
->drop_inode() returns int now; it's called on final iput() with inode_lock
held and it returns true if filesystems wants the inode to be dropped. As before,
generic_drop_inode() is still the default and it's been updated appropriately.
generic_delete_inode() is also alive and it consists simply of return 1. Note that
all actual eviction work is done by caller after ->drop_inode() returns.
clear_inode() is gone; use end_writeback() instead. As before, it must
be called exactly once on each call of ->evict_inode() (as it used to be for
each call of ->delete_inode()). Unlike before, if you are using inode-associated
metadata buffers (i.e. mark_buffer_dirty_inode()), it's your responsibility to
call invalidate_inode_buffers() before end_writeback().
No async writeback (and thus no calls of ->write_inode()) will happen
after end_writeback() returns, so actions that should not overlap with ->write_inode()
(e.g. freeing on-disk inode if i_nlink is 0) ought to be done after that call.
NOTE: checking i_nlink in the beginning of ->write_inode() and bailing out
if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput()
may happen while the inode is in the middle of ->write_inode(); e.g. if you blindly
free the on-disk inode, you may end up doing that while ->write_inode() is writing
to it.
...@@ -2,7 +2,7 @@ SQUASHFS 4.0 FILESYSTEM ...@@ -2,7 +2,7 @@ SQUASHFS 4.0 FILESYSTEM
======================= =======================
Squashfs is a compressed read-only filesystem for Linux. Squashfs is a compressed read-only filesystem for Linux.
It uses zlib compression to compress files, inodes and directories. It uses zlib/lzo compression to compress files, inodes and directories.
Inodes in the system are very small and all blocks are packed to minimise Inodes in the system are very small and all blocks are packed to minimise
data overhead. Block sizes greater than 4K are supported up to a maximum data overhead. Block sizes greater than 4K are supported up to a maximum
of 1Mbytes (default block size 128K). of 1Mbytes (default block size 128K).
......
...@@ -727,7 +727,6 @@ struct file_operations { ...@@ -727,7 +727,6 @@ struct file_operations {
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
int (*readdir) (struct file *, void *, filldir_t); int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *); unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *); int (*mmap) (struct file *, struct vm_area_struct *);
...@@ -768,10 +767,7 @@ otherwise noted. ...@@ -768,10 +767,7 @@ otherwise noted.
activity on this file and (optionally) go to sleep until there activity on this file and (optionally) go to sleep until there
is activity. Called by the select(2) and poll(2) system calls is activity. Called by the select(2) and poll(2) system calls
ioctl: called by the ioctl(2) system call unlocked_ioctl: called by the ioctl(2) system call.
unlocked_ioctl: called by the ioctl(2) system call. Filesystems that do not
require the BKL should use this method instead of the ioctl() above.
compat_ioctl: called by the ioctl(2) system call when 32 bit system calls compat_ioctl: called by the ioctl(2) system call when 32 bit system calls
are used on 64 bit kernels. are used on 64 bit kernels.
......
...@@ -158,10 +158,11 @@ and configure pullups/pulldowns appropriately.) ...@@ -158,10 +158,11 @@ and configure pullups/pulldowns appropriately.)
Spinlock-Safe GPIO access Spinlock-Safe GPIO access
------------------------- -------------------------
Most GPIO controllers can be accessed with memory read/write instructions. Most GPIO controllers can be accessed with memory read/write instructions.
That doesn't need to sleep, and can safely be done from inside IRQ handlers. Those don't need to sleep, and can safely be done from inside hard
(That includes hardirq contexts on RT kernels.) (nonthreaded) IRQ handlers and similar contexts.
Use these calls to access such GPIOs: Use the following calls to access such GPIOs,
for which gpio_cansleep() will always return false (see below):
/* GPIO INPUT: return zero or nonzero */ /* GPIO INPUT: return zero or nonzero */
int gpio_get_value(unsigned gpio); int gpio_get_value(unsigned gpio);
...@@ -210,9 +211,31 @@ To access such GPIOs, a different set of accessors is defined: ...@@ -210,9 +211,31 @@ To access such GPIOs, a different set of accessors is defined:
/* GPIO OUTPUT, might sleep */ /* GPIO OUTPUT, might sleep */
void gpio_set_value_cansleep(unsigned gpio, int value); void gpio_set_value_cansleep(unsigned gpio, int value);
Other than the fact that these calls might sleep, and will not be ignored
for GPIOs that can't be accessed from IRQ handlers, these calls act the Accessing such GPIOs requires a context which may sleep, for example
same as the spinlock-safe calls. a threaded IRQ handler, and those accessors must be used instead of
spinlock-safe accessors without the cansleep() name suffix.
Other than the fact that these accessors might sleep, and will work
on GPIOs that can't be accessed from hardIRQ handlers, these calls act
the same as the spinlock-safe calls.
** IN ADDITION ** calls to setup and configure such GPIOs must be made
from contexts which may sleep, since they may need to access the GPIO
controller chip too: (These setup calls are usually made from board
setup or driver probe/teardown code, so this is an easy constraint.)
gpio_direction_input()
gpio_direction_output()
gpio_request()
## gpio_request_one()
## gpio_request_array()
## gpio_free_array()
gpio_free()
gpio_set_debounce()
Claiming and Releasing GPIOs Claiming and Releasing GPIOs
......
Kernel driver emc2103
======================
Supported chips:
* SMSC EMC2103
Addresses scanned: I2C 0x2e
Prefix: 'emc2103'
Datasheet: Not public
Authors:
Steve Glendinning <steve.glendinning@smsc.com>
Description
-----------
The Standard Microsystems Corporation (SMSC) EMC2103 chips
contain up to 4 temperature sensors and a single fan controller.
Fan rotation speeds are reported in RPM (rotations per minute). An alarm is
triggered if the rotation speed has dropped below a programmable limit. Fan
readings can be divided by a programmable divider (1, 2, 4 or 8) to give
the readings more range or accuracy. Not all RPM values can accurately be
represented, so some rounding is done. With a divider of 1, the lowest
representable value is 480 RPM.
This driver supports RPM based control, to use this a fan target
should be written to fan1_target and pwm1_enable should be set to 3.
The 2103-2 and 2103-4 variants have a third temperature sensor, which can
be connected to two anti-parallel diodes. These values can be read
as temp3 and temp4. If only one diode is attached to this channel, temp4
will show as "fault". The module parameter "apd=0" can be used to suppress
this 4th channel when anti-parallel diodes are not fitted.
...@@ -72,9 +72,31 @@ in6_min_alarm 5v output undervoltage alarm ...@@ -72,9 +72,31 @@ in6_min_alarm 5v output undervoltage alarm
in7_min_alarm 3v output undervoltage alarm in7_min_alarm 3v output undervoltage alarm
in8_min_alarm Vee (-12v) output undervoltage alarm in8_min_alarm Vee (-12v) output undervoltage alarm
in9_input GPIO voltage data in9_input GPIO voltage data (see note 1)
in10_input GPIO voltage data (see note 1)
in11_input GPIO voltage data (see note 1)
power1_input 12v power usage (mW) power1_input 12v power usage (mW)
power2_input 5v power usage (mW) power2_input 5v power usage (mW)
power3_input 3v power usage (mW) power3_input 3v power usage (mW)
power4_input Vee (-12v) power usage (mW) power4_input Vee (-12v) power usage (mW)
Note 1
------
If you have NOT configured the driver to sample all GPIO pins as analog
voltages, then the in10_input and in11_input sysfs attributes will not be
created. The driver will sample the GPIO pin that is currently connected to the
ADC as an analog voltage, and report the value in in9_input.
If you have configured the driver to sample all GPIO pins as analog voltages,
then they will be sampled in round-robin fashion. If userspace reads too
slowly, -EAGAIN will be returned when you read the sysfs attribute containing
the sensor reading.
The LTC4245 chip can be configured to sample all GPIO pins with two methods:
1) platform data -- see include/linux/i2c/ltc4245.h
2) OF device tree -- add the "ltc4245,use-extra-gpios" property to each chip
The default mode of operation is to sample a single GPIO pin.
...@@ -18,10 +18,11 @@ Description ...@@ -18,10 +18,11 @@ Description
The National Semiconductor Super I/O chip includes complete hardware The National Semiconductor Super I/O chip includes complete hardware
monitoring capabilities. It can monitor up to 18 voltages, 8 fans and monitoring capabilities. It can monitor up to 18 voltages, 8 fans and
6 temperature sensors. Only the fans are supported at the moment. 6 temperature sensors. Only the fans and temperatures are supported at
the moment, voltages aren't.
This chip also has fan controlling features, which are not yet supported This chip also has fan controlling features (up to 4 PWM outputs),
by this driver either. which are partly supported by this driver.
The driver assumes that no more than one chip is present, which seems The driver assumes that no more than one chip is present, which seems
reasonable. reasonable.
...@@ -36,3 +37,23 @@ signal. Speeds down to 83 RPM can be measured. ...@@ -36,3 +37,23 @@ signal. Speeds down to 83 RPM can be measured.
An alarm is triggered if the rotation speed drops below a programmable An alarm is triggered if the rotation speed drops below a programmable
limit. Another alarm is triggered if the speed is too low to be measured limit. Another alarm is triggered if the speed is too low to be measured
(including stalled or missing fan). (including stalled or missing fan).
Fan Speed Control
-----------------
Fan speed can be controlled by PWM outputs. There are 4 possible modes:
always off, always on, manual and automatic. The latter isn't supported
by the driver: you can only return to that mode if it was the original
setting, and the configuration interface is missing.
Temperature Monitoring
----------------------
The PC87427 relies on external sensors (following the SensorPath
standard), so the resolution and range depend on the type of sensor
connected. The integer part can be 8-bit or 9-bit, and can be signed or
not. I couldn't find a way to figure out the external sensor data
temperature format, so user-space adjustment (typically by a factor 2)
may be required.
...@@ -107,10 +107,24 @@ in[0-*]_min Voltage min value. ...@@ -107,10 +107,24 @@ in[0-*]_min Voltage min value.
Unit: millivolt Unit: millivolt
RW RW
in[0-*]_lcrit Voltage critical min value.
Unit: millivolt
RW
If voltage drops to or below this limit, the system may
take drastic action such as power down or reset. At the very
least, it should report a fault.
in[0-*]_max Voltage max value. in[0-*]_max Voltage max value.
Unit: millivolt Unit: millivolt
RW RW
in[0-*]_crit Voltage critical max value.
Unit: millivolt
RW
If voltage reaches or exceeds this limit, the system may
take drastic action such as power down or reset. At the very
least, it should report a fault.
in[0-*]_input Voltage input value. in[0-*]_input Voltage input value.
Unit: millivolt Unit: millivolt
RO RO
...@@ -284,7 +298,7 @@ temp[1-*]_input Temperature input value. ...@@ -284,7 +298,7 @@ temp[1-*]_input Temperature input value.
Unit: millidegree Celsius Unit: millidegree Celsius
RO RO
temp[1-*]_crit Temperature critical value, typically greater than temp[1-*]_crit Temperature critical max value, typically greater than
corresponding temp_max values. corresponding temp_max values.
Unit: millidegree Celsius Unit: millidegree Celsius
RW RW
...@@ -296,6 +310,11 @@ temp[1-*]_crit_hyst ...@@ -296,6 +310,11 @@ temp[1-*]_crit_hyst
from the critical value. from the critical value.
RW RW
temp[1-*]_lcrit Temperature critical min value, typically lower than
corresponding temp_min values.
Unit: millidegree Celsius
RW
temp[1-*]_offset temp[1-*]_offset
Temperature offset which is added to the temperature reading Temperature offset which is added to the temperature reading
by the chip. by the chip.
...@@ -344,9 +363,6 @@ Also see the Alarms section for status flags associated with temperatures. ...@@ -344,9 +363,6 @@ Also see the Alarms section for status flags associated with temperatures.
* Currents * * Currents *
************ ************
Note that no known chip provides current measurements as of writing,
so this part is theoretical, so to say.
curr[1-*]_max Current max value curr[1-*]_max Current max value
Unit: milliampere Unit: milliampere
RW RW
...@@ -471,6 +487,7 @@ limit-related alarms, not both. The driver should just reflect the hardware ...@@ -471,6 +487,7 @@ limit-related alarms, not both. The driver should just reflect the hardware
implementation. implementation.
in[0-*]_alarm in[0-*]_alarm
curr[1-*]_alarm
fan[1-*]_alarm fan[1-*]_alarm
temp[1-*]_alarm temp[1-*]_alarm
Channel alarm Channel alarm
...@@ -482,6 +499,8 @@ OR ...@@ -482,6 +499,8 @@ OR
in[0-*]_min_alarm in[0-*]_min_alarm
in[0-*]_max_alarm in[0-*]_max_alarm
curr[1-*]_min_alarm
curr[1-*]_max_alarm
fan[1-*]_min_alarm fan[1-*]_min_alarm
fan[1-*]_max_alarm fan[1-*]_max_alarm
temp[1-*]_min_alarm temp[1-*]_min_alarm
...@@ -497,7 +516,6 @@ to notify open diodes, unconnected fans etc. where the hardware ...@@ -497,7 +516,6 @@ to notify open diodes, unconnected fans etc. where the hardware
supports it. When this boolean has value 1, the measurement for that supports it. When this boolean has value 1, the measurement for that
channel should not be trusted. channel should not be trusted.
in[0-*]_fault
fan[1-*]_fault fan[1-*]_fault
temp[1-*]_fault temp[1-*]_fault
Input fault condition Input fault condition
...@@ -513,6 +531,7 @@ beep_enable Master beep enable ...@@ -513,6 +531,7 @@ beep_enable Master beep enable
RW RW
in[0-*]_beep in[0-*]_beep
curr[1-*]_beep
fan[1-*]_beep fan[1-*]_beep
temp[1-*]_beep temp[1-*]_beep
Channel beep Channel beep
......
...@@ -20,6 +20,10 @@ Supported chips: ...@@ -20,6 +20,10 @@ Supported chips:
Prefix: 'w83667hg' Prefix: 'w83667hg'
Addresses scanned: ISA address retrieved from Super I/O registers Addresses scanned: ISA address retrieved from Super I/O registers
Datasheet: not available Datasheet: not available
* Winbond W83667HG-B
Prefix: 'w83667hg'
Addresses scanned: ISA address retrieved from Super I/O registers
Datasheet: Available from Nuvoton upon request
Authors: Authors:
Jean Delvare <khali@linux-fr.org> Jean Delvare <khali@linux-fr.org>
...@@ -32,8 +36,8 @@ Description ...@@ -32,8 +36,8 @@ Description
----------- -----------
This driver implements support for the Winbond W83627EHF, W83627EHG, This driver implements support for the Winbond W83627EHF, W83627EHG,
W83627DHG, W83627DHG-P and W83667HG super I/O chips. We will refer to them W83627DHG, W83627DHG-P, W83667HG and W83667HG-B super I/O chips.
collectively as Winbond chips. We will refer to them collectively as Winbond chips.
The chips implement three temperature sensors, five fan rotation The chips implement three temperature sensors, five fan rotation
speed sensors, ten analog voltage sensors (only nine for the 627DHG), one speed sensors, ten analog voltage sensors (only nine for the 627DHG), one
...@@ -68,14 +72,15 @@ follows: ...@@ -68,14 +72,15 @@ follows:
temp1 -> pwm1 temp1 -> pwm1
temp2 -> pwm2 temp2 -> pwm2
temp3 -> pwm3 temp3 -> pwm3
prog -> pwm4 (not on 667HG; the programmable setting is not supported by prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not
the driver) supported by the driver)
/sys files /sys files
---------- ----------
name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG, name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG,
it is set to "w83627ehf" and for the W83627DHG it is set to "w83627dhg" it is set to "w83627ehf", for the W83627DHG it is set to "w83627dhg",
and for the W83667HG it is set to "w83667hg".
pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range: pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range:
0 (stop) to 255 (full) 0 (stop) to 255 (full)
......
...@@ -102,7 +102,7 @@ static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev) ...@@ -102,7 +102,7 @@ static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev)
memset(&i2c_info, 0, sizeof(struct i2c_board_info)); memset(&i2c_info, 0, sizeof(struct i2c_board_info));
strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE);
isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info,
normal_i2c); normal_i2c, NULL);
i2c_put_adapter(i2c_adap); i2c_put_adapter(i2c_adap);
(...) (...)
} }
......
...@@ -45,7 +45,6 @@ This document describes the Linux kernel Makefiles. ...@@ -45,7 +45,6 @@ This document describes the Linux kernel Makefiles.
--- 7.1 header-y --- 7.1 header-y
--- 7.2 objhdr-y --- 7.2 objhdr-y
--- 7.3 destination-y --- 7.3 destination-y
--- 7.4 unifdef-y (deprecated)
=== 8 Kbuild Variables === 8 Kbuild Variables
=== 9 Makefile language === 9 Makefile language
...@@ -1245,11 +1244,6 @@ See subsequent chapter for the syntax of the Kbuild file. ...@@ -1245,11 +1244,6 @@ See subsequent chapter for the syntax of the Kbuild file.
will be located in the directory "include/linux" when exported. will be located in the directory "include/linux" when exported.
--- 7.4 unifdef-y (deprecated)
unifdef-y is deprecated. A direct replacement is header-y.
=== 8 Kbuild Variables === 8 Kbuild Variables
The top Makefile exports the following variables: The top Makefile exports the following variables:
......
...@@ -88,8 +88,8 @@ parameter is applicable: ...@@ -88,8 +88,8 @@ parameter is applicable:
RAM RAM disk support is enabled. RAM RAM disk support is enabled.
S390 S390 architecture is enabled. S390 S390 architecture is enabled.
SCSI Appropriate SCSI support is enabled. SCSI Appropriate SCSI support is enabled.
A lot of drivers has their options described inside of A lot of drivers have their options described inside
Documentation/scsi/. the Documentation/scsi/ sub-directory.
SECURITY Different security models are enabled. SECURITY Different security models are enabled.
SELINUX SELinux support is enabled. SELINUX SELinux support is enabled.
APPARMOR AppArmor support is enabled. APPARMOR AppArmor support is enabled.
...@@ -284,27 +284,12 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -284,27 +284,12 @@ and is between 256 and 4096 characters. It is defined in the file
add_efi_memmap [EFI; X86] Include EFI memory map in add_efi_memmap [EFI; X86] Include EFI memory map in
kernel's map of available physical RAM. kernel's map of available physical RAM.
advansys= [HW,SCSI]
See header of drivers/scsi/advansys.c.
agp= [AGP] agp= [AGP]
{ off | try_unsupported } { off | try_unsupported }
off: disable AGP support off: disable AGP support
try_unsupported: try to drive unsupported chipsets try_unsupported: try to drive unsupported chipsets
(may crash computer or cause data corruption) (may crash computer or cause data corruption)
aha152x= [HW,SCSI]
See Documentation/scsi/aha152x.txt.
aha1542= [HW,SCSI]
Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]]
aic7xxx= [HW,SCSI]
See Documentation/scsi/aic7xxx.txt.
aic79xx= [HW,SCSI]
See Documentation/scsi/aic79xx.txt.
ALSA [HW,ALSA] ALSA [HW,ALSA]
See Documentation/sound/alsa/alsa-parameters.txt See Documentation/sound/alsa/alsa-parameters.txt
...@@ -368,8 +353,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -368,8 +353,6 @@ and is between 256 and 4096 characters. It is defined in the file
atarimouse= [HW,MOUSE] Atari Mouse atarimouse= [HW,MOUSE] Atari Mouse
atascsi= [HW,SCSI] Atari SCSI
atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess, atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess,
EzKey and similar keyboards EzKey and similar keyboards
...@@ -419,10 +402,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -419,10 +402,6 @@ and is between 256 and 4096 characters. It is defined in the file
bttv.pll= See Documentation/video4linux/bttv/Insmod-options bttv.pll= See Documentation/video4linux/bttv/Insmod-options
bttv.tuner= and Documentation/video4linux/bttv/CARDLIST bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
BusLogic= [HW,SCSI]
See drivers/scsi/BusLogic.c, comment before function
BusLogic_ParseDriverOptions().
c101= [NET] Moxa C101 synchronous serial card c101= [NET] Moxa C101 synchronous serial card
cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection. cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection.
...@@ -671,8 +650,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -671,8 +650,6 @@ and is between 256 and 4096 characters. It is defined in the file
dscc4.setup= [NET] dscc4.setup= [NET]
dtc3181e= [HW,SCSI]
dynamic_printk Enables pr_debug()/dev_dbg() calls if dynamic_printk Enables pr_debug()/dev_dbg() calls if
CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
These can also be switched on/off via These can also be switched on/off via
...@@ -681,8 +658,11 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -681,8 +658,11 @@ and is between 256 and 4096 characters. It is defined in the file
earlycon= [KNL] Output early console device and options. earlycon= [KNL] Output early console device and options.
uart[8250],io,<addr>[,options] uart[8250],io,<addr>[,options]
uart[8250],mmio,<addr>[,options] uart[8250],mmio,<addr>[,options]
uart[8250],mmio32,<addr>[,options]
Start an early, polled-mode console on the 8250/16550 Start an early, polled-mode console on the 8250/16550
UART at the specified I/O port or MMIO address. UART at the specified I/O port or MMIO address.
MMIO inter-register address stride is either 8bit (mmio)
or 32bit (mmio32).
The options are the same as for ttyS, above. The options are the same as for ttyS, above.
earlyprintk= [X86,SH,BLACKFIN] earlyprintk= [X86,SH,BLACKFIN]
...@@ -710,8 +690,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -710,8 +690,6 @@ and is between 256 and 4096 characters. It is defined in the file
This is desgined to be used in conjunction with This is desgined to be used in conjunction with
the boot argument: earlyprintk=vga the boot argument: earlyprintk=vga
eata= [HW,SCSI]
edd= [EDD] edd= [EDD]
Format: {"off" | "on" | "skip[mbr]"} Format: {"off" | "on" | "skip[mbr]"}
...@@ -767,12 +745,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -767,12 +745,6 @@ and is between 256 and 4096 characters. It is defined in the file
Format: <interval>,<probability>,<space>,<times> Format: <interval>,<probability>,<space>,<times>
See also /Documentation/fault-injection/. See also /Documentation/fault-injection/.
fd_mcs= [HW,SCSI]
See header of drivers/scsi/fd_mcs.c.
fdomain= [HW,SCSI]
See header of drivers/scsi/fdomain.c.
floppy= [HW] floppy= [HW]
See Documentation/blockdev/floppy.txt. See Documentation/blockdev/floppy.txt.
...@@ -832,14 +804,9 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -832,14 +804,9 @@ and is between 256 and 4096 characters. It is defined in the file
When zero, profiling data is discarded and associated When zero, profiling data is discarded and associated
debugfs files are removed at module unload time. debugfs files are removed at module unload time.
gdth= [HW,SCSI]
See header of drivers/scsi/gdth.c.
gpt [EFI] Forces disk with valid GPT signature but gpt [EFI] Forces disk with valid GPT signature but
invalid Protective MBR to be treated as GPT. invalid Protective MBR to be treated as GPT.
gvp11= [HW,SCSI]
hashdist= [KNL,NUMA] Large hashes allocated during boot hashdist= [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes. Defaults on are distributed across NUMA nodes. Defaults on
for 64bit NUMA, off otherwise. for 64bit NUMA, off otherwise.
...@@ -912,9 +879,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -912,9 +879,6 @@ and is between 256 and 4096 characters. It is defined in the file
controller controller
i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
controllers controllers
i8042.panicblink=
[HW] Frequency with which keyboard LEDs should blink
when kernel panics (default is 0.5 sec)
i8042.reset [HW] Reset the controller during init and cleanup i8042.reset [HW] Reset the controller during init and cleanup
i8042.unlock [HW] Unlock (ignore) the keylock i8042.unlock [HW] Unlock (ignore) the keylock
...@@ -931,9 +895,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -931,9 +895,6 @@ and is between 256 and 4096 characters. It is defined in the file
i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN
capability is set. capability is set.
ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter
See Documentation/mca.txt.
icn= [HW,ISDN] icn= [HW,ISDN]
Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]]
...@@ -983,9 +944,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -983,9 +944,6 @@ and is between 256 and 4096 characters. It is defined in the file
programs exec'd, files mmap'd for exec, and all files programs exec'd, files mmap'd for exec, and all files
opened for read by uid=0. opened for read by uid=0.
in2000= [HW,SCSI]
See header of drivers/scsi/in2000.c.
init= [KNL] init= [KNL]
Format: <full_path> Format: <full_path>
Run specified binary instead of /sbin/init as init Run specified binary instead of /sbin/init as init
...@@ -1023,6 +981,12 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1023,6 +981,12 @@ and is between 256 and 4096 characters. It is defined in the file
result in a hardware IOTLB flush operation as opposed result in a hardware IOTLB flush operation as opposed
to batching them for performance. to batching them for performance.
intremap= [X86-64, Intel-IOMMU]
Format: { on (default) | off | nosid }
on enable Interrupt Remapping (default)
off disable Interrupt Remapping
nosid disable Source ID checking
inttest= [IA64] inttest= [IA64]
iomem= Disable strict checking of access to MMIO memory iomem= Disable strict checking of access to MMIO memory
...@@ -1063,9 +1027,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1063,9 +1027,6 @@ and is between 256 and 4096 characters. It is defined in the file
See comment before ip2_setup() in See comment before ip2_setup() in
drivers/char/ip2/ip2base.c. drivers/char/ip2/ip2base.c.
ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
See header of drivers/scsi/ips.c.
irqfixup [HW] irqfixup [HW]
When an interrupt is not handled search all handlers When an interrupt is not handled search all handlers
for it. Intended to get systems with badly broken for it. Intended to get systems with badly broken
...@@ -1341,9 +1302,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1341,9 +1302,6 @@ and is between 256 and 4096 characters. It is defined in the file
ltpc= [NET] ltpc= [NET]
Format: <io>,<irq>,<dma> Format: <io>,<irq>,<dma>
mac5380= [HW,SCSI] Format:
<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
machvec= [IA64] Force the use of a particular machine-vector machvec= [IA64] Force the use of a particular machine-vector
(machvec) in a generic kernel. (machvec) in a generic kernel.
Example: machvec=hpzx1_swiotlb Example: machvec=hpzx1_swiotlb
...@@ -1365,13 +1323,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1365,13 +1323,6 @@ and is between 256 and 4096 characters. It is defined in the file
be mounted be mounted
Format: <1-256> Format: <1-256>
max_luns= [SCSI] Maximum number of LUNs to probe.
Should be between 1 and 2^32-1.
max_report_luns=
[SCSI] Maximum number of LUNs received.
Should be between 1 and 16384.
mcatest= [IA-64] mcatest= [IA-64]
mce [X86-32] Machine Check Exception mce [X86-32] Machine Check Exception
...@@ -1568,19 +1519,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1568,19 +1519,6 @@ and is between 256 and 4096 characters. It is defined in the file
n2= [NET] SDL Inc. RISCom/N2 synchronous serial card n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
NCR_D700= [HW,SCSI]
See header of drivers/scsi/NCR_D700.c.
ncr5380= [HW,SCSI]
ncr53c400= [HW,SCSI]
ncr53c400a= [HW,SCSI]
ncr53c406a= [HW,SCSI]
ncr53c8xx= [HW,SCSI]
netdev= [NET] Network devices parameters netdev= [NET] Network devices parameters
Format: <irq>,<io>,<mem_start>,<mem_end>,<name> Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
Note that mem_start is often overloaded to mean Note that mem_start is often overloaded to mean
...@@ -1749,6 +1687,7 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1749,6 +1687,7 @@ and is between 256 and 4096 characters. It is defined in the file
nointremap [X86-64, Intel-IOMMU] Do not enable interrupt nointremap [X86-64, Intel-IOMMU] Do not enable interrupt
remapping. remapping.
[Deprecated - use intremap=off]
nointroute [IA-64] nointroute [IA-64]
...@@ -1859,10 +1798,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1859,10 +1798,6 @@ and is between 256 and 4096 characters. It is defined in the file
OSS [HW,OSS] OSS [HW,OSS]
See Documentation/sound/oss/oss-parameters.txt See Documentation/sound/oss/oss-parameters.txt
osst= [HW,SCSI] SCSI Tape Driver
Format: <buffer_size>,<write_threshold>
See also Documentation/scsi/st.txt.
panic= [KNL] Kernel behaviour on panic panic= [KNL] Kernel behaviour on panic
Format: <timeout> Format: <timeout>
...@@ -1895,9 +1830,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1895,9 +1830,6 @@ and is between 256 and 4096 characters. It is defined in the file
Currently this function knows 686a and 8231 chips. Currently this function knows 686a and 8231 chips.
Format: [spp|ps2|epp|ecp|ecpepp] Format: [spp|ps2|epp|ecp|ecpepp]
pas16= [HW,SCSI]
See header of drivers/scsi/pas16.c.
pause_on_oops= pause_on_oops=
Halt all CPUs after the first oops has been printed for Halt all CPUs after the first oops has been printed for
the specified number of seconds. This is to be used if the specified number of seconds. This is to be used if
...@@ -2264,30 +2196,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -2264,30 +2196,6 @@ and is between 256 and 4096 characters. It is defined in the file
sched_debug [KNL] Enables verbose scheduler debug messages. sched_debug [KNL] Enables verbose scheduler debug messages.
scsi_debug_*= [SCSI]
See drivers/scsi/scsi_debug.c.
scsi_default_dev_flags=
[SCSI] SCSI default device flags
Format: <integer>
scsi_dev_flags= [SCSI] Black/white list entry for vendor and model
Format: <vendor>:<model>:<flags>
(flags are integer value)
scsi_logging_level= [SCSI] a bit mask of logging levels
See drivers/scsi/scsi_logging.h for bits. Also
settable via sysctl at dev.scsi.logging_level
(/proc/sys/dev/scsi/logging_level).
There is also a nice 'scsi_logging_level' script in the
S390-tools package, available for download at
http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html
scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are
discovered. async scans them in kernel threads,
allowing boot to proceed. none ignores them, expecting
user space to do the scan.
security= [SECURITY] Choose a security module to enable at boot. security= [SECURITY] Choose a security module to enable at boot.
If this boot parameter is not specified, only the first If this boot parameter is not specified, only the first
security module asking for security registration will be security module asking for security registration will be
...@@ -2321,9 +2229,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -2321,9 +2229,6 @@ and is between 256 and 4096 characters. It is defined in the file
The parameter means the number of CPUs to show, The parameter means the number of CPUs to show,
for example 1 means boot CPU only. for example 1 means boot CPU only.
sim710= [SCSI,HW]
See header of drivers/scsi/sim710.c.
simeth= [IA-64] simeth= [IA-64]
simscsi= simscsi=
...@@ -2395,9 +2300,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -2395,9 +2300,6 @@ and is between 256 and 4096 characters. It is defined in the file
spia_pedr= spia_pedr=
spia_peddr= spia_peddr=
st= [HW,SCSI] SCSI tape parameters (buffers, etc.)
See Documentation/scsi/st.txt.
stacktrace [FTRACE] stacktrace [FTRACE]
Enabled the stack tracer on boot up. Enabled the stack tracer on boot up.
...@@ -2455,18 +2357,12 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -2455,18 +2357,12 @@ and is between 256 and 4096 characters. It is defined in the file
switches= [HW,M68k] switches= [HW,M68k]
sym53c416= [HW,SCSI]
See header of drivers/scsi/sym53c416.c.
sysrq_always_enabled sysrq_always_enabled
[KNL] [KNL]
Ignore sysrq setting - this boot parameter will Ignore sysrq setting - this boot parameter will
neutralize any effect of /proc/sys/kernel/sysrq. neutralize any effect of /proc/sys/kernel/sysrq.
Useful for debugging. Useful for debugging.
t128= [HW,SCSI]
See header of drivers/scsi/t128.c.
tdfx= [HW,DRM] tdfx= [HW,DRM]
test_suspend= [SUSPEND] test_suspend= [SUSPEND]
...@@ -2503,10 +2399,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -2503,10 +2399,6 @@ and is between 256 and 4096 characters. It is defined in the file
<deci-seconds>: poll all this frequency <deci-seconds>: poll all this frequency
0: no polling (default) 0: no polling (default)
tmscsim= [HW,SCSI]
See comment before function dc390_setup() in
drivers/scsi/tmscsim.c.
topology= [S390] topology= [S390]
Format: {off | on} Format: {off | on}
Specify if the kernel should make use of the cpu Specify if the kernel should make use of the cpu
...@@ -2547,9 +2439,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -2547,9 +2439,6 @@ and is between 256 and 4096 characters. It is defined in the file
<port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
See also Documentation/input/joystick-parport.txt See also Documentation/input/joystick-parport.txt
u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
See header of drivers/scsi/u14-34f.c.
uhash_entries= [KNL,NET] uhash_entries= [KNL,NET]
Set number of hash buckets for UDP/UDP-Lite connections Set number of hash buckets for UDP/UDP-Lite connections
...@@ -2715,12 +2604,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -2715,12 +2604,6 @@ and is between 256 and 4096 characters. It is defined in the file
overridden by individual drivers. 0 will hide overridden by individual drivers. 0 will hide
cursors, 1 will display them. cursors, 1 will display them.
wd33c93= [HW,SCSI]
See header of drivers/scsi/wd33c93.c.
wd7000= [HW,SCSI]
See header of drivers/scsi/wd7000.c.
watchdog timers [HW,WDT] For information on watchdog timers, watchdog timers [HW,WDT] For information on watchdog timers,
see Documentation/watchdog/watchdog-parameters.txt see Documentation/watchdog/watchdog-parameters.txt
or other driver-specific files in the or other driver-specific files in the
......
00-INDEX
- this file
mmc-dev-attrs.txt
- info on SD and MMC device attributes
SD and MMC Device Attributes
============================
All attributes are read-only.
cid Card Identifaction Register
csd Card Specific Data Register
scr SD Card Configuration Register (SD only)
date Manufacturing Date (from CID Register)
fwrev Firmware/Product Revision (from CID Register) (SD and MMCv1 only)
hwrev Hardware/Product Revision (from CID Register) (SD and MMCv1 only)
manfid Manufacturer ID (from CID Register)
name Product Name (from CID Register)
oemid OEM/Application ID (from CID Register)
serial Product Serial Number (from CID Register)
erase_size Erase group size
preferred_erase_size Preferred erase size
Note on Erase Size and Preferred Erase Size:
"erase_size" is the minimum size, in bytes, of an erase
operation. For MMC, "erase_size" is the erase group size
reported by the card. Note that "erase_size" does not apply
to trim or secure trim operations where the minimum size is
always one 512 byte sector. For SD, "erase_size" is 512
if the card is block-addressed, 0 otherwise.
SD/MMC cards can erase an arbitrarily large area up to and
including the whole card. When erasing a large area it may
be desirable to do it in smaller chunks for three reasons:
1. A single erase command will make all other I/O on
the card wait. This is not a problem if the whole card
is being erased, but erasing one partition will make
I/O for another partition on the same card wait for the
duration of the erase - which could be a several
minutes.
2. To be able to inform the user of erase progress.
3. The erase timeout becomes too large to be very
useful. Because the erase timeout contains a margin
which is multiplied by the size of the erase area,
the value can end up being several minutes for large
areas.
"erase_size" is not the most efficient unit to erase
(especially for SD where it is just one sector),
hence "preferred_erase_size" provides a good chunk
size for erasing large areas.
For MMC, "preferred_erase_size" is the high-capacity
erase size if a card specifies one, otherwise it is
based on the capacity of the card.
For SD, "preferred_erase_size" is the allocation unit
size specified by the card.
"preferred_erase_size" is in bytes.
The Wavelan drivers saga
------------------------
By Jean Tourrilhes <jt@hpl.hp.com>
The Wavelan is a Radio network adapter designed by
Lucent. Under this generic name is hidden quite a variety of hardware,
and many Linux driver to support it.
The get the full story on Wireless LANs, please consult :
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
"wavelan" driver (old ISA Wavelan)
----------------
o Config : Network device -> Wireless LAN -> AT&T WaveLAN
o Location : .../drivers/net/wireless/wavelan*
o in-line doc : .../drivers/net/wireless/wavelan.p.h
o on-line doc :
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html
This is the driver for the ISA version of the first generation
of the Wavelan, now discontinued. The device is 2 Mb/s, composed of a
Intel 82586 controller and a Lucent Modem, and is NOT 802.11 compliant.
The driver has been tested with the following hardware :
o Wavelan ISA 915 MHz (full length ISA card)
o Wavelan ISA 915 MHz 2.0 (half length ISA card)
o Wavelan ISA 2.4 GHz (full length ISA card, fixed frequency)
o Wavelan ISA 2.4 GHz 2.0 (half length ISA card, frequency selectable)
o Above cards with the optional DES encryption feature
"wavelan_cs" driver (old Pcmcia Wavelan)
-------------------
o Config : Network device -> PCMCIA network ->
Pcmcia Wireless LAN -> AT&T/Lucent WaveLAN
o Location : .../drivers/net/pcmcia/wavelan*
o in-line doc : .../drivers/net/pcmcia/wavelan_cs.h
o on-line doc :
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html
This is the driver for the PCMCIA version of the first
generation of the Wavelan, now discontinued. The device is 2 Mb/s,
composed of a Intel 82593 controller (totally different from the 82586)
and a Lucent Modem, and NOT 802.11 compatible.
The driver has been tested with the following hardware :
o Wavelan Pcmcia 915 MHz 2.0 (Pcmcia card + separate
modem/antenna block)
o Wavelan Pcmcia 2.4 GHz 2.0 (Pcmcia card + separate
modem/antenna block)
"wvlan_cs" driver (Wavelan IEEE, GPL)
-----------------
o Config : Not yet in kernel
o Location : Pcmcia package 3.1.10+
o on-line doc :
http://web.archive.org/web/*/http://www.fasta.fh-dortmund.de/users/andy/wvlan/
This is the driver for the current generation of Wavelan IEEE,
which is 802.11 compatible. Depending on version, it is 2 Mb/s or 11
Mb/s, with or without encryption, all implemented in Lucent specific
DSP (the Hermes).
This is a GPL full source PCMCIA driver (ISA is just a Pcmcia
card with ISA-Pcmcia bridge).
"wavelan2_cs" driver (Wavelan IEEE, binary)
--------------------
o Config : Not yet in kernel
o Location : ftp://sourceforge.org/pcmcia/contrib/
This driver support exactly the same hardware as the previous
driver, the main difference is that it is based on a binary library
and supported by Lucent.
I hope it clears the confusion ;-)
Jean
...@@ -19,7 +19,7 @@ overall control of how tasks are to be run: ...@@ -19,7 +19,7 @@ overall control of how tasks are to be run:
The pcpumask describes which processors will be used to execute work The pcpumask describes which processors will be used to execute work
submitted to this instance in parallel. The cbcpumask defines which submitted to this instance in parallel. The cbcpumask defines which
processors are allowed to use as the serialization callback processor. processors are allowed to be used as the serialization callback processor.
The workqueue wq is where the work will actually be done; it should be The workqueue wq is where the work will actually be done; it should be
a multithreaded queue, naturally. a multithreaded queue, naturally.
...@@ -30,10 +30,10 @@ cpumasks this helper function can be used: ...@@ -30,10 +30,10 @@ cpumasks this helper function can be used:
Note: Padata maintains two kinds of cpumasks internally. The user supplied Note: Padata maintains two kinds of cpumasks internally. The user supplied
cpumasks, submitted by padata_alloc/padata_alloc_possible and the 'usable' cpumasks, submitted by padata_alloc/padata_alloc_possible and the 'usable'
cpumasks. The usable cpumasks are always the subset of active cpus in the cpumasks. The usable cpumasks are always a subset of active CPUs in the
user supplied cpumasks, these are the cpumasks padata actually use. So user supplied cpumasks; these are the cpumasks padata actually uses. So
it is legal to supply a cpumask to padata that contains offline cpus. it is legal to supply a cpumask to padata that contains offline CPUs.
Once a offline cpu in the user supplied cpumask comes online, padata Once an offline CPU in the user supplied cpumask comes online, padata
is going to use it. is going to use it.
There are functions for enabling and disabling the instance: There are functions for enabling and disabling the instance:
...@@ -44,7 +44,7 @@ There are functions for enabling and disabling the instance: ...@@ -44,7 +44,7 @@ There are functions for enabling and disabling the instance:
These functions are setting or clearing the "PADATA_INIT" flag; These functions are setting or clearing the "PADATA_INIT" flag;
if that flag is not set, other functions will refuse to work. if that flag is not set, other functions will refuse to work.
padata_start returns zero on success (flag set) or -EINVAL if the padata_start returns zero on success (flag set) or -EINVAL if the
padata cpumask contains no active cpu (flag not set). padata cpumask contains no active CPU (flag not set).
padata_stop clears the flag and blocks until the padata instance padata_stop clears the flag and blocks until the padata instance
is unused. is unused.
...@@ -63,11 +63,11 @@ done with great frequency. ...@@ -63,11 +63,11 @@ done with great frequency.
It's possible to change both cpumasks of a padata instance with It's possible to change both cpumasks of a padata instance with
padata_set_cpumasks by specifying the cpumasks for parallel execution (pcpumask) padata_set_cpumasks by specifying the cpumasks for parallel execution (pcpumask)
and for the serial callback function (cbcpumask). padata_set_cpumask is to and for the serial callback function (cbcpumask). padata_set_cpumask is used to
change just one of the cpumasks. Here cpumask_type is one of PADATA_CPU_SERIAL, change just one of the cpumasks. Here cpumask_type is one of PADATA_CPU_SERIAL,
PADATA_CPU_PARALLEL and cpumask specifies the new cpumask to use. PADATA_CPU_PARALLEL and cpumask specifies the new cpumask to use.
To simply add or remove one cpu from a certain cpumask the functions To simply add or remove one CPU from a certain cpumask the functions
padata_add_cpu/padata_remove_cpu are used. cpu specifies the cpu to add or padata_add_cpu/padata_remove_cpu are used. cpu specifies the CPU to add or
remove and mask is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL. remove and mask is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL.
If a user is interested in padata cpumask changes, he can register to If a user is interested in padata cpumask changes, he can register to
...@@ -82,7 +82,7 @@ To unregister from that notifier: ...@@ -82,7 +82,7 @@ To unregister from that notifier:
struct notifier_block *nblock); struct notifier_block *nblock);
The padata cpumask change notifier notifies about changes of the usable The padata cpumask change notifier notifies about changes of the usable
cpumasks, i.e. the subset of active cpus in the user supplied cpumask. cpumasks, i.e. the subset of active CPUs in the user supplied cpumask.
Padata calls the notifier chain with: Padata calls the notifier chain with:
...@@ -92,7 +92,7 @@ Padata calls the notifier chain with: ...@@ -92,7 +92,7 @@ Padata calls the notifier chain with:
Here cpumask_change_notifier is registered notifier, notification_mask Here cpumask_change_notifier is registered notifier, notification_mask
is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL and cpumask is a pointer is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL and cpumask is a pointer
to a struct padata_cpumask that contains the new cpumask informations. to a struct padata_cpumask that contains the new cpumask information.
Actually submitting work to the padata instance requires the creation of a Actually submitting work to the padata instance requires the creation of a
padata_priv structure: padata_priv structure:
...@@ -104,7 +104,7 @@ padata_priv structure: ...@@ -104,7 +104,7 @@ padata_priv structure:
}; };
This structure will almost certainly be embedded within some larger This structure will almost certainly be embedded within some larger
structure specific to the work to be done. Most its fields are private to structure specific to the work to be done. Most of its fields are private to
padata, but the structure should be zeroed at initialisation time, and the padata, but the structure should be zeroed at initialisation time, and the
parallel() and serial() functions should be provided. Those functions will parallel() and serial() functions should be provided. Those functions will
be called in the process of getting the work done as we will see be called in the process of getting the work done as we will see
......
...@@ -14,6 +14,8 @@ Required properties: ...@@ -14,6 +14,8 @@ Required properties:
reports inverted write-protect state; reports inverted write-protect state;
- sdhci,1-bit-only : (optional) specifies that a controller can - sdhci,1-bit-only : (optional) specifies that a controller can
only handle 1-bit data transfers. only handle 1-bit data transfers.
- sdhci,auto-cmd12: (optional) specifies that a controller can
only handle auto CMD12.
Example: Example:
......
SCSI Kernel Parameters
~~~~~~~~~~~~~~~~~~~~~~
See Documentation/kernel-parameters.txt for general information on
specifying module parameters.
This document may not be entirely up to date and comprehensive. The command
"modinfo -p ${modulename}" shows a current list of all parameters of a loadable
module. Loadable modules, after being loaded into the running kernel, also
reveal their parameters in /sys/module/${modulename}/parameters/. Some of these
parameters may be changed at runtime by the command
"echo -n ${value} > /sys/module/${modulename}/parameters/${parm}".
advansys= [HW,SCSI]
See header of drivers/scsi/advansys.c.
aha152x= [HW,SCSI]
See Documentation/scsi/aha152x.txt.
aha1542= [HW,SCSI]
Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]]
aic7xxx= [HW,SCSI]
See Documentation/scsi/aic7xxx.txt.
aic79xx= [HW,SCSI]
See Documentation/scsi/aic79xx.txt.
atascsi= [HW,SCSI] Atari SCSI
BusLogic= [HW,SCSI]
See drivers/scsi/BusLogic.c, comment before function
BusLogic_ParseDriverOptions().
dtc3181e= [HW,SCSI]
eata= [HW,SCSI]
fd_mcs= [HW,SCSI]
See header of drivers/scsi/fd_mcs.c.
fdomain= [HW,SCSI]
See header of drivers/scsi/fdomain.c.
gdth= [HW,SCSI]
See header of drivers/scsi/gdth.c.
gvp11= [HW,SCSI]
ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter
See Documentation/mca.txt.
in2000= [HW,SCSI]
See header of drivers/scsi/in2000.c.
ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
See header of drivers/scsi/ips.c.
mac5380= [HW,SCSI] Format:
<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
max_luns= [SCSI] Maximum number of LUNs to probe.
Should be between 1 and 2^32-1.
max_report_luns=
[SCSI] Maximum number of LUNs received.
Should be between 1 and 16384.
NCR_D700= [HW,SCSI]
See header of drivers/scsi/NCR_D700.c.
ncr5380= [HW,SCSI]
ncr53c400= [HW,SCSI]
ncr53c400a= [HW,SCSI]
ncr53c406a= [HW,SCSI]
ncr53c8xx= [HW,SCSI]
nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
osst= [HW,SCSI] SCSI Tape Driver
Format: <buffer_size>,<write_threshold>
See also Documentation/scsi/st.txt.
pas16= [HW,SCSI]
See header of drivers/scsi/pas16.c.
scsi_debug_*= [SCSI]
See drivers/scsi/scsi_debug.c.
scsi_default_dev_flags=
[SCSI] SCSI default device flags
Format: <integer>
scsi_dev_flags= [SCSI] Black/white list entry for vendor and model
Format: <vendor>:<model>:<flags>
(flags are integer value)
scsi_logging_level= [SCSI] a bit mask of logging levels
See drivers/scsi/scsi_logging.h for bits. Also
settable via sysctl at dev.scsi.logging_level
(/proc/sys/dev/scsi/logging_level).
There is also a nice 'scsi_logging_level' script in the
S390-tools package, available for download at
http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html
scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are
discovered. async scans them in kernel threads,
allowing boot to proceed. none ignores them, expecting
user space to do the scan.
sim710= [SCSI,HW]
See header of drivers/scsi/sim710.c.
st= [HW,SCSI] SCSI tape parameters (buffers, etc.)
See Documentation/scsi/st.txt.
sym53c416= [HW,SCSI]
See header of drivers/scsi/sym53c416.c.
t128= [HW,SCSI]
See header of drivers/scsi/t128.c.
tmscsim= [HW,SCSI]
See comment before function dc390_setup() in
drivers/scsi/tmscsim.c.
u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
See header of drivers/scsi/u14-34f.c.
wd33c93= [HW,SCSI]
See header of drivers/scsi/wd33c93.c.
wd7000= [HW,SCSI]
See header of drivers/scsi/wd7000.c.
...@@ -9,7 +9,7 @@ compatible with the USB 1.1 standard. It defines three transfer speeds: ...@@ -9,7 +9,7 @@ compatible with the USB 1.1 standard. It defines three transfer speeds:
- "Low Speed" 1.5 Mbit/sec - "Low Speed" 1.5 Mbit/sec
USB 1.1 only addressed full speed and low speed. High speed devices USB 1.1 only addressed full speed and low speed. High speed devices
can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds. can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds.
USB 1.1 devices may also be used on USB 2.0 systems. When plugged USB 1.1 devices may also be used on USB 2.0 systems. When plugged
into an EHCI controller, they are given to a USB 1.1 "companion" into an EHCI controller, they are given to a USB 1.1 "companion"
......
-*- org -*-
* Overview
The Multifunction Composite Gadget (or g_multi) is a composite gadget
that makes extensive use of the composite framework to provide
a... multifunction gadget.
In it's standard configuration it provides a single USB configuration
with RNDIS[1] (that is Ethernet), USB CDC[2] ACM (that is serial) and
USB Mass Storage functions.
A CDC ECM (Ethernet) function may be turned on via a Kconfig option
and RNDIS can be turned off. If they are both enabled the gadget will
have two configurations -- one with RNDIS and another with CDC ECM[3].
Please not that if you use non-standard configuration (that is enable
CDC ECM) you may need to change vendor and/or product ID.
* Host drivers
To make use of the gadget one needs to make it work on host side --
without that there's no hope of achieving anything with the gadget.
As one might expect, things one need to do very from system to system.
** Linux host drivers
Since the gadget uses standard composite framework and appears as such
to Linux host it does not need any additional drivers on Linux host
side. All the functions are handled by respective drivers developed
for them.
This is also true for two configuration set-up with RNDIS
configuration being the first one. Linux host will use the second
configuration with CDC ECM which should work better under Linux.
** Windows host drivers
For the gadget two work under Windows two conditions have to be met:
*** Detecting as composite gadget
First of all, Windows need to detect the gadget as an USB composite
gadget which on its own have some conditions[4]. If they are met,
Windows lets USB Generic Parent Driver[5] handle the device which then
tries to much drivers for each individual interface (sort of, don't
get into too many details).
The good news is: you do not have to worry about most of the
conditions!
The only thing to worry is that the gadget has to have a single
configuration so a dual RNDIS and CDC ECM gadget won't work unless you
create a proper INF -- and of course, if you do submit it!
*** Installing drivers for each function
The other, trickier thing is making Windows install drivers for each
individual function.
For mass storage it is trivial since Windows detect it's an interface
implementing USB Mass Storage class and selects appropriate driver.
Things are harder with RDNIS and CDC ACM.
**** RNDIS
To make Windows select RNDIS drivers for the first function in the
gadget, one needs to use the [[file:linux.inf]] file provided with this
document. It "attaches" Window's RNDIS driver to the first interface
of the gadget.
Please note, that while testing we encountered some issues[6] when
RNDIS was not the first interface. You do not need to worry abut it
unless you are trying to develop your own gadget in which case watch
out for this bug.
**** CDC ACM
Similarly, [[file:linux-cdc-acm.inf]] is provided for CDC ACM.
**** Customising the gadget
If you intend to hack the g_multi gadget be advised that rearranging
functions will obviously change interface numbers for each of the
functionality. As an effect provided INFs won't work since they have
interface numbers hard-coded in them (it's not hard to change those
though[7]).
This also means, that after experimenting with g_multi and changing
provided functions one should change gadget's vendor and/or product ID
so there will be no collision with other customised gadgets or the
original gadget.
Failing to comply may cause brain damage after wondering for hours why
things don't work as intended before realising Windows have cached
some drivers information (changing USB port may sometimes help plus
you might try using USBDeview[8] to remove the phantom device).
**** INF testing
Provided INF files have been tested on Windows XP SP3, Windows Vista
and Windows 7, all 32-bit versions. It should work on 64-bit versions
as well. It most likely won't work on Windows prior to Windows XP
SP2.
** Other systems
At this moment, drivers for any other systems have not been tested.
Knowing how MacOS is based on BSD and BSD is an Open Source it is
believed that it should (read: "I have no idea whether it will") work
out-of-the-box.
For more exotic systems I have even less to say...
Any testing and drivers *are* *welcome*!
* Authors
This document has been written by Michal Nazarewicz
([[mailto:mina86@mina86.com]]). INF files have been hacked with
support of Marek Szyprowski ([[mailto:m.szyprowski@samsung.com]]) and
Xiaofan Chen ([[mailto:xiaofanc@gmail.com]]) basing on the MS RNDIS
template[9], Microchip's CDC ACM INF file and David Brownell's
([[mailto:dbrownell@users.sourceforge.net]]) original INF files.
* Footnotes
[1] Remote Network Driver Interface Specification,
[[http://msdn.microsoft.com/en-us/library/ee484414.aspx]].
[2] Communications Device Class Abstract Control Model, spec for this
and other USB classes can be found at
[[http://www.usb.org/developers/devclass_docs/]].
[3] CDC Ethernet Control Model.
[4] [[http://msdn.microsoft.com/en-us/library/ff537109(v=VS.85).aspx]]
[5] [[http://msdn.microsoft.com/en-us/library/ff539234(v=VS.85).aspx]]
[6] To put it in some other nice words, Windows failed to respond to
any user input.
[7] You may find [[http://www.cygnal.org/ubb/Forum9/HTML/001050.html]]
useful.
[8] http://www.nirsoft.net/utils/usb_devices_view.html
[9] [[http://msdn.microsoft.com/en-us/library/ff570620.aspx]]
...@@ -151,88 +151,23 @@ instructions below to install the host side driver. ...@@ -151,88 +151,23 @@ instructions below to install the host side driver.
Installing the Windows Host ACM Driver Installing the Windows Host ACM Driver
-------------------------------------- --------------------------------------
To use the Windows ACM driver you must have the files "gserial.inf" To use the Windows ACM driver you must have the "linux-cdc-acm.inf"
and "usbser.sys" together in a folder on the Windows machine. file (provided along this document) which supports all recent versions
of Windows.
The "gserial.inf" file is given here.
-------------------- CUT HERE --------------------
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%LINUX%
DriverVer=08/17/2004,0.0.2.0
; Copyright (C) 2004 Al Borchers (alborchers@steinerpoint.com)
[Manufacturer]
%LINUX%=GSerialDeviceList
[GSerialDeviceList]
%GSERIAL%=GSerialInstall, USB\VID_0525&PID_A4A7
[DestinationDirs]
DefaultDestDir=10,System32\Drivers
[GSerialInstall]
CopyFiles=GSerialCopyFiles
AddReg=GSerialAddReg
[GSerialCopyFiles]
usbser.sys
[GSerialAddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[GSerialInstall.Services]
AddService = usbser,0x0002,GSerialService
[GSerialService]
DisplayName = %GSERIAL_DISPLAY_NAME%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\usbser.sys
LoadOrderGroup = Base
[Strings]
LINUX = "Linux"
GSERIAL = "Gadget Serial"
GSERIAL_DISPLAY_NAME = "USB Gadget Serial Driver"
-------------------- CUT HERE --------------------
The "usbser.sys" file comes with various versions of Windows.
For example, it can be found on Windows XP typically in
C:\WINDOWS\Driver Cache\i386\driver.cab
Or it can be found on the Windows 98SE CD in the "win98" folder
in the "DRIVER11.CAB" through "DRIVER20.CAB" cab files. You will
need the DOS "expand" program, the Cygwin "cabextract" program, or
a similar program to unpack these cab files and extract "usbser.sys".
For example, to extract "usbser.sys" into the current directory
on Windows XP, open a DOS window and run a command like
expand C:\WINDOWS\Driver~1\i386\driver.cab -F:usbser.sys .
(Thanks to Nishant Kamat for pointing out this DOS command.)
When the gadget serial driver is loaded and the USB device connected When the gadget serial driver is loaded and the USB device connected
to the Windows host with a USB cable, Windows should recognize the to the Windows host with a USB cable, Windows should recognize the
gadget serial device and ask for a driver. Tell Windows to find the gadget serial device and ask for a driver. Tell Windows to find the
driver in the folder that contains "gserial.inf" and "usbser.sys". driver in the folder that contains the "linux-cdc-acm.inf" file.
For example, on Windows XP, when the gadget serial device is first For example, on Windows XP, when the gadget serial device is first
plugged in, the "Found New Hardware Wizard" starts up. Select plugged in, the "Found New Hardware Wizard" starts up. Select
"Install from a list or specific location (Advanced)", then on "Install from a list or specific location (Advanced)", then on the
the next screen select "Include this location in the search" and next screen select "Include this location in the search" and enter the
enter the path or browse to the folder containing "gserial.inf" and path or browse to the folder containing the "linux-cdc-acm.inf" file.
"usbser.sys". Windows will complain that the Gadget Serial driver Windows will complain that the Gadget Serial driver has not passed
has not passed Windows Logo testing, but select "Continue anyway" Windows Logo testing, but select "Continue anyway" and finish the
and finish the driver installation. driver installation.
On Windows XP, in the "Device Manager" (under "Control Panel", On Windows XP, in the "Device Manager" (under "Control Panel",
"System", "Hardware") expand the "Ports (COM & LPT)" entry and you "System", "Hardware") expand the "Ports (COM & LPT)" entry and you
...@@ -345,5 +280,3 @@ you should be able to send data back and forth between the gadget ...@@ -345,5 +280,3 @@ you should be able to send data back and forth between the gadget
side and host side systems. Anything you type on the terminal side and host side systems. Anything you type on the terminal
window on the gadget side should appear in the terminal window on window on the gadget side should appear in the terminal window on
the host side and vice versa. the host side and vice versa.
...@@ -10,7 +10,7 @@ immediately usable. That means the system must do many things, including: ...@@ -10,7 +10,7 @@ immediately usable. That means the system must do many things, including:
- Bind a driver to that device. Bus frameworks do that using a - Bind a driver to that device. Bus frameworks do that using a
device driver's probe() routine. device driver's probe() routine.
- Tell other subsystems to configure the new device. Print - Tell other subsystems to configure the new device. Print
queues may need to be enabled, networks brought up, disk queues may need to be enabled, networks brought up, disk
partitions mounted, and so on. In some cases these will partitions mounted, and so on. In some cases these will
...@@ -84,7 +84,7 @@ USB MODUTILS SUPPORT ...@@ -84,7 +84,7 @@ USB MODUTILS SUPPORT
Current versions of module-init-tools will create a "modules.usbmap" file Current versions of module-init-tools will create a "modules.usbmap" file
which contains the entries from each driver's MODULE_DEVICE_TABLE. Such which contains the entries from each driver's MODULE_DEVICE_TABLE. Such
files can be used by various user mode policy agents to make sure all the files can be used by various user mode policy agents to make sure all the
right driver modules get loaded, either at boot time or later. right driver modules get loaded, either at boot time or later.
See <linux/usb.h> for full information about such table entries; or look See <linux/usb.h> for full information about such table entries; or look
at existing drivers. Each table entry describes one or more criteria to at existing drivers. Each table entry describes one or more criteria to
......
; Windows USB CDC ACM Setup File
; Based on INF template which was:
; Copyright (c) 2000 Microsoft Corporation
; Copyright (c) 2007 Microchip Technology Inc.
; likely to be covered by the MLPL as found at:
; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>.
; For use only on Windows operating systems.
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%Linux%
DriverVer=11/15/2007,5.1.2600.0
[Manufacturer]
%Linux%=DeviceList, NTamd64
[DestinationDirs]
DefaultDestDir=12
;------------------------------------------------------------------------------
; Windows 2000/XP/Vista-32bit Sections
;------------------------------------------------------------------------------
[DriverInstall.nt]
include=mdmcpq.inf
CopyFiles=DriverCopyFiles.nt
AddReg=DriverInstall.nt.AddReg
[DriverCopyFiles.nt]
usbser.sys,,,0x20
[DriverInstall.nt.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,USBSER.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[DriverInstall.nt.Services]
AddService=usbser, 0x00000002, DriverService.nt
[DriverService.nt]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\USBSER.sys
;------------------------------------------------------------------------------
; Vista-64bit Sections
;------------------------------------------------------------------------------
[DriverInstall.NTamd64]
include=mdmcpq.inf
CopyFiles=DriverCopyFiles.NTamd64
AddReg=DriverInstall.NTamd64.AddReg
[DriverCopyFiles.NTamd64]
USBSER.sys,,,0x20
[DriverInstall.NTamd64.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,USBSER.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[DriverInstall.NTamd64.Services]
AddService=usbser, 0x00000002, DriverService.NTamd64
[DriverService.NTamd64]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\USBSER.sys
;------------------------------------------------------------------------------
; Vendor and Product ID Definitions
;------------------------------------------------------------------------------
; When developing your USB device, the VID and PID used in the PC side
; application program and the firmware on the microcontroller must match.
; Modify the below line to use your VID and PID. Use the format as shown
; below.
; Note: One INF file can be used for multiple devices with different
; VID and PIDs. For each supported device, append
; ",USB\VID_xxxx&PID_yyyy" to the end of the line.
;------------------------------------------------------------------------------
[SourceDisksFiles]
[SourceDisksNames]
[DeviceList]
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02
[DeviceList.NTamd64]
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02
;------------------------------------------------------------------------------
; String Definitions
;------------------------------------------------------------------------------
;Modify these strings to customize your device
;------------------------------------------------------------------------------
[Strings]
Linux = "Linux Developer Community"
DESCRIPTION = "Gadget Serial"
SERVICE = "USB RS-232 Emulation Driver"
; MS-Windows driver config matching some basic modes of the ; Based on template INF file found at
; Linux-USB Ethernet/RNDIS gadget firmware: ; <http://msdn.microsoft.com/en-us/library/ff570620.aspx>
; ; which was:
; - RNDIS plus CDC Ethernet ... this may be familiar as a DOCSIS ; Copyright (c) Microsoft Corporation
; cable modem profile, and supports most non-Microsoft USB hosts ; and released under the MLPL as found at:
; ; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>.
; - RNDIS plus CDC Subset ... used by hardware that incapable of ; For use only on Windows operating systems.
; full CDC Ethernet support.
;
; Microsoft only directly supports RNDIS drivers, and bundled them into XP.
; The Microsoft "Remote NDIS USB Driver Kit" is currently found at:
; http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx
[Version] [Version]
Signature = "$CHICAGO$" Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
Provider = %Linux% Provider = %Linux%
Compatible = 1 DriverVer = 06/21/2006,6.0.6000.16384
MillenniumPreferred = .ME
DriverVer = 03/30/2004,0.0.0.0
; catalog file would be used by WHQL
;CatalogFile = Linux.cat
[Manufacturer] [Manufacturer]
%Linux% = LinuxDevices,NT.5.1 %Linux% = LinuxDevices,NTx86,NTamd64,NTia64
; Decoration for x86 architecture
[LinuxDevices.NTx86]
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
[LinuxDevices] ; Decoration for x64 architecture
; NetChip IDs, used by both firmware modes [LinuxDevices.NTamd64]
%LinuxDevice% = RNDIS, USB\VID_0525&PID_a4a2 %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
[LinuxDevices.NT.5.1] ; Decoration for ia64 architecture
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2 [LinuxDevices.NTia64]
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
;@@@ This is the common setting for setup
[ControlFlags] [ControlFlags]
ExcludeFromSelect=* ExcludeFromSelect=*
; Windows 98, Windows 98 Second Edition specific sections -------- ; DDInstall section
; References the in-build Netrndis.inf
[RNDIS]
DeviceID = usb8023
MaxInstance = 512
DriverVer = 03/30/2004,0.0.0.0
AddReg = RNDIS_AddReg_98, RNDIS_AddReg_Common
[RNDIS_AddReg_98]
HKR, , DevLoader, 0, *ndis
HKR, , DeviceVxDs, 0, usb8023.sys
HKR, NDIS, LogDriverName, 0, "usb8023"
HKR, NDIS, MajorNdisVersion, 1, 5
HKR, NDIS, MinorNdisVersion, 1, 0
HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, DefLower, 0, "ethernet"
HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_98"
HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_98"
HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_98"
HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2"
[RNDIS_Install_98]
CopyFiles=RNDIS_CopyFiles_98
[RNDIS_CopyFiles_98]
usb8023.sys, usb8023w.sys, , 0
rndismp.sys, rndismpw.sys, , 0
; Windows Millennium Edition specific sections --------------------
[RNDIS.ME]
DeviceID = usb8023
MaxInstance = 512
DriverVer = 03/30/2004,0.0.0.0
AddReg = RNDIS_AddReg_ME, RNDIS_AddReg_Common
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
BusType = 15
[RNDIS_AddReg_ME]
HKR, , DevLoader, 0, *ndis
HKR, , DeviceVxDs, 0, usb8023.sys
HKR, NDIS, LogDriverName, 0, "usb8023"
HKR, NDIS, MajorNdisVersion, 1, 5
HKR, NDIS, MinorNdisVersion, 1, 0
HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, DefLower, 0, "ethernet"
HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5"
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_ME"
HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_ME"
HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_ME"
HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2"
[RNDIS_Install_ME]
CopyFiles=RNDIS_CopyFiles_ME
[RNDIS_CopyFiles_ME]
usb8023.sys, usb8023m.sys, , 0
rndismp.sys, rndismpm.sys, , 0
; Windows 2000 specific sections ---------------------------------
[RNDIS.NT]
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
BusType = 15
DriverVer = 03/30/2004,0.0.0.0
AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common
CopyFiles = RNDIS_CopyFiles_NT
[RNDIS.NT.Services]
AddService = USB_RNDIS, 2, RNDIS_ServiceInst_NT, RNDIS_EventLog
[RNDIS_CopyFiles_NT]
; no rename of files on Windows 2000, use the 'k' names as is
usb8023k.sys, , , 0
rndismpk.sys, , , 0
[RNDIS_ServiceInst_NT]
DisplayName = %ServiceDisplayName%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\usb8023k.sys
LoadOrderGroup = NDIS
AddReg = RNDIS_WMI_AddReg_NT
[RNDIS_WMI_AddReg_NT]
HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismpk.sys"
; Windows XP specific sections -----------------------------------
[RNDIS.NT.5.1] [RNDIS.NT.5.1]
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
BusType = 15 BusType = 15
DriverVer = 03/30/2004,0.0.0.0 ; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF
AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common include = netrndis.inf
; no copyfiles - the files are already in place needs = Usb_Rndis.ndi
AddReg = Rndis_AddReg_Vista
; DDInstal.Services section
[RNDIS.NT.5.1.Services] [RNDIS.NT.5.1.Services]
AddService = USB_RNDIS, 2, RNDIS_ServiceInst_51, RNDIS_EventLog include = netrndis.inf
needs = Usb_Rndis.ndi.Services
[RNDIS_ServiceInst_51]
DisplayName = %ServiceDisplayName% ; Optional registry settings. You can modify as needed.
ServiceType = 1 [RNDIS_AddReg_Vista]
StartType = 3 HKR, NDI\params\VistaProperty, ParamDesc, 0, %Vista_Property%
ErrorControl = 1 HKR, NDI\params\VistaProperty, type, 0, "edit"
ServiceBinary = %12%\usb8023.sys HKR, NDI\params\VistaProperty, LimitText, 0, "12"
LoadOrderGroup = NDIS HKR, NDI\params\VistaProperty, UpperCase, 0, "1"
AddReg = RNDIS_WMI_AddReg_51 HKR, NDI\params\VistaProperty, default, 0, " "
HKR, NDI\params\VistaProperty, optional, 0, "1"
[RNDIS_WMI_AddReg_51]
HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismp.sys" ; No sys copyfiles - the sys files are already in-build
; (part of the operating system).
; Windows 2000 and Windows XP common sections -------------------- ; We do not support XP SP1-, 2003 SP1-, ME, 9x.
[RNDIS_AddReg_NT]
HKR, Ndi, Service, 0, "USB_RNDIS"
HKR, Ndi\Interfaces, UpperRange, 0, "ndis5"
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
[RNDIS_EventLog]
AddReg = RNDIS_EventLog_AddReg
[RNDIS_EventLog_AddReg]
HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll"
HKR, , TypesSupported, 0x00010001, 7
; Common Sections -------------------------------------------------
[RNDIS_AddReg_Common]
HKR, NDI\params\NetworkAddress, ParamDesc, 0, %NetworkAddress%
HKR, NDI\params\NetworkAddress, type, 0, "edit"
HKR, NDI\params\NetworkAddress, LimitText, 0, "12"
HKR, NDI\params\NetworkAddress, UpperCase, 0, "1"
HKR, NDI\params\NetworkAddress, default, 0, " "
HKR, NDI\params\NetworkAddress, optional, 0, "1"
[SourceDisksNames]
1=%SourceDisk%,,1
[SourceDisksFiles]
usb8023m.sys=1
rndismpm.sys=1
usb8023w.sys=1
rndismpw.sys=1
usb8023k.sys=1
rndismpk.sys=1
[DestinationDirs]
RNDIS_CopyFiles_98 = 10, system32/drivers
RNDIS_CopyFiles_ME = 10, system32/drivers
RNDIS_CopyFiles_NT = 12
[Strings] [Strings]
ServiceDisplayName = "USB Remote NDIS Network Device Driver"
NetworkAddress = "Network Address"
Linux = "Linux Developer Community" Linux = "Linux Developer Community"
LinuxDevice = "Linux USB Ethernet/RNDIS Gadget" LinuxDevice = "Linux USB Ethernet/RNDIS Gadget"
SourceDisk = "Ethernet/RNDIS Gadget Driver Install Disk" Vista_Property = "Optional Vista Property"
此差异已折叠。
...@@ -616,10 +616,10 @@ M: Richard Purdie <rpurdie@rpsys.net> ...@@ -616,10 +616,10 @@ M: Richard Purdie <rpurdie@rpsys.net>
S: Maintained S: Maintained
ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
M: Paulius Zaleckas <paulius.zaleckas@gmail.com> M: Hans Ulli Kroll <ulli.kroll@googlemail.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
T: git git://gitorious.org/linux-gemini/mainline.git T: git git://git.berlios.de/gemini-board
S: Odd Fixes S: Maintained
F: arch/arm/mach-gemini/ F: arch/arm/mach-gemini/
ARM/EBSA110 MACHINE SUPPORT ARM/EBSA110 MACHINE SUPPORT
...@@ -641,9 +641,10 @@ T: topgit git://git.openezx.org/openezx.git ...@@ -641,9 +641,10 @@ T: topgit git://git.openezx.org/openezx.git
F: arch/arm/mach-pxa/ezx.c F: arch/arm/mach-pxa/ezx.c
ARM/FARADAY FA526 PORT ARM/FARADAY FA526 PORT
M: Paulius Zaleckas <paulius.zaleckas@gmail.com> M: Hans Ulli Kroll <ulli.kroll@googlemail.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Odd Fixes S: Maintained
T: git://git.berlios.de/gemini-board
F: arch/arm/mm/*-fa* F: arch/arm/mm/*-fa*
ARM/FOOTBRIDGE ARCHITECTURE ARM/FOOTBRIDGE ARCHITECTURE
...@@ -692,6 +693,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git ...@@ -692,6 +693,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
F: arch/arm/mach-sa1100/jornada720.c F: arch/arm/mach-sa1100/jornada720.c
F: arch/arm/mach-sa1100/include/mach/jornada720.h F: arch/arm/mach-sa1100/include/mach/jornada720.h
ARM/INCOME PXA270 SUPPORT
M: Marek Vasut <marek.vasut@gmail.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-pxa/income.c
F: arch/arm/mach-pxa/include/mach-pxa/income.h
ARM/INTEL IOP32X ARM ARCHITECTURE ARM/INTEL IOP32X ARM ARCHITECTURE
M: Lennert Buytenhek <kernel@wantstofly.org> M: Lennert Buytenhek <kernel@wantstofly.org>
M: Dan Williams <dan.j.williams@intel.com> M: Dan Williams <dan.j.williams@intel.com>
...@@ -947,8 +955,9 @@ ARM/SHMOBILE ARM ARCHITECTURE ...@@ -947,8 +955,9 @@ ARM/SHMOBILE ARM ARCHITECTURE
M: Paul Mundt <lethal@linux-sh.org> M: Paul Mundt <lethal@linux-sh.org>
M: Magnus Damm <magnus.damm@gmail.com> M: Magnus Damm <magnus.damm@gmail.com>
L: linux-sh@vger.kernel.org L: linux-sh@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
W: http://oss.renesas.com W: http://oss.renesas.com
Q: http://patchwork.kernel.org/project/linux-sh/list/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
S: Supported S: Supported
F: arch/arm/mach-shmobile/ F: arch/arm/mach-shmobile/
F: drivers/sh/ F: drivers/sh/
...@@ -2203,6 +2212,12 @@ F: drivers/misc/cb710/ ...@@ -2203,6 +2212,12 @@ F: drivers/misc/cb710/
F: drivers/mmc/host/cb710-mmc.* F: drivers/mmc/host/cb710-mmc.*
F: include/linux/cb710.h F: include/linux/cb710.h
ENE KB2426 (ENE0100/ENE020XX) INFRARED RECEIVER
M: Maxim Levitsky <maximlevitsky@gmail.com>
S: Maintained
F: drivers/media/IR/ene_ir.c
F: drivers/media/IR/ene_ir.h
EPSON 1355 FRAMEBUFFER DRIVER EPSON 1355 FRAMEBUFFER DRIVER
M: Christopher Hoover <ch@murgatroid.com> M: Christopher Hoover <ch@murgatroid.com>
M: Christopher Hoover <ch@hpl.hp.com> M: Christopher Hoover <ch@hpl.hp.com>
...@@ -4387,6 +4402,13 @@ M: Jim Cromie <jim.cromie@gmail.com> ...@@ -4387,6 +4402,13 @@ M: Jim Cromie <jim.cromie@gmail.com>
S: Maintained S: Maintained
F: drivers/char/pc8736x_gpio.c F: drivers/char/pc8736x_gpio.c
PC87427 HARDWARE MONITORING DRIVER
M: Jean Delvare <khali@linux-fr.org>
L: lm-sensors@lm-sensors.org
S: Maintained
F: Documentation/hwmon/pc87427
F: drivers/hwmon/pc87427.c
PCA9532 LED DRIVER PCA9532 LED DRIVER
M: Riku Voipio <riku.voipio@iki.fi> M: Riku Voipio <riku.voipio@iki.fi>
S: Maintained S: Maintained
...@@ -5264,6 +5286,13 @@ S: Maintained ...@@ -5264,6 +5286,13 @@ S: Maintained
F: Documentation/hwmon/smm665 F: Documentation/hwmon/smm665
F: drivers/hwmon/smm665.c F: drivers/hwmon/smm665.c
SMSC EMC2103 HARDWARE MONITOR DRIVER
M: Steve Glendinning <steve.glendinning@smsc.com>
L: lm-sensors@lm-sensors.org
S: Supported
F: Documentation/hwmon/emc2103
F: drivers/hwmon/emc2103.c
SMSC47B397 HARDWARE MONITOR DRIVER SMSC47B397 HARDWARE MONITOR DRIVER
M: "Mark M. Hoffman" <mhoffman@lightlink.com> M: "Mark M. Hoffman" <mhoffman@lightlink.com>
L: lm-sensors@lm-sensors.org L: lm-sensors@lm-sensors.org
...@@ -6373,8 +6402,9 @@ S: Supported ...@@ -6373,8 +6402,9 @@ S: Supported
F: drivers/input/touchscreen/*wm97* F: drivers/input/touchscreen/*wm97*
F: include/linux/wm97xx.h F: include/linux/wm97xx.h
WOLFSON MICROELECTRONICS PMIC DRIVERS WOLFSON MICROELECTRONICS DRIVERS
M: Mark Brown <broonie@opensource.wolfsonmicro.com> M: Mark Brown <broonie@opensource.wolfsonmicro.com>
M: Ian Lartey <ian@opensource.wolfsonmicro.com>
T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
W: http://opensource.wolfsonmicro.com/node/8 W: http://opensource.wolfsonmicro.com/node/8
S: Supported S: Supported
...@@ -6389,8 +6419,8 @@ F: drivers/watchdog/wm83*_wdt.c ...@@ -6389,8 +6419,8 @@ F: drivers/watchdog/wm83*_wdt.c
F: include/linux/mfd/wm831x/ F: include/linux/mfd/wm831x/
F: include/linux/mfd/wm8350/ F: include/linux/mfd/wm8350/
F: include/linux/mfd/wm8400* F: include/linux/mfd/wm8400*
F: sound/soc/codecs/wm8350.* F: include/sound/wm????.h
F: sound/soc/codecs/wm8400.* F: sound/soc/codecs/wm*
X.25 NETWORK LAYER X.25 NETWORK LAYER
M: Andrew Hendry <andrew.hendry@gmail.com> M: Andrew Hendry <andrew.hendry@gmail.com>
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 35 SUBLEVEL = 36
EXTRAVERSION = EXTRAVERSION = -rc1
NAME = Sheep on Meth NAME = Sheep on Meth
# *DOCUMENTATION* # *DOCUMENTATION*
...@@ -189,7 +189,6 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ ...@@ -189,7 +189,6 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
export KBUILD_BUILDHOST := $(SUBARCH) export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH) ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
# Architecture as present in compile.h # Architecture as present in compile.h
......
此差异已折叠。
include include/asm-generic/Kbuild.asm include include/asm-generic/Kbuild.asm
header-y += compiler.h
header-y += console.h
header-y += fpu.h
header-y += gentrap.h header-y += gentrap.h
header-y += regdef.h
header-y += pal.h header-y += pal.h
header-y += reg.h header-y += reg.h
header-y += regdef.h
unifdef-y += console.h header-y += sysinfo.h
unifdef-y += fpu.h
unifdef-y += sysinfo.h
unifdef-y += compiler.h
...@@ -41,9 +41,7 @@ static inline int dma_set_mask(struct device *dev, u64 mask) ...@@ -41,9 +41,7 @@ static inline int dma_set_mask(struct device *dev, u64 mask)
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
#define dma_is_consistent(d, h) (1)
#define dma_cache_sync(dev, va, size, dir) ((void)0) #define dma_cache_sync(dev, va, size, dir) ((void)0)
#define dma_get_cache_alignment() L1_CACHE_BYTES
#endif /* _ALPHA_DMA_MAPPING_H */ #endif /* _ALPHA_DMA_MAPPING_H */
...@@ -80,6 +80,7 @@ ...@@ -80,6 +80,7 @@
# define TIOCPKT_START 8 # define TIOCPKT_START 8
# define TIOCPKT_NOSTOP 16 # define TIOCPKT_NOSTOP 16
# define TIOCPKT_DOSTOP 32 # define TIOCPKT_DOSTOP 32
# define TIOCPKT_IOCTL 64
#define TIOCNOTTY 0x5422 #define TIOCNOTTY 0x5422
...@@ -91,6 +92,7 @@ ...@@ -91,6 +92,7 @@
#define TIOCGSID 0x5429 /* Return the session ID of FD */ #define TIOCGSID 0x5429 /* Return the session ID of FD */
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ #define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
#define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
#define TIOCSERCONFIG 0x5453 #define TIOCSERCONFIG 0x5453
#define TIOCSERGWILD 0x5454 #define TIOCSERGWILD 0x5454
...@@ -106,7 +108,5 @@ ...@@ -106,7 +108,5 @@
#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ #define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
#endif /* _ASM_ALPHA_IOCTLS_H */ #endif /* _ASM_ALPHA_IOCTLS_H */
...@@ -3,6 +3,4 @@ ...@@ -3,6 +3,4 @@
#include <asm-generic/scatterlist.h> #include <asm-generic/scatterlist.h>
#define ISA_DMA_THRESHOLD (~0UL)
#endif /* !(_ALPHA_SCATTERLIST_H) */ #endif /* !(_ALPHA_SCATTERLIST_H) */
...@@ -180,6 +180,7 @@ struct ktermios { ...@@ -180,6 +180,7 @@ struct ktermios {
#define FLUSHO 0x00800000 #define FLUSHO 0x00800000
#define PENDIN 0x20000000 #define PENDIN 0x20000000
#define IEXTEN 0x00000400 #define IEXTEN 0x00000400
#define EXTPROC 0x10000000
/* Values for the ACTION argument to `tcflow'. */ /* Values for the ACTION argument to `tcflow'. */
#define TCOOFF 0 #define TCOOFF 0
......
...@@ -234,17 +234,17 @@ linux_to_osf_statfs(struct kstatfs *linux_stat, struct osf_statfs __user *osf_st ...@@ -234,17 +234,17 @@ linux_to_osf_statfs(struct kstatfs *linux_stat, struct osf_statfs __user *osf_st
} }
static int static int
do_osf_statfs(struct dentry * dentry, struct osf_statfs __user *buffer, do_osf_statfs(struct path *path, struct osf_statfs __user *buffer,
unsigned long bufsiz) unsigned long bufsiz)
{ {
struct kstatfs linux_stat; struct kstatfs linux_stat;
int error = vfs_statfs(dentry, &linux_stat); int error = vfs_statfs(path, &linux_stat);
if (!error) if (!error)
error = linux_to_osf_statfs(&linux_stat, buffer, bufsiz); error = linux_to_osf_statfs(&linux_stat, buffer, bufsiz);
return error; return error;
} }
SYSCALL_DEFINE3(osf_statfs, char __user *, pathname, SYSCALL_DEFINE3(osf_statfs, const char __user *, pathname,
struct osf_statfs __user *, buffer, unsigned long, bufsiz) struct osf_statfs __user *, buffer, unsigned long, bufsiz)
{ {
struct path path; struct path path;
...@@ -252,7 +252,7 @@ SYSCALL_DEFINE3(osf_statfs, char __user *, pathname, ...@@ -252,7 +252,7 @@ SYSCALL_DEFINE3(osf_statfs, char __user *, pathname,
retval = user_path(pathname, &path); retval = user_path(pathname, &path);
if (!retval) { if (!retval) {
retval = do_osf_statfs(path.dentry, buffer, bufsiz); retval = do_osf_statfs(&path buffer, bufsiz);
path_put(&path); path_put(&path);
} }
return retval; return retval;
...@@ -267,7 +267,7 @@ SYSCALL_DEFINE3(osf_fstatfs, unsigned long, fd, ...@@ -267,7 +267,7 @@ SYSCALL_DEFINE3(osf_fstatfs, unsigned long, fd,
retval = -EBADF; retval = -EBADF;
file = fget(fd); file = fget(fd);
if (file) { if (file) {
retval = do_osf_statfs(file->f_path.dentry, buffer, bufsiz); retval = do_osf_statfs(&file->f_path, buffer, bufsiz);
fput(file); fput(file);
} }
return retval; return retval;
...@@ -358,7 +358,7 @@ osf_procfs_mount(char *dirname, struct procfs_args __user *args, int flags) ...@@ -358,7 +358,7 @@ osf_procfs_mount(char *dirname, struct procfs_args __user *args, int flags)
return do_mount("", dirname, "proc", flags, NULL); return do_mount("", dirname, "proc", flags, NULL);
} }
SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, char __user *, path, SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path,
int, flag, void __user *, data) int, flag, void __user *, data)
{ {
int retval; int retval;
...@@ -932,7 +932,7 @@ SYSCALL_DEFINE3(osf_setitimer, int, which, struct itimerval32 __user *, in, ...@@ -932,7 +932,7 @@ SYSCALL_DEFINE3(osf_setitimer, int, which, struct itimerval32 __user *, in,
} }
SYSCALL_DEFINE2(osf_utimes, char __user *, filename, SYSCALL_DEFINE2(osf_utimes, const char __user *, filename,
struct timeval32 __user *, tvs) struct timeval32 __user *, tvs)
{ {
struct timespec tv[2]; struct timespec tv[2];
......
...@@ -387,7 +387,7 @@ EXPORT_SYMBOL(dump_elf_task_fp); ...@@ -387,7 +387,7 @@ EXPORT_SYMBOL(dump_elf_task_fp);
* sys_execve() executes a new program. * sys_execve() executes a new program.
*/ */
asmlinkage int asmlinkage int
do_sys_execve(char __user *ufilename, char __user * __user *argv, do_sys_execve(const char __user *ufilename, char __user * __user *argv,
char __user * __user *envp, struct pt_regs *regs) char __user * __user *envp, struct pt_regs *regs)
{ {
int error; int error;
......
...@@ -644,6 +644,7 @@ config ARCH_S3C2410 ...@@ -644,6 +644,7 @@ config ARCH_S3C2410
select ARCH_HAS_CPUFREQ select ARCH_HAS_CPUFREQ
select HAVE_CLK select HAVE_CLK
select ARCH_USES_GETTIMEOFFSET select ARCH_USES_GETTIMEOFFSET
select HAVE_S3C2410_I2C
help help
Samsung S3C2410X CPU based systems, such as the Simtec Electronics Samsung S3C2410X CPU based systems, such as the Simtec Electronics
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
...@@ -673,6 +674,8 @@ config ARCH_S3C64XX ...@@ -673,6 +674,8 @@ config ARCH_S3C64XX
select S3C_DEV_NAND select S3C_DEV_NAND
select USB_ARCH_HAS_OHCI select USB_ARCH_HAS_OHCI
select SAMSUNG_GPIOLIB_4BIT select SAMSUNG_GPIOLIB_4BIT
select HAVE_S3C2410_I2C
select HAVE_S3C2410_WATCHDOG
help help
Samsung S3C64XX series based systems Samsung S3C64XX series based systems
...@@ -681,7 +684,10 @@ config ARCH_S5P6440 ...@@ -681,7 +684,10 @@ config ARCH_S5P6440
select CPU_V6 select CPU_V6
select GENERIC_GPIO select GENERIC_GPIO
select HAVE_CLK select HAVE_CLK
select HAVE_S3C2410_WATCHDOG
select ARCH_USES_GETTIMEOFFSET select ARCH_USES_GETTIMEOFFSET
select HAVE_S3C2410_I2C
select HAVE_S3C_RTC
help help
Samsung S5P6440 CPU based systems Samsung S5P6440 CPU based systems
...@@ -691,6 +697,7 @@ config ARCH_S5P6442 ...@@ -691,6 +697,7 @@ config ARCH_S5P6442
select GENERIC_GPIO select GENERIC_GPIO
select HAVE_CLK select HAVE_CLK
select ARCH_USES_GETTIMEOFFSET select ARCH_USES_GETTIMEOFFSET
select HAVE_S3C2410_WATCHDOG
help help
Samsung S5P6442 CPU based systems Samsung S5P6442 CPU based systems
...@@ -701,6 +708,9 @@ config ARCH_S5PC100 ...@@ -701,6 +708,9 @@ config ARCH_S5PC100
select CPU_V7 select CPU_V7
select ARM_L1_CACHE_SHIFT_6 select ARM_L1_CACHE_SHIFT_6
select ARCH_USES_GETTIMEOFFSET select ARCH_USES_GETTIMEOFFSET
select HAVE_S3C2410_I2C
select HAVE_S3C_RTC
select HAVE_S3C2410_WATCHDOG
help help
Samsung S5PC100 series based systems Samsung S5PC100 series based systems
...@@ -711,9 +721,21 @@ config ARCH_S5PV210 ...@@ -711,9 +721,21 @@ config ARCH_S5PV210
select HAVE_CLK select HAVE_CLK
select ARM_L1_CACHE_SHIFT_6 select ARM_L1_CACHE_SHIFT_6
select ARCH_USES_GETTIMEOFFSET select ARCH_USES_GETTIMEOFFSET
select HAVE_S3C2410_I2C
select HAVE_S3C_RTC
select HAVE_S3C2410_WATCHDOG
help help
Samsung S5PV210/S5PC110 series based systems Samsung S5PV210/S5PC110 series based systems
config ARCH_S5PV310
bool "Samsung S5PV310/S5PC210"
select CPU_V7
select GENERIC_GPIO
select HAVE_CLK
select GENERIC_CLOCKEVENTS
help
Samsung S5PV310 series based systems
config ARCH_SHARK config ARCH_SHARK
bool "Shark" bool "Shark"
select CPU_SA110 select CPU_SA110
...@@ -915,6 +937,8 @@ source "arch/arm/mach-s5pc100/Kconfig" ...@@ -915,6 +937,8 @@ source "arch/arm/mach-s5pc100/Kconfig"
source "arch/arm/mach-s5pv210/Kconfig" source "arch/arm/mach-s5pv210/Kconfig"
source "arch/arm/mach-s5pv310/Kconfig"
source "arch/arm/mach-shmobile/Kconfig" source "arch/arm/mach-shmobile/Kconfig"
source "arch/arm/plat-stmp3xxx/Kconfig" source "arch/arm/plat-stmp3xxx/Kconfig"
...@@ -1040,6 +1064,18 @@ config PL310_ERRATA_588369 ...@@ -1040,6 +1064,18 @@ config PL310_ERRATA_588369
is not correctly implemented in PL310 as clean lines are not is not correctly implemented in PL310 as clean lines are not
invalidated as a result of these operations. Note that this errata invalidated as a result of these operations. Note that this errata
uses Texas Instrument's secure monitor api. uses Texas Instrument's secure monitor api.
config ARM_ERRATA_720789
bool "ARM errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID"
depends on CPU_V7 && SMP
help
This option enables the workaround for the 720789 Cortex-A9 (prior to
r2p0) erratum. A faulty ASID can be sent to the other CPUs for the
broadcasted CP15 TLB maintenance operations TLBIASIDIS and TLBIMVAIS.
As a consequence of this erratum, some TLB entries which should be
invalidated are not, resulting in an incoherency in the system page
tables. The workaround changes the TLB flushing routines to invalidate
entries regardless of the ASID.
endmenu endmenu
source "arch/arm/common/Kconfig" source "arch/arm/common/Kconfig"
...@@ -1108,11 +1144,11 @@ config SMP ...@@ -1108,11 +1144,11 @@ config SMP
bool "Symmetric Multi-Processing (EXPERIMENTAL)" bool "Symmetric Multi-Processing (EXPERIMENTAL)"
depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\ depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\
MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\ MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || ARCH_TEGRA) ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
depends on GENERIC_CLOCKEVENTS depends on GENERIC_CLOCKEVENTS
select USE_GENERIC_SMP_HELPERS select USE_GENERIC_SMP_HELPERS
select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500 || \ select HAVE_ARM_SCU if ARCH_REALVIEW || ARCH_OMAP4 || ARCH_S5PV310 ||\
ARCH_VEXPRESS_CA9X4 || ARCH_TEGRA) ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4
help help
This enables support for systems with more than one CPU. If you have This enables support for systems with more than one CPU. If you have
a system with only one CPU, like most personal computers, say N. If a system with only one CPU, like most personal computers, say N. If
...@@ -1182,10 +1218,10 @@ config LOCAL_TIMERS ...@@ -1182,10 +1218,10 @@ config LOCAL_TIMERS
bool "Use local timer interrupts" bool "Use local timer interrupts"
depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \ depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \
REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \ REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || ARCH_TEGRA) ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
default y default y
select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_VEXPRESS || ARCH_OMAP4 || \\ select HAVE_ARM_TWD if ARCH_REALVIEW || ARCH_OMAP4 || ARCH_S5PV310 || \
ARCH_U8500 || ARCH_TEGRA ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS
help help
Enable support for local timers on SMP platforms, rather then the Enable support for local timers on SMP platforms, rather then the
legacy IPI broadcast method. Local timers allows the system legacy IPI broadcast method. Local timers allows the system
...@@ -1196,7 +1232,8 @@ source kernel/Kconfig.preempt ...@@ -1196,7 +1232,8 @@ source kernel/Kconfig.preempt
config HZ config HZ
int int
default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P6440 || ARCH_S5P6442 || ARCH_S5PV210 default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P6440 || \
ARCH_S5P6442 || ARCH_S5PV210 || ARCH_S5PV310
default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
default AT91_TIMER_HZ if ARCH_AT91 default AT91_TIMER_HZ if ARCH_AT91
default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE
......
...@@ -174,6 +174,7 @@ machine-$(CONFIG_ARCH_S5P6440) := s5p6440 ...@@ -174,6 +174,7 @@ machine-$(CONFIG_ARCH_S5P6440) := s5p6440
machine-$(CONFIG_ARCH_S5P6442) := s5p6442 machine-$(CONFIG_ARCH_S5P6442) := s5p6442
machine-$(CONFIG_ARCH_S5PC100) := s5pc100 machine-$(CONFIG_ARCH_S5PC100) := s5pc100
machine-$(CONFIG_ARCH_S5PV210) := s5pv210 machine-$(CONFIG_ARCH_S5PV210) := s5pv210
machine-$(CONFIG_ARCH_S5PV310) := s5pv310
machine-$(CONFIG_ARCH_SA1100) := sa1100 machine-$(CONFIG_ARCH_SA1100) := sa1100
machine-$(CONFIG_ARCH_SHARK) := shark machine-$(CONFIG_ARCH_SHARK) := shark
machine-$(CONFIG_ARCH_SHMOBILE) := shmobile machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
......
...@@ -33,7 +33,7 @@ ifeq ($(CONFIG_CPU_XSCALE),y) ...@@ -33,7 +33,7 @@ ifeq ($(CONFIG_CPU_XSCALE),y)
OBJS += head-xscale.o OBJS += head-xscale.o
endif endif
ifeq ($(CONFIG_PXA_SHARPSL),y) ifeq ($(CONFIG_PXA_SHARPSL_DETECT_MACH_ID),y)
OBJS += head-sharpsl.o OBJS += head-sharpsl.o
endif endif
......
...@@ -170,9 +170,8 @@ not_angel: ...@@ -170,9 +170,8 @@ not_angel:
.text .text
adr r0, LC0 adr r0, LC0
ARM( ldmia r0, {r1, r2, r3, r5, r6, r11, ip, sp}) ldmia r0, {r1, r2, r3, r5, r6, r11, ip}
THUMB( ldmia r0, {r1, r2, r3, r5, r6, r11, ip} ) ldr sp, [r0, #28]
THUMB( ldr sp, [r0, #32] )
#ifdef CONFIG_AUTO_ZRELADDR #ifdef CONFIG_AUTO_ZRELADDR
@ determine final kernel image address @ determine final kernel image address
and r4, pc, #0xf8000000 and r4, pc, #0xf8000000
......
...@@ -263,14 +263,6 @@ static int it8152_pci_platform_notify_remove(struct device *dev) ...@@ -263,14 +263,6 @@ static int it8152_pci_platform_notify_remove(struct device *dev)
return 0; return 0;
} }
int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
{
dev_dbg(dev, "%s: dma_addr %08x, size %08x\n",
__func__, dma_addr, size);
return (dev->bus == &pci_bus_type) &&
((dma_addr + size - PHYS_OFFSET) >= SZ_64M);
}
int __init it8152_pci_setup(int nr, struct pci_sys_data *sys) int __init it8152_pci_setup(int nr, struct pci_sys_data *sys)
{ {
it8152_io.start = IT8152_IO_BASE + 0x12000; it8152_io.start = IT8152_IO_BASE + 0x12000;
......
CONFIG_EXPERIMENTAL=y
CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_KALLSYMS_ALL=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_BLK_DEV_BSG is not set
CONFIG_ARCH_S5PV210=y
CONFIG_S3C_LOWLEVEL_UART_PORT=1
CONFIG_MACH_SMDKC110=y
CONFIG_VMSPLIT_2G=y
CONFIG_PREEMPT=y
CONFIG_AEABI=y
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x20800000,8M console=ttySAC1,115200 init=/linuxrc"
CONFIG_VFP=y
CONFIG_NEON=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192
# CONFIG_MISC_DEVICES is not set
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_SG=y
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_SAMSUNG=y
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_HW_RANDOM=y
# CONFIG_HWMON is not set
# CONFIG_VGA_CONSOLE is not set
# CONFIG_HID_SUPPORT is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_EXT2_FS=y
CONFIG_INOTIFY=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_CRAMFS=y
CONFIG_ROMFS_FS=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_BSD_DISKLABEL=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_PREEMPT is not set
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_SPINLOCK_SLEEP=y
CONFIG_DEBUG_INFO=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_LL=y
CONFIG_EARLY_PRINTK=y
CONFIG_DEBUG_S3C_UART=1
CONFIG_CRC_CCITT=y
...@@ -7,6 +7,11 @@ CONFIG_MODULE_UNLOAD=y ...@@ -7,6 +7,11 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_BLK_DEV_BSG is not set # CONFIG_BLK_DEV_BSG is not set
CONFIG_ARCH_S5PV210=y CONFIG_ARCH_S5PV210=y
CONFIG_S3C_LOWLEVEL_UART_PORT=1 CONFIG_S3C_LOWLEVEL_UART_PORT=1
CONFIG_S3C_DEV_FB=y
CONFIG_S5PV210_SETUP_FB_24BPP=y
CONFIG_MACH_AQUILA=y
CONFIG_MACH_GONI=y
CONFIG_MACH_SMDKC110=y
CONFIG_MACH_SMDKV210=y CONFIG_MACH_SMDKV210=y
CONFIG_VMSPLIT_2G=y CONFIG_VMSPLIT_2G=y
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
......
include include/asm-generic/Kbuild.asm include include/asm-generic/Kbuild.asm
unifdef-y += hwcap.h header-y += hwcap.h
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* cache before the transfer is done, causing old data to be seen by * cache before the transfer is done, causing old data to be seen by
* the CPU. * the CPU.
*/ */
#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES #define ARCH_DMA_MINALIGN L1_CACHE_BYTES
/* /*
* With EABI on ARMv5 and above we must have 64-bit aligned slab pointers. * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers.
......
...@@ -144,16 +144,6 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask) ...@@ -144,16 +144,6 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask)
return 0; return 0;
} }
static inline int dma_get_cache_alignment(void)
{
return 32;
}
static inline int dma_is_consistent(struct device *dev, dma_addr_t handle)
{
return !!arch_is_coherent();
}
/* /*
* DMA errors are defined by all-bits-set in the DMA address. * DMA errors are defined by all-bits-set in the DMA address.
*/ */
...@@ -298,7 +288,15 @@ extern void dmabounce_unregister_dev(struct device *); ...@@ -298,7 +288,15 @@ extern void dmabounce_unregister_dev(struct device *);
* DMA access and 1 if the buffer needs to be bounced. * DMA access and 1 if the buffer needs to be bounced.
* *
*/ */
#ifdef CONFIG_SA1111
extern int dma_needs_bounce(struct device*, dma_addr_t, size_t); extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
#else
static inline int dma_needs_bounce(struct device *dev, dma_addr_t addr,
size_t size)
{
return 0;
}
#endif
/* /*
* The DMA API, implemented by dmabounce.c. See below for descriptions. * The DMA API, implemented by dmabounce.c. See below for descriptions.
......
...@@ -59,6 +59,8 @@ typedef struct user_fp elf_fpregset_t; ...@@ -59,6 +59,8 @@ typedef struct user_fp elf_fpregset_t;
#define R_ARM_THM_CALL 10 #define R_ARM_THM_CALL 10
#define R_ARM_THM_JUMP24 30 #define R_ARM_THM_JUMP24 30
#define R_ARM_THM_MOVW_ABS_NC 47
#define R_ARM_THM_MOVT_ABS 48
/* /*
* These are used to set parameters in the core dumps. * These are used to set parameters in the core dumps.
......
...@@ -48,8 +48,6 @@ struct tracectx { ...@@ -48,8 +48,6 @@ struct tracectx {
/* CoreSight Component Registers */ /* CoreSight Component Registers */
#define CSCR_CLASS 0xff4 #define CSCR_CLASS 0xff4
#define CSCR_PRSR 0x314
#define UNLOCK_MAGIC 0xc5acce55 #define UNLOCK_MAGIC 0xc5acce55
/* ETM control register, "ETM Architecture", 3.3.1 */ /* ETM control register, "ETM Architecture", 3.3.1 */
...@@ -132,6 +130,12 @@ struct tracectx { ...@@ -132,6 +130,12 @@ struct tracectx {
ETMCTRL_BRANCH_OUTPUT | \ ETMCTRL_BRANCH_OUTPUT | \
ETMCTRL_DO_CONTEXTID) ETMCTRL_DO_CONTEXTID)
/* ETM management registers, "ETM Architecture", 3.5.24 */
#define ETMMR_OSLAR 0x300
#define ETMMR_OSLSR 0x304
#define ETMMR_OSSRR 0x308
#define ETMMR_PDSR 0x314
/* ETB registers, "CoreSight Components TRM", 9.3 */ /* ETB registers, "CoreSight Components TRM", 9.3 */
#define ETBR_DEPTH 0x04 #define ETBR_DEPTH 0x04
#define ETBR_STATUS 0x0c #define ETBR_STATUS 0x0c
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
/* Per channel configuration registers */ /* Per channel configuration registers */
#define PL008_Cx_STRIDE (0x20) #define PL080_Cx_STRIDE (0x20)
#define PL080_Cx_BASE(x) ((0x100 + (x * 0x20))) #define PL080_Cx_BASE(x) ((0x100 + (x * 0x20)))
#define PL080_Cx_SRC_ADDR(x) ((0x100 + (x * 0x20))) #define PL080_Cx_SRC_ADDR(x) ((0x100 + (x * 0x20)))
#define PL080_Cx_DST_ADDR(x) ((0x104 + (x * 0x20))) #define PL080_Cx_DST_ADDR(x) ((0x104 + (x * 0x20)))
...@@ -68,6 +68,8 @@ ...@@ -68,6 +68,8 @@
#define PL080_CONTROL_TC_IRQ_EN (1 << 31) #define PL080_CONTROL_TC_IRQ_EN (1 << 31)
#define PL080_CONTROL_PROT_MASK (0x7 << 28) #define PL080_CONTROL_PROT_MASK (0x7 << 28)
#define PL080_CONTROL_PROT_SHIFT (28) #define PL080_CONTROL_PROT_SHIFT (28)
#define PL080_CONTROL_PROT_CACHE (1 << 30)
#define PL080_CONTROL_PROT_BUFF (1 << 29)
#define PL080_CONTROL_PROT_SYS (1 << 28) #define PL080_CONTROL_PROT_SYS (1 << 28)
#define PL080_CONTROL_DST_INCR (1 << 27) #define PL080_CONTROL_DST_INCR (1 << 27)
#define PL080_CONTROL_SRC_INCR (1 << 26) #define PL080_CONTROL_SRC_INCR (1 << 26)
......
...@@ -22,18 +22,23 @@ ...@@ -22,18 +22,23 @@
#define SCOOP_GPWR 0x24 #define SCOOP_GPWR 0x24
#define SCOOP_GPRR 0x28 #define SCOOP_GPRR 0x28
#define SCOOP_GPCR_PA22 ( 1 << 12 ) #define SCOOP_CPR_OUT (1 << 7)
#define SCOOP_GPCR_PA21 ( 1 << 11 ) #define SCOOP_CPR_SD_3V (1 << 2)
#define SCOOP_GPCR_PA20 ( 1 << 10 ) #define SCOOP_CPR_CF_XV (1 << 1)
#define SCOOP_GPCR_PA19 ( 1 << 9 ) #define SCOOP_CPR_CF_3V (1 << 0)
#define SCOOP_GPCR_PA18 ( 1 << 8 )
#define SCOOP_GPCR_PA17 ( 1 << 7 ) #define SCOOP_GPCR_PA22 (1 << 12)
#define SCOOP_GPCR_PA16 ( 1 << 6 ) #define SCOOP_GPCR_PA21 (1 << 11)
#define SCOOP_GPCR_PA15 ( 1 << 5 ) #define SCOOP_GPCR_PA20 (1 << 10)
#define SCOOP_GPCR_PA14 ( 1 << 4 ) #define SCOOP_GPCR_PA19 (1 << 9)
#define SCOOP_GPCR_PA13 ( 1 << 3 ) #define SCOOP_GPCR_PA18 (1 << 8)
#define SCOOP_GPCR_PA12 ( 1 << 2 ) #define SCOOP_GPCR_PA17 (1 << 7)
#define SCOOP_GPCR_PA11 ( 1 << 1 ) #define SCOOP_GPCR_PA16 (1 << 6)
#define SCOOP_GPCR_PA15 (1 << 5)
#define SCOOP_GPCR_PA14 (1 << 4)
#define SCOOP_GPCR_PA13 (1 << 3)
#define SCOOP_GPCR_PA12 (1 << 2)
#define SCOOP_GPCR_PA11 (1 << 1)
struct scoop_config { struct scoop_config {
unsigned short io_out; unsigned short io_out;
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#define TCSETSF2 _IOW('T',0x2D, struct termios2) #define TCSETSF2 _IOW('T',0x2D, struct termios2)
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ #define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
#define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
#define TIOCGRS485 0x542E #define TIOCGRS485 0x542E
#define TIOCSRS485 0x542F #define TIOCSRS485 0x542F
...@@ -81,6 +82,7 @@ ...@@ -81,6 +82,7 @@
#define TIOCPKT_START 8 #define TIOCPKT_START 8
#define TIOCPKT_NOSTOP 16 #define TIOCPKT_NOSTOP 16
#define TIOCPKT_DOSTOP 32 #define TIOCPKT_DOSTOP 32
#define TIOCPKT_IOCTL 64
#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
......
...@@ -177,6 +177,7 @@ struct ktermios { ...@@ -177,6 +177,7 @@ struct ktermios {
#define FLUSHO 0010000 #define FLUSHO 0010000
#define PENDIN 0040000 #define PENDIN 0040000
#define IEXTEN 0100000 #define IEXTEN 0100000
#define EXTPROC 0200000
/* tcflow() and TCXONC use these */ /* tcflow() and TCXONC use these */
#define TCOOFF 0 #define TCOOFF 0
......
...@@ -378,7 +378,11 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm) ...@@ -378,7 +378,11 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)
if (tlb_flag(TLB_V6_I_ASID)) if (tlb_flag(TLB_V6_I_ASID))
asm("mcr p15, 0, %0, c8, c5, 2" : : "r" (asid) : "cc"); asm("mcr p15, 0, %0, c8, c5, 2" : : "r" (asid) : "cc");
if (tlb_flag(TLB_V7_UIS_ASID)) if (tlb_flag(TLB_V7_UIS_ASID))
#ifdef CONFIG_ARM_ERRATA_720789
asm("mcr p15, 0, %0, c8, c3, 0" : : "r" (zero) : "cc");
#else
asm("mcr p15, 0, %0, c8, c3, 2" : : "r" (asid) : "cc"); asm("mcr p15, 0, %0, c8, c3, 2" : : "r" (asid) : "cc");
#endif
if (tlb_flag(TLB_BTB)) { if (tlb_flag(TLB_BTB)) {
/* flush the branch target cache */ /* flush the branch target cache */
...@@ -424,7 +428,11 @@ local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) ...@@ -424,7 +428,11 @@ local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
if (tlb_flag(TLB_V6_I_PAGE)) if (tlb_flag(TLB_V6_I_PAGE))
asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (uaddr) : "cc"); asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (uaddr) : "cc");
if (tlb_flag(TLB_V7_UIS_PAGE)) if (tlb_flag(TLB_V7_UIS_PAGE))
#ifdef CONFIG_ARM_ERRATA_720789
asm("mcr p15, 0, %0, c8, c3, 3" : : "r" (uaddr & PAGE_MASK) : "cc");
#else
asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (uaddr) : "cc"); asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (uaddr) : "cc");
#endif
if (tlb_flag(TLB_BTB)) { if (tlb_flag(TLB_BTB)) {
/* flush the branch target cache */ /* flush the branch target cache */
......
...@@ -92,75 +92,111 @@ ENDPROC(ret_from_fork) ...@@ -92,75 +92,111 @@ ENDPROC(ret_from_fork)
#define CALL(x) .long x #define CALL(x) .long x
#ifdef CONFIG_FUNCTION_TRACER #ifdef CONFIG_FUNCTION_TRACER
/*
* When compiling with -pg, gcc inserts a call to the mcount routine at the
* start of every function. In mcount, apart from the function's address (in
* lr), we need to get hold of the function's caller's address.
*
* Older GCCs (pre-4.4) inserted a call to a routine called mcount like this:
*
* bl mcount
*
* These versions have the limitation that in order for the mcount routine to
* be able to determine the function's caller's address, an APCS-style frame
* pointer (which is set up with something like the code below) is required.
*
* mov ip, sp
* push {fp, ip, lr, pc}
* sub fp, ip, #4
*
* With EABI, these frame pointers are not available unless -mapcs-frame is
* specified, and if building as Thumb-2, not even then.
*
* Newer GCCs (4.4+) solve this problem by introducing a new version of mcount,
* with call sites like:
*
* push {lr}
* bl __gnu_mcount_nc
*
* With these compilers, frame pointers are not necessary.
*
* mcount can be thought of as a function called in the middle of a subroutine
* call. As such, it needs to be transparent for both the caller and the
* callee: the original lr needs to be restored when leaving mcount, and no
* registers should be clobbered. (In the __gnu_mcount_nc implementation, we
* clobber the ip register. This is OK because the ARM calling convention
* allows it to be clobbered in subroutines and doesn't use it to hold
* parameters.)
*/
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
ENTRY(mcount) ENTRY(mcount)
stmdb sp!, {r0-r3, lr} stmdb sp!, {r0-r3, lr}
mov r0, lr mov r0, lr
sub r0, r0, #MCOUNT_INSN_SIZE sub r0, r0, #MCOUNT_INSN_SIZE
.globl mcount_call .globl mcount_call
mcount_call: mcount_call:
bl ftrace_stub bl ftrace_stub
ldr lr, [fp, #-4] @ restore lr ldr lr, [fp, #-4] @ restore lr
ldmia sp!, {r0-r3, pc} ldmia sp!, {r0-r3, pc}
ENTRY(ftrace_caller) ENTRY(ftrace_caller)
stmdb sp!, {r0-r3, lr} stmdb sp!, {r0-r3, lr}
ldr r1, [fp, #-4] ldr r1, [fp, #-4]
mov r0, lr mov r0, lr
sub r0, r0, #MCOUNT_INSN_SIZE sub r0, r0, #MCOUNT_INSN_SIZE
.globl ftrace_call .globl ftrace_call
ftrace_call: ftrace_call:
bl ftrace_stub bl ftrace_stub
ldr lr, [fp, #-4] @ restore lr ldr lr, [fp, #-4] @ restore lr
ldmia sp!, {r0-r3, pc} ldmia sp!, {r0-r3, pc}
#else #else
ENTRY(__gnu_mcount_nc) ENTRY(__gnu_mcount_nc)
stmdb sp!, {r0-r3, lr} stmdb sp!, {r0-r3, lr}
ldr r0, =ftrace_trace_function ldr r0, =ftrace_trace_function
ldr r2, [r0] ldr r2, [r0]
adr r0, ftrace_stub adr r0, ftrace_stub
cmp r0, r2 cmp r0, r2
bne gnu_trace bne gnu_trace
ldmia sp!, {r0-r3, ip, lr} ldmia sp!, {r0-r3, ip, lr}
mov pc, ip mov pc, ip
gnu_trace: gnu_trace:
ldr r1, [sp, #20] @ lr of instrumented routine ldr r1, [sp, #20] @ lr of instrumented routine
mov r0, lr mov r0, lr
sub r0, r0, #MCOUNT_INSN_SIZE sub r0, r0, #MCOUNT_INSN_SIZE
mov lr, pc mov lr, pc
mov pc, r2 mov pc, r2
ldmia sp!, {r0-r3, ip, lr} ldmia sp!, {r0-r3, ip, lr}
mov pc, ip mov pc, ip
ENTRY(mcount) ENTRY(mcount)
stmdb sp!, {r0-r3, lr} stmdb sp!, {r0-r3, lr}
ldr r0, =ftrace_trace_function ldr r0, =ftrace_trace_function
ldr r2, [r0] ldr r2, [r0]
adr r0, ftrace_stub adr r0, ftrace_stub
cmp r0, r2 cmp r0, r2
bne trace bne trace
ldr lr, [fp, #-4] @ restore lr ldr lr, [fp, #-4] @ restore lr
ldmia sp!, {r0-r3, pc} ldmia sp!, {r0-r3, pc}
trace: trace:
ldr r1, [fp, #-4] @ lr of instrumented routine ldr r1, [fp, #-4] @ lr of instrumented routine
mov r0, lr mov r0, lr
sub r0, r0, #MCOUNT_INSN_SIZE sub r0, r0, #MCOUNT_INSN_SIZE
mov lr, pc mov lr, pc
mov pc, r2 mov pc, r2
ldr lr, [fp, #-4] @ restore lr ldr lr, [fp, #-4] @ restore lr
ldmia sp!, {r0-r3, pc} ldmia sp!, {r0-r3, pc}
#endif /* CONFIG_DYNAMIC_FTRACE */ #endif /* CONFIG_DYNAMIC_FTRACE */
.globl ftrace_stub .globl ftrace_stub
ftrace_stub: ftrace_stub:
mov pc, lr mov pc, lr
#endif /* CONFIG_FUNCTION_TRACER */ #endif /* CONFIG_FUNCTION_TRACER */
......
...@@ -543,7 +543,9 @@ static int __init etm_probe(struct amba_device *dev, struct amba_id *id) ...@@ -543,7 +543,9 @@ static int __init etm_probe(struct amba_device *dev, struct amba_id *id)
t->etm_portsz = 1; t->etm_portsz = 1;
etm_unlock(t); etm_unlock(t);
ret = etm_readl(t, CSCR_PRSR); (void)etm_readl(t, ETMMR_PDSR);
/* dummy first read */
(void)etm_readl(&tracer, ETMMR_OSSRR);
t->ncmppairs = etm_readl(t, ETMR_CONFCODE) & 0xf; t->ncmppairs = etm_readl(t, ETMR_CONFCODE) & 0xf;
etm_writel(t, 0x440, ETMR_CTRL); etm_writel(t, 0x440, ETMR_CTRL);
......
...@@ -102,7 +102,9 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex, ...@@ -102,7 +102,9 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
unsigned long loc; unsigned long loc;
Elf32_Sym *sym; Elf32_Sym *sym;
s32 offset; s32 offset;
#ifdef CONFIG_THUMB2_KERNEL
u32 upper, lower, sign, j1, j2; u32 upper, lower, sign, j1, j2;
#endif
offset = ELF32_R_SYM(rel->r_info); offset = ELF32_R_SYM(rel->r_info);
if (offset < 0 || offset > (symsec->sh_size / sizeof(Elf32_Sym))) { if (offset < 0 || offset > (symsec->sh_size / sizeof(Elf32_Sym))) {
...@@ -185,6 +187,7 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex, ...@@ -185,6 +187,7 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
(offset & 0x0fff); (offset & 0x0fff);
break; break;
#ifdef CONFIG_THUMB2_KERNEL
case R_ARM_THM_CALL: case R_ARM_THM_CALL:
case R_ARM_THM_JUMP24: case R_ARM_THM_JUMP24:
upper = *(u16 *)loc; upper = *(u16 *)loc;
...@@ -233,9 +236,40 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex, ...@@ -233,9 +236,40 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
*(u16 *)(loc + 2) = (u16)((lower & 0xd000) | *(u16 *)(loc + 2) = (u16)((lower & 0xd000) |
(j1 << 13) | (j2 << 11) | (j1 << 13) | (j2 << 11) |
((offset >> 1) & 0x07ff)); ((offset >> 1) & 0x07ff));
break;
case R_ARM_THM_MOVW_ABS_NC:
case R_ARM_THM_MOVT_ABS:
upper = *(u16 *)loc; upper = *(u16 *)loc;
lower = *(u16 *)(loc + 2); lower = *(u16 *)(loc + 2);
/*
* MOVT/MOVW instructions encoding in Thumb-2:
*
* i = upper[10]
* imm4 = upper[3:0]
* imm3 = lower[14:12]
* imm8 = lower[7:0]
*
* imm16 = imm4:i:imm3:imm8
*/
offset = ((upper & 0x000f) << 12) |
((upper & 0x0400) << 1) |
((lower & 0x7000) >> 4) | (lower & 0x00ff);
offset = (offset ^ 0x8000) - 0x8000;
offset += sym->st_value;
if (ELF32_R_TYPE(rel->r_info) == R_ARM_THM_MOVT_ABS)
offset >>= 16;
*(u16 *)loc = (u16)((upper & 0xfbf0) |
((offset & 0xf000) >> 12) |
((offset & 0x0800) >> 1));
*(u16 *)(loc + 2) = (u16)((lower & 0x8f00) |
((offset & 0x0700) << 4) |
(offset & 0x00ff));
break; break;
#endif
default: default:
printk(KERN_ERR "%s: unknown relocation: %u\n", printk(KERN_ERR "%s: unknown relocation: %u\n",
......
...@@ -62,7 +62,7 @@ asmlinkage int sys_vfork(struct pt_regs *regs) ...@@ -62,7 +62,7 @@ asmlinkage int sys_vfork(struct pt_regs *regs)
/* sys_execve() executes a new program. /* sys_execve() executes a new program.
* This is called indirectly via a small wrapper * This is called indirectly via a small wrapper
*/ */
asmlinkage int sys_execve(char __user *filenamei, char __user * __user *argv, asmlinkage int sys_execve(const char __user *filenamei, char __user * __user *argv,
char __user * __user *envp, struct pt_regs *regs) char __user * __user *envp, struct pt_regs *regs)
{ {
int error; int error;
...@@ -84,7 +84,7 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[]) ...@@ -84,7 +84,7 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[])
int ret; int ret;
memset(&regs, 0, sizeof(struct pt_regs)); memset(&regs, 0, sizeof(struct pt_regs));
ret = do_execve((char *)filename, (char __user * __user *)argv, ret = do_execve(filename, (char __user * __user *)argv,
(char __user * __user *)envp, &regs); (char __user * __user *)envp, &regs);
if (ret < 0) if (ret < 0)
goto out; goto out;
......
...@@ -141,7 +141,7 @@ static long cp_oldabi_stat64(struct kstat *stat, ...@@ -141,7 +141,7 @@ static long cp_oldabi_stat64(struct kstat *stat,
return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
} }
asmlinkage long sys_oabi_stat64(char __user * filename, asmlinkage long sys_oabi_stat64(const char __user * filename,
struct oldabi_stat64 __user * statbuf) struct oldabi_stat64 __user * statbuf)
{ {
struct kstat stat; struct kstat stat;
...@@ -151,7 +151,7 @@ asmlinkage long sys_oabi_stat64(char __user * filename, ...@@ -151,7 +151,7 @@ asmlinkage long sys_oabi_stat64(char __user * filename,
return error; return error;
} }
asmlinkage long sys_oabi_lstat64(char __user * filename, asmlinkage long sys_oabi_lstat64(const char __user * filename,
struct oldabi_stat64 __user * statbuf) struct oldabi_stat64 __user * statbuf)
{ {
struct kstat stat; struct kstat stat;
...@@ -172,7 +172,7 @@ asmlinkage long sys_oabi_fstat64(unsigned long fd, ...@@ -172,7 +172,7 @@ asmlinkage long sys_oabi_fstat64(unsigned long fd,
} }
asmlinkage long sys_oabi_fstatat64(int dfd, asmlinkage long sys_oabi_fstatat64(int dfd,
char __user *filename, const char __user *filename,
struct oldabi_stat64 __user *statbuf, struct oldabi_stat64 __user *statbuf,
int flag) int flag)
{ {
......
...@@ -75,7 +75,7 @@ static struct at91_usbh_data __initdata cam60_usbh_data = { ...@@ -75,7 +75,7 @@ static struct at91_usbh_data __initdata cam60_usbh_data = {
* SPI devices. * SPI devices.
*/ */
#if defined(CONFIG_MTD_DATAFLASH) #if defined(CONFIG_MTD_DATAFLASH)
static struct mtd_partition __initdata cam60_spi_partitions[] = { static struct mtd_partition cam60_spi_partitions[] = {
{ {
.name = "BOOT1", .name = "BOOT1",
.offset = 0, .offset = 0,
...@@ -98,14 +98,14 @@ static struct mtd_partition __initdata cam60_spi_partitions[] = { ...@@ -98,14 +98,14 @@ static struct mtd_partition __initdata cam60_spi_partitions[] = {
}, },
}; };
static struct flash_platform_data __initdata cam60_spi_flash_platform_data = { static struct flash_platform_data cam60_spi_flash_platform_data = {
.name = "spi_flash", .name = "spi_flash",
.parts = cam60_spi_partitions, .parts = cam60_spi_partitions,
.nr_parts = ARRAY_SIZE(cam60_spi_partitions) .nr_parts = ARRAY_SIZE(cam60_spi_partitions)
}; };
#endif #endif
static struct spi_board_info cam60_spi_devices[] = { static struct spi_board_info cam60_spi_devices[] __initdata = {
#if defined(CONFIG_MTD_DATAFLASH) #if defined(CONFIG_MTD_DATAFLASH)
{ /* DataFlash chip */ { /* DataFlash chip */
.modalias = "mtd_dataflash", .modalias = "mtd_dataflash",
......
...@@ -69,13 +69,6 @@ ...@@ -69,13 +69,6 @@
#define SYSPLD_VIRT_BASE 0xfe000000 #define SYSPLD_VIRT_BASE 0xfe000000
#define SYSPLD_BASE SYSPLD_VIRT_BASE #define SYSPLD_BASE SYSPLD_VIRT_BASE
#ifndef __ASSEMBLER__
#define PCIO_BASE IO_BASE
#endif
#if defined (CONFIG_ARCH_AUTCPU12) #if defined (CONFIG_ARCH_AUTCPU12)
#define CS89712_VIRT_BASE CLPS7111_VIRT_BASE #define CS89712_VIRT_BASE CLPS7111_VIRT_BASE
......
...@@ -2,6 +2,13 @@ if ARCH_GEMINI ...@@ -2,6 +2,13 @@ if ARCH_GEMINI
menu "Cortina Systems Gemini Implementations" menu "Cortina Systems Gemini Implementations"
config MACH_NAS4220B
bool "Raidsonic NAS-4220-B"
select GEMINI_MEM_SWAP
help
Say Y here if you intend to run this kernel on a
Raidsonic NAS-4220-B.
config MACH_RUT100 config MACH_RUT100
bool "Teltonika RUT100" bool "Teltonika RUT100"
select GEMINI_MEM_SWAP select GEMINI_MEM_SWAP
...@@ -9,6 +16,20 @@ config MACH_RUT100 ...@@ -9,6 +16,20 @@ config MACH_RUT100
Say Y here if you intend to run this kernel on a Say Y here if you intend to run this kernel on a
Teltonika 3G Router RUT100. Teltonika 3G Router RUT100.
config MACH_WBD111
bool "Wiliboard WBD-111"
select GEMINI_MEM_SWAP
help
Say Y here if you intend to run this kernel on a
Wiliboard WBD-111.
config MACH_WBD222
bool "Wiliboard WBD-222"
select GEMINI_MEM_SWAP
help
Say Y here if you intend to run this kernel on a
Wiliboard WBD-222.
endmenu endmenu
config GEMINI_MEM_SWAP config GEMINI_MEM_SWAP
......
...@@ -7,4 +7,7 @@ ...@@ -7,4 +7,7 @@
obj-y := irq.o mm.o time.o devices.o gpio.o obj-y := irq.o mm.o time.o devices.o gpio.o
# Board-specific support # Board-specific support
obj-$(CONFIG_MACH_NAS4220B) += board-nas4220b.o
obj-$(CONFIG_MACH_RUT100) += board-rut1xx.o obj-$(CONFIG_MACH_RUT100) += board-rut1xx.o
obj-$(CONFIG_MACH_WBD111) += board-wbd111.o
obj-$(CONFIG_MACH_WBD222) += board-wbd222.o
/*
* Support for Raidsonic NAS-4220-B
*
* Copyright (C) 2009 Janos Laube <janos.dev@gmail.com>
*
* based on rut1xx.c
* Copyright (C) 2008 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/leds.h>
#include <linux/input.h>
#include <linux/gpio_keys.h>
#include <linux/mdio-gpio.h>
#include <linux/io.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <mach/hardware.h>
#include <mach/global_reg.h>
#include "common.h"
static struct sys_timer ib4220b_timer = {
.init = gemini_timer_init,
};
static struct gpio_led ib4220b_leds[] = {
{
.name = "nas4220b:orange:hdd",
.default_trigger = "none",
.gpio = 60,
},
{
.name = "nas4220b:green:os",
.default_trigger = "heartbeat",
.gpio = 62,
},
};
static struct gpio_led_platform_data ib4220b_leds_data = {
.num_leds = ARRAY_SIZE(ib4220b_leds),
.leds = ib4220b_leds,
};
static struct platform_device ib4220b_led_device = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &ib4220b_leds_data,
},
};
static struct gpio_keys_button ib4220b_keys[] = {
{
.code = KEY_SETUP,
.gpio = 61,
.active_low = 1,
.desc = "Backup Button",
.type = EV_KEY,
},
{
.code = KEY_RESTART,
.gpio = 63,
.active_low = 1,
.desc = "Softreset Button",
.type = EV_KEY,
},
};
static struct gpio_keys_platform_data ib4220b_keys_data = {
.buttons = ib4220b_keys,
.nbuttons = ARRAY_SIZE(ib4220b_keys),
};
static struct platform_device ib4220b_key_device = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &ib4220b_keys_data,
},
};
static void __init ib4220b_init(void)
{
gemini_gpio_init();
platform_register_uart();
platform_register_pflash(SZ_16M, NULL, 0);
platform_device_register(&ib4220b_led_device);
platform_device_register(&ib4220b_key_device);
}
MACHINE_START(NAS4220B, "Raidsonic NAS IB-4220-B")
.phys_io = 0x7fffc000,
.io_pg_offst = ((0xffffc000) >> 18) & 0xfffc,
.boot_params = 0x100,
.map_io = gemini_map_io,
.init_irq = gemini_init_irq,
.timer = &ib4220b_timer,
.init_machine = ib4220b_init,
MACHINE_END
/*
* Support for Wiliboard WBD-111
*
* Copyright (C) 2009 Imre Kaloz <kaloz@openwrt.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/leds.h>
#include <linux/input.h>
#include <linux/skbuff.h>
#include <linux/gpio_keys.h>
#include <linux/mdio-gpio.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include "common.h"
static struct gpio_keys_button wbd111_keys[] = {
{
.code = KEY_SETUP,
.gpio = 5,
.active_low = 1,
.desc = "reset",
.type = EV_KEY,
},
};
static struct gpio_keys_platform_data wbd111_keys_data = {
.buttons = wbd111_keys,
.nbuttons = ARRAY_SIZE(wbd111_keys),
};
static struct platform_device wbd111_keys_device = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &wbd111_keys_data,
},
};
static struct gpio_led wbd111_leds[] = {
{
.name = "L3red",
.gpio = 1,
},
{
.name = "L4green",
.gpio = 2,
},
{
.name = "L4red",
.gpio = 3,
},
{
.name = "L3green",
.gpio = 5,
},
};
static struct gpio_led_platform_data wbd111_leds_data = {
.num_leds = ARRAY_SIZE(wbd111_leds),
.leds = wbd111_leds,
};
static struct platform_device wbd111_leds_device = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &wbd111_leds_data,
},
};
static struct sys_timer wbd111_timer = {
.init = gemini_timer_init,
};
#ifdef CONFIG_MTD_PARTITIONS
static struct mtd_partition wbd111_partitions[] = {
{
.name = "RedBoot",
.offset = 0,
.size = 0x020000,
.mask_flags = MTD_WRITEABLE,
} , {
.name = "kernel",
.offset = 0x020000,
.size = 0x100000,
} , {
.name = "rootfs",
.offset = 0x120000,
.size = 0x6a0000,
} , {
.name = "VCTL",
.offset = 0x7c0000,
.size = 0x010000,
.mask_flags = MTD_WRITEABLE,
} , {
.name = "cfg",
.offset = 0x7d0000,
.size = 0x010000,
.mask_flags = MTD_WRITEABLE,
} , {
.name = "FIS",
.offset = 0x7e0000,
.size = 0x010000,
.mask_flags = MTD_WRITEABLE,
}
};
#define wbd111_num_partitions ARRAY_SIZE(wbd111_partitions)
#else
#define wbd111_partitions NULL
#define wbd111_num_partitions 0
#endif /* CONFIG_MTD_PARTITIONS */
static void __init wbd111_init(void)
{
gemini_gpio_init();
platform_register_uart();
platform_register_pflash(SZ_8M, wbd111_partitions,
wbd111_num_partitions);
platform_device_register(&wbd111_leds_device);
platform_device_register(&wbd111_keys_device);
}
MACHINE_START(WBD111, "Wiliboard WBD-111")
.phys_io = 0x7fffc000,
.io_pg_offst = ((0xffffc000) >> 18) & 0xfffc,
.boot_params = 0x100,
.map_io = gemini_map_io,
.init_irq = gemini_init_irq,
.timer = &wbd111_timer,
.init_machine = wbd111_init,
MACHINE_END
此差异已折叠。
...@@ -182,8 +182,6 @@ ...@@ -182,8 +182,6 @@
#define SERIAL_ENABLE_EN (1<<0) #define SERIAL_ENABLE_EN (1<<0)
/* General defines to pacify gcc */ /* General defines to pacify gcc */
#define PCIO_BASE (0) /* for inb, outb and friends */
#define PCIO_VIRT PCIO_BASE
#define __ASM_ARCH_HARDWARE_INCMACH_H #define __ASM_ARCH_HARDWARE_INCMACH_H
#include "boards.h" #include "boards.h"
......
...@@ -408,7 +408,7 @@ static void __init pca100_init(void) ...@@ -408,7 +408,7 @@ static void __init pca100_init(void)
mxc_gpio_mode(GPIO_PORTD | 27 | GPIO_GPIO | GPIO_IN); mxc_gpio_mode(GPIO_PORTD | 27 | GPIO_GPIO | GPIO_IN);
spi_register_board_info(pca100_spi_board_info, spi_register_board_info(pca100_spi_board_info,
ARRAY_SIZE(pca100_spi_board_info)); ARRAY_SIZE(pca100_spi_board_info));
imx27_add_spi_imx0(&pca100_spi_0_data); imx27_add_spi_imx0(&pca100_spi0_data);
#endif #endif
gpio_request(OTG_PHY_CS_GPIO, "usb-otg-cs"); gpio_request(OTG_PHY_CS_GPIO, "usb-otg-cs");
......
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
#define IO_SIZE 0x0B000000 // How much? #define IO_SIZE 0x0B000000 // How much?
#define IO_START INTEGRATOR_HDR_BASE // PA of IO #define IO_START INTEGRATOR_HDR_BASE // PA of IO
#define PCIO_BASE PCI_IO_VADDR
#define PCIMEM_BASE PCI_MEMORY_VADDR #define PCIMEM_BASE PCI_MEMORY_VADDR
#define pcibios_assign_all_busses() 1 #define pcibios_assign_all_busses() 1
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#define __ASM_ARCH_HARDWARE_H #define __ASM_ARCH_HARDWARE_H
/* PCI IO info */ /* PCI IO info */
#define PCIO_BASE IXP23XX_PCI_IO_VIRT
#define PCIBIOS_MIN_IO 0x00000000 #define PCIBIOS_MIN_IO 0x00000000
#define PCIBIOS_MIN_MEM 0xe0000000 #define PCIBIOS_MIN_MEM 0xe0000000
......
...@@ -140,6 +140,14 @@ config MACH_FSG ...@@ -140,6 +140,14 @@ config MACH_FSG
FSG-3 device. For more information on this platform, FSG-3 device. For more information on this platform,
see http://www.nslu2-linux.org/wiki/FSG3/HomePage see http://www.nslu2-linux.org/wiki/FSG3/HomePage
config MACH_ARCOM_VULCAN
bool
prompt "Arcom/Eurotech Vulcan"
select PCI
help
Say 'Y' here if you want your kernel to support Arcom's
Vulcan board.
# #
# Certain registers and IRQs are only enabled if supporting IXP465 CPUs # Certain registers and IRQs are only enabled if supporting IXP465 CPUs
# #
......
...@@ -16,6 +16,7 @@ obj-pci-$(CONFIG_MACH_DSMG600) += dsmg600-pci.o ...@@ -16,6 +16,7 @@ obj-pci-$(CONFIG_MACH_DSMG600) += dsmg600-pci.o
obj-pci-$(CONFIG_MACH_GATEWAY7001) += gateway7001-pci.o obj-pci-$(CONFIG_MACH_GATEWAY7001) += gateway7001-pci.o
obj-pci-$(CONFIG_MACH_WG302V2) += wg302v2-pci.o obj-pci-$(CONFIG_MACH_WG302V2) += wg302v2-pci.o
obj-pci-$(CONFIG_MACH_FSG) += fsg-pci.o obj-pci-$(CONFIG_MACH_FSG) += fsg-pci.o
obj-pci-$(CONFIG_MACH_ARCOM_VULCAN) += vulcan-pci.o
obj-y += common.o obj-y += common.o
...@@ -31,6 +32,7 @@ obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o ...@@ -31,6 +32,7 @@ obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o
obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o
obj-$(CONFIG_MACH_FSG) += fsg-setup.o obj-$(CONFIG_MACH_FSG) += fsg-setup.o
obj-$(CONFIG_MACH_GORAMO_MLR) += goramo_mlr.o obj-$(CONFIG_MACH_GORAMO_MLR) += goramo_mlr.o
obj-$(CONFIG_MACH_ARCOM_VULCAN) += vulcan-setup.o
obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o
obj-$(CONFIG_IXP4XX_QMGR) += ixp4xx_qmgr.o obj-$(CONFIG_IXP4XX_QMGR) += ixp4xx_qmgr.o
......
...@@ -16,8 +16,10 @@ ...@@ -16,8 +16,10 @@
moveq \rx, #0xc8000000 moveq \rx, #0xc8000000
movne \rx, #0xff000000 movne \rx, #0xff000000
orrne \rx, \rx, #0x00b00000 orrne \rx, \rx, #0x00b00000
#ifdef __ARMEB__
add \rx,\rx,#3 @ Uart regs are at off set of 3 if add \rx,\rx,#3 @ Uart regs are at off set of 3 if
@ byte writes used - Big Endian. @ byte writes used - Big Endian.
#endif
.endm .endm
#define UART_SHIFT 2 #define UART_SHIFT 2
......
...@@ -353,7 +353,7 @@ static inline unsigned int ioread8(const void __iomem *addr) ...@@ -353,7 +353,7 @@ static inline unsigned int ioread8(const void __iomem *addr)
return (unsigned int)inb(port & PIO_MASK); return (unsigned int)inb(port & PIO_MASK);
else else
#ifndef CONFIG_IXP4XX_INDIRECT_PCI #ifndef CONFIG_IXP4XX_INDIRECT_PCI
return (unsigned int)__raw_readb(port); return (unsigned int)__raw_readb(addr);
#else #else
return (unsigned int)__indirect_readb(addr); return (unsigned int)__indirect_readb(addr);
#endif #endif
...@@ -381,7 +381,7 @@ static inline unsigned int ioread16(const void __iomem *addr) ...@@ -381,7 +381,7 @@ static inline unsigned int ioread16(const void __iomem *addr)
return (unsigned int)inw(port & PIO_MASK); return (unsigned int)inw(port & PIO_MASK);
else else
#ifndef CONFIG_IXP4XX_INDIRECT_PCI #ifndef CONFIG_IXP4XX_INDIRECT_PCI
return le16_to_cpu(__raw_readw((u32)port)); return le16_to_cpu((__force __le16)__raw_readw(addr));
#else #else
return (unsigned int)__indirect_readw(addr); return (unsigned int)__indirect_readw(addr);
#endif #endif
...@@ -440,7 +440,7 @@ static inline void iowrite8(u8 value, void __iomem *addr) ...@@ -440,7 +440,7 @@ static inline void iowrite8(u8 value, void __iomem *addr)
outb(value, port & PIO_MASK); outb(value, port & PIO_MASK);
else else
#ifndef CONFIG_IXP4XX_INDIRECT_PCI #ifndef CONFIG_IXP4XX_INDIRECT_PCI
__raw_writeb(value, port); __raw_writeb(value, addr);
#else #else
__indirect_writeb(value, addr); __indirect_writeb(value, addr);
#endif #endif
......
...@@ -100,6 +100,7 @@ ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) ...@@ -100,6 +100,7 @@ ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
static struct platform_nand_data ixdp425_flash_nand_data = { static struct platform_nand_data ixdp425_flash_nand_data = {
.chip = { .chip = {
.nr_chips = 1,
.chip_delay = 30, .chip_delay = 30,
.options = NAND_NO_AUTOINCR, .options = NAND_NO_AUTOINCR,
#ifdef CONFIG_MTD_PARTITIONS #ifdef CONFIG_MTD_PARTITIONS
......
此差异已折叠。
此差异已折叠。
...@@ -150,9 +150,8 @@ static void __init common_init(void) ...@@ -150,9 +150,8 @@ static void __init common_init(void)
MACHINE_START(ASPENITE, "PXA168-based Aspenite Development Platform") MACHINE_START(ASPENITE, "PXA168-based Aspenite Development Platform")
.phys_io = APB_PHYS_BASE, .phys_io = APB_PHYS_BASE,
.boot_params = 0x00000100,
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
.map_io = pxa_map_io, .map_io = mmp_map_io,
.init_irq = pxa168_init_irq, .init_irq = pxa168_init_irq,
.timer = &pxa168_timer, .timer = &pxa168_timer,
.init_machine = common_init, .init_machine = common_init,
...@@ -160,9 +159,8 @@ MACHINE_END ...@@ -160,9 +159,8 @@ MACHINE_END
MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform") MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform")
.phys_io = APB_PHYS_BASE, .phys_io = APB_PHYS_BASE,
.boot_params = 0x00000100,
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
.map_io = pxa_map_io, .map_io = mmp_map_io,
.init_irq = pxa168_init_irq, .init_irq = pxa168_init_irq,
.timer = &pxa168_timer, .timer = &pxa168_timer,
.init_machine = common_init, .init_machine = common_init,
......
...@@ -42,9 +42,8 @@ static void __init avengers_lite_init(void) ...@@ -42,9 +42,8 @@ static void __init avengers_lite_init(void)
MACHINE_START(AVENGERS_LITE, "PXA168 Avengers lite Development Platform") MACHINE_START(AVENGERS_LITE, "PXA168 Avengers lite Development Platform")
.phys_io = APB_PHYS_BASE, .phys_io = APB_PHYS_BASE,
.boot_params = 0x00000100,
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
.map_io = pxa_map_io, .map_io = mmp_map_io,
.init_irq = pxa168_init_irq, .init_irq = pxa168_init_irq,
.timer = &pxa168_timer, .timer = &pxa168_timer,
.init_machine = avengers_lite_init, .init_machine = avengers_lite_init,
......
...@@ -31,7 +31,7 @@ static struct map_desc standard_io_desc[] __initdata = { ...@@ -31,7 +31,7 @@ static struct map_desc standard_io_desc[] __initdata = {
}, },
}; };
void __init pxa_map_io(void) void __init mmp_map_io(void)
{ {
iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc)); iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
} }
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册